@riverbankcms/sdk 0.130.0 → 0.130.2

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 (244) hide show
  1. package/CHANGELOG.md +85 -0
  2. package/README.md +1 -1
  3. package/dist/{PreviewEditorSidebar-DiEpbOdw.mjs → PreviewEditorSidebar-BY-1QdE2.mjs} +18 -15
  4. package/dist/{PreviewEditorUI-C6MvxnIa.mjs → PreviewEditorUI-BS34jI9_.mjs} +3 -3
  5. package/dist/{PreviewQueryProvider-C2rnoPz6.mjs → PreviewQueryProvider-BD0kOjtI.mjs} +1 -1
  6. package/dist/{SdkPreviewModeRuntime-DRXA_m5L.mjs → SdkPreviewModeRuntime-B1pWnhu-.mjs} +48 -21
  7. package/dist/{SiteChromeCustomizeContext-BTHdv5_-.mjs → SiteChromeCustomizeContext-BhUG_72i.mjs} +6180 -5076
  8. package/dist/_dts/ai/src/contracts/proposals.d.ts +309 -32
  9. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +969 -112
  10. package/dist/_dts/api/src/accountApi.d.ts +213 -0
  11. package/dist/_dts/api/src/accountEndpointDefinitions.d.ts +30 -0
  12. package/dist/_dts/api/src/accountEndpoints.d.ts +254 -0
  13. package/dist/_dts/api/src/apiCallParams.d.ts +60 -0
  14. package/dist/_dts/api/src/bookingConfig.d.ts +10 -20
  15. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +4 -5
  16. package/dist/_dts/api/src/bookingManagementEventEndpointTypes.d.ts +15 -0
  17. package/dist/_dts/api/src/bookingSettingsSections.d.ts +9 -0
  18. package/dist/_dts/api/src/bookingVerticals.d.ts +2 -2
  19. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +2 -0
  20. package/dist/_dts/api/src/endpoints.d.ts +1253 -1209
  21. package/dist/_dts/api/src/event-destination-policy.d.ts +1 -1
  22. package/dist/_dts/api/src/eventManagementContracts.d.ts +83 -7
  23. package/dist/_dts/api/src/eventManagementEndpointDefinitions.d.ts +26 -0
  24. package/dist/_dts/api/src/eventSeriesPresentationPreset.d.ts +12 -0
  25. package/dist/_dts/api/src/index.d.ts +11 -3
  26. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -0
  27. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -0
  28. package/dist/_dts/api/src/oauth.d.ts +8 -0
  29. package/dist/_dts/api/src/preview-auth.d.ts +26 -0
  30. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +5 -5
  31. package/dist/_dts/api/src/publicExperience/wholeSeriesEndpoints.d.ts +0 -1
  32. package/dist/_dts/api/src/sdk-event-upsert.d.ts +2 -0
  33. package/dist/_dts/api/src/sdkBlockUpsertContracts.d.ts +48 -0
  34. package/dist/_dts/api/src/sdkContracts.d.ts +5 -13
  35. package/dist/_dts/api/src/sdkEventCategoryContracts.d.ts +9 -0
  36. package/dist/_dts/api/src/sdkThemeWire.d.ts +40 -8
  37. package/dist/_dts/api/src/settings/permissions.d.ts +2 -2
  38. package/dist/_dts/api/src/siteApiKeyEndpointDefinitions.d.ts +66 -0
  39. package/dist/_dts/api/src/siteInfrastructure.d.ts +3 -3
  40. package/dist/_dts/api/src/siteOperations.d.ts +1 -1
  41. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +12 -4
  42. package/dist/_dts/api/src/types.d.ts +7 -59
  43. package/dist/_dts/block-form/src/client/index.d.ts +15 -23
  44. package/dist/_dts/block-form/src/index.d.ts +23 -22
  45. package/dist/_dts/blocks/src/primitives/layout/Grid.d.ts +18 -1
  46. package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +1 -0
  47. package/dist/_dts/blocks/src/system/blocks/events/shared/filtering.d.ts +1 -1
  48. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +61 -0
  49. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +24 -22
  50. package/dist/_dts/blocks/src/system/blocks/feature-cards.d.ts +25 -1
  51. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +7 -30
  52. package/dist/_dts/blocks/src/system/blocks/site-header.d.ts +0 -1
  53. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +4 -63
  54. package/dist/_dts/blocks/src/system/customize/backgrounds.d.ts +1 -3
  55. package/dist/_dts/blocks/src/system/fields/boxStyles.d.ts +13 -1
  56. package/dist/_dts/blocks/src/system/fields/gridLayout.d.ts +20 -0
  57. package/dist/_dts/blocks/src/system/node/fragments/classNameBinding.d.ts +6 -1
  58. package/dist/_dts/blocks/src/system/node/fragments/styledCard.d.ts +31 -0
  59. package/dist/_dts/blocks/src/system/runtime/api/endpoints.d.ts +4 -0
  60. package/dist/_dts/blocks/src/system/runtime/api/types/courses.d.ts +0 -1
  61. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +0 -1
  62. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.state.d.ts +4 -2
  63. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +24 -8
  64. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.server.d.ts +8 -0
  65. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.validationErrors.d.ts +17 -0
  66. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.planning.d.ts +1 -1
  67. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventScope.d.ts +1 -1
  68. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.server.d.ts +1 -1
  69. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +42 -0
  70. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/utils.d.ts +4 -1
  71. package/dist/_dts/blocks/src/system/runtime/shared/components/FeedbackMessage.d.ts +17 -1
  72. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +1 -1
  73. package/dist/_dts/blocks/src/system/spacing.d.ts +1 -1
  74. package/dist/_dts/blocks/src/system/transforms/registry/_utils/boxStyleClassNames.d.ts +90 -0
  75. package/dist/_dts/blocks/src/system/transforms/registry/_utils/surfaceForegroundStyles.d.ts +4 -0
  76. package/dist/_dts/blocks/src/system/transforms/registry/boxStyles.d.ts +26 -0
  77. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +4 -37
  78. package/dist/_dts/content-editor/src/components/ContentFieldsForm.d.ts +2 -2
  79. package/dist/_dts/content-model/src/content-types/builtin-schemas.d.ts +6 -6
  80. package/dist/_dts/content-model/src/content-types/builtins.d.ts +6 -6
  81. package/dist/_dts/core/src/branded.d.ts +4 -0
  82. package/dist/_dts/core/src/event-page-surface-subject.d.ts +25 -4
  83. package/dist/_dts/core/src/index.d.ts +3 -0
  84. package/dist/_dts/core/src/public-event-booking-availability.d.ts +8 -0
  85. package/dist/_dts/core/src/secret.d.ts +44 -0
  86. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +341 -0
  87. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +2 -1
  88. package/dist/_dts/editor-blocks/src/BlockForm.d.ts +2 -2
  89. package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +2 -2
  90. package/dist/_dts/editor-blocks/src/block-editor/BlockCardBody.d.ts +1 -1
  91. package/dist/_dts/editor-blocks/src/block-editor/BlockCardHeader.d.ts +1 -1
  92. package/dist/_dts/editor-blocks/src/block-editor/SortableBlockItem.d.ts +1 -1
  93. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockValidationManifests.d.ts +1 -1
  94. package/dist/_dts/editor-blocks/src/block-editor/preparedManifest.d.ts +1 -1
  95. package/dist/_dts/editor-blocks/src/blockPayload.d.ts +1 -1
  96. package/dist/_dts/editor-blocks/src/index.d.ts +2 -2
  97. package/dist/_dts/editor-blocks/src/media/MediaField.d.ts +2 -2
  98. package/dist/_dts/editor-blocks/src/widgets/button/ButtonField.d.ts +1 -1
  99. package/dist/_dts/editor-blocks/src/widgets/button/ButtonVariantField.d.ts +1 -1
  100. package/dist/_dts/editor-blocks/src/widgets/button/index.d.ts +1 -1
  101. package/dist/_dts/editor-blocks/src/widgets/content-type-select/ContentTypeSelectField.d.ts +1 -1
  102. package/dist/_dts/editor-blocks/src/widgets/entry-picker/EntryPickerField.d.ts +1 -1
  103. package/dist/_dts/editor-blocks/src/widgets/entry-picker/index.d.ts +1 -1
  104. package/dist/_dts/editor-blocks/src/widgets/icon-picker/IconPickerField.d.ts +1 -1
  105. package/dist/_dts/editor-blocks/src/widgets/inline-text/InlineTextField.d.ts +1 -1
  106. package/dist/_dts/editor-blocks/src/widgets/link/LinkField.d.ts +2 -2
  107. package/dist/_dts/editor-blocks/src/widgets/offerings-preview/OfferingsPreviewGroupOrderField.d.ts +1 -1
  108. package/dist/_dts/editor-blocks/src/widgets/reference/ReferenceField.d.ts +2 -2
  109. package/dist/_dts/editor-blocks/src/widgets/rich-text/RichTextField.d.ts +2 -2
  110. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/SiteOptionPickerField.d.ts +1 -1
  111. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/utils.d.ts +1 -1
  112. package/dist/_dts/preview-next/src/client/blocks/useBlockCustomizeControls.d.ts +1 -1
  113. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +1 -1
  114. package/dist/_dts/preview-next/src/client/preview/EntrySlotBlockEditorPanel.d.ts +1 -1
  115. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +2 -0
  116. package/dist/_dts/preview-next/src/client/preview/PreviewSiteFontStorageContext.d.ts +6 -0
  117. package/dist/_dts/preview-next/src/client/preview/siteFontPreview.d.ts +5 -0
  118. package/dist/_dts/preview-next/src/client/sdk/contentStorage.d.ts +10 -0
  119. package/dist/_dts/preview-next/src/client/widgets/widgetOverrides.d.ts +1 -1
  120. package/dist/_dts/preview-next/src/index.d.ts +1 -0
  121. package/dist/_dts/preview-next/src/keepAlive.d.ts +3 -5
  122. package/dist/_dts/preview-next/src/refresh-contract.d.ts +1 -0
  123. package/dist/_dts/preview-next/src/route-contract.d.ts +7 -0
  124. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  125. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +61 -39
  126. package/dist/_dts/sdk/src/preview-next/keep-alive.d.ts +1 -1
  127. package/dist/_dts/sdk/src/rendering/components/Layout.d.ts +1 -1
  128. package/dist/_dts/sdk/src/rendering/index.d.ts +1 -1
  129. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +9 -1
  130. package/dist/_dts/sdk/src/theme-bridge/types.d.ts +4 -2
  131. package/dist/_dts/sdk/src/version.d.ts +1 -1
  132. package/dist/_dts/theme-core/src/cards/core.d.ts +54 -10
  133. package/dist/_dts/theme-core/src/cards/decorations.d.ts +33 -0
  134. package/dist/_dts/theme-core/src/cards/generateDefaultCardSystem.d.ts +7 -2
  135. package/dist/_dts/theme-core/src/cards/index.d.ts +3 -0
  136. package/dist/_dts/theme-core/src/cards/openCardVariant.d.ts +24 -0
  137. package/dist/_dts/theme-core/src/cards/roles.d.ts +38 -0
  138. package/dist/_dts/theme-core/src/cards/siteStyleDefaults.d.ts +53 -8
  139. package/dist/_dts/theme-core/src/cards/types.d.ts +489 -21
  140. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  141. package/dist/_dts/theme-core/src/header/legacyHeaderVariant.d.ts +59 -0
  142. package/dist/_dts/theme-core/src/header/paintTargets.d.ts +2 -2
  143. package/dist/_dts/theme-core/src/header/scrollTreatment.d.ts +3 -2
  144. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +12 -135
  145. package/dist/_dts/theme-core/src/palette/utils/contrast.d.ts +1 -0
  146. package/dist/_dts/theme-core/src/palette/utils/opaqueSurfaceColor.d.ts +6 -0
  147. package/dist/_dts/theme-core/src/runtime/buildThemeRuntimeFromBridge.d.ts +1 -1
  148. package/dist/_dts/theme-core/src/schema.d.ts +301 -94
  149. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +84 -102
  150. package/dist/_dts/theme-core/src/site-styles/appearancePresetResolution.d.ts +12 -1
  151. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +9 -4
  152. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +0 -20
  153. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +84 -102
  154. package/dist/_dts/theme-core/src/site-styles/cardRoleVocabulary.d.ts +48 -0
  155. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +21 -385
  156. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +10 -18
  157. package/dist/_dts/theme-core/src/site-styles/headerLayoutTypes.d.ts +2 -4
  158. package/dist/_dts/theme-core/src/site-styles/headerOpeningForeground.d.ts +2 -9
  159. package/dist/_dts/theme-core/src/site-styles/headerOpeningSection.d.ts +0 -2
  160. package/dist/_dts/theme-core/src/site-styles/index.d.ts +5 -0
  161. package/dist/_dts/theme-core/src/site-styles/pageDesignAppearanceAvailability.d.ts +3 -0
  162. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorCapabilities.d.ts +22 -0
  163. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +9 -8
  164. package/dist/_dts/theme-core/src/site-styles/pageDesignIntentEquality.d.ts +3 -0
  165. package/dist/_dts/theme-core/src/site-styles/previewRuntimeCapabilities.d.ts +19 -0
  166. package/dist/_dts/theme-core/src/site-styles/runtimeBackgroundResolution.d.ts +9 -0
  167. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +1 -62
  168. package/dist/_dts/theme-core/src/site-styles/sourceCatalogs.d.ts +13 -12
  169. package/dist/_dts/theme-core/src/site-styles/types.d.ts +50 -39
  170. package/dist/_dts/theme-core/src/siteChromePlanning.d.ts +9 -9
  171. package/dist/_dts/theme-core/src/status/generateStatusCss.d.ts +1 -0
  172. package/dist/_dts/theme-core/src/surfaces/index.d.ts +1 -0
  173. package/dist/_dts/theme-core/src/surfaces/resolveSurfaceForeground.d.ts +39 -0
  174. package/dist/_dts/ui/src/navigation-tabs.d.ts +3 -2
  175. package/dist/client/{CourseRegistrationWizard-Bvtz9G9g.mjs → CourseRegistrationWizard-DGW9F0SQ.mjs} +7 -7
  176. package/dist/client/{DiscountCodeDisclosure-Ur-Xx1U_.mjs → DiscountCodeDisclosure-BPZ-yfGI.mjs} +1 -1
  177. package/dist/client/{EventCombined.client-EhscD4U6.mjs → EventCombined.client-Cjt3kKYR.mjs} +4 -4
  178. package/dist/client/{EventListing.client-Bn26cFTY.mjs → EventListing.client-DY9dn6Fh.mjs} +2 -2
  179. package/dist/client/{FeedbackMessage-ByMrs3cr.mjs → FeedbackMessage-CtLvvS_d.mjs} +15 -3
  180. package/dist/client/{LeafletStaticMap-BUw9Ntzr.mjs → LeafletStaticMap--2c61XYn.mjs} +1 -1
  181. package/dist/client/{StepIndicator-BfbdiVQI.mjs → StepIndicator-CLjQhkDb.mjs} +3 -3
  182. package/dist/client/{accordion-CjIeof73.mjs → accordion-_boYwHHi.mjs} +1 -1
  183. package/dist/client/{bookingForm-DwEeovf_.mjs → bookingForm--AqEfyBX.mjs} +56 -39
  184. package/dist/client/bookings.mjs +393 -192
  185. package/dist/client/{carousel-BMrfgOba.mjs → carousel-CVI2dqZr.mjs} +2 -2
  186. package/dist/client/{carousel.client-CpwTUhIo.mjs → carousel.client-59G_WMr4.mjs} +1 -1
  187. package/dist/client/{cart-rXEdxTdb.mjs → cart-DR6IiPz9.mjs} +3 -3
  188. package/dist/client/{checkout-D3JlSzh3.mjs → checkout-CsrGAfQt.mjs} +3 -3
  189. package/dist/client/client.mjs +4524 -3512
  190. package/dist/client/{colorStyles-BWpj_h4C.mjs → colorStyles-CrxJrPjJ.mjs} +277 -1
  191. package/dist/client/{context-CJz1Vlsz.mjs → context-B83PiNzm.mjs} +6 -21
  192. package/dist/client/{courseRegistration-DO5XvMAA.mjs → courseRegistration-aNJVaLa3.mjs} +3 -3
  193. package/dist/client/{eventCalendar-DO6rTqCn.mjs → eventCalendar-OZ7h59VN.mjs} +6 -6
  194. package/dist/client/{eventCombined-bJ3i_ovU.mjs → eventCombined-BbJ6bFKz.mjs} +3 -3
  195. package/dist/client/{eventDetails-CCbrXE7o.mjs → eventDetails-BLyUBiCT.mjs} +3 -3
  196. package/dist/client/{eventListing-Bdlt9YTm.mjs → eventListing-DuP1yhBS.mjs} +3 -3
  197. package/dist/client/{eventRegistration-B02lt6iY.mjs → eventRegistration-BXyECPa-.mjs} +11 -12
  198. package/dist/client/{form-DrUBAAox.mjs → form-BA4t3kKU.mjs} +4 -4
  199. package/dist/client/{headerSection-MzqvHL6T.mjs → headerSection-CpNaJxhW.mjs} +2 -2
  200. package/dist/client/hooks.mjs +1967 -2059
  201. package/dist/client/{locationMap-DG8BxTBm.mjs → locationMap-3HGMCL7_.mjs} +3 -3
  202. package/dist/client/{media-CNE1Z-wb.mjs → media-BOHuueS5.mjs} +16 -4
  203. package/dist/client/{newsletterForm-BzO-Td3p.mjs → newsletterForm-C2s6Mw67.mjs} +4 -4
  204. package/dist/client/{pricing-NgK7ozkg.mjs → pricing-BiqIMgZk.mjs} +1 -1
  205. package/dist/client/{productDetail-CfQ7rhVK.mjs → productDetail-C9joWhdE.mjs} +3 -3
  206. package/dist/client/{productList-C23rOLUi.mjs → productList-CjzdU3pB.mjs} +3 -3
  207. package/dist/client/{propsDecoder-CAZdhwjs.mjs → propsDecoder-CBPGXEYX.mjs} +395 -402
  208. package/dist/client/rendering/client.mjs +2004 -2856
  209. package/dist/client/rendering/islands.mjs +20 -20
  210. package/dist/client/rendering.mjs +4605 -3496
  211. package/dist/client/{scrollToBlock-DSSqVQr1.mjs → scrollToBlock-DZ73aEX6.mjs} +1 -1
  212. package/dist/client/{shop-BMToKLK7.mjs → shop-CQRai7hj.mjs} +7 -7
  213. package/dist/client/{shop-commerce-DB4JRKmp.mjs → shop-commerce-hP9UboOx.mjs} +8 -8
  214. package/dist/client/{shop-commerce-store-BOqSIOuc.mjs → shop-commerce-store-DiD5a32e.mjs} +1 -1
  215. package/dist/client/{shopShared-B6SK9DZv.mjs → shopShared-DP8DXTkF.mjs} +5 -5
  216. package/dist/client/{useEventFilters-CULOa4nB.mjs → useEventFilters-pF_OJNQP.mjs} +137 -81
  217. package/dist/client/{usePolling-BGG_8-jl.mjs → usePolling-Cls91SD2.mjs} +2 -2
  218. package/dist/preview-next/before-render.mjs +192 -108
  219. package/dist/preview-next/client/runtime.mjs +4 -4
  220. package/dist/preview-next/keepAlive.mjs +7406 -29
  221. package/dist/preview-next/middleware.mjs +186 -107
  222. package/dist/{previewAuthStore-_GXFRg2W.mjs → previewAuthStore-CX1C_KJ4.mjs} +185 -107
  223. package/dist/{sdk-runtime-hhSOMShR.mjs → sdk-runtime-5CcPAI14.mjs} +2 -2
  224. package/dist/{separator-flRaFc14.mjs → separator-BXlYN_gr.mjs} +1 -1
  225. package/dist/server/components.mjs +6363 -4998
  226. package/dist/server/config-validation.mjs +1967 -2059
  227. package/dist/server/config.mjs +1967 -2059
  228. package/dist/server/data.mjs +1967 -2059
  229. package/dist/server/index.mjs +186 -108
  230. package/dist/server/next.mjs +6553 -5285
  231. package/dist/server/page-converter.mjs +1031 -1844
  232. package/dist/server/prebuild.mjs +1 -1
  233. package/dist/server/rendering/server.mjs +3352 -3006
  234. package/dist/server/rendering.mjs +6289 -4924
  235. package/dist/server/routing.mjs +1906 -1036
  236. package/dist/server/server.mjs +1976 -2165
  237. package/dist/server/theme-bridge.mjs +949 -670
  238. package/dist/server/theme.mjs +252 -51
  239. package/dist/styles/index.css +295 -334
  240. package/package.json +3 -2
  241. package/dist/_dts/block-form/src/client/blockDraftSaveability.d.ts +0 -1
  242. package/dist/_dts/block-form/src/widgets/index.d.ts +0 -20
  243. package/dist/_dts/blocks/src/system/runtime/api/requestBody.d.ts +0 -7
  244. package/dist/client/clsx-DgIEfj3H.mjs +0 -16
@@ -1257,6 +1257,56 @@ var init_appointmentEndpointDefinitions = __esmMin((() => {
1257
1257
  });
1258
1258
  }));
1259
1259
  //#endregion
1260
+ //#region ../api/src/accountEndpointDefinitions.ts
1261
+ var ACCOUNT_ENDPOINT_DEFINITIONS;
1262
+ var init_accountEndpointDefinitions = __esmMin((() => {
1263
+ init_defineEndpointDefinitions();
1264
+ ACCOUNT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1265
+ accountGetIdentity: {
1266
+ path: "/account/identity",
1267
+ method: "GET",
1268
+ auth: "user",
1269
+ errors: ["auth:unauthenticated", "server:internal_error"],
1270
+ responseKind: "json"
1271
+ },
1272
+ accountListSites: {
1273
+ path: "/account/sites",
1274
+ method: "GET",
1275
+ auth: "user",
1276
+ errors: [
1277
+ "auth:unauthenticated",
1278
+ "validation:invalid_format",
1279
+ "server:internal_error"
1280
+ ],
1281
+ responseKind: "json"
1282
+ },
1283
+ accountCreateSite: {
1284
+ path: "/account/sites",
1285
+ method: "POST",
1286
+ auth: "user",
1287
+ errors: [
1288
+ "auth:unauthenticated",
1289
+ "validation:invalid_input",
1290
+ "server:internal_error"
1291
+ ],
1292
+ responseKind: "json"
1293
+ },
1294
+ accountProvisionProjectCredentials: {
1295
+ path: "/account/project-credentials",
1296
+ method: "POST",
1297
+ auth: "user",
1298
+ errors: [
1299
+ "auth:unauthenticated",
1300
+ "auth:forbidden",
1301
+ "validation:invalid_input",
1302
+ "resource:not_found",
1303
+ "server:internal_error"
1304
+ ],
1305
+ responseKind: "json"
1306
+ }
1307
+ });
1308
+ }));
1309
+ //#endregion
1260
1310
  //#region ../api/src/courseEndpointDefinitions.ts
1261
1311
  var COURSE_ENDPOINT_DEFINITIONS;
1262
1312
  var init_courseEndpointDefinitions = __esmMin((() => {
@@ -1850,19 +1900,166 @@ var init_publicWholeSeriesEndpointDefinitions = __esmMin((() => {
1850
1900
  }
1851
1901
  });
1852
1902
  }));
