@riverbankcms/sdk 0.80.0 → 0.81.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. package/dist/{PreviewEditorSidebar-QZG37QIF.mjs → PreviewEditorSidebar-RDCMEXIJ.mjs} +763 -255
  2. package/dist/{PreviewEditorUI-AXIKSMZA.mjs → PreviewEditorUI-NYGQ6K7B.mjs} +170 -29
  3. package/dist/SdkPreviewModeRuntime-AKCSCZEC.mjs +8 -0
  4. package/dist/_dts/api/src/contentRuntime.d.ts +12 -0
  5. package/dist/_dts/api/src/contentTypes.d.ts +6 -0
  6. package/dist/_dts/api/src/index.d.ts +2 -2
  7. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +53 -0
  8. package/dist/_dts/block-form/src/backend/store-backend.d.ts +3 -1
  9. package/dist/_dts/block-form/src/backend/types.d.ts +3 -3
  10. package/dist/_dts/blocks/src/PageRenderer.d.ts +3 -0
  11. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +20 -28
  12. package/dist/_dts/blocks/src/index.d.ts +6 -4
  13. package/dist/_dts/blocks/src/primitives/content/components/Text.d.ts +1 -1
  14. package/dist/_dts/blocks/src/primitives/content/primitives.d.ts +1 -0
  15. package/dist/_dts/blocks/src/server.d.ts +1 -1
  16. package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +3 -2
  17. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +135 -0
  18. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +5 -0
  19. package/dist/_dts/blocks/src/system/blocks/feature-cards.d.ts +2 -0
  20. package/dist/_dts/blocks/src/system/blocks/form.d.ts +20 -1
  21. package/dist/_dts/blocks/src/system/blocks/hero.d.ts +2 -0
  22. package/dist/_dts/blocks/src/system/blocks/offerings-preview/index.d.ts +19 -0
  23. package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +134 -0
  24. package/dist/_dts/blocks/src/system/componentFactory.d.ts +1 -0
  25. package/dist/_dts/blocks/src/system/constants/background.d.ts +1 -1
  26. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  27. package/dist/_dts/blocks/src/system/customize/backgrounds.d.ts +13 -3
  28. package/dist/_dts/blocks/src/system/data/index.d.ts +2 -0
  29. package/dist/_dts/blocks/src/system/data/linkedContentEntries.d.ts +64 -0
  30. package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
  31. package/dist/_dts/blocks/src/system/designCapabilities.d.ts +2 -2
  32. package/dist/_dts/blocks/src/system/fields/boxStyles.d.ts +6 -1
  33. package/dist/_dts/blocks/src/system/fragments/library/faqHeading.d.ts +0 -1
  34. package/dist/_dts/blocks/src/system/media/slotContracts.d.ts +2 -0
  35. package/dist/_dts/blocks/src/system/node/types.d.ts +8 -1
  36. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
  37. package/dist/_dts/blocks/src/system/registry.d.ts +1 -0
  38. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +44 -50
  39. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +21 -24
  40. package/dist/_dts/blocks/src/system/runtime/headingDecoration.d.ts +21 -0
  41. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.d.ts +45 -14
  42. package/dist/_dts/blocks/src/system/runtime/hooks/useEventFilters.d.ts +2 -9
  43. package/dist/_dts/blocks/src/system/runtime/hooks/useEventPagination.d.ts +1 -10
  44. package/dist/_dts/blocks/src/system/runtime/nodes/basic.d.ts +1 -0
  45. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCalendar.interactive.d.ts +21 -16
  46. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.client.d.ts +3 -2
  47. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.interactive.d.ts +21 -16
  48. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventListing.interactive.d.ts +17 -28
  49. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventPaginatedListView.client.d.ts +2 -3
  50. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekAgendaView.d.ts +3 -3
  51. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/listOptions.d.ts +50 -0
  52. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/utils.d.ts +2 -1
  53. package/dist/_dts/blocks/src/system/runtime/nodes/media.d.ts +29 -14
  54. package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview.d.ts +21 -0
  55. package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +7 -0
  56. package/dist/_dts/blocks/src/system/transforms/registry/_utils/sectionForegroundStyles.d.ts +2 -0
  57. package/dist/_dts/blocks/src/system/transforms/registry/boxStyles.d.ts +4 -2
  58. package/dist/_dts/calendar/src/grid.d.ts +27 -0
  59. package/dist/_dts/calendar/src/index.d.ts +2 -2
  60. package/dist/_dts/content-editor/src/controller/useAutosaveTriggers.d.ts +3 -1
  61. package/dist/_dts/content-editor/src/editorTransactionState.d.ts +1 -0
  62. package/dist/_dts/content-editor/src/hooks/autosaveScopePlanning.d.ts +26 -0
  63. package/dist/_dts/content-editor/src/hooks/publishability.d.ts +1 -0
  64. package/dist/_dts/content-editor/src/hooks/useLinkedEntryAutosave.d.ts +23 -0
  65. package/dist/_dts/content-editor/src/hooks/useReactiveToolbar.d.ts +1 -1
  66. package/dist/_dts/content-editor/src/hooks/useSimpleAutosave.d.ts +2 -2
  67. package/dist/_dts/content-editor/src/index.d.ts +3 -1
  68. package/dist/_dts/content-editor/src/lib/json.d.ts +2 -0
  69. package/dist/_dts/content-editor/src/linkedEntries/domain.d.ts +8 -0
  70. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +58 -0
  71. package/dist/_dts/content-editor/src/ui/editorTransactionState.d.ts +93 -0
  72. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +60 -3
  73. package/dist/_dts/content-editor/src/ui/stores/autosaveStore.d.ts +2 -0
  74. package/dist/_dts/content-editor/src/ui/stores/types.d.ts +1 -1
  75. package/dist/_dts/content-model/src/content-types/builtins.d.ts +43 -0
  76. package/dist/_dts/content-model/src/metadataConfig.d.ts +87 -47
  77. package/dist/_dts/core/src/branded.d.ts +5 -0
  78. package/dist/_dts/core/src/index.d.ts +1 -0
  79. package/dist/_dts/core/src/stable-json.d.ts +1 -0
  80. package/dist/_dts/editor/src/EditorProvider.d.ts +26 -0
  81. package/dist/_dts/editor/src/chrome/EditorChrome.d.ts +26 -0
  82. package/dist/_dts/editor/src/chrome/EditorStatusBar.d.ts +45 -0
  83. package/dist/_dts/editor/src/chrome/statusBarPresentation.d.ts +25 -0
  84. package/dist/_dts/editor/src/components/EditingToggle.d.ts +9 -0
  85. package/dist/_dts/editor/src/hooks/useEditableElement.d.ts +18 -0
  86. package/dist/_dts/editor/src/index.d.ts +29 -0
  87. package/dist/_dts/editor/src/inline/InlineTextEditor.d.ts +1 -0
  88. package/dist/_dts/editor/src/lib/utils.d.ts +1 -0
  89. package/dist/_dts/editor/src/primitives/EditorPrimitivesProvider.d.ts +20 -0
  90. package/dist/_dts/editor/src/primitives/InlineFieldContext.d.ts +11 -0
  91. package/dist/_dts/editor/src/primitives/SaveContext.d.ts +12 -0
  92. package/dist/_dts/editor/src/primitives/helpers.d.ts +1 -0
  93. package/dist/_dts/editor/src/primitives/rich-text/RichTextEditorSurface.d.ts +26 -0
  94. package/dist/_dts/editor/src/primitives/rich-text/RichTextToolbar.d.ts +16 -0
  95. package/dist/_dts/editor/src/primitives/rich-text/config.d.ts +23 -0
  96. package/dist/_dts/editor/src/primitives/rich-text/extensions/RichTextImage.d.ts +2 -0
  97. package/dist/_dts/editor/src/primitives/rich-text/extensions/RichTextLink.d.ts +1 -0
  98. package/dist/_dts/editor/src/primitives/rich-text/imageActions.d.ts +22 -0
  99. package/dist/_dts/editor/src/primitives/rich-text/sanitize.d.ts +23 -0
  100. package/dist/_dts/editor/src/primitives/rich-text/toolbar/BlockTypeDropdown.d.ts +6 -0
  101. package/dist/_dts/editor/src/primitives/rich-text/toolbar/LinkPopover.d.ts +10 -0
  102. package/dist/_dts/editor/src/primitives/rich-text/toolbar/ToolbarIconButton.d.ts +11 -0
  103. package/dist/_dts/editor/src/primitives/rich-text/toolbar/linkPopoverUtils.d.ts +58 -0
  104. package/dist/_dts/editor/src/primitives/rich-text/useRichTextEditor.d.ts +19 -0
  105. package/dist/_dts/editor/src/primitives/rich-text/utils.d.ts +20 -0
  106. package/dist/_dts/editor/src/utils/optimisticTokens.d.ts +27 -0
  107. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +2 -2
  108. package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +3 -3
  109. package/dist/_dts/editor-blocks/src/block-editor/BlockCardHeader.d.ts +4 -4
  110. package/dist/_dts/editor-blocks/src/block-editor/SortableBlockItem.d.ts +2 -2
  111. package/dist/_dts/editor-blocks/src/block-editor/actionPresentation.d.ts +15 -0
  112. package/dist/_dts/editor-blocks/src/block-editor/blockHeaderActionPlan.d.ts +49 -0
  113. package/dist/_dts/editor-blocks/src/widgets/index.d.ts +1 -0
  114. package/dist/_dts/editor-blocks/src/widgets/rich-text/RichTextWidgetProvider.d.ts +1 -1
  115. package/dist/_dts/editor-blocks/src/widgets/rich-text/useImagePicker.d.ts +1 -1
  116. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/SiteOptionPickerField.d.ts +3 -0
  117. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/SiteOptionWidgetProvider.d.ts +14 -0
  118. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/index.d.ts +6 -0
  119. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/loaders.d.ts +51 -0
  120. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/types.d.ts +20 -0
  121. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/utils.d.ts +5 -0
  122. package/dist/_dts/media-core/src/index.d.ts +1 -0
  123. package/dist/_dts/media-core/src/renderableMediaAsset.d.ts +18 -0
  124. package/dist/_dts/media-editor/src/MediaEditor.d.ts +4 -1
  125. package/dist/_dts/media-editor/src/MediaPickerDialog.d.ts +2 -1
  126. package/dist/_dts/media-editor/src/index.d.ts +1 -1
  127. package/dist/_dts/preview-next/src/client/blocks/BlockToolbar.d.ts +3 -2
  128. package/dist/_dts/preview-next/src/client/blocks/EditablePageRenderer.d.ts +5 -1
  129. package/dist/_dts/preview-next/src/client/blocks/blockCustomizePopoverRows.d.ts +25 -0
  130. package/dist/_dts/preview-next/src/client/blocks/composer/mergeDrafts.d.ts +2 -1
  131. package/dist/_dts/preview-next/src/client/blocks/composer/types.d.ts +4 -30
  132. package/dist/_dts/preview-next/src/client/blocks/linkedEntryRenderOverlay.d.ts +11 -0
  133. package/dist/_dts/preview-next/src/client/blocks/previewCustomizeActions.d.ts +3 -9
  134. package/dist/_dts/preview-next/src/client/blocks/useBlockCustomizeControls.d.ts +2 -1
  135. package/dist/_dts/preview-next/src/client/index.d.ts +0 -1
  136. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +3 -1
  137. package/dist/_dts/preview-next/src/client/preview/LinkedEntryEditEventBridge.d.ts +1 -0
  138. package/dist/_dts/preview-next/src/client/preview/PageBlockEditorPanel.d.ts +3 -1
  139. package/dist/_dts/preview-next/src/client/preview/PreviewChromeLayer.d.ts +20 -0
  140. package/dist/_dts/preview-next/src/client/preview/PreviewDesignHistoryOrderContext.d.ts +13 -0
  141. package/dist/_dts/preview-next/src/client/preview/PreviewOpenEditorButton.d.ts +1 -1
  142. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +19 -19
  143. package/dist/_dts/preview-next/src/client/preview/PreviewSidebarSection.d.ts +13 -0
  144. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +47 -4
  145. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +14 -1
  146. package/dist/_dts/preview-next/src/client/preview/linkedEntryEditEvents.d.ts +5 -0
  147. package/dist/_dts/preview-next/src/client/preview/previewChromePlacement.d.ts +46 -0
  148. package/dist/_dts/preview-next/src/client/preview/previewCustomizeControls.d.ts +68 -0
  149. package/dist/_dts/preview-next/src/client/preview/previewCustomizeHistory.d.ts +8 -1
  150. package/dist/_dts/preview-next/src/client/preview/previewCustomizeWorkflowState.d.ts +11 -9
  151. package/dist/_dts/preview-next/src/client/preview/previewDesignHistoryOrder.d.ts +18 -0
  152. package/dist/_dts/preview-next/src/client/preview/previewUndoDomains.d.ts +1 -1
  153. package/dist/_dts/preview-next/src/client/preview/siteChromeBrandPreferences.d.ts +41 -0
  154. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +101 -0
  155. package/dist/_dts/preview-next/src/client/preview/siteChromeSavePlan.d.ts +29 -0
  156. package/dist/_dts/preview-next/src/client/preview/siteStyleHistoryState.d.ts +55 -0
  157. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorApplyPayload.d.ts +1 -0
  158. package/dist/_dts/preview-next/src/client/widgets/widgetAdapters.d.ts +2 -1
  159. package/dist/_dts/preview-next/src/client/widgets/widgetOverrides.d.ts +3 -2
  160. package/dist/_dts/preview-next/src/constants.d.ts +0 -1
  161. package/dist/_dts/sdk/src/cli/config-loader.d.ts +3 -1
  162. package/dist/_dts/sdk/src/cli/content/reader.d.ts +5 -3
  163. package/dist/_dts/sdk/src/cli/site-commands/commandSurfaceDispatch.d.ts +1 -0
  164. package/dist/_dts/sdk/src/cli/site-commands/pageCommands.d.ts +3 -1
  165. package/dist/_dts/sdk/src/cli/site-commands/pushExecution.d.ts +1 -0
  166. package/dist/_dts/sdk/src/config/types.d.ts +1 -1
  167. package/dist/_dts/sdk/src/config/validation.d.ts +3 -3
  168. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +28 -2
  169. package/dist/_dts/sdk/src/public-api/contracts.d.ts +10 -0
  170. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +42 -0
  171. package/dist/_dts/sdk/src/rendering/mediaAssets.d.ts +4 -0
  172. package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
  173. package/dist/_dts/sdk/src/version.d.ts +1 -1
  174. package/dist/_dts/theme-core/src/buttons/constants.d.ts +26 -1
  175. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  176. package/dist/_dts/theme-core/src/buttons/personalities/joy-stamp.d.ts +22 -0
  177. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +1 -0
  178. package/dist/_dts/theme-core/src/buttons/types.d.ts +9 -0
  179. package/dist/_dts/theme-core/src/cards/siteStyleDefaults.d.ts +44 -0
  180. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  181. package/dist/_dts/theme-core/src/interactive/types.d.ts +10 -0
  182. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +27 -6
  183. package/dist/_dts/theme-core/src/palette/variants/index.d.ts +15 -0
  184. package/dist/_dts/theme-core/src/palette/variants/warm-dark.d.ts +27 -0
  185. package/dist/_dts/theme-core/src/schema.d.ts +40 -3
  186. package/dist/_dts/theme-core/src/site-styles/accessibleSurfaces.d.ts +4 -1
  187. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +87 -31
  188. package/dist/_dts/theme-core/src/site-styles/appearancePresetResolution.d.ts +6 -2
  189. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +87 -31
  190. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +30 -1
  191. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +18 -2
  192. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +6 -2
  193. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +5 -0
  194. package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -0
  195. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +3 -23
  196. package/dist/_dts/theme-core/src/site-styles/pageDesignIntent.d.ts +276 -4
  197. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +33 -3
  198. package/dist/_dts/theme-core/src/site-styles/sectionTransitions.d.ts +508 -0
  199. package/dist/_dts/theme-core/src/site-styles/sourceCatalogs.d.ts +10 -10
  200. package/dist/_dts/theme-core/src/site-styles/types.d.ts +24 -6
  201. package/dist/_dts/theme-core/src/site-styles/typographyPresets.d.ts +16 -1
  202. package/dist/{chunk-7PCYG6YV.mjs → chunk-3PTVPAT4.mjs} +1863 -1099
  203. package/dist/{chunk-5NZGBSJF.mjs → chunk-3QWQ2MUQ.mjs} +469 -1000
  204. package/dist/{chunk-HTB4BMKD.mjs → chunk-3VT7LZY2.mjs} +321 -113
  205. package/dist/{chunk-MPBNEVPB.mjs → chunk-4T5JIPWY.mjs} +1 -1
  206. package/dist/{chunk-BBLZSQEY.mjs → chunk-E3NZYEKF.mjs} +1 -7
  207. package/dist/{chunk-GYXKAUFV.mjs → chunk-WUHKQBB6.mjs} +9509 -2658
  208. package/dist/cli/index.mjs +1347 -324
  209. package/dist/client/{accordion-QFZMNB7O.mjs → accordion-SFIIZWNH.mjs} +2 -2
  210. package/dist/client/{bookingForm-NCIXFWIG.mjs → bookingForm-CFKZVWGA.mjs} +5 -5
  211. package/dist/client/bookings.mjs +281 -19
  212. package/dist/client/{carousel-EO4BJMWD.mjs → carousel-ELXWSBLA.mjs} +3 -3
  213. package/dist/client/{cart-FTYCLYUW.mjs → cart-6SSCPYY5.mjs} +6 -6
  214. package/dist/client/{checkout-NFGLVCOX.mjs → checkout-UFQ34HPV.mjs} +6 -6
  215. package/dist/client/{chunk-6GVVWSPU.mjs → chunk-76JUETXQ.mjs} +139 -186
  216. package/dist/client/{chunk-AUJ5DBZJ.mjs → chunk-7BXX7WXH.mjs} +112 -28
  217. package/dist/client/{chunk-IWFZSQNZ.mjs → chunk-G56BSZAM.mjs} +2 -2
  218. package/dist/client/{chunk-VDS5YFLX.mjs → chunk-IUEDYLFJ.mjs} +1 -1
  219. package/dist/client/{chunk-PYRBIURC.mjs → chunk-NP47RHIX.mjs} +5 -5
  220. package/dist/client/{chunk-PUOELU4O.mjs → chunk-NX6X3GRF.mjs} +330 -80
  221. package/dist/client/{chunk-Y37KDO7P.mjs → chunk-PA2LJH2M.mjs} +2 -2
  222. package/dist/client/{chunk-CE7IBGVW.mjs → chunk-RMWMT3ZD.mjs} +1 -1
  223. package/dist/client/{chunk-4W66ALYT.mjs → chunk-TCJS3NY5.mjs} +1 -1
  224. package/dist/client/{chunk-T6UIP6UZ.mjs → chunk-V6XI4M2Q.mjs} +1 -1
  225. package/dist/client/client.mjs +5924 -3138
  226. package/dist/client/{courseRegistration-2EORROPS.mjs → courseRegistration-HJIISAAG.mjs} +5 -5
  227. package/dist/client/{eventCalendar-WZI4VL6N.mjs → eventCalendar-F6YVUCZR.mjs} +7 -7
  228. package/dist/client/{eventCombined-QCB2TCNL.mjs → eventCombined-B5DSTIOK.mjs} +7 -7
  229. package/dist/client/{eventDetails-TFTATAPH.mjs → eventDetails-SEJDDHQC.mjs} +7 -7
  230. package/dist/client/{eventListing-A2CQEHEQ.mjs → eventListing-TPMWIIBO.mjs} +7 -7
  231. package/dist/client/{eventRegistration-OELPVLUY.mjs → eventRegistration-QU6W2PV6.mjs} +7 -7
  232. package/dist/client/{form-NTIFD6WQ.mjs → form-LVTYNTDE.mjs} +2 -2
  233. package/dist/client/{headerSection-7TBNKCLA.mjs → headerSection-SO3MFC4U.mjs} +54 -13
  234. package/dist/client/hooks.mjs +2266 -1179
  235. package/dist/client/{locationMap-LRLB5A3H.mjs → locationMap-5E5FLAKO.mjs} +2 -2
  236. package/dist/client/{newsletterForm-XI52RZSN.mjs → newsletterForm-GN32JEBQ.mjs} +2 -2
  237. package/dist/client/{productDetail-GSNKBFLY.mjs → productDetail-Q346KSVR.mjs} +6 -6
  238. package/dist/client/{productList-BGCGT4KZ.mjs → productList-DTDMQYGZ.mjs} +6 -6
  239. package/dist/client/rendering/client.mjs +4618 -3318
  240. package/dist/client/rendering/islands.mjs +32 -20
  241. package/dist/client/rendering.mjs +4898 -2108
  242. package/dist/client/{shop-RQHUCLNY.mjs → shop-OFUW7KPN.mjs} +6 -6
  243. package/dist/preview-next/client/runtime.mjs +5 -5
  244. package/dist/preview-next/constants.mjs +0 -2
  245. package/dist/preview-next/index.mjs +0 -2
  246. package/dist/{sdk-runtime-A4LHT2RS.mjs → sdk-runtime-2GIX6I7X.mjs} +6 -6
  247. package/dist/server/components.mjs +4377 -1852
  248. package/dist/server/config-validation.mjs +2283 -1303
  249. package/dist/server/config.mjs +2283 -1303
  250. package/dist/server/data.mjs +2267 -1180
  251. package/dist/server/index.mjs +2 -1
  252. package/dist/server/next.mjs +4394 -1773
  253. package/dist/server/page-converter.mjs +1999 -1015
  254. package/dist/server/prebuild.mjs +1 -1
  255. package/dist/server/rendering/server.mjs +4482 -1857
  256. package/dist/server/rendering.mjs +4484 -1859
  257. package/dist/server/routing.mjs +2302 -1120
  258. package/dist/server/server.mjs +2284 -1197
  259. package/dist/server/theme-bridge.mjs +757 -85
  260. package/dist/server/theme.mjs +69 -4
  261. package/dist/styles/index.css +474 -65
  262. package/package.json +1 -1
  263. package/dist/SdkPreviewModeRuntime-XE5M4UKM.mjs +0 -8
  264. package/dist/_dts/editor-blocks/src/block-editor/actionControlMode.d.ts +0 -2
  265. package/dist/_dts/preview-next/src/client/preview/previewSurface.d.ts +0 -3