1903
+ //#endregion
1904
+ //#region ../api/src/siteApiKeyEndpointDefinitions.ts
1905
+ var SITE_API_KEY_ENDPOINT_DEFINITIONS;
1906
+ var init_siteApiKeyEndpointDefinitions = __esmMin((() => {
1907
+ init_defineEndpointDefinitions();
1908
+ SITE_API_KEY_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1909
+ listSiteApiKeys: {
1910
+ path: "/sites/{siteId}/api-keys",
1911
+ method: "GET",
1912
+ auth: "user",
1913
+ tags: ["site-{siteId}", "api-keys"],
1914
+ responseKind: "json"
1915
+ },
1916
+ createSiteApiKey: {
1917
+ path: "/sites/{siteId}/api-keys",
1918
+ method: "POST",
1919
+ auth: "user",
1920
+ tags: ["site-{siteId}", "api-keys"],
1921
+ responseKind: "json"
1922
+ },
1923
+ revokeSiteApiKey: {
1924
+ path: "/sites/{siteId}/api-keys/{keyId}",
1925
+ method: "DELETE",
1926
+ auth: "user",
1927
+ tags: ["site-{siteId}", "api-keys"],
1928
+ responseKind: "json"
1929
+ },
1930
+ listSitePreviewKeys: {
1931
+ path: "/sites/{siteId}/api-keys/preview",
1932
+ method: "GET",
1933
+ auth: "user",
1934
+ tags: [
1935
+ "site-{siteId}",
1936
+ "api-keys",
1937
+ "preview-key"
1938
+ ],
1939
+ errors: [],
1940
+ responseKind: "json"
1941
+ },
1942
+ createSitePreviewKey: {
1943
+ path: "/sites/{siteId}/api-keys/preview",
1944
+ method: "POST",
1945
+ auth: "user",
1946
+ tags: [
1947
+ "site-{siteId}",
1948
+ "api-keys",
1949
+ "preview-key"
1950
+ ],
1951
+ responseKind: "json"
1952
+ },
1953
+ getSiteApiKeyAccessLogs: {
1954
+ path: "/sites/{siteId}/api-keys/access-logs",
1955
+ method: "GET",
1956
+ auth: "user",
1957
+ tags: [
1958
+ "site-{siteId}",
1959
+ "api-keys",
1960
+ "access-logs"
1961
+ ],
1962
+ responseKind: "json"
1963
+ },
1964
+ listManagementKeys: {
1965
+ path: "/sites/{siteId}/api-keys/management",
1966
+ method: "GET",
1967
+ auth: "user",
1968
+ tags: [
1969
+ "site-{siteId}",
1970
+ "api-keys",
1971
+ "management-keys"
1972
+ ],
1973
+ responseKind: "json"
1974
+ },
1975
+ createManagementKey: {
1976
+ path: "/sites/{siteId}/api-keys/management",
1977
+ method: "POST",
1978
+ auth: "user",
1979
+ tags: [
1980
+ "site-{siteId}",
1981
+ "api-keys",
1982
+ "management-keys"
1983
+ ],
1984
+ responseKind: "json"
1985
+ },
1986
+ revokeManagementKey: {
1987
+ path: "/sites/{siteId}/api-keys/management",
1988
+ method: "DELETE",
1989
+ auth: "user",
1990
+ tags: [
1991
+ "site-{siteId}",
1992
+ "api-keys",
1993
+ "management-keys"
1994
+ ],
1995
+ responseKind: "json"
1996
+ }
1997
+ });
1998
+ }));
1999
+ //#endregion
2000
+ //#region ../api/src/eventManagementEndpointDefinitions.ts
2001
+ var EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS;
2002
+ var init_eventManagementEndpointDefinitions = __esmMin((() => {
2003
+ init_defineEndpointDefinitions();
2004
+ EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
2005
+ listEvents: {
2006
+ path: "/sites/{siteId}/bookings/events",
2007
+ method: "GET",
2008
+ tags: ["site-{siteId}", "event-series-{siteId}"],
2009
+ auth: "user",
2010
+ responseKind: "json",
2011
+ errors: []
2012
+ },
2013
+ createEvent: {
2014
+ path: "/sites/{siteId}/bookings/events",
2015
+ method: "POST",
2016
+ tags: ["site-{siteId}", "event-series-{siteId}"],
2017
+ auth: "user",
2018
+ responseKind: "json",
2019
+ errors: [
2020
+ "validation:invalid_input",
2021
+ "resource:already_exists",
2022
+ "server:internal_error"
2023
+ ]
2024
+ },
2025
+ transitionEventLifecycle: {
2026
+ path: "/sites/{siteId}/bookings/events/{eventId}/lifecycle",
2027
+ method: "POST",
2028
+ tags: ["site-{siteId}", "event-series-{siteId}"],
2029
+ auth: "user",
2030
+ responseKind: "json",
2031
+ errors: [
2032
+ "validation:invalid_input",
2033
+ "resource:not_found",
2034
+ "resource:conflict",
2035
+ "server:internal_error"
2036
+ ]
2037
+ }
2038
+ });
2039
+ }));
1853
2040
  var init_endpoints = __esmMin((() => {
1854
2041
  init_demoMutationPolicies();
1855
2042
  init_cache_tags();
1856
2043
  init_sdkEntryReadEndpoints();
1857
2044
  init_appointmentEndpointDefinitions();
2045
+ init_accountEndpointDefinitions();
1858
2046
  init_courseEndpointDefinitions();
1859
2047
  init_newsletterEndpointDefinitions();
1860
2048
  init_publicWholeSeriesEndpointDefinitions();
1861
- TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, {
2049
+ init_siteApiKeyEndpointDefinitions();
2050
+ init_eventManagementEndpointDefinitions();
2051
+ ({ ...ACCOUNT_ENDPOINT_DEFINITIONS }), TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, { ...SITE_API_KEY_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, {
1862
2052
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
1863
2053
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
1864
2054
  ...COURSE_ENDPOINT_DEFINITIONS
1865
- }, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.workflowRunById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.routeById, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.formById, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEventFilters, { ...PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicTeamMembers, TAG_TEMPLATES.publicWholeSeriesOfferings, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicPasses, TAG_TEMPLATES.publicMemberships, TAG_TEMPLATES.publicProducts, TAG_TEMPLATES.publicGifting, TAG_TEMPLATES.publicGifting, TAG_TEMPLATES.publicGifting, TAG_TEMPLATES.publicShop, TAG_TEMPLATES.publicCheckout, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, { ...SDK_ENTRY_READ_ENDPOINTS };
2055
+ }, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.workflowRunById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.routeById, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.formById, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEventFilters, { ...PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicTeamMembers, TAG_TEMPLATES.publicWholeSeriesOfferings, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicPasses, TAG_TEMPLATES.publicMemberships, TAG_TEMPLATES.publicProducts, TAG_TEMPLATES.publicGifting, TAG_TEMPLATES.publicGifting, TAG_TEMPLATES.publicGifting, TAG_TEMPLATES.publicShop, TAG_TEMPLATES.publicCheckout, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, { ...EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS }, { ...SDK_ENTRY_READ_ENDPOINTS };
2056
+ }));
2057
+ var init_preview_auth = __esmMin((() => {
2058
+ z.object({ refreshToken: z.string().min(1).max(4096) }).strict();
2059
+ z.object({
2060
+ accessToken: z.string().min(1).max(4096),
2061
+ refreshToken: z.string().min(1).max(4096)
2062
+ }).strict();
1866
2063
  })), API_ERROR_CODES;
1867
2064
  var init_envelope = __esmMin((() => {
1868
2065
  API_ERROR_CODES = [
@@ -1902,6 +2099,86 @@ var init_footerSettings = __esmMin((() => {
1902
2099
  init_envelope();
1903
2100
  }));
1904
2101
  //#endregion
2102
+ //#region ../api/src/accountEndpoints.ts
2103
+ /** Strict, injection-safe PostgreSQL/RFC3339 timestamp text used in cursors. */
2104
+ function isAccountSiteTimestamp(value) {
2105
+ if (typeof value !== "string") return false;
2106
+ const match = ACCOUNT_SITE_TIMESTAMP_PATTERN.exec(value);
2107
+ if (!match) return false;
2108
+ const [, year, month, day, hour, minute, second, , offset] = match;
2109
+ const date = new Date(Date.UTC(Number(year), Number(month) - 1, Number(day)));
2110
+ const offsetValue = offset ?? "";
2111
+ const offsetIsValid = offsetValue === "Z" || (() => {
2112
+ const offsetMatch = /^(?:[+-])(\d{2}):(\d{2})$/.exec(offsetValue);
2113
+ if (!offsetMatch) return false;
2114
+ return Number(offsetMatch[1]) <= 23 && Number(offsetMatch[2]) <= 59;
2115
+ })();
2116
+ return date.getUTCFullYear() === Number(year) && date.getUTCMonth() === Number(month) - 1 && date.getUTCDate() === Number(day) && Number(hour) <= 23 && Number(minute) <= 59 && Number(second) <= 59 && offsetIsValid;
2117
+ }
2118
+ var ACCOUNT_SITE_CURSOR_MAX_LENGTH, ACCOUNT_SITE_TIMESTAMP_PATTERN, accountSiteTimestampSchema, abandonedStandardKeyIdsSchema, abandonedPreviewKeyIdsSchema;
2119
+ var init_accountEndpoints = __esmMin((() => {
2120
+ ACCOUNT_SITE_CURSOR_MAX_LENGTH = 2048;
2121
+ ACCOUNT_SITE_TIMESTAMP_PATTERN = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,6}))?(Z|[+-]\d{2}:\d{2})$/;
2122
+ accountSiteTimestampSchema = z.string().refine(isAccountSiteTimestamp, { message: "Expected a strict account site timestamp" });
2123
+ z.enum([
2124
+ "managed",
2125
+ "headless_cms",
2126
+ "headless_full"
2127
+ ]);
2128
+ z.object({ title: z.string().trim().min(1).max(120) });
2129
+ abandonedStandardKeyIdsSchema = z.object({
2130
+ live: z.string().uuid().optional(),
2131
+ management: z.string().uuid().optional()
2132
+ }).strict();
2133
+ abandonedPreviewKeyIdsSchema = z.object({
2134
+ live: z.string().uuid().optional(),
2135
+ management: z.string().uuid().optional(),
2136
+ preview: z.string().uuid().optional()
2137
+ }).strict();
2138
+ z.discriminatedUnion("operation", [
2139
+ z.object({
2140
+ operation: z.literal("issue_standard"),
2141
+ siteId: z.string().uuid(),
2142
+ operationId: z.string().uuid(),
2143
+ projectName: z.string().trim().min(1).max(120),
2144
+ abandonedKeyIds: abandonedStandardKeyIdsSchema.default({})
2145
+ }).strict(),
2146
+ z.object({
2147
+ operation: z.literal("issue_with_preview"),
2148
+ siteId: z.string().uuid(),
2149
+ operationId: z.string().uuid(),
2150
+ projectName: z.string().trim().min(1).max(120),
2151
+ abandonedKeyIds: abandonedPreviewKeyIdsSchema.default({})
2152
+ }).strict(),
2153
+ z.object({
2154
+ operation: z.literal("revalidate_standard"),
2155
+ siteId: z.string().uuid(),
2156
+ operationId: z.string().uuid(),
2157
+ projectName: z.string().trim().min(1).max(120),
2158
+ keyIds: z.object({
2159
+ live: z.string().uuid(),
2160
+ management: z.string().uuid()
2161
+ }).strict()
2162
+ }).strict(),
2163
+ z.object({
2164
+ operation: z.literal("revalidate_with_preview"),
2165
+ siteId: z.string().uuid(),
2166
+ operationId: z.string().uuid(),
2167
+ projectName: z.string().trim().min(1).max(120),
2168
+ keyIds: z.object({
2169
+ live: z.string().uuid(),
2170
+ management: z.string().uuid(),
2171
+ preview: z.string().uuid()
2172
+ }).strict()
2173
+ }).strict()
2174
+ ]);
2175
+ z.object({
2176
+ cursor: z.string().min(1).max(ACCOUNT_SITE_CURSOR_MAX_LENGTH).optional(),
2177
+ limit: z.coerce.number().int().min(1).max(100).default(50),
2178
+ search: z.string().trim().min(1).max(120).optional()
2179
+ });
2180
+ }));
2181
+ //#endregion
1905
2182
  //#region ../core/src/result.ts
1906
2183
  function ok$1(value) {
1907
2184
  return {
@@ -1925,16 +2202,22 @@ function parseUuidBrand(value, unsafeConstructor) {
1925
2202
  if (!UUID_PATTERN.test(normalized)) return err$1({ kind: "invalid_uuid" });
1926
2203
  return ok$1(unsafeConstructor(normalized));
1927
2204
  }
1928
- var UUID_PATTERN, unsafeAsEventOfferingId, unsafeAsEventSeriesId, unsafeAsStorageBucketName, unsafeAsPositiveByteCount$1, unsafeAsPositiveSeconds, parseEventOfferingId, parseEventSeriesId;
2205
+ var UUID_PATTERN, unsafeAsSiteId, unsafeAsApiKeyId, unsafeAsEventOfferingId, unsafeAsEventSeriesId, unsafeAsStorageBucketName, unsafeAsPositiveByteCount$1, unsafeAsPositiveSeconds, unsafeAsUserId, parseSiteId, parseApiKeyId, parseEventOfferingId, parseUserId, parseEventSeriesId;
1929
2206
  var init_branded = __esmMin((() => {
1930
2207
  init_result();
1931
2208
  UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
2209
+ unsafeAsSiteId = (id) => id;
2210
+ unsafeAsApiKeyId = (id) => id;
1932
2211
  unsafeAsEventOfferingId = (id) => id;
1933
2212
  unsafeAsEventSeriesId = (id) => id;
1934
2213
  unsafeAsStorageBucketName = (value) => value;
1935
2214
  unsafeAsPositiveByteCount$1 = (value) => value;
1936
2215
  unsafeAsPositiveSeconds = (value) => value;
2216
+ unsafeAsUserId = (id) => id;
2217
+ parseSiteId = (value) => parseUuidBrand(value, unsafeAsSiteId);
2218
+ parseApiKeyId = (value) => parseUuidBrand(value, unsafeAsApiKeyId);
1937
2219
  parseEventOfferingId = (value) => parseUuidBrand(value, unsafeAsEventOfferingId);
2220
+ parseUserId = (value) => parseUuidBrand(value, unsafeAsUserId);
1938
2221
  parseEventSeriesId = (value) => parseUuidBrand(value, unsafeAsEventSeriesId);
1939
2222
  }));
1940
2223
  //#endregion
@@ -2041,18 +2324,32 @@ function isFreePublicEventPriceDisplay(display) {
2041
2324
  var init_event_pricing = __esmMin((() => {}));
2042
2325
  //#endregion
2043
2326
  //#region ../core/src/event-page-surface-subject.ts
2327
+ function createEventSeriesPageSurfaceSubject(eventSeriesId, bookingScope) {
2328
+ return bookingScope === "whole_series" ? {
2329
+ kind: "eventSeries",
2330
+ eventSeriesId,
2331
+ bookingScope,
2332
+ isWholeSeriesBooking: true
2333
+ } : {
2334
+ kind: "eventSeries",
2335
+ eventSeriesId,
2336
+ bookingScope
2337
+ };
2338
+ }
2044
2339
  function parseEventPageSurfaceSubject(value) {
2045
2340
  if (!isRecord$12(value)) return err$1({ kind: "notObject" });
2046
2341
  switch (value.kind) {
2047
2342
  case "eventSeries": {
2048
2343
  const eventSeriesId = parseEventSeriesId(value.eventSeriesId);
2049
- return eventSeriesId.ok ? ok$1({
2050
- kind: "eventSeries",
2051
- eventSeriesId: eventSeriesId.value
2052
- }) : err$1({
2344
+ if (!eventSeriesId.ok) return err$1({
2053
2345
  kind: "invalidEventSeriesId",
2054
2346
  error: eventSeriesId.error
2055
2347
  });
2348
+ if (value.bookingScope !== "single_occurrence" && value.bookingScope !== "whole_series") return err$1({
2349
+ kind: "invalidEventSeriesBookingScope",
2350
+ bookingScope: value.bookingScope
2351
+ });
2352
+ return ok$1(createEventSeriesPageSurfaceSubject(eventSeriesId.value, value.bookingScope));
2056
2353
  }
2057
2354
  case "eventOffering": {
2058
2355
  const eventOfferingId = parseEventOfferingId(value.eventOfferingId);
@@ -2093,6 +2390,9 @@ var init_event_page_surface_subject = __esmMin((() => {
2093
2390
  init_result();
2094
2391
  }));
2095
2392
  //#endregion
2393
+ //#region ../core/src/public-event-booking-availability.ts
2394
+ var init_public_event_booking_availability = __esmMin((() => {}));
2395
+ //#endregion
2096
2396
  //#region ../core/src/money-input.ts
2097
2397
  var init_money_input = __esmMin((() => {}));
2098
2398
  //#endregion
@@ -2396,6 +2696,49 @@ var init_uuid = __esmMin((() => {}));
2396
2696
  //#region ../core/src/stable-json.ts
2397
2697
  var init_stable_json = __esmMin((() => {}));
2398
2698
  //#endregion
2699
+ //#region ../core/src/secret.ts
2700
+ function placeholderFor(kind) {
2701
+ return `[riverbank:redacted:${kind}]`;
2702
+ }
2703
+ /** Create an opaque secret after a caller has parsed/validated its boundary. */
2704
+ function createSecret(kind, value) {
2705
+ return createSecretInternal(kind, value);
2706
+ }
2707
+ /** Construct a Secret for an already validated kind/value pair. */
2708
+ function createSecretInternal(kind, value) {
2709
+ const placeholder = placeholderFor(kind);
2710
+ const secret = {
2711
+ kind: "secret",
2712
+ secretType: kind,
2713
+ toString: () => placeholder,
2714
+ toJSON: () => placeholder,
2715
+ [SECRET_INSPECT_SYMBOL]: () => placeholder
2716
+ };
2717
+ Object.defineProperty(secret, secretValueSymbol, {
2718
+ configurable: false,
2719
+ enumerable: false,
2720
+ value: () => value,
2721
+ writable: false
2722
+ });
2723
+ return Object.freeze(secret);
2724
+ }
2725
+ /**
2726
+ * Parse an untrusted management API key before constructing its Secret value.
2727
+ *
2728
+ * The Secret type protects an already validated value from accidental
2729
+ * disclosure; this boundary is what validates the value's wire format.
2730
+ */
2731
+ function parseManagementKey(raw) {
2732
+ if (typeof raw !== "string" || !raw.startsWith("bld_mgmt_sk_") || raw.length === 12) return err$1({ kind: "invalid-management-key" });
2733
+ return ok$1(createSecretInternal("management-key", raw));
2734
+ }
2735
+ var secretValueSymbol, SECRET_INSPECT_SYMBOL;
2736
+ var init_secret = __esmMin((() => {
2737
+ init_result();
2738
+ secretValueSymbol = Symbol.for("riverbank.secret.value");
2739
+ SECRET_INSPECT_SYMBOL = Symbol.for("nodejs.util.inspect.custom");
2740
+ }));
2741
+ //#endregion
2399
2742
  //#region ../core/src/site-route-target.ts
2400
2743
  var init_site_route_target = __esmMin((() => {}));
2401
2744
  //#endregion
@@ -2411,6 +2754,7 @@ var init_src$4 = __esmMin((() => {
2411
2754
  init_collections();
2412
2755
  init_event_pricing();
2413
2756
  init_event_page_surface_subject();
2757
+ init_public_event_booking_availability();
2414
2758
  init_money_input();
2415
2759
  init_booking_flexible_balance();
2416
2760
  init_booking_refunds();
@@ -2454,6 +2798,7 @@ var init_src$4 = __esmMin((() => {
2454
2798
  init_string();
2455
2799
  init_uuid();
2456
2800
  init_stable_json();
2801
+ init_secret();
2457
2802
  init_site_route_target();
2458
2803
  }));
2459
2804
  //#endregion
@@ -2595,45 +2940,6 @@ function srgbToLinear(u) {
2595
2940
  function linearToSrgb(x) {
2596
2941
  return clamp01(x <= .0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - .055) * 255;
2597
2942
  }
2598
- function rgbToHsl$1(r, g, b) {
2599
- const R = r / 255, G = g / 255, B = b / 255;
2600
- const max = Math.max(R, G, B), min = Math.min(R, G, B);
2601
- const d = max - min;
2602
- let h = 0;
2603
- if (d !== 0) {
2604
- switch (max) {
2605
- case R:
2606
- h = (G - B) / d + (G < B ? 6 : 0);
2607
- break;
2608
- case G:
2609
- h = (B - R) / d + 2;
2610
- break;
2611
- case B:
2612
- h = (R - G) / d + 4;
2613
- break;
2614
- }
2615
- h *= 60;
2616
- }
2617
- const l = (max + min) / 2;
2618
- const s = d === 0 ? 0 : d / (1 - Math.abs(2 * l - 1));
2619
- return {
2620
- h,
2621
- s,
2622
- l
2623
- };
2624
- }
2625
- function srgbToOklab(r, g, b) {
2626
- const R = srgbToLinear(r), G = srgbToLinear(g), B = srgbToLinear(b);
2627
- const l = .4122214708 * R + .5363325363 * G + .0514459929 * B;
2628
- const m = .2119034982 * R + .6806995451 * G + .1073969566 * B;
2629
- const s = .0883024619 * R + .2817188376 * G + .6299787005 * B;
2630
- const l_ = Math.cbrt(l), m_ = Math.cbrt(m), s_ = Math.cbrt(s);
2631
- return {
2632
- L: .2104542553 * l_ + .793617785 * m_ - .0040720468 * s_,
2633
- a: 1.9779984951 * l_ - 2.428592205 * m_ + .4505937099 * s_,
2634
- b: .0259040371 * l_ + .7827717662 * m_ - .808675766 * s_
2635
- };
2636
- }
2637
2943
  function oklabToSrgb(L, a, b) {
2638
2944
  const l_ = Math.pow(L + .3963377774 * a + .2158037573 * b, 3);
2639
2945
  const m_ = Math.pow(L - .1055613458 * a - .0638541728 * b, 3);
@@ -2647,14 +2953,6 @@ function oklabToSrgb(L, a, b) {
2647
2953
  b: linearToSrgb(B)
2648
2954
  };
2649
2955
  }
2650
- function oklabToOklch(L, a, b) {
2651
- const C = Math.sqrt(a * a + b * b);
2652
- return {
2653
- L,
2654
- C,
2655
- h: C < 1e-7 ? 0 : deg(Math.atan2(b, a) * 180 / Math.PI)
2656
- };
2657
- }
2658
2956
  function oklchToOklab(L, C, h) {
2659
2957
  const hr = h * Math.PI / 180;
2660
2958
  return {
@@ -2663,32 +2961,9 @@ function oklchToOklab(L, C, h) {
2663
2961
  b: C * Math.sin(hr)
2664
2962
  };
2665
2963
  }
2666
- function featuresFromHex(hex) {
2667
- const { r, g, b } = hexToRgb(hex);
2668
- const { h, s, l } = rgbToHsl$1(r, g, b);
2669
- const { L, a, b: b2 } = srgbToOklab(r, g, b);
2670
- const { L: okL, C: okC, h: okH } = oklabToOklch(L, a, b2);
2671
- return {
2672
- r,
2673
- g,
2674
- b,
2675
- h,
2676
- s,
2677
- l,
2678
- v: Math.max(r, g, b) / 255,
2679
- Y: .2126 * srgbToLinear(r) + .7152 * srgbToLinear(g) + .0722 * srgbToLinear(b),
2680
- chroma: s,
2681
- okL,
2682
- okC,
2683
- okH,
2684
- hex
2685
- };
2686
- }
2687
- var clamp01, mod, deg;
2964
+ var clamp01;
2688
2965
  var init_colorConversion = __esmMin((() => {
2689
2966
  clamp01 = (x) => Math.max(0, Math.min(1, x));
2690
- mod = (a, n) => (a % n + n) % n;
2691
- deg = (x) => mod(x, 360);
2692
2967
  }));
2693
2968
  //#endregion
2694
2969
  //#region ../theme-core/src/palette/generateCssVars.ts
@@ -6805,10 +7080,212 @@ var init_generateDefaultButtonSystem = __esmMin((() => {
6805
7080
  //#region ../theme-core/src/buttons/affordanceIcons.ts
6806
7081
  var init_affordanceIcons = __esmMin((() => {}));
6807
7082
  //#endregion
7083
+ //#region ../theme-core/src/palette/utils/opaqueSurfaceColor.ts
7084
+ /** Resolve an opaque colour, compositing alpha against an explicit underlay. */
7085
+ function resolveOpaqueSurfaceHex(reference, palette, underlayReference) {
7086
+ const opaque = resolveConcreteColorHex(reference, palette);
7087
+ if (opaque) return opaque;
7088
+ if (!underlayReference) return null;
7089
+ const underlayHex = resolveConcreteColorHex(underlayReference, palette);
7090
+ if (!underlayHex) return null;
7091
+ const parts = parseColorTokenParts(reference);
7092
+ if (parts.kind === "token" && parts.opacityPercent !== null) {
7093
+ const foregroundHex = normalizePaletteHex(palette[parts.token] ?? "");
7094
+ return foregroundHex ? compositeHex(foregroundHex, underlayHex, parts.opacityPercent / 100) : null;
7095
+ }
7096
+ const rgba = parseRgba(parts.kind === "raw" ? parts.value : reference);
7097
+ return rgba ? compositeHex(rgbToHex$1(rgba.r, rgba.g, rgba.b), underlayHex, rgba.alpha) : null;
7098
+ }
7099
+ /** Resolve a colour reference only when it is already fully opaque. */
7100
+ function resolveConcreteColorHex(reference, palette) {
7101
+ const literalHex = normalizePaletteHex(reference);
7102
+ if (literalHex) return literalHex;
7103
+ const parts = parseColorTokenParts(reference);
7104
+ if (parts.kind === "token") {
7105
+ if (parts.opacityPercent !== null) return null;
7106
+ return normalizePaletteHex(palette[parts.token] ?? "");
7107
+ }
7108
+ const literal = parts.kind === "raw" ? parts.value : reference;
7109
+ if (literal.toLowerCase() === "black") return "#000000";
7110
+ if (literal.toLowerCase() === "white") return "#ffffff";
7111
+ return normalizePaletteHex(literal);
7112
+ }
7113
+ function compositeHex(foregroundHex, underlayHex, alpha) {
7114
+ const foreground = hexToRgb(foregroundHex);
7115
+ const underlay = hexToRgb(underlayHex);
7116
+ const channel = (foregroundValue, underlayValue) => Math.round(foregroundValue * alpha + underlayValue * (1 - alpha));
7117
+ return rgbToHex$1(channel(foreground.r, underlay.r), channel(foreground.g, underlay.g), channel(foreground.b, underlay.b));
7118
+ }
7119
+ function parseRgba(value) {
7120
+ const match = value.trim().match(/^rgba?\(\s*([\d.]+)(?:\s*,\s*|\s+)([\d.]+)(?:\s*,\s*|\s+)([\d.]+)(?:\s*(?:,|\/)\s*([\d.]+%?))?\s*\)$/i);
7121
+ if (!match) return null;
7122
+ const [, rSource, gSource, bSource] = match;
7123
+ if (!rSource || !gSource || !bSource) return null;
7124
+ const r = Number(rSource);
7125
+ const g = Number(gSource);
7126
+ const b = Number(bSource);
7127
+ const alpha = parseAlpha(match[4]);
7128
+ if (alpha === null || !isRgbChannel(r) || !isRgbChannel(g) || !isRgbChannel(b)) return null;
7129
+ return {
7130
+ r,
7131
+ g,
7132
+ b,
7133
+ alpha
7134
+ };
7135
+ }
7136
+ function parseAlpha(source) {
7137
+ if (!source) return 1;
7138
+ const value = source.endsWith("%") ? Number(source.slice(0, -1)) / 100 : Number(source);
7139
+ return Number.isFinite(value) && value >= 0 && value <= 1 ? value : null;
7140
+ }
7141
+ function isRgbChannel(value) {
7142
+ return Number.isFinite(value) && value >= 0 && value <= 255;
7143
+ }
7144
+ var init_opaqueSurfaceColor = __esmMin((() => {
7145
+ init_colors();
7146
+ init_colorTokenParts();
7147
+ init_colorConversion();
7148
+ }));
7149
+ //#endregion
7150
+ //#region ../theme-core/src/surfaces/resolveSurfaceForeground.ts
7151
+ /**
7152
+ * Resolve the complete foreground contract for an effective page/section or
7153
+ * site-chrome background.
7154
+ *
7155
+ * Deterministic colour backgrounds are validated at ordinary-text WCAG AA.
7156
+ * Existing image/video/gradient treatments are trusted only when they already
7157
+ * carry a usable foreground token; this function deliberately does not claim
7158
+ * pixel-level contrast proof for media.
7159
+ */
7160
+ function resolveSurfaceForeground(background, palette, candidates = {}, options = {}) {
7161
+ const authored = foregroundCandidates(background, candidates);
7162
+ if (background === null) return resolveDeterministicForeground("background", {
7163
+ ...authored,
7164
+ text: authored.text ?? "text"
7165
+ }, palette);
7166
+ if (background.type === "color") {
7167
+ const backgroundReference = normalizedReference(background.color);
7168
+ if (!backgroundReference || backgroundReference === "transparent") return { kind: "unknown" };
7169
+ return resolveDeterministicForeground(backgroundReference, authored, palette, options.compositeBase);
7170
+ }
7171
+ return resolveTrustedTreatmentForeground(authored, palette);
7172
+ }
7173
+ function foregroundCandidates(background, overrides) {
7174
+ return {
7175
+ text: overrides.text ?? background?.textColor ?? null,
7176
+ heading: overrides.heading ?? background?.headingColor ?? null,
7177
+ link: overrides.link ?? background?.linkColor ?? null,
7178
+ supporting: overrides.supporting ?? background?.supportingColor ?? null
7179
+ };
7180
+ }
7181
+ function resolveDeterministicForeground(backgroundReference, candidates, palette, compositeBase) {
7182
+ const backgroundHex = resolveOpaqueSurfaceHex(backgroundReference, palette, compositeBase);
7183
+ if (!backgroundHex) return resolveTrustedTreatmentForeground(candidates, palette);
7184
+ const backgroundToken = paletteToken(backgroundReference);
7185
+ const derivedOnToken = backgroundToken ? onColorTokenName(backgroundToken) : null;
7186
+ const text = firstSafeToken([
7187
+ candidates.text,
7188
+ derivedOnToken,
7189
+ ...FALLBACK_TEXT_TOKENS
7190
+ ], backgroundHex, palette, derivedOnToken ? [derivedOnToken] : []);
7191
+ if (!text) return { kind: "unknown" };
7192
+ return {
7193
+ kind: "known",
7194
+ roles: {
7195
+ text,
7196
+ heading: safeTokenOr(candidates.heading, text, backgroundHex, palette),
7197
+ link: safeTokenOr(candidates.link, text, backgroundHex, palette),
7198
+ supporting: safeTokenOr(candidates.supporting, text, backgroundHex, palette)
7199
+ }
7200
+ };
7201
+ }
7202
+ function resolveTrustedTreatmentForeground(candidates, palette) {
7203
+ const text = canonicalToken(candidates.text, palette);
7204
+ if (!text) return { kind: "unknown" };
7205
+ return {
7206
+ kind: "known",
7207
+ roles: {
7208
+ text,
7209
+ heading: canonicalToken(candidates.heading, palette) ?? text,
7210
+ link: canonicalToken(candidates.link, palette) ?? text,
7211
+ supporting: canonicalToken(candidates.supporting, palette) ?? text
7212
+ }
7213
+ };
7214
+ }
7215
+ function safeTokenOr(candidate, fallback, backgroundHex, palette) {
7216
+ return firstSafeToken([candidate], backgroundHex, palette) ?? fallback;
7217
+ }
7218
+ function firstSafeToken(candidates, backgroundHex, palette, preferredEquivalentTokens = []) {
7219
+ const seen = /* @__PURE__ */ new Set();
7220
+ for (const candidate of candidates) {
7221
+ const token = canonicalToken(candidate, palette, preferredEquivalentTokens);
7222
+ if (!token || seen.has(token)) continue;
7223
+ seen.add(token);
7224
+ const foregroundHex = resolveConcreteColorHex(token, palette);
7225
+ if (foregroundHex && contrastRatio(backgroundHex, foregroundHex) >= 4.5) return token;
7226
+ }
7227
+ return null;
7228
+ }
7229
+ function canonicalToken(reference, palette, preferredEquivalentTokens = []) {
7230
+ const normalized = normalizedReference(reference);
7231
+ if (!normalized || normalized === "transparent") return null;
7232
+ const direct = parseThemeColorToken(normalized);
7233
+ if (direct && resolveConcreteColorHex(direct, palette)) return direct;
7234
+ const referenceHex = resolveConcreteColorHex(normalized, palette);
7235
+ if (!referenceHex) return null;
7236
+ const equivalent = [
7237
+ ...preferredEquivalentTokens,
7238
+ ...CANONICAL_EQUIVALENT_TOKEN_ORDER,
7239
+ ...Object.keys(palette).sort()
7240
+ ].find((token) => {
7241
+ const parsed = parseThemeColorToken(token);
7242
+ return parsed !== null && resolveConcreteColorHex(parsed, palette)?.toLowerCase() === referenceHex.toLowerCase();
7243
+ });
7244
+ return equivalent ? parseThemeColorToken(equivalent) : null;
7245
+ }
7246
+ function paletteToken(reference) {
7247
+ const parts = parseColorTokenParts(reference);
7248
+ return parts.kind === "token" && parts.opacityPercent === null ? parts.token : null;
7249
+ }
7250
+ function normalizedReference(value) {
7251
+ if (typeof value !== "string") return null;
7252
+ const normalized = value.trim();
7253
+ return normalized.length > 0 ? normalized : null;
7254
+ }
7255
+ var FALLBACK_TEXT_TOKENS, CANONICAL_EQUIVALENT_TOKEN_ORDER;
7256
+ var init_resolveSurfaceForeground = __esmMin((() => {
7257
+ init_contrast();
7258
+ init_onColor();
7259
+ init_opaqueSurfaceColor();
7260
+ init_colorTokenParts();
7261
+ init_themeColorTokens();
7262
+ FALLBACK_TEXT_TOKENS = [
7263
+ "text",
7264
+ "primaryForeground",
7265
+ "secondaryForeground",
7266
+ "accentForeground",
7267
+ "neutral-950",
7268
+ "neutral-50"
7269
+ ];
7270
+ CANONICAL_EQUIVALENT_TOKEN_ORDER = [
7271
+ "text",
7272
+ "primaryForeground",
7273
+ "secondaryForeground",
7274
+ "accentForeground",
7275
+ "onPrimary",
7276
+ "onSecondary",
7277
+ "onAccent",
7278
+ "onSurface",
7279
+ "neutral-950",
7280
+ "neutral-50"
7281
+ ];
7282
+ }));
7283
+ //#endregion
6808
7284
  //#region ../theme-core/src/surfaces/index.ts
6809
7285
  var init_surfaces = __esmMin((() => {
6810
7286
  init_foregroundContract();
6811
7287
  init_foregroundRoles();
7288
+ init_resolveSurfaceForeground();
6812
7289
  }));
6813
7290
  //#endregion
6814
7291
  //#region ../theme-core/src/utils/colorStyles.ts
@@ -7040,7 +7517,7 @@ function deriveKnownBackground(input, palette, fallbackToken) {
7040
7517
  kind: "unknown",
7041
7518
  reason: "missing-background"
7042
7519
  };
7043
- const colour = resolveKnownColour(backgroundValue, palette);
7520
+ const colour = resolveKnownSurfaceColour(backgroundValue, palette, authored ? fallbackToken : void 0);
7044
7521
  if (!colour) return {
7045
7522
  kind: "unknown",
7046
7523
  reason: "unresolvable-colour"
@@ -7051,6 +7528,16 @@ function deriveKnownBackground(input, palette, fallbackToken) {
7051
7528
  source: authored ? colour.source : "fallback-token"
7052
7529
  };
7053
7530
  }
7531
+ function resolveKnownSurfaceColour(value, palette, underlayReference) {
7532
+ const hex = resolveOpaqueSurfaceHex(value, palette, underlayReference);
7533
+ if (!hex) return resolveKnownColour(value, palette);
7534
+ const reference = parseThemeColorReference(value, { palette });
7535
+ return {
7536
+ hex,
7537
+ css: resolveThemeColorReferenceValue(value, { palette }),
7538
+ source: reference.kind === "literal-css" ? "literal-css" : "palette-token"
7539
+ };
7540
+ }
7054
7541
  function fallbackBackground(fallbackToken, palette) {
7055
7542
  if (!fallbackToken) return {
7056
7543
  kind: "unknown",
@@ -7300,6 +7787,7 @@ var NAMED_OPAQUE_COLOURS;
7300
7787
  var init_buttonSurfaceContext = __esmMin((() => {
7301
7788
  init_contrast();
7302
7789
  init_colorConversion();
7790
+ init_opaqueSurfaceColor();
7303
7791
  init_tokenOrColor();
7304
7792
  init_constants$1();
7305
7793
  init_resolveButtonColourStates();
@@ -9021,18 +9509,116 @@ function normalizeCardVariantRole(value) {
9021
9509
  if (typeof value !== "string") return null;
9022
9510
  return legacyCardVariantRoleAliases[value] ?? null;
9023
9511
  }
9024
- function normalizeBoxStylesCardVariant(value) {
9512
+ /**
9513
+ * The one untrusted-input boundary for the role vocabulary. Legacy alias values
9514
+ * (`variant1`, `variant2`, `statement`) normalize here and nowhere else.
9515
+ */
9516
+ function normalizeCardRole(value) {
9025
9517
  if (value === "none") return boxlessCardVariantValue;
9518
+ if (value === "open") return openCardRoleValue;
9026
9519
  return normalizeCardVariantRole(value);
9027
9520
  }
9028
- var cardVariantRoleValues, boxlessCardVariantValue, legacyCardVariantRoleAliases, cardSpacingSchema, gradientDirectionSchema, cardVariantRoleSchema, boxStylesCardVariantSchema, cardBackgroundSchema, cardBorderSchema, cardCornerValueSchema, cardAccentEdgeSchema, cardCornerRadiiSchema, cardVariantSchema, cardSystemSchema;
9521
+ /**
9522
+ * Role inference for legacy card systems authored before variants carried a
9523
+ * `role`. Priority 1 is the everyday card, priority 2 the statement card —
9524
+ * which is how variants are surfaced today. `open` is never inferred: a site
9525
+ * style has to opt into it.
9526
+ */
9527
+ function inferCardVariantRoleFromPriority(priority) {
9528
+ return PRIORITY_ROLE_INFERENCE[priority] ?? null;
9529
+ }
9530
+ /**
9531
+ * Lift a legacy `accentEdge` into the decoration list. The old emitter reset
9532
+ * `border: 0` implicitly whenever an accent edge was present; conversion drops
9533
+ * the border instead, so the output is unchanged and the data says so.
9534
+ */
9535
+ function normalizeLegacyAccentEdge(variant) {
9536
+ const { accentEdge, ...rest } = normalizeLegacySpacingAxes(variant);
9537
+ if (!accentEdge) return rest;
9538
+ const { border: _droppedByAccentEdgeReset, ...withoutBorder } = rest;
9539
+ return {
9540
+ ...withoutBorder,
9541
+ decorations: [{
9542
+ ...accentEdge,
9543
+ length: "full"
9544
+ }]
9545
+ };
9546
+ }
9547
+ /**
9548
+ * Lift a legacy `spacingAxes` into `spacing`. It always won over the flat value
9549
+ * when both were set, so the lift preserves the emitted padding exactly.
9550
+ */
9551
+ function normalizeLegacySpacingAxes(variant) {
9552
+ const { spacingAxes, ...rest } = variant;
9553
+ return spacingAxes ? {
9554
+ ...rest,
9555
+ spacing: spacingAxes
9556
+ } : variant;
9557
+ }
9558
+ function validateSingleDecorationSource(variant, ctx) {
9559
+ if (!variant.accentEdge || !variant.decorations) return;
9560
+ ctx.addIssue({
9561
+ code: "custom",
9562
+ path: ["decorations"],
9563
+ message: "A card variant carries either the legacy `accentEdge` or `decorations`, never both."
9564
+ });
9565
+ }
9566
+ /**
9567
+ * Fill in roles for legacy systems whose variants declare none. Inference is
9568
+ * collision-tolerant on purpose: first claimant wins and a later variant that
9569
+ * would infer a taken role simply gets no role. Legacy data is not obliged to
9570
+ * be well-formed, and a card system that fails to parse takes the whole theme
9571
+ * down with it.
9572
+ */
9573
+ function withInferredRoles(variants) {
9574
+ const claimed = new Set(variants.flatMap((variant) => variant.role ? [variant.role] : []));
9575
+ return variants.map((variant) => {
9576
+ if (variant.role) return variant;
9577
+ const inferred = inferCardVariantRoleFromPriority(variant.priority);
9578
+ if (!inferred || claimed.has(inferred)) return variant;
9579
+ claimed.add(inferred);
9580
+ return {
9581
+ ...variant,
9582
+ role: inferred
9583
+ };
9584
+ });
9585
+ }
9586
+ /**
9587
+ * Only *declared* roles are validated — a site style saying "these two
9588
+ * variants are both the default card" is an authoring error worth rejecting.
9589
+ */
9590
+ function validateUniqueDeclaredCardVariantRoles(system, ctx) {
9591
+ const declared = /* @__PURE__ */ new Set();
9592
+ system.variants.forEach((variant, index) => {
9593
+ const role = variant.role;
9594
+ if (!role) return;
9595
+ if (declared.has(role)) {
9596
+ ctx.addIssue({
9597
+ code: "custom",
9598
+ path: [
9599
+ "variants",
9600
+ index,
9601
+ "role"
9602
+ ],
9603
+ message: `Card role "${role}" is already implemented by another variant.`
9604
+ });
9605
+ return;
9606
+ }
9607
+ declared.add(role);
9608
+ });
9609
+ }
9610
+ var cardVariantRoleValues, boxlessCardVariantValue, openCardRoleValue, surfaceCardRoleValues, cardRoleValues, legacyCardVariantRoleAliases, cardSpacingSchema, cardSpacingAxesSchema, cardSpacingValueSchema, gradientDirectionSchema, cardVariantRoleSchema, surfaceCardRoleSchema, cardRoleSchema, boxStylesCardVariantSchema, normalizeBoxStylesCardVariant, PRIORITY_ROLE_INFERENCE, cardBackgroundSchema, cardBorderSchema, cardCornerValueSchema, cardEdgeSchema, cardAccentEdgeSchema, cardEdgeRuleWidthSchema, cardEdgeRuleLengthSchema, cardEdgeRuleAlignSchema, cardEdgeRuleSchema, cardDecorationSchema, cardDecorationsSchema, cardCornerRadiiSchema, cardVariantInputSchema, cardVariantSchema, cardSystemSchema;
9029
9611
  var init_types$12 = __esmMin((() => {
9030
9612
  init_themeColorTokens();
9031
9613
  cardVariantRoleValues = ["default", "alternative"];
9032
9614
  boxlessCardVariantValue = "none";
9615
+ openCardRoleValue = "open";
9616
+ surfaceCardRoleValues = [...cardVariantRoleValues, openCardRoleValue];
9617
+ cardRoleValues = [...surfaceCardRoleValues, boxlessCardVariantValue];
9033
9618
  legacyCardVariantRoleAliases = {
9034
9619
  variant1: "alternative",
9035
- variant2: "alternative"
9620
+ variant2: "alternative",
9621
+ statement: "alternative"
9036
9622
  };
9037
9623
  cardSpacingSchema = z.enum([
9038
9624
  "none",
@@ -9042,6 +9628,11 @@ var init_types$12 = __esmMin((() => {
9042
9628
  "comfortable",
9043
9629
  "spacious"
9044
9630
  ]);
9631
+ cardSpacingAxesSchema = z.object({
9632
+ block: cardSpacingSchema,
9633
+ inline: cardSpacingSchema
9634
+ });
9635
+ cardSpacingValueSchema = z.union([cardSpacingSchema, cardSpacingAxesSchema]);
9045
9636
  gradientDirectionSchema = z.enum([
9046
9637
  "to-r",
9047
9638
  "to-l",
@@ -9053,7 +9644,14 @@ var init_types$12 = __esmMin((() => {
9053
9644
  "to-bl"
9054
9645
  ]);
9055
9646
  cardVariantRoleSchema = z.enum(cardVariantRoleValues);
9056
- boxStylesCardVariantSchema = z.enum([...cardVariantRoleValues, boxlessCardVariantValue]);
9647
+ surfaceCardRoleSchema = z.enum(surfaceCardRoleValues);
9648
+ cardRoleSchema = z.enum(cardRoleValues);
9649
+ boxStylesCardVariantSchema = cardRoleSchema;
9650
+ normalizeBoxStylesCardVariant = normalizeCardRole;
9651
+ PRIORITY_ROLE_INFERENCE = {
9652
+ 1: "default",
9653
+ 2: "alternative"
9654
+ };
9057
9655
  cardBackgroundSchema = z.discriminatedUnion("type", [
9058
9656
  z.object({
9059
9657
  type: z.literal("solid"),
@@ -9078,13 +9676,14 @@ var init_types$12 = __esmMin((() => {
9078
9676
  "pill",
9079
9677
  "expressive"
9080
9678
  ]);
9679
+ cardEdgeSchema = z.enum([
9680
+ "left",
9681
+ "top",
9682
+ "right",
9683
+ "bottom"
9684
+ ]);
9081
9685
  cardAccentEdgeSchema = z.object({
9082
- edge: z.enum([
9083
- "left",
9084
- "top",
9085
- "right",
9086
- "bottom"
9087
- ]),
9686
+ edge: cardEdgeSchema,
9088
9687
  colorToken: themeColorTokenSchema,
9089
9688
  width: z.enum([
9090
9689
  "thin",
@@ -9093,13 +9692,39 @@ var init_types$12 = __esmMin((() => {
9093
9692
  "heavy"
9094
9693
  ])
9095
9694
  });
9695
+ cardEdgeRuleWidthSchema = z.enum([
9696
+ "hairline",
9697
+ "thin",
9698
+ "medium",
9699
+ "thick",
9700
+ "heavy"
9701
+ ]);
9702
+ cardEdgeRuleLengthSchema = z.enum(["full", "short"]);
9703
+ cardEdgeRuleAlignSchema = z.enum([
9704
+ "start",
9705
+ "center",
9706
+ "end"
9707
+ ]);
9708
+ cardEdgeRuleSchema = z.object({
9709
+ edge: cardEdgeSchema,
9710
+ colorToken: themeColorTokenSchema,
9711
+ width: cardEdgeRuleWidthSchema,
9712
+ /** Defaults to `full`. */
9713
+ length: cardEdgeRuleLengthSchema.optional(),
9714
+ /** Where a `short` rule sits along its edge. Defaults to `start`. */
9715
+ align: cardEdgeRuleAlignSchema.optional(),
9716
+ /** Opacity applied to `colorToken`, 0–1. Scoped here, not on the token. */
9717
+ alpha: z.number().min(0).max(1).optional()
9718
+ });
9719
+ cardDecorationSchema = cardEdgeRuleSchema;
9720
+ cardDecorationsSchema = z.array(cardDecorationSchema).max(2);
9096
9721
  cardCornerRadiiSchema = z.object({
9097
9722
  topLeft: cardCornerValueSchema.optional(),
9098
9723
  topRight: cardCornerValueSchema.optional(),
9099
9724
  bottomLeft: cardCornerValueSchema.optional(),
9100
9725
  bottomRight: cardCornerValueSchema.optional()
9101
9726
  });
9102
- cardVariantSchema = z.object({
9727
+ cardVariantInputSchema = z.object({
9103
9728
  id: z.string(),
9104
9729
  name: z.string().min(1).max(20),
9105
9730
  enabled: z.boolean(),
@@ -9108,8 +9733,10 @@ var init_types$12 = __esmMin((() => {
9108
9733
  z.literal(2),
9109
9734
  z.literal(3)
9110
9735
  ]),
9736
+ role: surfaceCardRoleSchema.optional(),
9111
9737
  background: cardBackgroundSchema,
9112
- spacing: cardSpacingSchema,
9738
+ spacing: cardSpacingValueSchema,
9739
+ spacingAxes: cardSpacingAxesSchema.optional(),
9113
9740
  foregroundToken: themeColorTokenSchema.optional(),
9114
9741
  shadow: z.object({
9115
9742
  elevation: z.enum([
@@ -9133,19 +9760,34 @@ var init_types$12 = __esmMin((() => {
9133
9760
  ]).optional(),
9134
9761
  cornerRadii: cardCornerRadiiSchema.optional(),
9135
9762
  border: cardBorderSchema.optional(),
9763
+ decorations: cardDecorationsSchema.optional(),
9136
9764
  accentEdge: cardAccentEdgeSchema.optional()
9137
9765
  });
9138
- cardSystemSchema = z.object({ variants: z.array(cardVariantSchema).min(1).max(3) });
9766
+ cardVariantSchema = cardVariantInputSchema.superRefine(validateSingleDecorationSource).transform(normalizeLegacyAccentEdge);
9767
+ cardSystemSchema = z.object({ variants: z.array(cardVariantSchema).min(1).max(3) }).superRefine(validateUniqueDeclaredCardVariantRoles).transform((system) => ({ variants: withInferredRoles(system.variants) }));
9139
9768
  }));
9140
9769
  //#endregion
9141
9770
  //#region ../theme-core/src/cards/constants.ts
9142
9771
  var init_constants = __esmMin((() => {}));
9143
9772
  //#endregion
9773
+ //#region ../theme-core/src/cards/decorations.ts
9774
+ var init_decorations = __esmMin((() => {}));
9775
+ //#endregion
9776
+ //#region ../theme-core/src/cards/openCardVariant.ts
9777
+ var init_openCardVariant = __esmMin((() => {}));
9778
+ //#endregion
9144
9779
  //#region ../theme-core/src/cards/generateDefaultCardSystem.ts
9145
9780
  var init_generateDefaultCardSystem = __esmMin((() => {}));
9146
9781
  //#endregion
9782
+ //#region ../theme-core/src/cards/roles.ts
9783
+ var init_roles = __esmMin((() => {
9784
+ init_types$12();
9785
+ }));
9786
+ //#endregion
9147
9787
  //#region ../theme-core/src/cards/generateCardCss.ts
9148
9788
  var init_generateCardCss = __esmMin((() => {
9789
+ init_roles();
9790
+ init_types$12();
9149
9791
  init_surfaces();
9150
9792
  }));
9151
9793
  //#endregion
@@ -9158,6 +9800,9 @@ var init_core$2 = __esmMin((() => {
9158
9800
  var init_cards = __esmMin((() => {
9159
9801
  init_types$12();
9160
9802
  init_constants();
9803
+ init_decorations();
9804
+ init_roles();
9805
+ init_openCardVariant();
9161
9806
  init_generateCardCss();
9162
9807
  init_generateDefaultCardSystem();
9163
9808
  init_core$2();
@@ -9781,7 +10426,6 @@ function defineBlockDesignCapability(capability) {
9781
10426
  sectionHeights: capability.sectionHeights ?? ["default"],
9782
10427
  imageSurfaceTreatments: capability.imageSurfaceTreatments ?? ["none"],
9783
10428
  imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
9784
- testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"],
9785
10429
  tileTreatments: capability.tileTreatments ?? ["default"],
9786
10430
  eventListTreatments: capability.eventListTreatments ?? ["plain"],
9787
10431
  eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"],
@@ -9954,6 +10598,17 @@ var init_rawStyleFields = __esmMin((() => {
9954
10598
  [...themeV2RuntimeStyleFieldNames, ...themeV2BlockSpecificRawStyleFieldNames];
9955
10599
  pageDesignEditorBackgroundOverrideOwner = "page-design-editor";
9956
10600
  siteChromeBackgroundOverrideOwner = "site-chrome-editor";
10601
+ })), headerVariantValues, legacyHeaderVariants, legacyHeaderVariantValues, headerVariantWithLegacyAliasSchema;
10602
+ var init_legacyHeaderVariant = __esmMin((() => {
10603
+ headerVariantValues = [
10604
+ "classic",
10605
+ "centered",
10606
+ "floating"
10607
+ ];
10608
+ z.enum(headerVariantValues);
10609
+ legacyHeaderVariants = { transparent: "floating" };
10610
+ legacyHeaderVariantValues = Object.keys(legacyHeaderVariants);
10611
+ headerVariantWithLegacyAliasSchema = z.enum([...headerVariantValues, ...legacyHeaderVariantValues]).transform((value) => value in legacyHeaderVariants ? legacyHeaderVariants[value] : value);
9957
10612
  }));
9958
10613
  //#endregion
9959
10614
  //#region ../theme-core/src/responsive/breakpoints.ts
@@ -10106,7 +10761,7 @@ var init_boxBackgroundSchema = __esmMin((() => {
10106
10761
  showVideoOnMobile: z.boolean().nullable().optional()
10107
10762
  })
10108
10763
  ]);
10109
- })), axesSchema, typographyStyleSchema, bodyTypographyStyleSchema, headingSizeSchema, headingTypographyOverridesSchema, headingTypographyStyleSchema, proseLinkUnderlineStyleSchema, proseLinkUnderlineThicknessSchema, proseLinkUnderlineOffsetSchema, proseLinkStyleSchema, semanticSpacingSchema, boxRoundedSchema, noHeadingDecorationSchema, visibleHeadingDecorationSchema, headingDecorationSchema, headingDecorationOverrideSchema, accordionIconTreatmentSchema, sectionStylesOverrideSchema, containerStylesOverrideSchema, cardBorderOverrideSchema, cardStylesOverrideSchema, blockStyleOverridesSchema, blockThemeOverrideSchema, typographyScaleSchema, eyebrowTypographyStyleSchema, typographySchema, spaceSchema, corners, shadow, border, motion, inputStyle, headerVariant, headerPositioning, headerNavStyle, navFontWeight, headerMaxWidth, headerBarFrame, headerBorderSchema, logoStyleSchema, headerLogoTextSchema, navEffectsSchema, dropdownStyleSchema, headerCtaGapSchema, headerCtaTreatmentSchema, navContainerSchema, headerBackgroundSchema, headerSchema, footerVariant, footerMaxWidth, footerMode, footerNavLayoutMode, footerNavLayoutAlign, footerSpacing, footerLogoPlacement, footerLogoSize, footerLogoMaxHeight, footerBottomTextLinkStyleSchema, footerBottomBarSchema, footerNavLayoutSchema, footerLogoSchema, footerSchema, containerPaddingPresetSchema, layoutSchema, heroTypographySizeSchema, heroTypographyLineHeightSchema, heroResponsiveTypographySchema, heroTypographySchema, heroSchema, bodyTextIntroTypographySizeSchema, bodyTextSchema, gradientsSchema, testimonialQuoteTreatmentSchema, themeSchema;
10764
+ })), axesSchema, typographyStyleSchema, bodyTypographyStyleSchema, headingSizeSchema, headingTypographyOverridesSchema, headingTypographyStyleSchema, proseLinkUnderlineStyleSchema, proseLinkUnderlineThicknessSchema, proseLinkUnderlineOffsetSchema, proseLinkStyleSchema, semanticSpacingSchema, boxRoundedSchema, noHeadingDecorationSchema, visibleHeadingDecorationSchema, headingDecorationSchema, headingDecorationOverrideSchema, accordionIconTreatmentSchema, sectionStylesOverrideSchema, containerStylesOverrideSchema, cardBorderOverrideSchema, cardStylesOverrideSchema, blockStyleOverridesSchema, blockThemeOverrideSchema, typographyScaleSchema, eyebrowTypographyStyleSchema, typographySchema, spaceSchema, corners, shadow, border, motion, inputStyle, headerPositioning, headerNavStyle, navFontWeight, headerMaxWidth, headerBarFrame, headerBorderSchema, logoStyleSchema, headerLogoTextSchema, navEffectsSchema, dropdownStyleSchema, headerCtaGapSchema, headerCtaTreatmentSchema, navContainerSchema, headerBackgroundSchema, headerSchema, footerVariant, footerMaxWidth, footerMode, footerNavLayoutMode, footerNavLayoutAlign, footerSpacing, footerLogoPlacement, footerLogoSize, footerLogoMaxHeight, footerBottomTextLinkStyleSchema, footerBottomBarSchema, footerNavLayoutSchema, footerLogoSchema, footerSchema, containerPaddingPresetSchema, layoutSchema, heroTypographySizeSchema, heroTypographyLineHeightSchema, heroResponsiveTypographySchema, heroTypographySchema, heroSchema, bodyTextIntroTypographySizeSchema, bodyTextSchema, gradientsSchema, testimonialQuoteTreatmentSchema, themeSchema;
10110
10765
  var init_schema$2 = __esmMin((() => {
10111
10766
  init_media$3();
10112
10767
  init_schema$3();
@@ -10124,6 +10779,7 @@ var init_schema$2 = __esmMin((() => {
10124
10779
  init_rawStyleFields();
10125
10780
  init_themeColorTokens();
10126
10781
  init_tokenOrColor();
10782
+ init_legacyHeaderVariant();
10127
10783
  init_scrollTreatment();
10128
10784
  init_containerSchema();
10129
10785
  init_interactionPalette();
@@ -10319,14 +10975,7 @@ var init_schema$2 = __esmMin((() => {
10319
10975
  spacing: semanticSpacingSchema.nullable().optional(),
10320
10976
  raised: z.boolean().nullable().optional(),
10321
10977
  rounded: boxRoundedSchema.nullable().optional(),
10322
- treatment: z.enum([
10323
- "accent-quote",
10324
- "editorial-rule",
10325
- "soft-panel",
10326
- "editorial-serif-quote",
10327
- "editorial-open",
10328
- "color-blocked"
10329
- ]).nullable().optional(),
10978
+ role: cardRoleSchema.nullable().optional(),
10330
10979
  cardVariant: boxStylesCardVariantSchema.nullable().optional()
10331
10980
  });
10332
10981
  blockStyleOverridesSchema = z.object({
@@ -10432,30 +11081,6 @@ var init_schema$2 = __esmMin((() => {
10432
11081
  ]).nullable()
10433
11082
  });
10434
11083
  z.object({ shape: corners });
10435
- z.object({
10436
- elevation: z.enum([
10437
- "none",
10438
- "low",
10439
- "medium",
10440
- "high"
10441
- ]),
10442
- border: z.enum([
10443
- "none",
10444
- "subtle",
10445
- "defined"
10446
- ]),
10447
- shape: corners,
10448
- headerStyle: z.enum([
10449
- "plain",
10450
- "accentBar",
10451
- "subtleBg"
10452
- ]).nullable(),
10453
- mediaTreatment: z.enum([
10454
- "square",
10455
- "rounded",
10456
- "bleed"
10457
- ]).nullable()
10458
- });
10459
11084
  inputStyle = z.object({
10460
11085
  shape: corners,
10461
11086
  border: z.enum([
@@ -10470,12 +11095,6 @@ var init_schema$2 = __esmMin((() => {
10470
11095
  ]),
10471
11096
  label: z.enum(["inside", "above"])
10472
11097
  });
10473
- headerVariant = z.enum([
10474
- "classic",
10475
- "centered",
10476
- "transparent",
10477
- "floating"
10478
- ]);
10479
11098
  headerPositioning = z.enum([
10480
11099
  "static",
10481
11100
  "sticky",
@@ -10615,7 +11234,7 @@ var init_schema$2 = __esmMin((() => {
10615
11234
  textColor: tokenOrCssColorValueSchema.nullable().optional()
10616
11235
  });
10617
11236
  headerSchema = z.object({
10618
- variant: headerVariant,
11237
+ variant: headerVariantWithLegacyAliasSchema,
10619
11238
  positioning: headerPositioning,
10620
11239
  shrinkOnScroll: z.boolean(),
10621
11240
  maxWidth: headerMaxWidth,
@@ -10927,9 +11546,20 @@ function assertValidOptionGroups(preset) {
10927
11546
  defineLookOptionGroup(group);
10928
11547
  });
10929
11548
  }
11549
+ /**
11550
+ * Every Look carries a card role. A Look that says nothing about cards renders
11551
+ * none, which is the overwhelming majority of them; the card-bearing ones name
11552
+ * the role they want and the site style owns how it looks.
11553
+ */
10930
11554
  function defineBlockAppearancePreset(preset) {
10931
11555
  assertValidOptionGroups(preset);
10932
- return preset;
11556
+ return {
11557
+ ...preset,
11558
+ design: {
11559
+ ...preset.design,
11560
+ cardRole: preset.design.cardRole ?? "none"
11561
+ }
11562
+ };
10933
11563
  }
10934
11564
  var init_appearancePresetResolution = __esmMin((() => {
10935
11565
  init_lookOptionGroups();
@@ -10974,7 +11604,6 @@ var init_blockAppearancePresets = __esmMin((() => {
10974
11604
  design: {
10975
11605
  sectionSurface: "hero-image",
10976
11606
  contentFrame: plainFrame,
10977
- itemSurface: "none",
10978
11607
  sectionHeight: "hero",
10979
11608
  heroComposition: "center",
10980
11609
  heroTypographyScale: "display",
@@ -11017,7 +11646,6 @@ var init_blockAppearancePresets = __esmMin((() => {
11017
11646
  design: {
11018
11647
  sectionSurface: "hero-image",
11019
11648
  contentFrame: panelFrame("raised"),
11020
- itemSurface: "none",
11021
11649
  sectionHeight: "immersive",
11022
11650
  heroComposition: "bottom-left",
11023
11651
  heroTypographyScale: "display",
@@ -11042,7 +11670,6 @@ var init_blockAppearancePresets = __esmMin((() => {
11042
11670
  design: {
11043
11671
  sectionSurface: "hero-image",
11044
11672
  contentFrame: plainFrame,
11045
- itemSurface: "none",
11046
11673
  sectionHeight: "immersive",
11047
11674
  heroComposition: "center",
11048
11675
  heroTypographyScale: "poster",
@@ -11063,7 +11690,6 @@ var init_blockAppearancePresets = __esmMin((() => {
11063
11690
  design: {
11064
11691
  sectionSurface: "hero-image",
11065
11692
  contentFrame: plainFrame,
11066
- itemSurface: "none",
11067
11693
  sectionHeight: "immersive",
11068
11694
  heroComposition: "center",
11069
11695
  heroTypographyScale: "display",
@@ -11083,7 +11709,6 @@ var init_blockAppearancePresets = __esmMin((() => {
11083
11709
  design: {
11084
11710
  sectionSurface: "hero-image",
11085
11711
  contentFrame: plainFrame,
11086
- itemSurface: "none",
11087
11712
  sectionHeight: "immersive",
11088
11713
  heroComposition: "center",
11089
11714
  heroTypographyScale: "display",
@@ -11103,7 +11728,6 @@ var init_blockAppearancePresets = __esmMin((() => {
11103
11728
  design: {
11104
11729
  sectionSurface: "brand-depth-band",
11105
11730
  contentFrame: plainFrame,
11106
- itemSurface: "none",
11107
11731
  heroComposition: "center",
11108
11732
  heroTypographyScale: "editorial",
11109
11733
  eyebrowTreatment: "accent-pill-bounce"
@@ -11116,7 +11740,6 @@ var init_blockAppearancePresets = __esmMin((() => {
11116
11740
  design: {
11117
11741
  sectionSurface: "muted-band",
11118
11742
  contentFrame: panelFrame("inset"),
11119
- itemSurface: "none",
11120
11743
  heroComposition: "center",
11121
11744
  heroTypographyScale: "editorial"
11122
11745
  }
@@ -11129,7 +11752,6 @@ var init_blockAppearancePresets = __esmMin((() => {
11129
11752
  design: {
11130
11753
  sectionSurface: "base",
11131
11754
  contentFrame: plainFrame,
11132
- itemSurface: "none",
11133
11755
  heroTypographyScale: "editorial"
11134
11756
  }
11135
11757
  }), defineBlockAppearancePreset({
@@ -11141,7 +11763,6 @@ var init_blockAppearancePresets = __esmMin((() => {
11141
11763
  design: {
11142
11764
  sectionSurface: "brand-depth-band",
11143
11765
  contentFrame: plainFrame,
11144
- itemSurface: "none",
11145
11766
  heroTypographyScale: "display",
11146
11767
  eyebrowTreatment: "accent-pill-bounce"
11147
11768
  }
@@ -11154,7 +11775,6 @@ var init_blockAppearancePresets = __esmMin((() => {
11154
11775
  design: {
11155
11776
  sectionSurface: "muted-band",
11156
11777
  contentFrame: panelFrame("raised"),
11157
- itemSurface: "none",
11158
11778
  heroTypographyScale: "editorial"
11159
11779
  }
11160
11780
  }), defineBlockAppearancePreset({
@@ -11166,7 +11786,6 @@ var init_blockAppearancePresets = __esmMin((() => {
11166
11786
  design: {
11167
11787
  sectionSurface: "accent-band",
11168
11788
  contentFrame: panelFrame("raised"),
11169
- itemSurface: "none",
11170
11789
  heroTypographyScale: "display"
11171
11790
  }
11172
11791
  }), defineBlockAppearancePreset({
@@ -11178,7 +11797,6 @@ var init_blockAppearancePresets = __esmMin((() => {
11178
11797
  design: {
11179
11798
  sectionSurface: "base",
11180
11799
  contentFrame: plainFrame,
11181
- itemSurface: "none",
11182
11800
  composition: {
11183
11801
  kind: "intro",
11184
11802
  treatment: "editorial-statement"
@@ -11193,7 +11811,6 @@ var init_blockAppearancePresets = __esmMin((() => {
11193
11811
  design: {
11194
11812
  sectionSurface: "base",
11195
11813
  contentFrame: plainFrame,
11196
- itemSurface: "none",
11197
11814
  composition: {
11198
11815
  kind: "intro",
11199
11816
  treatment: "portrait-bio"
@@ -11207,7 +11824,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11207
11824
  design: {
11208
11825
  sectionSurface: "base",
11209
11826
  contentFrame: plainFrame,
11210
- itemSurface: "default"
11827
+ cardRole: "default"
11211
11828
  }
11212
11829
  }), defineBlockAppearancePreset({
11213
11830
  id: "offerings-preview-secondary-cards",
@@ -11217,7 +11834,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11217
11834
  design: {
11218
11835
  sectionSurface: "muted-band",
11219
11836
  contentFrame: plainFrame,
11220
- itemSurface: "inset"
11837
+ cardRole: "alternative"
11221
11838
  }
11222
11839
  }), defineBlockAppearancePreset({
11223
11840
  id: "offerings-preview-non-carded",
@@ -11227,7 +11844,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11227
11844
  design: {
11228
11845
  sectionSurface: "muted-band",
11229
11846
  contentFrame: plainFrame,
11230
- itemSurface: "editorial"
11847
+ cardRole: "open"
11231
11848
  }
11232
11849
  }), defineBlockAppearancePreset({
11233
11850
  id: "offerings-preview-paired-feature-cards",
@@ -11237,8 +11854,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11237
11854
  constraints: { layoutVariantKeys: ["cards"] },
11238
11855
  design: {
11239
11856
  sectionSurface: "base",
11240
- contentFrame: plainFrame,
11241
- itemSurface: "none"
11857
+ contentFrame: plainFrame
11242
11858
  }
11243
11859
  }), defineBlockAppearancePreset({
11244
11860
  id: "offerings-preview-open-editorial-columns",
@@ -11248,8 +11864,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11248
11864
  constraints: { layoutVariantKeys: ["cards"] },
11249
11865
  design: {
11250
11866
  sectionSurface: "base",
11251
- contentFrame: plainFrame,
11252
- itemSurface: "none"
11867
+ contentFrame: plainFrame
11253
11868
  }
11254
11869
  }), defineBlockAppearancePreset({
11255
11870
  id: "offerings-preview-joined-programme-panel",
@@ -11259,8 +11874,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11259
11874
  constraints: { layoutVariantKeys: ["cards"] },
11260
11875
  design: {
11261
11876
  sectionSurface: "base",
11262
- contentFrame: plainFrame,
11263
- itemSurface: "none"
11877
+ contentFrame: plainFrame
11264
11878
  }
11265
11879
  }), defineBlockAppearancePreset({
11266
11880
  id: "feature-cards-raised-rule",
@@ -11270,7 +11884,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11270
11884
  design: {
11271
11885
  sectionSurface: "base",
11272
11886
  contentFrame: plainFrame,
11273
- itemSurface: "raised"
11887
+ cardRole: "default"
11274
11888
  }
11275
11889
  }), defineBlockAppearancePreset({
11276
11890
  id: "feature-cards-bold-colors",
@@ -11280,7 +11894,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11280
11894
  design: {
11281
11895
  sectionSurface: "base",
11282
11896
  contentFrame: plainFrame,
11283
- itemSurface: "color-blocked"
11897
+ cardRole: "alternative"
11284
11898
  }
11285
11899
  }), defineBlockAppearancePreset({
11286
11900
  id: "feature-cards-editorial-columns",
@@ -11288,9 +11902,9 @@ var init_blockAppearancePresets = __esmMin((() => {
11288
11902
  label: "Editorial open columns",
11289
11903
  blockKinds: ["block.feature-cards"],
11290
11904
  design: {
11291
- sectionSurface: "base",
11905
+ sectionSurface: "muted-band",
11292
11906
  contentFrame: plainFrame,
11293
- itemSurface: "editorial"
11907
+ cardRole: "open"
11294
11908
  }
11295
11909
  }), defineBlockAppearancePreset({
11296
11910
  id: "feature-cards-asymmetric-emphasis",
@@ -11301,7 +11915,6 @@ var init_blockAppearancePresets = __esmMin((() => {
11301
11915
  design: {
11302
11916
  sectionSurface: "base",
11303
11917
  contentFrame: plainFrame,
11304
- itemSurface: "none",
11305
11918
  composition: {
11306
11919
  kind: "feature-cards",
11307
11920
  treatment: "asymmetric-emphasis"
@@ -11316,7 +11929,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11316
11929
  design: {
11317
11930
  sectionSurface: "brand-depth-band",
11318
11931
  contentFrame: plainFrame,
11319
- itemSurface: "inset",
11932
+ cardRole: "alternative",
11320
11933
  composition: {
11321
11934
  kind: "feature-cards",
11322
11935
  treatment: "framed-programme"
@@ -11330,7 +11943,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11330
11943
  design: {
11331
11944
  sectionSurface: "base",
11332
11945
  contentFrame: plainFrame,
11333
- itemSurface: "inset"
11946
+ cardRole: "alternative"
11334
11947
  }
11335
11948
  }), defineBlockAppearancePreset({
11336
11949
  id: "feature-cards-editorial-diptych",
@@ -11341,7 +11954,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11341
11954
  design: {
11342
11955
  sectionSurface: "base",
11343
11956
  contentFrame: plainFrame,
11344
- itemSurface: "flat"
11957
+ cardRole: "default"
11345
11958
  }
11346
11959
  }), defineBlockAppearancePreset({
11347
11960
  id: "feature-cards-editorial-pathways",
@@ -11352,7 +11965,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11352
11965
  design: {
11353
11966
  sectionSurface: "base",
11354
11967
  contentFrame: plainFrame,
11355
- itemSurface: "flat"
11968
+ cardRole: "default"
11356
11969
  }
11357
11970
  }), defineBlockAppearancePreset({
11358
11971
  id: "feature-cards-photo-tiles",
@@ -11362,7 +11975,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11362
11975
  design: {
11363
11976
  sectionSurface: "base",
11364
11977
  contentFrame: plainFrame,
11365
- itemSurface: "raised"
11978
+ cardRole: "default"
11366
11979
  }
11367
11980
  }), defineBlockAppearancePreset({
11368
11981
  id: "events-lined-panel",
@@ -11371,8 +11984,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11371
11984
  blockKinds: ["block.event-calendar", "block.event-listing"],
11372
11985
  design: {
11373
11986
  sectionSurface: "base",
11374
- contentFrame: panelFrame("raised"),
11375
- itemSurface: "none"
11987
+ contentFrame: panelFrame("raised")
11376
11988
  }
11377
11989
  }), defineBlockAppearancePreset({
11378
11990
  id: "events-ruled-register",
@@ -11382,7 +11994,6 @@ var init_blockAppearancePresets = __esmMin((() => {
11382
11994
  design: {
11383
11995
  sectionSurface: "brand-depth-band",
11384
11996
  contentFrame: plainFrame,
11385
- itemSurface: "none",
11386
11997
  eventListTreatment: "ruled-register"
11387
11998
  }
11388
11999
  }), defineBlockAppearancePreset({
@@ -11393,7 +12004,6 @@ var init_blockAppearancePresets = __esmMin((() => {
11393
12004
  design: {
11394
12005
  sectionSurface: "base",
11395
12006
  contentFrame: plainFrame,
11396
- itemSurface: "none",
11397
12007
  eventListTreatment: "editorial-register"
11398
12008
  }
11399
12009
  }), defineBlockAppearancePreset({
@@ -11404,7 +12014,6 @@ var init_blockAppearancePresets = __esmMin((() => {
11404
12014
  design: {
11405
12015
  sectionSurface: "accent-band",
11406
12016
  contentFrame: plainFrame,
11407
- itemSurface: "none",
11408
12017
  eventListTreatment: "dense-index"
11409
12018
  }
11410
12019
  }), defineBlockAppearancePreset({
@@ -11415,7 +12024,6 @@ var init_blockAppearancePresets = __esmMin((() => {
11415
12024
  design: {
11416
12025
  sectionSurface: "brand-depth-band",
11417
12026
  contentFrame: plainFrame,
11418
- itemSurface: "none",
11419
12027
  tileTreatment: "brand-depth"
11420
12028
  }
11421
12029
  }), defineBlockAppearancePreset({
@@ -11425,8 +12033,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11425
12033
  blockKinds: ["block.media-text"],
11426
12034
  design: {
11427
12035
  sectionSurface: "muted-band",
11428
- contentFrame: flushPanelFrame({ bleed: "start" }),
11429
- itemSurface: "none"
12036
+ contentFrame: flushPanelFrame({ bleed: "start" })
11430
12037
  }
11431
12038
  }), defineBlockAppearancePreset({
11432
12039
  id: "testimonials-simple-cards",
@@ -11436,7 +12043,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11436
12043
  design: {
11437
12044
  sectionSurface: "base",
11438
12045
  contentFrame: plainFrame,
11439
- itemSurface: "default"
12046
+ cardRole: "default"
11440
12047
  }
11441
12048
  }), defineBlockAppearancePreset({
11442
12049
  id: "testimonials-raised-panel",
@@ -11446,7 +12053,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11446
12053
  design: {
11447
12054
  sectionSurface: "muted-band",
11448
12055
  contentFrame: panelFrame("raised"),
11449
- itemSurface: "raised"
12056
+ cardRole: "default"
11450
12057
  }
11451
12058
  }), defineBlockAppearancePreset({
11452
12059
  id: "testimonials-accent-panel",
@@ -11456,7 +12063,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11456
12063
  design: {
11457
12064
  sectionSurface: "accent-band",
11458
12065
  contentFrame: panelFrame("raised"),
11459
- itemSurface: "raised"
12066
+ cardRole: "default"
11460
12067
  }
11461
12068
  }), defineBlockAppearancePreset({
11462
12069
  id: "testimonials-default-cards",
@@ -11466,8 +12073,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11466
12073
  design: {
11467
12074
  sectionSurface: "base",
11468
12075
  contentFrame: plainFrame,
11469
- itemSurface: "none",
11470
- testimonialCardTreatment: "default"
12076
+ cardRole: "default"
11471
12077
  }
11472
12078
  }), defineBlockAppearancePreset({
11473
12079
  id: "testimonials-statement-cards",
@@ -11477,8 +12083,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11477
12083
  design: {
11478
12084
  sectionSurface: "accent-band",
11479
12085
  contentFrame: plainFrame,
11480
- itemSurface: "raised",
11481
- testimonialCardTreatment: "statement"
12086
+ cardRole: "alternative"
11482
12087
  }
11483
12088
  }), defineBlockAppearancePreset({
11484
12089
  id: "testimonials-brand-statement-cards",
@@ -11488,8 +12093,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11488
12093
  design: {
11489
12094
  sectionSurface: "brand-depth-band",
11490
12095
  contentFrame: plainFrame,
11491
- itemSurface: "raised",
11492
- testimonialCardTreatment: "statement"
12096
+ cardRole: "alternative"
11493
12097
  }
11494
12098
  }), defineBlockAppearancePreset({
11495
12099
  id: "testimonials-non-carded",
@@ -11499,8 +12103,10 @@ var init_blockAppearancePresets = __esmMin((() => {
11499
12103
  design: {
11500
12104
  sectionSurface: "muted-band",
11501
12105
  contentFrame: plainFrame,
11502
- itemSurface: "none",
11503
- testimonialCardTreatment: "non-carded"
12106
+ composition: {
12107
+ kind: "testimonials",
12108
+ treatment: "open-editorial"
12109
+ }
11504
12110
  }
11505
12111
  }), defineBlockAppearancePreset({
11506
12112
  id: "testimonials-evergreen-lead",
@@ -11510,8 +12116,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11510
12116
  constraints: { layoutVariantKeys: ["featured-editorial"] },
11511
12117
  design: {
11512
12118
  sectionSurface: "base",
11513
- contentFrame: plainFrame,
11514
- itemSurface: "none"
12119
+ contentFrame: plainFrame
11515
12120
  }
11516
12121
  }), defineBlockAppearancePreset({
11517
12122
  id: "testimonials-room-and-response",
@@ -11521,8 +12126,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11521
12126
  constraints: { layoutVariantKeys: ["featured-editorial"] },
11522
12127
  design: {
11523
12128
  sectionSurface: "base",
11524
- contentFrame: plainFrame,
11525
- itemSurface: "none"
12129
+ contentFrame: plainFrame
11526
12130
  }
11527
12131
  }), defineBlockAppearancePreset({
11528
12132
  id: "testimonials-open-floor",
@@ -11532,8 +12136,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11532
12136
  constraints: { layoutVariantKeys: ["featured-editorial"] },
11533
12137
  design: {
11534
12138
  sectionSurface: "base",
11535
- contentFrame: plainFrame,
11536
- itemSurface: "none"
12139
+ contentFrame: plainFrame
11537
12140
  }
11538
12141
  }), defineBlockAppearancePreset({
11539
12142
  id: "faq-base-accordion",
@@ -11543,7 +12146,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11543
12146
  design: {
11544
12147
  sectionSurface: "base",
11545
12148
  contentFrame: plainFrame,
11546
- itemSurface: "default"
12149
+ cardRole: "default"
11547
12150
  }
11548
12151
  }), defineBlockAppearancePreset({
11549
12152
  id: "faq-contained-help",
@@ -11553,7 +12156,7 @@ var init_blockAppearancePresets = __esmMin((() => {
11553
12156
  design: {
11554
12157
  sectionSurface: "muted-band",
11555
12158
  contentFrame: panelFrame("inset"),
11556
- itemSurface: "default"
12159
+ cardRole: "default"
11557
12160
  }
11558
12161
  }), defineBlockAppearancePreset({
11559
12162
  id: "contact-form-panel",
@@ -11562,8 +12165,16 @@ var init_blockAppearancePresets = __esmMin((() => {
11562
12165
  blockKinds: ["block.form"],
11563
12166
  design: {
11564
12167
  sectionSurface: "muted-band",
11565
- contentFrame: panelFrame("raised"),
11566
- itemSurface: "none"
12168
+ contentFrame: panelFrame("raised")
12169
+ }
12170
+ }), defineBlockAppearancePreset({
12171
+ id: "booking-brand-band",
12172
+ target: "contact-form",
12173
+ label: "Brand band booking",
12174
+ blockKinds: ["block.appointment-booking"],
12175
+ design: {
12176
+ sectionSurface: "brand-depth-band",
12177
+ contentFrame: plainFrame
11567
12178
  }
11568
12179
  }), defineBlockAppearancePreset({
11569
12180
  id: "cta-accent-band",
@@ -11573,7 +12184,6 @@ var init_blockAppearancePresets = __esmMin((() => {
11573
12184
  design: {
11574
12185
  sectionSurface: "accent-band",
11575
12186
  contentFrame: plainFrame,
11576
- itemSurface: "none",
11577
12187
  eyebrowTreatment: "accent"
11578
12188
  }
11579
12189
  });
@@ -11749,7 +12359,6 @@ function uniqueStrings(values) {
11749
12359
  }
11750
12360
  var backgroundAppearanceQuickColorTokenNames, backgroundAppearanceBaseColorTokenNames, backgroundAppearanceShadeableColorTokenNames, backgroundAppearanceColorTokenNames, backgroundAppearanceColorTokenNameSet;
11751
12361
  var init_backgroundAppearance = __esmMin((() => {
11752
- init_palette();
11753
12362
  init_tokens();
11754
12363
  backgroundAppearanceQuickColorTokenNames = [
11755
12364
  "background",
@@ -11780,6 +12389,34 @@ var init_backgroundAppearance = __esmMin((() => {
11780
12389
  backgroundAppearanceColorTokenNameSet = new Set(backgroundAppearanceColorTokenNames);
11781
12390
  }));
11782
12391
  //#endregion
12392
+ //#region ../theme-core/src/site-styles/cardRoleVocabulary.ts
12393
+ /**
12394
+ * Read a card role from untrusted input, accepting the legacy `itemSurface`
12395
+ * vocabulary as aliases. Returns `null` for anything else.
12396
+ */
12397
+ function cardRoleFromLegacyVocabulary(value) {
12398
+ const role = normalizeCardRole(value);
12399
+ if (role) return role;
12400
+ if (typeof value !== "string") return null;
12401
+ return legacyItemSurfaceCardRoles[value] ?? null;
12402
+ }
12403
+ var legacyItemSurfaceCardRoles, cardRoleWithLegacyAliasSchema;
12404
+ var init_cardRoleVocabulary = __esmMin((() => {
12405
+ init_cards();
12406
+ legacyItemSurfaceCardRoles = {
12407
+ none: "none",
12408
+ flat: "default",
12409
+ default: "default",
12410
+ outlined: "default",
12411
+ raised: "default",
12412
+ inset: "alternative",
12413
+ editorial: "open",
12414
+ "color-blocked": "alternative"
12415
+ };
12416
+ Object.keys(legacyItemSurfaceCardRoles);
12417
+ cardRoleWithLegacyAliasSchema = z.preprocess((value) => cardRoleFromLegacyVocabulary(value) ?? value, cardRoleSchema);
12418
+ }));
12419
+ //#endregion
11783
12420
  //#region ../theme-core/src/site-styles/compositionBudget.ts
11784
12421
  var init_compositionBudget = __esmMin((() => {}));
11785
12422
  //#endregion
@@ -12174,13 +12811,14 @@ var init_siteStyleDefaults$1 = __esmMin((() => {
12174
12811
  }));
12175
12812
  //#endregion
12176
12813
  //#region ../theme-core/src/cards/siteStyleDefaults.ts
12177
- var southWestCardSystem, clarityZenCardSystem, originalJoyCardSystem;
12814
+ var southWestCardSystem, clarityZenCardSystem, groundedPracticeCardSystem, originalJoyCardSystem;
12178
12815
  var init_siteStyleDefaults = __esmMin((() => {
12179
12816
  southWestCardSystem = { variants: [{
12180
12817
  id: "default",
12181
12818
  name: "Default",
12182
12819
  enabled: true,
12183
12820
  priority: 1,
12821
+ role: "default",
12184
12822
  background: {
12185
12823
  type: "solid",
12186
12824
  colorToken: "surface"
@@ -12198,6 +12836,7 @@ var init_siteStyleDefaults = __esmMin((() => {
12198
12836
  name: "Statement",
12199
12837
  enabled: true,
12200
12838
  priority: 2,
12839
+ role: "alternative",
12201
12840
  background: {
12202
12841
  type: "solid",
12203
12842
  colorToken: "primary-700"
@@ -12209,11 +12848,12 @@ var init_siteStyleDefaults = __esmMin((() => {
12209
12848
  softness: null,
12210
12849
  position: "bottom"
12211
12850
  },
12212
- accentEdge: {
12851
+ decorations: [{
12213
12852
  edge: "left",
12214
12853
  colorToken: "secondary",
12215
- width: "heavy"
12216
- },
12854
+ width: "heavy",
12855
+ length: "full"
12856
+ }],
12217
12857
  cornerRadii: {
12218
12858
  topLeft: "square",
12219
12859
  topRight: "expressive",
@@ -12226,6 +12866,7 @@ var init_siteStyleDefaults = __esmMin((() => {
12226
12866
  name: "Default",
12227
12867
  enabled: true,
12228
12868
  priority: 1,
12869
+ role: "default",
12229
12870
  background: {
12230
12871
  type: "solid",
12231
12872
  colorToken: "surface"
@@ -12243,6 +12884,7 @@ var init_siteStyleDefaults = __esmMin((() => {
12243
12884
  name: "Statement",
12244
12885
  enabled: true,
12245
12886
  priority: 2,
12887
+ role: "alternative",
12246
12888
  background: {
12247
12889
  type: "solid",
12248
12890
  colorToken: "surfaceAlt"
@@ -12256,11 +12898,88 @@ var init_siteStyleDefaults = __esmMin((() => {
12256
12898
  position: "bottom"
12257
12899
  }
12258
12900
  }] };
12901
+ groundedPracticeCardSystem = { variants: [
12902
+ {
12903
+ id: "default",
12904
+ name: "Default",
12905
+ enabled: true,
12906
+ priority: 1,
12907
+ role: "default",
12908
+ background: {
12909
+ type: "solid",
12910
+ colorToken: "surface"
12911
+ },
12912
+ foregroundToken: "text",
12913
+ spacing: "comfortable",
12914
+ corners: "soft",
12915
+ shadow: {
12916
+ elevation: "none",
12917
+ softness: null,
12918
+ position: "bottom"
12919
+ },
12920
+ border: {
12921
+ widthClass: "border",
12922
+ colorToken: "border"
12923
+ }
12924
+ },
12925
+ {
12926
+ id: "alternative",
12927
+ name: "Statement",
12928
+ enabled: true,
12929
+ priority: 2,
12930
+ role: "alternative",
12931
+ background: {
12932
+ type: "solid",
12933
+ colorToken: "surfaceAlt"
12934
+ },
12935
+ foregroundToken: "text",
12936
+ spacing: "comfortable",
12937
+ corners: "soft",
12938
+ shadow: {
12939
+ elevation: "low",
12940
+ softness: null,
12941
+ position: "bottom"
12942
+ },
12943
+ border: {
12944
+ widthClass: "border",
12945
+ colorToken: "border"
12946
+ }
12947
+ },
12948
+ {
12949
+ id: "open",
12950
+ name: "Open",
12951
+ enabled: true,
12952
+ priority: 3,
12953
+ role: "open",
12954
+ background: {
12955
+ type: "solid",
12956
+ colorToken: "surfaceAlt"
12957
+ },
12958
+ foregroundToken: "text",
12959
+ spacing: {
12960
+ block: "comfortable",
12961
+ inline: "comfortable"
12962
+ },
12963
+ corners: "square",
12964
+ shadow: {
12965
+ elevation: "none",
12966
+ softness: null,
12967
+ position: "bottom"
12968
+ },
12969
+ decorations: [{
12970
+ edge: "top",
12971
+ colorToken: "accent",
12972
+ width: "thin",
12973
+ length: "full"
12974
+ }]
12975
+ }
12976
+ ] };
12259
12977
  originalJoyCardSystem = { variants: [{
12260
12978
  id: "default",
12261
12979
  name: "Default",
12262
12980
  enabled: true,
12263
12981
  priority: 1,
12982
+ role: "default",
12264
12983
  background: {
12265
12984
  type: "solid",
12266
12985
  colorToken: "surface"
@@ -12278,6 +12997,7 @@ var init_siteStyleDefaults = __esmMin((() => {
12278
12997
  name: "Statement",
12279
12998
  enabled: true,
12280
12999
  priority: 2,
13000
+ role: "alternative",
12281
13001
  background: {
12282
13002
  type: "solid",
12283
13003
  colorToken: "primary"
@@ -12938,6 +13658,7 @@ var init_footerLooks = __esmMin((() => {
12938
13658
  //#region ../theme-core/src/site-styles/curatedChoices.ts
12939
13659
  var init_curatedChoices = __esmMin((() => {})), generatedContentFrames, userContentFrames, generatedDesignOptionCatalog, userDesignOptionCatalog;
12940
13660
  var init_sourceCatalogs = __esmMin((() => {
13661
+ init_cards();
12941
13662
  init_types$7();
12942
13663
  generatedContentFrames = [
12943
13664
  plainFrame,
@@ -12961,16 +13682,7 @@ var init_sourceCatalogs = __esmMin((() => {
12961
13682
  "hero-image"
12962
13683
  ],
12963
13684
  contentFrames: generatedContentFrames,
12964
- itemSurfaces: [
12965
- "none",
12966
- "default",
12967
- "flat",
12968
- "outlined",
12969
- "raised",
12970
- "inset",
12971
- "editorial",
12972
- "color-blocked"
12973
- ],
13685
+ cardRoles: cardRoleValues,
12974
13686
  transitions: [
12975
13687
  "none",
12976
13688
  "soft-fade-short",
@@ -12987,7 +13699,7 @@ var init_sourceCatalogs = __esmMin((() => {
12987
13699
  source: "user",
12988
13700
  sectionSurfaces: generatedDesignOptionCatalog.sectionSurfaces,
12989
13701
  contentFrames: userContentFrames,
12990
- itemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
13702
+ cardRoles: generatedDesignOptionCatalog.cardRoles,
12991
13703
  transitions: [
12992
13704
  ...generatedDesignOptionCatalog.transitions,
12993
13705
  "soft-fade-expansive",
@@ -13003,7 +13715,7 @@ var init_sourceCatalogs = __esmMin((() => {
13003
13715
  emphases: generatedDesignOptionCatalog.emphases,
13004
13716
  detachedCustom: false
13005
13717
  };
13006
- userDesignOptionCatalog.sectionSurfaces, userDesignOptionCatalog.contentFrames, userDesignOptionCatalog.itemSurfaces, userDesignOptionCatalog.transitions, userDesignOptionCatalog.emphases;
13718
+ userDesignOptionCatalog.sectionSurfaces, userDesignOptionCatalog.contentFrames, userDesignOptionCatalog.cardRoles, userDesignOptionCatalog.transitions, userDesignOptionCatalog.emphases;
13007
13719
  }));
13008
13720
  //#endregion
13009
13721
  //#region ../theme-core/src/site-styles/siteStyleTypography.ts
@@ -13461,18 +14173,8 @@ var init_siteStyleTypography = __esmMin((() => {
13461
14173
  }
13462
14174
  }
13463
14175
  };
13464
- }));
13465
- //#endregion
13466
- //#region ../theme-core/src/site-styles/designState.ts
13467
- function uniqueNonEmpty$1(values) {
13468
- const uniqueValues = [...new Set(values)];
13469
- const firstValue = uniqueValues[0];
13470
- if (!firstValue) throw new Error("Expected at least one Theme V2 design state option.");
13471
- return [firstValue, ...uniqueValues.slice(1)];
13472
- }
13473
- var designResolutionPolicySchema, runtimeStyleFieldNameSchema, nonEmptyRuntimeStyleFieldNamesSchema, heroLegibilityStrategySchema, heroCompositionIntentSchema, heroTypographyScaleIntentSchema, sectionHeightIntentSchema, imageSurfaceTreatmentIntensitySchema, imageSurfaceMotionSchema, imageSurfaceTreatmentSchema, testimonialCardTreatmentSchema, tileTreatmentSchema, eventListTreatmentSchema, eyebrowTreatmentSchema, userPanelTreatments, userFlushTreatments, userFlushBleeds, contentFrameIntentSchema, blockDesignPlanSchema, styleAuthoritySchema, blockRuntimeStyleAuthoritySchema;
14176
+ })), designResolutionPolicySchema, runtimeStyleFieldNameSchema, nonEmptyRuntimeStyleFieldNamesSchema, styleAuthoritySchema;
13474
14177
  var init_designState = __esmMin((() => {
13475
- init_sourceCatalogs();
13476
14178
  init_types$7();
13477
14179
  init_rawStyleFields();
13478
14180
  designResolutionPolicySchema = z.enum([
@@ -13483,102 +14185,6 @@ var init_designState = __esmMin((() => {
13483
14185
  ]);
13484
14186
  runtimeStyleFieldNameSchema = z.enum(themeV2RuntimeStyleFieldNames);
13485
14187
  nonEmptyRuntimeStyleFieldNamesSchema = z.array(runtimeStyleFieldNameSchema).min(1).transform((fields) => [fields[0], ...fields.slice(1)]);
13486
- heroLegibilityStrategySchema = z.enum([
13487
- "none",
13488
- "scrim-gradient",
13489
- "solid-panel"
13490
- ]);
13491
- heroCompositionIntentSchema = z.enum(["center", "bottom-left"]);
13492
- heroTypographyScaleIntentSchema = z.enum([
13493
- "quiet",
13494
- "editorial",
13495
- "display",
13496
- "poster"
13497
- ]);
13498
- sectionHeightIntentSchema = z.enum([
13499
- "default",
13500
- "banner",
13501
- "hero",
13502
- "immersive"
13503
- ]);
13504
- imageSurfaceTreatmentIntensitySchema = z.enum([
13505
- "soft",
13506
- "balanced",
13507
- "strong"
13508
- ]);
13509
- imageSurfaceMotionSchema = z.enum(["static", "fixed-frame"]);
13510
- imageSurfaceTreatmentSchema = z.discriminatedUnion("kind", [
13511
- z.object({ kind: z.literal("none") }).strict(),
13512
- z.object({
13513
- kind: z.literal("brand-scrim"),
13514
- token: z.enum([
13515
- "primary",
13516
- "secondary",
13517
- "accent"
13518
- ]),
13519
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
13520
- }).strict(),
13521
- z.object({
13522
- kind: z.literal("brand-wash"),
13523
- token: z.enum([
13524
- "primary",
13525
- "secondary",
13526
- "accent"
13527
- ]),
13528
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
13529
- }).strict(),
13530
- z.object({
13531
- kind: z.literal("neutral-scrim"),
13532
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
13533
- }).strict(),
13534
- z.object({
13535
- kind: z.literal("neutral-wash"),
13536
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
13537
- }).strict(),
13538
- z.object({
13539
- kind: z.literal("solid-panel"),
13540
- intensity: imageSurfaceTreatmentIntensitySchema.optional()
13541
- }).strict()
13542
- ]);
13543
- testimonialCardTreatmentSchema = z.enum(["default", "accent-quote"]);
13544
- tileTreatmentSchema = z.enum(tileTreatmentValues);
13545
- eventListTreatmentSchema = z.enum(eventListTreatmentValues);
13546
- eyebrowTreatmentSchema = z.enum(eyebrowTreatmentValues);
13547
- userPanelTreatments = uniqueNonEmpty$1(userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment));
13548
- userFlushTreatments = uniqueNonEmpty$1(userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment));
13549
- userFlushBleeds = uniqueNonEmpty$1(userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed));
13550
- contentFrameIntentSchema = z.discriminatedUnion("kind", [
13551
- z.object({ kind: z.literal("plain") }).strict(),
13552
- z.object({
13553
- kind: z.literal("panel"),
13554
- treatment: z.enum(userPanelTreatments)
13555
- }).strict(),
13556
- z.object({
13557
- kind: z.literal("flush-panel"),
13558
- treatment: z.enum(userFlushTreatments),
13559
- bleed: z.enum(userFlushBleeds)
13560
- }).strict()
13561
- ]);
13562
- blockDesignPlanSchema = z.object({
13563
- blockId: z.string().min(1).transform(asDesignBlockId),
13564
- blockKind: z.string().min(1),
13565
- purpose: z.string().min(1),
13566
- sectionSurface: z.enum(userDesignOptionCatalog.sectionSurfaces),
13567
- contentFrame: contentFrameIntentSchema,
13568
- itemSurface: z.enum(userDesignOptionCatalog.itemSurfaces),
13569
- transitionAfter: z.enum(userDesignOptionCatalog.transitions),
13570
- emphasis: z.enum(userDesignOptionCatalog.emphases),
13571
- sectionHeight: sectionHeightIntentSchema.optional(),
13572
- heroLegibility: heroLegibilityStrategySchema.optional(),
13573
- heroComposition: heroCompositionIntentSchema.optional(),
13574
- heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
13575
- imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
13576
- imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
13577
- testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
13578
- tileTreatment: tileTreatmentSchema.optional(),
13579
- eventListTreatment: eventListTreatmentSchema.optional(),
13580
- eyebrowTreatment: eyebrowTreatmentSchema.optional()
13581
- }).strict();
13582
14188
  styleAuthoritySchema = z.discriminatedUnion("kind", [
13583
14189
  z.object({
13584
14190
  kind: z.literal("theme-v2"),
@@ -13597,22 +14203,12 @@ var init_designState = __esmMin((() => {
13597
14203
  reason: z.literal("detached-custom-runtime-fields")
13598
14204
  }).strict()
13599
14205
  ]);
13600
- blockRuntimeStyleAuthoritySchema = z.object({
14206
+ z.object({
13601
14207
  unit: z.literal("block-runtime-fields"),
13602
14208
  blockId: z.string().min(1).transform(asDesignBlockId),
13603
14209
  fields: nonEmptyRuntimeStyleFieldNamesSchema,
13604
14210
  authority: styleAuthoritySchema
13605
14211
  }).strict();
13606
- z.object({
13607
- schemaVersion: z.literal(1),
13608
- siteStyleId: z.string().min(1).transform(asSiteStyleId),
13609
- templateId: z.string().min(1).transform(asDesignSystemTemplateId),
13610
- templateVersion: z.number().int().nonnegative(),
13611
- resolverVersion: z.number().int().nonnegative(),
13612
- rhythmPresetId: z.string().min(1),
13613
- blocks: z.array(blockDesignPlanSchema),
13614
- styleAuthorities: z.array(blockRuntimeStyleAuthoritySchema)
13615
- }).strict();
13616
14212
  }));
13617
14213
  //#endregion
13618
14214
  //#region ../theme-core/src/site-styles/runtimeCompiler.ts
@@ -13725,61 +14321,7 @@ var init_runtimeCompiler = __esmMin((() => {
13725
14321
  spacing: "none",
13726
14322
  rounded: "none",
13727
14323
  raised: false
13728
- } },
13729
- itemSurfaces: {
13730
- none: null,
13731
- default: {
13732
- spacing: "medium",
13733
- rounded: "lg",
13734
- raised: false
13735
- },
13736
- flat: {
13737
- spacing: "medium",
13738
- rounded: "lg",
13739
- raised: false
13740
- },
13741
- outlined: {
13742
- spacing: "medium",
13743
- rounded: "lg",
13744
- raised: false,
13745
- border: {
13746
- enabled: true,
13747
- width: "1",
13748
- colorToken: "border"
13749
- }
13750
- },
13751
- raised: {
13752
- spacing: "medium",
13753
- rounded: "xl",
13754
- raised: true
13755
- },
13756
- inset: {
13757
- treatment: "soft-panel",
13758
- spacing: "comfortable",
13759
- rounded: "xl",
13760
- raised: false,
13761
- border: { enabled: false },
13762
- background: {
13763
- type: "color",
13764
- color: "surfaceAlt",
13765
- textColor: "text"
13766
- }
13767
- },
13768
- editorial: {
13769
- treatment: "editorial-rule",
13770
- spacing: "none",
13771
- rounded: "none",
13772
- raised: false,
13773
- border: { enabled: false }
13774
- },
13775
- "color-blocked": {
13776
- treatment: "color-blocked",
13777
- spacing: "spacious",
13778
- rounded: "2xl",
13779
- raised: false,
13780
- border: { enabled: false }
13781
- }
13782
- }
14324
+ } }
13783
14325
  });
13784
14326
  }));
13785
14327
  //#endregion
@@ -13808,36 +14350,7 @@ function componentRuntimeRulesForTokenRecipes(recipes) {
13808
14350
  rounded: recipes.radius === "square" ? "none" : cornerTreatment
13809
14351
  }
13810
14352
  },
13811
- flushFrames: defaultComponentRuntimeRules.flushFrames,
13812
- itemSurfaces: {
13813
- none: null,
13814
- default: {
13815
- ...defaultComponentRuntimeRules.itemSurfaces.default,
13816
- rounded: cornerTreatment
13817
- },
13818
- flat: {
13819
- ...defaultComponentRuntimeRules.itemSurfaces.flat,
13820
- rounded: cornerTreatment
13821
- },
13822
- outlined: {
13823
- ...defaultComponentRuntimeRules.itemSurfaces.outlined,
13824
- rounded: cornerTreatment
13825
- },
13826
- raised: {
13827
- ...defaultComponentRuntimeRules.itemSurfaces.raised,
13828
- rounded: cornerTreatment,
13829
- raised
13830
- },
13831
- inset: {
13832
- ...defaultComponentRuntimeRules.itemSurfaces.inset,
13833
- rounded: cornerTreatment
13834
- },
13835
- editorial: defaultComponentRuntimeRules.itemSurfaces.editorial,
13836
- "color-blocked": {
13837
- ...defaultComponentRuntimeRules.itemSurfaces["color-blocked"],
13838
- rounded: cornerTreatment
13839
- }
13840
- }
14353
+ flushFrames: defaultComponentRuntimeRules.flushFrames
13841
14354
  });
13842
14355
  }
13843
14356
  function uniqueContentFrameKinds() {
@@ -13873,7 +14386,6 @@ function defineCuratedSiteStyle(input) {
13873
14386
  compositionBudget: input.compositionBudget,
13874
14387
  supportedSectionSurfaces: generatedDesignOptionCatalog.sectionSurfaces,
13875
14388
  supportedContentFrames: input.supportedContentFrames ?? generatedContentFrameKinds,
13876
- supportedItemSurfaces: input.supportedItemSurfaces ?? generatedDesignOptionCatalog.itemSurfaces,
13877
14389
  supportedTransitions: generatedDesignOptionCatalog.transitions
13878
14390
  },
13879
14391
  headingDecoration: input.headingDecoration ?? noHeadingDecoration,
@@ -15427,6 +15939,7 @@ var init_curatedSiteStyles = __esmMin((() => {
15427
15939
  name: "Grounded Practice",
15428
15940
  themeOverrides: {
15429
15941
  accordions: editorialDividedAccordionSystem,
15942
+ cards: groundedPracticeCardSystem,
15430
15943
  testimonialQuote: serifDisplayQuote
15431
15944
  },
15432
15945
  description: "Quiet, grounded editorial design for practitioner-led services, recurring classes, and thoughtful one-to-one work.",
@@ -15481,7 +15994,8 @@ var init_curatedSiteStyles = __esmMin((() => {
15481
15994
  "feature-cards-soft-panels",
15482
15995
  "events-lined-panel",
15483
15996
  "testimonials-non-carded",
15484
- "faq-base-accordion"
15997
+ "faq-base-accordion",
15998
+ "booking-brand-band"
15485
15999
  ],
15486
16000
  recommendedFooterLookIds: ["footer-links-quiet"],
15487
16001
  buttonStyleChoices: [
@@ -15501,6 +16015,9 @@ var init_curatedSiteStyles = __esmMin((() => {
15501
16015
  new Map(curatedSiteStyles.map((style) => [style.id, style]));
15502
16016
  }));
15503
16017
  //#endregion
16018
+ //#region ../theme-core/src/site-styles/pageDesignEditorCapabilities.ts
16019
+ var init_pageDesignEditorCapabilities = __esmMin((() => {}));
16020
+ //#endregion
15504
16021
  //#region ../theme-core/src/site-styles/lookResolution.ts
15505
16022
  var init_lookResolution = __esmMin((() => {
15506
16023
  init_appearancePresets();
@@ -15526,15 +16043,30 @@ var init_pageDesignEditorModel = __esmMin((() => {
15526
16043
  init_types$7();
15527
16044
  init_sectionTransitions();
15528
16045
  asPageFlowPresetId("flow:quiet"), noneBoundaryOption.id, asPageFlowPresetId("flow:balanced"), softBoundaryOption.id, asPageFlowPresetId("flow:expressive"), spaciousBoundaryOption.id;
16046
+ })), blockDesignFallback;
16047
+ var init_resolver$1 = __esmMin((() => {
16048
+ init_types$7();
16049
+ blockDesignFallback = {
16050
+ sectionSurface: "base",
16051
+ contentFrame: plainFrame,
16052
+ transitionAfter: "none",
16053
+ sectionHeight: "default",
16054
+ heroLegibility: "none",
16055
+ imageSurfaceTreatment: { kind: "none" },
16056
+ imageSurfaceMotion: "static",
16057
+ tileTreatment: "default",
16058
+ eventListTreatment: "plain",
16059
+ eyebrowTreatment: "plain",
16060
+ accordionIconTreatment: null,
16061
+ composition: null
16062
+ };
16063
+ blockDesignFallback.sectionSurface, blockDesignFallback.contentFrame, blockDesignFallback.transitionAfter, blockDesignFallback.sectionHeight, blockDesignFallback.heroLegibility, blockDesignFallback.imageSurfaceTreatment, blockDesignFallback.imageSurfaceMotion, blockDesignFallback.tileTreatment, blockDesignFallback.eventListTreatment, blockDesignFallback.eyebrowTreatment, blockDesignFallback.accordionIconTreatment, blockDesignFallback.composition;
15529
16064
  }));
15530
16065
  //#endregion
15531
- //#region ../theme-core/src/site-styles/resolver.ts
15532
- var init_resolver$1 = __esmMin((() => {}));
15533
- //#endregion
15534
16066
  //#region ../theme-core/src/site-styles/runtimeBackgroundResolution.ts
15535
16067
  var init_runtimeBackgroundResolution = __esmMin((() => {
15536
16068
  init_boxBackgroundSchema();
15537
- init_tokens();
16069
+ init_surfaces();
15538
16070
  init_rawStyleFields();
15539
16071
  }));
15540
16072
  //#endregion
@@ -15557,6 +16089,7 @@ var init_previewCompiler = __esmMin((() => {
15557
16089
  init_curated();
15558
16090
  init_concretePalette();
15559
16091
  init_curatedSiteStyles();
16092
+ init_resolver$1();
15560
16093
  init_footerLooks();
15561
16094
  init_headerLayoutStyles();
15562
16095
  init_runtimeCompiler();
@@ -15566,7 +16099,6 @@ var init_previewCompiler = __esmMin((() => {
15566
16099
  init_blockFlow();
15567
16100
  init_pageDesignEditorModel();
15568
16101
  init_pageDesignIntent();
15569
- init_resolver$1();
15570
16102
  init_previewCustomization();
15571
16103
  init_types$7();
15572
16104
  }));
@@ -15600,6 +16132,7 @@ function generatedChoiceSchema(valueSchema) {
15600
16132
  }
15601
16133
  var generatedPanelTreatments, generatedFlushTreatments, generatedFlushBleeds, generatedPanelFrameSchema, generatedFlushPanelFrameSchema, generatedContentFrameIntentSchema, generatedSiteStyleIdSchema, generatedBlockDesignIntentSchema, generatedMediaCompositionIntentSchema, generatedDecorativeCompositionIntentSchema, generatedHeroLegibilityStrategySchema, generatedBlockMediaIntentSchema, generatedBoundaryIntentSchema, generatedPageDesignBlockIntentSchema;
15602
16134
  var init_generatedSchemas = __esmMin((() => {
16135
+ init_cardRoleVocabulary();
15603
16136
  init_curatedSiteStyles();
15604
16137
  init_sourceCatalogs();
15605
16138
  init_types$7();
@@ -15624,7 +16157,7 @@ var init_generatedSchemas = __esmMin((() => {
15624
16157
  generatedBlockDesignIntentSchema = z.object({
15625
16158
  sectionSurface: generatedChoiceSchema(z.enum(generatedDesignOptionCatalog.sectionSurfaces)),
15626
16159
  contentFrame: generatedChoiceSchema(generatedContentFrameIntentSchema),
15627
- itemSurface: generatedChoiceSchema(z.enum(generatedDesignOptionCatalog.itemSurfaces)),
16160
+ cardRole: generatedChoiceSchema(cardRoleWithLegacyAliasSchema),
15628
16161
  transitionAfter: generatedChoiceSchema(z.enum(generatedDesignOptionCatalog.transitions)),
15629
16162
  emphasis: generatedChoiceSchema(z.enum(generatedDesignOptionCatalog.emphases))
15630
16163
  }).strict();
@@ -15661,7 +16194,6 @@ var init_records = __esmMin((() => {}));
15661
16194
  //#region ../theme-core/src/site-styles/headerOpeningSection.ts
15662
16195
  var init_headerOpeningSection = __esmMin((() => {
15663
16196
  init_headerLayoutStyles();
15664
- init_tokens();
15665
16197
  }));
15666
16198
  //#endregion
15667
16199
  //#region ../theme-core/src/site-styles/generatedDesignPipelineHelpers.ts
@@ -15676,6 +16208,7 @@ var init_generatedDesignPipeline = __esmMin((() => {
15676
16208
  init_curatedSiteStyles();
15677
16209
  init_lookResolution();
15678
16210
  init_headerOpeningSection();
16211
+ init_resolver$1();
15679
16212
  init_runtimeCompiler();
15680
16213
  init_generatedDesignPipelineHelpers();
15681
16214
  }));
@@ -15794,6 +16327,14 @@ var init_pageDesignAuthority = __esmMin((() => {
15794
16327
  //#region ../theme-core/src/site-styles/pageDesignEditorErrors.ts
15795
16328
  var init_pageDesignEditorErrors = __esmMin((() => {}));
15796
16329
  //#endregion
16330
+ //#region ../theme-core/src/site-styles/pageDesignAppearanceAvailability.ts
16331
+ var init_pageDesignAppearanceAvailability = __esmMin((() => {}));
16332
+ //#endregion
16333
+ //#region ../theme-core/src/site-styles/pageDesignIntentEquality.ts
16334
+ var init_pageDesignIntentEquality = __esmMin((() => {
16335
+ init_sectionTransitions();
16336
+ }));
16337
+ //#endregion
15797
16338
  //#region ../theme-core/src/site-styles/persistedIdParseResult.ts
15798
16339
  var init_persistedIdParseResult = __esmMin((() => {}));
15799
16340
  //#endregion
@@ -15810,6 +16351,7 @@ function toSiteChromeBackgroundColorTokens(tokenNames) {
15810
16351
  }
15811
16352
  var siteChromeBackgroundColorTokens, quickSiteChromeBackgroundColorTokens;
15812
16353
  var init_siteChromeBackgrounds = __esmMin((() => {
16354
+ init_surfaces();
15813
16355
  init_backgroundAppearance();
15814
16356
  init_rawStyleFields();
15815
16357
  siteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceColorTokenNames);
@@ -15880,6 +16422,7 @@ var init_site_styles = __esmMin((() => {
15880
16422
  init_appearancePresets();
15881
16423
  init_blockFlow();
15882
16424
  init_backgroundAppearance();
16425
+ init_cardRoleVocabulary();
15883
16426
  init_compositionBudget();
15884
16427
  init_compilationPlan();
15885
16428
  init_contentTemplateDesignIntent();
@@ -15900,14 +16443,18 @@ var init_site_styles = __esmMin((() => {
15900
16443
  init_logoBranding();
15901
16444
  init_pageDesignAuthority();
15902
16445
  init_pageDesignEditorErrors();
16446
+ init_pageDesignEditorCapabilities();
15903
16447
  init_pageDesignEditorModel();
16448
+ init_pageDesignAppearanceAvailability();
15904
16449
  init_pageDesignIntent();
16450
+ init_pageDesignIntentEquality();
15905
16451
  init_previewCustomization();
15906
16452
  init_persistedIdParseResult();
15907
16453
  init_rawStyleFields();
15908
16454
  init_records();
15909
16455
  init_resolver$1();
15910
16456
  init_runtimeCompiler();
16457
+ init_runtimeBackgroundResolution();
15911
16458
  init_sectionTransitions();
15912
16459
  init_siteChromeBackgrounds();
15913
16460
  init_siteChromeNavPreferences();
@@ -17031,6 +17578,8 @@ var init_buildThemeRuntimeFromBridge = __esmMin((() => {
17031
17578
  ])).optional() })]).optional(),
17032
17579
  cards: z.union([z.boolean(), z.object({ variants: z.array(z.enum([
17033
17580
  "default",
17581
+ "alternative",
17582
+ "open",
17034
17583
  "elevated",
17035
17584
  "outlined"
17036
17585
  ])).optional() })]).optional(),
@@ -20268,35 +20817,40 @@ var init_themeColorResolution = __esmMin((() => {
20268
20817
  }));
20269
20818
  //#endregion
20270
20819
  //#region ../blocks/src/system/transforms/registry/_utils/surfaceForegroundStyles.ts
20271
- function readColorToken(input, key) {
20272
- const value = input[key];
20273
- return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
20820
+ function resolveHeaderLeafTextColor(header) {
20821
+ return header?.textColor ?? header?.navColor ?? header?.background?.textColor ?? header?.navLinkStyle?.colorToken ?? "text";
20274
20822
  }
20275
- function resolveOptionalForegroundColor(value, context) {
20276
- if (!value) return null;
20277
- return resolveBackgroundColorValue(value, context);
20823
+ function resolveHeaderRootForeground(header, palette, isTransparent) {
20824
+ if (isTransparent) return { kind: "unknown" };
20825
+ const background = header?.background;
20826
+ return resolveSurfaceForeground(background ?? {
20827
+ type: "color",
20828
+ color: "surface"
20829
+ }, palette, {
20830
+ text: header?.textColor ?? background?.textColor,
20831
+ link: header?.navLinkStyle?.colorToken ?? header?.navColor ?? header?.textColor
20832
+ });
20278
20833
  }
20279
20834
  function resolveSurfaceForegroundStyles(value, context, options) {
20280
- const buttonStyles = resolveContextualButtonStyles(value, context, options);
20281
20835
  const input = parseBackgroundContent(value);
20282
- if (!input) return buttonStyles;
20283
- const resolvedText = resolveOptionalForegroundColor(readColorToken(input, "textColor"), context);
20284
- if (!resolvedText) return buttonStyles;
20836
+ const foreground = input ? resolveSurfaceForeground(input, context.theme.palette, {}, { compositeBase: options?.fallbackToken }) : { kind: "unknown" };
20837
+ const buttonStyles = resolveContextualButtonStyles(input, foreground, context, options);
20838
+ if (foreground.kind === "unknown") return buttonStyles;
20285
20839
  return {
20286
20840
  ...buttonStyles,
20287
20841
  ...surfaceForegroundStyle({
20288
- text: resolvedText,
20289
- heading: resolveOptionalForegroundColor(readColorToken(input, "headingColor"), context) ?? void 0,
20290
- link: resolveOptionalForegroundColor(readColorToken(input, "linkColor"), context) ?? void 0,
20291
- supporting: resolveOptionalForegroundColor(readColorToken(input, "supportingColor"), context) ?? void 0
20842
+ text: resolveBackgroundColorValue(foreground.roles.text, context),
20843
+ heading: resolveBackgroundColorValue(foreground.roles.heading, context),
20844
+ link: resolveBackgroundColorValue(foreground.roles.link, context),
20845
+ supporting: resolveBackgroundColorValue(foreground.roles.supporting, context)
20292
20846
  })
20293
20847
  };
20294
20848
  }
20295
- function resolveContextualButtonStyles(value, context, options) {
20849
+ function resolveContextualButtonStyles(background, foreground, context, options) {
20296
20850
  const buttonSystem = context.theme.buttons;
20297
20851
  if (!buttonSystem) return {};
20298
20852
  const palette = context.theme.palette;
20299
- const surface = deriveButtonSurfaceContext(deriveButtonSurfaceInput(value), palette, options?.fallbackToken);
20853
+ const surface = deriveButtonSurfaceContext(deriveButtonSurfaceInput(background, foreground), palette, options?.fallbackToken);
20300
20854
  if (surface.kind !== "known-solid") return surface.reason === "missing-background" ? {} : contextualButtonSurfaceResetStyles();
20301
20855
  const cacheKey = [
20302
20856
  surface.surface.backgroundHex,
@@ -20322,14 +20876,13 @@ function resolveContextualButtonStyles(value, context, options) {
20322
20876
  surfaceCache.set(cacheKey, styles);
20323
20877
  return styles;
20324
20878
  }
20325
- function deriveButtonSurfaceInput(value) {
20326
- const background = parseBackgroundContent(value);
20879
+ function deriveButtonSurfaceInput(background, foreground) {
20327
20880
  if (!background) return { kind: "inherit" };
20328
20881
  switch (background.type) {
20329
20882
  case "color": return {
20330
20883
  kind: "solid",
20331
20884
  color: background.color,
20332
- foreground: background.linkColor ?? background.textColor,
20885
+ foreground: foreground.kind === "known" ? foreground.roles.link : void 0,
20333
20886
  composited: false
20334
20887
  };
20335
20888
  case "gradient": return { kind: "gradient" };
@@ -20346,6 +20899,182 @@ var init_surfaceForegroundStyles = __esmMin((() => {
20346
20899
  contextualButtonStylesCache = /* @__PURE__ */ new WeakMap();
20347
20900
  }));
20348
20901
  //#endregion
20902
+ //#region ../blocks/src/system/transforms/registry/_utils/boxStyleClassNames.ts
20903
+ function hasFixedFrameBackgroundMotion(value) {
20904
+ const background = parseBackgroundContent(asPartialObject(value)?.background);
20905
+ return (background?.type === "image" || background?.type === "video") && background.motion === "fixed-frame";
20906
+ }
20907
+ /**
20908
+ * The stable per-theme class for a card role. Generated card CSS emits these
20909
+ * aliases alongside each `.card-{id}` rule, so content addresses "this site
20910
+ * style's open card" without knowing which variant implements it.
20911
+ */
20912
+ function cardRoleClass(role) {
20913
+ return `card-role-${role}`;
20914
+ }
20915
+ /**
20916
+ * The role a card renders with, and the one place a set of card styles becomes
20917
+ * a role.
20918
+ *
20919
+ * Precedence: a per-item override, then the `role` a Look compiled onto the
20920
+ * block's card styles, then the legacy `cardVariant` field. `cardVariant` only
20921
+ * ever held role names, so it reads *as* a role rather than as a second
20922
+ * vocabulary — an explicit `role` wins when a record carries both.
20923
+ *
20924
+ * Compiled and freshly authored card styles carry only `role`. `cardVariant`
20925
+ * survives on content persisted before the role contract, and normalizes here
20926
+ * rather than in `cardStylesOverrideSchema` because that content reaches the
20927
+ * renderer as a raw record without ever passing through the schema.
20928
+ */
20929
+ function resolveCardRoleForBoxStyles(input, override) {
20930
+ return override ?? normalizeCardRole(input.role) ?? normalizeCardRole(input.cardVariant);
20931
+ }
20932
+ /**
20933
+ * Parse a block's own per-item surface vocabulary into a card role. The alias
20934
+ * map is declared by the block (its persisted values are its own history), and
20935
+ * `normalizeCardRole` remains the one untrusted-input boundary after that.
20936
+ */
20937
+ function resolveItemCardRole(value, aliases) {
20938
+ if (typeof value !== "string") return null;
20939
+ const trimmed = value.trim();
20940
+ if (!trimmed) return null;
20941
+ return normalizeCardRole(aliases?.[trimmed] ?? trimmed);
20942
+ }
20943
+ /**
20944
+ * The card surface for a set of box styles: one role, one class vocabulary, so
20945
+ * a site-style swap re-skins the card whichever field named it.
20946
+ */
20947
+ function cardSurface(input, override) {
20948
+ const role = resolveCardRoleForBoxStyles(input, override);
20949
+ if (!role) return {
20950
+ role: null,
20951
+ classes: []
20952
+ };
20953
+ return {
20954
+ role,
20955
+ classes: role === "none" ? [] : [cardRoleClass(role)]
20956
+ };
20957
+ }
20958
+ function parseBoxBorderWidth(value) {
20959
+ return BOX_BORDER_WIDTHS.find((width) => width === value);
20960
+ }
20961
+ /**
20962
+ * A box's border record with `{ width: 'none' }`-without-`enabled` resolved.
20963
+ *
20964
+ * That shape used to mean two different things to two different readers: the
20965
+ * old private offerings emitter read it as border-off, while the shared
20966
+ * emitter read it as "no opinion" and left the caller's base `rb-border` in
20967
+ * place. Same persisted bytes, opposite answers. A width of `none` says there
20968
+ * is no border, so it is read as `enabled: false` here — once, at the one
20969
+ * place box-style content is interpreted — and every reader downstream now
20970
+ * agrees.
20971
+ *
20972
+ * Nothing persisted carries the shape (the #1297 usage audit found zero rows;
20973
+ * the authoring UI cannot produce it, since the width control is gated on
20974
+ * `enabled === true`), so this is boundary hygiene rather than a migration.
20975
+ */
20976
+ function normalizeBoxStylesBorder(value) {
20977
+ const border = asPartialObject(value);
20978
+ if (!border) return null;
20979
+ const width = parseBoxBorderWidth(border.width);
20980
+ return {
20981
+ enabled: border.enabled === true ? true : border.enabled === false || width === "none" ? false : null,
20982
+ width,
20983
+ colorToken: typeof border.colorToken === "string" && border.colorToken.trim() ? border.colorToken.trim() : void 0
20984
+ };
20985
+ }
20986
+ /** The border class a box's own border override asks for, if it has one. */
20987
+ function borderOverrideClass(input) {
20988
+ const border = normalizeBoxStylesBorder(input.border);
20989
+ if (!border) return null;
20990
+ if (border.enabled === false) return "rb-border-0";
20991
+ if (border.enabled !== true) return null;
20992
+ switch (border.width) {
20993
+ case "2": return "rb-border-2";
20994
+ case "3": return "rb-border-3";
20995
+ case "none": return "rb-border-0";
20996
+ case "1":
20997
+ case void 0: return "rb-border";
20998
+ }
20999
+ }
21000
+ /** The base class with any border utilities stripped, so an override can win. */
21001
+ function withoutBorderClasses(baseClass) {
21002
+ return baseClass.split(/\s+/).filter((token) => token && !/^rb-border(?:-(?:0|2|3))?$/.test(token)).join(" ");
21003
+ }
21004
+ /**
21005
+ * The padding class a box's spacing asks for, if it names a known value.
21006
+ *
21007
+ * An unknown value is dropped rather than guessed, and says so in development —
21008
+ * persisted content is the untrusted input here, and a silently missing padding
21009
+ * is much harder to trace back than a warning.
21010
+ */
21011
+ function boxSpacingClass(input, axis) {
21012
+ const spacing = typeof input.spacing === "string" ? input.spacing.trim() : "";
21013
+ if (!spacing) return null;
21014
+ if (!isSemanticSpacing(spacing)) {
21015
+ if (process.env.NODE_ENV !== "production") console.warn(`[boxStyles] Invalid spacing value: "${spacing}". Expected one of: ${SEMANTIC_SPACING_VALUES.join(", ")}.`);
21016
+ return null;
21017
+ }
21018
+ return resolveSpacing(spacing, axis);
21019
+ }
21020
+ /** The radius class a box's corners ask for, if it names a known value. */
21021
+ function boxRoundedClass(input) {
21022
+ const rounded = typeof input.rounded === "string" ? input.rounded.trim() : "";
21023
+ if (!rounded || rounded === "none") return null;
21024
+ return ROUNDED_CLASSES[rounded] ?? null;
21025
+ }
21026
+ /** The elevation class to use, honouring an explicit `null` opt-out. */
21027
+ function raisedClassFor(options) {
21028
+ return options.raisedClass === void 0 ? RAISED_SHADOW_CLASS : options.raisedClass;
21029
+ }
21030
+ /**
21031
+ * The class list for a set of box styles: the caller's base class, the border /
21032
+ * spacing / elevation / radius overrides the box carries, and its card surface.
21033
+ *
21034
+ * Pure, so the React nodes that render a card outside the binding pipeline
21035
+ * (offerings-preview) share this one emission path with `boxStyles.all` instead
21036
+ * of keeping a copy that drifts.
21037
+ */
21038
+ function boxStyleClassNames(value, options) {
21039
+ if (!value || typeof value !== "object") return options.baseClass?.trim() || "";
21040
+ const input = value;
21041
+ const borderOverride = borderOverrideClass(input);
21042
+ const surface = cardSurface(input, options.cardRoleOverride);
21043
+ const cardOwnsBorder = surface.role !== null && surface.role !== "none";
21044
+ return [
21045
+ borderOverride || cardOwnsBorder ? withoutBorderClasses(options.baseClass ?? "") : options.baseClass ?? "",
21046
+ borderOverride,
21047
+ options.includeSpacing === false ? null : boxSpacingClass(input, options.axis ?? "all"),
21048
+ input.raised === true ? raisedClassFor(options) : null,
21049
+ boxRoundedClass(input),
21050
+ ...surface.classes,
21051
+ hasFixedFrameBackgroundMotion(input) ? "rb-bg-motion-fixed-frame-scope" : null
21052
+ ].filter((token) => Boolean(token)).join(" ").trim() || "";
21053
+ }
21054
+ var RAISED_SHADOW_CLASS, ROUNDED_CLASSES, fixedFrameScopeClass, BOX_BORDER_WIDTHS;
21055
+ var init_boxStyleClassNames = __esmMin((() => {
21056
+ init_core();
21057
+ init_spacing();
21058
+ init_cards();
21059
+ init_backgroundContent();
21060
+ RAISED_SHADOW_CLASS = "rb-shadow-md";
21061
+ ROUNDED_CLASSES = {
21062
+ sm: "rb-rounded-sm",
21063
+ md: "rb-rounded-md",
21064
+ lg: "rb-rounded-lg",
21065
+ xl: "rb-rounded-xl",
21066
+ "2xl": "rb-rounded-2xl",
21067
+ full: "rb-rounded-full"
21068
+ };
21069
+ fixedFrameScopeClass = "rb-bg-motion-fixed-frame-scope";
21070
+ BOX_BORDER_WIDTHS = [
21071
+ "none",
21072
+ "1",
21073
+ "2",
21074
+ "3"
21075
+ ];
21076
+ }));
21077
+ //#endregion
20349
21078
  //#region ../blocks/src/system/transforms/registry/boxStyles.ts
20350
21079
  function readPath(source, path) {
20351
21080
  if (!source || !path) return void 0;
@@ -20363,11 +21092,7 @@ function hasVisualContainerStyles(value) {
20363
21092
  if (input.background && typeof input.background === "object") return true;
20364
21093
  if (input.raised === true) return true;
20365
21094
  if (typeof input.rounded === "string" && input.rounded.trim() !== "" && input.rounded !== "none") return true;
20366
- return asPartialObject(input.border)?.enabled === true;
20367
- }
20368
- function hasFixedFrameBackgroundMotion(value) {
20369
- const background = parseBackgroundContent(asPartialObject(value)?.background);
20370
- return (background?.type === "image" || background?.type === "video") && background.motion === "fixed-frame";
21095
+ return normalizeBoxStylesBorder(input.border)?.enabled === true;
20371
21096
  }
20372
21097
  function isTileTreatment(value) {
20373
21098
  return typeof value === "string" && tileTreatmentSet.has(value);
@@ -20375,7 +21100,7 @@ function isTileTreatment(value) {
20375
21100
  function isEventListTreatment(value) {
20376
21101
  return typeof value === "string" && eventListTreatmentSet.has(value);
20377
21102
  }
20378
- var spacingTransform, raisedTransform, roundedTransform, boxStylesCompositeTransform, cardVariantClassTransform, boxStylesBorderColorTransform, fixedFrameScopeClass, tileTreatmentClassMap, tileTreatmentSet, eventListTreatmentClassMap, eventListTreatmentSet, sectionClassNameTransform, containerStylesResolveClassName, containerStylesResolveBoxClassName, sectionColorsStyleTransform, GAP_CLASS_MAP, GAP_VALUE_MAP, semanticGapTransform, semanticGapValueTransform, boxStylesTransforms;
21103
+ var spacingTransform, raisedTransform, roundedTransform, boxStylesCompositeTransform, CARD_ROLE_CHILD_HOOKS, cardRoleClassTransform, cardVariantClassTransform, boxStylesBorderColorTransform, tileTreatmentClassMap, tileTreatmentSet, eventListTreatmentClassMap, eventListTreatmentSet, sectionClassNameTransform, containerStylesResolveClassName, containerStylesResolveBoxClassName, sectionColorsStyleTransform, GAP_CLASS_MAP, GAP_VALUE_MAP, semanticGapTransform, semanticGapValueTransform, boxStylesTransforms;
20379
21104
  var init_boxStyles = __esmMin((() => {
20380
21105
  init_core();
20381
21106
  init_spacing();
@@ -20384,7 +21109,7 @@ var init_boxStyles = __esmMin((() => {
20384
21109
  init_cards();
20385
21110
  init_blockColorTokens();
20386
21111
  init_surfaceForegroundStyles();
20387
- init_backgroundContent();
21112
+ init_boxStyleClassNames();
20388
21113
  spacingTransform = {
20389
21114
  id: "boxStyles.spacing",
20390
21115
  kind: "string",
@@ -20411,7 +21136,7 @@ var init_boxStyles = __esmMin((() => {
20411
21136
  if (value !== true) return baseClass.trim() || "";
20412
21137
  const shadowValue = context.theme?.shadow?.medium;
20413
21138
  if (!shadowValue || shadowValue === "none") return baseClass.trim() || "";
20414
- const shadowClass = "rb-shadow-md";
21139
+ const shadowClass = RAISED_SHADOW_CLASS;
20415
21140
  return baseClass ? `${baseClass.trim()} ${shadowClass}` : shadowClass;
20416
21141
  }
20417
21142
  };
@@ -20423,14 +21148,7 @@ var init_boxStyles = __esmMin((() => {
20423
21148
  const baseClass = options.baseClass ?? "";
20424
21149
  if (!value || value === "none") return baseClass.trim() || "";
20425
21150
  if (typeof value !== "string") return baseClass.trim() || "";
20426
- const roundedClass = {
20427
- sm: "rb-rounded-sm",
20428
- md: "rb-rounded-md",
20429
- lg: "rb-rounded-lg",
20430
- xl: "rb-rounded-xl",
20431
- "2xl": "rb-rounded-2xl",
20432
- full: "rb-rounded-full"
20433
- }[value.trim()];
21151
+ const roundedClass = ROUNDED_CLASSES[value.trim()];
20434
21152
  if (!roundedClass) return baseClass.trim() || "";
20435
21153
  return baseClass ? `${baseClass.trim()} ${roundedClass}` : roundedClass;
20436
21154
  }
@@ -20440,56 +21158,48 @@ var init_boxStyles = __esmMin((() => {
20440
21158
  kind: "string",
20441
21159
  summary: "Composite transform for all box style properties",
20442
21160
  run: (value, options, context) => {
20443
- if (!value || typeof value !== "object") return options.baseClass?.trim() || "";
20444
- const input = value;
20445
- const axis = options.axis ?? "all";
20446
- let baseClass = options.baseClass ?? "";
20447
- const classes = [];
20448
- const border = input.border && typeof input.border === "object" ? input.border : null;
20449
- const borderEnabled = border ? border.enabled : void 0;
20450
- const borderWidth = border ? border.width : void 0;
20451
- const borderOverride = borderEnabled === false ? "rb-border-0" : borderEnabled === true ? borderWidth === "2" ? "rb-border-2" : borderWidth === "3" ? "rb-border-3" : borderWidth === "none" ? "rb-border-0" : "rb-border" : null;
20452
- if (borderOverride) baseClass = baseClass.split(/\s+/).filter((token) => token && !/^rb-border(?:-(?:0|2|3))?$/.test(token)).join(" ");
20453
- if (baseClass) classes.push(baseClass);
20454
- if (borderOverride) classes.push(borderOverride);
20455
- const spacing = typeof input.spacing === "string" ? input.spacing.trim() : null;
20456
- if (spacing && options.includeSpacing !== false) {
20457
- const spacingResult = spacingTransform.run(spacing, {
20458
- axis,
20459
- baseClass: ""
20460
- }, context);
20461
- if (typeof spacingResult === "string" && spacingResult) classes.push(spacingResult);
20462
- }
20463
- if (input.raised === true) {
20464
- const raisedResult = raisedTransform.run(true, { baseClass: "" }, context);
20465
- if (typeof raisedResult === "string" && raisedResult) classes.push(raisedResult);
20466
- }
20467
- const rounded = typeof input.rounded === "string" ? input.rounded.trim() : null;
20468
- if (rounded && rounded !== "none") {
20469
- const roundedResult = roundedTransform.run(rounded, { baseClass: "" }, context);
20470
- if (typeof roundedResult === "string" && roundedResult) classes.push(roundedResult);
20471
- }
20472
- if (input.treatment === "accent-quote") classes.push("rb-card-treatment-accent-quote");
20473
- else if (input.treatment === "editorial-rule") classes.push("rb-card-treatment-editorial-rule");
20474
- else if (input.treatment === "soft-panel") classes.push("rb-card-treatment-soft-panel");
20475
- else if (input.treatment === "editorial-serif-quote") classes.push("rb-card-treatment-editorial-serif-quote");
20476
- else if (input.treatment === "editorial-open") classes.push("rb-card-treatment-editorial-open");
20477
- else if (input.treatment === "color-blocked") classes.push("rb-card-treatment-color-blocked");
20478
- const cardVariant = normalizeBoxStylesCardVariant(input.cardVariant);
20479
- if (cardVariant && cardVariant !== "none") classes.push(`card-${cardVariant}`);
20480
- if (hasFixedFrameBackgroundMotion(input)) classes.push(fixedFrameScopeClass);
20481
- return classes.join(" ").trim() || "";
21161
+ const shadow = context.theme?.shadow?.medium;
21162
+ return boxStyleClassNames(value, {
21163
+ ...options,
21164
+ raisedClass: shadow && shadow !== "none" ? RAISED_SHADOW_CLASS : null
21165
+ });
21166
+ }
21167
+ };
21168
+ CARD_ROLE_CHILD_HOOKS = {
21169
+ media: "card-media",
21170
+ content: "card-content"
21171
+ };
21172
+ cardRoleClassTransform = {
21173
+ id: "boxStyles.cardRoleClass",
21174
+ kind: "string",
21175
+ summary: "Resolve card classes from a per-item card role and the block's card styles",
21176
+ run: (value, options, context) => {
21177
+ const baseClass = options?.baseClass ?? "";
21178
+ const stylesPath = options?.stylesPath ?? "content._cardStyles";
21179
+ const stylesInput = asPartialObject(readPath(context.viewModel, stylesPath)) ?? {};
21180
+ const itemRole = resolveItemCardRole(value, options?.itemRoleAliases);
21181
+ const emit = options?.emit ?? "surface";
21182
+ if (emit === "surface") return boxStylesCompositeTransform.run(stylesInput, {
21183
+ axis: options?.axis ?? "all",
21184
+ baseClass,
21185
+ cardRoleOverride: itemRole
21186
+ }, context) ?? "";
21187
+ const role = resolveCardRoleForBoxStyles(stylesInput, itemRole);
21188
+ if (!role || role === "none") return baseClass.trim();
21189
+ const hook = CARD_ROLE_CHILD_HOOKS[emit];
21190
+ return baseClass ? `${baseClass.trim()} ${hook}` : hook;
20482
21191
  }
20483
21192
  };
20484
21193
  cardVariantClassTransform = {
20485
21194
  id: "boxStyles.cardVariantClass",
20486
21195
  kind: "string",
20487
- summary: "Map a site-style card variant role to its card-{role} CSS class",
21196
+ summary: "Map a site-style card variant role to its card-role-{role} CSS class",
20488
21197
  run: (value, options) => {
20489
21198
  const baseClass = options?.baseClass?.trim() ?? "";
20490
21199
  const cardVariant = normalizeBoxStylesCardVariant(value);
20491
21200
  if (!cardVariant || cardVariant === "none") return baseClass;
20492
- return baseClass ? `${baseClass} card-${cardVariant}` : `card-${cardVariant}`;
21201
+ const roleClass = `card-role-${cardVariant}`;
21202
+ return baseClass ? `${baseClass} ${roleClass}` : roleClass;
20493
21203
  }
20494
21204
  };
20495
21205
  boxStylesBorderColorTransform = {
@@ -20502,8 +21212,8 @@ var init_boxStyles = __esmMin((() => {
20502
21212
  let explicitToken = null;
20503
21213
  const input = asPartialObject(value);
20504
21214
  if (input) {
20505
- const border = input.border && typeof input.border === "object" ? input.border : null;
20506
- if (border && border.enabled === true && typeof border.colorToken === "string" && border.colorToken.trim()) explicitToken = border.colorToken.trim();
21215
+ const border = normalizeBoxStylesBorder(input.border);
21216
+ if (border && border.enabled === true && border.colorToken) explicitToken = border.colorToken;
20507
21217
  }
20508
21218
  if (explicitToken) {
20509
21219
  const parsed = parseBlockColorToken(explicitToken);
@@ -20513,7 +21223,6 @@ var init_boxStyles = __esmMin((() => {
20513
21223
  return rgbColorValue(parseBlockColorToken(fallbackToken) ?? "border");
20514
21224
  }
20515
21225
  };
20516
- fixedFrameScopeClass = "rb-bg-motion-fixed-frame-scope";
20517
21226
  tileTreatmentClassMap = {
20518
21227
  default: "",
20519
21228
  quiet: "rb-tile-treatment-quiet",
@@ -20662,6 +21371,7 @@ var init_boxStyles = __esmMin((() => {
20662
21371
  raisedTransform,
20663
21372
  roundedTransform,
20664
21373
  boxStylesCompositeTransform,
21374
+ cardRoleClassTransform,
20665
21375
  cardVariantClassTransform,
20666
21376
  boxStylesBorderColorTransform,
20667
21377
  sectionClassNameTransform,
@@ -20723,6 +21433,31 @@ var init_responsiveTwoColumn = __esmMin((() => {
20723
21433
  }));
20724
21434
  //#endregion
20725
21435
  //#region ../blocks/src/system/node/fragments/styledCard.ts
21436
+ /**
21437
+ * The shared child hooks generated card CSS targets (`.card-media`,
21438
+ * `.card-content`). They join the class list only while a card role is in play,
21439
+ * so cards still on the legacy treatment path keep their exact classes.
21440
+ *
21441
+ * Blocks whose items each choose a surface pass `itemRole` so the hook follows
21442
+ * the item's choice; blocks with one surface per block bind from the card
21443
+ * styles themselves (the transform reads the role off `stylesFrom` and ignores
21444
+ * a non-string bound value), which keeps one emission path for both shapes.
21445
+ */
21446
+ function cardRoleChildClass(input) {
21447
+ return { $bind: {
21448
+ from: input.itemRole?.from ?? input.stylesFrom,
21449
+ transforms: [{
21450
+ id: "boxStyles.cardRoleClass",
21451
+ options: {
21452
+ emit: input.emit,
21453
+ baseClass: input.baseClass,
21454
+ stylesPath: input.stylesFrom,
21455
+ ...input.itemRole?.aliases ? { itemRoleAliases: input.itemRole.aliases } : {}
21456
+ }
21457
+ }],
21458
+ fallback: input.baseClass
21459
+ } };
21460
+ }
20726
21461
  function styledCard(children, opts, ...mods) {
20727
21462
  const baseClassName = opts.baseClassName ?? "rb-relative rb-isolate rb-overflow-visible rb-border";
20728
21463
  const defaultBackgroundLayer = el$1("div", {
@@ -20740,19 +21475,32 @@ function styledCard(children, opts, ...mods) {
20740
21475
  }]
20741
21476
  } }
20742
21477
  };
21478
+ const classNameBinding = opts.itemRole ? { $bind: {
21479
+ from: opts.itemRole.from,
21480
+ transforms: [{
21481
+ id: "boxStyles.cardRoleClass",
21482
+ options: {
21483
+ axis: "all",
21484
+ baseClass: baseClassName,
21485
+ stylesPath: opts.stylesFrom,
21486
+ ...opts.itemRole.aliases ? { itemRoleAliases: opts.itemRole.aliases } : {}
21487
+ }
21488
+ }],
21489
+ fallback: baseClassName
21490
+ } } : { $bind: {
21491
+ from: opts.stylesFrom,
21492
+ transforms: [{
21493
+ id: "boxStyles.all",
21494
+ options: {
21495
+ axis: "all",
21496
+ baseClass: baseClassName
21497
+ }
21498
+ }],
21499
+ fallback: baseClassName
21500
+ } };
20743
21501
  return el$1("div", {
20744
21502
  ...opts.dataProps ?? {},
20745
- className: { $bind: {
20746
- from: opts.stylesFrom,
20747
- transforms: [{
20748
- id: "boxStyles.all",
20749
- options: {
20750
- axis: "all",
20751
- baseClass: baseClassName
20752
- }
20753
- }],
20754
- fallback: baseClassName
20755
- } },
21503
+ className: classNameBinding,
20756
21504
  ...style ? { style } : {}
20757
21505
  }, [
20758
21506
  defaultBackgroundLayer,
@@ -23513,6 +24261,7 @@ var teamMemberFragment;
23513
24261
  var init_teamMember = __esmMin((() => {
23514
24262
  init_types$4();
23515
24263
  init_builder$1();
24264
+ init_fragments$1();
23516
24265
  teamMemberFragment = defineFragment$2({
23517
24266
  id: "teamMember",
23518
24267
  title: "Team member",
@@ -23553,7 +24302,11 @@ var init_teamMember = __esmMin((() => {
23553
24302
  gap: "sm",
23554
24303
  className: "rb-team-member rb-items-center rb-text-center"
23555
24304
  }, [
23556
- el$1("div", { className: "rb-team-member-photo-wrap rb-w-full" }, [media({
24305
+ el$1("div", { className: cardRoleChildClass({
24306
+ emit: "media",
24307
+ baseClass: "rb-team-member-photo-wrap rb-w-full",
24308
+ stylesFrom: "content._cardStyles"
24309
+ }) }, [media({
23557
24310
  className: "rb-team-member-photo rb-w-full rb-object-cover",
23558
24311
  style: { aspectRatio: "1 / 1" },
23559
24312
  size: {
@@ -23911,6 +24664,121 @@ var init_hero = __esmMin((() => {
23911
24664
  heroBlockDefinition = { manifest: heroManifest };
23912
24665
  }));
23913
24666
  //#endregion
24667
+ //#region ../blocks/src/primitives/layout/Grid.tsx
24668
+ /**
24669
+ * Canonical responsive ladder for a user-configured column count: 1 column at
24670
+ * base, 2 from `sm`, 3 from `lg` (when the count allows), and the full count
24671
+ * from `xl`. This matches the events blocks' COLUMN_CLASSES ladder — the two
24672
+ * are derived from this single function.
24673
+ */
24674
+ function gridUserColumnLadder(count) {
24675
+ const capped = Number.isFinite(count) ? Math.max(1, Math.min(4, Math.floor(count))) : 3;
24676
+ const ladder = { base: 1 };
24677
+ if (capped >= 2) ladder.sm = 2;
24678
+ if (capped >= 3) ladder.lg = 3;
24679
+ if (capped >= 4) ladder.xl = capped;
24680
+ return ladder;
24681
+ }
24682
+ /** The ladder as a space-separated `rb-*` utility class string. */
24683
+ function gridUserColumnClasses(count) {
24684
+ const ladder = gridUserColumnLadder(count);
24685
+ return GRID_BREAKPOINTS.flatMap((bp) => {
24686
+ const value = ladder[bp];
24687
+ return typeof value === "number" ? [COL_COUNT_CLASS[bp](value)] : [];
24688
+ }).join(" ");
24689
+ }
24690
+ var COL_COUNT_CLASS, GRID_BREAKPOINTS;
24691
+ var init_Grid = __esmMin((() => {
24692
+ COL_COUNT_CLASS = {
24693
+ base: (n) => `rb-grid-cols-${n}`,
24694
+ sm: (n) => `rb-sm-grid-cols-${n}`,
24695
+ md: (n) => `rb-md-grid-cols-${n}`,
24696
+ lg: (n) => `rb-lg-grid-cols-${n}`,
24697
+ xl: (n) => `rb-xl-grid-cols-${n}`
24698
+ };
24699
+ GRID_BREAKPOINTS = [
24700
+ "base",
24701
+ "sm",
24702
+ "md",
24703
+ "lg",
24704
+ "xl"
24705
+ ];
24706
+ }));
24707
+ //#endregion
24708
+ //#region ../blocks/src/system/fields/gridLayout.ts
24709
+ /**
24710
+ * Grid `userColumns` binding for blocks with a user-configured column count.
24711
+ * The count renders through the canonical responsive ladder — see
24712
+ * {@link gridUserColumnLadder}.
24713
+ */
24714
+ function userColumnsGridBinding() {
24715
+ return { $bind: {
24716
+ from: "content.columns",
24717
+ fallback: 3,
24718
+ coerce: "number"
24719
+ } };
24720
+ }
24721
+ /** Shared "Columns" select (2/3/4) for grid-layout blocks. */
24722
+ function columnsSelectField(options = {}) {
24723
+ return parseFieldDefinition({
24724
+ id: "columns",
24725
+ type: "select",
24726
+ label: options.label ?? "Columns",
24727
+ ...options.description ? { description: options.description } : {},
24728
+ defaultValue: options.defaultValue ?? String(3),
24729
+ options: [
24730
+ {
24731
+ value: "2",
24732
+ label: "2 columns"
24733
+ },
24734
+ {
24735
+ value: "3",
24736
+ label: "3 columns"
24737
+ },
24738
+ {
24739
+ value: "4",
24740
+ label: "4 columns"
24741
+ }
24742
+ ],
24743
+ ui: {
24744
+ intent: "display",
24745
+ ...options.visibleWhen ? { visibleWhen: options.visibleWhen } : {}
24746
+ }
24747
+ });
24748
+ }
24749
+ /** Shared semantic "Gap" select for layout blocks. */
24750
+ function gapSelectField(options = {}) {
24751
+ return parseFieldDefinition({
24752
+ id: "gap",
24753
+ type: "select",
24754
+ label: options.label ?? "Gap",
24755
+ ...options.description ? { description: options.description } : {},
24756
+ defaultValue: options.defaultValue ?? "medium",
24757
+ options: SEMANTIC_SPACING_VALUES.map((value) => ({
24758
+ value,
24759
+ label: SEMANTIC_SPACING_LABELS[value]
24760
+ })),
24761
+ ui: {
24762
+ intent: "display",
24763
+ ...options.visibleWhen ? { visibleWhen: options.visibleWhen } : {}
24764
+ }
24765
+ });
24766
+ }
24767
+ var SEMANTIC_SPACING_LABELS;
24768
+ var init_gridLayout = __esmMin((() => {
24769
+ init_Grid();
24770
+ init_schema();
24771
+ init_spacing();
24772
+ SEMANTIC_SPACING_LABELS = {
24773
+ none: "None",
24774
+ compact: "Compact",
24775
+ cozy: "Cozy",
24776
+ medium: "Medium",
24777
+ comfortable: "Comfortable",
24778
+ spacious: "Spacious"
24779
+ };
24780
+ }));
24781
+ //#endregion
23914
24782
  //#region ../blocks/src/system/fields/aspectRatio.ts
23915
24783
  function createAspectRatioField(options = {}) {
23916
24784
  return {
@@ -24058,6 +24926,7 @@ function introCopyStack(options = {}) {
24058
24926
  }
24059
24927
  var introMedia, centeredCopyLayout, statementCopyLayout, statementMediaLayout, mediaCopyLayout, introConfig, introManifest, introBlockDefinition;
24060
24928
  var init_intro = __esmMin((() => {
24929
+ init_gridLayout();
24061
24930
  init_defineBlock();
24062
24931
  init_aspectRatio();
24063
24932
  init_ctas();
@@ -24183,47 +25052,14 @@ var init_intro = __esmMin((() => {
24183
25052
  equals: "media-copy"
24184
25053
  }
24185
25054
  }),
24186
- {
24187
- id: "gap",
24188
- type: "select",
25055
+ gapSelectField({
24189
25056
  label: "Gap between media and text",
24190
- required: false,
24191
25057
  defaultValue: "comfortable",
24192
- multiple: false,
24193
- options: [
24194
- {
24195
- value: "none",
24196
- label: "None"
24197
- },
24198
- {
24199
- value: "compact",
24200
- label: "Compact"
24201
- },
24202
- {
24203
- value: "cozy",
24204
- label: "Cozy"
24205
- },
24206
- {
24207
- value: "medium",
24208
- label: "Medium"
24209
- },
24210
- {
24211
- value: "comfortable",
24212
- label: "Comfortable"
24213
- },
24214
- {
24215
- value: "spacious",
24216
- label: "Spacious"
24217
- }
24218
- ],
24219
- ui: {
24220
- intent: "display",
24221
- visibleWhen: {
24222
- field: "variant",
24223
- equals: "media-copy"
24224
- }
25058
+ visibleWhen: {
25059
+ field: "variant",
25060
+ equals: "media-copy"
24225
25061
  }
24226
- },
25062
+ }),
24227
25063
  createImageColSizeField({
24228
25064
  id: "ratio",
24229
25065
  label: "Media column size",
@@ -24473,9 +25309,21 @@ function postReadMore() {
24473
25309
  value: "Read more"
24474
25310
  }, when("content.readMoreText", { not: true }))]);
24475
25311
  }
25312
+ /**
25313
+ * The shared child hooks generated card CSS targets. Blog listing has one card
25314
+ * surface per block, so the hooks read the role straight off the compiled card
25315
+ * styles (Phase 2b).
25316
+ */
25317
+ function postCardChildClass(emit, baseClass) {
25318
+ return cardRoleChildClass({
25319
+ emit,
25320
+ baseClass,
25321
+ stylesFrom: "content._cardStyles"
25322
+ });
25323
+ }
24476
25324
  function postImageLink(className, mediaOptions) {
24477
25325
  return link({
24478
- className: "rb-block rb-overflow-hidden",
25326
+ className: postCardChildClass("media", "rb-block rb-overflow-hidden"),
24479
25327
  href: { $bind: { from: "post.path" } }
24480
25328
  }, [media({ className }, bind$1("post.image", { transforms: [{
24481
25329
  id: "media.fromUrl",
@@ -24503,6 +25351,7 @@ var init_blog_listing = __esmMin((() => {
24503
25351
  init_defineBlock();
24504
25352
  init_boxStyles$1();
24505
25353
  init_schema();
25354
+ init_gridLayout();
24506
25355
  init_builder$1();
24507
25356
  init_fragments$1();
24508
25357
  init_colorStyles();
@@ -24529,7 +25378,7 @@ var init_blog_listing = __esmMin((() => {
24529
25378
  resize: "cover"
24530
25379
  }), stack({
24531
25380
  gap: "sm",
24532
- className: "rb-flex-1 rb-p-6"
25381
+ className: postCardChildClass("content", "rb-flex-1 rb-p-6")
24533
25382
  }, [
24534
25383
  postTitle(),
24535
25384
  postDate(),
@@ -24538,7 +25387,7 @@ var init_blog_listing = __esmMin((() => {
24538
25387
  ])], repeat("data.posts", "post"));
24539
25388
  stackPostCard = styledCard([inline({
24540
25389
  gap: "lg",
24541
- className: "rb-flex-col rb-items-stretch rb-sm-flex-row rb-sm-items-start rb-p-5 rb-sm-p-6"
25390
+ className: postCardChildClass("content", "rb-flex-col rb-items-stretch rb-sm-flex-row rb-sm-items-start rb-p-5 rb-sm-p-6")
24542
25391
  }, [postImageLink("rb-h-44 rb-w-full rb-sm-h-32 rb-sm-w-36 rb-object-cover", {
24543
25392
  width: 320,
24544
25393
  height: 240,
@@ -24572,11 +25421,7 @@ var init_blog_listing = __esmMin((() => {
24572
25421
  }
24573
25422
  };
24574
25423
  gridLayout$2 = blogListingShell([grid$3({
24575
- cols: { $bind: {
24576
- from: "content.columns",
24577
- fallback: 3,
24578
- coerce: "number"
24579
- } },
25424
+ userColumns: userColumnsGridBinding(),
24580
25425
  gap: "lg"
24581
25426
  }, [gridPostCard]), emptyState$2]);
24582
25427
  stackLayout = blogListingShell([stack({
@@ -24605,33 +25450,13 @@ var init_blog_listing = __esmMin((() => {
24605
25450
  }
24606
25451
  },
24607
25452
  additionalFields: [
24608
- parseFieldDefinition({
24609
- id: "columns",
24610
- type: "select",
25453
+ columnsSelectField({
24611
25454
  label: "Grid columns",
24612
25455
  description: "Number of columns in the grid layout.",
24613
- defaultValue: "3",
24614
- ui: {
24615
- intent: "display",
24616
- visibleWhen: {
24617
- field: "variant",
24618
- equals: "grid"
24619
- }
24620
- },
24621
- options: [
24622
- {
24623
- value: "2",
24624
- label: "2 columns"
24625
- },
24626
- {
24627
- value: "3",
24628
- label: "3 columns"
24629
- },
24630
- {
24631
- value: "4",
24632
- label: "4 columns"
24633
- }
24634
- ]
25456
+ visibleWhen: {
25457
+ field: "variant",
25458
+ equals: "grid"
25459
+ }
24635
25460
  }),
24636
25461
  parseFieldDefinition({
24637
25462
  id: "postsPerPage",
@@ -25347,7 +26172,7 @@ var init_faq = __esmMin((() => {
25347
26172
  twoColumnLayout = styledSection({
25348
26173
  children: styledContainer({
25349
26174
  baseClassName: "rb-relative rb-isolate",
25350
- children: el$1("div", { className: "rb-faq-split-heading rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start" }, [el$1("div", { className: "rb-faq-split-heading-copy" }, [headingLayout]), el$1("div", { className: "rb-faq-split-heading-accordion" }, [accordionLayout])])
26175
+ children: el$1("div", { className: "rb-faq-split-heading rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-items-start" }, [el$1("div", { className: "rb-faq-split-heading-copy" }, [headingLayout]), el$1("div", { className: "rb-faq-split-heading-accordion" }, [accordionLayout])])
25351
26176
  }),
25352
26177
  baseClass: ""
25353
26178
  });
@@ -25364,7 +26189,7 @@ var init_faq = __esmMin((() => {
25364
26189
  splitHeadingColumnsLayout = styledSection({
25365
26190
  children: styledContainer({
25366
26191
  baseClassName: "rb-relative rb-isolate",
25367
- children: el$1("div", { className: "rb-faq-split-heading-columns rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start" }, [el$1("div", { className: "rb-faq-split-heading-columns-copy" }, [headingLayout]), el$1("div", { className: "rb-faq-split-heading-columns-accordion" }, [questionColumnsAccordionLayout])])
26192
+ children: el$1("div", { className: "rb-faq-split-heading-columns rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-items-start" }, [el$1("div", { className: "rb-faq-split-heading-columns-copy" }, [headingLayout]), el$1("div", { className: "rb-faq-split-heading-columns-accordion" }, [questionColumnsAccordionLayout])])
25368
26193
  }),
25369
26194
  baseClass: ""
25370
26195
  });
@@ -26134,60 +26959,54 @@ function resolveHeaderLogoAccommodationClass(logo) {
26134
26959
  default: return "header-logo-accommodation-inline";
26135
26960
  }
26136
26961
  }
26137
- function resolveBackgroundVisualStyles(backgroundColor, tokens, defaultToken = "surface") {
26962
+ function resolveBackgroundVisualStyles(backgroundColor, defaultToken = "surface") {
26138
26963
  const backgroundToken = typeof backgroundColor === "string" && backgroundColor.trim().length > 0 ? backgroundColor : defaultToken;
26139
26964
  if (backgroundToken === "transparent") return {
26140
26965
  backgroundToken,
26141
- paletteHex: null,
26142
- backgroundHex: null,
26143
- isBackgroundDark: false,
26144
- textColorToken: "text",
26145
- textColorOverride: null,
26146
26966
  isTransparent: true
26147
26967
  };
26148
- const paletteHex = tokens.palette[backgroundToken];
26149
- const fallbackHex = paletteHex ?? tokens.palette.surface ?? tokens.color["surface/base"] ?? tokens.color["background/base"] ?? "#ffffff";
26150
- const baseBackgroundHex = tokens.color["background/base"] ?? tokens.palette.surface ?? tokens.color["surface/base"] ?? "#ffffff";
26151
- const backgroundTone = detectTone(fallbackHex);
26152
- const baseTone = detectTone(baseBackgroundHex);
26153
- const needsContrast = Boolean(backgroundTone && baseTone && backgroundTone !== baseTone);
26154
26968
  return {
26155
26969
  backgroundToken,
26156
- paletteHex,
26157
- backgroundHex: fallbackHex,
26158
- isBackgroundDark: backgroundTone === "dark",
26159
- textColorToken: needsContrast ? void 0 : "text",
26160
- textColorOverride: needsContrast ? backgroundTone === "dark" ? "#ffffff" : "#000000" : null,
26161
26970
  isTransparent: false
26162
26971
  };
26163
26972
  }
26164
- function resolveHeaderVisualStyles(header, tokens) {
26973
+ function resolveHeaderVisualStyles(header) {
26165
26974
  const navContainerType = header?.navContainer?.type ?? "none";
26166
26975
  const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
26167
- const hasTransparentVariant = header?.variant === "transparent" || header?.variant === "floating";
26168
- if (hasContainedNav || hasTransparentVariant) return {
26976
+ const hasOverlayVariant = header?.variant === "floating";
26977
+ if (hasContainedNav || hasOverlayVariant) return {
26169
26978
  backgroundToken: "transparent",
26170
- paletteHex: null,
26171
- backgroundHex: null,
26172
- isBackgroundDark: false,
26173
- textColorToken: "text",
26174
- textColorOverride: null,
26175
26979
  isTransparent: true
26176
26980
  };
26177
26981
  const background = header?.background;
26178
26982
  let colorToken;
26179
26983
  if (!background || background.type === "color") colorToken = background?.color ?? "surface";
26180
- else if (background.type === "gradient" && background.gradient) colorToken = background.gradient.stops[0]?.color ?? "surface";
26181
- else if (background.type === "image") colorToken = "neutral-900";
26182
- return resolveBackgroundVisualStyles(colorToken, tokens);
26984
+ return resolveBackgroundVisualStyles(colorToken);
26183
26985
  }
26184
- function detectTone(hex) {
26185
- if (!hex) return null;
26186
- try {
26187
- return featuresFromHex(hex).Y < .5 ? "dark" : "light";
26188
- } catch {
26189
- return null;
26190
- }
26986
+ function resolvedForegroundStyle(foreground) {
26987
+ if (foreground.kind === "unknown") return void 0;
26988
+ const { roles } = foreground;
26989
+ return surfaceForegroundStyle({
26990
+ text: rgbColorValue(roles.text),
26991
+ heading: rgbColorValue(roles.heading),
26992
+ link: rgbColorValue(roles.link),
26993
+ supporting: rgbColorValue(roles.supporting)
26994
+ });
26995
+ }
26996
+ function resolveFooterRootForeground(footer, palette) {
26997
+ const background = footer?.background;
26998
+ return resolveSurfaceForeground(background ?? {
26999
+ type: "color",
27000
+ color: "surface"
27001
+ }, palette, {
27002
+ text: background?.textColor,
27003
+ link: footer?.navLinkStyle?.colorToken ?? footer?.navColor ?? background?.textColor
27004
+ });
27005
+ }
27006
+ function footerBottomBarBorderWidthStyle(width) {
27007
+ if (!width) return void 0;
27008
+ if (width === "none") return { borderTopWidth: "0px" };
27009
+ return { borderTopWidth: width === "thin" ? "1px" : width === "medium" ? "2px" : "3px" };
26191
27010
  }
26192
27011
  function shouldShowFooterLogoText(footer) {
26193
27012
  if (!footer) return false;
@@ -26203,12 +27022,13 @@ function extractBackgroundColorToken(background, fallback) {
26203
27022
  }
26204
27023
  var joinClasses, headerLogoClassSchema, headerLogoClassTransform, headerLogoMediaClassTransform, headerLogoTextVisibleTransform, classicNavModeTransform, maxWidthClassSchema, maxWidthClassTransform, headerRootClassSchema, headerRootClassTransform, footerRootClassSchema, footerRootClassTransform, headerRootStyleTransform, headerSectionBackgroundTransform, footerRootStyleTransform, footerSpacingClassXMap, footerSpacingClassYMap, footerBottomBarClassSchema, footerBottomBarClassTransform, footerBottomBarContainerClassSchema, footerBottomBarContainerClassTransform, footerBottomBarStyleTransform, footerSplitMainClassSchema, footerSplitMainClassTransform, footerLogoClassSchema, footerLogoClassTransform, footerLogoMediaClassSchema, footerLogoMediaClassTransform, footerLogoTextVisibleTransform, layoutTransforms;
26205
27024
  var init_layout$2 = __esmMin((() => {
26206
- init_colorConversion();
27025
+ init_schema$2();
26207
27026
  init_core();
26208
27027
  init_colorStyles();
26209
27028
  init_surfaces();
26210
27029
  init_siteChromePlacement();
26211
27030
  init_runtimeContract();
27031
+ init_surfaceForegroundStyles();
26212
27032
  joinClasses = (parts) => parts.filter((part) => typeof part === "string" && part.trim().length > 0).join(" ").replace(/\s+/g, " ").trim();
26213
27033
  headerLogoClassSchema = z.object({ base: z.string().optional() });
26214
27034
  headerLogoClassTransform = {
@@ -26288,7 +27108,7 @@ var init_layout$2 = __esmMin((() => {
26288
27108
  kind: "string",
26289
27109
  summary: "Compose header root classes from positioning and shrink options",
26290
27110
  schema: headerRootClassSchema,
26291
- run: (value, options, context) => {
27111
+ run: (value, options) => {
26292
27112
  const config = {
26293
27113
  base: "header-root rb-z-40 rb-w-full transition-theme",
26294
27114
  sticky: "rb-sticky rb-top-0",
@@ -26302,7 +27122,7 @@ var init_layout$2 = __esmMin((() => {
26302
27122
  const content = asPartialObject(value) ?? {};
26303
27123
  const placement = planSiteChromePlacement(parseHeaderPositioning(content.positioning));
26304
27124
  const header = asPartialObject(value);
26305
- const visuals = resolveHeaderVisualStyles(header, context.theme);
27125
+ const visuals = resolveHeaderVisualStyles(header);
26306
27126
  const navContainerType = header?.navContainer?.type ?? "none";
26307
27127
  const hasContainedNav = navContainerType === "glass" || navContainerType === "pill";
26308
27128
  const backgroundClass = visuals.isTransparent || hasContainedNav ? "rb-bg-transparent" : null;
@@ -26314,14 +27134,8 @@ var init_layout$2 = __esmMin((() => {
26314
27134
  if (placement.kind === "sticky") classes.push(visuals.isTransparent ? config.stickyTransparent : config.sticky);
26315
27135
  else if (placement.kind === "fixed") classes.push(config.fixed);
26316
27136
  if (isHeaderScrollRuntimeEnabled(content)) classes.push(config.shrink);
26317
- const VALID_VARIANTS = [
26318
- "classic",
26319
- "centered",
26320
- "transparent",
26321
- "floating"
26322
- ];
26323
27137
  const variant = header?.variant;
26324
- if (variant && VALID_VARIANTS.includes(variant)) classes.push(`header-variant-${variant}`);
27138
+ if (variant && headerVariantValues.includes(variant)) classes.push(`header-variant-${variant}`);
26325
27139
  if (header?.barFrame === "inset-shell" && variant === "classic") classes.push("header-bar-frame-inset-shell");
26326
27140
  return joinClasses(classes);
26327
27141
  }
@@ -26337,14 +27151,14 @@ var init_layout$2 = __esmMin((() => {
26337
27151
  kind: "string",
26338
27152
  summary: "Compose footer root classes with optional inversion",
26339
27153
  schema: footerRootClassSchema,
26340
- run: (value, options, context) => {
27154
+ run: (value, options) => {
26341
27155
  const config = {
26342
27156
  base: "rb-w-full rb-border-t transition-theme",
26343
27157
  transparent: "rb-bg-transparent",
26344
27158
  ...options
26345
27159
  };
26346
27160
  const background = asPartialObject(value)?.background;
26347
- const backgroundClass = resolveBackgroundVisualStyles(extractBackgroundColorToken(background, "surface"), context.theme).isTransparent ? config.transparent : null;
27161
+ const backgroundClass = resolveBackgroundVisualStyles(extractBackgroundColorToken(background, "surface")).isTransparent ? config.transparent : null;
26348
27162
  return joinClasses([config.base, backgroundClass]);
26349
27163
  }
26350
27164
  };
@@ -26354,14 +27168,8 @@ var init_layout$2 = __esmMin((() => {
26354
27168
  summary: "Compose header root inline styles for dynamic colors",
26355
27169
  run: (value, _options, context) => {
26356
27170
  const header = asPartialObject(value);
26357
- const background = header?.background;
26358
- const visuals = resolveBackgroundVisualStyles(extractBackgroundColorToken(background, "surface"), context.theme);
26359
- const styleParts = [];
26360
- if (visuals.textColorOverride) styleParts.push({ color: visuals.textColorOverride });
26361
- else if (visuals.textColorToken) styleParts.push(textColorStyle(visuals.textColorToken));
26362
- const borderColorToken = header?.border?.colorToken ?? "border";
26363
- styleParts.push(borderColorStyle(borderColorToken));
26364
- return mergeStyles(...styleParts);
27171
+ const visuals = resolveHeaderVisualStyles(header);
27172
+ return mergeStyles(resolvedForegroundStyle(resolveHeaderRootForeground(header, context.theme.palette, visuals.isTransparent)) ?? { color: rgbColorValue(resolveHeaderLeafTextColor(header)) }, borderColorStyle(header?.border?.colorToken ?? "border"));
26365
27173
  }
26366
27174
  };
26367
27175
  headerSectionBackgroundTransform = {
@@ -26371,7 +27179,7 @@ var init_layout$2 = __esmMin((() => {
26371
27179
  run: (value) => {
26372
27180
  const header = asPartialObject(value);
26373
27181
  const navContainerType = header?.navContainer?.type ?? "none";
26374
- return header?.variant === "transparent" || header?.variant === "floating" || navContainerType === "glass" || navContainerType === "pill" ? "raw:transparent" : "background";
27182
+ return header?.variant === "floating" || navContainerType === "glass" || navContainerType === "pill" ? "raw:transparent" : "background";
26375
27183
  }
26376
27184
  };
26377
27185
  footerRootStyleTransform = {
@@ -26379,8 +27187,9 @@ var init_layout$2 = __esmMin((() => {
26379
27187
  kind: "formatter",
26380
27188
  summary: "Compose footer root inline styles for dynamic colors",
26381
27189
  run: (value, _options, context) => {
26382
- const background = asPartialObject(value)?.background;
26383
- const visuals = resolveBackgroundVisualStyles(extractBackgroundColorToken(background, "surface"), context.theme);
27190
+ const footer = asPartialObject(value);
27191
+ const background = footer?.background;
27192
+ const visuals = resolveBackgroundVisualStyles(extractBackgroundColorToken(background, "surface"));
26384
27193
  const styleParts = [];
26385
27194
  if (!visuals.isTransparent) {
26386
27195
  if (!background || background.type === "color") {
@@ -26388,9 +27197,7 @@ var init_layout$2 = __esmMin((() => {
26388
27197
  styleParts.push(backgroundColorStyle(token));
26389
27198
  }
26390
27199
  }
26391
- const foreground = visuals.textColorOverride ?? (visuals.textColorToken ? rgbColorValue(visuals.textColorToken) : null);
26392
- if (!visuals.isTransparent && foreground) styleParts.push(surfaceForegroundStyle({ text: foreground }));
26393
- else if (foreground) styleParts.push({ color: foreground });
27200
+ styleParts.push(resolvedForegroundStyle(resolveFooterRootForeground(footer, context.theme.palette)));
26394
27201
  styleParts.push(borderColorStyle("border"));
26395
27202
  return mergeStyles(...styleParts);
26396
27203
  }
@@ -26452,20 +27259,21 @@ var init_layout$2 = __esmMin((() => {
26452
27259
  kind: "formatter",
26453
27260
  summary: "Compose footer bottom bar style from theme controls",
26454
27261
  run: (value, _options, context) => {
26455
- const bottomBar = asPartialObject(value)?.bottomBar;
27262
+ const footer = asPartialObject(value);
27263
+ const bottomBar = footer?.bottomBar;
26456
27264
  const styleParts = [];
26457
27265
  const background = bottomBar?.background;
26458
27266
  if (background?.type === "color") styleParts.push(backgroundColorStyle(background.color ?? "surface"));
26459
- const borderColorToken = bottomBar?.borderTop?.colorToken;
26460
- if (borderColorToken) styleParts.push(borderColorStyle(borderColorToken));
26461
- else styleParts.push(borderColorStyle("border"));
26462
- const borderWidth = bottomBar?.borderTop?.width;
26463
- if (borderWidth && borderWidth !== "none") styleParts.push({ borderTopWidth: borderWidth === "thin" ? "1px" : borderWidth === "medium" ? "2px" : "3px" });
26464
- else if (borderWidth === "none") styleParts.push({ borderTopWidth: "0px" });
26465
- const visuals = resolveBackgroundVisualStyles(extractBackgroundColorToken(background, "surface"), context.theme);
26466
- const foreground = bottomBar?.textColor ? rgbColorValue(bottomBar.textColor) : visuals.textColorOverride ?? (visuals.textColorToken ? rgbColorValue(visuals.textColorToken) : null);
26467
- if (background?.type === "color" && foreground) styleParts.push(surfaceForegroundStyle({ text: foreground }));
26468
- else if (foreground && bottomBar?.textColor) styleParts.push({ color: foreground });
27267
+ styleParts.push(borderColorStyle(bottomBar?.borderTop?.colorToken ?? "border"), footerBottomBarBorderWidthStyle(bottomBar?.borderTop?.width));
27268
+ const foreground = resolveSurfaceForeground(background?.type === "color" ? background : {
27269
+ type: "color",
27270
+ color: "transparent"
27271
+ }, context.theme.palette, {
27272
+ text: bottomBar?.textColor,
27273
+ link: footer?.bottomTextLinkStyle?.colorToken ?? bottomBar?.textColor
27274
+ });
27275
+ if (background?.type === "color") styleParts.push(resolvedForegroundStyle(foreground));
27276
+ else if (bottomBar?.textColor) styleParts.push(textColorStyle(bottomBar.textColor));
26469
27277
  return mergeStyles(...styleParts);
26470
27278
  }
26471
27279
  };
@@ -26777,7 +27585,7 @@ var init_shared$4 = __esmMin((() => {
26777
27585
  }));
26778
27586
  //#endregion
26779
27587
  //#region ../blocks/src/system/blocks/site-header.ts
26780
- var whenTransformed, logoRow, centeredLogoRow, createNavRow, headerCta, mobileCta, mobileToggleIcon, mobileToggleButton, mobileOverlayToggleButton, mobileNavList, mobileOverlayHeader, mobileOverlayBody, mobileOverlay, mobileHeaderBar, classicLayout, classicCenteredNavLayout, centeredLayout, transparentLayout, floatingLayout, headerLayout, siteHeaderManifest, siteHeaderBlockDefinition;
27588
+ var whenTransformed, logoRow, centeredLogoRow, createNavRow, headerCta, mobileCta, mobileToggleIcon, mobileToggleButton, mobileOverlayToggleButton, mobileNavList, mobileOverlayHeader, mobileOverlayBody, mobileOverlay, mobileHeaderBar, classicLayout, classicCenteredNavLayout, centeredLayout, floatingLayout, headerLayout, siteHeaderManifest, siteHeaderBlockDefinition;
26781
27589
  var init_site_header = __esmMin((() => {
26782
27590
  init_builder$1();
26783
27591
  init_fragments$1();
@@ -26986,17 +27794,6 @@ var init_site_header = __esmMin((() => {
26986
27794
  fallback: `rb-container rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-flex-col rb-items-center rb-gap-5 rb-text-center`
26987
27795
  })
26988
27796
  }, [centeredLogoRow, createNavRow(`${desktopOnlyDisplay("flex")} rb-flex-wrap rb-justify-center rb-gap-x-6 rb-gap-y-3`, "center")], when("$root.theme.header.variant", { equals: "centered" }));
26989
- transparentLayout = inline({
26990
- className: bindProp("$root.theme.header.maxWidth", {
26991
- transforms: pipe(tx("layout.maxWidthClass", { base: `rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-items-center rb-gap-6` })),
26992
- fallback: `rb-container rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-items-center rb-gap-6`
26993
- }),
26994
- align: "center"
26995
- }, [
26996
- logoRow,
26997
- createNavRow(`rb-ml-auto ${desktopOnlyDisplay("flex")} rb-gap-6`),
26998
- headerCta
26999
- ], when("$root.theme.header.variant", { equals: "transparent" }));
27000
27797
  floatingLayout = inline({
27001
27798
  [SITE_CHROME_VISIBLE_HEADER_ATTR]: "true",
27002
27799
  className: bindProp("$root.theme.header.maxWidth", {
@@ -27032,7 +27829,6 @@ var init_site_header = __esmMin((() => {
27032
27829
  classicLayout,
27033
27830
  classicCenteredNavLayout,
27034
27831
  centeredLayout,
27035
- transparentLayout,
27036
27832
  floatingLayout,
27037
27833
  mobileOverlay
27038
27834
  ], props({ "data-site-header": "true" }));
@@ -27792,6 +28588,7 @@ var init_collection = __esmMin((() => {
27792
28588
  init_schema();
27793
28589
  init_defineBlock();
27794
28590
  init_builder$1();
28591
+ init_gridLayout();
27795
28592
  init_fragments$1();
27796
28593
  init_fragmentCollection();
27797
28594
  init_boxStyles$1();
@@ -27810,26 +28607,20 @@ var init_collection = __esmMin((() => {
27810
28607
  itemName: ITEM_NAME$1,
27811
28608
  fragments: collectionFragments,
27812
28609
  itemGap: "md",
27813
- itemClassName: {
27814
- $bind: {
27815
- from: "content._cardStyles",
27816
- transforms: [{
27817
- id: "boxStyles.all",
27818
- options: {
27819
- axis: "all",
27820
- baseClass: "rb-collection-item rb-relative rb-isolate rb-overflow-visible rb-border"
27821
- }
27822
- }]
27823
- },
28610
+ itemClassName: { $bind: {
28611
+ from: "content._cardStyles",
28612
+ transforms: [{
28613
+ id: "boxStyles.all",
28614
+ options: {
28615
+ axis: "all",
28616
+ baseClass: "rb-collection-item rb-relative rb-isolate rb-overflow-visible rb-border"
28617
+ }
28618
+ }],
27824
28619
  fallback: "rb-collection-item"
27825
- }
28620
+ } }
27826
28621
  });
27827
28622
  gridLayoutNode = el$1("grid", {
27828
- cols: { $bind: {
27829
- from: "content.columns",
27830
- fallback: 3,
27831
- coerce: "number"
27832
- } },
28623
+ userColumns: userColumnsGridBinding(),
27833
28624
  gap: { $bind: {
27834
28625
  from: "content.gap",
27835
28626
  fallback: "medium"
@@ -27880,67 +28671,14 @@ var init_collection = __esmMin((() => {
27880
28671
  }],
27881
28672
  ui: { intent: "display" }
27882
28673
  }),
27883
- parseFieldDefinition({
27884
- id: "columns",
27885
- type: "select",
27886
- label: "Columns",
28674
+ columnsSelectField({
27887
28675
  description: "Number of columns in the grid layout.",
27888
- defaultValue: "3",
27889
- options: [
27890
- {
27891
- value: "2",
27892
- label: "2 columns"
27893
- },
27894
- {
27895
- value: "3",
27896
- label: "3 columns"
27897
- },
27898
- {
27899
- value: "4",
27900
- label: "4 columns"
27901
- }
27902
- ],
27903
- ui: {
27904
- intent: "display",
27905
- visibleWhen: {
27906
- field: "layout",
27907
- equals: "grid"
27908
- }
28676
+ visibleWhen: {
28677
+ field: "layout",
28678
+ equals: "grid"
27909
28679
  }
27910
28680
  }),
27911
- parseFieldDefinition({
27912
- id: "gap",
27913
- type: "select",
27914
- label: "Gap",
27915
- defaultValue: "medium",
27916
- options: [
27917
- {
27918
- value: "none",
27919
- label: "None"
27920
- },
27921
- {
27922
- value: "compact",
27923
- label: "Compact"
27924
- },
27925
- {
27926
- value: "cozy",
27927
- label: "Cozy"
27928
- },
27929
- {
27930
- value: "medium",
27931
- label: "Medium"
27932
- },
27933
- {
27934
- value: "comfortable",
27935
- label: "Comfortable"
27936
- },
27937
- {
27938
- value: "spacious",
27939
- label: "Spacious"
27940
- }
27941
- ],
27942
- ui: { intent: "display" }
27943
- }),
28681
+ gapSelectField(),
27944
28682
  fragmentsToRepeaterField("items", "Items", collectionFragments, {
27945
28683
  minItems: 0,
27946
28684
  maxItems: 50,
@@ -28871,6 +29609,15 @@ var init_feature_card_icons = __esmMin((() => {
28871
29609
  }));
28872
29610
  //#endregion
28873
29611
  //#region ../blocks/src/system/blocks/feature-cards.ts
29612
+ /** The shared child hooks, bound from this block's per-item surface choice. */
29613
+ function featureCardChildClass(emit, baseClass) {
29614
+ return cardRoleChildClass({
29615
+ emit,
29616
+ baseClass,
29617
+ stylesFrom: "content._cardStyles",
29618
+ itemRole: featureCardItemRole
29619
+ });
29620
+ }
28874
29621
  function grid$2(props, children) {
28875
29622
  return el$1("grid", props ?? void 0, children ?? void 0);
28876
29623
  }
@@ -28894,16 +29641,24 @@ function editorialCardsLayout(layout) {
28894
29641
  spacing: "medium"
28895
29642
  });
28896
29643
  }
28897
- var centeredSectionHeading, editorialSectionHeading, featureCard, cardsLayout, editorialDiptychLayout, editorialPathwaysLayout, featureCardsConfig, featureCardsManifest, featureCardsBlockDefinition;
29644
+ var featureCardItemRole, centeredSectionHeading, editorialSectionHeading, featureCard, cardsLayout, editorialDiptychLayout, editorialPathwaysLayout, featureCardsConfig, featureCardsManifest, featureCardsBlockDefinition;
28898
29645
  var init_feature_cards = __esmMin((() => {
28899
29646
  init_defineBlock();
28900
29647
  init_aspectRatio();
28901
29648
  init_boxStyles$1();
29649
+ init_gridLayout();
28902
29650
  init_ctas();
28903
29651
  init_builder$1();
28904
29652
  init_fragments$1();
28905
29653
  init_colorStyles();
28906
29654
  init_feature_card_icons();
29655
+ featureCardItemRole = {
29656
+ from: "card.surfaceRole",
29657
+ aliases: {
29658
+ open: "none",
29659
+ panel: "alternative"
29660
+ }
29661
+ };
28907
29662
  centeredSectionHeading = stack({
28908
29663
  gap: "sm",
28909
29664
  className: "rb-feature-cards-heading rb-mx-auto rb-max-w-3xl rb-text-center"
@@ -28931,12 +29686,12 @@ var init_feature_cards = __esmMin((() => {
28931
29686
  style: textColorStyle("mutedText")
28932
29687
  }, when("content.description"), bind$1("content.description"))
28933
29688
  ]);
28934
- featureCard = styledCard([el$1("div", { className: "rb-feature-card-media-frame rb-overflow-hidden rb-w-full" }, [media({
29689
+ featureCard = styledCard([el$1("div", { className: featureCardChildClass("media", "rb-feature-card-media-frame rb-overflow-hidden rb-w-full") }, [media({
28935
29690
  className: "rb-feature-card-media rb-w-full rb-h-auto rb-object-cover",
28936
29691
  style: { aspectRatio: { $bind: { from: "card.aspectRatio" } } }
28937
29692
  }, bind$1("card.media"))], when("card.media")), stack({
28938
29693
  gap: "sm",
28939
- className: "rb-feature-card-content rb-flex-1 rb-p-6"
29694
+ className: featureCardChildClass("content", "rb-feature-card-content rb-flex-1 rb-p-6")
28940
29695
  }, [
28941
29696
  el$1("feature-card-icon", {
28942
29697
  treatment: { $bind: {
@@ -28972,6 +29727,7 @@ var init_feature_cards = __esmMin((() => {
28972
29727
  stylesFrom: "content._cardStyles",
28973
29728
  backgroundFrom: "content._cardStyles.background",
28974
29729
  baseClassName: "rb-feature-card rb-relative rb-isolate rb-border rb-flex rb-h-full rb-flex-col",
29730
+ itemRole: featureCardItemRole,
28975
29731
  dataProps: { "data-surface-role": { $bind: {
28976
29732
  from: "card.surfaceRole",
28977
29733
  fallback: "open"
@@ -28987,11 +29743,7 @@ var init_feature_cards = __esmMin((() => {
28987
29743
  from: "content.cardMarker",
28988
29744
  fallback: "icons"
28989
29745
  } },
28990
- cols: { $bind: {
28991
- from: "content.columns",
28992
- fallback: 3,
28993
- coerce: "number"
28994
- } },
29746
+ userColumns: userColumnsGridBinding(),
28995
29747
  gap: "lg"
28996
29748
  }, [featureCard])]
28997
29749
  }),
@@ -29031,29 +29783,7 @@ var init_feature_cards = __esmMin((() => {
29031
29783
  required: false,
29032
29784
  ui: { richTextVariant: "limited" }
29033
29785
  },
29034
- {
29035
- id: "columns",
29036
- type: "select",
29037
- label: "Columns",
29038
- required: false,
29039
- defaultValue: "3",
29040
- multiple: false,
29041
- options: [
29042
- {
29043
- value: "2",
29044
- label: "2 columns"
29045
- },
29046
- {
29047
- value: "3",
29048
- label: "3 columns"
29049
- },
29050
- {
29051
- value: "4",
29052
- label: "4 columns"
29053
- }
29054
- ],
29055
- ui: { intent: "display" }
29056
- },
29786
+ columnsSelectField(),
29057
29787
  {
29058
29788
  id: "cards",
29059
29789
  type: "repeater",
@@ -29353,8 +30083,9 @@ var init_carousel = __esmMin((() => {
29353
30083
  label: "10 seconds"
29354
30084
  }
29355
30085
  ];
29356
- })), textCardStylesField, mediaTextManifest, mediaTextBlockDefinition;
30086
+ })), mediaTextCardOptions, textCardStylesField, mediaTextManifest, mediaTextBlockDefinition;
29357
30087
  var init_media_text = __esmMin((() => {
30088
+ init_gridLayout();
29358
30089
  init_defineBlock();
29359
30090
  init_frameStyles();
29360
30091
  init_fragments$1();
@@ -29364,6 +30095,11 @@ var init_media_text = __esmMin((() => {
29364
30095
  init_carousel();
29365
30096
  init_imageShape();
29366
30097
  init_imageLayout();
30098
+ mediaTextCardOptions = {
30099
+ stylesFrom: "content._textCardStyles",
30100
+ backgroundFrom: "content._textCardStyles.background",
30101
+ itemRole: { from: "content._cardStyles.role" }
30102
+ };
29367
30103
  textCardStylesField = (() => {
29368
30104
  const field = cardStylesField({
29369
30105
  id: "_textCardStyles",
@@ -29457,41 +30193,10 @@ var init_media_text = __esmMin((() => {
29457
30193
  defaultValue: "left",
29458
30194
  uiIntent: "display"
29459
30195
  }),
29460
- {
29461
- id: "gap",
29462
- type: "select",
30196
+ gapSelectField({
29463
30197
  label: "Gap between media and text",
29464
- required: false,
29465
- defaultValue: "comfortable",
29466
- multiple: false,
29467
- options: [
29468
- {
29469
- value: "none",
29470
- label: "None"
29471
- },
29472
- {
29473
- value: "compact",
29474
- label: "Compact"
29475
- },
29476
- {
29477
- value: "cozy",
29478
- label: "Cozy"
29479
- },
29480
- {
29481
- value: "medium",
29482
- label: "Medium"
29483
- },
29484
- {
29485
- value: "comfortable",
29486
- label: "Comfortable"
29487
- },
29488
- {
29489
- value: "spacious",
29490
- label: "Spacious"
29491
- }
29492
- ],
29493
- ui: { intent: "display" }
29494
- },
30198
+ defaultValue: "comfortable"
30199
+ }),
29495
30200
  { ...createImageColSizeField({
29496
30201
  id: "ratio",
29497
30202
  label: "Image column size",
@@ -29599,16 +30304,10 @@ var init_media_text = __esmMin((() => {
29599
30304
  as: "p",
29600
30305
  className: eyebrowClassName("rb-eyebrow heading-eyebrow")
29601
30306
  }, when("content.eyebrow"), bind$1("content.eyebrow")), text({ as: "h2" }, bind$1("content.title"))], when("content.title"));
29602
- const defaultTextColumn = el$1("div", {}, [styledCard([richText({ className: "rb-prose rb-max-w-none" }, bind$1("content.text"))], {
29603
- stylesFrom: "content._textCardStyles",
29604
- backgroundFrom: "content._textCardStyles.background"
29605
- }, when("content.wrapTextInCard")), richText({ className: "rb-prose rb-max-w-none" }, when("content.wrapTextInCard", { not: true }), bind$1("content.text"))]);
30307
+ const defaultTextColumn = el$1("div", {}, [styledCard([richText({ className: "rb-prose rb-max-w-none" }, bind$1("content.text"))], mediaTextCardOptions, when("content.wrapTextInCard")), richText({ className: "rb-prose rb-max-w-none" }, when("content.wrapTextInCard", { not: true }), bind$1("content.text"))]);
29606
30308
  const bioTextColumn = el$1("div", { className: "rb-flex rb-h-full rb-w-full rb-max-w-prose rb-flex-col rb-justify-center rb-gap-5" }, [
29607
30309
  copyHeading,
29608
- styledCard([richText({ className: bodyClassNameFromAlignment }, bind$1("content.text"))], {
29609
- stylesFrom: "content._textCardStyles",
29610
- backgroundFrom: "content._textCardStyles.background"
29611
- }, when("content.wrapTextInCard")),
30310
+ styledCard([richText({ className: bodyClassNameFromAlignment }, bind$1("content.text"))], mediaTextCardOptions, when("content.wrapTextInCard")),
29612
30311
  richText({ className: bodyClassNameFromAlignment }, when("content.wrapTextInCard", { not: true }), bind$1("content.text"))
29613
30312
  ]);
29614
30313
  const defaultImageCommonProps = {
@@ -29672,19 +30371,13 @@ var init_media_text = __esmMin((() => {
29672
30371
  imageWrapperClassName: "rb-w-full rb-shrink-0",
29673
30372
  textWrapperClassName: "rb-w-full rb-min-w-0 rb-flex-1 rb-self-stretch"
29674
30373
  })], whenImagesLength(0, { not: true }));
29675
- const defaultTextOnlyLayout = el$1("div", {}, [styledCard([richText({ className: "rb-prose rb-max-w-none" }, bind$1("content.text"))], {
29676
- stylesFrom: "content._textCardStyles",
29677
- backgroundFrom: "content._textCardStyles.background"
29678
- }, when("content.wrapTextInCard")), richText({ className: "rb-prose rb-max-w-none" }, when("content.wrapTextInCard", { not: true }), bind$1("content.text"))], whenImagesLength(0));
30374
+ const defaultTextOnlyLayout = el$1("div", {}, [styledCard([richText({ className: "rb-prose rb-max-w-none" }, bind$1("content.text"))], mediaTextCardOptions, when("content.wrapTextInCard")), richText({ className: "rb-prose rb-max-w-none" }, when("content.wrapTextInCard", { not: true }), bind$1("content.text"))], whenImagesLength(0));
29679
30375
  const bioTextOnlyLayout = el$1("div", { className: "rb-flex rb-w-full rb-max-w-prose rb-flex-col rb-gap-5" }, [
29680
30376
  text({
29681
30377
  as: "h2",
29682
30378
  className: titleClassNameFromAlignment
29683
30379
  }, when("content.title"), bind$1("content.title")),
29684
- styledCard([richText({ className: bodyClassNameFromAlignment }, bind$1("content.text"))], {
29685
- stylesFrom: "content._textCardStyles",
29686
- backgroundFrom: "content._textCardStyles.background"
29687
- }, when("content.wrapTextInCard")),
30380
+ styledCard([richText({ className: bodyClassNameFromAlignment }, bind$1("content.text"))], mediaTextCardOptions, when("content.wrapTextInCard")),
29688
30381
  richText({ className: bodyClassNameFromAlignment }, when("content.wrapTextInCard", { not: true }), bind$1("content.text"))
29689
30382
  ], whenImagesLength(0));
29690
30383
  const defaultInner = el$1("div", {}, [defaultImagesLayout, defaultTextOnlyLayout]);
@@ -29738,7 +30431,15 @@ var init_media_text = __esmMin((() => {
29738
30431
  }));
29739
30432
  //#endregion
29740
30433
  //#region ../blocks/src/system/blocks/appointment-booking.tsx
29741
- var appointmentBookingManifest, availabilityDataSchema, appointmentBookingBlockDefinition;
30434
+ /** Both variants sit in the same section shell; only the inner layout differs. */
30435
+ function bookingSection(children) {
30436
+ return styledSection({
30437
+ children: sectionContainer([...children], { gap: "lg" }),
30438
+ baseClass: "",
30439
+ spacing: "spacious"
30440
+ });
30441
+ }
30442
+ var bookingHeading, bookingDescription, bookingWizard, stackedLayout$1, splitCopyLayout, appointmentBookingManifest, availabilityDataSchema, appointmentBookingBlockDefinition;
29742
30443
  var init_appointment_booking = __esmMin((() => {
29743
30444
  init_builder$1();
29744
30445
  init_styledSection();
@@ -29746,6 +30447,23 @@ var init_appointment_booking = __esmMin((() => {
29746
30447
  init_boxStyles$1();
29747
30448
  init_defineBlock();
29748
30449
  init_api_bindings();
30450
+ bookingHeading = text({ as: "h2" }, bind$1("content.heading"), when("content.heading"));
30451
+ bookingDescription = richText({}, bind$1("content.description"), when("content.description"));
30452
+ bookingWizard = bookingForm(withApiBindings$1({
30453
+ portalToken: { $bind: {
30454
+ from: "$root.portalToken",
30455
+ fallback: null
30456
+ } },
30457
+ formId: { $bind: { from: "content.formId" } },
30458
+ form: { $bind: { from: "data.form" } },
30459
+ services: { $bind: { from: "data.services" } }
30460
+ }));
30461
+ stackedLayout$1 = bookingSection([
30462
+ bookingHeading,
30463
+ bookingDescription,
30464
+ bookingWizard
30465
+ ]);
30466
+ splitCopyLayout = bookingSection([el$1("div", { className: "rb-booking-split rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-5 rb-items-start" }, [el$1("div", { className: "rb-booking-split-copy rb-lg-col-span-2" }, [stack({ gap: "md" }, [bookingHeading, bookingDescription])]), el$1("div", { className: "rb-booking-split-form rb-lg-col-span-3 rb-min-w-0" }, [bookingWizard])])]);
29749
30467
  appointmentBookingManifest = createBlockManifest({
29750
30468
  id: "block.appointment-booking",
29751
30469
  version: "2.0.0",
@@ -29806,23 +30524,24 @@ var init_appointment_booking = __esmMin((() => {
29806
30524
  "reservation"
29807
30525
  ],
29808
30526
  icon: "Calendar",
29809
- layout: [styledSection({
29810
- children: sectionContainer([
29811
- text({ as: "h2" }, bind$1("content.heading"), when("content.heading")),
29812
- richText({}, bind$1("content.description"), when("content.description")),
29813
- bookingForm(withApiBindings$1({
29814
- portalToken: { $bind: {
29815
- from: "$root.portalToken",
29816
- fallback: null
29817
- } },
29818
- formId: { $bind: { from: "content.formId" } },
29819
- form: { $bind: { from: "data.form" } },
29820
- services: { $bind: { from: "data.services" } }
29821
- }))
29822
- ], { gap: "lg" }),
29823
- baseClass: "",
29824
- spacing: "spacious"
29825
- })]
30527
+ layout: [stackedLayout$1],
30528
+ variants: {
30529
+ default: stackedLayout$1,
30530
+ "split-copy": splitCopyLayout
30531
+ },
30532
+ defaultVariant: "default",
30533
+ variantOptions: {
30534
+ default: {
30535
+ label: "Stacked",
30536
+ description: "Heading and description above the booking form.",
30537
+ icon: "Rows2"
30538
+ },
30539
+ "split-copy": {
30540
+ label: "Split copy",
30541
+ description: "Pairs the wizard with your heading and intro copy, side by side; stacks on smaller screens.",
30542
+ icon: "Columns2"
30543
+ }
30544
+ }
29826
30545
  });
29827
30546
  availabilityDataSchema = z.object({ slots: z.array(z.object({
29828
30547
  startAt: z.string(),
@@ -30274,7 +30993,7 @@ var init_schemas$1 = __esmMin((() => {
30274
30993
  publicCourseSchema = publicWholeSeriesOfferingSchema;
30275
30994
  publicWholeSeriesOfferingsArraySchema = z.array(publicWholeSeriesOfferingSchema);
30276
30995
  publicCoursesArraySchema = publicWholeSeriesOfferingsArraySchema;
30277
- })), eventPresetSchema, eventScheduleScopeSchema$2, publicEventRecurrenceSchema, eventDestinationModeSchema, publicEventDestinationSchema, eventVenueSchema, eventCategorySchema, accessRestrictionSchema, publicCoursePriceDisplaySchema, publicEventTicketTypePriceDisplaySchema, publicEventAttendanceModeSchema, publicEventAttendanceModeAvailabilitySchema, publicEventTicketTypeAvailabilitySchema, publicEventTicketTypeSchema, publicEventPricingSchema, publicTeamMemberSummarySchema, publicEventSchema, publicEventsArraySchema;
30996
+ })), eventPresetSchema, eventScheduleScopeSchema$2, publicEventRecurrenceSchema, eventDestinationModeSchema, publicEventDestinationSchema, eventVenueSchema, eventCategorySchema, accessRestrictionSchema, freePriceDisplaySchema, exactPriceDisplaySchema, fromPriceDisplaySchema, unavailablePriceDisplaySchema, rangePriceDisplaySchema, mixedPriceDisplaySchema, publicCoursePriceDisplaySchema, publicEventTicketTypePriceDisplaySchema, publicEventAttendanceModeSchema, publicEventAttendanceModeAvailabilitySchema, publicEventTicketTypeAvailabilitySchema, publicEventTicketTypeSchema, publicEventPricingSchema, publicTeamMemberSummarySchema, publicEventBookingAvailabilitySchema, publicEventSchema, publicEventsArraySchema;
30278
30997
  var init_schemas = __esmMin((() => {
30279
30998
  init_media$1();
30280
30999
  init_richTextSchema();
@@ -30284,6 +31003,7 @@ var init_schemas = __esmMin((() => {
30284
31003
  "event",
30285
31004
  "class",
30286
31005
  "course",
31006
+ "term",
30287
31007
  "workshop",
30288
31008
  "retreat",
30289
31009
  "performance"
@@ -30333,57 +31053,49 @@ var init_schemas = __esmMin((() => {
30333
31053
  ]);
30334
31054
  accessRestrictionSchema = z.enum(["none", "category"]);
30335
31055
  z.enum(["single", "ticket_types"]);
31056
+ freePriceDisplaySchema = z.object({
31057
+ kind: z.literal("free"),
31058
+ currency: z.string()
31059
+ });
31060
+ exactPriceDisplaySchema = z.object({
31061
+ kind: z.literal("exact"),
31062
+ amount: z.number(),
31063
+ currency: z.string()
31064
+ });
31065
+ fromPriceDisplaySchema = z.object({
31066
+ kind: z.literal("from"),
31067
+ amount: z.number(),
31068
+ currency: z.string()
31069
+ });
31070
+ unavailablePriceDisplaySchema = z.object({
31071
+ kind: z.literal("unavailable"),
31072
+ currency: z.string()
31073
+ });
31074
+ rangePriceDisplaySchema = z.object({
31075
+ kind: z.literal("range"),
31076
+ minAmount: z.number(),
31077
+ maxAmount: z.number(),
31078
+ currency: z.string()
31079
+ });
31080
+ mixedPriceDisplaySchema = z.object({
31081
+ kind: z.literal("mixed"),
31082
+ paidFromAmount: z.number(),
31083
+ paidToAmount: z.number(),
31084
+ currency: z.string()
31085
+ });
30336
31086
  publicCoursePriceDisplaySchema = z.discriminatedUnion("kind", [
30337
- z.object({
30338
- kind: z.literal("free"),
30339
- currency: z.string()
30340
- }),
30341
- z.object({
30342
- kind: z.literal("exact"),
30343
- amount: z.number(),
30344
- currency: z.string()
30345
- }),
30346
- z.object({
30347
- kind: z.literal("from"),
30348
- amount: z.number(),
30349
- currency: z.string()
30350
- }),
30351
- z.object({
30352
- kind: z.literal("unavailable"),
30353
- currency: z.string()
30354
- })
31087
+ freePriceDisplaySchema,
31088
+ exactPriceDisplaySchema,
31089
+ fromPriceDisplaySchema,
31090
+ unavailablePriceDisplaySchema
30355
31091
  ]);
30356
31092
  z.discriminatedUnion("kind", [
30357
- z.object({
30358
- kind: z.literal("free"),
30359
- currency: z.string()
30360
- }),
30361
- z.object({
30362
- kind: z.literal("exact"),
30363
- amount: z.number(),
30364
- currency: z.string()
30365
- }),
30366
- z.object({
30367
- kind: z.literal("from"),
30368
- amount: z.number(),
30369
- currency: z.string()
30370
- }),
30371
- z.object({
30372
- kind: z.literal("range"),
30373
- minAmount: z.number(),
30374
- maxAmount: z.number(),
30375
- currency: z.string()
30376
- }),
30377
- z.object({
30378
- kind: z.literal("mixed"),
30379
- paidFromAmount: z.number(),
30380
- paidToAmount: z.number(),
30381
- currency: z.string()
30382
- }),
30383
- z.object({
30384
- kind: z.literal("unavailable"),
30385
- currency: z.string()
30386
- }),
31093
+ freePriceDisplaySchema,
31094
+ exactPriceDisplaySchema,
31095
+ fromPriceDisplaySchema,
31096
+ rangePriceDisplaySchema,
31097
+ mixedPriceDisplaySchema,
31098
+ unavailablePriceDisplaySchema,
30387
31099
  z.object({
30388
31100
  kind: z.literal("external"),
30389
31101
  label: z.string()
@@ -30394,36 +31106,12 @@ var init_schemas = __esmMin((() => {
30394
31106
  })
30395
31107
  ]);
30396
31108
  publicEventTicketTypePriceDisplaySchema = z.union([
30397
- z.object({
30398
- kind: z.literal("free"),
30399
- currency: z.string()
30400
- }),
30401
- z.object({
30402
- kind: z.literal("exact"),
30403
- amount: z.number(),
30404
- currency: z.string()
30405
- }),
30406
- z.object({
30407
- kind: z.literal("from"),
30408
- amount: z.number(),
30409
- currency: z.string()
30410
- }),
30411
- z.object({
30412
- kind: z.literal("range"),
30413
- minAmount: z.number(),
30414
- maxAmount: z.number(),
30415
- currency: z.string()
30416
- }),
30417
- z.object({
30418
- kind: z.literal("mixed"),
30419
- paidFromAmount: z.number(),
30420
- paidToAmount: z.number(),
30421
- currency: z.string()
30422
- }),
30423
- z.object({
30424
- kind: z.literal("unavailable"),
30425
- currency: z.string()
30426
- })
31109
+ freePriceDisplaySchema,
31110
+ exactPriceDisplaySchema,
31111
+ fromPriceDisplaySchema,
31112
+ rangePriceDisplaySchema,
31113
+ mixedPriceDisplaySchema,
31114
+ unavailablePriceDisplaySchema
30427
31115
  ]);
30428
31116
  publicEventAttendanceModeSchema = z.enum(["in_person", "online"]);
30429
31117
  publicEventAttendanceModeAvailabilitySchema = z.object({
@@ -30537,6 +31225,22 @@ var init_schemas = __esmMin((() => {
30537
31225
  summary: z.string().nullable(),
30538
31226
  profilePath: z.string().nullable()
30539
31227
  });
31228
+ publicEventBookingAvailabilitySchema = z.discriminatedUnion("kind", [z.object({ kind: z.literal("open") }), z.object({
31229
+ kind: z.literal("closed"),
31230
+ reason: z.enum([
31231
+ "occurrence_cancelled",
31232
+ "occurrence_completed",
31233
+ "series_draft",
31234
+ "series_cancelled",
31235
+ "series_completed",
31236
+ "series_archived",
31237
+ "parent_archived",
31238
+ "parent_inconsistent",
31239
+ "not_public",
31240
+ "already_started",
31241
+ "enrollment_closed"
31242
+ ])
31243
+ })]);
30540
31244
  publicEventSchema = z.object({
30541
31245
  bookingScope: z.enum(["single_occurrence", "whole_series"]),
30542
31246
  eventPreset: eventPresetSchema.optional(),
@@ -30558,6 +31262,7 @@ var init_schemas = __esmMin((() => {
30558
31262
  path: z.string().nullable(),
30559
31263
  destination: publicEventDestinationSchema,
30560
31264
  requiresRegistration: z.boolean(),
31265
+ bookingAvailability: publicEventBookingAvailabilitySchema,
30561
31266
  deliveryMode: z.enum([
30562
31267
  "in_person",
30563
31268
  "online",
@@ -30576,6 +31281,8 @@ var init_schemas = __esmMin((() => {
30576
31281
  status: z.enum([
30577
31282
  "active",
30578
31283
  "draft",
31284
+ "cancelled",
31285
+ "completed",
30579
31286
  "archived"
30580
31287
  ]).optional(),
30581
31288
  timeZone: z.string(),
@@ -30783,6 +31490,7 @@ var init_filtering = __esmMin((() => {
30783
31490
  init_normalizeIds();
30784
31491
  eventSurfacePresetValues = [
30785
31492
  "course",
31493
+ "term",
30786
31494
  "class",
30787
31495
  "workshop",
30788
31496
  "retreat",
@@ -30928,6 +31636,7 @@ var init_eventScope = __esmMin((() => {
30928
31636
  unsupportedEventRegistrationPageSurfaceSubjectReasons = [
30929
31637
  "unsupportedSubject",
30930
31638
  "invalidEventSeriesId",
31639
+ "invalidEventSeriesBookingScope",
30931
31640
  "invalidEventOfferingId"
30932
31641
  ];
30933
31642
  unsupportedEventRegistrationPageSurfaceSubjectSchema = z.object({
@@ -31709,6 +32418,10 @@ var init_event_registration = __esmMin((() => {
31709
32418
  },
31710
32419
  wholeSeriesOffering: {
31711
32420
  endpoint: "getPublicWholeSeriesOffering",
32421
+ when: { $bind: {
32422
+ from: "$root.subject.isWholeSeriesBooking",
32423
+ fallback: false
32424
+ } },
31712
32425
  params: {
31713
32426
  siteId: { $bind: { from: "$root.siteId" } },
31714
32427
  eventSeriesId: { $bind: { from: "$root.subject.eventSeriesId" } },
@@ -32599,7 +33312,7 @@ function getContainerClass(layout, columns) {
32599
33312
  if (layout === "compact") return "event-listing-compact-container rb-flex rb-flex-col";
32600
33313
  if (layout === "stack") return "rb-flex rb-flex-col rb-gap-6";
32601
33314
  const fallbackColumnClass = COLUMN_CLASSES["3"] ?? "";
32602
- return `rb-grid rb-items-stretch rb-grid-cols-1 rb-gap-6 ${COLUMN_CLASSES[columns] ?? fallbackColumnClass}`;
33315
+ return `rb-grid rb-items-stretch rb-gap-6 ${COLUMN_CLASSES[columns] ?? fallbackColumnClass}`;
32603
33316
  }
32604
33317
  /**
32605
33318
  * Get card orientation based on layout mode
@@ -32615,10 +33328,11 @@ function getCardOrientation(layout) {
32615
33328
  }
32616
33329
  var COLUMN_CLASSES;
32617
33330
  var init_utils$1 = __esmMin((() => {
33331
+ init_Grid();
32618
33332
  COLUMN_CLASSES = {
32619
- "2": "rb-sm-grid-cols-2",
32620
- "3": "rb-sm-grid-cols-2 rb-lg-grid-cols-3",
32621
- "4": "rb-sm-grid-cols-2 rb-lg-grid-cols-3 rb-xl-grid-cols-4"
33333
+ "2": gridUserColumnClasses(2),
33334
+ "3": gridUserColumnClasses(3),
33335
+ "4": gridUserColumnClasses(4)
32622
33336
  };
32623
33337
  }));
32624
33338
  //#endregion
@@ -36659,8 +37373,8 @@ var init_audio_player = __esmMin((() => {
36659
37373
  init_fragments$1();
36660
37374
  init_colorStyles();
36661
37375
  audioPlayerLayout = styledSection({
36662
- children: stack({ className: "rb-container rb-mx-auto rb-max-w-3xl" }, [el$1("div", { className: "card-surface rb-overflow-hidden" }, [media({
36663
- className: "rb-aspect-video rb-w-full rb-object-cover",
37376
+ children: stack({ className: "rb-container rb-mx-auto rb-max-w-3xl" }, [el$1("div", { className: "card-role-default" }, [media({
37377
+ className: "card-media rb-aspect-video rb-w-full rb-object-cover",
36664
37378
  size: {
36665
37379
  width: 960,
36666
37380
  height: 540,
@@ -39084,17 +39798,35 @@ var init_newsletter_signup = __esmMin((() => {
39084
39798
  }));
39085
39799
  //#endregion
39086
39800
  //#region ../blocks/src/system/blocks/team-members.ts
39087
- var ITEM_NAME, teamMemberPhotoSchema, teamMemberDataSchema, teamMembersDataSchema, dynamicSourceWhen, manualSourceWhen, headingNode, wrapVariant, teamMemberStackLayout, gridVariant, stackVariant, teamMembersManifest, teamMembersBlockDefinition;
39801
+ var ITEM_NAME, memberCardClassName, memberPhotoClassName, teamMemberPhotoSchema, teamMemberDataSchema, teamMembersDataSchema, dynamicSourceWhen, manualSourceWhen, headingNode, wrapVariant, teamMemberStackLayout, manualGridMembersNode, dynamicGridMembersNode, gridVariant, stackVariant, teamMembersManifest, teamMembersBlockDefinition;
39088
39802
  var init_team_members = __esmMin((() => {
39089
39803
  init_fragments();
39090
39804
  init_schema();
39805
+ init_gridLayout();
39091
39806
  init_defineBlock();
39092
39807
  init_builder$1();
39093
39808
  init_fragments$1();
39809
+ init_boxStyles$1();
39094
39810
  init_fragmentCollection();
39095
39811
  init_imageLayout();
39096
39812
  init_media$1();
39097
39813
  ITEM_NAME = "member";
39814
+ memberCardClassName = { $bind: {
39815
+ from: "content._cardStyles",
39816
+ transforms: [{
39817
+ id: "boxStyles.all",
39818
+ options: {
39819
+ axis: "all",
39820
+ baseClass: ""
39821
+ }
39822
+ }],
39823
+ fallback: ""
39824
+ } };
39825
+ memberPhotoClassName = (baseClass) => cardRoleChildClass({
39826
+ emit: "media",
39827
+ baseClass,
39828
+ stylesFrom: "content._cardStyles"
39829
+ });
39098
39830
  teamMemberPhotoSchema = mediaSchema.refine((media) => media.type === "image", { message: "Team member photos must be image media" }).nullable();
39099
39831
  teamMemberDataSchema = z.object({
39100
39832
  _type: z.literal("teamMember"),
@@ -39150,7 +39882,7 @@ var init_team_members = __esmMin((() => {
39150
39882
  baseClass: "",
39151
39883
  spacing: "comfortable"
39152
39884
  });
39153
- teamMemberStackLayout = el$1("div", { className: "rb-team-member rb-team-member--stack rb-flex rb-flex-col rb-md-flex-row rb-items-start rb-gap-3" }, [el$1("div", { className: "rb-team-member-photo-col rb-w-full rb-shrink-0" }, [el$1("div", { className: "rb-team-member-photo-wrap rb-w-full" }, [media({
39885
+ teamMemberStackLayout = el$1("div", { className: "rb-team-member rb-team-member--stack rb-flex rb-flex-col rb-md-flex-row rb-items-start rb-gap-3" }, [el$1("div", { className: "rb-team-member-photo-col rb-w-full rb-shrink-0" }, [el$1("div", { className: memberPhotoClassName("rb-team-member-photo-wrap rb-w-full") }, [media({
39154
39886
  className: "rb-team-member-photo rb-w-full rb-object-cover",
39155
39887
  style: { aspectRatio: "1 / 1" },
39156
39888
  size: {
@@ -39174,27 +39906,27 @@ var init_team_members = __esmMin((() => {
39174
39906
  }, when("role"), bind$1("role")),
39175
39907
  richText({ className: "rb-prose rb-max-w-none" }, when("bio"), bind$1("bio"))
39176
39908
  ])]);
39177
- gridVariant = wrapVariant(el$1("grid", {
39178
- cols: { $bind: {
39179
- from: "content.columns",
39180
- fallback: 3,
39181
- coerce: "number"
39182
- } },
39183
- gap: { $bind: {
39184
- from: "content.gap",
39185
- fallback: "medium"
39186
- } }
39187
- }, [when("content.source", manualSourceWhen)(repeaterFragmentLayout({
39909
+ manualGridMembersNode = when("content.source", manualSourceWhen)(repeaterFragmentLayout({
39188
39910
  collectionPath: "content.members",
39189
39911
  itemName: ITEM_NAME,
39190
39912
  fragments: { teamMember: teamMemberFragment },
39191
- itemGap: "sm"
39192
- })), when("content.source", dynamicSourceWhen)(repeaterFragmentLayout({
39913
+ itemGap: "sm",
39914
+ itemClassName: memberCardClassName
39915
+ }));
39916
+ dynamicGridMembersNode = when("content.source", dynamicSourceWhen)(repeaterFragmentLayout({
39193
39917
  collectionPath: "data.members",
39194
39918
  itemName: ITEM_NAME,
39195
39919
  fragments: { teamMember: teamMemberFragment },
39196
- itemGap: "sm"
39197
- }))]));
39920
+ itemGap: "sm",
39921
+ itemClassName: memberCardClassName
39922
+ }));
39923
+ gridVariant = wrapVariant(el$1("grid", {
39924
+ userColumns: userColumnsGridBinding(),
39925
+ gap: { $bind: {
39926
+ from: "content.gap",
39927
+ fallback: "medium"
39928
+ } }
39929
+ }, [manualGridMembersNode, dynamicGridMembersNode]));
39198
39930
  stackVariant = wrapVariant({
39199
39931
  type: "stack",
39200
39932
  props: { gap: { $bind: {
@@ -39206,13 +39938,15 @@ var init_team_members = __esmMin((() => {
39206
39938
  itemName: ITEM_NAME,
39207
39939
  fragments: { teamMember: teamMemberFragment },
39208
39940
  layoutOverrides: { teamMember: teamMemberStackLayout },
39209
- itemGap: "sm"
39941
+ itemGap: "sm",
39942
+ itemClassName: memberCardClassName
39210
39943
  })), when("content.source", dynamicSourceWhen)(repeaterFragmentLayout({
39211
39944
  collectionPath: "data.members",
39212
39945
  itemName: ITEM_NAME,
39213
39946
  fragments: { teamMember: teamMemberFragment },
39214
39947
  layoutOverrides: { teamMember: teamMemberStackLayout },
39215
- itemGap: "sm"
39948
+ itemGap: "sm",
39949
+ itemClassName: memberCardClassName
39216
39950
  }))]
39217
39951
  });
39218
39952
  teamMembersManifest = createBlockManifest({
@@ -39361,66 +40095,11 @@ var init_team_members = __esmMin((() => {
39361
40095
  }
39362
40096
  }
39363
40097
  }),
39364
- parseFieldDefinition({
39365
- id: "columns",
39366
- type: "select",
39367
- label: "Columns",
39368
- defaultValue: "3",
39369
- options: [
39370
- {
39371
- value: "2",
39372
- label: "2 columns"
39373
- },
39374
- {
39375
- value: "3",
39376
- label: "3 columns"
39377
- },
39378
- {
39379
- value: "4",
39380
- label: "4 columns"
39381
- }
39382
- ],
39383
- ui: {
39384
- intent: "display",
39385
- visibleWhen: {
39386
- field: "variant",
39387
- equals: "grid"
39388
- }
39389
- }
39390
- }),
39391
- parseFieldDefinition({
39392
- id: "gap",
39393
- type: "select",
39394
- label: "Gap",
39395
- defaultValue: "medium",
39396
- options: [
39397
- {
39398
- value: "none",
39399
- label: "None"
39400
- },
39401
- {
39402
- value: "compact",
39403
- label: "Compact"
39404
- },
39405
- {
39406
- value: "cozy",
39407
- label: "Cozy"
39408
- },
39409
- {
39410
- value: "medium",
39411
- label: "Medium"
39412
- },
39413
- {
39414
- value: "comfortable",
39415
- label: "Comfortable"
39416
- },
39417
- {
39418
- value: "spacious",
39419
- label: "Spacious"
39420
- }
39421
- ],
39422
- ui: { intent: "display" }
39423
- }),
40098
+ columnsSelectField({ visibleWhen: {
40099
+ field: "variant",
40100
+ equals: "grid"
40101
+ } }),
40102
+ gapSelectField(),
39424
40103
  {
39425
40104
  ...fragmentsToRepeaterField("members", "Team members", { teamMember: teamMemberFragment }, {
39426
40105
  minItems: 0,
@@ -39436,7 +40115,11 @@ var init_team_members = __esmMin((() => {
39436
40115
  equals: "manual"
39437
40116
  }
39438
40117
  }
39439
- }
40118
+ },
40119
+ cardStylesField({
40120
+ id: "_cardStyles",
40121
+ label: "Member card styles"
40122
+ })
39440
40123
  ],
39441
40124
  layout: gridVariant,
39442
40125
  variants: {
@@ -39870,14 +40553,14 @@ function sectionOnly() {
39870
40553
  return declareBlockDesignCapability({
39871
40554
  sectionSurfaces: "supported",
39872
40555
  contentFrames: ["plain"],
39873
- itemSurfaces: "unsupported"
40556
+ cardRoles: "unsupported"
39874
40557
  });
39875
40558
  }
39876
40559
  function panelCapable() {
39877
40560
  return declareBlockDesignCapability({
39878
40561
  sectionSurfaces: "supported",
39879
40562
  contentFrames: ["plain", "panel"],
39880
- itemSurfaces: "unsupported"
40563
+ cardRoles: "unsupported"
39881
40564
  });
39882
40565
  }
39883
40566
  function heroCapable() {
@@ -39886,7 +40569,7 @@ function heroCapable() {
39886
40569
  sectionSurfaces: "supported",
39887
40570
  richBackgrounds: "supported",
39888
40571
  contentFrames: ["plain", "panel"],
39889
- itemSurfaces: "unsupported",
40572
+ cardRoles: "unsupported",
39890
40573
  sectionHeights: heroSectionHeights,
39891
40574
  imageSurfaceTreatments: heroImageSurfaceTreatments,
39892
40575
  imageSurfaceMotions: heroImageSurfaceMotions
@@ -39896,14 +40579,14 @@ function plainItemsCapable() {
39896
40579
  return declareBlockDesignCapability({
39897
40580
  sectionSurfaces: "supported",
39898
40581
  contentFrames: ["plain"],
39899
- itemSurfaces: "supported"
40582
+ cardRoles: "supported"
39900
40583
  });
39901
40584
  }
39902
40585
  function panelAndItemsCapable() {
39903
40586
  return declareBlockDesignCapability({
39904
40587
  sectionSurfaces: "supported",
39905
40588
  contentFrames: ["plain", "panel"],
39906
- itemSurfaces: "supported"
40589
+ cardRoles: "supported"
39907
40590
  });
39908
40591
  }
39909
40592
  function mediaPanelCapable() {
@@ -39914,7 +40597,7 @@ function mediaPanelCapable() {
39914
40597
  "panel",
39915
40598
  "flush-panel"
39916
40599
  ],
39917
- itemSurfaces: "unsupported"
40600
+ cardRoles: "supported"
39918
40601
  });
39919
40602
  }
39920
40603
  function scheduleDetailsCapable() {
@@ -39922,7 +40605,7 @@ function scheduleDetailsCapable() {
39922
40605
  looks: "supported",
39923
40606
  sectionSurfaces: "supported",
39924
40607
  contentFrames: ["plain"],
39925
- itemSurfaces: "unsupported",
40608
+ cardRoles: "unsupported",
39926
40609
  tileTreatments: scheduleTileTreatments
39927
40610
  });
39928
40611
  }
@@ -39931,7 +40614,7 @@ function eventListCapable() {
39931
40614
  looks: "supported",
39932
40615
  sectionSurfaces: "supported",
39933
40616
  contentFrames: ["plain", "panel"],
39934
- itemSurfaces: "unsupported",
40617
+ cardRoles: "unsupported",
39935
40618
  eventListTreatments
39936
40619
  });
39937
40620
  }
@@ -39940,7 +40623,7 @@ function offeringsPreviewCapable() {
39940
40623
  looks: "supported",
39941
40624
  sectionSurfaces: "supported",
39942
40625
  contentFrames: ["plain"],
39943
- itemSurfaces: "supported"
40626
+ cardRoles: "supported"
39944
40627
  });
39945
40628
  }
39946
40629
  function defaultBoundaryBias(visualWeight) {
@@ -40203,7 +40886,7 @@ var init_blocks$1 = __esmMin((() => {
40203
40886
  looks: "supported",
40204
40887
  sectionSurfaces: "supported",
40205
40888
  contentFrames: ["plain", "panel"],
40206
- itemSurfaces: "unsupported",
40889
+ cardRoles: "unsupported",
40207
40890
  compositions: {
40208
40891
  kind: "intro",
40209
40892
  treatments: ["editorial-statement", "portrait-bio"]
@@ -40330,7 +41013,7 @@ var init_blocks$1 = __esmMin((() => {
40330
41013
  withDesignCapability("block.faq", faqBlockDefinition, withLookCapability(withEyebrowCapability(declareBlockDesignCapability({
40331
41014
  sectionSurfaces: "supported",
40332
41015
  contentFrames: ["plain", "panel"],
40333
- itemSurfaces: "supported",
41016
+ cardRoles: "supported",
40334
41017
  accordionIconSets: [
40335
41018
  "plus",
40336
41019
  "chevron",
@@ -40374,14 +41057,11 @@ var init_blocks$1 = __esmMin((() => {
40374
41057
  looks: "supported",
40375
41058
  sectionSurfaces: "supported",
40376
41059
  contentFrames: ["plain", "panel"],
40377
- itemSurfaces: "supported",
40378
- testimonialCardTreatments: [
40379
- "default",
40380
- "statement",
40381
- "non-carded",
40382
- "accent-quote",
40383
- "editorial-serif-quote"
40384
- ],
41060
+ cardRoles: "supported",
41061
+ compositions: {
41062
+ kind: "testimonials",
41063
+ treatments: ["open-editorial"]
41064
+ },
40385
41065
  headingDecorationCapability: {
40386
41066
  kind: "supported",
40387
41067
  families: ["short-center-rule"]
@@ -40441,7 +41121,7 @@ var init_blocks$1 = __esmMin((() => {
40441
41121
  looks: "supported",
40442
41122
  sectionSurfaces: "supported",
40443
41123
  contentFrames: ["plain", "panel"],
40444
- itemSurfaces: "supported",
41124
+ cardRoles: "supported",
40445
41125
  compositions: {
40446
41126
  kind: "feature-cards",
40447
41127
  treatments: ["asymmetric-emphasis", "framed-programme"]
@@ -40483,12 +41163,16 @@ var init_blocks$1 = __esmMin((() => {
40483
41163
  bias: "soft"
40484
41164
  })]
40485
41165
  })),
40486
- withDesignCapability("block.appointment-booking", appointmentBookingBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
41166
+ withDesignCapability("block.appointment-booking", appointmentBookingBlockDefinition, withLookCapability(sectionOnly()), defineBlockDesignMetadata({
40487
41167
  flow: conversionFlow,
40488
41168
  layoutProfiles: [layoutProfile({
40489
41169
  variantKey: "default",
40490
41170
  family: "form",
40491
41171
  weight: "standard"
41172
+ }), layoutProfile({
41173
+ variantKey: "split-copy",
41174
+ family: "split",
41175
+ weight: "standard"
40492
41176
  })]
40493
41177
  })),
40494
41178
  withDesignCapability("block.weekly-slot-availability", weeklySlotAvailabilityBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
@@ -40593,7 +41277,11 @@ var init_blocks$1 = __esmMin((() => {
40593
41277
  weight: "standard"
40594
41278
  })]
40595
41279
  })),
40596
- withDesignCapability("block.team-members", teamMembersBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
41280
+ withDesignCapability("block.team-members", teamMembersBlockDefinition, declareBlockDesignCapability({
41281
+ sectionSurfaces: "supported",
41282
+ contentFrames: ["plain"],
41283
+ cardRoles: "supported"
41284
+ }), defineBlockDesignMetadata({
40597
41285
  flow: proofFlow,
40598
41286
  layoutProfiles: [layoutProfile({
40599
41287
  variantKey: "grid",
@@ -42345,6 +43033,179 @@ var init_request = __esmMin((() => {
42345
43033
  init_endpoints();
42346
43034
  init_url();
42347
43035
  init_envelope();
43036
+ }));
43037
+ //#endregion
43038
+ //#region ../api/src/accountApi.ts
43039
+ function brandedIdSchema(parse, label) {
43040
+ return z.string().transform((value, context) => {
43041
+ const parsed = parse(value);
43042
+ if (parsed.ok) return parsed.value;
43043
+ context.addIssue({
43044
+ code: "custom",
43045
+ message: `Expected a valid ${label}`
43046
+ });
43047
+ return z.NEVER;
43048
+ });
43049
+ }
43050
+ var siteRoleSchema, linkCapabilitySchema, accountSiteBaseSchema, managedSiteSchema, headlessSiteSchemas, siteSchema, apiKeyIdSchema, standardKeyIdsSchema, previewKeyIdsSchema, liveCredentialSchema, managementCredentialSchema, previewCredentialSchema;
43051
+ var init_accountApi = __esmMin((() => {
43052
+ init_src$4();
43053
+ init_envelope();
43054
+ init_request();
43055
+ init_accountEndpoints();
43056
+ siteRoleSchema = z.enum([
43057
+ "owner",
43058
+ "administrator",
43059
+ "editor",
43060
+ "team_member"
43061
+ ]);
43062
+ linkCapabilitySchema = z.discriminatedUnion("tag", [z.object({ tag: z.literal("linkable") }), z.object({
43063
+ tag: z.literal("insufficient_role"),
43064
+ requiredRole: siteRoleSchema
43065
+ })]);
43066
+ accountSiteBaseSchema = z.object({
43067
+ id: brandedIdSchema(parseSiteId, "site id"),
43068
+ title: z.string(),
43069
+ slug: z.string().min(1),
43070
+ createdAt: accountSiteTimestampSchema.nullable(),
43071
+ role: siteRoleSchema
43072
+ });
43073
+ managedSiteSchema = accountSiteBaseSchema.extend({
43074
+ deploymentMode: z.literal("managed"),
43075
+ linkCapability: z.object({
43076
+ tag: z.literal("ineligible_deployment_mode"),
43077
+ deploymentMode: z.literal("managed")
43078
+ })
43079
+ });
43080
+ headlessSiteSchemas = [accountSiteBaseSchema.extend({
43081
+ deploymentMode: z.literal("headless_cms"),
43082
+ linkCapability: linkCapabilitySchema
43083
+ }), accountSiteBaseSchema.extend({
43084
+ deploymentMode: z.literal("headless_full"),
43085
+ linkCapability: linkCapabilitySchema
43086
+ })];
43087
+ z.object({
43088
+ userId: brandedIdSchema(parseUserId, "userId"),
43089
+ email: z.string().email().nullable(),
43090
+ displayName: z.string().min(1).nullable()
43091
+ });
43092
+ siteSchema = z.discriminatedUnion("deploymentMode", [managedSiteSchema, ...headlessSiteSchemas]);
43093
+ z.object({
43094
+ sites: z.array(siteSchema),
43095
+ nextCursor: z.string().min(1).max(ACCOUNT_SITE_CURSOR_MAX_LENGTH).nullable()
43096
+ });
43097
+ z.object({
43098
+ id: brandedIdSchema(parseSiteId, "site id"),
43099
+ title: z.string(),
43100
+ slug: z.string().min(1)
43101
+ });
43102
+ apiKeyIdSchema = brandedIdSchema(parseApiKeyId, "API key id");
43103
+ standardKeyIdsSchema = z.object({
43104
+ live: apiKeyIdSchema.optional(),
43105
+ management: apiKeyIdSchema.optional()
43106
+ }).strict();
43107
+ previewKeyIdsSchema = z.object({
43108
+ live: apiKeyIdSchema.optional(),
43109
+ management: apiKeyIdSchema.optional(),
43110
+ preview: apiKeyIdSchema.optional()
43111
+ }).strict();
43112
+ liveCredentialSchema = z.object({
43113
+ key: z.string().regex(/^bld_live_sk_.+$/).transform((value) => createSecret("content-key", value)),
43114
+ keyId: apiKeyIdSchema
43115
+ }).strict();
43116
+ managementCredentialSchema = z.object({
43117
+ key: z.string().transform((value, context) => {
43118
+ const parsed = parseManagementKey(value);
43119
+ if (!parsed.ok) {
43120
+ context.addIssue({
43121
+ code: "custom",
43122
+ message: "Expected a valid management key"
43123
+ });
43124
+ return z.NEVER;
43125
+ }
43126
+ return parsed.value;
43127
+ }),
43128
+ keyId: apiKeyIdSchema
43129
+ }).strict();
43130
+ previewCredentialSchema = z.object({
43131
+ key: z.string().regex(/^bld_preview_sk_.+$/).transform((value) => createSecret("preview-key", value)),
43132
+ keyId: apiKeyIdSchema
43133
+ }).strict();
43134
+ z.discriminatedUnion("operation", [
43135
+ z.object({
43136
+ operation: z.literal("issue_standard"),
43137
+ siteId: brandedIdSchema(parseSiteId, "site id"),
43138
+ operationId: z.string().uuid(),
43139
+ revokedAbandonedKeyIds: standardKeyIdsSchema,
43140
+ credentials: z.object({
43141
+ live: liveCredentialSchema,
43142
+ management: managementCredentialSchema
43143
+ }).strict()
43144
+ }).strict(),
43145
+ z.object({
43146
+ operation: z.literal("issue_with_preview"),
43147
+ siteId: brandedIdSchema(parseSiteId, "site id"),
43148
+ operationId: z.string().uuid(),
43149
+ revokedAbandonedKeyIds: previewKeyIdsSchema,
43150
+ credentials: z.object({
43151
+ live: liveCredentialSchema,
43152
+ management: managementCredentialSchema,
43153
+ preview: previewCredentialSchema
43154
+ }).strict()
43155
+ }).strict(),
43156
+ z.object({
43157
+ operation: z.literal("recovery_standard"),
43158
+ siteId: brandedIdSchema(parseSiteId, "site id"),
43159
+ operationId: z.string().uuid(),
43160
+ issuedKeyIds: standardKeyIdsSchema,
43161
+ revokedAbandonedKeyIds: standardKeyIdsSchema,
43162
+ remainingAbandonedKeyIds: standardKeyIdsSchema,
43163
+ failureTag: z.enum(["ACCOUNT_CREDENTIALS_ISSUANCE_FAILED", "ACCOUNT_CREDENTIALS_RECOVERY_REVOKE_FAILED"])
43164
+ }).strict(),
43165
+ z.object({
43166
+ operation: z.literal("recovery_with_preview"),
43167
+ siteId: brandedIdSchema(parseSiteId, "site id"),
43168
+ operationId: z.string().uuid(),
43169
+ issuedKeyIds: previewKeyIdsSchema,
43170
+ revokedAbandonedKeyIds: previewKeyIdsSchema,
43171
+ remainingAbandonedKeyIds: previewKeyIdsSchema,
43172
+ failureTag: z.enum(["ACCOUNT_CREDENTIALS_ISSUANCE_FAILED", "ACCOUNT_CREDENTIALS_RECOVERY_REVOKE_FAILED"])
43173
+ }).strict(),
43174
+ z.object({
43175
+ operation: z.literal("revalidate_standard"),
43176
+ siteId: brandedIdSchema(parseSiteId, "site id"),
43177
+ operationId: z.string().uuid(),
43178
+ checks: z.object({
43179
+ live: z.object({
43180
+ keyId: apiKeyIdSchema,
43181
+ status: z.literal("active")
43182
+ }).strict(),
43183
+ management: z.object({
43184
+ keyId: apiKeyIdSchema,
43185
+ status: z.literal("active")
43186
+ }).strict()
43187
+ }).strict()
43188
+ }).strict(),
43189
+ z.object({
43190
+ operation: z.literal("revalidate_with_preview"),
43191
+ siteId: brandedIdSchema(parseSiteId, "site id"),
43192
+ operationId: z.string().uuid(),
43193
+ checks: z.object({
43194
+ live: z.object({
43195
+ keyId: apiKeyIdSchema,
43196
+ status: z.literal("active")
43197
+ }).strict(),
43198
+ management: z.object({
43199
+ keyId: apiKeyIdSchema,
43200
+ status: z.literal("active")
43201
+ }).strict(),
43202
+ preview: z.object({
43203
+ keyId: apiKeyIdSchema,
43204
+ status: z.literal("active")
43205
+ }).strict()
43206
+ }).strict()
43207
+ }).strict()
43208
+ ]);
42348
43209
  })), CANONICAL_REFUND_CONFLICT_CODES, CANONICAL_REFUND_PLANNER_ERROR_CODES, CANONICAL_ADMIN_REFUND_FAILURE_CODES;
42349
43210
  var init_customerMembershipOutcomes = __esmMin((() => {
42350
43211
  CANONICAL_REFUND_CONFLICT_CODES = [
@@ -42407,6 +43268,9 @@ var init_bookingRefundOutcomes = __esmMin((() => {
42407
43268
  [...STANDARD_LINE_ITEM_REFUND_INVALID_CODES, ...CANONICAL_ADMIN_REFUND_FAILURE_CODES];
42408
43269
  }));
42409
43270
  //#endregion
43271
+ //#region ../api/src/eventSeriesPresentationPreset.ts
43272
+ var init_eventSeriesPresentationPreset = __esmMin((() => {}));
43273
+ //#endregion
42410
43274
  //#region ../api/src/bookingVerticalPreset.ts
42411
43275
  function verticalBookingPreset(id, verticalId, canonicalBehaviour, label, pluralLabel, description, availability = "onboarding") {
42412
43276
  return {
@@ -42579,6 +43443,7 @@ function getSiteVerticalConfigIssues(rawConfig, config) {
42579
43443
  }
42580
43444
  var VERTICAL_IDS, VERTICAL_ID_SET, VERTICAL_PRESET_ID_SET, VerticalIdSchema, VerticalPresetIdSchema, DEFAULT_SITE_VERTICAL_BOOKING_CONFIG;
42581
43445
  var init_bookingVerticals = __esmMin((() => {
43446
+ init_eventSeriesPresentationPreset();
42582
43447
  init_bookingVerticalCatalog();
42583
43448
  VERTICAL_IDS = [
42584
43449
  "yoga_wellness",
@@ -43246,7 +44111,9 @@ var init_auth = __esmMin((() => {
43246
44111
  //#region ../api/src/index.ts
43247
44112
  var init_src = __esmMin((() => {
43248
44113
  init_endpoints();
44114
+ init_preview_auth();
43249
44115
  init_footerSettings();
44116
+ init_accountEndpoints();
43250
44117
  init_demoDashboardMutationSurfaces();
43251
44118
  init_accessAdmin();
43252
44119
  init_media$4();
@@ -43259,9 +44126,11 @@ var init_src = __esmMin((() => {
43259
44126
  init_url();
43260
44127
  init_envelope();
43261
44128
  init_request();
44129
+ init_accountApi();
43262
44130
  init_bookingRefundOutcomes();
43263
44131
  init_customerMembershipOutcomes();
43264
44132
  init_bookingVerticals();
44133
+ init_eventSeriesPresentationPreset();
43265
44134
  init_appointmentSetup();
43266
44135
  init_bookings();
43267
44136
  init_cache_tags();
@@ -43275,6 +44144,7 @@ var init_src = __esmMin((() => {
43275
44144
  init_blocks();
43276
44145
  init_pages();
43277
44146
  init_routes();
44147
+ init_eventSeriesPresentationPreset();
43278
44148
  init_bookingRecords();
43279
44149
  init_emailSettings();
43280
44150
  init_eventEmailTemplates();