@@ -329,6 +329,12 @@ var init_uuid = __esm({
329
329
  }
330
330
  });
331
331
 
332
+ // ../core/src/stable-json.ts
333
+ var init_stable_json = __esm({
334
+ "../core/src/stable-json.ts"() {
335
+ }
336
+ });
337
+
332
338
  // ../core/src/index.ts
333
339
  var init_src = __esm({
334
340
  "../core/src/index.ts"() {
@@ -374,6 +380,7 @@ var init_src = __esm({
374
380
  init_slug();
375
381
  init_string();
376
382
  init_uuid();
383
+ init_stable_json();
377
384
  }
378
385
  });
379
386
 
@@ -921,6 +928,12 @@ var init_portableMediaReferences = __esm({
921
928
  }
922
929
  });
923
930
 
931
+ // ../media-core/src/renderableMediaAsset.ts
932
+ var init_renderableMediaAsset = __esm({
933
+ "../media-core/src/renderableMediaAsset.ts"() {
934
+ }
935
+ });
936
+
924
937
  // ../media-core/src/index.ts
925
938
  var init_src2 = __esm({
926
939
  "../media-core/src/index.ts"() {
@@ -959,6 +972,7 @@ var init_src2 = __esm({
959
972
  init_richTextImageWriteNormalizer();
960
973
  init_mediaUsageProjection();
961
974
  init_portableMediaReferences();
975
+ init_renderableMediaAsset();
962
976
  }
963
977
  });
964
978
  var transformStepSchema, bindingPathSchema, bindingSchema, repeatSchema, conditionSchema, dataScopeSchema, nodePropsSchema, nodeSchema, nodeTreeSchema, NodeSchema, NodeTreeSchema;
@@ -1064,6 +1078,7 @@ var init_validation_constants = __esm({
1064
1078
  "event-spotlight",
1065
1079
  "event-listing",
1066
1080
  "event-calendar",
1081
+ "offerings-preview",
1067
1082
  "event-combined",
1068
1083
  // Commerce
1069
1084
  "shop",
@@ -1958,29 +1973,10 @@ var init_accessibleSurfaces = __esm({
1958
1973
  }
1959
1974
  });
1960
1975
 
1961
- // ../theme-core/src/site-styles/appearancePresetResolution.ts
1962
- function assertValidOptionGroups(preset2) {
1963
- preset2.optionGroups?.forEach((group) => {
1964
- const selectedOption = group.options.find(
1965
- (option) => option.id === group.selectedOptionId
1966
- );
1967
- if (!selectedOption) {
1968
- throw new Error(
1969
- `Appearance preset "${preset2.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
1970
- );
1971
- }
1972
- });
1973
- }
1974
- function defineBlockAppearancePreset(preset2) {
1975
- assertValidOptionGroups(preset2);
1976
- return preset2;
1977
- }
1978
- var init_appearancePresetResolution = __esm({
1979
- "../theme-core/src/site-styles/appearancePresetResolution.ts"() {
1980
- }
1981
- });
1982
-
1983
1976
  // ../theme-core/src/site-styles/types.ts
1977
+ function defineExactCatalog() {
1978
+ return (entries) => entries;
1979
+ }
1984
1980
  function asDesignBlockId(value) {
1985
1981
  return brandNonEmptyString(value, "DesignBlockId");
1986
1982
  }
@@ -2069,8 +2065,10 @@ function defineBlockDesignCapability(capability) {
2069
2065
  tileTreatments: capability.tileTreatments ?? ["default"],
2070
2066
  eventListTreatments: capability.eventListTreatments ?? ["plain"],
2071
2067
  eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"],
2072
- ...capability.accordionIconSets ? { accordionIconSets: capability.accordionIconSets } : {},
2073
- ...capability.headingDecorations ? { headingDecorations: capability.headingDecorations } : {}
2068
+ headingDecorationCapability: capability.headingDecorationCapability ?? {
2069
+ kind: "unsupported"
2070
+ },
2071
+ ...capability.accordionIconSets ? { accordionIconSets: capability.accordionIconSets } : {}
2074
2072
  };
2075
2073
  }
2076
2074
  var plainFrame, tileTreatmentValues, eventListTreatmentValues, eyebrowTreatmentValues, visibleHeadingDecorationFamilyValues, headingDecorationOverrideValues, headingDecorationColorTokenValues, noHeadingDecoration, accordionIconSetValues, accordionIconColorTokenValues, accordionIconMotionValues;
@@ -2136,6 +2134,29 @@ var init_types2 = __esm({
2136
2134
  }
2137
2135
  });
2138
2136
 
2137
+ // ../theme-core/src/site-styles/appearancePresetResolution.ts
2138
+ function assertValidOptionGroups(preset2) {
2139
+ preset2.optionGroups?.forEach((group) => {
2140
+ const selectedOption = group.options.find(
2141
+ (option) => option.id === group.selectedOptionId
2142
+ );
2143
+ if (!selectedOption) {
2144
+ throw new Error(
2145
+ `Appearance preset "${preset2.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
2146
+ );
2147
+ }
2148
+ });
2149
+ }
2150
+ function defineBlockAppearancePreset(preset2) {
2151
+ assertValidOptionGroups(preset2);
2152
+ return preset2;
2153
+ }
2154
+ var init_appearancePresetResolution = __esm({
2155
+ "../theme-core/src/site-styles/appearancePresetResolution.ts"() {
2156
+ init_types2();
2157
+ }
2158
+ });
2159
+
2139
2160
  // ../theme-core/src/site-styles/blockAppearancePresets.ts
2140
2161
  var blockAppearancePresets;
2141
2162
  var init_blockAppearancePresets = __esm({
@@ -2502,7 +2523,7 @@ var init_blockAppearancePresets = __esm({
2502
2523
  kind: "block-design",
2503
2524
  id: "intro-organic-statement",
2504
2525
  target: "intro",
2505
- label: "Organic intro statement",
2526
+ label: "Intro statement",
2506
2527
  blockKinds: ["block.intro"],
2507
2528
  design: {
2508
2529
  sectionSurface: "base",
@@ -2512,6 +2533,23 @@ var init_blockAppearancePresets = __esm({
2512
2533
  emphasis: "high"
2513
2534
  }
2514
2535
  }),
2536
+ defineBlockAppearancePreset({
2537
+ kind: "block-design",
2538
+ id: "intro-editorial-statement",
2539
+ target: "intro",
2540
+ label: "Editorial intro statement",
2541
+ blockKinds: ["block.intro"],
2542
+ constraints: {
2543
+ layoutVariantKeys: ["centered-copy", "statement-copy"]
2544
+ },
2545
+ design: {
2546
+ sectionSurface: "base",
2547
+ contentFrame: plainFrame,
2548
+ itemSurface: "none",
2549
+ transitionAfter: "soft-fade-short",
2550
+ emphasis: "high"
2551
+ }
2552
+ }),
2515
2553
  defineBlockAppearancePreset({
2516
2554
  kind: "block-design",
2517
2555
  id: "intro-portrait-bio",
@@ -2526,12 +2564,7 @@ var init_blockAppearancePresets = __esm({
2526
2564
  contentFrame: plainFrame,
2527
2565
  itemSurface: "none",
2528
2566
  transitionAfter: "soft-fade-short",
2529
- emphasis: "medium",
2530
- headingDecoration: {
2531
- family: "organic-squiggle",
2532
- placement: "after-heading",
2533
- colorToken: "primary"
2534
- }
2567
+ emphasis: "medium"
2535
2568
  }
2536
2569
  }),
2537
2570
  defineBlockAppearancePreset({
@@ -2548,6 +2581,48 @@ var init_blockAppearancePresets = __esm({
2548
2581
  emphasis: "medium"
2549
2582
  }
2550
2583
  }),
2584
+ defineBlockAppearancePreset({
2585
+ kind: "block-design",
2586
+ id: "offerings-preview-default-cards",
2587
+ target: "offerings",
2588
+ label: "Default offering cards",
2589
+ blockKinds: ["block.offerings-preview"],
2590
+ design: {
2591
+ sectionSurface: "base",
2592
+ contentFrame: plainFrame,
2593
+ itemSurface: "default",
2594
+ transitionAfter: "soft-fade-short",
2595
+ emphasis: "medium"
2596
+ }
2597
+ }),
2598
+ defineBlockAppearancePreset({
2599
+ kind: "block-design",
2600
+ id: "offerings-preview-secondary-cards",
2601
+ target: "offerings",
2602
+ label: "Secondary offering cards",
2603
+ blockKinds: ["block.offerings-preview"],
2604
+ design: {
2605
+ sectionSurface: "muted-band",
2606
+ contentFrame: plainFrame,
2607
+ itemSurface: "inset",
2608
+ transitionAfter: "soft-fade-short",
2609
+ emphasis: "medium"
2610
+ }
2611
+ }),
2612
+ defineBlockAppearancePreset({
2613
+ kind: "block-design",
2614
+ id: "offerings-preview-non-carded",
2615
+ target: "offerings",
2616
+ label: "Non-carded offerings",
2617
+ blockKinds: ["block.offerings-preview"],
2618
+ design: {
2619
+ sectionSurface: "muted-band",
2620
+ contentFrame: plainFrame,
2621
+ itemSurface: "editorial",
2622
+ transitionAfter: "soft-fade-short",
2623
+ emphasis: "medium"
2624
+ }
2625
+ }),
2551
2626
  defineBlockAppearancePreset({
2552
2627
  kind: "block-design",
2553
2628
  id: "feature-cards-raised-rule",
@@ -2562,6 +2637,20 @@ var init_blockAppearancePresets = __esm({
2562
2637
  emphasis: "high"
2563
2638
  }
2564
2639
  }),
2640
+ defineBlockAppearancePreset({
2641
+ kind: "block-design",
2642
+ id: "feature-cards-bold-colors",
2643
+ target: "feature-cards",
2644
+ label: "Bold colour-blocked cards",
2645
+ blockKinds: ["block.feature-cards"],
2646
+ design: {
2647
+ sectionSurface: "base",
2648
+ contentFrame: plainFrame,
2649
+ itemSurface: "color-blocked",
2650
+ transitionAfter: "none",
2651
+ emphasis: "high"
2652
+ }
2653
+ }),
2565
2654
  defineBlockAppearancePreset({
2566
2655
  kind: "block-design",
2567
2656
  id: "feature-cards-editorial-columns",
@@ -2815,7 +2904,7 @@ var init_blockAppearancePresets = __esm({
2815
2904
  kind: "block-design",
2816
2905
  id: "contact-form-panel",
2817
2906
  target: "contact-form",
2818
- label: "Contact form panel",
2907
+ label: "Raised form panel",
2819
2908
  blockKinds: ["block.form"],
2820
2909
  design: {
2821
2910
  sectionSurface: "muted-band",
@@ -2827,30 +2916,16 @@ var init_blockAppearancePresets = __esm({
2827
2916
  }),
2828
2917
  defineBlockAppearancePreset({
2829
2918
  kind: "block-design",
2830
- id: "contact-form-dark-card",
2831
- target: "contact-form",
2832
- label: "Dark form card",
2833
- blockKinds: ["block.form"],
2834
- design: {
2835
- sectionSurface: "accent-band",
2836
- contentFrame: panelFrame("raised"),
2837
- itemSurface: "none",
2838
- transitionAfter: "soft-fade-short",
2839
- emphasis: "high"
2840
- }
2841
- }),
2842
- defineBlockAppearancePreset({
2843
- kind: "block-design",
2844
- id: "contact-form-brand-depth-card",
2919
+ id: "contact-form-open",
2845
2920
  target: "contact-form",
2846
- label: "Brand-depth form card",
2921
+ label: "Open form",
2847
2922
  blockKinds: ["block.form"],
2848
2923
  design: {
2849
- sectionSurface: "brand-depth-band",
2850
- contentFrame: panelFrame("raised"),
2924
+ sectionSurface: "muted-band",
2925
+ contentFrame: plainFrame,
2851
2926
  itemSurface: "none",
2852
2927
  transitionAfter: "none",
2853
- emphasis: "high"
2928
+ emphasis: "medium"
2854
2929
  }
2855
2930
  }),
2856
2931
  defineBlockAppearancePreset({
@@ -2969,6 +3044,131 @@ var init_schemaVersionedJson = __esm({
2969
3044
  "../theme-core/src/site-styles/schemaVersionedJson.ts"() {
2970
3045
  }
2971
3046
  });
3047
+
3048
+ // ../theme-core/src/site-styles/sectionTransitions.ts
3049
+ var noneBoundaryOption, softBoundaryOption, spaciousBoundaryOption;
3050
+ var init_sectionTransitions = __esm({
3051
+ "../theme-core/src/site-styles/sectionTransitions.ts"() {
3052
+ init_types2();
3053
+ noneBoundaryOption = {
3054
+ id: asBoundaryOptionId("break:none"),
3055
+ label: "None",
3056
+ transitionAfter: "none",
3057
+ treatment: { kind: "none" }
3058
+ };
3059
+ softBoundaryOption = {
3060
+ id: asBoundaryOptionId("break:soft"),
3061
+ label: "Soft",
3062
+ transitionAfter: "soft-fade-short",
3063
+ treatment: { kind: "soft-fade", height: "medium", curve: "soft" }
3064
+ };
3065
+ spaciousBoundaryOption = {
3066
+ id: asBoundaryOptionId("break:spacious"),
3067
+ label: "Spacious",
3068
+ transitionAfter: "soft-fade-long",
3069
+ treatment: { kind: "soft-fade", height: "large", curve: "spacious" }
3070
+ };
3071
+ ({
3072
+ id: asBoundaryOptionId("break:expansive"),
3073
+ label: "Expansive",
3074
+ transitionAfter: "soft-fade-expansive",
3075
+ treatment: { kind: "soft-fade", height: "expansive", curve: "expansive" }
3076
+ });
3077
+ ({
3078
+ id: asBoundaryOptionId("break:wave"),
3079
+ label: "Classic wave",
3080
+ transitionAfter: "wave-edge",
3081
+ treatment: {
3082
+ kind: "wave-edge",
3083
+ height: "medium",
3084
+ amplitude: "balanced",
3085
+ rhythm: "double",
3086
+ symmetry: "asymmetrical"
3087
+ }
3088
+ });
3089
+ ({
3090
+ id: asBoundaryOptionId("break:wave-balanced"),
3091
+ label: "Balanced wave",
3092
+ transitionAfter: "wave-edge-balanced",
3093
+ treatment: {
3094
+ kind: "wave-edge",
3095
+ height: "medium",
3096
+ amplitude: "balanced",
3097
+ rhythm: "double",
3098
+ symmetry: "symmetrical"
3099
+ }
3100
+ });
3101
+ ({
3102
+ id: asBoundaryOptionId("break:wave-gentle"),
3103
+ label: "Gentle wave",
3104
+ transitionAfter: "wave-edge-gentle",
3105
+ treatment: {
3106
+ kind: "wave-edge",
3107
+ height: "compact",
3108
+ amplitude: "subtle",
3109
+ rhythm: "single",
3110
+ symmetry: "symmetrical"
3111
+ }
3112
+ });
3113
+ ({
3114
+ id: asBoundaryOptionId("break:wave-bold"),
3115
+ label: "Bold wave",
3116
+ transitionAfter: "wave-edge-bold",
3117
+ treatment: {
3118
+ kind: "wave-edge",
3119
+ height: "large",
3120
+ amplitude: "bold",
3121
+ rhythm: "double",
3122
+ symmetry: "symmetrical"
3123
+ }
3124
+ });
3125
+ ({
3126
+ id: asBoundaryOptionId("break:wave-drift"),
3127
+ label: "Drift wave",
3128
+ transitionAfter: "wave-edge-drift",
3129
+ treatment: {
3130
+ kind: "wave-edge",
3131
+ height: "medium",
3132
+ amplitude: "balanced",
3133
+ rhythm: "double",
3134
+ symmetry: "drift"
3135
+ }
3136
+ });
3137
+ ({
3138
+ id: asBoundaryOptionId("break:angle-subtle"),
3139
+ label: "Subtle angle",
3140
+ transitionAfter: "angle-edge-subtle",
3141
+ treatment: {
3142
+ kind: "angle-edge",
3143
+ height: "compact",
3144
+ slope: "subtle",
3145
+ direction: "forward"
3146
+ }
3147
+ });
3148
+ ({
3149
+ id: asBoundaryOptionId("break:angle-balanced"),
3150
+ label: "Balanced angle",
3151
+ transitionAfter: "angle-edge",
3152
+ treatment: {
3153
+ kind: "angle-edge",
3154
+ height: "medium",
3155
+ slope: "balanced",
3156
+ direction: "forward"
3157
+ }
3158
+ });
3159
+ ({
3160
+ id: asBoundaryOptionId("break:angle-steep"),
3161
+ label: "Steep angle",
3162
+ transitionAfter: "angle-edge-steep",
3163
+ treatment: {
3164
+ kind: "angle-edge",
3165
+ height: "large",
3166
+ slope: "steep",
3167
+ direction: "forward"
3168
+ }
3169
+ });
3170
+ }
3171
+ });
2972
3172
  function addDuplicateStringIssues(ctx, input) {
2973
3173
  const seen = /* @__PURE__ */ new Set();
2974
3174
  const duplicates = /* @__PURE__ */ new Set();
@@ -2986,15 +3186,45 @@ function addDuplicateStringIssues(ctx, input) {
2986
3186
  });
2987
3187
  }
2988
3188
  }
3189
+ function validateBoundaryPinIdMatchesBlocks(pin, ctx) {
3190
+ const expectedBoundaryId = makeBoundaryId(
3191
+ pin.previousBlockId,
3192
+ pin.nextBlockId
3193
+ );
3194
+ if (pin.boundaryId !== expectedBoundaryId) {
3195
+ ctx.addIssue({
3196
+ code: z.ZodIssueCode.custom,
3197
+ path: ["boundaryId"],
3198
+ message: `Boundary id must match previousBlockId and nextBlockId. Expected ${expectedBoundaryId}.`
3199
+ });
3200
+ }
3201
+ }
3202
+ function validateUniquePageDesignPins(intent, ctx) {
3203
+ addDuplicateStringIssues(ctx, {
3204
+ values: intent.blockLookPins.map((pin) => pin.blockId),
3205
+ path: ["blockLookPins"],
3206
+ label: "block Look pin"
3207
+ });
3208
+ addDuplicateStringIssues(ctx, {
3209
+ values: intent.boundaryPins.map(
3210
+ (pin) => boundaryKey(pin.previousBlockId, pin.nextBlockId)
3211
+ ),
3212
+ path: ["boundaryPins"],
3213
+ label: "boundary pin"
3214
+ });
3215
+ }
2989
3216
  function boundaryKey(previousBlockId, nextBlockId) {
2990
3217
  return makeBoundaryId(previousBlockId, nextBlockId);
2991
3218
  }
2992
- var pageDesignIntentSchemaVersion, pageDesignUserPinnedAppearanceChoiceSchema, pageDesignUserPinnedBoundaryChoiceSchema, pageDesignBlockLookPinSchema, pageDesignBoundaryPinSchema;
3219
+ var pageDesignIntentSchemaVersion, legacyPageDesignIntentSchemaVersion, pageDesignUserPinnedAppearanceChoiceSchema, pageDesignUserPinnedBoundaryChoiceSchema, pageDesignBoundaryTreatmentSchema, pageDesignUserPinnedBoundaryTreatmentChoiceSchema, pageDesignBlockLookPinSchema, pageDesignBoundaryPinSchema, legacyPageDesignBoundaryPinSchema;
2993
3220
  var init_pageDesignIntent = __esm({
2994
3221
  "../theme-core/src/site-styles/pageDesignIntent.ts"() {
2995
3222
  init_types2();
2996
3223
  init_schemaVersionedJson();
2997
- pageDesignIntentSchemaVersion = 1;
3224
+ init_sectionTransitions();
3225
+ pageDesignIntentSchemaVersion = 2;
3226
+ legacyPageDesignIntentSchemaVersion = 1;
3227
+ asBoundaryOptionId("break:unknown");
2998
3228
  pageDesignUserPinnedAppearanceChoiceSchema = z.object({
2999
3229
  kind: z.literal("user-pinned"),
3000
3230
  value: z.string().min(1).transform(asAppearancePresetId)
@@ -3003,49 +3233,66 @@ var init_pageDesignIntent = __esm({
3003
3233
  kind: z.literal("user-pinned"),
3004
3234
  value: z.string().min(1).transform(asBoundaryOptionId)
3005
3235
  }).strict();
3236
+ pageDesignBoundaryTreatmentSchema = z.discriminatedUnion("kind", [
3237
+ z.object({ kind: z.literal("none") }).strict(),
3238
+ z.object({
3239
+ kind: z.literal("soft-fade"),
3240
+ height: z.enum(["compact", "medium", "large", "expansive"]),
3241
+ curve: z.enum(["soft", "spacious", "expansive"])
3242
+ }).strict(),
3243
+ z.object({
3244
+ kind: z.literal("wave-edge"),
3245
+ height: z.enum(["compact", "medium", "large"]),
3246
+ amplitude: z.enum(["subtle", "balanced", "bold"]),
3247
+ rhythm: z.enum(["single", "double"]),
3248
+ symmetry: z.enum(["symmetrical", "asymmetrical", "drift"])
3249
+ }).strict(),
3250
+ z.object({
3251
+ kind: z.literal("angle-edge"),
3252
+ height: z.enum(["compact", "medium", "large"]),
3253
+ slope: z.enum(["subtle", "balanced", "steep"]),
3254
+ direction: z.enum(["forward", "reverse"])
3255
+ }).strict(),
3256
+ z.object({
3257
+ kind: z.literal("legacy-unsupported"),
3258
+ boundaryOptionId: z.string().min(1).transform(asBoundaryOptionId)
3259
+ }).strict()
3260
+ ]);
3261
+ pageDesignUserPinnedBoundaryTreatmentChoiceSchema = z.object({
3262
+ kind: z.literal("user-pinned"),
3263
+ value: pageDesignBoundaryTreatmentSchema
3264
+ }).strict();
3006
3265
  pageDesignBlockLookPinSchema = z.object({
3007
3266
  blockId: z.string().min(1).transform(asDesignBlockId),
3008
3267
  blockKind: z.string().min(1),
3009
3268
  choice: pageDesignUserPinnedAppearanceChoiceSchema
3010
3269
  }).strict();
3011
3270
  pageDesignBoundaryPinSchema = z.object({
3271
+ boundaryId: z.string().min(1).transform(asDesignBoundaryId),
3272
+ previousBlockId: z.string().min(1).transform(asDesignBlockId),
3273
+ nextBlockId: z.string().min(1).transform(asDesignBlockId),
3274
+ choice: pageDesignUserPinnedBoundaryTreatmentChoiceSchema
3275
+ }).strict().superRefine(validateBoundaryPinIdMatchesBlocks);
3276
+ legacyPageDesignBoundaryPinSchema = z.object({
3012
3277
  boundaryId: z.string().min(1).transform(asDesignBoundaryId),
3013
3278
  previousBlockId: z.string().min(1).transform(asDesignBlockId),
3014
3279
  nextBlockId: z.string().min(1).transform(asDesignBlockId),
3015
3280
  choice: pageDesignUserPinnedBoundaryChoiceSchema
3016
- }).strict().superRefine((pin, ctx) => {
3017
- const expectedBoundaryId = makeBoundaryId(
3018
- pin.previousBlockId,
3019
- pin.nextBlockId
3020
- );
3021
- if (pin.boundaryId !== expectedBoundaryId) {
3022
- ctx.addIssue({
3023
- code: z.ZodIssueCode.custom,
3024
- path: ["boundaryId"],
3025
- message: `Boundary id must match previousBlockId and nextBlockId. Expected ${expectedBoundaryId}.`
3026
- });
3027
- }
3028
- });
3281
+ }).strict().superRefine(validateBoundaryPinIdMatchesBlocks);
3282
+ z.object({
3283
+ schemaVersion: z.literal(legacyPageDesignIntentSchemaVersion),
3284
+ siteStyleId: z.string().min(1).transform(asSiteStyleId),
3285
+ pageFlowPresetId: z.string().min(1).transform(asPageFlowPresetId),
3286
+ blockLookPins: z.array(pageDesignBlockLookPinSchema),
3287
+ boundaryPins: z.array(legacyPageDesignBoundaryPinSchema)
3288
+ }).strict().superRefine(validateUniquePageDesignPins);
3029
3289
  z.object({
3030
3290
  schemaVersion: z.literal(pageDesignIntentSchemaVersion),
3031
3291
  siteStyleId: z.string().min(1).transform(asSiteStyleId),
3032
3292
  pageFlowPresetId: z.string().min(1).transform(asPageFlowPresetId),
3033
3293
  blockLookPins: z.array(pageDesignBlockLookPinSchema),
3034
3294
  boundaryPins: z.array(pageDesignBoundaryPinSchema)
3035
- }).strict().superRefine((intent, ctx) => {
3036
- addDuplicateStringIssues(ctx, {
3037
- values: intent.blockLookPins.map((pin) => pin.blockId),
3038
- path: ["blockLookPins"],
3039
- label: "block Look pin"
3040
- });
3041
- addDuplicateStringIssues(ctx, {
3042
- values: intent.boundaryPins.map(
3043
- (pin) => boundaryKey(pin.previousBlockId, pin.nextBlockId)
3044
- ),
3045
- path: ["boundaryPins"],
3046
- label: "boundary pin"
3047
- });
3048
- });
3295
+ }).strict().superRefine(validateUniquePageDesignPins);
3049
3296
  }
3050
3297
  });
3051
3298
 
@@ -3053,6 +3300,7 @@ var init_pageDesignIntent = __esm({
3053
3300
  var init_contentTemplateDesignIntent = __esm({
3054
3301
  "../theme-core/src/site-styles/contentTemplateDesignIntent.ts"() {
3055
3302
  init_pageDesignIntent();
3303
+ init_sectionTransitions();
3056
3304
  init_types2();
3057
3305
  }
3058
3306
  });
@@ -3318,7 +3566,9 @@ var init_types3 = __esm({
3318
3566
  variantShadowSchema = z.object({
3319
3567
  elevation: z.enum(["none", "low", "medium", "high"]),
3320
3568
  softness: z.enum(["crisp", "soft", "hard"]).nullable(),
3321
- position: z.enum(["bottom", "bottom-right"]).default("bottom")
3569
+ position: z.enum(["bottom", "bottom-right"]).default("bottom"),
3570
+ // Optional palette token for a coloured offset shadow; omit for neutral black.
3571
+ colorToken: themeColorTokenSchema.optional()
3322
3572
  });
3323
3573
  variantEffectsSchema = z.object({
3324
3574
  base: z.array(effectApplicationSchema).optional(),
@@ -3881,6 +4131,71 @@ var init_ink_stamp = __esm({
3881
4131
  }
3882
4132
  });
3883
4133
 
4134
+ // ../theme-core/src/buttons/personalities/joy-stamp.ts
4135
+ var joyStamp;
4136
+ var init_joy_stamp = __esm({
4137
+ "../theme-core/src/buttons/personalities/joy-stamp.ts"() {
4138
+ init_types4();
4139
+ joyStamp = defineButtonPersonality({
4140
+ id: "joy-stamp",
4141
+ name: "Joy Stamp",
4142
+ description: "Pill buttons with a hard, brand-coloured offset shadow that presses in on hover.",
4143
+ tags: { tone: "bold", energy: "vibrant", motion: "expressive", era: "organic" },
4144
+ buttonSystem: {
4145
+ global: {
4146
+ cornerStyle: "pill",
4147
+ shadow: "high",
4148
+ textTransform: "none",
4149
+ // Bold display type on the buttons: use the heading font (Bricolage) at
4150
+ // 700, matching the mockup's chunky button labels.
4151
+ typography: "heading",
4152
+ fontWeight: 700,
4153
+ borderWidth: 2,
4154
+ hoverTransform: "none",
4155
+ hoverColor: "none"
4156
+ },
4157
+ sizes: {
4158
+ sm: { padding: "0.625rem 1.25rem", fontSize: "text-sm" },
4159
+ md: { padding: "0.875rem 1.75rem", fontSize: "text-base" },
4160
+ lg: { padding: "1.125rem 2.25rem", fontSize: "text-lg" },
4161
+ xl: { padding: "1.25rem 2.75rem", fontSize: "text-xl" }
4162
+ },
4163
+ variants: [
4164
+ {
4165
+ id: "primary",
4166
+ name: "Primary",
4167
+ enabled: true,
4168
+ priority: 1,
4169
+ background: { type: "solid", colorToken: "primary" },
4170
+ textColorToken: "primaryForeground",
4171
+ borderRadius: "rounded-full",
4172
+ // Cream stamp shadow under the burnt-orange fill.
4173
+ shadow: { elevation: "high", softness: "hard", position: "bottom-right", colorToken: "text" },
4174
+ effects: {
4175
+ hover: [{ effectId: "press-down" }]
4176
+ }
4177
+ },
4178
+ {
4179
+ id: "secondary",
4180
+ name: "Secondary",
4181
+ enabled: true,
4182
+ priority: 2,
4183
+ background: { type: "transparent" },
4184
+ textColorToken: "text",
4185
+ borderRadius: "rounded-full",
4186
+ border: { widthClass: "border-2", colorToken: "text" },
4187
+ // Brown stamp shadow under the cream outline.
4188
+ shadow: { elevation: "high", softness: "hard", position: "bottom-right", colorToken: "secondary" },
4189
+ effects: {
4190
+ hover: [{ effectId: "press-down" }]
4191
+ }
4192
+ }
4193
+ ]
4194
+ }
4195
+ });
4196
+ }
4197
+ });
4198
+
3884
4199
  // ../theme-core/src/buttons/personalities/pebble.ts
3885
4200
  var pebble;
3886
4201
  var init_pebble = __esm({
@@ -4175,6 +4490,7 @@ var init_personalities = __esm({
4175
4490
  init_earth_pill();
4176
4491
  init_editorial_link();
4177
4492
  init_ink_stamp();
4493
+ init_joy_stamp();
4178
4494
  init_pebble();
4179
4495
  init_showtime_pill();
4180
4496
  init_soft_pill();
@@ -4187,7 +4503,8 @@ var init_personalities = __esm({
4187
4503
  pebble,
4188
4504
  inkStamp,
4189
4505
  brushedWash,
4190
- showtimePill
4506
+ showtimePill,
4507
+ joyStamp
4191
4508
  ];
4192
4509
  personalitiesById = new Map(
4193
4510
  buttonPersonalities.map((p) => [p.id, p])
@@ -4272,10 +4589,17 @@ var init_shadow = __esm({
4272
4589
  }
4273
4590
  });
4274
4591
 
4592
+ // ../theme-core/src/buttons/constants.ts
4593
+ var init_constants = __esm({
4594
+ "../theme-core/src/buttons/constants.ts"() {
4595
+ }
4596
+ });
4597
+
4275
4598
  // ../theme-core/src/buttons/effects/presets/transform.ts
4276
4599
  var init_transform = __esm({
4277
4600
  "../theme-core/src/buttons/effects/presets/transform.ts"() {
4278
4601
  init_cssUtils();
4602
+ init_constants();
4279
4603
  }
4280
4604
  });
4281
4605
 
@@ -4344,12 +4668,6 @@ var init_generateEffectsCSS = __esm({
4344
4668
  }
4345
4669
  });
4346
4670
 
4347
- // ../theme-core/src/buttons/constants.ts
4348
- var init_constants = __esm({
4349
- "../theme-core/src/buttons/constants.ts"() {
4350
- }
4351
- });
4352
-
4353
4671
  // ../theme-core/src/buttons/utils/contrast.ts
4354
4672
  var init_contrast2 = __esm({
4355
4673
  "../theme-core/src/buttons/utils/contrast.ts"() {
@@ -5324,7 +5642,9 @@ var init_schema3 = __esm({
5324
5642
  motion: z.enum(["static", "fixed-frame"]).nullable().optional(),
5325
5643
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
5326
5644
  textColor: tokenOrCssColorValueSchema.nullable().optional(),
5327
- headingColor: tokenOrCssColorValueSchema.nullable().optional()
5645
+ headingColor: tokenOrCssColorValueSchema.nullable().optional(),
5646
+ linkColor: tokenOrCssColorValueSchema.nullable().optional(),
5647
+ supportingColor: tokenOrCssColorValueSchema.nullable().optional()
5328
5648
  });
5329
5649
  noHeadingDecorationSchema = z.object({
5330
5650
  family: z.literal("none")
@@ -5387,7 +5707,8 @@ var init_schema3 = __esm({
5387
5707
  "editorial-rule",
5388
5708
  "soft-panel",
5389
5709
  "editorial-serif-quote",
5390
- "editorial-open"
5710
+ "editorial-open",
5711
+ "color-blocked"
5391
5712
  ]).nullable().optional(),
5392
5713
  // Which site-style card variant the card adopts (emits a `.card-{id}` class).
5393
5714
  // 'none' is boxless. Driven by the block look via testimonialCardTreatment.
@@ -6244,6 +6565,36 @@ var init_warm_neutral = __esm({
6244
6565
  }
6245
6566
  });
6246
6567
 
6568
+ // ../theme-core/src/palette/variants/warm-dark.ts
6569
+ var warmDarkEmber;
6570
+ var init_warm_dark = __esm({
6571
+ "../theme-core/src/palette/variants/warm-dark.ts"() {
6572
+ init_types11();
6573
+ warmDarkEmber = definePaletteVariant({
6574
+ id: "warm-dark-ember",
6575
+ name: "Warm Dark \u2014 Ember",
6576
+ description: "Deep clay-brown ground with burnt-orange accent and warm cream text.",
6577
+ tags: { tone: "bold", energy: "vibrant", era: "organic" },
6578
+ mode: "dark",
6579
+ colors: [
6580
+ { name: "primary", hex: "#ce612f" },
6581
+ { name: "secondary", hex: "#894e31" },
6582
+ { name: "accent", hex: "#ce612f" },
6583
+ { name: "success", hex: "#6f8f57" },
6584
+ { name: "warning", hex: "#c98a3c" },
6585
+ { name: "destructive", hex: "#c0492f" },
6586
+ { name: "background", hex: "#4f2415" },
6587
+ { name: "surface", hex: "#5c3320" },
6588
+ { name: "surfaceAlt", hex: "#693a25" },
6589
+ { name: "muted", hex: "#6a3d27" },
6590
+ { name: "text", hex: "#f0e1d0" },
6591
+ { name: "primaryForeground", hex: "#4f2415" },
6592
+ { name: "border", hex: "#894e31" }
6593
+ ]
6594
+ });
6595
+ }
6596
+ });
6597
+
6247
6598
  // ../theme-core/src/palette/variants/index.ts
6248
6599
  function findPaletteVariant(id) {
6249
6600
  return paletteVariantsById.get(id);
@@ -6255,6 +6606,7 @@ var init_variants = __esm({
6255
6606
  init_high_contrast();
6256
6607
  init_soft_natural();
6257
6608
  init_warm_neutral();
6609
+ init_warm_dark();
6258
6610
  init_types11();
6259
6611
  paletteVariants = [
6260
6612
  // Brand-led family
@@ -6275,7 +6627,9 @@ var init_variants = __esm({
6275
6627
  softNaturalSage,
6276
6628
  softNaturalStone,
6277
6629
  softNaturalWatercolor,
6278
- softNaturalLilac
6630
+ softNaturalLilac,
6631
+ // Warm-dark family (dark mode)
6632
+ warmDarkEmber
6279
6633
  ];
6280
6634
  paletteVariantsById = new Map(
6281
6635
  paletteVariants.map((v) => [v.id, v])
@@ -6498,7 +6852,7 @@ var init_siteStyleDefaults = __esm({
6498
6852
  });
6499
6853
 
6500
6854
  // ../theme-core/src/cards/siteStyleDefaults.ts
6501
- var southWestCardSystem, clarityZenCardSystem;
6855
+ var southWestCardSystem, clarityZenCardSystem, originalJoyCardSystem;
6502
6856
  var init_siteStyleDefaults2 = __esm({
6503
6857
  "../theme-core/src/cards/siteStyleDefaults.ts"() {
6504
6858
  southWestCardSystem = {
@@ -6566,6 +6920,32 @@ var init_siteStyleDefaults2 = __esm({
6566
6920
  }
6567
6921
  ]
6568
6922
  };
6923
+ originalJoyCardSystem = {
6924
+ variants: [
6925
+ {
6926
+ id: "default",
6927
+ name: "Default",
6928
+ enabled: true,
6929
+ priority: 1,
6930
+ background: { type: "solid", colorToken: "surface" },
6931
+ foregroundToken: "text",
6932
+ spacing: "comfortable",
6933
+ corners: "rounded",
6934
+ shadow: { elevation: "none", softness: null, position: "bottom" }
6935
+ },
6936
+ {
6937
+ id: "alternative",
6938
+ name: "Statement",
6939
+ enabled: true,
6940
+ priority: 2,
6941
+ background: { type: "solid", colorToken: "primary" },
6942
+ foregroundToken: "primaryForeground",
6943
+ spacing: "comfortable",
6944
+ corners: "rounded",
6945
+ shadow: { elevation: "none", softness: null, position: "bottom" }
6946
+ }
6947
+ ]
6948
+ };
6569
6949
  }
6570
6950
  });
6571
6951
 
@@ -6778,6 +7158,12 @@ function serifLineHeader(theme) {
6778
7158
  letterSpacing: "wide",
6779
7159
  gradient: false
6780
7160
  },
7161
+ border: {
7162
+ style: "solid",
7163
+ width: "none",
7164
+ position: "none"
7165
+ },
7166
+ shadow: { elevation: "none" },
6781
7167
  ctaTreatment: "outline",
6782
7168
  ctaVariant: resolveHeaderCtaVariant(theme, "outline"),
6783
7169
  ctaGap: "relaxed"
@@ -6998,7 +7384,7 @@ var init_headerLooks = __esm({
6998
7384
  inlineMarkWithTitleLogoAccommodation,
6999
7385
  unbackedOverlayLogoAccommodation
7000
7386
  ];
7001
- headerLayoutCatalog = [
7387
+ headerLayoutCatalog = defineExactCatalog()([
7002
7388
  {
7003
7389
  id: asHeaderLayoutId("classic"),
7004
7390
  label: "Classic",
@@ -7030,8 +7416,8 @@ var init_headerLooks = __esm({
7030
7416
  maxRecommendedNavItems: 5,
7031
7417
  allowedLogoShapes: ["none", "text-only", "horizontal"]
7032
7418
  }
7033
- ];
7034
- headerStyleCatalog = [
7419
+ ]);
7420
+ headerStyleCatalog = defineExactCatalog()([
7035
7421
  {
7036
7422
  id: asHeaderStyleId("minimal"),
7037
7423
  label: "Minimal",
@@ -7186,7 +7572,7 @@ var init_headerLooks = __esm({
7186
7572
  navTypography: "heading",
7187
7573
  moods: ["calm", "editorial"]
7188
7574
  }
7189
- ];
7575
+ ]);
7190
7576
  headerLayoutsById = new Map(
7191
7577
  headerLayoutCatalog.map((layout) => [layout.id, layout])
7192
7578
  );
@@ -7296,7 +7682,7 @@ var init_headerLooks = __esm({
7296
7682
  [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
7297
7683
  ]
7298
7684
  );
7299
- legacyHeaderLookAliases = [
7685
+ legacyHeaderLookAliases = defineExactCatalog()([
7300
7686
  {
7301
7687
  lookId: asHeaderLookId("clean-base"),
7302
7688
  selection: {
@@ -7353,9 +7739,9 @@ var init_headerLooks = __esm({
7353
7739
  styleId: asHeaderStyleId("glass")
7354
7740
  }
7355
7741
  }
7356
- ];
7742
+ ]);
7357
7743
  legacyHeaderLookAliasesById = new Map(legacyHeaderLookAliases.map((alias) => [alias.lookId, alias]));
7358
- headerLookCatalog = [
7744
+ headerLookCatalog = defineExactCatalog()([
7359
7745
  {
7360
7746
  id: asHeaderLookId("clean-base"),
7361
7747
  label: "Clean base",
@@ -7473,7 +7859,7 @@ var init_headerLooks = __esm({
7473
7859
  logoAccommodations: overlayLogoAccommodations,
7474
7860
  compile: floatingGlassHeader
7475
7861
  }
7476
- ];
7862
+ ]);
7477
7863
  guaranteedFallbackHeaderLayoutId = asHeaderLayoutId("classic");
7478
7864
  guaranteedFallbackHeaderStyleId = asHeaderStyleId("minimal");
7479
7865
  new Set(
@@ -7644,7 +8030,7 @@ var init_footerLooks = __esm({
7644
8030
  "../theme-core/src/site-styles/footerLooks.ts"() {
7645
8031
  init_customizableSurfaces();
7646
8032
  init_types2();
7647
- footerLookCatalog = [
8033
+ footerLookCatalog = defineExactCatalog()([
7648
8034
  {
7649
8035
  id: asFooterLookId("footer-muted-grounding"),
7650
8036
  label: "Muted grounding footer",
@@ -7667,7 +8053,7 @@ var init_footerLooks = __esm({
7667
8053
  allowedContentPresence: ["default-footer", "default-and-blocks"],
7668
8054
  compile: brandTwoBandFooter
7669
8055
  }
7670
- ];
8056
+ ]);
7671
8057
  footerLooksById = new Map(
7672
8058
  footerLookCatalog.map((look) => [look.id, look])
7673
8059
  );
@@ -7701,7 +8087,7 @@ var init_sourceCatalogs = __esm({
7701
8087
  source: "generated",
7702
8088
  sectionSurfaces: ["base", "muted-band", "accent-band", "brand-depth-band", "hero-image"],
7703
8089
  contentFrames: generatedContentFrames,
7704
- itemSurfaces: ["none", "default", "flat", "outlined", "raised", "inset", "editorial"],
8090
+ itemSurfaces: ["none", "default", "flat", "outlined", "raised", "inset", "editorial", "color-blocked"],
7705
8091
  transitions: ["none", "soft-fade-short", "soft-fade-long"],
7706
8092
  emphases: ["low", "medium", "high"],
7707
8093
  detachedCustom: false
@@ -7713,8 +8099,15 @@ var init_sourceCatalogs = __esm({
7713
8099
  itemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
7714
8100
  transitions: [
7715
8101
  ...generatedDesignOptionCatalog.transitions,
8102
+ "soft-fade-expansive",
7716
8103
  "wave-edge",
7717
- "angle-edge"
8104
+ "wave-edge-balanced",
8105
+ "wave-edge-gentle",
8106
+ "wave-edge-bold",
8107
+ "wave-edge-drift",
8108
+ "angle-edge",
8109
+ "angle-edge-subtle",
8110
+ "angle-edge-steep"
7718
8111
  ],
7719
8112
  emphases: generatedDesignOptionCatalog.emphases,
7720
8113
  detachedCustom: false
@@ -7747,7 +8140,7 @@ function defineTypographyPreset(preset2) {
7747
8140
  function findTypographyPreset(id) {
7748
8141
  return typographyPresetsById.get(id);
7749
8142
  }
7750
- var bodyReadablePolicy, headingFlexiblePolicy, displayHeadingPolicy, modernSansTypography, warmRoundedTypography, editorialSerifTypography, classicSerifTypography, luxeContrastTypography, boldDisplayTypography, typographyPresets, typographyPresetsById;
8143
+ var bodyReadablePolicy, headingFlexiblePolicy, displayHeadingPolicy, modernSansTypography, warmRoundedTypography, editorialSerifTypography, classicSerifTypography, luxeContrastTypography, boldDisplayTypography, originalJoyTypography, typographyPresets, typographyPresetsById;
7751
8144
  var init_typographyPresets = __esm({
7752
8145
  "../theme-core/src/site-styles/typographyPresets.ts"() {
7753
8146
  bodyReadablePolicy = {
@@ -7903,6 +8296,29 @@ var init_typographyPresets = __esm({
7903
8296
  },
7904
8297
  scale: "balanced"
7905
8298
  };
8299
+ originalJoyTypography = {
8300
+ body: {
8301
+ family: "DM Sans, system-ui, sans-serif",
8302
+ size: "md",
8303
+ weight: "regular",
8304
+ lineHeight: "relaxed",
8305
+ letterSpacing: "normal"
8306
+ },
8307
+ headings: {
8308
+ default: {
8309
+ family: "Bricolage Grotesque, system-ui, sans-serif",
8310
+ weight: "bold",
8311
+ lineHeight: "normal",
8312
+ letterSpacing: "tight",
8313
+ italic: null,
8314
+ case: null
8315
+ },
8316
+ h1: { size: "2xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
8317
+ h2: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
8318
+ h3: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null }
8319
+ },
8320
+ scale: "balanced"
8321
+ };
7906
8322
  typographyPresets = [
7907
8323
  defineTypographyPreset({
7908
8324
  id: "typography-preset:modern-sans",
@@ -7989,6 +8405,32 @@ var init_typographyPresets = __esm({
7989
8405
  mobile: { headlineSize: "4xl", subheadlineSize: "xl" }
7990
8406
  }
7991
8407
  }
8408
+ }),
8409
+ defineTypographyPreset({
8410
+ id: "typography-preset:original-joy",
8411
+ name: "Original Joy",
8412
+ description: "Bold Bricolage Grotesque display headings over a clean DM Sans body, editorial and warm.",
8413
+ defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Bricolage Grotesque, system-ui, sans-serif" },
8414
+ recommendedFonts: {
8415
+ body: ["DM Sans", "Inter", "Manrope"],
8416
+ heading: ["Bricolage Grotesque", "Space Grotesk", "Archivo"]
8417
+ },
8418
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
8419
+ typography: originalJoyTypography,
8420
+ heroTypography: {
8421
+ headlineSize: "6xl",
8422
+ headlineLineHeight: "tight",
8423
+ subheadlineSize: "xl",
8424
+ subheadlineLineHeight: "normal",
8425
+ microHeadlineSize: "6xl",
8426
+ microHeadlineLineHeight: "tight",
8427
+ microSubheadlineSize: "lg",
8428
+ microSubheadlineLineHeight: "normal",
8429
+ responsive: {
8430
+ tablet: { headlineSize: "5xl" },
8431
+ mobile: { headlineSize: "4xl", subheadlineSize: "lg" }
8432
+ }
8433
+ }
7992
8434
  })
7993
8435
  ];
7994
8436
  typographyPresetsById = new Map(
@@ -8268,7 +8710,8 @@ var init_curatedSiteStyles = __esm({
8268
8710
  "site-style:clarity-zen-blue",
8269
8711
  SOFT_EARTH_SITE_STYLE_ID_VALUE,
8270
8712
  "site-style:bold-launch",
8271
- "site-style:south-west-twerk-school"
8713
+ "site-style:south-west-twerk-school",
8714
+ "site-style:original-joy"
8272
8715
  ];
8273
8716
  quietBudget = {
8274
8717
  accentDensity: "low",
@@ -9077,7 +9520,7 @@ var init_curatedSiteStyles = __esm({
9077
9520
  "body-text-editorial-intro",
9078
9521
  "schedule-details-brand-depth",
9079
9522
  "testimonials-statement-cards",
9080
- "contact-form-brand-depth-card"
9523
+ "contact-form-panel"
9081
9524
  ],
9082
9525
  recommendedHeaderLookIds: [
9083
9526
  "brand-solid",
@@ -9100,6 +9543,74 @@ var init_curatedSiteStyles = __esm({
9100
9543
  paletteChoice("brand-led-warm"),
9101
9544
  paletteChoice("high-contrast-ink")
9102
9545
  ]
9546
+ }),
9547
+ defineCuratedSiteStyle({
9548
+ id: "site-style:original-joy",
9549
+ name: "Original Joy",
9550
+ headingDecoration: { family: "organic-squiggle", colorToken: "primary" },
9551
+ description: "Warm, dark, and editorial: deep clay grounds, cream type, and bold burnt-orange accents for soulful community brands.",
9552
+ generationBrief: "Use a deep brown ground with cream text and burnt-orange accents, large display headings, generous spacing, organic rounded shapes, and bold colour-blocked feature sections. Lead with warmth and belonging; calls to action should feel strong but unhurried.",
9553
+ tokenRecipes: {
9554
+ palette: "brand-led",
9555
+ contrast: "maximum",
9556
+ radius: "rounded",
9557
+ shadow: "subtle",
9558
+ typography: "clean-sans",
9559
+ spacing: "airy",
9560
+ motion: "expressive"
9561
+ },
9562
+ compositionBudget: expressiveBudget,
9563
+ typographyPresetChoices: [
9564
+ typographyChoice("typography-preset:original-joy"),
9565
+ typographyChoice("typography-preset:bold-display"),
9566
+ typographyChoice("typography-preset:modern-sans")
9567
+ ],
9568
+ defaultTypographyPresetId: "typography-preset:original-joy",
9569
+ themeOverrides: {
9570
+ accordions: boldBorderedAccordionSystem,
9571
+ // Shared card system: warm rounded brown cards (event + testimonial cards
9572
+ // pick this up automatically) with a burnt-orange statement variant.
9573
+ cards: originalJoyCardSystem,
9574
+ testimonialQuote: accentGlyphQuote,
9575
+ bodyText: {
9576
+ intro: {
9577
+ paragraphSize: "editorial",
9578
+ headingSize: "editorial"
9579
+ }
9580
+ }
9581
+ },
9582
+ // Recommended block looks: the bold colour-blocked feature cards, a calm
9583
+ // band for the events spotlight, and statement testimonial cards.
9584
+ recommendedAppearancePresetIds: [
9585
+ "feature-cards-bold-colors",
9586
+ "offerings-calm-list",
9587
+ "testimonials-statement-cards"
9588
+ ],
9589
+ // Floating, transparent "Clear Split" header (no fill behind the nav links).
9590
+ defaultHeaderSelection: { layoutId: "floating", styleId: "minimal-surface" },
9591
+ recommendedHeaderLayoutChoices: [headerLayoutChoice("floating")],
9592
+ recommendedHeaderStyleChoicesByLayout: {
9593
+ floating: [
9594
+ headerStyleChoice("minimal-surface"),
9595
+ headerStyleChoice("split-glass"),
9596
+ headerStyleChoice("glass")
9597
+ ]
9598
+ },
9599
+ // Legacy bridge only (the real curation is the explicit selection above).
9600
+ // Kept to a reserved-space, non-overlay look on purpose: the split hero
9601
+ // flows below the Clear Split header, so we must NOT trigger the immersive
9602
+ // overlay-hero promotion that looks like `floating-glass` would force.
9603
+ recommendedHeaderLookIds: ["minimal-transparent"],
9604
+ recommendedFooterLookIds: [
9605
+ "site-footer-brand-two-band",
9606
+ "footer-muted-grounding"
9607
+ ],
9608
+ buttonPersonalityChoices: [
9609
+ buttonChoice("joy-stamp"),
9610
+ buttonChoice("ink-stamp"),
9611
+ buttonChoice("showtime-pill")
9612
+ ],
9613
+ paletteVariantChoices: [paletteChoice("warm-dark-ember")]
9103
9614
  })
9104
9615
  ];
9105
9616
  curatedSiteStylesById = new Map(
@@ -9121,6 +9632,7 @@ var init_siteStyleBlockPolicies = __esm({
9121
9632
  init_appearancePresets();
9122
9633
  init_pageDesignIntent();
9123
9634
  init_types2();
9635
+ init_sectionTransitions();
9124
9636
  asPageFlowPresetId("generated-default");
9125
9637
  asSiteStyleId("site-style:south-west-twerk-school");
9126
9638
  asAppearancePresetId("hero-brand-scrim-fixed-frame");
@@ -9129,9 +9641,6 @@ var init_siteStyleBlockPolicies = __esm({
9129
9641
  asBoundaryOptionId("break:wave");
9130
9642
  }
9131
9643
  });
9132
-
9133
- // ../theme-core/src/site-styles/pageDesignEditorModel.ts
9134
- var noneBoundaryOption, softBoundaryOption, spaciousBoundaryOption;
9135
9644
  var init_pageDesignEditorModel = __esm({
9136
9645
  "../theme-core/src/site-styles/pageDesignEditorModel.ts"() {
9137
9646
  init_curatedSiteStyles();
@@ -9139,26 +9648,8 @@ var init_pageDesignEditorModel = __esm({
9139
9648
  init_siteStyleBlockPolicies();
9140
9649
  init_pageDesignIntent();
9141
9650
  init_types2();
9142
- noneBoundaryOption = {
9143
- id: asBoundaryOptionId("break:none"),
9144
- label: "None",
9145
- transitionAfter: "none"
9146
- };
9147
- softBoundaryOption = {
9148
- id: asBoundaryOptionId("break:soft"),
9149
- label: "Soft",
9150
- transitionAfter: "soft-fade-short"
9151
- };
9152
- ({
9153
- id: asBoundaryOptionId("break:wave"),
9154
- label: "Wave",
9155
- transitionAfter: "wave-edge"
9156
- });
9157
- spaciousBoundaryOption = {
9158
- id: asBoundaryOptionId("break:spacious"),
9159
- label: "Spacious",
9160
- transitionAfter: "soft-fade-long"
9161
- };
9651
+ init_sectionTransitions();
9652
+ init_sectionTransitions();
9162
9653
  [
9163
9654
  {
9164
9655
  id: asPageFlowPresetId("flow:quiet"),
@@ -9784,6 +10275,7 @@ var init_site_styles = __esm({
9784
10275
  init_records();
9785
10276
  init_resolver2();
9786
10277
  init_runtimeCompiler();
10278
+ init_sectionTransitions();
9787
10279
  init_siteStyleThemeCompiler();
9788
10280
  init_siteStyleBlockPolicies();
9789
10281
  init_sourceCatalogs();
@@ -11387,6 +11879,42 @@ var init_themeColorResolution = __esm({
11387
11879
  }
11388
11880
  });
11389
11881
 
11882
+ // ../blocks/src/system/transforms/registry/_utils/sectionForegroundStyles.ts
11883
+ function readColorToken(input, key) {
11884
+ const value = input[key];
11885
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
11886
+ }
11887
+ function resolveOptionalForegroundColor(value, context) {
11888
+ if (!value) return null;
11889
+ return resolveBackgroundColorValue(value, context);
11890
+ }
11891
+ function resolveSectionForegroundStyles(value, context) {
11892
+ if (!value || typeof value !== "object") {
11893
+ return {};
11894
+ }
11895
+ const input = value;
11896
+ const textColor = readColorToken(input, "textColor");
11897
+ const resolvedText = resolveOptionalForegroundColor(textColor, context);
11898
+ if (!resolvedText) {
11899
+ return {};
11900
+ }
11901
+ const resolvedHeading = resolveOptionalForegroundColor(readColorToken(input, "headingColor"), context) ?? resolvedText;
11902
+ const resolvedLink = resolveOptionalForegroundColor(readColorToken(input, "linkColor"), context) ?? resolvedText;
11903
+ const resolvedSupporting = resolveOptionalForegroundColor(readColorToken(input, "supportingColor"), context) ?? resolvedText;
11904
+ return {
11905
+ color: resolvedText,
11906
+ "--section-text-color": resolvedText,
11907
+ "--section-heading-color": resolvedHeading,
11908
+ "--section-link-color": resolvedLink,
11909
+ "--section-supporting-color": resolvedSupporting
11910
+ };
11911
+ }
11912
+ var init_sectionForegroundStyles = __esm({
11913
+ "../blocks/src/system/transforms/registry/_utils/sectionForegroundStyles.ts"() {
11914
+ init_themeColorResolution();
11915
+ }
11916
+ });
11917
+
11390
11918
  // ../blocks/src/system/transforms/registry/boxStyles.ts
11391
11919
  function readPath(source, path25) {
11392
11920
  if (!source || !path25) return void 0;
@@ -11437,6 +11965,7 @@ var init_boxStyles2 = __esm({
11437
11965
  init_cards();
11438
11966
  init_blockColorTokens();
11439
11967
  init_themeColorResolution();
11968
+ init_sectionForegroundStyles();
11440
11969
  spacingTransform = {
11441
11970
  id: "boxStyles.spacing",
11442
11971
  kind: "string",
@@ -11570,6 +12099,8 @@ var init_boxStyles2 = __esm({
11570
12099
  classes.push("rb-card-treatment-editorial-serif-quote");
11571
12100
  } else if (input.treatment === "editorial-open") {
11572
12101
  classes.push("rb-card-treatment-editorial-open");
12102
+ } else if (input.treatment === "color-blocked") {
12103
+ classes.push("rb-card-treatment-color-blocked");
11573
12104
  }
11574
12105
  const cardVariant = normalizeBoxStylesCardVariant(input.cardVariant);
11575
12106
  if (cardVariant && cardVariant !== "none") {
@@ -11806,35 +12337,8 @@ var init_boxStyles2 = __esm({
11806
12337
  sectionColorsStyleTransform = {
11807
12338
  id: "sectionStyles.resolveColorsStyle",
11808
12339
  kind: "formatter",
11809
- summary: "Resolve section text and heading colors into a style object",
11810
- run: (value, _options, context) => {
11811
- if (!value || typeof value !== "object") {
11812
- return {};
11813
- }
11814
- const bg = value;
11815
- const textColor = typeof bg.textColor === "string" ? bg.textColor.trim() : null;
11816
- const headingColor = typeof bg.headingColor === "string" ? bg.headingColor.trim() : null;
11817
- const style = {};
11818
- if (textColor) {
11819
- const resolvedText = resolveBackgroundColorValue(textColor, context);
11820
- if (resolvedText) {
11821
- style.color = resolvedText;
11822
- style["--section-text-color"] = resolvedText;
11823
- if (headingColor) {
11824
- const resolvedHeading = resolveBackgroundColorValue(
11825
- headingColor,
11826
- context
11827
- );
11828
- if (resolvedHeading) {
11829
- style["--section-heading-color"] = resolvedHeading;
11830
- }
11831
- } else {
11832
- style["--section-heading-color"] = resolvedText;
11833
- }
11834
- }
11835
- }
11836
- return style;
11837
- }
12340
+ summary: "Resolve section foreground colors into a style object",
12341
+ run: (value, _options, context) => resolveSectionForegroundStyles(value, context)
11838
12342
  };
11839
12343
  GAP_CLASS_MAP = {
11840
12344
  none: "rb-gap-semantic-none",
@@ -12187,48 +12691,8 @@ var init_sectionState = __esm({
12187
12691
  });
12188
12692
 
12189
12693
  // ../blocks/src/system/node/fragments/headingDecoration.ts
12190
- function headingDecoration({
12191
- bindFrom = defaultBindFrom,
12192
- className
12193
- } = {}) {
12194
- return el(
12195
- "div",
12196
- // Full-width block row so the mark inherits the heading's alignment. The
12197
- // heading stacks are flexbox; `text-align` positions inline content, not flex
12198
- // items, so the inline-block mark must sit inside a stretched block for a
12199
- // centred heading to centre it (and a left heading to keep it at the start).
12200
- { "aria-hidden": "true", className: "rb-heading-decoration-row" },
12201
- [
12202
- el("div", {
12203
- className: {
12204
- $bind: {
12205
- from: bindFrom,
12206
- transforms: [
12207
- {
12208
- id: "ui.headingDecorationClassName",
12209
- options: { baseClass: className }
12210
- }
12211
- ]
12212
- }
12213
- }
12214
- })
12215
- ],
12216
- // Gate on the presence of `family`. The render-time theme projection omits
12217
- // `headingDecoration` entirely for absent/none signatures, so the
12218
- // dominant "no decoration" case is absent → falsy → not rendered. A presence
12219
- // check (rather than `family !== 'none'`) is deliberate: `when`'s only
12220
- // negation form would render on *absent* values, which would emit a stub on
12221
- // every undecorated heading. The remaining edge — hand-authored content with
12222
- // an explicit `{ family: 'none' }` — renders an aria-hidden `rb-hidden`
12223
- // (display:none) stub with no visual or layout impact.
12224
- when(`${bindFrom}.family`)
12225
- );
12226
- }
12227
- var defaultBindFrom;
12228
12694
  var init_headingDecoration = __esm({
12229
12695
  "../blocks/src/system/node/fragments/headingDecoration.ts"() {
12230
- init_builder();
12231
- defaultBindFrom = "_sectionStyles.headingDecoration";
12232
12696
  }
12233
12697
  });
12234
12698
 
@@ -12752,6 +13216,9 @@ var init_heroCopy = __esm({
12752
13216
  maxLength: 600
12753
13217
  }
12754
13218
  ],
13219
+ // Layout order is [eyebrow, headline, subheadline]. The hero block's
13220
+ // `splitEditorial` variant reads these nodes by index; keep the order stable
13221
+ // (it fails fast at import if the count changes).
12755
13222
  layout: [
12756
13223
  text(
12757
13224
  {
@@ -13000,6 +13467,7 @@ var init_heroCtaRow = __esm({
13000
13467
  ctaRow({
13001
13468
  collectionPath: "content.ctas",
13002
13469
  itemName: "cta",
13470
+ gap: "md",
13003
13471
  justify: {
13004
13472
  $bind: {
13005
13473
  from: "content",
@@ -13071,7 +13539,6 @@ var init_testimonialsHeading = __esm({
13071
13539
  "../blocks/src/system/fragments/library/testimonialsHeading.ts"() {
13072
13540
  init_types13();
13073
13541
  init_builder();
13074
- init_headingDecoration();
13075
13542
  init_colorStyles();
13076
13543
  testimonialsHeadingFragment = defineFragment({
13077
13544
  id: "testimonialsHeading",
@@ -13102,7 +13569,6 @@ var init_testimonialsHeading = __esm({
13102
13569
  when("content.heading"),
13103
13570
  bind("content.heading")
13104
13571
  ),
13105
- headingDecoration(),
13106
13572
  text(
13107
13573
  {
13108
13574
  as: "p",
@@ -13844,7 +14310,7 @@ var init_blogFeaturedPost = __esm({
13844
14310
  });
13845
14311
 
13846
14312
  // ../blocks/src/system/fragments/library/faqHeading.ts
13847
- function faqHeadingLayout(options = {}) {
14313
+ function faqHeadingLayout() {
13848
14314
  return stack(
13849
14315
  {
13850
14316
  gap: "sm",
@@ -13869,7 +14335,6 @@ function faqHeadingLayout(options = {}) {
13869
14335
  when("content.title"),
13870
14336
  bind("content.title")
13871
14337
  ),
13872
- ...options.decorated ? [headingDecoration()] : [],
13873
14338
  richText(
13874
14339
  {
13875
14340
  className: "faq-description rb-prose rb-mx-auto rb-max-w-none",
@@ -13881,7 +14346,7 @@ function faqHeadingLayout(options = {}) {
13881
14346
  ]
13882
14347
  );
13883
14348
  }
13884
- var faqHeadingFragment, decoratedFaqHeadingLayout;
14349
+ var faqHeadingFragment;
13885
14350
  var init_faqHeading = __esm({
13886
14351
  "../blocks/src/system/fragments/library/faqHeading.ts"() {
13887
14352
  init_types13();
@@ -13918,7 +14383,6 @@ var init_faqHeading = __esm({
13918
14383
  ],
13919
14384
  layout: faqHeadingLayout()
13920
14385
  });
13921
- decoratedFaqHeadingLayout = faqHeadingLayout({ decorated: true });
13922
14386
  }
13923
14387
  });
13924
14388
 
@@ -15736,7 +16200,7 @@ var init_schemas = __esm({
15736
16200
  publicCoursesArraySchema = z.array(publicCourseSchema);
15737
16201
  }
15738
16202
  });
15739
- var eventPresetSchema, eventScheduleScopeSchema, eventVenueSchema, eventCategorySchema, pricingTypeSchema, accessRestrictionSchema, eventPricingModeSchema, publicEventAttendanceModeSchema, publicEventAttendanceModeAvailabilitySchema, publicEventTicketTypeAvailabilitySchema, publicEventTicketTypeSchema, publicTeamMemberSummarySchema, publicEventSchema, publicEventsArraySchema;
16203
+ var eventPresetSchema, eventScheduleScopeSchema, eventVenueSchema, eventCategorySchema, pricingTypeSchema, accessRestrictionSchema, eventPricingModeSchema, publicCoursePriceDisplaySchema, publicEventPriceDisplaySchema, publicEventAttendanceModeSchema, publicEventAttendanceModeAvailabilitySchema, publicEventTicketTypeAvailabilitySchema, publicEventTicketTypeSchema, publicTeamMemberSummarySchema, publicEventSchema, publicEventsArraySchema;
15740
16204
  var init_schemas2 = __esm({
15741
16205
  "../blocks/src/system/blocks/events/shared/schemas.ts"() {
15742
16206
  init_media2();
@@ -15761,6 +16225,22 @@ var init_schemas2 = __esm({
15761
16225
  pricingTypeSchema = z.enum(["free", "paid", "pass_only", "membership_only"]);
15762
16226
  accessRestrictionSchema = z.enum(["none", "category"]);
15763
16227
  eventPricingModeSchema = z.enum(["single", "ticket_types"]);
16228
+ publicCoursePriceDisplaySchema = z.discriminatedUnion("kind", [
16229
+ z.object({ kind: z.literal("free"), currency: z.string() }),
16230
+ z.object({ kind: z.literal("exact"), amount: z.number(), currency: z.string() }),
16231
+ z.object({ kind: z.literal("from"), amount: z.number(), currency: z.string() }),
16232
+ z.object({ kind: z.literal("unavailable"), currency: z.string() })
16233
+ ]);
16234
+ publicEventPriceDisplaySchema = z.discriminatedUnion("kind", [
16235
+ z.object({ kind: z.literal("free"), currency: z.string() }),
16236
+ z.object({ kind: z.literal("exact"), amount: z.number(), currency: z.string() }),
16237
+ z.object({ kind: z.literal("from"), amount: z.number(), currency: z.string() }),
16238
+ z.object({ kind: z.literal("mixed"), paidFromAmount: z.number(), currency: z.string() }),
16239
+ z.object({ kind: z.literal("pass_only") }),
16240
+ z.object({ kind: z.literal("membership_only") }),
16241
+ z.object({ kind: z.literal("unavailable"), currency: z.string() }),
16242
+ z.object({ kind: z.literal("course"), display: publicCoursePriceDisplaySchema })
16243
+ ]);
15764
16244
  publicEventAttendanceModeSchema = z.enum(["in_person", "online"]);
15765
16245
  publicEventAttendanceModeAvailabilitySchema = z.object({
15766
16246
  mode: publicEventAttendanceModeSchema,
@@ -15842,6 +16322,7 @@ var init_schemas2 = __esm({
15842
16322
  pricingType: pricingTypeSchema,
15843
16323
  price: z.number().nullable(),
15844
16324
  currency: z.string(),
16325
+ priceDisplay: publicEventPriceDisplaySchema,
15845
16326
  paymentTerms: blockBookingPaymentTermsSchema,
15846
16327
  pricingMode: eventPricingModeSchema.optional(),
15847
16328
  ticketTypes: z.array(publicEventTicketTypeSchema).optional(),
@@ -15894,7 +16375,7 @@ var init_fields = __esm({
15894
16375
  description: "Text for the event action button",
15895
16376
  required: false,
15896
16377
  multiline: false,
15897
- defaultValue: "Book now",
16378
+ defaultValue: "Book",
15898
16379
  maxLength: 40
15899
16380
  }
15900
16381
  ];
@@ -16712,6 +17193,48 @@ var init_shared4 = __esm({
16712
17193
  init_utils();
16713
17194
  }
16714
17195
  });
17196
+ function resolveEventPageSize(value, fallback = 12) {
17197
+ const candidate = typeof value === "number" ? value : typeof value === "string" && value.trim() !== "" ? Number(value.trim()) : null;
17198
+ return candidate != null && Number.isInteger(candidate) && eventPageSizeSet.has(candidate) ? candidate : fallback;
17199
+ }
17200
+ function resolveEventCalendarListPageSize(input) {
17201
+ return resolveEventPageSize(input.eventsPerPage);
17202
+ }
17203
+ function resolveEventListPaginationAction(input) {
17204
+ const label = input.loadMoreText?.trim() || input.defaultLabel || "Load more events";
17205
+ const href = input.seeAllUrl?.trim();
17206
+ if (input.paginationMode === "seeAllLink" && href) {
17207
+ return { kind: "seeAllLink", label, href };
17208
+ }
17209
+ return { kind: "loadMore", label };
17210
+ }
17211
+ var eventPageSizeValues, eventPageSizeSchema, eventPageSizeSet, eventListPaginationActionSchema;
17212
+ var init_listOptions = __esm({
17213
+ "../blocks/src/system/runtime/nodes/events/shared/listOptions.ts"() {
17214
+ eventPageSizeValues = [3, 6, 10, 12, 20, 24, 30];
17215
+ eventPageSizeSchema = z.union([
17216
+ z.literal(3),
17217
+ z.literal(6),
17218
+ z.literal(10),
17219
+ z.literal(12),
17220
+ z.literal(20),
17221
+ z.literal(24),
17222
+ z.literal(30)
17223
+ ]);
17224
+ eventPageSizeSet = new Set(eventPageSizeValues);
17225
+ eventListPaginationActionSchema = z.discriminatedUnion("kind", [
17226
+ z.object({
17227
+ kind: z.literal("loadMore"),
17228
+ label: z.string()
17229
+ }),
17230
+ z.object({
17231
+ kind: z.literal("seeAllLink"),
17232
+ label: z.string(),
17233
+ href: z.string()
17234
+ })
17235
+ ]);
17236
+ }
17237
+ });
16715
17238
  var legacyEventCardVariantSchema, eventCardVariantInputSchema, cardOrientationSchema, eventBlockKindSchema, eventSurfaceScopeSchema, eventScheduleScopeSchema2, eventListingSourceSchema, eventListingDisplaySchema, eventListingHydrationSchema, eventListingRenderSchema, eventListingBlockRuntime;
16716
17239
  var init_EventListing_interactive = __esm({
16717
17240
  "../blocks/src/system/runtime/nodes/events/EventListing.interactive.ts"() {
@@ -16722,6 +17245,7 @@ var init_EventListing_interactive = __esm({
16722
17245
  init_runtime();
16723
17246
  init_shared4();
16724
17247
  init_contract_schemas();
17248
+ init_listOptions();
16725
17249
  legacyEventCardVariantSchema = z.enum(["variant1", "variant2"]);
16726
17250
  eventCardVariantInputSchema = z.union([
16727
17251
  cardVariantRoleSchema,
@@ -16782,10 +17306,8 @@ var init_EventListing_interactive = __esm({
16782
17306
  eventListingHydrationSchema = z.object({
16783
17307
  siteId: z.string(),
16784
17308
  stage: previewStageSchema.optional(),
16785
- eventsPerPage: z.string(),
16786
- paginationMode: z.enum(["loadMore", "seeAllLink"]),
16787
- seeAllUrl: z.string().optional(),
16788
- loadMoreText: z.string(),
17309
+ eventsPerPage: eventPageSizeSchema,
17310
+ paginationAction: eventListPaginationActionSchema,
16789
17311
  showFilters: z.boolean(),
16790
17312
  showCategoryFilter: filterAutoShowSchema,
16791
17313
  showVenueFilter: z.boolean(),
@@ -16818,7 +17340,7 @@ var init_EventListing_interactive = __esm({
16818
17340
  },
16819
17341
  buildRender: (source) => {
16820
17342
  const normalizedEvents = Array.isArray(source.events) ? source.events : [];
16821
- const pageSize = parseInt(source.eventsPerPage ?? "12", 10) || 12;
17343
+ const pageSize = resolveEventPageSize(source.eventsPerPage);
16822
17344
  const initialEvents = normalizedEvents.slice(0, pageSize);
16823
17345
  const didPrefetchEvents = source.events != null;
16824
17346
  const layout = source.layout ?? "grid";
@@ -16833,7 +17355,7 @@ var init_EventListing_interactive = __esm({
16833
17355
  containerClass: getContainerClass(layout, source.columns ?? "3"),
16834
17356
  cardVariant: normalizeCardVariantRole(source.cardVariant) ?? "default",
16835
17357
  buttonVariant: source.buttonVariant ?? "primary",
16836
- buttonText: source.buttonText ?? "Book now",
17358
+ buttonText: source.buttonText ?? "Book",
16837
17359
  showVenue: source.showVenue ?? true,
16838
17360
  showMap: source.showMap ?? true,
16839
17361
  showCapacity: source.showCapacity ?? true,
@@ -16843,10 +17365,12 @@ var init_EventListing_interactive = __esm({
16843
17365
  hydration: {
16844
17366
  siteId: source.siteId,
16845
17367
  stage: source.stage,
16846
- eventsPerPage: source.eventsPerPage ?? "12",
16847
- paginationMode: source.paginationMode ?? "loadMore",
16848
- seeAllUrl: source.seeAllUrl,
16849
- loadMoreText: source.loadMoreText || "Load more",
17368
+ eventsPerPage: pageSize,
17369
+ paginationAction: resolveEventListPaginationAction({
17370
+ paginationMode: source.paginationMode,
17371
+ seeAllUrl: source.seeAllUrl,
17372
+ loadMoreText: source.loadMoreText
17373
+ }),
16850
17374
  showFilters: source.showFilters ?? false,
16851
17375
  showCategoryFilter: source.showCategoryFilter ?? "auto",
16852
17376
  showVenueFilter: source.showVenueFilter ?? false,
@@ -16872,6 +17396,7 @@ var init_EventListing_interactive = __esm({
16872
17396
  }
16873
17397
  });
16874
17398
  function buildEventCalendarDisplay(source) {
17399
+ const listLayout = source.listLayout ?? source.layout ?? "stack";
16875
17400
  return {
16876
17401
  kind: "event-calendar",
16877
17402
  displayMode: source.variant ?? source.displayMode ?? "combined",
@@ -16879,10 +17404,16 @@ function buildEventCalendarDisplay(source) {
16879
17404
  events: (source.events ?? []).slice().sort(
16880
17405
  (left, right) => new Date(left.startsAt).getTime() - new Date(right.startsAt).getTime()
16881
17406
  ),
16882
- listLayout: source.listLayout ?? source.layout ?? "stack",
17407
+ listLayout,
16883
17408
  listColumns: source.listColumns ?? source.columns ?? "3",
16884
- eventsPerPage: (source.listLayout ?? source.layout) === "compact" ? source.compactEventsPerPage ?? "10" : source.eventsPerPage ?? "12",
16885
- loadMoreText: source.loadMoreText ?? "Load more events",
17409
+ eventsPerPage: resolveEventCalendarListPageSize({
17410
+ eventsPerPage: source.eventsPerPage
17411
+ }),
17412
+ paginationAction: resolveEventListPaginationAction({
17413
+ paginationMode: source.paginationMode,
17414
+ seeAllUrl: source.seeAllUrl,
17415
+ loadMoreText: source.loadMoreText
17416
+ }),
16886
17417
  startOfWeek: source.startOfWeek ?? "monday",
16887
17418
  calendarTabViews: source.calendarTabViews ?? "both",
16888
17419
  showFilters: source.showFilters ?? true,
@@ -16899,7 +17430,7 @@ function buildEventCalendarDisplay(source) {
16899
17430
  ),
16900
17431
  filterVenueId: normalizeEventVenueId(source.filterVenueId),
16901
17432
  buttonVariant: source.buttonVariant ?? "primary",
16902
- buttonText: source.buttonText ?? "Book now",
17433
+ buttonText: source.buttonText ?? "Book",
16903
17434
  showVenue: source.showVenue ?? true,
16904
17435
  showMap: source.showMap ?? true,
16905
17436
  showCapacity: source.showCapacity ?? true,
@@ -16914,6 +17445,7 @@ var init_EventCalendar_interactive = __esm({
16914
17445
  init_islands();
16915
17446
  init_runtime();
16916
17447
  init_contract_schemas();
17448
+ init_listOptions();
16917
17449
  eventBlockKindSchema2 = z.enum(eventBlockKindValues);
16918
17450
  eventSurfaceScopeSchema2 = z.enum(eventSurfaceScopeValues);
16919
17451
  eventScheduleScopeSchema3 = z.enum(eventScheduleScopeValues);
@@ -16930,7 +17462,8 @@ var init_EventCalendar_interactive = __esm({
16930
17462
  layout: eventLayoutSchema.optional(),
16931
17463
  columns: columnOptionSchema.optional(),
16932
17464
  eventsPerPage: z.string().optional(),
16933
- compactEventsPerPage: z.string().optional(),
17465
+ paginationMode: z.enum(["loadMore", "seeAllLink"]).optional(),
17466
+ seeAllUrl: z.string().optional(),
16934
17467
  loadMoreText: z.string().optional(),
16935
17468
  startOfWeek: weekStartSchema.optional(),
16936
17469
  calendarTabViews: calendarTabViewsSchema.optional(),
@@ -16961,8 +17494,8 @@ var init_EventCalendar_interactive = __esm({
16961
17494
  events: z.array(publicEventSchema),
16962
17495
  listLayout: eventLayoutSchema,
16963
17496
  listColumns: columnOptionSchema,
16964
- eventsPerPage: z.string(),
16965
- loadMoreText: z.string(),
17497
+ eventsPerPage: eventPageSizeSchema,
17498
+ paginationAction: eventListPaginationActionSchema,
16966
17499
  startOfWeek: weekStartSchema,
16967
17500
  calendarTabViews: calendarTabViewsSchema,
16968
17501
  showFilters: z.boolean(),
@@ -26090,12 +26623,38 @@ function splitLayoutWith(children) {
26090
26623
  var splitContentColumn = heroContentWrapper(heroContentNodes, "md", "rb-w-full rb-text-left");
26091
26624
  var splitImageColumn = heroSplitImagePane();
26092
26625
  var splitLayout = splitLayoutWith([
26626
+ splitImageColumn,
26627
+ splitContentColumn
26628
+ ]);
26629
+ var splitReverseLayout = splitLayoutWith([
26093
26630
  splitContentColumn,
26094
26631
  splitImageColumn
26095
26632
  ]);
26096
- var splitReverseLayout = splitLayoutWith([
26097
- splitImageColumn,
26098
- splitContentColumn
26633
+ var heroEyebrowNode = heroCopyFragment.layout[0];
26634
+ var heroHeadlineNode = heroCopyFragment.layout[1];
26635
+ var heroSubheadlineNode = heroCopyFragment.layout[2];
26636
+ var heroCtaRowNode = heroCtaRowFragment.layout[0];
26637
+ if (!heroEyebrowNode || !heroHeadlineNode || !heroSubheadlineNode || !heroCtaRowNode) {
26638
+ throw new Error("Hero copy/CTA fragments are missing their expected layout nodes.");
26639
+ }
26640
+ var heroEditorialBottomRow = inline(
26641
+ {
26642
+ gap: "lg",
26643
+ align: "end",
26644
+ justify: "start",
26645
+ wrap: true,
26646
+ className: "rb-w-full"
26647
+ },
26648
+ [heroSubheadlineNode, heroCtaRowNode]
26649
+ );
26650
+ var splitEditorialContentColumn = heroContentWrapper(
26651
+ [heroEyebrowNode, heroHeadlineNode, heroEditorialBottomRow],
26652
+ "md",
26653
+ "rb-w-full rb-text-left"
26654
+ );
26655
+ var splitEditorialLayout = splitLayoutWith([
26656
+ splitEditorialContentColumn,
26657
+ splitImageColumn
26099
26658
  ]);
26100
26659
  var heroConfig = {
26101
26660
  id: "block.hero",
@@ -26122,7 +26681,8 @@ var heroConfig = {
26122
26681
  classic: classicLayout,
26123
26682
  micro: microLayout,
26124
26683
  split: splitLayout,
26125
- splitReverse: splitReverseLayout
26684
+ splitReverse: splitReverseLayout,
26685
+ splitEditorial: splitEditorialLayout
26126
26686
  },
26127
26687
  defaultVariant: "classic",
26128
26688
  description: "Hero section with headline, subtitle, and repeatable CTAs.",
@@ -26245,18 +26805,6 @@ function introHeading(className) {
26245
26805
  bind("content.title")
26246
26806
  );
26247
26807
  }
26248
- function introHeadingGroup(className) {
26249
- return stack(
26250
- {
26251
- gap: "sm",
26252
- className: "rb-intro-heading-group"
26253
- },
26254
- [
26255
- introHeading(className),
26256
- headingDecoration()
26257
- ]
26258
- );
26259
- }
26260
26808
  function introBody(className = "rb-prose rb-max-w-none") {
26261
26809
  return richText({ className }, bind("content.body"));
26262
26810
  }
@@ -26275,7 +26823,6 @@ function introCopyStack(options = {}) {
26275
26823
  },
26276
26824
  [
26277
26825
  introHeading(options.headingClassName ?? "rb-intro-title"),
26278
- headingDecoration(),
26279
26826
  introBody(options.bodyClassName),
26280
26827
  introCtas(options.ctaJustify)
26281
26828
  ]
@@ -26315,7 +26862,7 @@ var statementCopyLayout = styledSection({
26315
26862
  className: "rb-intro rb-intro-statement rb-grid rb-grid-cols-1 rb-gap-8 rb-md-grid-cols-2 rb-md-items-start"
26316
26863
  },
26317
26864
  [
26318
- introHeadingGroup("rb-intro-title rb-max-w-xl"),
26865
+ introHeading("rb-intro-title rb-max-w-xl"),
26319
26866
  stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
26320
26867
  introBody(),
26321
26868
  introCtas("start")
@@ -26336,7 +26883,7 @@ var statementMediaLayout = styledSection({
26336
26883
  className: "rb-intro rb-intro-statement-media rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-3 rb-lg-items-center"
26337
26884
  },
26338
26885
  [
26339
- introHeadingGroup("rb-intro-title rb-max-w-xl"),
26886
+ introHeading("rb-intro-title rb-max-w-xl"),
26340
26887
  stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
26341
26888
  introBody(),
26342
26889
  introCtas("start")
@@ -27020,20 +27567,64 @@ init_styledSection();
27020
27567
  init_defineBlock();
27021
27568
  init_fragments2();
27022
27569
  init_form_interactive();
27570
+ init_builder();
27023
27571
  var formComposition = composeFragments([
27024
27572
  { fragment: formCopyFragment },
27025
27573
  { fragment: formEmbedFragment }
27026
27574
  ]);
27027
- var formLayout = styledSection({
27028
- children: styledContainer({
27029
- rootType: "stack",
27030
- rootProps: { gap: "lg" },
27031
- children: formComposition.layout
27032
- }),
27033
- baseClass: "",
27034
- spacing: "medium",
27035
- background: "surface"
27036
- });
27575
+ function fragmentLayoutNode(layout) {
27576
+ return isNodeDefinitionArray(layout) ? el("div", {}, [...layout]) : layout;
27577
+ }
27578
+ function isNodeDefinitionArray(layout) {
27579
+ return Array.isArray(layout);
27580
+ }
27581
+ var copyLayout = fragmentLayoutNode(formCopyFragment.layout);
27582
+ var embedLayout = fragmentLayoutNode(formEmbedFragment.layout);
27583
+ var formSurface = styledContainer({
27584
+ bindFrom: "_containerStyles",
27585
+ constrainWidth: false,
27586
+ baseClassName: "rb-form-surface rb-relative rb-isolate rb-overflow-hidden",
27587
+ children: embedLayout
27588
+ });
27589
+ function createFormLayout(variant) {
27590
+ if (variant === "two-column") {
27591
+ return styledSection({
27592
+ children: el(
27593
+ "div",
27594
+ {
27595
+ className: "rb-container"
27596
+ },
27597
+ [
27598
+ el(
27599
+ "div",
27600
+ {
27601
+ className: "rb-form-two-column rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
27602
+ },
27603
+ [
27604
+ stack({ gap: "md", className: "rb-form-copy-column" }, [copyLayout]),
27605
+ formSurface
27606
+ ]
27607
+ )
27608
+ ]
27609
+ ),
27610
+ baseClass: "",
27611
+ spacing: "medium",
27612
+ background: "surface"
27613
+ });
27614
+ }
27615
+ return styledSection({
27616
+ children: styledContainer({
27617
+ rootType: "stack",
27618
+ rootProps: { gap: "lg" },
27619
+ children: formComposition.layout
27620
+ }),
27621
+ baseClass: "",
27622
+ spacing: "medium",
27623
+ background: "surface"
27624
+ });
27625
+ }
27626
+ var formLayout = createFormLayout("default");
27627
+ var twoColumnFormLayout = createFormLayout("two-column");
27037
27628
  var dataLoaders = buildFragmentDataLoaders(formComposition);
27038
27629
  var formManifest = createBlockManifest({
27039
27630
  id: "block.form",
@@ -27046,6 +27637,23 @@ var formManifest = createBlockManifest({
27046
27637
  { fragment: formEmbedFragment }
27047
27638
  ],
27048
27639
  layout: formLayout,
27640
+ variants: {
27641
+ default: formLayout,
27642
+ "two-column": twoColumnFormLayout
27643
+ },
27644
+ defaultVariant: "default",
27645
+ variantOptions: {
27646
+ default: {
27647
+ label: "Stacked",
27648
+ description: "Copy above the form.",
27649
+ icon: "PanelTop"
27650
+ },
27651
+ "two-column": {
27652
+ label: "Two column",
27653
+ description: "Copy on the left and form on the right.",
27654
+ icon: "Columns2"
27655
+ }
27656
+ },
27049
27657
  styleTokens: { background: "surface", typography: "body", spacing: "md" },
27050
27658
  behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: false },
27051
27659
  category: "interactive",
@@ -27078,15 +27686,14 @@ init_fragments2();
27078
27686
  init_faqAccordion();
27079
27687
  init_builder();
27080
27688
  init_boxStyles();
27081
- function fragmentLayoutNode(layout) {
27082
- return isNodeDefinitionArray(layout) ? el("div", {}, [...layout]) : layout;
27689
+ function fragmentLayoutNode2(layout) {
27690
+ return isNodeDefinitionArray2(layout) ? el("div", {}, [...layout]) : layout;
27083
27691
  }
27084
- function isNodeDefinitionArray(layout) {
27692
+ function isNodeDefinitionArray2(layout) {
27085
27693
  return Array.isArray(layout);
27086
27694
  }
27087
- var headingLayout = fragmentLayoutNode(faqHeadingFragment.layout);
27088
- var accordionLayout = fragmentLayoutNode(faqAccordionFragment.layout);
27089
- var decoratedHeadingLayout = fragmentLayoutNode(decoratedFaqHeadingLayout);
27695
+ var headingLayout = fragmentLayoutNode2(faqHeadingFragment.layout);
27696
+ var accordionLayout = fragmentLayoutNode2(faqAccordionFragment.layout);
27090
27697
  var questionColumnsAccordionLayout = createFaqAccordionLayout({
27091
27698
  rootClassName: "accordion-root rb-faq-question-columns rb-grid rb-grid-cols-1 rb-gap-4 rb-lg-grid-cols-2"
27092
27699
  });
@@ -27094,7 +27701,7 @@ var defaultLayout = styledSection({
27094
27701
  children: styledContainer({
27095
27702
  baseClassName: "rb-relative rb-isolate",
27096
27703
  children: stack({ gap: "xl", className: "rb-w-full rb-max-w-4xl rb-mx-auto" }, [
27097
- decoratedHeadingLayout,
27704
+ headingLayout,
27098
27705
  accordionLayout
27099
27706
  ])
27100
27707
  }),
@@ -27122,7 +27729,7 @@ var questionColumnsLayout = styledSection({
27122
27729
  children: stack(
27123
27730
  { gap: "xl", className: "rb-w-full" },
27124
27731
  [
27125
- decoratedHeadingLayout,
27732
+ headingLayout,
27126
27733
  questionColumnsAccordionLayout
27127
27734
  ]
27128
27735
  )
@@ -27461,7 +28068,7 @@ function resolveHeroContentAlignment(content) {
27461
28068
  const raw = readHeroLayoutString(content, "contentAlignment");
27462
28069
  if (raw === "left" || raw === "center" || raw === "right") return raw;
27463
28070
  const variant = resolveHeroVariant(content);
27464
- if (variant === "split" || variant === "splitReverse") return "left";
28071
+ if (variant === "split" || variant === "splitReverse" || variant === "splitEditorial") return "left";
27465
28072
  return "center";
27466
28073
  }
27467
28074
  function resolveHeroVerticalAlignment(content) {
@@ -27471,7 +28078,7 @@ function resolveHeroVerticalAlignment(content) {
27471
28078
  const minHeight = sectionStyles?.minHeight;
27472
28079
  if (minHeight === "banner" || minHeight === "hero" || minHeight === "immersive") return "center";
27473
28080
  const variant = resolveHeroVariant(content);
27474
- if (variant === "split" || variant === "splitReverse") return "center";
28081
+ if (variant === "split" || variant === "splitReverse" || variant === "splitEditorial") return "center";
27475
28082
  return "top";
27476
28083
  }
27477
28084
  function resolveHeroContentMaxWidth(content) {
@@ -29022,7 +29629,7 @@ var floatingLayout = inline(
29022
29629
  ),
29023
29630
  fallback: `rb-header-layout header-floating-container rb-absolute rb-left-1/2 rb-top-4 ${desktopOnlyDisplay("flex")} rb-w-calc-100-minus-2rem rb-max-w-7xl rb-translate-x-neg-1/2 rb-items-start rb-gap-6 rb-px-6`
29024
29631
  }),
29025
- align: "center"
29632
+ align: "start"
29026
29633
  },
29027
29634
  [
29028
29635
  logoRow,
@@ -29558,7 +30165,6 @@ var splitHeading = stack(
29558
30165
  when("content.heading"),
29559
30166
  bind("content.heading")
29560
30167
  ),
29561
- headingDecoration(),
29562
30168
  text(
29563
30169
  {
29564
30170
  as: "p",
@@ -30119,7 +30725,6 @@ var sectionHeading = stack(
30119
30725
  when("content.title"),
30120
30726
  bind("content.title")
30121
30727
  ),
30122
- headingDecoration(),
30123
30728
  richText(
30124
30729
  {
30125
30730
  className: "rb-feature-cards-description rb-prose rb-mx-auto rb-max-w-none",
@@ -30152,6 +30757,17 @@ var featureCard = styledCard(
30152
30757
  null,
30153
30758
  bind("card.icon")
30154
30759
  ),
30760
+ // Auto-numbered marker (01, 02, …). Always in the DOM; CSS shows it only
30761
+ // when cardMarker === 'numbers' and fills it via a counter. Its own class
30762
+ // (not the icon zone) so the icon-zone collapse behaviour is unaffected.
30763
+ el(
30764
+ "div",
30765
+ {
30766
+ className: "rb-feature-card-number-zone",
30767
+ "aria-hidden": "true"
30768
+ },
30769
+ null
30770
+ ),
30155
30771
  text(
30156
30772
  {
30157
30773
  as: "h3",
@@ -30191,6 +30807,12 @@ var cardsLayout = styledSection({
30191
30807
  sectionHeading,
30192
30808
  grid3(
30193
30809
  {
30810
+ className: "rb-feature-cards-grid",
30811
+ // Drives which marker shows (icons / numbers / none) via CSS; the
30812
+ // fallback keeps legacy content (no cardMarker) showing icons.
30813
+ "data-card-marker": {
30814
+ $bind: { from: "content.cardMarker", fallback: "icons" }
30815
+ },
30194
30816
  cols: {
30195
30817
  $bind: {
30196
30818
  from: "content.columns",
@@ -30318,6 +30940,20 @@ var featureCardsConfig = {
30318
30940
  ]
30319
30941
  }
30320
30942
  },
30943
+ {
30944
+ id: "cardMarker",
30945
+ type: "select",
30946
+ label: "Card marker",
30947
+ required: false,
30948
+ defaultValue: "icons",
30949
+ multiple: false,
30950
+ options: [
30951
+ { value: "icons", label: "Icons" },
30952
+ { value: "numbers", label: "Numbers (01, 02, \u2026)" },
30953
+ { value: "none", label: "None" }
30954
+ ],
30955
+ ui: { intent: "display" }
30956
+ },
30321
30957
  {
30322
30958
  id: "_iconTreatment",
30323
30959
  type: "select",
@@ -31786,7 +32422,7 @@ var eventListingLayout = [
31786
32422
  loadMoreText: { $bind: { from: "content.loadMoreText", fallback: "Load more events" } },
31787
32423
  cardVariant: { $bind: { from: "content.cardVariant", fallback: "default" } },
31788
32424
  buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
31789
- buttonText: { $bind: { from: "content.buttonText", fallback: "Book now" } },
32425
+ buttonText: { $bind: { from: "content.buttonText", fallback: "Book" } },
31790
32426
  showVenue: { $bind: { from: "content.showVenue" } },
31791
32427
  showMap: { $bind: { from: "content.showMap" } },
31792
32428
  showCapacity: { $bind: { from: "content.showCapacity" } },
@@ -31925,10 +32561,16 @@ var eventCalendarLayout = [
31925
32561
  layout: { $bind: { from: "content.layout" } },
31926
32562
  columns: { $bind: { from: "content.columns" } },
31927
32563
  eventsPerPage: {
31928
- $bind: { from: "content.eventsPerPage", fallback: "12" }
32564
+ $bind: { from: "content.eventsPerPage" }
31929
32565
  },
31930
- compactEventsPerPage: {
31931
- $bind: { from: "content.compactEventsPerPage", fallback: "10" }
32566
+ paginationMode: {
32567
+ $bind: { from: "content.paginationMode", fallback: "loadMore" }
32568
+ },
32569
+ seeAllUrl: {
32570
+ $bind: {
32571
+ from: "content.seeAllUrl",
32572
+ transforms: [{ id: "links.resolve" }]
32573
+ }
31932
32574
  },
31933
32575
  loadMoreText: {
31934
32576
  $bind: {
@@ -31981,7 +32623,7 @@ var eventCalendarLayout = [
31981
32623
  $bind: { from: "content.buttonVariant", fallback: "primary" }
31982
32624
  },
31983
32625
  buttonText: {
31984
- $bind: { from: "content.buttonText", fallback: "Book now" }
32626
+ $bind: { from: "content.buttonText", fallback: "Book" }
31985
32627
  },
31986
32628
  emptyMessage: { $bind: { from: "content.emptyMessage" } }
31987
32629
  })
@@ -32055,15 +32697,18 @@ var eventCalendarAdditionalFields = [
32055
32697
  {
32056
32698
  id: "eventsPerPage",
32057
32699
  type: "select",
32058
- label: "Events per page (cards)",
32059
- description: "Number of events to load initially in card layouts",
32700
+ label: "Events per page",
32701
+ description: "Number of events to load initially",
32060
32702
  required: false,
32061
32703
  multiple: false,
32062
32704
  defaultValue: "12",
32063
32705
  options: [
32064
32706
  { value: "6", label: "6" },
32707
+ { value: "10", label: "10" },
32065
32708
  { value: "12", label: "12" },
32066
- { value: "24", label: "24" }
32709
+ { value: "20", label: "20" },
32710
+ { value: "24", label: "24" },
32711
+ { value: "30", label: "30" }
32067
32712
  ],
32068
32713
  ui: {
32069
32714
  intent: "display",
@@ -32071,33 +32716,42 @@ var eventCalendarAdditionalFields = [
32071
32716
  }
32072
32717
  },
32073
32718
  {
32074
- id: "compactEventsPerPage",
32719
+ id: "paginationMode",
32075
32720
  type: "select",
32076
- label: "Events per page (compact)",
32077
- description: "Number of events to show per page in compact layout",
32721
+ label: "More events",
32722
+ description: "How to access events beyond the initial list",
32078
32723
  required: false,
32079
32724
  multiple: false,
32080
- defaultValue: "10",
32725
+ defaultValue: "loadMore",
32081
32726
  options: [
32082
- { value: "10", label: "10" },
32083
- { value: "20", label: "20" },
32084
- { value: "30", label: "30" }
32727
+ { value: "loadMore", label: "Load more button" },
32728
+ { value: "seeAllLink", label: "Link to another page" }
32085
32729
  ],
32086
32730
  ui: {
32087
32731
  intent: "display",
32088
- visibleWhen: { field: "listLayout", equals: "compact" }
32732
+ visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
32733
+ }
32734
+ },
32735
+ {
32736
+ id: "seeAllUrl",
32737
+ type: "link",
32738
+ label: "See all destination",
32739
+ required: false,
32740
+ ui: {
32741
+ intent: "display",
32742
+ visibleWhen: { field: "paginationMode", equals: "seeAllLink" }
32089
32743
  }
32090
32744
  },
32091
32745
  {
32092
32746
  id: "loadMoreText",
32093
32747
  type: "text",
32094
- label: "Load more button text",
32095
- description: "Text for the load more button",
32748
+ label: "CTA button text",
32749
+ description: "Text for the load more button or linked CTA",
32096
32750
  required: false,
32097
32751
  multiline: false,
32098
32752
  defaultValue: "Load more events",
32099
32753
  ui: {
32100
- intent: "content",
32754
+ intent: "display",
32101
32755
  visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
32102
32756
  }
32103
32757
  },
@@ -32456,6 +33110,351 @@ var eventCalendarBlockDefinition = {
32456
33110
  runtime: eventCalendarBlockRuntime
32457
33111
  };
32458
33112
 
33113
+ // ../blocks/src/system/blocks/offerings-preview/index.ts
33114
+ init_builder();
33115
+ init_styledSection();
33116
+ init_fragments();
33117
+ init_boxStyles();
33118
+ init_defineBlock();
33119
+ init_shared2();
33120
+ init_shared3();
33121
+
33122
+ // ../blocks/src/system/blocks/offerings-preview/model.ts
33123
+ var OFFERINGS_PREVIEW_DEFAULT_ITEM_LIMIT = "3";
33124
+ var OFFERINGS_PREVIEW_DEFAULT_BUTTON_TEXT = "Book";
33125
+ var OFFERINGS_PREVIEW_DEFAULT_EMPTY_MESSAGE = "Nothing scheduled just yet.";
33126
+ var OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS = [
33127
+ {
33128
+ preset: "class",
33129
+ sourceKey: "eventPreset:class",
33130
+ dataKey: "classEvents",
33131
+ label: "Classes"
33132
+ },
33133
+ {
33134
+ preset: "workshop",
33135
+ sourceKey: "eventPreset:workshop",
33136
+ dataKey: "workshopEvents",
33137
+ label: "Workshops"
33138
+ },
33139
+ {
33140
+ preset: "retreat",
33141
+ sourceKey: "eventPreset:retreat",
33142
+ dataKey: "retreatEvents",
33143
+ label: "Retreats"
33144
+ },
33145
+ {
33146
+ preset: "performance",
33147
+ sourceKey: "eventPreset:performance",
33148
+ dataKey: "performanceEvents",
33149
+ label: "Performances"
33150
+ }
33151
+ ];
33152
+ OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => definition.preset);
33153
+ [
33154
+ ...OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => definition.sourceKey),
33155
+ "course"
33156
+ ];
33157
+ Object.fromEntries(
33158
+ OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [
33159
+ definition.sourceKey,
33160
+ { kind: "eventPreset", preset: definition.preset }
33161
+ ])
33162
+ );
33163
+
33164
+ // ../blocks/src/system/blocks/offerings-preview/index.ts
33165
+ var publicRouteCandidatesSchema = z.object({
33166
+ routes: z.array(z.object({
33167
+ entityId: z.string(),
33168
+ path: z.string(),
33169
+ title: z.string(),
33170
+ kind: z.enum(["page", "content"]),
33171
+ contentTypeKey: z.string().nullable().optional()
33172
+ }))
33173
+ });
33174
+ var groupOverrideFields = [
33175
+ {
33176
+ id: "sourceKey",
33177
+ type: "select",
33178
+ label: "Offering",
33179
+ required: true,
33180
+ multiple: false,
33181
+ options: [
33182
+ ...OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => ({
33183
+ value: definition.sourceKey,
33184
+ label: definition.label
33185
+ })),
33186
+ { value: "course", label: "Courses" }
33187
+ ],
33188
+ ui: { intent: "behavior" }
33189
+ },
33190
+ {
33191
+ id: "title",
33192
+ type: "text",
33193
+ label: "Title",
33194
+ required: false,
33195
+ multiline: false,
33196
+ maxLength: 80,
33197
+ ui: { intent: "content" }
33198
+ },
33199
+ {
33200
+ id: "intro",
33201
+ type: "text",
33202
+ label: "Intro",
33203
+ required: false,
33204
+ multiline: true,
33205
+ maxLength: 220,
33206
+ ui: { intent: "content" }
33207
+ },
33208
+ {
33209
+ id: "hidden",
33210
+ type: "boolean",
33211
+ label: "Hide this card",
33212
+ required: false,
33213
+ defaultValue: false,
33214
+ ui: { intent: "display" }
33215
+ },
33216
+ {
33217
+ id: "presentation",
33218
+ type: "select",
33219
+ label: "Items",
33220
+ required: false,
33221
+ multiple: false,
33222
+ defaultValue: "compact-list",
33223
+ options: [
33224
+ { value: "compact-list", label: "Compact list" },
33225
+ { value: "single-card", label: "Single card" }
33226
+ ],
33227
+ ui: { intent: "display" }
33228
+ },
33229
+ {
33230
+ id: "ctaMode",
33231
+ type: "select",
33232
+ label: "Card link",
33233
+ required: false,
33234
+ multiple: false,
33235
+ defaultValue: "auto",
33236
+ options: [
33237
+ { value: "auto", label: "Auto" },
33238
+ { value: "custom", label: "Custom link" },
33239
+ { value: "hidden", label: "Hidden" }
33240
+ ],
33241
+ ui: { intent: "behavior" }
33242
+ },
33243
+ {
33244
+ id: "ctaLabel",
33245
+ type: "text",
33246
+ label: "Card link label",
33247
+ required: false,
33248
+ multiline: false,
33249
+ maxLength: 40,
33250
+ ui: { intent: "content" }
33251
+ },
33252
+ {
33253
+ id: "ctaHref",
33254
+ type: "text",
33255
+ label: "Custom card link",
33256
+ required: false,
33257
+ multiline: false,
33258
+ maxLength: 160,
33259
+ ui: { intent: "behavior" }
33260
+ }
33261
+ ];
33262
+ var offeringsPreviewFields = [
33263
+ ...sectionHeaderFields("Offerings"),
33264
+ {
33265
+ id: "itemLimit",
33266
+ type: "select",
33267
+ label: "Items per card",
33268
+ required: false,
33269
+ multiple: false,
33270
+ defaultValue: OFFERINGS_PREVIEW_DEFAULT_ITEM_LIMIT,
33271
+ options: [
33272
+ { value: "1", label: "1 item" },
33273
+ { value: "2", label: "2 items" },
33274
+ { value: "3", label: "3 items" },
33275
+ { value: "4", label: "4 items" },
33276
+ { value: "5", label: "5 items" },
33277
+ { value: "6", label: "6 items" }
33278
+ ],
33279
+ ui: { intent: "display" }
33280
+ },
33281
+ {
33282
+ id: "groupOverrides",
33283
+ type: "repeater",
33284
+ label: "Card overrides",
33285
+ description: "Edit card copy, order, or visibility for enabled offering presets.",
33286
+ required: false,
33287
+ maxItems: 5,
33288
+ itemLabel: "Offering card",
33289
+ itemLabelSource: "title",
33290
+ allowConversion: false,
33291
+ ui: { intent: "content" },
33292
+ schema: { fields: groupOverrideFields }
33293
+ },
33294
+ {
33295
+ id: "buttonVariant",
33296
+ type: "select",
33297
+ label: "Item button style",
33298
+ required: false,
33299
+ multiple: false,
33300
+ defaultValue: "primary",
33301
+ options: [
33302
+ { value: "primary", label: "Primary" },
33303
+ { value: "secondary", label: "Secondary" },
33304
+ { value: "outline", label: "Outline" },
33305
+ { value: "link", label: "Link" }
33306
+ ],
33307
+ ui: { intent: "display" }
33308
+ },
33309
+ {
33310
+ id: "buttonText",
33311
+ type: "text",
33312
+ label: "Item button text",
33313
+ required: false,
33314
+ multiline: false,
33315
+ defaultValue: OFFERINGS_PREVIEW_DEFAULT_BUTTON_TEXT,
33316
+ maxLength: 40,
33317
+ ui: { intent: "content" }
33318
+ },
33319
+ {
33320
+ id: "emptyMessage",
33321
+ type: "text",
33322
+ label: "Empty card message",
33323
+ required: false,
33324
+ multiline: false,
33325
+ defaultValue: OFFERINGS_PREVIEW_DEFAULT_EMPTY_MESSAGE,
33326
+ maxLength: 120,
33327
+ ui: { intent: "content" }
33328
+ },
33329
+ cardStylesField({
33330
+ id: "_cardStyles",
33331
+ label: "Offering card styles"
33332
+ }),
33333
+ sectionStylesField({
33334
+ id: "_sectionStyles",
33335
+ label: "Section styles",
33336
+ renderInHeader: false
33337
+ })
33338
+ ];
33339
+ var offeringsPreviewEventDataBindings = Object.fromEntries(
33340
+ OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [
33341
+ definition.dataKey,
33342
+ { $bind: { from: `data.${definition.dataKey}` } }
33343
+ ])
33344
+ );
33345
+ var offeringsPreviewLayout = [
33346
+ styledSection({
33347
+ children: sectionContainer([
33348
+ text(
33349
+ { as: "h2", className: "rb-text-center" },
33350
+ bind("content.heading"),
33351
+ when("content.heading")
33352
+ ),
33353
+ richText(
33354
+ { className: "rb-prose rb-max-w-none" },
33355
+ bind("content.description"),
33356
+ when("content.description")
33357
+ ),
33358
+ el("offerings-preview", {
33359
+ bookingOfferingPresets: {
33360
+ $bind: { from: "$root.bookingOfferingPresets", fallback: [] }
33361
+ },
33362
+ groupOverrides: { $bind: { from: "content.groupOverrides", fallback: [] } },
33363
+ cardStyles: { $bind: { from: "content._cardStyles" } },
33364
+ itemLimit: { $bind: { from: "content.itemLimit", fallback: OFFERINGS_PREVIEW_DEFAULT_ITEM_LIMIT } },
33365
+ buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
33366
+ buttonText: { $bind: { from: "content.buttonText", fallback: OFFERINGS_PREVIEW_DEFAULT_BUTTON_TEXT } },
33367
+ emptyMessage: {
33368
+ $bind: {
33369
+ from: "content.emptyMessage",
33370
+ fallback: OFFERINGS_PREVIEW_DEFAULT_EMPTY_MESSAGE
33371
+ }
33372
+ },
33373
+ previewStage: { $bind: { from: "$root.previewStage", fallback: "published" } },
33374
+ routeCandidates: { $bind: { from: "data.routeCandidates" } },
33375
+ courses: { $bind: { from: "data.courses" } },
33376
+ ...offeringsPreviewEventDataBindings
33377
+ })
33378
+ ], { gap: "lg" }),
33379
+ baseClass: "",
33380
+ spacing: "comfortable"
33381
+ })
33382
+ ];
33383
+ var offeringsPreviewConfig = {
33384
+ id: "block.offerings-preview",
33385
+ version: "1.0.0",
33386
+ title: "Offerings Preview",
33387
+ titleSource: "heading",
33388
+ description: "Show enabled offering presets as compact cards",
33389
+ skipSectionStyles: true,
33390
+ additionalFields: offeringsPreviewFields,
33391
+ styleTokens: { background: "surface", typography: "body", spacing: "md" },
33392
+ behaviours: {
33393
+ supportsThemeSwitching: true,
33394
+ inlineEditing: false,
33395
+ animation: false,
33396
+ paletteHidden: false
33397
+ },
33398
+ category: "content",
33399
+ tags: ["offerings", "events", "classes", "workshops", "retreats"],
33400
+ icon: "PanelsTopLeft",
33401
+ layout: offeringsPreviewLayout
33402
+ };
33403
+ var offeringsPreviewManifest = createBlockManifest(offeringsPreviewConfig);
33404
+ var optionalPublicEventsArraySchema = publicEventsArraySchema.optional();
33405
+ var offeringsPreviewEventDataSchemas = Object.fromEntries(
33406
+ OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [
33407
+ definition.dataKey,
33408
+ optionalPublicEventsArraySchema
33409
+ ])
33410
+ );
33411
+ var offeringsPreviewEventDataLoaders = Object.fromEntries(
33412
+ OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [
33413
+ definition.dataKey,
33414
+ eventPresetLoader(definition.preset)
33415
+ ])
33416
+ );
33417
+ var offeringsPreviewBlockDefinition = {
33418
+ manifest: offeringsPreviewManifest,
33419
+ dataSchemas: {
33420
+ ...offeringsPreviewEventDataSchemas,
33421
+ routeCandidates: publicRouteCandidatesSchema.optional(),
33422
+ courses: publicCoursesArraySchema.optional()
33423
+ },
33424
+ dataLoaders: {
33425
+ ...offeringsPreviewEventDataLoaders,
33426
+ routeCandidates: {
33427
+ endpoint: "listPublicRouteCandidates",
33428
+ params: {},
33429
+ mode: "server"
33430
+ },
33431
+ courses: {
33432
+ endpoint: "listPublicCourses",
33433
+ params: {
33434
+ siteId: { $bind: { from: "$root.siteId" } },
33435
+ limit: { $bind: { from: "content.itemLimit", fallback: OFFERINGS_PREVIEW_DEFAULT_ITEM_LIMIT } },
33436
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } }
33437
+ },
33438
+ mode: "server"
33439
+ }
33440
+ }
33441
+ };
33442
+ function eventPresetLoader(preset2) {
33443
+ return {
33444
+ endpoint: "listPublicEvents",
33445
+ params: {
33446
+ siteId: { $bind: { from: "$root.siteId" } },
33447
+ limit: { $bind: { from: "content.itemLimit", fallback: OFFERINGS_PREVIEW_DEFAULT_ITEM_LIMIT } },
33448
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
33449
+ detailLevel: "listing",
33450
+ readProfile: "listing-card",
33451
+ kind: "events",
33452
+ eventPresets: preset2
33453
+ },
33454
+ mode: "server"
33455
+ };
33456
+ }
33457
+
32459
33458
  // ../blocks/src/system/blocks/embed.ts
32460
33459
  init_schema2();
32461
33460
  init_builder();
@@ -32596,7 +33595,7 @@ var embedFields = [
32596
33595
  ui: { intent: "display" }
32597
33596
  })
32598
33597
  ];
32599
- var embedLayout = styledSection({
33598
+ var embedLayout2 = styledSection({
32600
33599
  children: sectionContainer([
32601
33600
  // Heading
32602
33601
  text(
@@ -32684,7 +33683,7 @@ var embedManifest = createBlockManifest({
32684
33683
  category: "content",
32685
33684
  titleSource: "heading",
32686
33685
  additionalFields: embedFields,
32687
- layout: embedLayout,
33686
+ layout: embedLayout2,
32688
33687
  description: "Embed content entries from any content type. Sites provide custom layouts via block overrides.",
32689
33688
  tags: ["embed", "content", "dynamic", "collection", "entries", "listing"],
32690
33689
  icon: "LayoutList",
@@ -35449,6 +36448,13 @@ function eventListCapable() {
35449
36448
  eventListTreatments
35450
36449
  });
35451
36450
  }
36451
+ function offeringsPreviewCapable() {
36452
+ return declareBlockDesignCapability({
36453
+ sectionSurfaces: "supported",
36454
+ contentFrames: ["plain"],
36455
+ itemSurfaces: "supported"
36456
+ });
36457
+ }
35452
36458
  function defaultBoundaryBias(visualWeight) {
35453
36459
  return visualWeight === "featured" || visualWeight === "immersive" ? "clear" : "soft";
35454
36460
  }
@@ -35562,6 +36568,13 @@ var systemBlockDefinitionsRaw = [
35562
36568
  weight: "featured",
35563
36569
  bias: "clear",
35564
36570
  surfaces: heroSectionSurfaces
36571
+ }),
36572
+ layoutProfile({
36573
+ variantKey: "splitEditorial",
36574
+ family: "split",
36575
+ weight: "featured",
36576
+ bias: "clear",
36577
+ surfaces: heroSectionSurfaces
35565
36578
  })
35566
36579
  ]
35567
36580
  })),
@@ -35656,7 +36669,10 @@ var systemBlockDefinitionsRaw = [
35656
36669
  })),
35657
36670
  withDesignCapability("block.form", formBlockDefinition, panelCapable(), defineBlockDesignMetadata({
35658
36671
  flow: conversionFlow,
35659
- layoutProfiles: [layoutProfile({ variantKey: "default", family: "form", weight: "standard" })]
36672
+ layoutProfiles: [
36673
+ layoutProfile({ variantKey: "default", family: "form", weight: "standard" }),
36674
+ layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
36675
+ ]
35660
36676
  })),
35661
36677
  withDesignCapability("block.faq", faqBlockDefinition, withEyebrowCapability(declareBlockDesignCapability({
35662
36678
  sectionSurfaces: "supported",
@@ -35685,7 +36701,10 @@ var systemBlockDefinitionsRaw = [
35685
36701
  contentFrames: ["plain", "panel"],
35686
36702
  itemSurfaces: "supported",
35687
36703
  testimonialCardTreatments: ["default", "statement", "non-carded", "accent-quote", "editorial-serif-quote"],
35688
- headingDecorations: ["short-center-rule"]
36704
+ headingDecorationCapability: {
36705
+ kind: "supported",
36706
+ families: ["short-center-rule"]
36707
+ }
35689
36708
  }), defineBlockDesignMetadata({
35690
36709
  flow: proofFlow,
35691
36710
  layoutProfiles: [
@@ -35788,6 +36807,10 @@ var systemBlockDefinitionsRaw = [
35788
36807
  layoutProfile({ variantKey: "timetable", family: "stack", weight: "standard" })
35789
36808
  ]
35790
36809
  })),
36810
+ withDesignCapability("block.offerings-preview", offeringsPreviewBlockDefinition, offeringsPreviewCapable(), defineBlockDesignMetadata({
36811
+ flow: offeringsFlow,
36812
+ layoutProfiles: [layoutProfile({ variantKey: "cards", family: "grid", weight: "standard" })]
36813
+ })),
35791
36814
  // Friendly wrapper blocks
35792
36815
  withDesignCapability("block.team-members", teamMembersBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
35793
36816
  flow: proofFlow,
@@ -36102,6 +37125,7 @@ function gradientToCss(config2, tokens) {
36102
37125
 
36103
37126
  // ../blocks/src/system/transforms/registry/background.ts
36104
37127
  init_themeColorResolution();
37128
+ init_sectionForegroundStyles();
36105
37129
 
36106
37130
  // ../blocks/src/system/helpers/backgroundMedia.ts
36107
37131
  init_media2();
@@ -36329,32 +37353,8 @@ var backgroundTransforms = [
36329
37353
  {
36330
37354
  id: "background.resolveColorsStyle",
36331
37355
  kind: "formatter",
36332
- summary: "Resolve text + heading colors from a background object into scoped CSS vars",
36333
- run: (value, _options, context) => {
36334
- if (!value || typeof value !== "object") {
36335
- return {};
36336
- }
36337
- const input = value;
36338
- const textColor = isString(input.textColor) ? input.textColor.trim() : null;
36339
- const headingColor = isString(input.headingColor) ? input.headingColor.trim() : null;
36340
- const style = {};
36341
- if (textColor) {
36342
- const resolvedText = resolveBackgroundColorValue(textColor, context);
36343
- if (resolvedText) {
36344
- style.color = resolvedText;
36345
- style["--section-text-color"] = resolvedText;
36346
- if (headingColor) {
36347
- const resolvedHeading = resolveBackgroundColorValue(headingColor, context);
36348
- if (resolvedHeading) {
36349
- style["--section-heading-color"] = resolvedHeading;
36350
- }
36351
- } else {
36352
- style["--section-heading-color"] = resolvedText;
36353
- }
36354
- }
36355
- }
36356
- return style;
36357
- }
37356
+ summary: "Resolve section foreground colors from a background object into scoped CSS vars",
37357
+ run: (value, _options, context) => resolveSectionForegroundStyles(value, context)
36358
37358
  },
36359
37359
  {
36360
37360
  id: "background.resolveAllowOverflow",
@@ -38497,6 +39497,7 @@ var SUPPORTED_LOADER_ENDPOINTS = [
38497
39497
  "listPublicEvents",
38498
39498
  "getPublicEventDetails",
38499
39499
  "listPublicCourses",
39500
+ "listPublicRouteCandidates",
38500
39501
  "listPublicTeamMembers",
38501
39502
  "listPublicProducts",
38502
39503
  "listPublicPasses",
@@ -40152,6 +41153,7 @@ var SYSTEM_BLOCK_KINDS = [
40152
41153
  "block.event-spotlight",
40153
41154
  "block.event-listing",
40154
41155
  "block.event-calendar",
41156
+ "block.offerings-preview",
40155
41157
  // Commerce blocks
40156
41158
  "block.shop",
40157
41159
  "block.product-list",
@@ -48444,6 +49446,7 @@ async function loadCliConfig(configPath) {
48444
49446
  const contentDir = typeof configObj.contentDir === "string" ? configObj.contentDir : "./content";
48445
49447
  const syncConfig = configObj.sync;
48446
49448
  const blockFieldExtensions = configObj.blockFieldExtensions;
49449
+ const customBlocks = Array.isArray(configObj.customBlocks) ? configObj.customBlocks : void 0;
48447
49450
  const activeTheme = typeof configObj.activeTheme === "string" ? configObj.activeTheme : "current";
48448
49451
  return {
48449
49452
  contentDir,
@@ -48451,6 +49454,7 @@ async function loadCliConfig(configPath) {
48451
49454
  existingEntries: syncConfig?.existingEntries ?? DEFAULT_SYNC_CONFIG.existingEntries
48452
49455
  },
48453
49456
  blockFieldExtensions,
49457
+ customBlocks,
48454
49458
  activeTheme
48455
49459
  };
48456
49460
  } catch (error) {
@@ -53638,10 +54642,11 @@ function navigationRole(menu) {
53638
54642
  return void 0;
53639
54643
  }
53640
54644
  function navigationItemForCommand(item) {
54645
+ const link2 = item.link?.kind === "dropdown" ? void 0 : item.link;
53641
54646
  return {
53642
54647
  label: item.label,
53643
54648
  ...item.isCta ? { isCta: true } : {},
53644
- ...item.link ? { link: item.link } : {},
54649
+ ...link2 ? { link: link2 } : {},
53645
54650
  ...item.children ? { children: item.children.map(navigationItemForCommand) } : {}
53646
54651
  };
53647
54652
  }
@@ -53867,7 +54872,8 @@ function compilePagePushCommands(input) {
53867
54872
  pageDiff,
53868
54873
  pageIdentifier,
53869
54874
  localPage: pagesByIdentifier.get(pageIdentifier),
53870
- blockFieldExtensions: input.blockFieldExtensions
54875
+ blockFieldExtensions: input.blockFieldExtensions,
54876
+ customBlocks: input.customBlocks
53871
54877
  });
53872
54878
  if (!commandResult.ok) return commandResult;
53873
54879
  commandBindings.push(...commandResult.value.commandBindings);
@@ -53990,6 +54996,7 @@ function preflightPageCommandPlanAsReport(input) {
53990
54996
  kind: command.input.type,
53991
54997
  data: command.input.props ?? {},
53992
54998
  blockFieldExtensions: input.blockFieldExtensions,
54999
+ customBlocks: input.customBlocks,
53993
55000
  invalidContentAsError: true
53994
55001
  });
53995
55002
  if (validation.ok) {
@@ -54101,7 +55108,8 @@ function pageCommandsForDiff(input) {
54101
55108
  pageRef,
54102
55109
  blocksRef,
54103
55110
  includePageRefDependency: upsertedInBatch,
54104
- blockFieldExtensions: input.blockFieldExtensions
55111
+ blockFieldExtensions: input.blockFieldExtensions,
55112
+ customBlocks: input.customBlocks
54105
55113
  });
54106
55114
  if (!blockCommands.ok) return blockCommands;
54107
55115
  commandBindings.push(...blockCommands.value.commandBindings);
@@ -54194,7 +55202,8 @@ function blockCommandsForDiff(input) {
54194
55202
  blockIdentifier: localBlockIdentifier,
54195
55203
  kind: localBlock.kind,
54196
55204
  data: localBlock.data,
54197
- blockFieldExtensions: input.blockFieldExtensions
55205
+ blockFieldExtensions: input.blockFieldExtensions,
55206
+ customBlocks: input.customBlocks
54198
55207
  });
54199
55208
  if (validation.ok) {
54200
55209
  warnings.push(...validation.value);
@@ -54245,8 +55254,10 @@ function blockCommandsForDiff(input) {
54245
55254
  }
54246
55255
  function validateLocalBlock(input) {
54247
55256
  const blockDefinition = getBlockDefinition(input.kind);
55257
+ const customBlock = sdkCustomBlockForKind(input.customBlocks, input.kind);
54248
55258
  const customFields = customBlockFields(input.blockFieldExtensions, input.kind);
54249
- if (!blockDefinition && !customFields) {
55259
+ const customBlockFieldsForValidation = combineCustomBlockFields(customBlock, customFields);
55260
+ if (!blockDefinition && !customBlockFieldsForValidation) {
54250
55261
  if (input.kind.startsWith("custom.")) {
54251
55262
  return err({
54252
55263
  code: "invalid_page_block",
@@ -54259,7 +55270,7 @@ function validateLocalBlock(input) {
54259
55270
  }
54260
55271
  const validation = validateBlockData(
54261
55272
  input.data,
54262
- blockDefinition?.manifest ?? { fields: customFields ?? [] },
55273
+ blockDefinition?.manifest ?? { fields: customBlockFieldsForValidation ?? [] },
54263
55274
  blockDefinition ? customFields : void 0
54264
55275
  );
54265
55276
  const warnings = formatValidationResult(
@@ -54286,6 +55297,14 @@ function emptyPageCommandCompileFragment() {
54286
55297
  function customBlockFields(blockFieldExtensions, kind) {
54287
55298
  return blockFieldExtensions?.[kind]?.fields;
54288
55299
  }
55300
+ function sdkCustomBlockForKind(customBlocks, kind) {
55301
+ return customBlocks?.find((block) => block.id === kind);
55302
+ }
55303
+ function combineCustomBlockFields(customBlock, customFields) {
55304
+ if (!customBlock) return customFields;
55305
+ if (!customFields?.length) return customBlock.fields;
55306
+ return [...customBlock.fields, ...customFields];
55307
+ }
54289
55308
  function incrementPageSuccess(result, subject) {
54290
55309
  switch (subject.resource) {
54291
55310
  case "page":
@@ -54484,7 +55503,8 @@ function preflightCommandSurfaceAsReport(surface, input) {
54484
55503
  surface: "page",
54485
55504
  report: preflightPageCommandPlanAsReport({
54486
55505
  compiledPlan: surface.compileValue,
54487
- blockFieldExtensions: input.blockFieldExtensions
55506
+ blockFieldExtensions: input.blockFieldExtensions,
55507
+ customBlocks: input.customBlocks
54488
55508
  })
54489
55509
  };
54490
55510
  case "form":
@@ -54537,7 +55557,8 @@ function compileCommandSurface(surface, input) {
54537
55557
  targetEnv: input.target,
54538
55558
  diff: input.diff,
54539
55559
  local: input.local,
54540
- blockFieldExtensions: input.blockFieldExtensions
55560
+ blockFieldExtensions: input.blockFieldExtensions,
55561
+ customBlocks: input.customBlocks
54541
55562
  })
54542
55563
  };
54543
55564
  case "form":
@@ -57054,6 +58075,7 @@ ${errors}`
57054
58075
  local: filteredLocal,
57055
58076
  client,
57056
58077
  blockFieldExtensions: cliConfig.blockFieldExtensions,
58078
+ customBlocks: cliConfig.customBlocks,
57057
58079
  output
57058
58080
  });
57059
58081
  const preflightResult = contentPushExecutionReportToSyncResult(preflight.report);
@@ -57140,6 +58162,7 @@ ${errors}`
57140
58162
  local: filteredLocal,
57141
58163
  client,
57142
58164
  blockFieldExtensions: cliConfig.blockFieldExtensions,
58165
+ customBlocks: cliConfig.customBlocks,
57143
58166
  output,
57144
58167
  onEntryCommandCount: (commandCount) => {
57145
58168
  output.info(`Syncing ${commandCount} operations...`);
@@ -60372,7 +61395,7 @@ var SimpleCache = class {
60372
61395
  };
60373
61396
 
60374
61397
  // src/version.ts
60375
- var SDK_VERSION = "0.80.0";
61398
+ var SDK_VERSION = "0.81.0";
60376
61399
 
60377
61400
  // src/client/error.ts
60378
61401
  var RiverbankApiError = class _RiverbankApiError extends Error {