@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
@@ -6356,6 +6356,11 @@ function toLocationCoordinates(value) {
6356
6356
  };
6357
6357
  }
6358
6358
 
6359
+ // ../core/src/assert-never.ts
6360
+ function assertNever(value, message = "Unexpected variant") {
6361
+ throw new Error(`${message}: ${String(value)}`);
6362
+ }
6363
+
6359
6364
  // ../api/src/accessAdmin.ts
6360
6365
  import { z } from "zod";
6361
6366
  var managedDomainAddOnPricingSnapshotSchema = z.object({
@@ -6460,7 +6465,7 @@ var navigationLinkInputSchema = z2.discriminatedUnion(
6460
6465
  );
6461
6466
 
6462
6467
  // ../api/src/sdkConfig/contracts.ts
6463
- import { z as z62 } from "zod";
6468
+ import { z as z64 } from "zod";
6464
6469
 
6465
6470
  // ../blocks/src/system/manifest/augmentManifest.ts
6466
6471
  function augmentManifest(manifest) {
@@ -7467,25 +7472,10 @@ function featuresFromHex(hex) {
7467
7472
  return { r, g, b, h, s, l, v, Y, chroma, okL, okC, okH, hex };
7468
7473
  }
7469
7474
 
7470
- // ../theme-core/src/site-styles/appearancePresetResolution.ts
7471
- function assertValidOptionGroups(preset2) {
7472
- preset2.optionGroups?.forEach((group) => {
7473
- const selectedOption = group.options.find(
7474
- (option) => option.id === group.selectedOptionId
7475
- );
7476
- if (!selectedOption) {
7477
- throw new Error(
7478
- `Appearance preset "${preset2.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
7479
- );
7480
- }
7481
- });
7482
- }
7483
- function defineBlockAppearancePreset(preset2) {
7484
- assertValidOptionGroups(preset2);
7485
- return preset2;
7486
- }
7487
-
7488
7475
  // ../theme-core/src/site-styles/types.ts
7476
+ function defineExactCatalog() {
7477
+ return (entries) => entries;
7478
+ }
7489
7479
  function asDesignBlockId(value) {
7490
7480
  return brandNonEmptyString(value, "DesignBlockId");
7491
7481
  }
@@ -7544,7 +7534,7 @@ function makeBoundaryId(previousBlockId, nextBlockId) {
7544
7534
  const next = encodeURIComponent(nextBlockId);
7545
7535
  return asDesignBoundaryId(`boundary:${previous}:${next}`);
7546
7536
  }
7547
- function assertNever(value, message = "Unhandled Theme V2 variant") {
7537
+ function assertNever2(value, message = "Unhandled Theme V2 variant") {
7548
7538
  throw new Error(`${message}: ${String(value)}`);
7549
7539
  }
7550
7540
  function brandNonEmptyString(value, label) {
@@ -7634,11 +7624,31 @@ function defineBlockDesignCapability(capability) {
7634
7624
  tileTreatments: capability.tileTreatments ?? ["default"],
7635
7625
  eventListTreatments: capability.eventListTreatments ?? ["plain"],
7636
7626
  eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"],
7637
- ...capability.accordionIconSets ? { accordionIconSets: capability.accordionIconSets } : {},
7638
- ...capability.headingDecorations ? { headingDecorations: capability.headingDecorations } : {}
7627
+ headingDecorationCapability: capability.headingDecorationCapability ?? {
7628
+ kind: "unsupported"
7629
+ },
7630
+ ...capability.accordionIconSets ? { accordionIconSets: capability.accordionIconSets } : {}
7639
7631
  };
7640
7632
  }
7641
7633
 
7634
+ // ../theme-core/src/site-styles/appearancePresetResolution.ts
7635
+ function assertValidOptionGroups(preset2) {
7636
+ preset2.optionGroups?.forEach((group) => {
7637
+ const selectedOption = group.options.find(
7638
+ (option) => option.id === group.selectedOptionId
7639
+ );
7640
+ if (!selectedOption) {
7641
+ throw new Error(
7642
+ `Appearance preset "${preset2.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
7643
+ );
7644
+ }
7645
+ });
7646
+ }
7647
+ function defineBlockAppearancePreset(preset2) {
7648
+ assertValidOptionGroups(preset2);
7649
+ return preset2;
7650
+ }
7651
+
7642
7652
  // ../theme-core/src/site-styles/blockAppearancePresets.ts
7643
7653
  var blockAppearancePresets = [
7644
7654
  defineBlockAppearancePreset({
@@ -8000,8 +8010,25 @@ var blockAppearancePresets = [
8000
8010
  kind: "block-design",
8001
8011
  id: "intro-organic-statement",
8002
8012
  target: "intro",
8003
- label: "Organic intro statement",
8013
+ label: "Intro statement",
8014
+ blockKinds: ["block.intro"],
8015
+ design: {
8016
+ sectionSurface: "base",
8017
+ contentFrame: plainFrame,
8018
+ itemSurface: "none",
8019
+ transitionAfter: "soft-fade-short",
8020
+ emphasis: "high"
8021
+ }
8022
+ }),
8023
+ defineBlockAppearancePreset({
8024
+ kind: "block-design",
8025
+ id: "intro-editorial-statement",
8026
+ target: "intro",
8027
+ label: "Editorial intro statement",
8004
8028
  blockKinds: ["block.intro"],
8029
+ constraints: {
8030
+ layoutVariantKeys: ["centered-copy", "statement-copy"]
8031
+ },
8005
8032
  design: {
8006
8033
  sectionSurface: "base",
8007
8034
  contentFrame: plainFrame,
@@ -8024,12 +8051,7 @@ var blockAppearancePresets = [
8024
8051
  contentFrame: plainFrame,
8025
8052
  itemSurface: "none",
8026
8053
  transitionAfter: "soft-fade-short",
8027
- emphasis: "medium",
8028
- headingDecoration: {
8029
- family: "organic-squiggle",
8030
- placement: "after-heading",
8031
- colorToken: "primary"
8032
- }
8054
+ emphasis: "medium"
8033
8055
  }
8034
8056
  }),
8035
8057
  defineBlockAppearancePreset({
@@ -8046,6 +8068,48 @@ var blockAppearancePresets = [
8046
8068
  emphasis: "medium"
8047
8069
  }
8048
8070
  }),
8071
+ defineBlockAppearancePreset({
8072
+ kind: "block-design",
8073
+ id: "offerings-preview-default-cards",
8074
+ target: "offerings",
8075
+ label: "Default offering cards",
8076
+ blockKinds: ["block.offerings-preview"],
8077
+ design: {
8078
+ sectionSurface: "base",
8079
+ contentFrame: plainFrame,
8080
+ itemSurface: "default",
8081
+ transitionAfter: "soft-fade-short",
8082
+ emphasis: "medium"
8083
+ }
8084
+ }),
8085
+ defineBlockAppearancePreset({
8086
+ kind: "block-design",
8087
+ id: "offerings-preview-secondary-cards",
8088
+ target: "offerings",
8089
+ label: "Secondary offering cards",
8090
+ blockKinds: ["block.offerings-preview"],
8091
+ design: {
8092
+ sectionSurface: "muted-band",
8093
+ contentFrame: plainFrame,
8094
+ itemSurface: "inset",
8095
+ transitionAfter: "soft-fade-short",
8096
+ emphasis: "medium"
8097
+ }
8098
+ }),
8099
+ defineBlockAppearancePreset({
8100
+ kind: "block-design",
8101
+ id: "offerings-preview-non-carded",
8102
+ target: "offerings",
8103
+ label: "Non-carded offerings",
8104
+ blockKinds: ["block.offerings-preview"],
8105
+ design: {
8106
+ sectionSurface: "muted-band",
8107
+ contentFrame: plainFrame,
8108
+ itemSurface: "editorial",
8109
+ transitionAfter: "soft-fade-short",
8110
+ emphasis: "medium"
8111
+ }
8112
+ }),
8049
8113
  defineBlockAppearancePreset({
8050
8114
  kind: "block-design",
8051
8115
  id: "feature-cards-raised-rule",
@@ -8060,6 +8124,20 @@ var blockAppearancePresets = [
8060
8124
  emphasis: "high"
8061
8125
  }
8062
8126
  }),
8127
+ defineBlockAppearancePreset({
8128
+ kind: "block-design",
8129
+ id: "feature-cards-bold-colors",
8130
+ target: "feature-cards",
8131
+ label: "Bold colour-blocked cards",
8132
+ blockKinds: ["block.feature-cards"],
8133
+ design: {
8134
+ sectionSurface: "base",
8135
+ contentFrame: plainFrame,
8136
+ itemSurface: "color-blocked",
8137
+ transitionAfter: "none",
8138
+ emphasis: "high"
8139
+ }
8140
+ }),
8063
8141
  defineBlockAppearancePreset({
8064
8142
  kind: "block-design",
8065
8143
  id: "feature-cards-editorial-columns",
@@ -8313,7 +8391,7 @@ var blockAppearancePresets = [
8313
8391
  kind: "block-design",
8314
8392
  id: "contact-form-panel",
8315
8393
  target: "contact-form",
8316
- label: "Contact form panel",
8394
+ label: "Raised form panel",
8317
8395
  blockKinds: ["block.form"],
8318
8396
  design: {
8319
8397
  sectionSurface: "muted-band",
@@ -8325,30 +8403,16 @@ var blockAppearancePresets = [
8325
8403
  }),
8326
8404
  defineBlockAppearancePreset({
8327
8405
  kind: "block-design",
8328
- id: "contact-form-dark-card",
8329
- target: "contact-form",
8330
- label: "Dark form card",
8331
- blockKinds: ["block.form"],
8332
- design: {
8333
- sectionSurface: "accent-band",
8334
- contentFrame: panelFrame("raised"),
8335
- itemSurface: "none",
8336
- transitionAfter: "soft-fade-short",
8337
- emphasis: "high"
8338
- }
8339
- }),
8340
- defineBlockAppearancePreset({
8341
- kind: "block-design",
8342
- id: "contact-form-brand-depth-card",
8406
+ id: "contact-form-open",
8343
8407
  target: "contact-form",
8344
- label: "Brand-depth form card",
8408
+ label: "Open form",
8345
8409
  blockKinds: ["block.form"],
8346
8410
  design: {
8347
- sectionSurface: "brand-depth-band",
8348
- contentFrame: panelFrame("raised"),
8411
+ sectionSurface: "muted-band",
8412
+ contentFrame: plainFrame,
8349
8413
  itemSurface: "none",
8350
8414
  transitionAfter: "none",
8351
- emphasis: "high"
8415
+ emphasis: "medium"
8352
8416
  }
8353
8417
  }),
8354
8418
  defineBlockAppearancePreset({
@@ -8426,7 +8490,130 @@ function assertUniqueLayoutProfileKeys(profiles) {
8426
8490
 
8427
8491
  // ../theme-core/src/site-styles/pageDesignIntent.ts
8428
8492
  import { z as z5 } from "zod";
8429
- var pageDesignIntentSchemaVersion = 1;
8493
+
8494
+ // ../theme-core/src/site-styles/sectionTransitions.ts
8495
+ var noneBoundaryOption = {
8496
+ id: asBoundaryOptionId("break:none"),
8497
+ label: "None",
8498
+ transitionAfter: "none",
8499
+ treatment: { kind: "none" }
8500
+ };
8501
+ var softBoundaryOption = {
8502
+ id: asBoundaryOptionId("break:soft"),
8503
+ label: "Soft",
8504
+ transitionAfter: "soft-fade-short",
8505
+ treatment: { kind: "soft-fade", height: "medium", curve: "soft" }
8506
+ };
8507
+ var spaciousBoundaryOption = {
8508
+ id: asBoundaryOptionId("break:spacious"),
8509
+ label: "Spacious",
8510
+ transitionAfter: "soft-fade-long",
8511
+ treatment: { kind: "soft-fade", height: "large", curve: "spacious" }
8512
+ };
8513
+ var expansiveBoundaryOption = {
8514
+ id: asBoundaryOptionId("break:expansive"),
8515
+ label: "Expansive",
8516
+ transitionAfter: "soft-fade-expansive",
8517
+ treatment: { kind: "soft-fade", height: "expansive", curve: "expansive" }
8518
+ };
8519
+ var waveBoundaryOption = {
8520
+ id: asBoundaryOptionId("break:wave"),
8521
+ label: "Classic wave",
8522
+ transitionAfter: "wave-edge",
8523
+ treatment: {
8524
+ kind: "wave-edge",
8525
+ height: "medium",
8526
+ amplitude: "balanced",
8527
+ rhythm: "double",
8528
+ symmetry: "asymmetrical"
8529
+ }
8530
+ };
8531
+ var balancedWaveBoundaryOption = {
8532
+ id: asBoundaryOptionId("break:wave-balanced"),
8533
+ label: "Balanced wave",
8534
+ transitionAfter: "wave-edge-balanced",
8535
+ treatment: {
8536
+ kind: "wave-edge",
8537
+ height: "medium",
8538
+ amplitude: "balanced",
8539
+ rhythm: "double",
8540
+ symmetry: "symmetrical"
8541
+ }
8542
+ };
8543
+ var gentleWaveBoundaryOption = {
8544
+ id: asBoundaryOptionId("break:wave-gentle"),
8545
+ label: "Gentle wave",
8546
+ transitionAfter: "wave-edge-gentle",
8547
+ treatment: {
8548
+ kind: "wave-edge",
8549
+ height: "compact",
8550
+ amplitude: "subtle",
8551
+ rhythm: "single",
8552
+ symmetry: "symmetrical"
8553
+ }
8554
+ };
8555
+ var boldWaveBoundaryOption = {
8556
+ id: asBoundaryOptionId("break:wave-bold"),
8557
+ label: "Bold wave",
8558
+ transitionAfter: "wave-edge-bold",
8559
+ treatment: {
8560
+ kind: "wave-edge",
8561
+ height: "large",
8562
+ amplitude: "bold",
8563
+ rhythm: "double",
8564
+ symmetry: "symmetrical"
8565
+ }
8566
+ };
8567
+ var driftWaveBoundaryOption = {
8568
+ id: asBoundaryOptionId("break:wave-drift"),
8569
+ label: "Drift wave",
8570
+ transitionAfter: "wave-edge-drift",
8571
+ treatment: {
8572
+ kind: "wave-edge",
8573
+ height: "medium",
8574
+ amplitude: "balanced",
8575
+ rhythm: "double",
8576
+ symmetry: "drift"
8577
+ }
8578
+ };
8579
+ var subtleAngleBoundaryOption = {
8580
+ id: asBoundaryOptionId("break:angle-subtle"),
8581
+ label: "Subtle angle",
8582
+ transitionAfter: "angle-edge-subtle",
8583
+ treatment: {
8584
+ kind: "angle-edge",
8585
+ height: "compact",
8586
+ slope: "subtle",
8587
+ direction: "forward"
8588
+ }
8589
+ };
8590
+ var balancedAngleBoundaryOption = {
8591
+ id: asBoundaryOptionId("break:angle-balanced"),
8592
+ label: "Balanced angle",
8593
+ transitionAfter: "angle-edge",
8594
+ treatment: {
8595
+ kind: "angle-edge",
8596
+ height: "medium",
8597
+ slope: "balanced",
8598
+ direction: "forward"
8599
+ }
8600
+ };
8601
+ var steepAngleBoundaryOption = {
8602
+ id: asBoundaryOptionId("break:angle-steep"),
8603
+ label: "Steep angle",
8604
+ transitionAfter: "angle-edge-steep",
8605
+ treatment: {
8606
+ kind: "angle-edge",
8607
+ height: "large",
8608
+ slope: "steep",
8609
+ direction: "forward"
8610
+ }
8611
+ };
8612
+
8613
+ // ../theme-core/src/site-styles/pageDesignIntent.ts
8614
+ var pageDesignIntentSchemaVersion = 2;
8615
+ var legacyPageDesignIntentSchemaVersion = 1;
8616
+ var unknownBoundaryOptionId = asBoundaryOptionId("break:unknown");
8430
8617
  var pageDesignUserPinnedAppearanceChoiceSchema = z5.object({
8431
8618
  kind: z5.literal("user-pinned"),
8432
8619
  value: z5.string().min(1).transform(asAppearancePresetId)
@@ -8435,17 +8622,84 @@ var pageDesignUserPinnedBoundaryChoiceSchema = z5.object({
8435
8622
  kind: z5.literal("user-pinned"),
8436
8623
  value: z5.string().min(1).transform(asBoundaryOptionId)
8437
8624
  }).strict();
8625
+ var pageDesignBoundaryTreatmentSchema = z5.discriminatedUnion("kind", [
8626
+ z5.object({ kind: z5.literal("none") }).strict(),
8627
+ z5.object({
8628
+ kind: z5.literal("soft-fade"),
8629
+ height: z5.enum(["compact", "medium", "large", "expansive"]),
8630
+ curve: z5.enum(["soft", "spacious", "expansive"])
8631
+ }).strict(),
8632
+ z5.object({
8633
+ kind: z5.literal("wave-edge"),
8634
+ height: z5.enum(["compact", "medium", "large"]),
8635
+ amplitude: z5.enum(["subtle", "balanced", "bold"]),
8636
+ rhythm: z5.enum(["single", "double"]),
8637
+ symmetry: z5.enum(["symmetrical", "asymmetrical", "drift"])
8638
+ }).strict(),
8639
+ z5.object({
8640
+ kind: z5.literal("angle-edge"),
8641
+ height: z5.enum(["compact", "medium", "large"]),
8642
+ slope: z5.enum(["subtle", "balanced", "steep"]),
8643
+ direction: z5.enum(["forward", "reverse"])
8644
+ }).strict(),
8645
+ z5.object({
8646
+ kind: z5.literal("legacy-unsupported"),
8647
+ boundaryOptionId: z5.string().min(1).transform(asBoundaryOptionId)
8648
+ }).strict()
8649
+ ]);
8650
+ var pageDesignUserPinnedBoundaryTreatmentChoiceSchema = z5.object({
8651
+ kind: z5.literal("user-pinned"),
8652
+ value: pageDesignBoundaryTreatmentSchema
8653
+ }).strict();
8438
8654
  var pageDesignBlockLookPinSchema = z5.object({
8439
8655
  blockId: z5.string().min(1).transform(asDesignBlockId),
8440
8656
  blockKind: z5.string().min(1),
8441
8657
  choice: pageDesignUserPinnedAppearanceChoiceSchema
8442
8658
  }).strict();
8443
8659
  var pageDesignBoundaryPinSchema = z5.object({
8660
+ boundaryId: z5.string().min(1).transform(asDesignBoundaryId),
8661
+ previousBlockId: z5.string().min(1).transform(asDesignBlockId),
8662
+ nextBlockId: z5.string().min(1).transform(asDesignBlockId),
8663
+ choice: pageDesignUserPinnedBoundaryTreatmentChoiceSchema
8664
+ }).strict().superRefine(validateBoundaryPinIdMatchesBlocks);
8665
+ var legacyPageDesignBoundaryPinSchema = z5.object({
8444
8666
  boundaryId: z5.string().min(1).transform(asDesignBoundaryId),
8445
8667
  previousBlockId: z5.string().min(1).transform(asDesignBlockId),
8446
8668
  nextBlockId: z5.string().min(1).transform(asDesignBlockId),
8447
8669
  choice: pageDesignUserPinnedBoundaryChoiceSchema
8448
- }).strict().superRefine((pin, ctx) => {
8670
+ }).strict().superRefine(validateBoundaryPinIdMatchesBlocks);
8671
+ var pageDesignIntentV1Schema = z5.object({
8672
+ schemaVersion: z5.literal(legacyPageDesignIntentSchemaVersion),
8673
+ siteStyleId: z5.string().min(1).transform(asSiteStyleId),
8674
+ pageFlowPresetId: z5.string().min(1).transform(asPageFlowPresetId),
8675
+ blockLookPins: z5.array(pageDesignBlockLookPinSchema),
8676
+ boundaryPins: z5.array(legacyPageDesignBoundaryPinSchema)
8677
+ }).strict().superRefine(validateUniquePageDesignPins);
8678
+ var pageDesignIntentV2Schema = z5.object({
8679
+ schemaVersion: z5.literal(pageDesignIntentSchemaVersion),
8680
+ siteStyleId: z5.string().min(1).transform(asSiteStyleId),
8681
+ pageFlowPresetId: z5.string().min(1).transform(asPageFlowPresetId),
8682
+ blockLookPins: z5.array(pageDesignBlockLookPinSchema),
8683
+ boundaryPins: z5.array(pageDesignBoundaryPinSchema)
8684
+ }).strict().superRefine(validateUniquePageDesignPins);
8685
+ function addDuplicateStringIssues(ctx, input) {
8686
+ const seen = /* @__PURE__ */ new Set();
8687
+ const duplicates = /* @__PURE__ */ new Set();
8688
+ for (const value of input.values) {
8689
+ if (seen.has(value)) {
8690
+ duplicates.add(value);
8691
+ }
8692
+ seen.add(value);
8693
+ }
8694
+ for (const duplicate of duplicates) {
8695
+ ctx.addIssue({
8696
+ code: z5.ZodIssueCode.custom,
8697
+ path: [...input.path],
8698
+ message: `Duplicate ${input.label}: ${duplicate}.`
8699
+ });
8700
+ }
8701
+ }
8702
+ function validateBoundaryPinIdMatchesBlocks(pin, ctx) {
8449
8703
  const expectedBoundaryId = makeBoundaryId(
8450
8704
  pin.previousBlockId,
8451
8705
  pin.nextBlockId
@@ -8457,14 +8711,8 @@ var pageDesignBoundaryPinSchema = z5.object({
8457
8711
  message: `Boundary id must match previousBlockId and nextBlockId. Expected ${expectedBoundaryId}.`
8458
8712
  });
8459
8713
  }
8460
- });
8461
- var pageDesignIntentV1Schema = z5.object({
8462
- schemaVersion: z5.literal(pageDesignIntentSchemaVersion),
8463
- siteStyleId: z5.string().min(1).transform(asSiteStyleId),
8464
- pageFlowPresetId: z5.string().min(1).transform(asPageFlowPresetId),
8465
- blockLookPins: z5.array(pageDesignBlockLookPinSchema),
8466
- boundaryPins: z5.array(pageDesignBoundaryPinSchema)
8467
- }).strict().superRefine((intent, ctx) => {
8714
+ }
8715
+ function validateUniquePageDesignPins(intent, ctx) {
8468
8716
  addDuplicateStringIssues(ctx, {
8469
8717
  values: intent.blockLookPins.map((pin) => pin.blockId),
8470
8718
  path: ["blockLookPins"],
@@ -8477,23 +8725,6 @@ var pageDesignIntentV1Schema = z5.object({
8477
8725
  path: ["boundaryPins"],
8478
8726
  label: "boundary pin"
8479
8727
  });
8480
- });
8481
- function addDuplicateStringIssues(ctx, input) {
8482
- const seen = /* @__PURE__ */ new Set();
8483
- const duplicates = /* @__PURE__ */ new Set();
8484
- for (const value of input.values) {
8485
- if (seen.has(value)) {
8486
- duplicates.add(value);
8487
- }
8488
- seen.add(value);
8489
- }
8490
- for (const duplicate of duplicates) {
8491
- ctx.addIssue({
8492
- code: z5.ZodIssueCode.custom,
8493
- path: [...input.path],
8494
- message: `Duplicate ${input.label}: ${duplicate}.`
8495
- });
8496
- }
8497
8728
  }
8498
8729
  function boundaryKey(previousBlockId, nextBlockId) {
8499
8730
  return makeBoundaryId(previousBlockId, nextBlockId);
@@ -8752,7 +8983,9 @@ var buttonBorderSchema = z7.object({
8752
8983
  var variantShadowSchema = z7.object({
8753
8984
  elevation: z7.enum(["none", "low", "medium", "high"]),
8754
8985
  softness: z7.enum(["crisp", "soft", "hard"]).nullable(),
8755
- position: z7.enum(["bottom", "bottom-right"]).default("bottom")
8986
+ position: z7.enum(["bottom", "bottom-right"]).default("bottom"),
8987
+ // Optional palette token for a coloured offset shadow; omit for neutral black.
8988
+ colorToken: themeColorTokenSchema.optional()
8756
8989
  });
8757
8990
  var variantEffectsSchema = z7.object({
8758
8991
  base: z7.array(effectApplicationSchema).optional(),
@@ -9276,6 +9509,65 @@ var inkStamp = defineButtonPersonality({
9276
9509
  }
9277
9510
  });
9278
9511
 
9512
+ // ../theme-core/src/buttons/personalities/joy-stamp.ts
9513
+ var joyStamp = defineButtonPersonality({
9514
+ id: "joy-stamp",
9515
+ name: "Joy Stamp",
9516
+ description: "Pill buttons with a hard, brand-coloured offset shadow that presses in on hover.",
9517
+ tags: { tone: "bold", energy: "vibrant", motion: "expressive", era: "organic" },
9518
+ buttonSystem: {
9519
+ global: {
9520
+ cornerStyle: "pill",
9521
+ shadow: "high",
9522
+ textTransform: "none",
9523
+ // Bold display type on the buttons: use the heading font (Bricolage) at
9524
+ // 700, matching the mockup's chunky button labels.
9525
+ typography: "heading",
9526
+ fontWeight: 700,
9527
+ borderWidth: 2,
9528
+ hoverTransform: "none",
9529
+ hoverColor: "none"
9530
+ },
9531
+ sizes: {
9532
+ sm: { padding: "0.625rem 1.25rem", fontSize: "text-sm" },
9533
+ md: { padding: "0.875rem 1.75rem", fontSize: "text-base" },
9534
+ lg: { padding: "1.125rem 2.25rem", fontSize: "text-lg" },
9535
+ xl: { padding: "1.25rem 2.75rem", fontSize: "text-xl" }
9536
+ },
9537
+ variants: [
9538
+ {
9539
+ id: "primary",
9540
+ name: "Primary",
9541
+ enabled: true,
9542
+ priority: 1,
9543
+ background: { type: "solid", colorToken: "primary" },
9544
+ textColorToken: "primaryForeground",
9545
+ borderRadius: "rounded-full",
9546
+ // Cream stamp shadow under the burnt-orange fill.
9547
+ shadow: { elevation: "high", softness: "hard", position: "bottom-right", colorToken: "text" },
9548
+ effects: {
9549
+ hover: [{ effectId: "press-down" }]
9550
+ }
9551
+ },
9552
+ {
9553
+ id: "secondary",
9554
+ name: "Secondary",
9555
+ enabled: true,
9556
+ priority: 2,
9557
+ background: { type: "transparent" },
9558
+ textColorToken: "text",
9559
+ borderRadius: "rounded-full",
9560
+ border: { widthClass: "border-2", colorToken: "text" },
9561
+ // Brown stamp shadow under the cream outline.
9562
+ shadow: { elevation: "high", softness: "hard", position: "bottom-right", colorToken: "secondary" },
9563
+ effects: {
9564
+ hover: [{ effectId: "press-down" }]
9565
+ }
9566
+ }
9567
+ ]
9568
+ }
9569
+ });
9570
+
9279
9571
  // ../theme-core/src/buttons/personalities/pebble.ts
9280
9572
  var pebble = defineButtonPersonality({
9281
9573
  id: "pebble",
@@ -9549,7 +9841,8 @@ var buttonPersonalities = [
9549
9841
  pebble,
9550
9842
  inkStamp,
9551
9843
  brushedWash,
9552
- showtimePill
9844
+ showtimePill,
9845
+ joyStamp
9553
9846
  ];
9554
9847
  var personalitiesById = new Map(
9555
9848
  buttonPersonalities.map((p) => [p.id, p])
@@ -10420,7 +10713,9 @@ var boxBackgroundSchema = z22.object({
10420
10713
  motion: z22.enum(["static", "fixed-frame"]).nullable().optional(),
10421
10714
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
10422
10715
  textColor: tokenOrCssColorValueSchema.nullable().optional(),
10423
- headingColor: tokenOrCssColorValueSchema.nullable().optional()
10716
+ headingColor: tokenOrCssColorValueSchema.nullable().optional(),
10717
+ linkColor: tokenOrCssColorValueSchema.nullable().optional(),
10718
+ supportingColor: tokenOrCssColorValueSchema.nullable().optional()
10424
10719
  });
10425
10720
  var noHeadingDecorationSchema = z22.object({
10426
10721
  family: z22.literal("none")
@@ -10483,7 +10778,8 @@ var cardStylesOverrideSchema = z22.object({
10483
10778
  "editorial-rule",
10484
10779
  "soft-panel",
10485
10780
  "editorial-serif-quote",
10486
- "editorial-open"
10781
+ "editorial-open",
10782
+ "color-blocked"
10487
10783
  ]).nullable().optional(),
10488
10784
  // Which site-style card variant the card adopts (emits a `.card-{id}` class).
10489
10785
  // 'none' is boxless. Driven by the block look via testimonialCardTreatment.
@@ -11308,6 +11604,30 @@ var warmNeutralForest = definePaletteVariant({
11308
11604
  ]
11309
11605
  });
11310
11606
 
11607
+ // ../theme-core/src/palette/variants/warm-dark.ts
11608
+ var warmDarkEmber = definePaletteVariant({
11609
+ id: "warm-dark-ember",
11610
+ name: "Warm Dark \u2014 Ember",
11611
+ description: "Deep clay-brown ground with burnt-orange accent and warm cream text.",
11612
+ tags: { tone: "bold", energy: "vibrant", era: "organic" },
11613
+ mode: "dark",
11614
+ colors: [
11615
+ { name: "primary", hex: "#ce612f" },
11616
+ { name: "secondary", hex: "#894e31" },
11617
+ { name: "accent", hex: "#ce612f" },
11618
+ { name: "success", hex: "#6f8f57" },
11619
+ { name: "warning", hex: "#c98a3c" },
11620
+ { name: "destructive", hex: "#c0492f" },
11621
+ { name: "background", hex: "#4f2415" },
11622
+ { name: "surface", hex: "#5c3320" },
11623
+ { name: "surfaceAlt", hex: "#693a25" },
11624
+ { name: "muted", hex: "#6a3d27" },
11625
+ { name: "text", hex: "#f0e1d0" },
11626
+ { name: "primaryForeground", hex: "#4f2415" },
11627
+ { name: "border", hex: "#894e31" }
11628
+ ]
11629
+ });
11630
+
11311
11631
  // ../theme-core/src/palette/variants/index.ts
11312
11632
  var paletteVariants = [
11313
11633
  // Brand-led family
@@ -11328,7 +11648,9 @@ var paletteVariants = [
11328
11648
  softNaturalSage,
11329
11649
  softNaturalStone,
11330
11650
  softNaturalWatercolor,
11331
- softNaturalLilac
11651
+ softNaturalLilac,
11652
+ // Warm-dark family (dark mode)
11653
+ warmDarkEmber
11332
11654
  ];
11333
11655
  var paletteVariantsById = new Map(
11334
11656
  paletteVariants.map((v) => [v.id, v])
@@ -11609,6 +11931,32 @@ var clarityZenCardSystem = {
11609
11931
  }
11610
11932
  ]
11611
11933
  };
11934
+ var originalJoyCardSystem = {
11935
+ variants: [
11936
+ {
11937
+ id: "default",
11938
+ name: "Default",
11939
+ enabled: true,
11940
+ priority: 1,
11941
+ background: { type: "solid", colorToken: "surface" },
11942
+ foregroundToken: "text",
11943
+ spacing: "comfortable",
11944
+ corners: "rounded",
11945
+ shadow: { elevation: "none", softness: null, position: "bottom" }
11946
+ },
11947
+ {
11948
+ id: "alternative",
11949
+ name: "Statement",
11950
+ enabled: true,
11951
+ priority: 2,
11952
+ background: { type: "solid", colorToken: "primary" },
11953
+ foregroundToken: "primaryForeground",
11954
+ spacing: "comfortable",
11955
+ corners: "rounded",
11956
+ shadow: { elevation: "none", softness: null, position: "bottom" }
11957
+ }
11958
+ ]
11959
+ };
11612
11960
 
11613
11961
  // ../theme-core/src/site-styles/testimonialQuotePresets.ts
11614
11962
  var serifDisplayQuote = {
@@ -11729,7 +12077,7 @@ function baseHeader(theme) {
11729
12077
  navContainer: { type: "none", tint: null, opacity: 0.15 }
11730
12078
  };
11731
12079
  }
11732
- var headerLayoutCatalog = [
12080
+ var headerLayoutCatalog = defineExactCatalog()([
11733
12081
  {
11734
12082
  id: asHeaderLayoutId("classic"),
11735
12083
  label: "Classic",
@@ -11761,11 +12109,11 @@ var headerLayoutCatalog = [
11761
12109
  maxRecommendedNavItems: 5,
11762
12110
  allowedLogoShapes: ["none", "text-only", "horizontal"]
11763
12111
  }
11764
- ];
12112
+ ]);
11765
12113
  function supportedLayouts(ids) {
11766
12114
  return ids.map(asHeaderLayoutId);
11767
12115
  }
11768
- var headerStyleCatalog = [
12116
+ var headerStyleCatalog = defineExactCatalog()([
11769
12117
  {
11770
12118
  id: asHeaderStyleId("minimal"),
11771
12119
  label: "Minimal",
@@ -11920,7 +12268,7 @@ var headerStyleCatalog = [
11920
12268
  navTypography: "heading",
11921
12269
  moods: ["calm", "editorial"]
11922
12270
  }
11923
- ];
12271
+ ]);
11924
12272
  var headerLayoutsById = new Map(
11925
12273
  headerLayoutCatalog.map((layout) => [layout.id, layout])
11926
12274
  );
@@ -12033,7 +12381,7 @@ var headerStyleRepairOrder = /* @__PURE__ */ new Map(
12033
12381
  [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
12034
12382
  ]
12035
12383
  );
12036
- var legacyHeaderLookAliases = [
12384
+ var legacyHeaderLookAliases = defineExactCatalog()([
12037
12385
  {
12038
12386
  lookId: asHeaderLookId("clean-base"),
12039
12387
  selection: {
@@ -12090,7 +12438,7 @@ var legacyHeaderLookAliases = [
12090
12438
  styleId: asHeaderStyleId("glass")
12091
12439
  }
12092
12440
  }
12093
- ];
12441
+ ]);
12094
12442
  var legacyHeaderLookAliasesById = new Map(legacyHeaderLookAliases.map((alias) => [alias.lookId, alias]));
12095
12443
  function getHeaderStyle(id) {
12096
12444
  return headerStylesById.get(id) ?? null;
@@ -12127,7 +12475,7 @@ function themedHeaderShadow(theme) {
12127
12475
  case "high":
12128
12476
  return { elevation: "lg" };
12129
12477
  default:
12130
- return assertNever(
12478
+ return assertNever2(
12131
12479
  theme.shadow.elevation,
12132
12480
  "Unhandled theme shadow elevation"
12133
12481
  );
@@ -12244,6 +12592,12 @@ function serifLineHeader(theme) {
12244
12592
  letterSpacing: "wide",
12245
12593
  gradient: false
12246
12594
  },
12595
+ border: {
12596
+ style: "solid",
12597
+ width: "none",
12598
+ position: "none"
12599
+ },
12600
+ shadow: { elevation: "none" },
12247
12601
  ctaTreatment: "outline",
12248
12602
  ctaVariant: resolveHeaderCtaVariant(theme, "outline"),
12249
12603
  ctaGap: "relaxed"
@@ -12368,7 +12722,7 @@ function floatingGlassHeader(theme) {
12368
12722
  }
12369
12723
  };
12370
12724
  }
12371
- var headerLookCatalog = [
12725
+ var headerLookCatalog = defineExactCatalog()([
12372
12726
  {
12373
12727
  id: asHeaderLookId("clean-base"),
12374
12728
  label: "Clean base",
@@ -12486,7 +12840,7 @@ var headerLookCatalog = [
12486
12840
  logoAccommodations: overlayLogoAccommodations,
12487
12841
  compile: floatingGlassHeader
12488
12842
  }
12489
- ];
12843
+ ]);
12490
12844
  var guaranteedFallbackHeaderLookId = asHeaderLookId("clean-base");
12491
12845
  var guaranteedFallbackHeaderLayoutId = asHeaderLayoutId("classic");
12492
12846
  var guaranteedFallbackHeaderStyleId = asHeaderStyleId("minimal");
@@ -12652,7 +13006,7 @@ function editorialColumnsFooter(theme) {
12652
13006
  }
12653
13007
  };
12654
13008
  }
12655
- var footerLookCatalog = [
13009
+ var footerLookCatalog = defineExactCatalog()([
12656
13010
  {
12657
13011
  id: asFooterLookId("footer-muted-grounding"),
12658
13012
  label: "Muted grounding footer",
@@ -12675,7 +13029,7 @@ var footerLookCatalog = [
12675
13029
  allowedContentPresence: ["default-footer", "default-and-blocks"],
12676
13030
  compile: brandTwoBandFooter
12677
13031
  }
12678
- ];
13032
+ ]);
12679
13033
  var footerLooksById = new Map(
12680
13034
  footerLookCatalog.map((look) => [look.id, look])
12681
13035
  );
@@ -12697,7 +13051,7 @@ var generatedDesignOptionCatalog = {
12697
13051
  source: "generated",
12698
13052
  sectionSurfaces: ["base", "muted-band", "accent-band", "brand-depth-band", "hero-image"],
12699
13053
  contentFrames: generatedContentFrames,
12700
- itemSurfaces: ["none", "default", "flat", "outlined", "raised", "inset", "editorial"],
13054
+ itemSurfaces: ["none", "default", "flat", "outlined", "raised", "inset", "editorial", "color-blocked"],
12701
13055
  transitions: ["none", "soft-fade-short", "soft-fade-long"],
12702
13056
  emphases: ["low", "medium", "high"],
12703
13057
  detachedCustom: false
@@ -12709,8 +13063,15 @@ var userDesignOptionCatalog = {
12709
13063
  itemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
12710
13064
  transitions: [
12711
13065
  ...generatedDesignOptionCatalog.transitions,
13066
+ "soft-fade-expansive",
12712
13067
  "wave-edge",
12713
- "angle-edge"
13068
+ "wave-edge-balanced",
13069
+ "wave-edge-gentle",
13070
+ "wave-edge-bold",
13071
+ "wave-edge-drift",
13072
+ "angle-edge",
13073
+ "angle-edge-subtle",
13074
+ "angle-edge-steep"
12714
13075
  ],
12715
13076
  emphases: generatedDesignOptionCatalog.emphases,
12716
13077
  detachedCustom: false
@@ -12891,6 +13252,29 @@ var boldDisplayTypography = {
12891
13252
  },
12892
13253
  scale: "balanced"
12893
13254
  };
13255
+ var originalJoyTypography = {
13256
+ body: {
13257
+ family: "DM Sans, system-ui, sans-serif",
13258
+ size: "md",
13259
+ weight: "regular",
13260
+ lineHeight: "relaxed",
13261
+ letterSpacing: "normal"
13262
+ },
13263
+ headings: {
13264
+ default: {
13265
+ family: "Bricolage Grotesque, system-ui, sans-serif",
13266
+ weight: "bold",
13267
+ lineHeight: "normal",
13268
+ letterSpacing: "tight",
13269
+ italic: null,
13270
+ case: null
13271
+ },
13272
+ h1: { size: "2xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
13273
+ h2: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
13274
+ h3: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null }
13275
+ },
13276
+ scale: "balanced"
13277
+ };
12894
13278
  var typographyPresets = [
12895
13279
  defineTypographyPreset({
12896
13280
  id: "typography-preset:modern-sans",
@@ -12977,6 +13361,32 @@ var typographyPresets = [
12977
13361
  mobile: { headlineSize: "4xl", subheadlineSize: "xl" }
12978
13362
  }
12979
13363
  }
13364
+ }),
13365
+ defineTypographyPreset({
13366
+ id: "typography-preset:original-joy",
13367
+ name: "Original Joy",
13368
+ description: "Bold Bricolage Grotesque display headings over a clean DM Sans body, editorial and warm.",
13369
+ defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Bricolage Grotesque, system-ui, sans-serif" },
13370
+ recommendedFonts: {
13371
+ body: ["DM Sans", "Inter", "Manrope"],
13372
+ heading: ["Bricolage Grotesque", "Space Grotesk", "Archivo"]
13373
+ },
13374
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
13375
+ typography: originalJoyTypography,
13376
+ heroTypography: {
13377
+ headlineSize: "6xl",
13378
+ headlineLineHeight: "tight",
13379
+ subheadlineSize: "xl",
13380
+ subheadlineLineHeight: "normal",
13381
+ microHeadlineSize: "6xl",
13382
+ microHeadlineLineHeight: "tight",
13383
+ microSubheadlineSize: "lg",
13384
+ microSubheadlineLineHeight: "normal",
13385
+ responsive: {
13386
+ tablet: { headlineSize: "5xl" },
13387
+ mobile: { headlineSize: "4xl", subheadlineSize: "lg" }
13388
+ }
13389
+ }
12980
13390
  })
12981
13391
  ];
12982
13392
  var typographyPresetsById = new Map(
@@ -13000,7 +13410,8 @@ var curatedSiteStyleIdValues = [
13000
13410
  "site-style:clarity-zen-blue",
13001
13411
  SOFT_EARTH_SITE_STYLE_ID_VALUE,
13002
13412
  "site-style:bold-launch",
13003
- "site-style:south-west-twerk-school"
13413
+ "site-style:south-west-twerk-school",
13414
+ "site-style:original-joy"
13004
13415
  ];
13005
13416
  var quietBudget = {
13006
13417
  accentDensity: "low",
@@ -14046,7 +14457,7 @@ var curatedSiteStyles = [
14046
14457
  "body-text-editorial-intro",
14047
14458
  "schedule-details-brand-depth",
14048
14459
  "testimonials-statement-cards",
14049
- "contact-form-brand-depth-card"
14460
+ "contact-form-panel"
14050
14461
  ],
14051
14462
  recommendedHeaderLookIds: [
14052
14463
  "brand-solid",
@@ -14069,6 +14480,74 @@ var curatedSiteStyles = [
14069
14480
  paletteChoice("brand-led-warm"),
14070
14481
  paletteChoice("high-contrast-ink")
14071
14482
  ]
14483
+ }),
14484
+ defineCuratedSiteStyle({
14485
+ id: "site-style:original-joy",
14486
+ name: "Original Joy",
14487
+ headingDecoration: { family: "organic-squiggle", colorToken: "primary" },
14488
+ description: "Warm, dark, and editorial: deep clay grounds, cream type, and bold burnt-orange accents for soulful community brands.",
14489
+ 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.",
14490
+ tokenRecipes: {
14491
+ palette: "brand-led",
14492
+ contrast: "maximum",
14493
+ radius: "rounded",
14494
+ shadow: "subtle",
14495
+ typography: "clean-sans",
14496
+ spacing: "airy",
14497
+ motion: "expressive"
14498
+ },
14499
+ compositionBudget: expressiveBudget,
14500
+ typographyPresetChoices: [
14501
+ typographyChoice("typography-preset:original-joy"),
14502
+ typographyChoice("typography-preset:bold-display"),
14503
+ typographyChoice("typography-preset:modern-sans")
14504
+ ],
14505
+ defaultTypographyPresetId: "typography-preset:original-joy",
14506
+ themeOverrides: {
14507
+ accordions: boldBorderedAccordionSystem,
14508
+ // Shared card system: warm rounded brown cards (event + testimonial cards
14509
+ // pick this up automatically) with a burnt-orange statement variant.
14510
+ cards: originalJoyCardSystem,
14511
+ testimonialQuote: accentGlyphQuote,
14512
+ bodyText: {
14513
+ intro: {
14514
+ paragraphSize: "editorial",
14515
+ headingSize: "editorial"
14516
+ }
14517
+ }
14518
+ },
14519
+ // Recommended block looks: the bold colour-blocked feature cards, a calm
14520
+ // band for the events spotlight, and statement testimonial cards.
14521
+ recommendedAppearancePresetIds: [
14522
+ "feature-cards-bold-colors",
14523
+ "offerings-calm-list",
14524
+ "testimonials-statement-cards"
14525
+ ],
14526
+ // Floating, transparent "Clear Split" header (no fill behind the nav links).
14527
+ defaultHeaderSelection: { layoutId: "floating", styleId: "minimal-surface" },
14528
+ recommendedHeaderLayoutChoices: [headerLayoutChoice("floating")],
14529
+ recommendedHeaderStyleChoicesByLayout: {
14530
+ floating: [
14531
+ headerStyleChoice("minimal-surface"),
14532
+ headerStyleChoice("split-glass"),
14533
+ headerStyleChoice("glass")
14534
+ ]
14535
+ },
14536
+ // Legacy bridge only (the real curation is the explicit selection above).
14537
+ // Kept to a reserved-space, non-overlay look on purpose: the split hero
14538
+ // flows below the Clear Split header, so we must NOT trigger the immersive
14539
+ // overlay-hero promotion that looks like `floating-glass` would force.
14540
+ recommendedHeaderLookIds: ["minimal-transparent"],
14541
+ recommendedFooterLookIds: [
14542
+ "site-footer-brand-two-band",
14543
+ "footer-muted-grounding"
14544
+ ],
14545
+ buttonPersonalityChoices: [
14546
+ buttonChoice("joy-stamp"),
14547
+ buttonChoice("ink-stamp"),
14548
+ buttonChoice("showtime-pill")
14549
+ ],
14550
+ paletteVariantChoices: [paletteChoice("warm-dark-ember")]
14072
14551
  })
14073
14552
  ];
14074
14553
  var curatedSiteStylesById = new Map(
@@ -14084,26 +14563,6 @@ var microHeroLayoutVariantKey = asLayoutVariantKey("micro");
14084
14563
  var waveBoundaryOptionId = asBoundaryOptionId("break:wave");
14085
14564
 
14086
14565
  // ../theme-core/src/site-styles/pageDesignEditorModel.ts
14087
- var noneBoundaryOption = {
14088
- id: asBoundaryOptionId("break:none"),
14089
- label: "None",
14090
- transitionAfter: "none"
14091
- };
14092
- var softBoundaryOption = {
14093
- id: asBoundaryOptionId("break:soft"),
14094
- label: "Soft",
14095
- transitionAfter: "soft-fade-short"
14096
- };
14097
- var waveBoundaryOption = {
14098
- id: asBoundaryOptionId("break:wave"),
14099
- label: "Wave",
14100
- transitionAfter: "wave-edge"
14101
- };
14102
- var spaciousBoundaryOption = {
14103
- id: asBoundaryOptionId("break:spacious"),
14104
- label: "Spacious",
14105
- transitionAfter: "soft-fade-long"
14106
- };
14107
14566
  var pageFlowPresets = [
14108
14567
  {
14109
14568
  id: asPageFlowPresetId("flow:quiet"),
@@ -14373,8 +14832,7 @@ var defaultDesignRuntimeRules = defineDesignRuntimeRules({
14373
14832
  type: "image",
14374
14833
  opacity: 1,
14375
14834
  position: "center center",
14376
- textColor: "text",
14377
- headingColor: "text"
14835
+ ...uniformSectionForeground("text")
14378
14836
  }
14379
14837
  }
14380
14838
  },
@@ -14484,9 +14942,30 @@ var defaultComponentRuntimeRules = defineComponentRuntimeRules({
14484
14942
  border: {
14485
14943
  enabled: false
14486
14944
  }
14945
+ },
14946
+ "color-blocked": {
14947
+ // Bold, flat colour-blocked cards. The per-card background colour cycle
14948
+ // (by position) and staggered offset live in
14949
+ // blocks-static/card-treatments.css; here we set the shared shape:
14950
+ // generous padding, large radius, no border, flat (no shadow).
14951
+ treatment: "color-blocked",
14952
+ spacing: "spacious",
14953
+ rounded: "2xl",
14954
+ raised: false,
14955
+ border: {
14956
+ enabled: false
14957
+ }
14487
14958
  }
14488
14959
  }
14489
14960
  });
14961
+ function uniformSectionForeground(token) {
14962
+ return {
14963
+ textColor: token,
14964
+ headingColor: token,
14965
+ linkColor: token,
14966
+ supportingColor: token
14967
+ };
14968
+ }
14490
14969
 
14491
14970
  // ../theme-core/src/site-styles/generatedSchemas.ts
14492
14971
  import { z as z25 } from "zod";
@@ -16235,6 +16714,37 @@ function resolveBackgroundColorValue(value, context) {
16235
16714
  });
16236
16715
  }
16237
16716
 
16717
+ // ../blocks/src/system/transforms/registry/_utils/sectionForegroundStyles.ts
16718
+ function readColorToken(input, key) {
16719
+ const value = input[key];
16720
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
16721
+ }
16722
+ function resolveOptionalForegroundColor(value, context) {
16723
+ if (!value) return null;
16724
+ return resolveBackgroundColorValue(value, context);
16725
+ }
16726
+ function resolveSectionForegroundStyles(value, context) {
16727
+ if (!value || typeof value !== "object") {
16728
+ return {};
16729
+ }
16730
+ const input = value;
16731
+ const textColor = readColorToken(input, "textColor");
16732
+ const resolvedText = resolveOptionalForegroundColor(textColor, context);
16733
+ if (!resolvedText) {
16734
+ return {};
16735
+ }
16736
+ const resolvedHeading = resolveOptionalForegroundColor(readColorToken(input, "headingColor"), context) ?? resolvedText;
16737
+ const resolvedLink = resolveOptionalForegroundColor(readColorToken(input, "linkColor"), context) ?? resolvedText;
16738
+ const resolvedSupporting = resolveOptionalForegroundColor(readColorToken(input, "supportingColor"), context) ?? resolvedText;
16739
+ return {
16740
+ color: resolvedText,
16741
+ "--section-text-color": resolvedText,
16742
+ "--section-heading-color": resolvedHeading,
16743
+ "--section-link-color": resolvedLink,
16744
+ "--section-supporting-color": resolvedSupporting
16745
+ };
16746
+ }
16747
+
16238
16748
  // ../blocks/src/system/transforms/registry/boxStyles.ts
16239
16749
  var spacingTransform = {
16240
16750
  id: "boxStyles.spacing",
@@ -16369,6 +16879,8 @@ var boxStylesCompositeTransform = {
16369
16879
  classes.push("rb-card-treatment-editorial-serif-quote");
16370
16880
  } else if (input.treatment === "editorial-open") {
16371
16881
  classes.push("rb-card-treatment-editorial-open");
16882
+ } else if (input.treatment === "color-blocked") {
16883
+ classes.push("rb-card-treatment-color-blocked");
16372
16884
  }
16373
16885
  const cardVariant = normalizeBoxStylesCardVariant(input.cardVariant);
16374
16886
  if (cardVariant && cardVariant !== "none") {
@@ -16644,35 +17156,8 @@ var sectionHeadingColorStyleTransform = {
16644
17156
  var sectionColorsStyleTransform = {
16645
17157
  id: "sectionStyles.resolveColorsStyle",
16646
17158
  kind: "formatter",
16647
- summary: "Resolve section text and heading colors into a style object",
16648
- run: (value, _options, context) => {
16649
- if (!value || typeof value !== "object") {
16650
- return {};
16651
- }
16652
- const bg = value;
16653
- const textColor = typeof bg.textColor === "string" ? bg.textColor.trim() : null;
16654
- const headingColor = typeof bg.headingColor === "string" ? bg.headingColor.trim() : null;
16655
- const style = {};
16656
- if (textColor) {
16657
- const resolvedText = resolveBackgroundColorValue(textColor, context);
16658
- if (resolvedText) {
16659
- style.color = resolvedText;
16660
- style["--section-text-color"] = resolvedText;
16661
- if (headingColor) {
16662
- const resolvedHeading = resolveBackgroundColorValue(
16663
- headingColor,
16664
- context
16665
- );
16666
- if (resolvedHeading) {
16667
- style["--section-heading-color"] = resolvedHeading;
16668
- }
16669
- } else {
16670
- style["--section-heading-color"] = resolvedText;
16671
- }
16672
- }
16673
- }
16674
- return style;
16675
- }
17159
+ summary: "Resolve section foreground colors into a style object",
17160
+ run: (value, _options, context) => resolveSectionForegroundStyles(value, context)
16676
17161
  };
16677
17162
  var GAP_CLASS_MAP = {
16678
17163
  none: "rb-gap-semantic-none",
@@ -16984,46 +17469,6 @@ function sectionState(opts) {
16984
17469
  );
16985
17470
  }
16986
17471
 
16987
- // ../blocks/src/system/node/fragments/headingDecoration.ts
16988
- var defaultBindFrom = "_sectionStyles.headingDecoration";
16989
- function headingDecoration({
16990
- bindFrom = defaultBindFrom,
16991
- className
16992
- } = {}) {
16993
- return el(
16994
- "div",
16995
- // Full-width block row so the mark inherits the heading's alignment. The
16996
- // heading stacks are flexbox; `text-align` positions inline content, not flex
16997
- // items, so the inline-block mark must sit inside a stretched block for a
16998
- // centred heading to centre it (and a left heading to keep it at the start).
16999
- { "aria-hidden": "true", className: "rb-heading-decoration-row" },
17000
- [
17001
- el("div", {
17002
- className: {
17003
- $bind: {
17004
- from: bindFrom,
17005
- transforms: [
17006
- {
17007
- id: "ui.headingDecorationClassName",
17008
- options: { baseClass: className }
17009
- }
17010
- ]
17011
- }
17012
- }
17013
- })
17014
- ],
17015
- // Gate on the presence of `family`. The render-time theme projection omits
17016
- // `headingDecoration` entirely for absent/none signatures, so the
17017
- // dominant "no decoration" case is absent → falsy → not rendered. A presence
17018
- // check (rather than `family !== 'none'`) is deliberate: `when`'s only
17019
- // negation form would render on *absent* values, which would emit a stub on
17020
- // every undecorated heading. The remaining edge — hand-authored content with
17021
- // an explicit `{ family: 'none' }` — renders an aria-hidden `rb-hidden`
17022
- // (display:none) stub with no visual or layout impact.
17023
- when(`${bindFrom}.family`)
17024
- );
17025
- }
17026
-
17027
17472
  // ../blocks/src/system/fragments/types.ts
17028
17473
  import { z as z28 } from "zod";
17029
17474
  var FRAGMENT_ID_PATTERN = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/i;
@@ -17496,6 +17941,9 @@ var heroCopyFragment = defineFragment({
17496
17941
  maxLength: 600
17497
17942
  }
17498
17943
  ],
17944
+ // Layout order is [eyebrow, headline, subheadline]. The hero block's
17945
+ // `splitEditorial` variant reads these nodes by index; keep the order stable
17946
+ // (it fails fast at import if the count changes).
17499
17947
  layout: [
17500
17948
  text(
17501
17949
  {
@@ -17718,6 +18166,7 @@ var heroCtaRowFragment = defineFragment({
17718
18166
  ctaRow({
17719
18167
  collectionPath: "content.ctas",
17720
18168
  itemName: "cta",
18169
+ gap: "md",
17721
18170
  justify: {
17722
18171
  $bind: {
17723
18172
  from: "content",
@@ -17803,7 +18252,6 @@ var testimonialsHeadingFragment = defineFragment({
17803
18252
  when("content.heading"),
17804
18253
  bind("content.heading")
17805
18254
  ),
17806
- headingDecoration(),
17807
18255
  text(
17808
18256
  {
17809
18257
  as: "p",
@@ -18434,7 +18882,7 @@ var blogFeaturedPostFragment = defineFragment({
18434
18882
  });
18435
18883
 
18436
18884
  // ../blocks/src/system/fragments/library/faqHeading.ts
18437
- function faqHeadingLayout(options = {}) {
18885
+ function faqHeadingLayout() {
18438
18886
  return stack(
18439
18887
  {
18440
18888
  gap: "sm",
@@ -18459,7 +18907,6 @@ function faqHeadingLayout(options = {}) {
18459
18907
  when("content.title"),
18460
18908
  bind("content.title")
18461
18909
  ),
18462
- ...options.decorated ? [headingDecoration()] : [],
18463
18910
  richText(
18464
18911
  {
18465
18912
  className: "faq-description rb-prose rb-mx-auto rb-max-w-none",
@@ -18501,7 +18948,6 @@ var faqHeadingFragment = defineFragment({
18501
18948
  ],
18502
18949
  layout: faqHeadingLayout()
18503
18950
  });
18504
- var decoratedFaqHeadingLayout = faqHeadingLayout({ decorated: true });
18505
18951
 
18506
18952
  // ../blocks/src/system/fragments/library/faqAccordion.ts
18507
18953
  function createFaqAccordionLayout(options = {}) {
@@ -19658,12 +20104,38 @@ function splitLayoutWith(children) {
19658
20104
  var splitContentColumn = heroContentWrapper(heroContentNodes, "md", "rb-w-full rb-text-left");
19659
20105
  var splitImageColumn = heroSplitImagePane();
19660
20106
  var splitLayout = splitLayoutWith([
20107
+ splitImageColumn,
20108
+ splitContentColumn
20109
+ ]);
20110
+ var splitReverseLayout = splitLayoutWith([
19661
20111
  splitContentColumn,
19662
20112
  splitImageColumn
19663
20113
  ]);
19664
- var splitReverseLayout = splitLayoutWith([
19665
- splitImageColumn,
19666
- splitContentColumn
20114
+ var heroEyebrowNode = heroCopyFragment.layout[0];
20115
+ var heroHeadlineNode = heroCopyFragment.layout[1];
20116
+ var heroSubheadlineNode = heroCopyFragment.layout[2];
20117
+ var heroCtaRowNode = heroCtaRowFragment.layout[0];
20118
+ if (!heroEyebrowNode || !heroHeadlineNode || !heroSubheadlineNode || !heroCtaRowNode) {
20119
+ throw new Error("Hero copy/CTA fragments are missing their expected layout nodes.");
20120
+ }
20121
+ var heroEditorialBottomRow = inline(
20122
+ {
20123
+ gap: "lg",
20124
+ align: "end",
20125
+ justify: "start",
20126
+ wrap: true,
20127
+ className: "rb-w-full"
20128
+ },
20129
+ [heroSubheadlineNode, heroCtaRowNode]
20130
+ );
20131
+ var splitEditorialContentColumn = heroContentWrapper(
20132
+ [heroEyebrowNode, heroHeadlineNode, heroEditorialBottomRow],
20133
+ "md",
20134
+ "rb-w-full rb-text-left"
20135
+ );
20136
+ var splitEditorialLayout = splitLayoutWith([
20137
+ splitEditorialContentColumn,
20138
+ splitImageColumn
19667
20139
  ]);
19668
20140
  var heroConfig = {
19669
20141
  id: "block.hero",
@@ -19690,7 +20162,8 @@ var heroConfig = {
19690
20162
  classic: classicLayout,
19691
20163
  micro: microLayout,
19692
20164
  split: splitLayout,
19693
- splitReverse: splitReverseLayout
20165
+ splitReverse: splitReverseLayout,
20166
+ splitEditorial: splitEditorialLayout
19694
20167
  },
19695
20168
  defaultVariant: "classic",
19696
20169
  description: "Hero section with headline, subtitle, and repeatable CTAs.",
@@ -19805,18 +20278,6 @@ function introHeading(className) {
19805
20278
  bind("content.title")
19806
20279
  );
19807
20280
  }
19808
- function introHeadingGroup(className) {
19809
- return stack(
19810
- {
19811
- gap: "sm",
19812
- className: "rb-intro-heading-group"
19813
- },
19814
- [
19815
- introHeading(className),
19816
- headingDecoration()
19817
- ]
19818
- );
19819
- }
19820
20281
  function introBody(className = "rb-prose rb-max-w-none") {
19821
20282
  return richText({ className }, bind("content.body"));
19822
20283
  }
@@ -19835,7 +20296,6 @@ function introCopyStack(options = {}) {
19835
20296
  },
19836
20297
  [
19837
20298
  introHeading(options.headingClassName ?? "rb-intro-title"),
19838
- headingDecoration(),
19839
20299
  introBody(options.bodyClassName),
19840
20300
  introCtas(options.ctaJustify)
19841
20301
  ]
@@ -19875,7 +20335,7 @@ var statementCopyLayout = styledSection({
19875
20335
  className: "rb-intro rb-intro-statement rb-grid rb-grid-cols-1 rb-gap-8 rb-md-grid-cols-2 rb-md-items-start"
19876
20336
  },
19877
20337
  [
19878
- introHeadingGroup("rb-intro-title rb-max-w-xl"),
20338
+ introHeading("rb-intro-title rb-max-w-xl"),
19879
20339
  stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
19880
20340
  introBody(),
19881
20341
  introCtas("start")
@@ -19896,7 +20356,7 @@ var statementMediaLayout = styledSection({
19896
20356
  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"
19897
20357
  },
19898
20358
  [
19899
- introHeadingGroup("rb-intro-title rb-max-w-xl"),
20359
+ introHeading("rb-intro-title rb-max-w-xl"),
19900
20360
  stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
19901
20361
  introBody(),
19902
20362
  introCtas("start")
@@ -20839,16 +21299,59 @@ var formComposition = composeFragments([
20839
21299
  { fragment: formCopyFragment },
20840
21300
  { fragment: formEmbedFragment }
20841
21301
  ]);
20842
- var formLayout = styledSection({
20843
- children: styledContainer({
20844
- rootType: "stack",
20845
- rootProps: { gap: "lg" },
20846
- children: formComposition.layout
20847
- }),
20848
- baseClass: "",
20849
- spacing: "medium",
20850
- background: "surface"
20851
- });
21302
+ function fragmentLayoutNode(layout) {
21303
+ return isNodeDefinitionArray(layout) ? el("div", {}, [...layout]) : layout;
21304
+ }
21305
+ function isNodeDefinitionArray(layout) {
21306
+ return Array.isArray(layout);
21307
+ }
21308
+ var copyLayout = fragmentLayoutNode(formCopyFragment.layout);
21309
+ var embedLayout = fragmentLayoutNode(formEmbedFragment.layout);
21310
+ var formSurface = styledContainer({
21311
+ bindFrom: "_containerStyles",
21312
+ constrainWidth: false,
21313
+ baseClassName: "rb-form-surface rb-relative rb-isolate rb-overflow-hidden",
21314
+ children: embedLayout
21315
+ });
21316
+ function createFormLayout(variant) {
21317
+ if (variant === "two-column") {
21318
+ return styledSection({
21319
+ children: el(
21320
+ "div",
21321
+ {
21322
+ className: "rb-container"
21323
+ },
21324
+ [
21325
+ el(
21326
+ "div",
21327
+ {
21328
+ className: "rb-form-two-column rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
21329
+ },
21330
+ [
21331
+ stack({ gap: "md", className: "rb-form-copy-column" }, [copyLayout]),
21332
+ formSurface
21333
+ ]
21334
+ )
21335
+ ]
21336
+ ),
21337
+ baseClass: "",
21338
+ spacing: "medium",
21339
+ background: "surface"
21340
+ });
21341
+ }
21342
+ return styledSection({
21343
+ children: styledContainer({
21344
+ rootType: "stack",
21345
+ rootProps: { gap: "lg" },
21346
+ children: formComposition.layout
21347
+ }),
21348
+ baseClass: "",
21349
+ spacing: "medium",
21350
+ background: "surface"
21351
+ });
21352
+ }
21353
+ var formLayout = createFormLayout("default");
21354
+ var twoColumnFormLayout = createFormLayout("two-column");
20852
21355
  var dataLoaders = buildFragmentDataLoaders(formComposition);
20853
21356
  var formManifest = createBlockManifest({
20854
21357
  id: "block.form",
@@ -20861,6 +21364,23 @@ var formManifest = createBlockManifest({
20861
21364
  { fragment: formEmbedFragment }
20862
21365
  ],
20863
21366
  layout: formLayout,
21367
+ variants: {
21368
+ default: formLayout,
21369
+ "two-column": twoColumnFormLayout
21370
+ },
21371
+ defaultVariant: "default",
21372
+ variantOptions: {
21373
+ default: {
21374
+ label: "Stacked",
21375
+ description: "Copy above the form.",
21376
+ icon: "PanelTop"
21377
+ },
21378
+ "two-column": {
21379
+ label: "Two column",
21380
+ description: "Copy on the left and form on the right.",
21381
+ icon: "Columns2"
21382
+ }
21383
+ },
20864
21384
  styleTokens: { background: "surface", typography: "body", spacing: "md" },
20865
21385
  behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: false },
20866
21386
  category: "interactive",
@@ -20886,15 +21406,14 @@ var formBlockDefinition = {
20886
21406
  };
20887
21407
 
20888
21408
  // ../blocks/src/system/blocks/faq.ts
20889
- function fragmentLayoutNode(layout) {
20890
- return isNodeDefinitionArray(layout) ? el("div", {}, [...layout]) : layout;
21409
+ function fragmentLayoutNode2(layout) {
21410
+ return isNodeDefinitionArray2(layout) ? el("div", {}, [...layout]) : layout;
20891
21411
  }
20892
- function isNodeDefinitionArray(layout) {
21412
+ function isNodeDefinitionArray2(layout) {
20893
21413
  return Array.isArray(layout);
20894
21414
  }
20895
- var headingLayout = fragmentLayoutNode(faqHeadingFragment.layout);
20896
- var accordionLayout = fragmentLayoutNode(faqAccordionFragment.layout);
20897
- var decoratedHeadingLayout = fragmentLayoutNode(decoratedFaqHeadingLayout);
21415
+ var headingLayout = fragmentLayoutNode2(faqHeadingFragment.layout);
21416
+ var accordionLayout = fragmentLayoutNode2(faqAccordionFragment.layout);
20898
21417
  var questionColumnsAccordionLayout = createFaqAccordionLayout({
20899
21418
  rootClassName: "accordion-root rb-faq-question-columns rb-grid rb-grid-cols-1 rb-gap-4 rb-lg-grid-cols-2"
20900
21419
  });
@@ -20902,7 +21421,7 @@ var defaultLayout = styledSection({
20902
21421
  children: styledContainer({
20903
21422
  baseClassName: "rb-relative rb-isolate",
20904
21423
  children: stack({ gap: "xl", className: "rb-w-full rb-max-w-4xl rb-mx-auto" }, [
20905
- decoratedHeadingLayout,
21424
+ headingLayout,
20906
21425
  accordionLayout
20907
21426
  ])
20908
21427
  }),
@@ -20930,7 +21449,7 @@ var questionColumnsLayout = styledSection({
20930
21449
  children: stack(
20931
21450
  { gap: "xl", className: "rb-w-full" },
20932
21451
  [
20933
- decoratedHeadingLayout,
21452
+ headingLayout,
20934
21453
  questionColumnsAccordionLayout
20935
21454
  ]
20936
21455
  )
@@ -21264,7 +21783,7 @@ function resolveHeroContentAlignment(content) {
21264
21783
  const raw = readHeroLayoutString(content, "contentAlignment");
21265
21784
  if (raw === "left" || raw === "center" || raw === "right") return raw;
21266
21785
  const variant = resolveHeroVariant(content);
21267
- if (variant === "split" || variant === "splitReverse") return "left";
21786
+ if (variant === "split" || variant === "splitReverse" || variant === "splitEditorial") return "left";
21268
21787
  return "center";
21269
21788
  }
21270
21789
  function resolveHeroVerticalAlignment(content) {
@@ -21274,7 +21793,7 @@ function resolveHeroVerticalAlignment(content) {
21274
21793
  const minHeight = sectionStyles?.minHeight;
21275
21794
  if (minHeight === "banner" || minHeight === "hero" || minHeight === "immersive") return "center";
21276
21795
  const variant = resolveHeroVariant(content);
21277
- if (variant === "split" || variant === "splitReverse") return "center";
21796
+ if (variant === "split" || variant === "splitReverse" || variant === "splitEditorial") return "center";
21278
21797
  return "top";
21279
21798
  }
21280
21799
  function resolveHeroContentMaxWidth(content) {
@@ -21676,7 +22195,7 @@ function planSiteChromePlacement(positioning) {
21676
22195
  standaloneShellClassName: "fixed left-0 right-0 top-0 z-40 w-full"
21677
22196
  };
21678
22197
  default:
21679
- return assertNever(positioning);
22198
+ return assertNever2(positioning);
21680
22199
  }
21681
22200
  }
21682
22201
 
@@ -22830,7 +23349,7 @@ var floatingLayout = inline(
22830
23349
  ),
22831
23350
  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`
22832
23351
  }),
22833
- align: "center"
23352
+ align: "start"
22834
23353
  },
22835
23354
  [
22836
23355
  logoRow,
@@ -23349,7 +23868,6 @@ var splitHeading = stack(
23349
23868
  when("content.heading"),
23350
23869
  bind("content.heading")
23351
23870
  ),
23352
- headingDecoration(),
23353
23871
  text(
23354
23872
  {
23355
23873
  as: "p",
@@ -23887,7 +24405,6 @@ var sectionHeading = stack(
23887
24405
  when("content.title"),
23888
24406
  bind("content.title")
23889
24407
  ),
23890
- headingDecoration(),
23891
24408
  richText(
23892
24409
  {
23893
24410
  className: "rb-feature-cards-description rb-prose rb-mx-auto rb-max-w-none",
@@ -23920,6 +24437,17 @@ var featureCard = styledCard(
23920
24437
  null,
23921
24438
  bind("card.icon")
23922
24439
  ),
24440
+ // Auto-numbered marker (01, 02, …). Always in the DOM; CSS shows it only
24441
+ // when cardMarker === 'numbers' and fills it via a counter. Its own class
24442
+ // (not the icon zone) so the icon-zone collapse behaviour is unaffected.
24443
+ el(
24444
+ "div",
24445
+ {
24446
+ className: "rb-feature-card-number-zone",
24447
+ "aria-hidden": "true"
24448
+ },
24449
+ null
24450
+ ),
23923
24451
  text(
23924
24452
  {
23925
24453
  as: "h3",
@@ -23959,6 +24487,12 @@ var cardsLayout = styledSection({
23959
24487
  sectionHeading,
23960
24488
  grid3(
23961
24489
  {
24490
+ className: "rb-feature-cards-grid",
24491
+ // Drives which marker shows (icons / numbers / none) via CSS; the
24492
+ // fallback keeps legacy content (no cardMarker) showing icons.
24493
+ "data-card-marker": {
24494
+ $bind: { from: "content.cardMarker", fallback: "icons" }
24495
+ },
23962
24496
  cols: {
23963
24497
  $bind: {
23964
24498
  from: "content.columns",
@@ -24087,11 +24621,25 @@ var featureCardsConfig = {
24087
24621
  }
24088
24622
  },
24089
24623
  {
24090
- id: "_iconTreatment",
24624
+ id: "cardMarker",
24091
24625
  type: "select",
24092
- label: "Icon style",
24626
+ label: "Card marker",
24093
24627
  required: false,
24094
- defaultValue: "soft-badge",
24628
+ defaultValue: "icons",
24629
+ multiple: false,
24630
+ options: [
24631
+ { value: "icons", label: "Icons" },
24632
+ { value: "numbers", label: "Numbers (01, 02, \u2026)" },
24633
+ { value: "none", label: "None" }
24634
+ ],
24635
+ ui: { intent: "display" }
24636
+ },
24637
+ {
24638
+ id: "_iconTreatment",
24639
+ type: "select",
24640
+ label: "Icon style",
24641
+ required: false,
24642
+ defaultValue: "soft-badge",
24095
24643
  multiple: false,
24096
24644
  options: FEATURE_CARD_ICON_TREATMENTS.map((value) => ({
24097
24645
  value,
@@ -24854,6 +25402,22 @@ var eventCategorySchema = z42.object({
24854
25402
  var pricingTypeSchema = z42.enum(["free", "paid", "pass_only", "membership_only"]);
24855
25403
  var accessRestrictionSchema = z42.enum(["none", "category"]);
24856
25404
  var eventPricingModeSchema = z42.enum(["single", "ticket_types"]);
25405
+ var publicCoursePriceDisplaySchema = z42.discriminatedUnion("kind", [
25406
+ z42.object({ kind: z42.literal("free"), currency: z42.string() }),
25407
+ z42.object({ kind: z42.literal("exact"), amount: z42.number(), currency: z42.string() }),
25408
+ z42.object({ kind: z42.literal("from"), amount: z42.number(), currency: z42.string() }),
25409
+ z42.object({ kind: z42.literal("unavailable"), currency: z42.string() })
25410
+ ]);
25411
+ var publicEventPriceDisplaySchema = z42.discriminatedUnion("kind", [
25412
+ z42.object({ kind: z42.literal("free"), currency: z42.string() }),
25413
+ z42.object({ kind: z42.literal("exact"), amount: z42.number(), currency: z42.string() }),
25414
+ z42.object({ kind: z42.literal("from"), amount: z42.number(), currency: z42.string() }),
25415
+ z42.object({ kind: z42.literal("mixed"), paidFromAmount: z42.number(), currency: z42.string() }),
25416
+ z42.object({ kind: z42.literal("pass_only") }),
25417
+ z42.object({ kind: z42.literal("membership_only") }),
25418
+ z42.object({ kind: z42.literal("unavailable"), currency: z42.string() }),
25419
+ z42.object({ kind: z42.literal("course"), display: publicCoursePriceDisplaySchema })
25420
+ ]);
24857
25421
  var publicEventAttendanceModeSchema = z42.enum(["in_person", "online"]);
24858
25422
  var publicEventAttendanceModeAvailabilitySchema = z42.object({
24859
25423
  mode: publicEventAttendanceModeSchema,
@@ -24935,6 +25499,7 @@ var publicEventSchema = z42.object({
24935
25499
  pricingType: pricingTypeSchema,
24936
25500
  price: z42.number().nullable(),
24937
25501
  currency: z42.string(),
25502
+ priceDisplay: publicEventPriceDisplaySchema,
24938
25503
  paymentTerms: blockBookingPaymentTermsSchema,
24939
25504
  pricingMode: eventPricingModeSchema.optional(),
24940
25505
  ticketTypes: z42.array(publicEventTicketTypeSchema).optional(),
@@ -24980,7 +25545,7 @@ var cardStylingFields = [
24980
25545
  description: "Text for the event action button",
24981
25546
  required: false,
24982
25547
  multiline: false,
24983
- defaultValue: "Book now",
25548
+ defaultValue: "Book",
24984
25549
  maxLength: 40
24985
25550
  }
24986
25551
  ];
@@ -26333,7 +26898,7 @@ var eventSpotlightBlockDefinition = {
26333
26898
  };
26334
26899
 
26335
26900
  // ../blocks/src/system/runtime/nodes/events/EventListing.interactive.ts
26336
- import { z as z50 } from "zod";
26901
+ import { z as z51 } from "zod";
26337
26902
 
26338
26903
  // ../blocks/src/system/runtime/nodes/events/shared/utils.ts
26339
26904
  var COLUMN_CLASSES = {
@@ -26439,92 +27004,130 @@ function computeMediaTransformStyle(value, style, targetAspectRatio, options) {
26439
27004
  return mergeStyles(style, stylePatch);
26440
27005
  }
26441
27006
 
27007
+ // ../blocks/src/system/runtime/nodes/events/shared/listOptions.ts
27008
+ import { z as z50 } from "zod";
27009
+ var eventPageSizeValues = [3, 6, 10, 12, 20, 24, 30];
27010
+ var eventPageSizeSchema = z50.union([
27011
+ z50.literal(3),
27012
+ z50.literal(6),
27013
+ z50.literal(10),
27014
+ z50.literal(12),
27015
+ z50.literal(20),
27016
+ z50.literal(24),
27017
+ z50.literal(30)
27018
+ ]);
27019
+ var eventPageSizeSet = new Set(eventPageSizeValues);
27020
+ function resolveEventPageSize(value, fallback = 12) {
27021
+ const candidate = typeof value === "number" ? value : typeof value === "string" && value.trim() !== "" ? Number(value.trim()) : null;
27022
+ return candidate != null && Number.isInteger(candidate) && eventPageSizeSet.has(candidate) ? candidate : fallback;
27023
+ }
27024
+ function resolveEventCalendarListPageSize(input) {
27025
+ return resolveEventPageSize(input.eventsPerPage);
27026
+ }
27027
+ var eventListPaginationActionSchema = z50.discriminatedUnion("kind", [
27028
+ z50.object({
27029
+ kind: z50.literal("loadMore"),
27030
+ label: z50.string()
27031
+ }),
27032
+ z50.object({
27033
+ kind: z50.literal("seeAllLink"),
27034
+ label: z50.string(),
27035
+ href: z50.string()
27036
+ })
27037
+ ]);
27038
+ function resolveEventListPaginationAction(input) {
27039
+ const label = input.loadMoreText?.trim() || input.defaultLabel || "Load more events";
27040
+ const href = input.seeAllUrl?.trim();
27041
+ if (input.paginationMode === "seeAllLink" && href) {
27042
+ return { kind: "seeAllLink", label, href };
27043
+ }
27044
+ return { kind: "loadMore", label };
27045
+ }
27046
+
26442
27047
  // ../blocks/src/system/runtime/nodes/events/EventListing.interactive.ts
26443
- var legacyEventCardVariantSchema = z50.enum(["variant1", "variant2"]);
26444
- var eventCardVariantInputSchema = z50.union([
27048
+ var legacyEventCardVariantSchema = z51.enum(["variant1", "variant2"]);
27049
+ var eventCardVariantInputSchema = z51.union([
26445
27050
  cardVariantRoleSchema,
26446
27051
  legacyEventCardVariantSchema
26447
27052
  ]);
26448
- var cardOrientationSchema = z50.enum(["vertical", "horizontal"]);
26449
- var eventBlockKindSchema = z50.enum(eventBlockKindValues);
26450
- var eventSurfaceScopeSchema = z50.enum(eventSurfaceScopeValues);
26451
- var eventScheduleScopeSchema2 = z50.enum(eventScheduleScopeValues);
26452
- var eventListingSourceSchema = z50.object({
26453
- events: z50.array(publicEventSchema).nullable().optional(),
26454
- siteId: z50.string(),
26455
- apiBaseUrl: z50.string().optional(),
27053
+ var cardOrientationSchema = z51.enum(["vertical", "horizontal"]);
27054
+ var eventBlockKindSchema = z51.enum(eventBlockKindValues);
27055
+ var eventSurfaceScopeSchema = z51.enum(eventSurfaceScopeValues);
27056
+ var eventScheduleScopeSchema2 = z51.enum(eventScheduleScopeValues);
27057
+ var eventListingSourceSchema = z51.object({
27058
+ events: z51.array(publicEventSchema).nullable().optional(),
27059
+ siteId: z51.string(),
27060
+ apiBaseUrl: z51.string().optional(),
26456
27061
  stage: previewStageSchema.optional(),
26457
27062
  layout: eventLayoutSchema.optional(),
26458
27063
  columns: columnOptionSchema.optional(),
26459
- eventsPerPage: z50.string().optional(),
26460
- paginationMode: z50.enum(["loadMore", "seeAllLink"]).optional(),
26461
- seeAllUrl: z50.string().optional(),
26462
- loadMoreText: z50.string().optional(),
27064
+ eventsPerPage: z51.string().optional(),
27065
+ paginationMode: z51.enum(["loadMore", "seeAllLink"]).optional(),
27066
+ seeAllUrl: z51.string().optional(),
27067
+ loadMoreText: z51.string().optional(),
26463
27068
  cardVariant: eventCardVariantInputSchema.optional(),
26464
27069
  buttonVariant: eventButtonVariantSchema.optional(),
26465
- buttonText: z50.string().optional(),
26466
- showVenue: z50.boolean().optional(),
26467
- showMap: z50.boolean().optional(),
26468
- showCapacity: z50.boolean().optional(),
26469
- emptyMessage: z50.string().optional(),
26470
- className: z50.string().optional(),
26471
- showFilters: z50.boolean().nullable().optional(),
27070
+ buttonText: z51.string().optional(),
27071
+ showVenue: z51.boolean().optional(),
27072
+ showMap: z51.boolean().optional(),
27073
+ showCapacity: z51.boolean().optional(),
27074
+ emptyMessage: z51.string().optional(),
27075
+ className: z51.string().optional(),
27076
+ showFilters: z51.boolean().nullable().optional(),
26472
27077
  showCategoryFilter: filterAutoShowSchema.optional(),
26473
- showVenueFilter: z50.boolean().nullable().optional(),
26474
- showStaffFilter: z50.boolean().nullable().optional(),
27078
+ showVenueFilter: z51.boolean().nullable().optional(),
27079
+ showStaffFilter: z51.boolean().nullable().optional(),
26475
27080
  eventKind: eventBlockKindSchema.nullable().optional(),
26476
27081
  eventSurface: eventSurfaceScopeSchema.nullable().optional(),
26477
- filterEventPresets: z50.union([z50.string(), z50.array(z50.string())]).nullable().optional(),
27082
+ filterEventPresets: z51.union([z51.string(), z51.array(z51.string())]).nullable().optional(),
26478
27083
  scheduleScope: eventScheduleScopeSchema2.nullable().optional(),
26479
- filterCategoryIds: z50.string().nullable().optional(),
26480
- filterStaffMemberId: z50.string().nullable().optional(),
26481
- filterVenueId: z50.string().nullable().optional()
27084
+ filterCategoryIds: z51.string().nullable().optional(),
27085
+ filterStaffMemberId: z51.string().nullable().optional(),
27086
+ filterVenueId: z51.string().nullable().optional()
26482
27087
  });
26483
- var eventListingDisplaySchema = z50.object({
26484
- kind: z50.literal("event-listing"),
26485
- state: z50.enum(["loading", "empty", "ready"]),
27088
+ var eventListingDisplaySchema = z51.object({
27089
+ kind: z51.literal("event-listing"),
27090
+ state: z51.enum(["loading", "empty", "ready"]),
26486
27091
  listLayout: eventLayoutSchema,
26487
- className: z50.string().nullable(),
26488
- emptyMessage: z50.string(),
26489
- loadingMessage: z50.string(),
26490
- containerClass: z50.string(),
27092
+ className: z51.string().nullable(),
27093
+ emptyMessage: z51.string(),
27094
+ loadingMessage: z51.string(),
27095
+ containerClass: z51.string(),
26491
27096
  cardVariant: cardVariantRoleSchema,
26492
27097
  buttonVariant: eventButtonVariantSchema,
26493
- buttonText: z50.string(),
26494
- showVenue: z50.boolean(),
26495
- showMap: z50.boolean(),
26496
- showCapacity: z50.boolean(),
27098
+ buttonText: z51.string(),
27099
+ showVenue: z51.boolean(),
27100
+ showMap: z51.boolean(),
27101
+ showCapacity: z51.boolean(),
26497
27102
  orientation: cardOrientationSchema,
26498
- events: z50.array(publicEventSchema)
27103
+ events: z51.array(publicEventSchema)
26499
27104
  });
26500
- var eventListingHydrationSchema = z50.object({
26501
- siteId: z50.string(),
27105
+ var eventListingHydrationSchema = z51.object({
27106
+ siteId: z51.string(),
26502
27107
  stage: previewStageSchema.optional(),
26503
- eventsPerPage: z50.string(),
26504
- paginationMode: z50.enum(["loadMore", "seeAllLink"]),
26505
- seeAllUrl: z50.string().optional(),
26506
- loadMoreText: z50.string(),
26507
- showFilters: z50.boolean(),
27108
+ eventsPerPage: eventPageSizeSchema,
27109
+ paginationAction: eventListPaginationActionSchema,
27110
+ showFilters: z51.boolean(),
26508
27111
  showCategoryFilter: filterAutoShowSchema,
26509
- showVenueFilter: z50.boolean(),
26510
- showStaffFilter: z50.boolean(),
27112
+ showVenueFilter: z51.boolean(),
27113
+ showStaffFilter: z51.boolean(),
26511
27114
  eventKind: eventBlockKindSchema,
26512
27115
  eventSurface: eventSurfaceScopeSchema,
26513
- filterEventPresets: z50.string().nullable(),
27116
+ filterEventPresets: z51.string().nullable(),
26514
27117
  scheduleScope: eventScheduleScopeSchema2,
26515
- filterCategoryIds: z50.string().nullable().optional(),
26516
- filterStaffMemberId: z50.string().nullable().optional(),
26517
- filterVenueId: z50.string().nullable().optional(),
26518
- fetchInitialEventsOnMount: z50.boolean()
27118
+ filterCategoryIds: z51.string().nullable().optional(),
27119
+ filterStaffMemberId: z51.string().nullable().optional(),
27120
+ filterVenueId: z51.string().nullable().optional(),
27121
+ fetchInitialEventsOnMount: z51.boolean()
26519
27122
  });
26520
- var eventListingRenderSchema = z50.object({
27123
+ var eventListingRenderSchema = z51.object({
26521
27124
  display: eventListingDisplaySchema,
26522
27125
  hydration: eventListingHydrationSchema
26523
27126
  });
26524
27127
  var eventListingIslandMetaCodec = createZodCodec(
26525
- z50.object({
26526
- siteId: z50.string(),
26527
- apiBaseUrl: z50.string().optional(),
27128
+ z51.object({
27129
+ siteId: z51.string(),
27130
+ apiBaseUrl: z51.string().optional(),
26528
27131
  stage: previewStageSchema.optional()
26529
27132
  })
26530
27133
  );
@@ -26536,7 +27139,7 @@ var eventListingBlockRuntime = defineProgressiveBlockRuntime({
26536
27139
  },
26537
27140
  buildRender: (source) => {
26538
27141
  const normalizedEvents = Array.isArray(source.events) ? source.events : [];
26539
- const pageSize = parseInt(source.eventsPerPage ?? "12", 10) || 12;
27142
+ const pageSize = resolveEventPageSize(source.eventsPerPage);
26540
27143
  const initialEvents = normalizedEvents.slice(0, pageSize);
26541
27144
  const didPrefetchEvents = source.events != null;
26542
27145
  const layout = source.layout ?? "grid";
@@ -26551,7 +27154,7 @@ var eventListingBlockRuntime = defineProgressiveBlockRuntime({
26551
27154
  containerClass: getContainerClass(layout, source.columns ?? "3"),
26552
27155
  cardVariant: normalizeCardVariantRole(source.cardVariant) ?? "default",
26553
27156
  buttonVariant: source.buttonVariant ?? "primary",
26554
- buttonText: source.buttonText ?? "Book now",
27157
+ buttonText: source.buttonText ?? "Book",
26555
27158
  showVenue: source.showVenue ?? true,
26556
27159
  showMap: source.showMap ?? true,
26557
27160
  showCapacity: source.showCapacity ?? true,
@@ -26561,10 +27164,12 @@ var eventListingBlockRuntime = defineProgressiveBlockRuntime({
26561
27164
  hydration: {
26562
27165
  siteId: source.siteId,
26563
27166
  stage: source.stage,
26564
- eventsPerPage: source.eventsPerPage ?? "12",
26565
- paginationMode: source.paginationMode ?? "loadMore",
26566
- seeAllUrl: source.seeAllUrl,
26567
- loadMoreText: source.loadMoreText || "Load more",
27167
+ eventsPerPage: pageSize,
27168
+ paginationAction: resolveEventListPaginationAction({
27169
+ paginationMode: source.paginationMode,
27170
+ seeAllUrl: source.seeAllUrl,
27171
+ loadMoreText: source.loadMoreText
27172
+ }),
26568
27173
  showFilters: source.showFilters ?? false,
26569
27174
  showCategoryFilter: source.showCategoryFilter ?? "auto",
26570
27175
  showVenueFilter: source.showVenueFilter ?? false,
@@ -26786,7 +27391,7 @@ var eventListingLayout = [
26786
27391
  loadMoreText: { $bind: { from: "content.loadMoreText", fallback: "Load more events" } },
26787
27392
  cardVariant: { $bind: { from: "content.cardVariant", fallback: "default" } },
26788
27393
  buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
26789
- buttonText: { $bind: { from: "content.buttonText", fallback: "Book now" } },
27394
+ buttonText: { $bind: { from: "content.buttonText", fallback: "Book" } },
26790
27395
  showVenue: { $bind: { from: "content.showVenue" } },
26791
27396
  showMap: { $bind: { from: "content.showMap" } },
26792
27397
  showCapacity: { $bind: { from: "content.showCapacity" } },
@@ -26881,15 +27486,15 @@ var eventListingBlockDefinition = {
26881
27486
  };
26882
27487
 
26883
27488
  // ../blocks/src/system/runtime/nodes/events/EventCalendar.interactive.ts
26884
- import { z as z51 } from "zod";
26885
- var eventBlockKindSchema2 = z51.enum(eventBlockKindValues);
26886
- var eventSurfaceScopeSchema2 = z51.enum(eventSurfaceScopeValues);
26887
- var eventScheduleScopeSchema3 = z51.enum(eventScheduleScopeValues);
26888
- var eventCalendarSourceSchema = z51.object(
27489
+ import { z as z52 } from "zod";
27490
+ var eventBlockKindSchema2 = z52.enum(eventBlockKindValues);
27491
+ var eventSurfaceScopeSchema2 = z52.enum(eventSurfaceScopeValues);
27492
+ var eventScheduleScopeSchema3 = z52.enum(eventScheduleScopeValues);
27493
+ var eventCalendarSourceSchema = z52.object(
26889
27494
  {
26890
- events: z51.array(publicEventSchema).nullable().optional(),
26891
- siteId: z51.string(),
26892
- apiBaseUrl: z51.string().optional(),
27495
+ events: z52.array(publicEventSchema).nullable().optional(),
27496
+ siteId: z52.string(),
27497
+ apiBaseUrl: z52.string().optional(),
26893
27498
  stage: previewStageSchema.optional(),
26894
27499
  variant: eventCalendarDisplayModeSchema.nullable().optional(),
26895
27500
  displayMode: eventCalendarDisplayModeSchema.nullable().optional(),
@@ -26897,77 +27502,78 @@ var eventCalendarSourceSchema = z51.object(
26897
27502
  listColumns: columnOptionSchema.optional(),
26898
27503
  layout: eventLayoutSchema.optional(),
26899
27504
  columns: columnOptionSchema.optional(),
26900
- eventsPerPage: z51.string().optional(),
26901
- compactEventsPerPage: z51.string().optional(),
26902
- loadMoreText: z51.string().optional(),
27505
+ eventsPerPage: z52.string().optional(),
27506
+ paginationMode: z52.enum(["loadMore", "seeAllLink"]).optional(),
27507
+ seeAllUrl: z52.string().optional(),
27508
+ loadMoreText: z52.string().optional(),
26903
27509
  startOfWeek: weekStartSchema.optional(),
26904
27510
  calendarTabViews: calendarTabViewsSchema.optional(),
26905
- showFilters: z51.boolean().nullable().optional(),
27511
+ showFilters: z52.boolean().nullable().optional(),
26906
27512
  showCategoryFilter: filterAutoShowSchema.optional(),
26907
- showVenueFilter: z51.boolean().nullable().optional(),
26908
- showStaffFilter: z51.boolean().nullable().optional(),
27513
+ showVenueFilter: z52.boolean().nullable().optional(),
27514
+ showStaffFilter: z52.boolean().nullable().optional(),
26909
27515
  kind: eventBlockKindSchema2.nullable().optional(),
26910
27516
  eventSurface: eventSurfaceScopeSchema2.nullable().optional(),
26911
- filterEventPresets: z51.union([z51.string(), z51.array(z51.string())]).nullable().optional(),
27517
+ filterEventPresets: z52.union([z52.string(), z52.array(z52.string())]).nullable().optional(),
26912
27518
  scheduleScope: eventScheduleScopeSchema3.nullable().optional(),
26913
- filterCategoryIds: z51.union([z51.string(), z51.array(z51.string())]).nullable().optional(),
26914
- filterStaffMemberId: z51.string().nullable().optional(),
26915
- filterVenueId: z51.string().nullable().optional(),
27519
+ filterCategoryIds: z52.union([z52.string(), z52.array(z52.string())]).nullable().optional(),
27520
+ filterStaffMemberId: z52.string().nullable().optional(),
27521
+ filterVenueId: z52.string().nullable().optional(),
26916
27522
  buttonVariant: eventButtonVariantSchema.optional(),
26917
- buttonText: z51.string().optional(),
26918
- showVenue: z51.boolean().nullable().optional(),
26919
- showMap: z51.boolean().nullable().optional(),
26920
- showCapacity: z51.boolean().nullable().optional(),
26921
- emptyMessage: z51.string().optional(),
26922
- className: z51.string().optional()
27523
+ buttonText: z52.string().optional(),
27524
+ showVenue: z52.boolean().nullable().optional(),
27525
+ showMap: z52.boolean().nullable().optional(),
27526
+ showCapacity: z52.boolean().nullable().optional(),
27527
+ emptyMessage: z52.string().optional(),
27528
+ className: z52.string().optional()
26923
27529
  }
26924
27530
  );
26925
- var eventCalendarDisplaySchema = z51.object({
26926
- kind: z51.literal("event-calendar"),
27531
+ var eventCalendarDisplaySchema = z52.object({
27532
+ kind: z52.literal("event-calendar"),
26927
27533
  displayMode: eventCalendarDisplayModeSchema,
26928
- className: z51.string().nullable(),
26929
- events: z51.array(publicEventSchema),
27534
+ className: z52.string().nullable(),
27535
+ events: z52.array(publicEventSchema),
26930
27536
  listLayout: eventLayoutSchema,
26931
27537
  listColumns: columnOptionSchema,
26932
- eventsPerPage: z51.string(),
26933
- loadMoreText: z51.string(),
27538
+ eventsPerPage: eventPageSizeSchema,
27539
+ paginationAction: eventListPaginationActionSchema,
26934
27540
  startOfWeek: weekStartSchema,
26935
27541
  calendarTabViews: calendarTabViewsSchema,
26936
- showFilters: z51.boolean(),
27542
+ showFilters: z52.boolean(),
26937
27543
  showCategoryFilter: filterAutoShowSchema,
26938
- showVenueFilter: z51.boolean(),
26939
- showStaffFilter: z51.boolean(),
27544
+ showVenueFilter: z52.boolean(),
27545
+ showStaffFilter: z52.boolean(),
26940
27546
  eventKind: eventBlockKindSchema2,
26941
27547
  eventSurface: eventSurfaceScopeSchema2,
26942
- filterEventPresets: z51.string().nullable(),
27548
+ filterEventPresets: z52.string().nullable(),
26943
27549
  scheduleScope: eventScheduleScopeSchema3,
26944
- filterCategoryIds: z51.string().nullable(),
26945
- filterStaffMemberId: z51.string().nullable(),
26946
- filterVenueId: z51.string().nullable(),
27550
+ filterCategoryIds: z52.string().nullable(),
27551
+ filterStaffMemberId: z52.string().nullable(),
27552
+ filterVenueId: z52.string().nullable(),
26947
27553
  buttonVariant: eventButtonVariantSchema,
26948
- buttonText: z51.string(),
26949
- showVenue: z51.boolean(),
26950
- showMap: z51.boolean(),
26951
- showCapacity: z51.boolean(),
26952
- emptyMessage: z51.string()
26953
- });
26954
- var eventCalendarHydrationSchema = z51.object({
26955
- siteId: z51.string(),
27554
+ buttonText: z52.string(),
27555
+ showVenue: z52.boolean(),
27556
+ showMap: z52.boolean(),
27557
+ showCapacity: z52.boolean(),
27558
+ emptyMessage: z52.string()
27559
+ });
27560
+ var eventCalendarHydrationSchema = z52.object({
27561
+ siteId: z52.string(),
26956
27562
  stage: previewStageSchema.optional(),
26957
- prefetchedEvents: z51.boolean(),
27563
+ prefetchedEvents: z52.boolean(),
26958
27564
  eventKind: eventBlockKindSchema2,
26959
27565
  eventSurface: eventSurfaceScopeSchema2,
26960
- filterEventPresets: z51.string().nullable(),
27566
+ filterEventPresets: z52.string().nullable(),
26961
27567
  scheduleScope: eventScheduleScopeSchema3
26962
27568
  });
26963
- var eventCalendarRenderSchema = z51.object({
27569
+ var eventCalendarRenderSchema = z52.object({
26964
27570
  display: eventCalendarDisplaySchema,
26965
27571
  hydration: eventCalendarHydrationSchema
26966
27572
  });
26967
27573
  var eventCalendarIslandMetaCodec = createZodCodec(
26968
- z51.object({
26969
- siteId: z51.string(),
26970
- apiBaseUrl: z51.string().optional(),
27574
+ z52.object({
27575
+ siteId: z52.string(),
27576
+ apiBaseUrl: z52.string().optional(),
26971
27577
  stage: previewStageSchema.optional()
26972
27578
  })
26973
27579
  );
@@ -26977,6 +27583,7 @@ var eventCalendarIslandMetaKeys = defineInteractiveIslandMetaKeys(
26977
27583
  "stage"
26978
27584
  );
26979
27585
  function buildEventCalendarDisplay(source) {
27586
+ const listLayout = source.listLayout ?? source.layout ?? "stack";
26980
27587
  return {
26981
27588
  kind: "event-calendar",
26982
27589
  displayMode: source.variant ?? source.displayMode ?? "combined",
@@ -26984,10 +27591,16 @@ function buildEventCalendarDisplay(source) {
26984
27591
  events: (source.events ?? []).slice().sort(
26985
27592
  (left, right) => new Date(left.startsAt).getTime() - new Date(right.startsAt).getTime()
26986
27593
  ),
26987
- listLayout: source.listLayout ?? source.layout ?? "stack",
27594
+ listLayout,
26988
27595
  listColumns: source.listColumns ?? source.columns ?? "3",
26989
- eventsPerPage: (source.listLayout ?? source.layout) === "compact" ? source.compactEventsPerPage ?? "10" : source.eventsPerPage ?? "12",
26990
- loadMoreText: source.loadMoreText ?? "Load more events",
27596
+ eventsPerPage: resolveEventCalendarListPageSize({
27597
+ eventsPerPage: source.eventsPerPage
27598
+ }),
27599
+ paginationAction: resolveEventListPaginationAction({
27600
+ paginationMode: source.paginationMode,
27601
+ seeAllUrl: source.seeAllUrl,
27602
+ loadMoreText: source.loadMoreText
27603
+ }),
26991
27604
  startOfWeek: source.startOfWeek ?? "monday",
26992
27605
  calendarTabViews: source.calendarTabViews ?? "both",
26993
27606
  showFilters: source.showFilters ?? true,
@@ -27004,7 +27617,7 @@ function buildEventCalendarDisplay(source) {
27004
27617
  ),
27005
27618
  filterVenueId: normalizeEventVenueId(source.filterVenueId),
27006
27619
  buttonVariant: source.buttonVariant ?? "primary",
27007
- buttonText: source.buttonText ?? "Book now",
27620
+ buttonText: source.buttonText ?? "Book",
27008
27621
  showVenue: source.showVenue ?? true,
27009
27622
  showMap: source.showMap ?? true,
27010
27623
  showCapacity: source.showCapacity ?? true,
@@ -27104,10 +27717,16 @@ var eventCalendarLayout = [
27104
27717
  layout: { $bind: { from: "content.layout" } },
27105
27718
  columns: { $bind: { from: "content.columns" } },
27106
27719
  eventsPerPage: {
27107
- $bind: { from: "content.eventsPerPage", fallback: "12" }
27720
+ $bind: { from: "content.eventsPerPage" }
27108
27721
  },
27109
- compactEventsPerPage: {
27110
- $bind: { from: "content.compactEventsPerPage", fallback: "10" }
27722
+ paginationMode: {
27723
+ $bind: { from: "content.paginationMode", fallback: "loadMore" }
27724
+ },
27725
+ seeAllUrl: {
27726
+ $bind: {
27727
+ from: "content.seeAllUrl",
27728
+ transforms: [{ id: "links.resolve" }]
27729
+ }
27111
27730
  },
27112
27731
  loadMoreText: {
27113
27732
  $bind: {
@@ -27160,7 +27779,7 @@ var eventCalendarLayout = [
27160
27779
  $bind: { from: "content.buttonVariant", fallback: "primary" }
27161
27780
  },
27162
27781
  buttonText: {
27163
- $bind: { from: "content.buttonText", fallback: "Book now" }
27782
+ $bind: { from: "content.buttonText", fallback: "Book" }
27164
27783
  },
27165
27784
  emptyMessage: { $bind: { from: "content.emptyMessage" } }
27166
27785
  })
@@ -27234,15 +27853,18 @@ var eventCalendarAdditionalFields = [
27234
27853
  {
27235
27854
  id: "eventsPerPage",
27236
27855
  type: "select",
27237
- label: "Events per page (cards)",
27238
- description: "Number of events to load initially in card layouts",
27856
+ label: "Events per page",
27857
+ description: "Number of events to load initially",
27239
27858
  required: false,
27240
27859
  multiple: false,
27241
27860
  defaultValue: "12",
27242
27861
  options: [
27243
27862
  { value: "6", label: "6" },
27863
+ { value: "10", label: "10" },
27244
27864
  { value: "12", label: "12" },
27245
- { value: "24", label: "24" }
27865
+ { value: "20", label: "20" },
27866
+ { value: "24", label: "24" },
27867
+ { value: "30", label: "30" }
27246
27868
  ],
27247
27869
  ui: {
27248
27870
  intent: "display",
@@ -27250,33 +27872,42 @@ var eventCalendarAdditionalFields = [
27250
27872
  }
27251
27873
  },
27252
27874
  {
27253
- id: "compactEventsPerPage",
27875
+ id: "paginationMode",
27254
27876
  type: "select",
27255
- label: "Events per page (compact)",
27256
- description: "Number of events to show per page in compact layout",
27877
+ label: "More events",
27878
+ description: "How to access events beyond the initial list",
27257
27879
  required: false,
27258
27880
  multiple: false,
27259
- defaultValue: "10",
27881
+ defaultValue: "loadMore",
27260
27882
  options: [
27261
- { value: "10", label: "10" },
27262
- { value: "20", label: "20" },
27263
- { value: "30", label: "30" }
27883
+ { value: "loadMore", label: "Load more button" },
27884
+ { value: "seeAllLink", label: "Link to another page" }
27264
27885
  ],
27265
27886
  ui: {
27266
27887
  intent: "display",
27267
- visibleWhen: { field: "listLayout", equals: "compact" }
27888
+ visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
27889
+ }
27890
+ },
27891
+ {
27892
+ id: "seeAllUrl",
27893
+ type: "link",
27894
+ label: "See all destination",
27895
+ required: false,
27896
+ ui: {
27897
+ intent: "display",
27898
+ visibleWhen: { field: "paginationMode", equals: "seeAllLink" }
27268
27899
  }
27269
27900
  },
27270
27901
  {
27271
27902
  id: "loadMoreText",
27272
27903
  type: "text",
27273
- label: "Load more button text",
27274
- description: "Text for the load more button",
27904
+ label: "CTA button text",
27905
+ description: "Text for the load more button or linked CTA",
27275
27906
  required: false,
27276
27907
  multiline: false,
27277
27908
  defaultValue: "Load more events",
27278
27909
  ui: {
27279
- intent: "content",
27910
+ intent: "display",
27280
27911
  visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
27281
27912
  }
27282
27913
  },
@@ -27527,51 +28158,393 @@ var eventCalendarAdditionalFields = [
27527
28158
  renderInHeader: false
27528
28159
  })
27529
28160
  ];
27530
- var eventCalendarVariants = {
27531
- combined: eventCalendarLayout[0],
27532
- month: eventCalendarLayout[0],
27533
- week: eventCalendarLayout[0],
27534
- timetable: eventCalendarLayout[0],
27535
- list: eventCalendarLayout[0]
27536
- };
27537
- var eventCalendarDerivedFields = [
27538
- {
27539
- id: "displayMode",
27540
- type: "select",
27541
- required: false,
27542
- multiple: false,
27543
- options: [
27544
- { value: "combined" },
27545
- { value: "month" },
27546
- { value: "week" },
27547
- { value: "timetable" },
27548
- { value: "list" }
27549
- ]
27550
- },
27551
- {
27552
- id: "listLayout",
27553
- type: "select",
27554
- required: false,
27555
- multiple: false,
27556
- options: eventCalendarListLayoutOptions.map((option) => ({
27557
- value: option.id
27558
- }))
27559
- }
27560
- ];
27561
- var eventCalendarContentShape = {
27562
- additionalFields: eventCalendarDerivedFields,
27563
- variants: eventCalendarVariants,
27564
- skipSectionStyles: true
27565
- };
27566
- var eventCalendarConfig = {
27567
- id: "block.event-calendar",
27568
- version: "3.6.0",
27569
- title: "Event Calendar",
28161
+ var eventCalendarVariants = {
28162
+ combined: eventCalendarLayout[0],
28163
+ month: eventCalendarLayout[0],
28164
+ week: eventCalendarLayout[0],
28165
+ timetable: eventCalendarLayout[0],
28166
+ list: eventCalendarLayout[0]
28167
+ };
28168
+ var eventCalendarDerivedFields = [
28169
+ {
28170
+ id: "displayMode",
28171
+ type: "select",
28172
+ required: false,
28173
+ multiple: false,
28174
+ options: [
28175
+ { value: "combined" },
28176
+ { value: "month" },
28177
+ { value: "week" },
28178
+ { value: "timetable" },
28179
+ { value: "list" }
28180
+ ]
28181
+ },
28182
+ {
28183
+ id: "listLayout",
28184
+ type: "select",
28185
+ required: false,
28186
+ multiple: false,
28187
+ options: eventCalendarListLayoutOptions.map((option) => ({
28188
+ value: option.id
28189
+ }))
28190
+ }
28191
+ ];
28192
+ var eventCalendarContentShape = {
28193
+ additionalFields: eventCalendarDerivedFields,
28194
+ variants: eventCalendarVariants,
28195
+ skipSectionStyles: true
28196
+ };
28197
+ var eventCalendarConfig = {
28198
+ id: "block.event-calendar",
28199
+ version: "3.6.0",
28200
+ title: "Event Calendar",
28201
+ titleSource: "heading",
28202
+ description: "Display events with calendar, list, or combined views with filtering",
28203
+ // Preserve legacy section styles field configuration (renderInHeader: false).
28204
+ skipSectionStyles: true,
28205
+ additionalFields: eventCalendarAdditionalFields,
28206
+ styleTokens: { background: "surface", typography: "body", spacing: "md" },
28207
+ behaviours: {
28208
+ supportsThemeSwitching: true,
28209
+ inlineEditing: false,
28210
+ animation: false,
28211
+ paletteHidden: false
28212
+ },
28213
+ category: "interactive",
28214
+ tags: [
28215
+ "events",
28216
+ "calendar",
28217
+ "month",
28218
+ "week",
28219
+ "schedule",
28220
+ "interactive",
28221
+ "list",
28222
+ "filter"
28223
+ ],
28224
+ icon: "CalendarDays",
28225
+ layout: eventCalendarLayout,
28226
+ variants: eventCalendarVariants,
28227
+ defaultVariant: "combined",
28228
+ variantOptions: {
28229
+ combined: { label: "Combined" },
28230
+ month: { label: "Month" },
28231
+ week: { label: "Week" },
28232
+ timetable: { label: "Timetable" },
28233
+ list: { label: "List" }
28234
+ }
28235
+ };
28236
+ var eventCalendarManifest = createBlockManifestWithContentShape(
28237
+ eventCalendarConfig,
28238
+ eventCalendarContentShape
28239
+ );
28240
+ var eventCalendarBlockDefinition = {
28241
+ manifest: eventCalendarManifest,
28242
+ normalizeContent: normalizeEventCalendarContent,
28243
+ dataSchemas: {
28244
+ events: publicEventsArraySchema.optional()
28245
+ },
28246
+ dataLoaders: {
28247
+ events: {
28248
+ endpoint: "listPublicEvents",
28249
+ params: {
28250
+ siteId: { $bind: { from: "$root.siteId" } },
28251
+ // Pre-fetch events - limit varies by mode but default to high for calendar
28252
+ limit: 100,
28253
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
28254
+ detailLevel: "listing",
28255
+ readProfile: { $bind: { from: "content.variant", fallback: "listing-card" } },
28256
+ // Pass filter params if configured
28257
+ kind: { $bind: { from: "content.kind" } },
28258
+ eventSurface: { $bind: { from: "content.eventSurface" } },
28259
+ eventPresets: {
28260
+ $bind: {
28261
+ from: "content.filterEventPresets",
28262
+ transforms: [{ id: "value.csv" }]
28263
+ }
28264
+ },
28265
+ scheduleScope: { $bind: { from: "content.scheduleScope" } },
28266
+ categoryIds: { $bind: { from: "content.filterCategoryIds" } },
28267
+ staffMemberId: { $bind: { from: "content.filterStaffMemberId" } },
28268
+ venueId: { $bind: { from: "content.filterVenueId" } }
28269
+ },
28270
+ mode: "server"
28271
+ }
28272
+ },
28273
+ runtime: eventCalendarBlockRuntime
28274
+ };
28275
+
28276
+ // ../blocks/src/system/blocks/offerings-preview/index.ts
28277
+ import { z as z53 } from "zod";
28278
+
28279
+ // ../blocks/src/system/blocks/offerings-preview/model.ts
28280
+ var OFFERINGS_PREVIEW_DEFAULT_ITEM_LIMIT = "3";
28281
+ var OFFERINGS_PREVIEW_DEFAULT_BUTTON_TEXT = "Book";
28282
+ var OFFERINGS_PREVIEW_DEFAULT_EMPTY_MESSAGE = "Nothing scheduled just yet.";
28283
+ var OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS = [
28284
+ {
28285
+ preset: "class",
28286
+ sourceKey: "eventPreset:class",
28287
+ dataKey: "classEvents",
28288
+ label: "Classes"
28289
+ },
28290
+ {
28291
+ preset: "workshop",
28292
+ sourceKey: "eventPreset:workshop",
28293
+ dataKey: "workshopEvents",
28294
+ label: "Workshops"
28295
+ },
28296
+ {
28297
+ preset: "retreat",
28298
+ sourceKey: "eventPreset:retreat",
28299
+ dataKey: "retreatEvents",
28300
+ label: "Retreats"
28301
+ },
28302
+ {
28303
+ preset: "performance",
28304
+ sourceKey: "eventPreset:performance",
28305
+ dataKey: "performanceEvents",
28306
+ label: "Performances"
28307
+ }
28308
+ ];
28309
+ var OFFERINGS_PREVIEW_EVENT_PRESETS = OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => definition.preset);
28310
+ var OFFERINGS_PREVIEW_AUTHORABLE_SOURCE_KEYS = [
28311
+ ...OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => definition.sourceKey),
28312
+ "course"
28313
+ ];
28314
+ var eventPresetSourceByKey = Object.fromEntries(
28315
+ OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [
28316
+ definition.sourceKey,
28317
+ { kind: "eventPreset", preset: definition.preset }
28318
+ ])
28319
+ );
28320
+
28321
+ // ../blocks/src/system/blocks/offerings-preview/index.ts
28322
+ var publicRouteCandidatesSchema = z53.object({
28323
+ routes: z53.array(z53.object({
28324
+ entityId: z53.string(),
28325
+ path: z53.string(),
28326
+ title: z53.string(),
28327
+ kind: z53.enum(["page", "content"]),
28328
+ contentTypeKey: z53.string().nullable().optional()
28329
+ }))
28330
+ });
28331
+ var groupOverrideFields = [
28332
+ {
28333
+ id: "sourceKey",
28334
+ type: "select",
28335
+ label: "Offering",
28336
+ required: true,
28337
+ multiple: false,
28338
+ options: [
28339
+ ...OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => ({
28340
+ value: definition.sourceKey,
28341
+ label: definition.label
28342
+ })),
28343
+ { value: "course", label: "Courses" }
28344
+ ],
28345
+ ui: { intent: "behavior" }
28346
+ },
28347
+ {
28348
+ id: "title",
28349
+ type: "text",
28350
+ label: "Title",
28351
+ required: false,
28352
+ multiline: false,
28353
+ maxLength: 80,
28354
+ ui: { intent: "content" }
28355
+ },
28356
+ {
28357
+ id: "intro",
28358
+ type: "text",
28359
+ label: "Intro",
28360
+ required: false,
28361
+ multiline: true,
28362
+ maxLength: 220,
28363
+ ui: { intent: "content" }
28364
+ },
28365
+ {
28366
+ id: "hidden",
28367
+ type: "boolean",
28368
+ label: "Hide this card",
28369
+ required: false,
28370
+ defaultValue: false,
28371
+ ui: { intent: "display" }
28372
+ },
28373
+ {
28374
+ id: "presentation",
28375
+ type: "select",
28376
+ label: "Items",
28377
+ required: false,
28378
+ multiple: false,
28379
+ defaultValue: "compact-list",
28380
+ options: [
28381
+ { value: "compact-list", label: "Compact list" },
28382
+ { value: "single-card", label: "Single card" }
28383
+ ],
28384
+ ui: { intent: "display" }
28385
+ },
28386
+ {
28387
+ id: "ctaMode",
28388
+ type: "select",
28389
+ label: "Card link",
28390
+ required: false,
28391
+ multiple: false,
28392
+ defaultValue: "auto",
28393
+ options: [
28394
+ { value: "auto", label: "Auto" },
28395
+ { value: "custom", label: "Custom link" },
28396
+ { value: "hidden", label: "Hidden" }
28397
+ ],
28398
+ ui: { intent: "behavior" }
28399
+ },
28400
+ {
28401
+ id: "ctaLabel",
28402
+ type: "text",
28403
+ label: "Card link label",
28404
+ required: false,
28405
+ multiline: false,
28406
+ maxLength: 40,
28407
+ ui: { intent: "content" }
28408
+ },
28409
+ {
28410
+ id: "ctaHref",
28411
+ type: "text",
28412
+ label: "Custom card link",
28413
+ required: false,
28414
+ multiline: false,
28415
+ maxLength: 160,
28416
+ ui: { intent: "behavior" }
28417
+ }
28418
+ ];
28419
+ var offeringsPreviewFields = [
28420
+ ...sectionHeaderFields("Offerings"),
28421
+ {
28422
+ id: "itemLimit",
28423
+ type: "select",
28424
+ label: "Items per card",
28425
+ required: false,
28426
+ multiple: false,
28427
+ defaultValue: OFFERINGS_PREVIEW_DEFAULT_ITEM_LIMIT,
28428
+ options: [
28429
+ { value: "1", label: "1 item" },
28430
+ { value: "2", label: "2 items" },
28431
+ { value: "3", label: "3 items" },
28432
+ { value: "4", label: "4 items" },
28433
+ { value: "5", label: "5 items" },
28434
+ { value: "6", label: "6 items" }
28435
+ ],
28436
+ ui: { intent: "display" }
28437
+ },
28438
+ {
28439
+ id: "groupOverrides",
28440
+ type: "repeater",
28441
+ label: "Card overrides",
28442
+ description: "Edit card copy, order, or visibility for enabled offering presets.",
28443
+ required: false,
28444
+ maxItems: 5,
28445
+ itemLabel: "Offering card",
28446
+ itemLabelSource: "title",
28447
+ allowConversion: false,
28448
+ ui: { intent: "content" },
28449
+ schema: { fields: groupOverrideFields }
28450
+ },
28451
+ {
28452
+ id: "buttonVariant",
28453
+ type: "select",
28454
+ label: "Item button style",
28455
+ required: false,
28456
+ multiple: false,
28457
+ defaultValue: "primary",
28458
+ options: [
28459
+ { value: "primary", label: "Primary" },
28460
+ { value: "secondary", label: "Secondary" },
28461
+ { value: "outline", label: "Outline" },
28462
+ { value: "link", label: "Link" }
28463
+ ],
28464
+ ui: { intent: "display" }
28465
+ },
28466
+ {
28467
+ id: "buttonText",
28468
+ type: "text",
28469
+ label: "Item button text",
28470
+ required: false,
28471
+ multiline: false,
28472
+ defaultValue: OFFERINGS_PREVIEW_DEFAULT_BUTTON_TEXT,
28473
+ maxLength: 40,
28474
+ ui: { intent: "content" }
28475
+ },
28476
+ {
28477
+ id: "emptyMessage",
28478
+ type: "text",
28479
+ label: "Empty card message",
28480
+ required: false,
28481
+ multiline: false,
28482
+ defaultValue: OFFERINGS_PREVIEW_DEFAULT_EMPTY_MESSAGE,
28483
+ maxLength: 120,
28484
+ ui: { intent: "content" }
28485
+ },
28486
+ cardStylesField({
28487
+ id: "_cardStyles",
28488
+ label: "Offering card styles"
28489
+ }),
28490
+ sectionStylesField({
28491
+ id: "_sectionStyles",
28492
+ label: "Section styles",
28493
+ renderInHeader: false
28494
+ })
28495
+ ];
28496
+ var offeringsPreviewEventDataBindings = Object.fromEntries(
28497
+ OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [
28498
+ definition.dataKey,
28499
+ { $bind: { from: `data.${definition.dataKey}` } }
28500
+ ])
28501
+ );
28502
+ var offeringsPreviewLayout = [
28503
+ styledSection({
28504
+ children: sectionContainer([
28505
+ text(
28506
+ { as: "h2", className: "rb-text-center" },
28507
+ bind("content.heading"),
28508
+ when("content.heading")
28509
+ ),
28510
+ richText(
28511
+ { className: "rb-prose rb-max-w-none" },
28512
+ bind("content.description"),
28513
+ when("content.description")
28514
+ ),
28515
+ el("offerings-preview", {
28516
+ bookingOfferingPresets: {
28517
+ $bind: { from: "$root.bookingOfferingPresets", fallback: [] }
28518
+ },
28519
+ groupOverrides: { $bind: { from: "content.groupOverrides", fallback: [] } },
28520
+ cardStyles: { $bind: { from: "content._cardStyles" } },
28521
+ itemLimit: { $bind: { from: "content.itemLimit", fallback: OFFERINGS_PREVIEW_DEFAULT_ITEM_LIMIT } },
28522
+ buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
28523
+ buttonText: { $bind: { from: "content.buttonText", fallback: OFFERINGS_PREVIEW_DEFAULT_BUTTON_TEXT } },
28524
+ emptyMessage: {
28525
+ $bind: {
28526
+ from: "content.emptyMessage",
28527
+ fallback: OFFERINGS_PREVIEW_DEFAULT_EMPTY_MESSAGE
28528
+ }
28529
+ },
28530
+ previewStage: { $bind: { from: "$root.previewStage", fallback: "published" } },
28531
+ routeCandidates: { $bind: { from: "data.routeCandidates" } },
28532
+ courses: { $bind: { from: "data.courses" } },
28533
+ ...offeringsPreviewEventDataBindings
28534
+ })
28535
+ ], { gap: "lg" }),
28536
+ baseClass: "",
28537
+ spacing: "comfortable"
28538
+ })
28539
+ ];
28540
+ var offeringsPreviewConfig = {
28541
+ id: "block.offerings-preview",
28542
+ version: "1.0.0",
28543
+ title: "Offerings Preview",
27570
28544
  titleSource: "heading",
27571
- description: "Display events with calendar, list, or combined views with filtering",
27572
- // Preserve legacy section styles field configuration (renderInHeader: false).
28545
+ description: "Show enabled offering presets as compact cards",
27573
28546
  skipSectionStyles: true,
27574
- additionalFields: eventCalendarAdditionalFields,
28547
+ additionalFields: offeringsPreviewFields,
27575
28548
  styleTokens: { background: "surface", typography: "body", spacing: "md" },
27576
28549
  behaviours: {
27577
28550
  supportsThemeSwitching: true,
@@ -27579,71 +28552,68 @@ var eventCalendarConfig = {
27579
28552
  animation: false,
27580
28553
  paletteHidden: false
27581
28554
  },
27582
- category: "interactive",
27583
- tags: [
27584
- "events",
27585
- "calendar",
27586
- "month",
27587
- "week",
27588
- "schedule",
27589
- "interactive",
27590
- "list",
27591
- "filter"
27592
- ],
27593
- icon: "CalendarDays",
27594
- layout: eventCalendarLayout,
27595
- variants: eventCalendarVariants,
27596
- defaultVariant: "combined",
27597
- variantOptions: {
27598
- combined: { label: "Combined" },
27599
- month: { label: "Month" },
27600
- week: { label: "Week" },
27601
- timetable: { label: "Timetable" },
27602
- list: { label: "List" }
27603
- }
28555
+ category: "content",
28556
+ tags: ["offerings", "events", "classes", "workshops", "retreats"],
28557
+ icon: "PanelsTopLeft",
28558
+ layout: offeringsPreviewLayout
27604
28559
  };
27605
- var eventCalendarManifest = createBlockManifestWithContentShape(
27606
- eventCalendarConfig,
27607
- eventCalendarContentShape
28560
+ var offeringsPreviewManifest = createBlockManifest(offeringsPreviewConfig);
28561
+ var optionalPublicEventsArraySchema = publicEventsArraySchema.optional();
28562
+ var offeringsPreviewEventDataSchemas = Object.fromEntries(
28563
+ OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [
28564
+ definition.dataKey,
28565
+ optionalPublicEventsArraySchema
28566
+ ])
27608
28567
  );
27609
- var eventCalendarBlockDefinition = {
27610
- manifest: eventCalendarManifest,
27611
- normalizeContent: normalizeEventCalendarContent,
28568
+ var offeringsPreviewEventDataLoaders = Object.fromEntries(
28569
+ OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [
28570
+ definition.dataKey,
28571
+ eventPresetLoader(definition.preset)
28572
+ ])
28573
+ );
28574
+ var offeringsPreviewBlockDefinition = {
28575
+ manifest: offeringsPreviewManifest,
27612
28576
  dataSchemas: {
27613
- events: publicEventsArraySchema.optional()
28577
+ ...offeringsPreviewEventDataSchemas,
28578
+ routeCandidates: publicRouteCandidatesSchema.optional(),
28579
+ courses: publicCoursesArraySchema.optional()
27614
28580
  },
27615
28581
  dataLoaders: {
27616
- events: {
27617
- endpoint: "listPublicEvents",
28582
+ ...offeringsPreviewEventDataLoaders,
28583
+ routeCandidates: {
28584
+ endpoint: "listPublicRouteCandidates",
28585
+ params: {},
28586
+ mode: "server"
28587
+ },
28588
+ courses: {
28589
+ endpoint: "listPublicCourses",
27618
28590
  params: {
27619
28591
  siteId: { $bind: { from: "$root.siteId" } },
27620
- // Pre-fetch events - limit varies by mode but default to high for calendar
27621
- limit: 100,
27622
- stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
27623
- detailLevel: "listing",
27624
- readProfile: { $bind: { from: "content.variant", fallback: "listing-card" } },
27625
- // Pass filter params if configured
27626
- kind: { $bind: { from: "content.kind" } },
27627
- eventSurface: { $bind: { from: "content.eventSurface" } },
27628
- eventPresets: {
27629
- $bind: {
27630
- from: "content.filterEventPresets",
27631
- transforms: [{ id: "value.csv" }]
27632
- }
27633
- },
27634
- scheduleScope: { $bind: { from: "content.scheduleScope" } },
27635
- categoryIds: { $bind: { from: "content.filterCategoryIds" } },
27636
- staffMemberId: { $bind: { from: "content.filterStaffMemberId" } },
27637
- venueId: { $bind: { from: "content.filterVenueId" } }
28592
+ limit: { $bind: { from: "content.itemLimit", fallback: OFFERINGS_PREVIEW_DEFAULT_ITEM_LIMIT } },
28593
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } }
27638
28594
  },
27639
28595
  mode: "server"
27640
28596
  }
27641
- },
27642
- runtime: eventCalendarBlockRuntime
28597
+ }
27643
28598
  };
28599
+ function eventPresetLoader(preset2) {
28600
+ return {
28601
+ endpoint: "listPublicEvents",
28602
+ params: {
28603
+ siteId: { $bind: { from: "$root.siteId" } },
28604
+ limit: { $bind: { from: "content.itemLimit", fallback: OFFERINGS_PREVIEW_DEFAULT_ITEM_LIMIT } },
28605
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
28606
+ detailLevel: "listing",
28607
+ readProfile: "listing-card",
28608
+ kind: "events",
28609
+ eventPresets: preset2
28610
+ },
28611
+ mode: "server"
28612
+ };
28613
+ }
27644
28614
 
27645
28615
  // ../blocks/src/system/blocks/embed.ts
27646
- import { z as z52 } from "zod";
28616
+ import { z as z54 } from "zod";
27647
28617
  var embedFields = [
27648
28618
  // Section heading
27649
28619
  parseFieldDefinition({
@@ -27778,7 +28748,7 @@ var embedFields = [
27778
28748
  ui: { intent: "display" }
27779
28749
  })
27780
28750
  ];
27781
- var embedLayout = styledSection({
28751
+ var embedLayout2 = styledSection({
27782
28752
  children: sectionContainer([
27783
28753
  // Heading
27784
28754
  text(
@@ -27866,7 +28836,7 @@ var embedManifest = createBlockManifest({
27866
28836
  category: "content",
27867
28837
  titleSource: "heading",
27868
28838
  additionalFields: embedFields,
27869
- layout: embedLayout,
28839
+ layout: embedLayout2,
27870
28840
  description: "Embed content entries from any content type. Sites provide custom layouts via block overrides.",
27871
28841
  tags: ["embed", "content", "dynamic", "collection", "entries", "listing"],
27872
28842
  icon: "LayoutList",
@@ -27874,18 +28844,18 @@ var embedManifest = createBlockManifest({
27874
28844
  spacing: "lg"
27875
28845
  }
27876
28846
  });
27877
- var embedEntrySchema = z52.object({
27878
- id: z52.string(),
27879
- identifier: z52.string(),
27880
- title: z52.string(),
27881
- slug: z52.string().nullable().optional(),
27882
- content: z52.record(z52.string(), z52.unknown()).optional(),
27883
- publishedAt: z52.string().nullable().optional()
28847
+ var embedEntrySchema = z54.object({
28848
+ id: z54.string(),
28849
+ identifier: z54.string(),
28850
+ title: z54.string(),
28851
+ slug: z54.string().nullable().optional(),
28852
+ content: z54.record(z54.string(), z54.unknown()).optional(),
28853
+ publishedAt: z54.string().nullable().optional()
27884
28854
  });
27885
28855
  var embedBlockDefinition = {
27886
28856
  manifest: embedManifest,
27887
28857
  dataSchemas: {
27888
- entries: z52.array(embedEntrySchema).optional()
28858
+ entries: z54.array(embedEntrySchema).optional()
27889
28859
  },
27890
28860
  dataLoaders: {
27891
28861
  entries: {
@@ -29060,58 +30030,58 @@ var fileDownloadBlockDefinition = {
29060
30030
  };
29061
30031
 
29062
30032
  // ../blocks/src/system/blocks/shop.ts
29063
- import { z as z56 } from "zod";
30033
+ import { z as z58 } from "zod";
29064
30034
 
29065
30035
  // ../blocks/src/system/runtime/nodes/shop.interactive.ts
29066
- import { z as z55 } from "zod";
30036
+ import { z as z57 } from "zod";
29067
30037
 
29068
30038
  // ../blocks/src/system/blocks/products/shared.ts
29069
- import { z as z53 } from "zod";
29070
- var publicProductVariantSchema = z53.object({
29071
- id: z53.string(),
29072
- title: z53.string(),
29073
- sku: z53.string().nullable(),
29074
- priceCents: z53.number(),
29075
- stockQuantity: z53.number().nullable(),
29076
- soldOut: z53.boolean()
29077
- });
29078
- var publicProductSchema = z53.object({
29079
- id: z53.string(),
29080
- contentEntryId: z53.string().nullable(),
29081
- title: z53.string(),
29082
- slug: z53.string(),
29083
- path: z53.string().nullable(),
29084
- status: z53.enum(["draft", "active"]),
29085
- priceCents: z53.number(),
29086
- currency: z53.string(),
29087
- productType: z53.enum(["physical", "digital"]),
29088
- requiresShipping: z53.boolean(),
29089
- hasVariants: z53.boolean(),
29090
- trackInventory: z53.boolean(),
29091
- soldOut: z53.boolean(),
29092
- category: z53.object({
29093
- id: z53.string(),
29094
- name: z53.string(),
29095
- slug: z53.string()
30039
+ import { z as z55 } from "zod";
30040
+ var publicProductVariantSchema = z55.object({
30041
+ id: z55.string(),
30042
+ title: z55.string(),
30043
+ sku: z55.string().nullable(),
30044
+ priceCents: z55.number(),
30045
+ stockQuantity: z55.number().nullable(),
30046
+ soldOut: z55.boolean()
30047
+ });
30048
+ var publicProductSchema = z55.object({
30049
+ id: z55.string(),
30050
+ contentEntryId: z55.string().nullable(),
30051
+ title: z55.string(),
30052
+ slug: z55.string(),
30053
+ path: z55.string().nullable(),
30054
+ status: z55.enum(["draft", "active"]),
30055
+ priceCents: z55.number(),
30056
+ currency: z55.string(),
30057
+ productType: z55.enum(["physical", "digital"]),
30058
+ requiresShipping: z55.boolean(),
30059
+ hasVariants: z55.boolean(),
30060
+ trackInventory: z55.boolean(),
30061
+ soldOut: z55.boolean(),
30062
+ category: z55.object({
30063
+ id: z55.string(),
30064
+ name: z55.string(),
30065
+ slug: z55.string()
29096
30066
  }).nullable(),
29097
- summary: z53.string().nullable(),
29098
- badges: z53.array(z53.string()),
29099
- ctaLabel: z53.string().nullable(),
29100
- body: z53.unknown().nullable(),
29101
- gallery: z53.array(
29102
- z53.object({
29103
- url: z53.string(),
29104
- alt: z53.string().nullable()
30067
+ summary: z55.string().nullable(),
30068
+ badges: z55.array(z55.string()),
30069
+ ctaLabel: z55.string().nullable(),
30070
+ body: z55.unknown().nullable(),
30071
+ gallery: z55.array(
30072
+ z55.object({
30073
+ url: z55.string(),
30074
+ alt: z55.string().nullable()
29105
30075
  })
29106
30076
  ),
29107
- variants: z53.array(publicProductVariantSchema)
30077
+ variants: z55.array(publicProductVariantSchema)
29108
30078
  });
29109
- var publicProductsResponseSchema = z53.object({
29110
- products: z53.array(publicProductSchema)
30079
+ var publicProductsResponseSchema = z55.object({
30080
+ products: z55.array(publicProductSchema)
29111
30081
  });
29112
30082
 
29113
30083
  // ../blocks/src/system/runtime/api/creditProducts.ts
29114
- function assertNever2(value) {
30084
+ function assertNever3(value) {
29115
30085
  throw new Error(`Unhandled credit product case: ${String(value)}`);
29116
30086
  }
29117
30087
  function useCasesFromModules(modules) {
@@ -29144,7 +30114,7 @@ function getCreditProductCreditUnit(useCase) {
29144
30114
  perCreditSuffix: "credit"
29145
30115
  };
29146
30116
  default:
29147
- return assertNever2(useCase);
30117
+ return assertNever3(useCase);
29148
30118
  }
29149
30119
  }
29150
30120
  function deriveCreditProductLabels(products, options = {}) {
@@ -29171,27 +30141,27 @@ function deriveCreditProductLabels(products, options = {}) {
29171
30141
  }
29172
30142
 
29173
30143
  // ../blocks/src/system/runtime/nodes/shop-commerce.shared.ts
29174
- import { z as z54 } from "zod";
29175
- var storedProductCartItemSchema = z54.object({
29176
- kind: z54.literal("product"),
29177
- productId: z54.string().min(1),
29178
- productCategoryId: z54.string().min(1).optional().nullable(),
29179
- variantId: z54.string().min(1).optional().nullable(),
29180
- title: z54.string().min(1),
29181
- variantTitle: z54.string().optional().nullable(),
29182
- quantity: z54.number().finite(),
29183
- unitPriceCents: z54.number().finite(),
29184
- currency: z54.string().min(1),
29185
- imageUrl: z54.string().optional().nullable(),
29186
- soldOut: z54.boolean().optional()
29187
- });
29188
- var storedPassCartItemSchema = z54.object({
29189
- kind: z54.literal("pass"),
29190
- passId: z54.string().min(1),
29191
- title: z54.string().min(1),
29192
- quantity: z54.number().finite().optional(),
29193
- unitPriceCents: z54.number().finite(),
29194
- currency: z54.string().min(1)
30144
+ import { z as z56 } from "zod";
30145
+ var storedProductCartItemSchema = z56.object({
30146
+ kind: z56.literal("product"),
30147
+ productId: z56.string().min(1),
30148
+ productCategoryId: z56.string().min(1).optional().nullable(),
30149
+ variantId: z56.string().min(1).optional().nullable(),
30150
+ title: z56.string().min(1),
30151
+ variantTitle: z56.string().optional().nullable(),
30152
+ quantity: z56.number().finite(),
30153
+ unitPriceCents: z56.number().finite(),
30154
+ currency: z56.string().min(1),
30155
+ imageUrl: z56.string().optional().nullable(),
30156
+ soldOut: z56.boolean().optional()
30157
+ });
30158
+ var storedPassCartItemSchema = z56.object({
30159
+ kind: z56.literal("pass"),
30160
+ passId: z56.string().min(1),
30161
+ title: z56.string().min(1),
30162
+ quantity: z56.number().finite().optional(),
30163
+ unitPriceCents: z56.number().finite(),
30164
+ currency: z56.string().min(1)
29195
30165
  });
29196
30166
  function deriveCommerceCheckoutState(state) {
29197
30167
  if (state.items.length === 0) {
@@ -29430,219 +30400,219 @@ function formatValidity(days) {
29430
30400
  }
29431
30401
 
29432
30402
  // ../blocks/src/system/runtime/nodes/shop.interactive.ts
29433
- var shopModeSchema = z55.enum(["passes-memberships", "product-list", "product-detail", "cart", "checkout"]);
29434
- var contentEntrySchema3 = z55.object({
29435
- id: z55.string().nullable().optional(),
29436
- slug: z55.string().nullable().optional()
30403
+ var shopModeSchema = z57.enum(["passes-memberships", "product-list", "product-detail", "cart", "checkout"]);
30404
+ var contentEntrySchema3 = z57.object({
30405
+ id: z57.string().nullable().optional(),
30406
+ slug: z57.string().nullable().optional()
29437
30407
  }).nullable();
29438
- var shopSourceSchema = z55.object({
29439
- className: z55.string().nullable().optional(),
30408
+ var shopSourceSchema = z57.object({
30409
+ className: z57.string().nullable().optional(),
29440
30410
  mode: shopModeSchema.optional(),
29441
- heading: z55.string().nullable().optional(),
29442
- productSlug: z55.string().nullable().optional(),
29443
- showPasses: z55.boolean().optional(),
29444
- showMemberships: z55.boolean().optional(),
29445
- layout: z55.enum(["grid", "list"]).optional(),
29446
- columns: z55.string().optional(),
29447
- showDescriptions: z55.boolean().optional(),
29448
- showSummary: z55.boolean().optional(),
29449
- showBody: z55.boolean().optional(),
29450
- showBadges: z55.boolean().optional(),
29451
- showPrices: z55.boolean().optional(),
29452
- showValidityPeriod: z55.boolean().optional(),
29453
- showPricePerCredit: z55.boolean().nullable().optional(),
29454
- passesHeading: z55.string().optional(),
29455
- membershipsHeading: z55.string().optional(),
29456
- buyButtonText: z55.string().optional(),
29457
- addButtonText: z55.string().optional(),
29458
- passPurchaseMode: z55.enum(["add_to_cart", "buy_now"]).optional(),
29459
- subscribeButtonText: z55.string().optional(),
29460
- emptyStateText: z55.string().optional(),
29461
- checkoutButtonText: z55.string().optional(),
29462
- clearButtonText: z55.string().optional(),
29463
- submitButtonText: z55.string().optional(),
30411
+ heading: z57.string().nullable().optional(),
30412
+ productSlug: z57.string().nullable().optional(),
30413
+ showPasses: z57.boolean().optional(),
30414
+ showMemberships: z57.boolean().optional(),
30415
+ layout: z57.enum(["grid", "list"]).optional(),
30416
+ columns: z57.string().optional(),
30417
+ showDescriptions: z57.boolean().optional(),
30418
+ showSummary: z57.boolean().optional(),
30419
+ showBody: z57.boolean().optional(),
30420
+ showBadges: z57.boolean().optional(),
30421
+ showPrices: z57.boolean().optional(),
30422
+ showValidityPeriod: z57.boolean().optional(),
30423
+ showPricePerCredit: z57.boolean().nullable().optional(),
30424
+ passesHeading: z57.string().optional(),
30425
+ membershipsHeading: z57.string().optional(),
30426
+ buyButtonText: z57.string().optional(),
30427
+ addButtonText: z57.string().optional(),
30428
+ passPurchaseMode: z57.enum(["add_to_cart", "buy_now"]).optional(),
30429
+ subscribeButtonText: z57.string().optional(),
30430
+ emptyStateText: z57.string().optional(),
30431
+ checkoutButtonText: z57.string().optional(),
30432
+ clearButtonText: z57.string().optional(),
30433
+ submitButtonText: z57.string().optional(),
29464
30434
  contentEntry: contentEntrySchema3.optional(),
29465
- passes: z55.array(publicPassProductSchema).nullable().optional(),
29466
- memberships: z55.array(publicMembershipProductSchema).nullable().optional(),
29467
- products: z55.array(publicProductSchema).nullable().optional(),
29468
- siteId: z55.string().optional(),
29469
- apiBaseUrl: z55.string().optional(),
30435
+ passes: z57.array(publicPassProductSchema).nullable().optional(),
30436
+ memberships: z57.array(publicMembershipProductSchema).nullable().optional(),
30437
+ products: z57.array(publicProductSchema).nullable().optional(),
30438
+ siteId: z57.string().optional(),
30439
+ apiBaseUrl: z57.string().optional(),
29470
30440
  stage: previewStageSchema.optional()
29471
30441
  });
29472
- var productVariantOptionDisplaySchema = z55.object({
29473
- id: z55.string(),
29474
- label: z55.string(),
29475
- soldOut: z55.boolean()
29476
- });
29477
- var productCardDisplaySchema = z55.object({
29478
- productId: z55.string(),
29479
- title: z55.string(),
29480
- path: z55.string().nullable(),
29481
- summary: z55.string().nullable(),
29482
- priceLabel: z55.string().nullable(),
29483
- badges: z55.array(z55.string()),
29484
- image: z55.object({
29485
- url: z55.string(),
29486
- alt: z55.string().nullable()
30442
+ var productVariantOptionDisplaySchema = z57.object({
30443
+ id: z57.string(),
30444
+ label: z57.string(),
30445
+ soldOut: z57.boolean()
30446
+ });
30447
+ var productCardDisplaySchema = z57.object({
30448
+ productId: z57.string(),
30449
+ title: z57.string(),
30450
+ path: z57.string().nullable(),
30451
+ summary: z57.string().nullable(),
30452
+ priceLabel: z57.string().nullable(),
30453
+ badges: z57.array(z57.string()),
30454
+ image: z57.object({
30455
+ url: z57.string(),
30456
+ alt: z57.string().nullable()
29487
30457
  }).nullable(),
29488
- variantOptions: z55.array(productVariantOptionDisplaySchema),
29489
- selectedVariantId: z55.string().nullable(),
29490
- selectionLabel: z55.string(),
29491
- actionLabel: z55.string(),
29492
- soldOut: z55.boolean()
29493
- });
29494
- var productListDisplaySchema = z55.object({
29495
- kind: z55.literal("product-list"),
29496
- state: z55.enum(["empty", "ready"]),
29497
- heading: z55.string().nullable(),
29498
- className: z55.string().nullable(),
29499
- layout: z55.enum(["grid", "list"]),
29500
- columns: z55.string(),
29501
- emptyMessage: z55.string(),
29502
- cards: z55.array(productCardDisplaySchema)
29503
- });
29504
- var productDetailDisplaySchema = z55.discriminatedUnion("state", [
29505
- z55.object({
29506
- kind: z55.literal("product-detail"),
29507
- state: z55.literal("empty"),
29508
- heading: z55.string().nullable(),
29509
- className: z55.string().nullable(),
29510
- emptyMessage: z55.string()
30458
+ variantOptions: z57.array(productVariantOptionDisplaySchema),
30459
+ selectedVariantId: z57.string().nullable(),
30460
+ selectionLabel: z57.string(),
30461
+ actionLabel: z57.string(),
30462
+ soldOut: z57.boolean()
30463
+ });
30464
+ var productListDisplaySchema = z57.object({
30465
+ kind: z57.literal("product-list"),
30466
+ state: z57.enum(["empty", "ready"]),
30467
+ heading: z57.string().nullable(),
30468
+ className: z57.string().nullable(),
30469
+ layout: z57.enum(["grid", "list"]),
30470
+ columns: z57.string(),
30471
+ emptyMessage: z57.string(),
30472
+ cards: z57.array(productCardDisplaySchema)
30473
+ });
30474
+ var productDetailDisplaySchema = z57.discriminatedUnion("state", [
30475
+ z57.object({
30476
+ kind: z57.literal("product-detail"),
30477
+ state: z57.literal("empty"),
30478
+ heading: z57.string().nullable(),
30479
+ className: z57.string().nullable(),
30480
+ emptyMessage: z57.string()
29511
30481
  }),
29512
- z55.object({
29513
- kind: z55.literal("product-detail"),
29514
- state: z55.literal("ready"),
29515
- heading: z55.string().nullable(),
29516
- className: z55.string().nullable(),
29517
- title: z55.string(),
29518
- priceLabel: z55.string(),
29519
- summary: z55.string().nullable(),
29520
- badges: z55.array(z55.string()),
29521
- categoryLabel: z55.string().nullable(),
29522
- gallery: z55.array(z55.object({
29523
- url: z55.string(),
29524
- alt: z55.string().nullable()
30482
+ z57.object({
30483
+ kind: z57.literal("product-detail"),
30484
+ state: z57.literal("ready"),
30485
+ heading: z57.string().nullable(),
30486
+ className: z57.string().nullable(),
30487
+ title: z57.string(),
30488
+ priceLabel: z57.string(),
30489
+ summary: z57.string().nullable(),
30490
+ badges: z57.array(z57.string()),
30491
+ categoryLabel: z57.string().nullable(),
30492
+ gallery: z57.array(z57.object({
30493
+ url: z57.string(),
30494
+ alt: z57.string().nullable()
29525
30495
  })),
29526
- variantOptions: z55.array(productVariantOptionDisplaySchema),
29527
- selectedVariantId: z55.string().nullable(),
29528
- selectionLabel: z55.string(),
29529
- actionLabel: z55.string(),
29530
- soldOut: z55.boolean(),
29531
- body: z55.unknown().nullable()
30496
+ variantOptions: z57.array(productVariantOptionDisplaySchema),
30497
+ selectedVariantId: z57.string().nullable(),
30498
+ selectionLabel: z57.string(),
30499
+ actionLabel: z57.string(),
30500
+ soldOut: z57.boolean(),
30501
+ body: z57.unknown().nullable()
29532
30502
  })
29533
30503
  ]);
29534
- var passCardDisplaySchema = z55.object({
29535
- id: z55.string(),
29536
- title: z55.string(),
29537
- description: z55.string().nullable(),
29538
- priceLabel: z55.string(),
29539
- creditsLabel: z55.string(),
29540
- perCreditLabel: z55.string().nullable(),
29541
- validityLabel: z55.string().nullable(),
29542
- actionLabel: z55.string()
29543
- });
29544
- var membershipCardDisplaySchema = z55.object({
29545
- id: z55.string(),
29546
- title: z55.string(),
29547
- description: z55.string().nullable(),
29548
- priceLabel: z55.string(),
29549
- intervalLabel: z55.string(),
29550
- actionLabel: z55.string()
29551
- });
29552
- var passesMembershipsDisplaySchema = z55.object({
29553
- kind: z55.literal("passes-memberships"),
29554
- state: z55.enum(["empty", "ready"]),
29555
- className: z55.string().nullable(),
29556
- layout: z55.enum(["grid", "list"]),
29557
- columns: z55.string(),
29558
- emptyMessage: z55.string(),
29559
- passesHeading: z55.string(),
29560
- membershipsHeading: z55.string(),
29561
- passes: z55.array(passCardDisplaySchema),
29562
- memberships: z55.array(membershipCardDisplaySchema)
29563
- });
29564
- var cartLineDisplaySchema = z55.object({
29565
- key: z55.string(),
29566
- title: z55.string(),
29567
- priceLabel: z55.string(),
29568
- quantity: z55.number(),
29569
- quantityEditable: z55.boolean()
29570
- });
29571
- var cartDisplaySchema = z55.object({
29572
- kind: z55.literal("cart"),
29573
- state: z55.enum(["empty", "ready"]),
29574
- heading: z55.string().nullable(),
29575
- className: z55.string().nullable(),
29576
- emptyMessage: z55.string(),
29577
- supportText: z55.string().nullable(),
29578
- items: z55.array(cartLineDisplaySchema),
29579
- subtotalLabel: z55.string().nullable(),
29580
- checkoutButtonText: z55.string(),
29581
- clearButtonText: z55.string()
29582
- });
29583
- var checkoutDisplaySchema = z55.object({
29584
- kind: z55.literal("checkout"),
29585
- state: z55.enum(["empty", "blocked", "ready"]),
29586
- heading: z55.string().nullable(),
29587
- className: z55.string().nullable(),
29588
- message: z55.string().nullable(),
29589
- submitButtonText: z55.string()
29590
- });
29591
- var passesMembershipsHydrationSchema = z55.object({
29592
- passes: z55.array(publicPassProductSchema),
29593
- memberships: z55.array(publicMembershipProductSchema),
29594
- passPurchaseMode: z55.enum(["add_to_cart", "buy_now"])
29595
- });
29596
- var productListHydrationSchema = z55.object({
29597
- products: z55.array(publicProductSchema),
29598
- showSummary: z55.boolean(),
29599
- showBadges: z55.boolean(),
29600
- showPrices: z55.boolean(),
29601
- addButtonText: z55.string()
29602
- });
29603
- var productDetailHydrationSchema = z55.object({
29604
- products: z55.array(publicProductSchema),
29605
- productId: z55.string().nullable(),
29606
- showSummary: z55.boolean(),
29607
- showBadges: z55.boolean(),
29608
- showBody: z55.boolean(),
29609
- addButtonText: z55.string()
29610
- });
29611
- var cartHydrationSchema = z55.object({
29612
- emptyStateText: z55.string(),
29613
- checkoutButtonText: z55.string(),
29614
- clearButtonText: z55.string()
29615
- });
29616
- var checkoutHydrationSchema = z55.object({
29617
- emptyStateText: z55.string(),
29618
- submitButtonText: z55.string()
29619
- });
29620
- var passesMembershipsRenderSchema = z55.object({
30504
+ var passCardDisplaySchema = z57.object({
30505
+ id: z57.string(),
30506
+ title: z57.string(),
30507
+ description: z57.string().nullable(),
30508
+ priceLabel: z57.string(),
30509
+ creditsLabel: z57.string(),
30510
+ perCreditLabel: z57.string().nullable(),
30511
+ validityLabel: z57.string().nullable(),
30512
+ actionLabel: z57.string()
30513
+ });
30514
+ var membershipCardDisplaySchema = z57.object({
30515
+ id: z57.string(),
30516
+ title: z57.string(),
30517
+ description: z57.string().nullable(),
30518
+ priceLabel: z57.string(),
30519
+ intervalLabel: z57.string(),
30520
+ actionLabel: z57.string()
30521
+ });
30522
+ var passesMembershipsDisplaySchema = z57.object({
30523
+ kind: z57.literal("passes-memberships"),
30524
+ state: z57.enum(["empty", "ready"]),
30525
+ className: z57.string().nullable(),
30526
+ layout: z57.enum(["grid", "list"]),
30527
+ columns: z57.string(),
30528
+ emptyMessage: z57.string(),
30529
+ passesHeading: z57.string(),
30530
+ membershipsHeading: z57.string(),
30531
+ passes: z57.array(passCardDisplaySchema),
30532
+ memberships: z57.array(membershipCardDisplaySchema)
30533
+ });
30534
+ var cartLineDisplaySchema = z57.object({
30535
+ key: z57.string(),
30536
+ title: z57.string(),
30537
+ priceLabel: z57.string(),
30538
+ quantity: z57.number(),
30539
+ quantityEditable: z57.boolean()
30540
+ });
30541
+ var cartDisplaySchema = z57.object({
30542
+ kind: z57.literal("cart"),
30543
+ state: z57.enum(["empty", "ready"]),
30544
+ heading: z57.string().nullable(),
30545
+ className: z57.string().nullable(),
30546
+ emptyMessage: z57.string(),
30547
+ supportText: z57.string().nullable(),
30548
+ items: z57.array(cartLineDisplaySchema),
30549
+ subtotalLabel: z57.string().nullable(),
30550
+ checkoutButtonText: z57.string(),
30551
+ clearButtonText: z57.string()
30552
+ });
30553
+ var checkoutDisplaySchema = z57.object({
30554
+ kind: z57.literal("checkout"),
30555
+ state: z57.enum(["empty", "blocked", "ready"]),
30556
+ heading: z57.string().nullable(),
30557
+ className: z57.string().nullable(),
30558
+ message: z57.string().nullable(),
30559
+ submitButtonText: z57.string()
30560
+ });
30561
+ var passesMembershipsHydrationSchema = z57.object({
30562
+ passes: z57.array(publicPassProductSchema),
30563
+ memberships: z57.array(publicMembershipProductSchema),
30564
+ passPurchaseMode: z57.enum(["add_to_cart", "buy_now"])
30565
+ });
30566
+ var productListHydrationSchema = z57.object({
30567
+ products: z57.array(publicProductSchema),
30568
+ showSummary: z57.boolean(),
30569
+ showBadges: z57.boolean(),
30570
+ showPrices: z57.boolean(),
30571
+ addButtonText: z57.string()
30572
+ });
30573
+ var productDetailHydrationSchema = z57.object({
30574
+ products: z57.array(publicProductSchema),
30575
+ productId: z57.string().nullable(),
30576
+ showSummary: z57.boolean(),
30577
+ showBadges: z57.boolean(),
30578
+ showBody: z57.boolean(),
30579
+ addButtonText: z57.string()
30580
+ });
30581
+ var cartHydrationSchema = z57.object({
30582
+ emptyStateText: z57.string(),
30583
+ checkoutButtonText: z57.string(),
30584
+ clearButtonText: z57.string()
30585
+ });
30586
+ var checkoutHydrationSchema = z57.object({
30587
+ emptyStateText: z57.string(),
30588
+ submitButtonText: z57.string()
30589
+ });
30590
+ var passesMembershipsRenderSchema = z57.object({
29621
30591
  display: passesMembershipsDisplaySchema,
29622
30592
  hydration: passesMembershipsHydrationSchema
29623
30593
  });
29624
- var productListRenderSchema = z55.object({
30594
+ var productListRenderSchema = z57.object({
29625
30595
  display: productListDisplaySchema,
29626
30596
  hydration: productListHydrationSchema
29627
30597
  });
29628
- var productDetailRenderSchema = z55.object({
30598
+ var productDetailRenderSchema = z57.object({
29629
30599
  display: productDetailDisplaySchema,
29630
30600
  hydration: productDetailHydrationSchema
29631
30601
  });
29632
- var cartRenderSchema = z55.object({
30602
+ var cartRenderSchema = z57.object({
29633
30603
  display: cartDisplaySchema,
29634
30604
  hydration: cartHydrationSchema
29635
30605
  });
29636
- var checkoutRenderSchema = z55.object({
30606
+ var checkoutRenderSchema = z57.object({
29637
30607
  display: checkoutDisplaySchema,
29638
30608
  hydration: checkoutHydrationSchema
29639
30609
  });
29640
30610
  function resolveShowPricePerCredit(source) {
29641
30611
  return source.showPricePerCredit ?? true;
29642
30612
  }
29643
- var shopIslandMetaCodec = createZodCodec(z55.object({
29644
- siteId: z55.string().optional(),
29645
- apiBaseUrl: z55.string().optional(),
30613
+ var shopIslandMetaCodec = createZodCodec(z57.object({
30614
+ siteId: z57.string().optional(),
30615
+ apiBaseUrl: z57.string().optional(),
29646
30616
  stage: previewStageSchema.optional()
29647
30617
  }));
29648
30618
  var shopIslandMetaKeys = defineInteractiveIslandMetaKeys("siteId", "apiBaseUrl", "stage");
@@ -30024,9 +30994,9 @@ var shopBlockDefinition = {
30024
30994
  runtime: shopBlockRuntime,
30025
30995
  dataSchemas: {
30026
30996
  // listPublicPasses returns { passes: [...] }
30027
- passes: z56.object({ passes: z56.array(publicPassProductSchema) }).optional(),
30997
+ passes: z58.object({ passes: z58.array(publicPassProductSchema) }).optional(),
30028
30998
  // listPublicMemberships returns { memberships: [...] }
30029
- memberships: z56.object({ memberships: z56.array(publicMembershipProductSchema) }).optional()
30999
+ memberships: z58.object({ memberships: z58.array(publicMembershipProductSchema) }).optional()
30030
31000
  },
30031
31001
  dataLoaders: {
30032
31002
  // Load passes for display
@@ -30049,7 +31019,7 @@ var shopBlockDefinition = {
30049
31019
  };
30050
31020
 
30051
31021
  // ../blocks/src/system/blocks/product-list.ts
30052
- import { z as z57 } from "zod";
31022
+ import { z as z59 } from "zod";
30053
31023
  var productListManifest = createBlockManifest({
30054
31024
  id: "block.product-list",
30055
31025
  version: "1.0.0",
@@ -30191,7 +31161,7 @@ var productListBlockDefinition = {
30191
31161
  }
30192
31162
  }
30193
31163
  };
30194
- var productListDataSchema = z57.object({
31164
+ var productListDataSchema = z59.object({
30195
31165
  products: publicProductsResponseSchema.optional()
30196
31166
  });
30197
31167
 
@@ -30461,72 +31431,72 @@ var checkoutBlockDefinition = {
30461
31431
  };
30462
31432
 
30463
31433
  // ../blocks/src/system/runtime/nodes/gifting.interactive.ts
30464
- import { z as z58 } from "zod";
30465
- var publicGiftCardOfferSchema = z58.object({
30466
- id: z58.string(),
30467
- kind: z58.literal("gift_card"),
30468
- title: z58.string(),
30469
- description: z58.string().nullable(),
30470
- sortOrder: z58.number().int(),
30471
- giftCard: z58.object({
30472
- fixedDenominations: z58.array(z58.number().int().positive()),
30473
- customAmountEnabled: z58.boolean(),
30474
- customAmountMinCents: z58.number().int().positive(),
30475
- customAmountMaxCents: z58.number().int().positive()
31434
+ import { z as z60 } from "zod";
31435
+ var publicGiftCardOfferSchema = z60.object({
31436
+ id: z60.string(),
31437
+ kind: z60.literal("gift_card"),
31438
+ title: z60.string(),
31439
+ description: z60.string().nullable(),
31440
+ sortOrder: z60.number().int(),
31441
+ giftCard: z60.object({
31442
+ fixedDenominations: z60.array(z60.number().int().positive()),
31443
+ customAmountEnabled: z60.boolean(),
31444
+ customAmountMinCents: z60.number().int().positive(),
31445
+ customAmountMaxCents: z60.number().int().positive()
30476
31446
  }),
30477
- voucher: z58.null()
30478
- });
30479
- var publicVoucherOfferSchema = z58.object({
30480
- id: z58.string(),
30481
- kind: z58.literal("voucher"),
30482
- title: z58.string(),
30483
- description: z58.string().nullable(),
30484
- sortOrder: z58.number().int(),
30485
- giftCard: z58.null(),
30486
- voucher: z58.object({
30487
- purchaseAmountCents: z58.number().int().positive()
31447
+ voucher: z60.null()
31448
+ });
31449
+ var publicVoucherOfferSchema = z60.object({
31450
+ id: z60.string(),
31451
+ kind: z60.literal("voucher"),
31452
+ title: z60.string(),
31453
+ description: z60.string().nullable(),
31454
+ sortOrder: z60.number().int(),
31455
+ giftCard: z60.null(),
31456
+ voucher: z60.object({
31457
+ purchaseAmountCents: z60.number().int().positive()
30488
31458
  })
30489
31459
  });
30490
- var publicGiftingOffersResponseSchema = z58.object({
30491
- currency: z58.string(),
30492
- giftCards: z58.array(publicGiftCardOfferSchema),
30493
- vouchers: z58.array(publicVoucherOfferSchema)
31460
+ var publicGiftingOffersResponseSchema = z60.object({
31461
+ currency: z60.string(),
31462
+ giftCards: z60.array(publicGiftCardOfferSchema),
31463
+ vouchers: z60.array(publicVoucherOfferSchema)
30494
31464
  });
30495
- var giftingSourceSchema = z58.object({
30496
- siteId: z58.string().optional(),
30497
- apiBaseUrl: z58.string().optional(),
31465
+ var giftingSourceSchema = z60.object({
31466
+ siteId: z60.string().optional(),
31467
+ apiBaseUrl: z60.string().optional(),
30498
31468
  offers: publicGiftingOffersResponseSchema.nullable().optional(),
30499
- className: z58.string().nullable().optional(),
30500
- heading: z58.string().nullable().optional(),
30501
- intro: z58.string().nullable().optional(),
30502
- giftCardsHeading: z58.string().nullable().optional(),
30503
- vouchersHeading: z58.string().nullable().optional(),
30504
- emptyStateText: z58.string().nullable().optional(),
30505
- checkoutButtonText: z58.string().nullable().optional(),
30506
- successMessage: z58.string().nullable().optional()
30507
- });
30508
- var giftingDisplaySchema = z58.object({
30509
- kind: z58.literal("gifting"),
30510
- state: z58.literal("ready"),
30511
- className: z58.string().nullable(),
30512
- heading: z58.string(),
30513
- intro: z58.string().nullable(),
30514
- giftCardsHeading: z58.string(),
30515
- vouchersHeading: z58.string(),
30516
- emptyStateText: z58.string()
30517
- });
30518
- var giftingHydrationSchema = z58.object({
31469
+ className: z60.string().nullable().optional(),
31470
+ heading: z60.string().nullable().optional(),
31471
+ intro: z60.string().nullable().optional(),
31472
+ giftCardsHeading: z60.string().nullable().optional(),
31473
+ vouchersHeading: z60.string().nullable().optional(),
31474
+ emptyStateText: z60.string().nullable().optional(),
31475
+ checkoutButtonText: z60.string().nullable().optional(),
31476
+ successMessage: z60.string().nullable().optional()
31477
+ });
31478
+ var giftingDisplaySchema = z60.object({
31479
+ kind: z60.literal("gifting"),
31480
+ state: z60.literal("ready"),
31481
+ className: z60.string().nullable(),
31482
+ heading: z60.string(),
31483
+ intro: z60.string().nullable(),
31484
+ giftCardsHeading: z60.string(),
31485
+ vouchersHeading: z60.string(),
31486
+ emptyStateText: z60.string()
31487
+ });
31488
+ var giftingHydrationSchema = z60.object({
30519
31489
  offers: publicGiftingOffersResponseSchema.nullable(),
30520
- checkoutButtonText: z58.string(),
30521
- successMessage: z58.string()
31490
+ checkoutButtonText: z60.string(),
31491
+ successMessage: z60.string()
30522
31492
  });
30523
- var giftingRenderSchema = z58.object({
31493
+ var giftingRenderSchema = z60.object({
30524
31494
  display: giftingDisplaySchema,
30525
31495
  hydration: giftingHydrationSchema
30526
31496
  });
30527
- var giftingIslandMetaCodec = createZodCodec(z58.object({
30528
- siteId: z58.string().optional(),
30529
- apiBaseUrl: z58.string().optional()
31497
+ var giftingIslandMetaCodec = createZodCodec(z60.object({
31498
+ siteId: z60.string().optional(),
31499
+ apiBaseUrl: z60.string().optional()
30530
31500
  }));
30531
31501
  var giftingIslandMetaKeys = defineInteractiveIslandMetaKeys(
30532
31502
  "siteId",
@@ -30697,7 +31667,7 @@ var giftingBlockDefinition = {
30697
31667
  };
30698
31668
 
30699
31669
  // ../blocks/src/system/runtime/nodes/newsletter-form.interactive.ts
30700
- import { z as z59 } from "zod";
31670
+ import { z as z61 } from "zod";
30701
31671
 
30702
31672
  // ../blocks/src/system/runtime/nodes/newsletter-form.types.ts
30703
31673
  function getPresetFields(preset2, options) {
@@ -30751,49 +31721,49 @@ function withOptionalPhone(fields3, includePhone) {
30751
31721
  }
30752
31722
 
30753
31723
  // ../blocks/src/system/runtime/nodes/newsletter-form.interactive.ts
30754
- var newsletterPresetSchema = z59.enum(["emailOnly", "emailName", "emailFirstLast", "emailNameCompany"]);
30755
- var newsletterFieldSchema = z59.object({
30756
- id: z59.string(),
30757
- type: z59.enum(["email", "text"]),
30758
- label: z59.string(),
30759
- required: z59.boolean(),
30760
- placeholder: z59.string().optional()
30761
- });
30762
- var newsletterSourceSchema = z59.object({
30763
- siteId: z59.string().optional(),
30764
- apiBaseUrl: z59.string().optional(),
30765
- listId: z59.string().nullable().optional(),
31724
+ var newsletterPresetSchema = z61.enum(["emailOnly", "emailName", "emailFirstLast", "emailNameCompany"]);
31725
+ var newsletterFieldSchema = z61.object({
31726
+ id: z61.string(),
31727
+ type: z61.enum(["email", "text"]),
31728
+ label: z61.string(),
31729
+ required: z61.boolean(),
31730
+ placeholder: z61.string().optional()
31731
+ });
31732
+ var newsletterSourceSchema = z61.object({
31733
+ siteId: z61.string().optional(),
31734
+ apiBaseUrl: z61.string().optional(),
31735
+ listId: z61.string().nullable().optional(),
30766
31736
  preset: newsletterPresetSchema.optional(),
30767
- includePhone: z59.boolean().optional(),
30768
- buttonLabel: z59.string().nullable().optional(),
30769
- successMessage: z59.string().nullable().optional(),
30770
- privacyNote: z59.string().nullable().optional(),
30771
- tags: z59.string().nullable().optional(),
30772
- spamProtectionEnabled: z59.boolean().optional(),
30773
- className: z59.string().nullable().optional()
30774
- });
30775
- var newsletterDisplaySchema = z59.object({
30776
- kind: z59.literal("newsletter-form"),
30777
- className: z59.string().nullable(),
30778
- buttonLabel: z59.string(),
30779
- successMessage: z59.string().nullable(),
30780
- privacyNote: z59.string().nullable(),
30781
- fields: z59.array(newsletterFieldSchema)
30782
- });
30783
- var newsletterHydrationSchema = z59.object({
30784
- listId: z59.string().nullable().optional(),
31737
+ includePhone: z61.boolean().optional(),
31738
+ buttonLabel: z61.string().nullable().optional(),
31739
+ successMessage: z61.string().nullable().optional(),
31740
+ privacyNote: z61.string().nullable().optional(),
31741
+ tags: z61.string().nullable().optional(),
31742
+ spamProtectionEnabled: z61.boolean().optional(),
31743
+ className: z61.string().nullable().optional()
31744
+ });
31745
+ var newsletterDisplaySchema = z61.object({
31746
+ kind: z61.literal("newsletter-form"),
31747
+ className: z61.string().nullable(),
31748
+ buttonLabel: z61.string(),
31749
+ successMessage: z61.string().nullable(),
31750
+ privacyNote: z61.string().nullable(),
31751
+ fields: z61.array(newsletterFieldSchema)
31752
+ });
31753
+ var newsletterHydrationSchema = z61.object({
31754
+ listId: z61.string().nullable().optional(),
30785
31755
  preset: newsletterPresetSchema,
30786
- includePhone: z59.boolean(),
30787
- tags: z59.string().nullable().optional(),
30788
- spamProtectionEnabled: z59.boolean().optional()
31756
+ includePhone: z61.boolean(),
31757
+ tags: z61.string().nullable().optional(),
31758
+ spamProtectionEnabled: z61.boolean().optional()
30789
31759
  });
30790
- var newsletterRenderSchema = z59.object({
31760
+ var newsletterRenderSchema = z61.object({
30791
31761
  display: newsletterDisplaySchema,
30792
31762
  hydration: newsletterHydrationSchema
30793
31763
  });
30794
- var newsletterIslandMetaCodec = createZodCodec(z59.object({
30795
- siteId: z59.string().optional(),
30796
- apiBaseUrl: z59.string().optional()
31764
+ var newsletterIslandMetaCodec = createZodCodec(z61.object({
31765
+ siteId: z61.string().optional(),
31766
+ apiBaseUrl: z61.string().optional()
30797
31767
  }));
30798
31768
  var newsletterIslandMetaKeys = defineInteractiveIslandMetaKeys("siteId", "apiBaseUrl");
30799
31769
  function buildNewsletterDisplay(source) {
@@ -30914,23 +31884,23 @@ var newsletterSignupBlockDefinition = {
30914
31884
  };
30915
31885
 
30916
31886
  // ../blocks/src/system/blocks/team-members.ts
30917
- import { z as z60 } from "zod";
31887
+ import { z as z62 } from "zod";
30918
31888
  var ITEM_NAME2 = "member";
30919
31889
  var teamMemberPhotoSchema = mediaSchema2.refine((media2) => media2.type === "image", {
30920
31890
  message: "Team member photos must be image media"
30921
31891
  }).nullable();
30922
- var teamMemberDataSchema = z60.object({
30923
- _type: z60.literal("teamMember"),
30924
- id: z60.string(),
30925
- name: z60.string(),
30926
- role: z60.string().nullable(),
30927
- roleLabel: z60.string().nullable(),
30928
- bio: z60.string().nullable(),
30929
- summary: z60.string().nullable(),
31892
+ var teamMemberDataSchema = z62.object({
31893
+ _type: z62.literal("teamMember"),
31894
+ id: z62.string(),
31895
+ name: z62.string(),
31896
+ role: z62.string().nullable(),
31897
+ roleLabel: z62.string().nullable(),
31898
+ bio: z62.string().nullable(),
31899
+ summary: z62.string().nullable(),
30930
31900
  photo: teamMemberPhotoSchema,
30931
- profilePath: z60.string().nullable()
31901
+ profilePath: z62.string().nullable()
30932
31902
  });
30933
- var teamMembersDataSchema = z60.array(teamMemberDataSchema);
31903
+ var teamMembersDataSchema = z62.array(teamMemberDataSchema);
30934
31904
  var dynamicSourceWhen = { equals: "site_staff" };
30935
31905
  var manualSourceWhen = { equals: "site_staff", not: true };
30936
31906
  var headingNode = text(
@@ -31700,6 +32670,13 @@ function eventListCapable() {
31700
32670
  eventListTreatments
31701
32671
  });
31702
32672
  }
32673
+ function offeringsPreviewCapable() {
32674
+ return declareBlockDesignCapability({
32675
+ sectionSurfaces: "supported",
32676
+ contentFrames: ["plain"],
32677
+ itemSurfaces: "supported"
32678
+ });
32679
+ }
31703
32680
  function defaultBoundaryBias(visualWeight) {
31704
32681
  return visualWeight === "featured" || visualWeight === "immersive" ? "clear" : "soft";
31705
32682
  }
@@ -31813,6 +32790,13 @@ var systemBlockDefinitionsRaw = [
31813
32790
  weight: "featured",
31814
32791
  bias: "clear",
31815
32792
  surfaces: heroSectionSurfaces
32793
+ }),
32794
+ layoutProfile({
32795
+ variantKey: "splitEditorial",
32796
+ family: "split",
32797
+ weight: "featured",
32798
+ bias: "clear",
32799
+ surfaces: heroSectionSurfaces
31816
32800
  })
31817
32801
  ]
31818
32802
  })),
@@ -31907,7 +32891,10 @@ var systemBlockDefinitionsRaw = [
31907
32891
  })),
31908
32892
  withDesignCapability("block.form", formBlockDefinition, panelCapable(), defineBlockDesignMetadata({
31909
32893
  flow: conversionFlow,
31910
- layoutProfiles: [layoutProfile({ variantKey: "default", family: "form", weight: "standard" })]
32894
+ layoutProfiles: [
32895
+ layoutProfile({ variantKey: "default", family: "form", weight: "standard" }),
32896
+ layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
32897
+ ]
31911
32898
  })),
31912
32899
  withDesignCapability("block.faq", faqBlockDefinition, withEyebrowCapability(declareBlockDesignCapability({
31913
32900
  sectionSurfaces: "supported",
@@ -31936,7 +32923,10 @@ var systemBlockDefinitionsRaw = [
31936
32923
  contentFrames: ["plain", "panel"],
31937
32924
  itemSurfaces: "supported",
31938
32925
  testimonialCardTreatments: ["default", "statement", "non-carded", "accent-quote", "editorial-serif-quote"],
31939
- headingDecorations: ["short-center-rule"]
32926
+ headingDecorationCapability: {
32927
+ kind: "supported",
32928
+ families: ["short-center-rule"]
32929
+ }
31940
32930
  }), defineBlockDesignMetadata({
31941
32931
  flow: proofFlow,
31942
32932
  layoutProfiles: [
@@ -32039,6 +33029,10 @@ var systemBlockDefinitionsRaw = [
32039
33029
  layoutProfile({ variantKey: "timetable", family: "stack", weight: "standard" })
32040
33030
  ]
32041
33031
  })),
33032
+ withDesignCapability("block.offerings-preview", offeringsPreviewBlockDefinition, offeringsPreviewCapable(), defineBlockDesignMetadata({
33033
+ flow: offeringsFlow,
33034
+ layoutProfiles: [layoutProfile({ variantKey: "cards", family: "grid", weight: "standard" })]
33035
+ })),
32042
33036
  // Friendly wrapper blocks
32043
33037
  withDesignCapability("block.team-members", teamMembersBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
32044
33038
  flow: proofFlow,
@@ -32562,32 +33556,8 @@ var backgroundTransforms = [
32562
33556
  {
32563
33557
  id: "background.resolveColorsStyle",
32564
33558
  kind: "formatter",
32565
- summary: "Resolve text + heading colors from a background object into scoped CSS vars",
32566
- run: (value, _options, context) => {
32567
- if (!value || typeof value !== "object") {
32568
- return {};
32569
- }
32570
- const input = value;
32571
- const textColor = isString(input.textColor) ? input.textColor.trim() : null;
32572
- const headingColor = isString(input.headingColor) ? input.headingColor.trim() : null;
32573
- const style = {};
32574
- if (textColor) {
32575
- const resolvedText = resolveBackgroundColorValue(textColor, context);
32576
- if (resolvedText) {
32577
- style.color = resolvedText;
32578
- style["--section-text-color"] = resolvedText;
32579
- if (headingColor) {
32580
- const resolvedHeading = resolveBackgroundColorValue(headingColor, context);
32581
- if (resolvedHeading) {
32582
- style["--section-heading-color"] = resolvedHeading;
32583
- }
32584
- } else {
32585
- style["--section-heading-color"] = resolvedText;
32586
- }
32587
- }
32588
- }
32589
- return style;
32590
- }
33559
+ summary: "Resolve section foreground colors from a background object into scoped CSS vars",
33560
+ run: (value, _options, context) => resolveSectionForegroundStyles(value, context)
32591
33561
  },
32592
33562
  {
32593
33563
  id: "background.resolveAllowOverflow",
@@ -32815,6 +33785,104 @@ var builtinTransformDefinitions = [
32815
33785
  ];
32816
33786
  var defaultTransforms = createTransformRegistry(builtinTransformDefinitions);
32817
33787
 
33788
+ // ../blocks/src/system/data/linkedContentEntries.ts
33789
+ var LINKED_CONTENT_ENTRY_META_KEY = "__rbLinkedContentEntry";
33790
+ function coerceLinkedContentEntriesPayload(payload) {
33791
+ if (!isRecord3(payload)) return payload;
33792
+ const response = payload;
33793
+ if (!Array.isArray(response.entries)) return payload;
33794
+ const contentType = parsePublicContentTypeMeta(response.contentType);
33795
+ if (!contentType) return response.entries;
33796
+ return response.entries.map((entry) => enrichLinkedContentEntry(entry, contentType));
33797
+ }
33798
+ function enrichLinkedContentEntry(entry, contentType) {
33799
+ if (!isRecord3(entry)) return entry;
33800
+ const entryId = typeof entry.id === "string" ? entry.id : null;
33801
+ if (!entryId) return entry;
33802
+ const title = typeof entry.title === "string" && entry.title.trim().length > 0 ? entry.title : entryId;
33803
+ const optimisticHash = typeof entry.optimisticHash === "string" && entry.optimisticHash.length > 0 ? entry.optimisticHash : null;
33804
+ const meta = {
33805
+ kind: "linked-content-entry",
33806
+ entryId,
33807
+ contentTypeKey: contentType.key,
33808
+ contentTypeLabel: contentTypeKeyToLabel(contentType.key),
33809
+ title,
33810
+ optimisticHash,
33811
+ support: resolveLinkedContentEditSupport(contentType),
33812
+ contentType
33813
+ };
33814
+ return {
33815
+ ...entry,
33816
+ [LINKED_CONTENT_ENTRY_META_KEY]: meta
33817
+ };
33818
+ }
33819
+ function resolveLinkedContentEditSupport(contentType) {
33820
+ if (contentType.fields.length === 0) {
33821
+ return { kind: "unsupported-missing-schema", reason: "Content type has no public field metadata." };
33822
+ }
33823
+ const metadata = contentType.previewLinkedEntryEditing;
33824
+ if (!metadata) {
33825
+ return { kind: "unsupported-content-type", reason: "Content type has not enabled linked-entry preview editing." };
33826
+ }
33827
+ switch (metadata.kind) {
33828
+ case "generic":
33829
+ return { kind: "supported" };
33830
+ case "unsupported-domain-backed":
33831
+ return { kind: "unsupported-domain-backed", reason: metadata.reason };
33832
+ default:
33833
+ return assertNever(metadata);
33834
+ }
33835
+ }
33836
+ function contentTypeKeyToLabel(key) {
33837
+ const singular = key.endsWith("ies") ? `${key.slice(0, -3)}y` : key.endsWith("s") ? key.slice(0, -1) : key;
33838
+ return singular.split(/[-_\s]+/).filter((part) => part.length > 0).map((part, index) => index === 0 ? capitalize(part) : part.toLowerCase()).join(" ");
33839
+ }
33840
+ function capitalize(value) {
33841
+ return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();
33842
+ }
33843
+ function parsePublicContentTypeMeta(value) {
33844
+ if (!isRecord3(value)) return null;
33845
+ if (typeof value.key !== "string" || value.key.trim().length === 0) return null;
33846
+ return {
33847
+ key: value.key,
33848
+ titleField: typeof value.titleField === "string" ? value.titleField : null,
33849
+ fields: Array.isArray(value.fields) ? value.fields.flatMap(parsePublicContentTypeFieldMeta) : [],
33850
+ previewLinkedEntryEditing: parsePublicContentTypeLinkedEntryEditing(value.previewLinkedEntryEditing)
33851
+ };
33852
+ }
33853
+ function parsePublicContentTypeLinkedEntryEditing(value) {
33854
+ if (!isRecord3(value) || typeof value.kind !== "string") return null;
33855
+ switch (value.kind) {
33856
+ case "generic":
33857
+ return { kind: "generic" };
33858
+ case "unsupported-domain-backed":
33859
+ return {
33860
+ kind: "unsupported-domain-backed",
33861
+ reason: typeof value.reason === "string" ? value.reason : "Domain-backed entries need a dedicated editor workflow."
33862
+ };
33863
+ default:
33864
+ return null;
33865
+ }
33866
+ }
33867
+ function parsePublicContentTypeFieldMeta(value) {
33868
+ if (!isRecord3(value)) return [];
33869
+ if (typeof value.id !== "string" || typeof value.type !== "string") return [];
33870
+ return [{
33871
+ id: value.id,
33872
+ type: value.type,
33873
+ mediaKinds: parseStringArray(value.mediaKinds),
33874
+ fileKinds: parseStringArray(value.fileKinds)
33875
+ }];
33876
+ }
33877
+ function parseStringArray(value) {
33878
+ if (value === null || typeof value === "undefined") return null;
33879
+ if (!Array.isArray(value)) return null;
33880
+ return value.filter((item) => typeof item === "string");
33881
+ }
33882
+ function isRecord3(value) {
33883
+ return typeof value === "object" && value !== null && !Array.isArray(value);
33884
+ }
33885
+
32818
33886
  // ../theme-core/src/navigation/presets.ts
32819
33887
  var NAV_LINK_PRESETS = {
32820
33888
  /**
@@ -32973,9 +34041,21 @@ var NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES = [
32973
34041
  ];
32974
34042
 
32975
34043
  // ../theme-core/src/layout/generateLayoutCss.ts
32976
- var waveTransitionMask = svgDataUrl(
34044
+ var classicWaveTransitionMask = svgDataUrl(
32977
34045
  "<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V46C130 55 260 24 420 30C590 36 690 62 860 42C1035 21 1160 47 1305 36C1365 31 1415 33 1440 38V72H0Z' fill='white'/></svg>"
32978
34046
  );
34047
+ var balancedWaveTransitionMask = svgDataUrl(
34048
+ "<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V42C120 24 240 24 360 42C480 60 600 60 720 42C840 24 960 24 1080 42C1200 60 1320 60 1440 42V72H0Z' fill='white'/></svg>"
34049
+ );
34050
+ var gentleWaveTransitionMask = svgDataUrl(
34051
+ "<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V43C180 32 300 32 480 43C660 54 780 54 960 43C1140 32 1260 32 1440 43V72H0Z' fill='white'/></svg>"
34052
+ );
34053
+ var boldWaveTransitionMask = svgDataUrl(
34054
+ "<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V44C90 14 270 14 360 44C450 74 630 74 720 44C810 14 990 14 1080 44C1170 74 1350 74 1440 44V72H0Z' fill='white'/></svg>"
34055
+ );
34056
+ var driftWaveTransitionMask = svgDataUrl(
34057
+ "<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V39C115 31 205 54 340 48C505 41 610 16 760 33C920 51 1015 64 1160 44C1280 27 1375 35 1440 50V72H0Z' fill='white'/></svg>"
34058
+ );
32979
34059
  function svgDataUrl(svg) {
32980
34060
  return `data:image/svg+xml,${encodeURIComponent(svg)}`;
32981
34061
  }
@@ -34754,34 +35834,34 @@ import { Fragment, jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
34754
35834
  var MAX_FONT_UPLOAD_BYTES = 5 * 1024 * 1024;
34755
35835
 
34756
35836
  // ../theme-core/src/runtime/buildThemeRuntimeFromBridge.ts
34757
- import { z as z61 } from "zod";
34758
- var themeBridgeConfigSchema = z61.object({
34759
- tokens: z61.record(z61.string(), z61.string()),
34760
- typography: z61.object({
34761
- headingFamily: z61.string().optional(),
34762
- bodyFamily: z61.string().optional(),
34763
- headingWeight: z61.number().optional(),
34764
- bodyWeight: z61.number().optional()
35837
+ import { z as z63 } from "zod";
35838
+ var themeBridgeConfigSchema = z63.object({
35839
+ tokens: z63.record(z63.string(), z63.string()),
35840
+ typography: z63.object({
35841
+ headingFamily: z63.string().optional(),
35842
+ bodyFamily: z63.string().optional(),
35843
+ headingWeight: z63.number().optional(),
35844
+ bodyWeight: z63.number().optional()
34765
35845
  }).optional(),
34766
- spacing: z61.enum(["comfortable", "standard", "dense"]).optional(),
34767
- corners: z61.enum(["square", "soft", "rounded", "pill"]).optional(),
34768
- shadows: z61.enum(["none", "low", "medium", "high"]).optional(),
34769
- components: z61.object({
34770
- buttons: z61.union([
34771
- z61.boolean(),
34772
- z61.object({
34773
- variants: z61.array(z61.enum(["primary", "secondary", "outline", "ghost"])).optional()
35846
+ spacing: z63.enum(["comfortable", "standard", "dense"]).optional(),
35847
+ corners: z63.enum(["square", "soft", "rounded", "pill"]).optional(),
35848
+ shadows: z63.enum(["none", "low", "medium", "high"]).optional(),
35849
+ components: z63.object({
35850
+ buttons: z63.union([
35851
+ z63.boolean(),
35852
+ z63.object({
35853
+ variants: z63.array(z63.enum(["primary", "secondary", "outline", "ghost"])).optional()
34774
35854
  })
34775
35855
  ]).optional(),
34776
- cards: z61.union([
34777
- z61.boolean(),
34778
- z61.object({
34779
- variants: z61.array(z61.enum(["default", "elevated", "outlined"])).optional()
35856
+ cards: z63.union([
35857
+ z63.boolean(),
35858
+ z63.object({
35859
+ variants: z63.array(z63.enum(["default", "elevated", "outlined"])).optional()
34780
35860
  })
34781
35861
  ]).optional(),
34782
- inputs: z61.boolean().optional()
35862
+ inputs: z63.boolean().optional()
34783
35863
  }).optional(),
34784
- overrides: z61.record(z61.string(), z61.string()).optional()
35864
+ overrides: z63.record(z63.string(), z63.string()).optional()
34785
35865
  }).passthrough();
34786
35866
 
34787
35867
  // ../theme-core/src/siteChrome.tsx
@@ -34981,6 +36061,8 @@ function coerceToString(value) {
34981
36061
  return String(value);
34982
36062
  }
34983
36063
  function coercePayload(payload) {
36064
+ const linkedContentEntries = coerceLinkedContentEntriesPayload(payload);
36065
+ if (linkedContentEntries !== payload) return linkedContentEntries;
34984
36066
  if (payload && typeof payload === "object" && !Array.isArray(payload)) {
34985
36067
  const record = payload;
34986
36068
  if ("data" in record && typeof record.data !== "function") return record.data;
@@ -35068,6 +36150,7 @@ var SUPPORTED_LOADER_ENDPOINTS = [
35068
36150
  "listPublicEvents",
35069
36151
  "getPublicEventDetails",
35070
36152
  "listPublicCourses",
36153
+ "listPublicRouteCandidates",
35071
36154
  "listPublicTeamMembers",
35072
36155
  "listPublicProducts",
35073
36156
  "listPublicPasses",
@@ -35128,6 +36211,10 @@ function normalizeLoaderParams(endpoint, params, context) {
35128
36211
  ensureSiteId(out, context);
35129
36212
  return out;
35130
36213
  }
36214
+ if (endpoint === "listPublicRouteCandidates") {
36215
+ ensureSiteId(out, context);
36216
+ return out;
36217
+ }
35131
36218
  if (endpoint === "getPublishedEntryPreview") {
35132
36219
  ensureSiteId(out, context);
35133
36220
  return out;
@@ -35140,17 +36227,17 @@ function normalizeLoaderParams(endpoint, params, context) {
35140
36227
  function unsafeRetypeZodSchema(schema) {
35141
36228
  return schema;
35142
36229
  }
35143
- var navIdListSchema = z62.preprocess((value) => {
36230
+ var navIdListSchema = z64.preprocess((value) => {
35144
36231
  if (!Array.isArray(value)) return void 0;
35145
36232
  const filtered = value.filter((v) => typeof v === "string" && v.trim().length > 0);
35146
36233
  return filtered.length > 0 ? filtered : void 0;
35147
- }, z62.array(z62.string()).max(200).optional());
35148
- var dashboardNavVisibilityBaseSchema = z62.object({
35149
- mode: z62.enum(["augment", "restrict"]).optional(),
36234
+ }, z64.array(z64.string()).max(200).optional());
36235
+ var dashboardNavVisibilityBaseSchema = z64.object({
36236
+ mode: z64.enum(["augment", "restrict"]).optional(),
35150
36237
  allowIds: navIdListSchema,
35151
36238
  denyIds: navIdListSchema
35152
36239
  }).strip();
35153
- var dashboardNavVisibilityRolesSchema = z62.object({
36240
+ var dashboardNavVisibilityRolesSchema = z64.object({
35154
36241
  administrator: dashboardNavVisibilityBaseSchema.optional(),
35155
36242
  editor: dashboardNavVisibilityBaseSchema.optional(),
35156
36243
  team_member: dashboardNavVisibilityBaseSchema.optional()
@@ -35158,63 +36245,63 @@ var dashboardNavVisibilityRolesSchema = z62.object({
35158
36245
  var dashboardNavVisibilitySchema = dashboardNavVisibilityBaseSchema.extend({
35159
36246
  roles: dashboardNavVisibilityRolesSchema
35160
36247
  }).strip();
35161
- var dashboardNavigationConfigSchema = z62.object({
36248
+ var dashboardNavigationConfigSchema = z64.object({
35162
36249
  siteNav: dashboardNavVisibilitySchema.optional(),
35163
36250
  settingsNav: dashboardNavVisibilitySchema.optional()
35164
36251
  }).strip();
35165
- var dashboardConfigSchema = z62.object({
35166
- previewEditingEnabled: z62.boolean().optional(),
36252
+ var dashboardConfigSchema = z64.object({
36253
+ previewEditingEnabled: z64.boolean().optional(),
35167
36254
  navigation: dashboardNavigationConfigSchema.optional()
35168
36255
  }).strip();
35169
36256
  var fieldDefinitionInputSchema = unsafeRetypeZodSchema(fieldSchema);
35170
36257
  var nodeDefinitionSchema = unsafeRetypeZodSchema(NodeSchema);
35171
- var sdkLoaderEndpointSchema = z62.enum(SUPPORTED_LOADER_ENDPOINTS);
35172
- var loaderFallbackScalarSchema = z62.union([
35173
- z62.string(),
35174
- z62.number(),
35175
- z62.boolean(),
35176
- z62.null()
36258
+ var sdkLoaderEndpointSchema = z64.enum(SUPPORTED_LOADER_ENDPOINTS);
36259
+ var loaderFallbackScalarSchema = z64.union([
36260
+ z64.string(),
36261
+ z64.number(),
36262
+ z64.boolean(),
36263
+ z64.null()
35177
36264
  ]);
35178
- var loaderParamBindingSchema = z62.object({
35179
- $bind: z62.object({
35180
- from: z62.string().min(1, "Binding path is required"),
36265
+ var loaderParamBindingSchema = z64.object({
36266
+ $bind: z64.object({
36267
+ from: z64.string().min(1, "Binding path is required"),
35181
36268
  fallback: loaderFallbackScalarSchema.optional()
35182
36269
  })
35183
36270
  });
35184
- var loaderParamValueSchema = z62.union([
35185
- z62.string(),
35186
- z62.number(),
35187
- z62.boolean(),
36271
+ var loaderParamValueSchema = z64.union([
36272
+ z64.string(),
36273
+ z64.number(),
36274
+ z64.boolean(),
35188
36275
  loaderParamBindingSchema
35189
36276
  ]);
35190
- var sdkConfigLoaderSchema = z62.object({
36277
+ var sdkConfigLoaderSchema = z64.object({
35191
36278
  endpoint: sdkLoaderEndpointSchema,
35192
- params: z62.record(z62.string(), loaderParamValueSchema),
35193
- mode: z62.enum(["server", "client"]).default("server")
36279
+ params: z64.record(z64.string(), loaderParamValueSchema),
36280
+ mode: z64.enum(["server", "client"]).default("server")
35194
36281
  });
35195
- var sdkDataLoadersSchema = z62.record(z62.string(), sdkConfigLoaderSchema).refine((loaders) => Object.keys(loaders).length <= 5, { message: "Maximum 5 data loaders per block" }).optional();
35196
- var sdkCustomBlockIdSchema = z62.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
36282
+ var sdkDataLoadersSchema = z64.record(z64.string(), sdkConfigLoaderSchema).refine((loaders) => Object.keys(loaders).length <= 5, { message: "Maximum 5 data loaders per block" }).optional();
36283
+ var sdkCustomBlockIdSchema = z64.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
35197
36284
  message: "Block ID must start with 'custom.' followed by lowercase letters, numbers, or hyphens"
35198
36285
  }).transform((value) => value);
35199
- var sdkCustomBlockInputSchema = z62.object({
36286
+ var sdkCustomBlockInputSchema = z64.object({
35200
36287
  id: sdkCustomBlockIdSchema,
35201
- title: z62.string().min(1),
35202
- titleSource: z62.union([z62.string().min(1), z62.array(z62.string().min(1)).min(1)]).optional(),
35203
- description: z62.string().optional(),
36288
+ title: z64.string().min(1),
36289
+ titleSource: z64.union([z64.string().min(1), z64.array(z64.string().min(1)).min(1)]).optional(),
36290
+ description: z64.string().optional(),
35204
36291
  category: blockCategoryEnum,
35205
- icon: z62.string().optional(),
35206
- tags: z62.array(z62.string()).optional(),
36292
+ icon: z64.string().optional(),
36293
+ tags: z64.array(z64.string()).optional(),
35207
36294
  fields: fieldDefinitionInputSchema.array().min(1),
35208
36295
  dataLoaders: sdkDataLoadersSchema,
35209
36296
  layout: NodeSchema.optional(),
35210
- variants: z62.record(z62.string().min(1), NodeSchema).optional(),
35211
- defaultVariant: z62.string().min(1).optional(),
35212
- variantOptions: z62.record(
35213
- z62.string().min(1),
35214
- z62.object({
35215
- label: z62.string().min(1).optional(),
35216
- description: z62.string().min(1).optional(),
35217
- icon: z62.string().min(1).optional()
36297
+ variants: z64.record(z64.string().min(1), NodeSchema).optional(),
36298
+ defaultVariant: z64.string().min(1).optional(),
36299
+ variantOptions: z64.record(
36300
+ z64.string().min(1),
36301
+ z64.object({
36302
+ label: z64.string().min(1).optional(),
36303
+ description: z64.string().min(1).optional(),
36304
+ icon: z64.string().min(1).optional()
35218
36305
  })
35219
36306
  ).optional()
35220
36307
  }).superRefine((data, ctx) => {
@@ -35224,7 +36311,7 @@ var sdkCustomBlockInputSchema = z62.object({
35224
36311
  const exists = data.fields.some((field) => field.id === source);
35225
36312
  if (!exists) {
35226
36313
  ctx.addIssue({
35227
- code: z62.ZodIssueCode.custom,
36314
+ code: z64.ZodIssueCode.custom,
35228
36315
  message: `titleSource must reference a valid field ID (got "${source}")`,
35229
36316
  path: Array.isArray(data.titleSource) ? ["titleSource", index] : ["titleSource"]
35230
36317
  });
@@ -35233,7 +36320,7 @@ var sdkCustomBlockInputSchema = z62.object({
35233
36320
  }
35234
36321
  if (data.layout && data.variants) {
35235
36322
  ctx.addIssue({
35236
- code: z62.ZodIssueCode.custom,
36323
+ code: z64.ZodIssueCode.custom,
35237
36324
  message: "Custom block must define either `layout` or `variants`, not both",
35238
36325
  path: ["variants"]
35239
36326
  });
@@ -35242,14 +36329,14 @@ var sdkCustomBlockInputSchema = z62.object({
35242
36329
  const keys = Object.keys(data.variants);
35243
36330
  if (keys.length === 0) {
35244
36331
  ctx.addIssue({
35245
- code: z62.ZodIssueCode.custom,
36332
+ code: z64.ZodIssueCode.custom,
35246
36333
  message: "`variants` must contain at least one variant key",
35247
36334
  path: ["variants"]
35248
36335
  });
35249
36336
  }
35250
36337
  if (data.defaultVariant && !Object.prototype.hasOwnProperty.call(data.variants, data.defaultVariant)) {
35251
36338
  ctx.addIssue({
35252
- code: z62.ZodIssueCode.custom,
36339
+ code: z64.ZodIssueCode.custom,
35253
36340
  message: "`defaultVariant` must be a key present in `variants`",
35254
36341
  path: ["defaultVariant"]
35255
36342
  });
@@ -35258,7 +36345,7 @@ var sdkCustomBlockInputSchema = z62.object({
35258
36345
  for (const key of Object.keys(data.variantOptions)) {
35259
36346
  if (!Object.prototype.hasOwnProperty.call(data.variants, key)) {
35260
36347
  ctx.addIssue({
35261
- code: z62.ZodIssueCode.custom,
36348
+ code: z64.ZodIssueCode.custom,
35262
36349
  message: "`variantOptions` key must exist in `variants`",
35263
36350
  path: ["variantOptions", key]
35264
36351
  });
@@ -35267,78 +36354,78 @@ var sdkCustomBlockInputSchema = z62.object({
35267
36354
  }
35268
36355
  }
35269
36356
  });
35270
- var sdkBlockFieldExtensionInputSchema = z62.object({
36357
+ var sdkBlockFieldExtensionInputSchema = z64.object({
35271
36358
  fields: fieldDefinitionInputSchema.array().min(1)
35272
36359
  });
35273
- var sdkBlockFieldExtensionsInputSchema = z62.record(
35274
- z62.string().min(1),
36360
+ var sdkBlockFieldExtensionsInputSchema = z64.record(
36361
+ z64.string().min(1),
35275
36362
  sdkBlockFieldExtensionInputSchema
35276
36363
  );
35277
- var sdkThemePaletteSchema = z62.record(z62.string(), z62.string());
35278
- var sdkThemeConfigSchema = z62.object({
36364
+ var sdkThemePaletteSchema = z64.record(z64.string(), z64.string());
36365
+ var sdkThemeConfigSchema = z64.object({
35279
36366
  palette: sdkThemePaletteSchema
35280
36367
  });
35281
- var sdkSectionBackgroundSchema = z62.object({
35282
- id: z62.string().min(1),
35283
- label: z62.string().min(1),
35284
- token: z62.string().min(1)
36368
+ var sdkSectionBackgroundSchema = z64.object({
36369
+ id: z64.string().min(1),
36370
+ label: z64.string().min(1),
36371
+ token: z64.string().min(1)
35285
36372
  });
35286
- var sdkSectionOptionsConfigSchema = z62.object({
35287
- backgroundColor: z62.boolean().optional(),
35288
- backgroundImage: z62.boolean().optional(),
35289
- backgroundGradient: z62.boolean().optional(),
35290
- spacing: z62.union([z62.array(z62.enum(["compact", "default", "spacious"])), z62.boolean()]).optional(),
35291
- textColor: z62.boolean().optional()
36373
+ var sdkSectionOptionsConfigSchema = z64.object({
36374
+ backgroundColor: z64.boolean().optional(),
36375
+ backgroundImage: z64.boolean().optional(),
36376
+ backgroundGradient: z64.boolean().optional(),
36377
+ spacing: z64.union([z64.array(z64.enum(["compact", "default", "spacious"])), z64.boolean()]).optional(),
36378
+ textColor: z64.boolean().optional()
35292
36379
  });
35293
- var sdkContainerOptionsConfigSchema = z62.object({
35294
- maxWidth: z62.union([z62.array(z62.enum(["narrow", "default", "wide", "full"])), z62.boolean()]).optional(),
35295
- alignment: z62.union([z62.array(z62.enum(["left", "center", "right"])), z62.boolean()]).optional()
36380
+ var sdkContainerOptionsConfigSchema = z64.object({
36381
+ maxWidth: z64.union([z64.array(z64.enum(["narrow", "default", "wide", "full"])), z64.boolean()]).optional(),
36382
+ alignment: z64.union([z64.array(z64.enum(["left", "center", "right"])), z64.boolean()]).optional()
35296
36383
  });
35297
- var sdkSiteStyleConfigSchema = z62.object({
35298
- sectionBackgrounds: z62.array(sdkSectionBackgroundSchema).optional(),
36384
+ var sdkSiteStyleConfigSchema = z64.object({
36385
+ sectionBackgrounds: z64.array(sdkSectionBackgroundSchema).optional(),
35299
36386
  sectionOptions: sdkSectionOptionsConfigSchema.optional(),
35300
36387
  containerOptions: sdkContainerOptionsConfigSchema.optional()
35301
36388
  });
35302
- var sdkSiteLayoutConfigSchema = z62.object({
35303
- footerBlocks: z62.array(
35304
- z62.object({
35305
- id: z62.string().min(1).optional(),
35306
- kind: z62.string().min(1),
35307
- content: z62.record(z62.string(), z62.unknown()).optional()
36389
+ var sdkSiteLayoutConfigSchema = z64.object({
36390
+ footerBlocks: z64.array(
36391
+ z64.object({
36392
+ id: z64.string().min(1).optional(),
36393
+ kind: z64.string().min(1),
36394
+ content: z64.record(z64.string(), z64.unknown()).optional()
35308
36395
  })
35309
36396
  ).optional()
35310
36397
  });
35311
- var sdkFieldSelectOptionSchema = z62.object({
35312
- value: z62.string(),
35313
- label: z62.string()
36398
+ var sdkFieldSelectOptionSchema = z64.object({
36399
+ value: z64.string(),
36400
+ label: z64.string()
35314
36401
  });
35315
- var sdkBlockFieldConfigSchema = z62.object({
35316
- options: z62.array(sdkFieldSelectOptionSchema).optional()
36402
+ var sdkBlockFieldConfigSchema = z64.object({
36403
+ options: z64.array(sdkFieldSelectOptionSchema).optional()
35317
36404
  });
35318
- var sdkBlockFieldOptionsMapSchema = z62.record(
35319
- z62.string().regex(/^(block\.|custom\.)[a-z][a-z0-9-]*$/, {
36405
+ var sdkBlockFieldOptionsMapSchema = z64.record(
36406
+ z64.string().regex(/^(block\.|custom\.)[a-z][a-z0-9-]*$/, {
35320
36407
  message: "Block ID must be 'block.*' or 'custom.*' format"
35321
36408
  }),
35322
- z62.record(z62.string().min(1), sdkBlockFieldConfigSchema)
36409
+ z64.record(z64.string().min(1), sdkBlockFieldConfigSchema)
35323
36410
  ).optional();
35324
- var sdkContentTypeTemplateConfigSchema = z62.object({
35325
- blocks: z62.array(z62.unknown())
36411
+ var sdkContentTypeTemplateConfigSchema = z64.object({
36412
+ blocks: z64.array(z64.unknown())
35326
36413
  }).passthrough();
35327
- var sdkContentTypeOrderingConfigSchema = z62.object({
35328
- mode: z62.enum(["default", "manual"]).optional()
36414
+ var sdkContentTypeOrderingConfigSchema = z64.object({
36415
+ mode: z64.enum(["default", "manual"]).optional()
35329
36416
  }).optional();
35330
- var sdkContentTypeConfigSchema = z62.object({
35331
- key: z62.string().min(1),
35332
- fields: z62.array(z62.unknown()),
36417
+ var sdkContentTypeConfigSchema = z64.object({
36418
+ key: z64.string().min(1),
36419
+ fields: z64.array(z64.unknown()),
35333
36420
  ordering: sdkContentTypeOrderingConfigSchema,
35334
36421
  template: sdkContentTypeTemplateConfigSchema.nullable().optional()
35335
36422
  }).passthrough();
35336
- var sdkContentConfigSchema = z62.object({
35337
- contentTypes: z62.array(sdkContentTypeConfigSchema).optional(),
35338
- pages: z62.array(z62.unknown()).optional(),
35339
- entries: z62.array(z62.unknown()).optional(),
35340
- navigationMenus: z62.array(z62.unknown()).optional(),
35341
- settings: z62.unknown().optional()
36423
+ var sdkContentConfigSchema = z64.object({
36424
+ contentTypes: z64.array(sdkContentTypeConfigSchema).optional(),
36425
+ pages: z64.array(z64.unknown()).optional(),
36426
+ entries: z64.array(z64.unknown()).optional(),
36427
+ navigationMenus: z64.array(z64.unknown()).optional(),
36428
+ settings: z64.unknown().optional()
35342
36429
  }).passthrough();
35343
36430
  var SDK_WORKFLOW_ID_MAX_LENGTH = 120;
35344
36431
  var SDK_WORKFLOW_TITLE_MAX_LENGTH = 120;
@@ -35353,62 +36440,62 @@ var SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH = 120;
35353
36440
  var SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH = 500;
35354
36441
  var SDK_WORKFLOW_ID_PATTERN = /^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/;
35355
36442
  var SDK_WORKFLOW_ENDPOINT_PATTERN = /^\//;
35356
- var sdkWorkflowIdSchema = z62.string().min(1).max(SDK_WORKFLOW_ID_MAX_LENGTH).regex(SDK_WORKFLOW_ID_PATTERN, {
36443
+ var sdkWorkflowIdSchema = z64.string().min(1).max(SDK_WORKFLOW_ID_MAX_LENGTH).regex(SDK_WORKFLOW_ID_PATTERN, {
35357
36444
  message: "Workflow ID must start with a lowercase letter and use lowercase letters, numbers, dots, underscores, or hyphens"
35358
36445
  });
35359
- var sdkWorkflowEndpointSchema = z62.string().min(1).max(SDK_WORKFLOW_ENDPOINT_MAX_LENGTH).regex(SDK_WORKFLOW_ENDPOINT_PATTERN, { message: 'Workflow endpoint must be a site-relative path starting with "/"' });
35360
- var sdkWorkflowManualTriggerSchema = z62.object({
35361
- type: z62.literal("manual")
36446
+ var sdkWorkflowEndpointSchema = z64.string().min(1).max(SDK_WORKFLOW_ENDPOINT_MAX_LENGTH).regex(SDK_WORKFLOW_ENDPOINT_PATTERN, { message: 'Workflow endpoint must be a site-relative path starting with "/"' });
36447
+ var sdkWorkflowManualTriggerSchema = z64.object({
36448
+ type: z64.literal("manual")
35362
36449
  }).strict();
35363
- var sdkWorkflowTriggerFieldSchema = z62.string().trim().min(1).max(SDK_WORKFLOW_TRIGGER_FIELD_MAX_LENGTH).refine((field) => !field.includes("."), {
36450
+ var sdkWorkflowTriggerFieldSchema = z64.string().trim().min(1).max(SDK_WORKFLOW_TRIGGER_FIELD_MAX_LENGTH).refine((field) => !field.includes("."), {
35364
36451
  message: "Workflow trigger fields must be top-level content field IDs, not paths"
35365
36452
  });
35366
- var sdkWorkflowFieldChangedConditionSchema = z62.object({
36453
+ var sdkWorkflowFieldChangedConditionSchema = z64.object({
35367
36454
  field: sdkWorkflowTriggerFieldSchema,
35368
- changed: z62.literal(true)
36455
+ changed: z64.literal(true)
35369
36456
  }).strict();
35370
- var sdkWorkflowFieldEmptyConditionSchema = z62.object({
36457
+ var sdkWorkflowFieldEmptyConditionSchema = z64.object({
35371
36458
  field: sdkWorkflowTriggerFieldSchema,
35372
- isEmpty: z62.boolean()
36459
+ isEmpty: z64.boolean()
35373
36460
  }).strict();
35374
- var sdkWorkflowEntryDraftUpdatedTriggerSchema = z62.object({
35375
- type: z62.literal("entry.draft.updated"),
35376
- when: z62.array(
35377
- z62.union([
36461
+ var sdkWorkflowEntryDraftUpdatedTriggerSchema = z64.object({
36462
+ type: z64.literal("entry.draft.updated"),
36463
+ when: z64.array(
36464
+ z64.union([
35378
36465
  sdkWorkflowFieldChangedConditionSchema,
35379
36466
  sdkWorkflowFieldEmptyConditionSchema
35380
36467
  ])
35381
36468
  ).min(1).max(SDK_WORKFLOW_TRIGGER_CONDITION_MAX_COUNT)
35382
36469
  }).strict();
35383
- var sdkWorkflowTriggerSchema = z62.discriminatedUnion("type", [
36470
+ var sdkWorkflowTriggerSchema = z64.discriminatedUnion("type", [
35384
36471
  sdkWorkflowManualTriggerSchema,
35385
36472
  sdkWorkflowEntryDraftUpdatedTriggerSchema
35386
36473
  ]);
35387
- var sdkWorkflowConfirmationSchema = z62.object({
35388
- title: z62.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH),
35389
- body: z62.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH).optional()
36474
+ var sdkWorkflowConfirmationSchema = z64.object({
36475
+ title: z64.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH),
36476
+ body: z64.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH).optional()
35390
36477
  }).strict();
35391
- var sdkWorkflowConfigSchema = z62.object({
36478
+ var sdkWorkflowConfigSchema = z64.object({
35392
36479
  id: sdkWorkflowIdSchema,
35393
- title: z62.string().trim().min(1).max(SDK_WORKFLOW_TITLE_MAX_LENGTH),
35394
- description: z62.string().trim().min(1).max(SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH).optional(),
35395
- contentType: z62.string().trim().min(1).max(SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH),
36480
+ title: z64.string().trim().min(1).max(SDK_WORKFLOW_TITLE_MAX_LENGTH),
36481
+ description: z64.string().trim().min(1).max(SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH).optional(),
36482
+ contentType: z64.string().trim().min(1).max(SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH),
35396
36483
  endpoint: sdkWorkflowEndpointSchema,
35397
- triggers: z62.array(sdkWorkflowTriggerSchema).min(1).max(SDK_WORKFLOW_TRIGGER_MAX_COUNT),
36484
+ triggers: z64.array(sdkWorkflowTriggerSchema).min(1).max(SDK_WORKFLOW_TRIGGER_MAX_COUNT),
35398
36485
  confirmation: sdkWorkflowConfirmationSchema.optional()
35399
36486
  }).strict();
35400
- var sdkWorkflowsSchema = z62.array(sdkWorkflowConfigSchema).max(SDK_WORKFLOW_MAX_COUNT, "Maximum 50 workflows per site").refine((workflows) => {
36487
+ var sdkWorkflowsSchema = z64.array(sdkWorkflowConfigSchema).max(SDK_WORKFLOW_MAX_COUNT, "Maximum 50 workflows per site").refine((workflows) => {
35401
36488
  const ids = workflows.map((workflow) => workflow.id);
35402
36489
  return ids.length === new Set(ids).size;
35403
36490
  }, { message: "Workflow IDs must be unique" }).optional();
35404
- var riverbankSiteConfigInputSchema = z62.object({
35405
- siteId: z62.string().uuid(),
35406
- previewUrl: z62.string().url().optional(),
35407
- liveUrl: z62.string().url().optional(),
36491
+ var riverbankSiteConfigInputSchema = z64.object({
36492
+ siteId: z64.string().uuid(),
36493
+ previewUrl: z64.string().url().optional(),
36494
+ liveUrl: z64.string().url().optional(),
35408
36495
  theme: sdkThemeConfigSchema.optional(),
35409
36496
  styles: sdkSiteStyleConfigSchema.optional(),
35410
36497
  layout: sdkSiteLayoutConfigSchema.optional(),
35411
- customBlocks: z62.array(sdkCustomBlockInputSchema).max(100, "Maximum 100 custom blocks per site").refine((blocks) => {
36498
+ customBlocks: z64.array(sdkCustomBlockInputSchema).max(100, "Maximum 100 custom blocks per site").refine((blocks) => {
35412
36499
  const ids = blocks.map((b) => b.id);
35413
36500
  return ids.length === new Set(ids).size;
35414
36501
  }, { message: "Block IDs must be unique" }).optional(),
@@ -35416,50 +36503,50 @@ var riverbankSiteConfigInputSchema = z62.object({
35416
36503
  blockFieldExtensions: sdkBlockFieldExtensionsInputSchema.optional(),
35417
36504
  workflows: sdkWorkflowsSchema,
35418
36505
  content: sdkContentConfigSchema.optional(),
35419
- contentDir: z62.string().optional(),
35420
- sync: z62.object({
35421
- existingEntries: z62.enum(["skip", "update"]).optional()
36506
+ contentDir: z64.string().optional(),
36507
+ sync: z64.object({
36508
+ existingEntries: z64.enum(["skip", "update"]).optional()
35422
36509
  }).optional(),
35423
- deploy: z62.object({
35424
- verifyCommand: z62.string().optional(),
35425
- prebuildOutput: z62.string().optional()
36510
+ deploy: z64.object({
36511
+ verifyCommand: z64.string().optional(),
36512
+ prebuildOutput: z64.string().optional()
35426
36513
  }).optional(),
35427
- themeSource: z62.enum(["local", "cms"]).optional(),
35428
- activeTheme: z62.string().optional(),
35429
- enablePortal: z62.boolean().optional(),
36514
+ themeSource: z64.enum(["local", "cms"]).optional(),
36515
+ activeTheme: z64.string().optional(),
36516
+ enablePortal: z64.boolean().optional(),
35430
36517
  dashboard: dashboardConfigSchema.optional()
35431
36518
  }).strict();
35432
- var pushSdkConfigBodySchema = z62.object({
36519
+ var pushSdkConfigBodySchema = z64.object({
35433
36520
  config: riverbankSiteConfigInputSchema,
35434
- forceContentTypes: z62.boolean().optional()
36521
+ forceContentTypes: z64.boolean().optional()
35435
36522
  }).strict();
35436
36523
 
35437
36524
  // ../api/src/siteOnboarding.ts
35438
- import { z as z63 } from "zod";
36525
+ import { z as z65 } from "zod";
35439
36526
  var LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS = {
35440
36527
  configure_appointments: {
35441
36528
  requirementId: "configure_appointments",
35442
36529
  reason: "launch_anyway"
35443
36530
  }
35444
36531
  };
35445
- var acknowledgeLaunchRequirementRequestSchema = z63.discriminatedUnion(
36532
+ var acknowledgeLaunchRequirementRequestSchema = z65.discriminatedUnion(
35446
36533
  "requirementId",
35447
36534
  [
35448
- z63.object({
35449
- requirementId: z63.literal("review_generated_site")
36535
+ z65.object({
36536
+ requirementId: z65.literal("review_generated_site")
35450
36537
  }),
35451
- z63.object({
35452
- requirementId: z63.literal(
36538
+ z65.object({
36539
+ requirementId: z65.literal(
35453
36540
  LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS.configure_appointments.requirementId
35454
36541
  ),
35455
- overrideReason: z63.literal(
36542
+ overrideReason: z65.literal(
35456
36543
  LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS.configure_appointments.reason
35457
36544
  )
35458
36545
  })
35459
36546
  ]
35460
36547
  );
35461
- var goLiveSiteRequestSchema = z63.object({
35462
- acceptExtraSiteCharge: z63.boolean().optional()
36548
+ var goLiveSiteRequestSchema = z65.object({
36549
+ acceptExtraSiteCharge: z65.boolean().optional()
35463
36550
  });
35464
36551
 
35465
36552
  // ../surfaces/src/index.ts
@@ -35543,7 +36630,7 @@ var COURSE_ENROLLMENT_REFUND_FAILED_CODES = [
35543
36630
  ];
35544
36631
 
35545
36632
  // ../api/src/bookingVerticals.ts
35546
- import { z as z64 } from "zod";
36633
+ import { z as z66 } from "zod";
35547
36634
  var VERTICAL_IDS = [
35548
36635
  "yoga_wellness",
35549
36636
  "fitness_pt",
@@ -35708,39 +36795,39 @@ function getSiteVerticalConfigIssues(rawConfig, config) {
35708
36795
  }
35709
36796
  return [...issues];
35710
36797
  }
35711
- var VerticalIdSchema = z64.string().trim().transform((value, ctx) => {
36798
+ var VerticalIdSchema = z66.string().trim().transform((value, ctx) => {
35712
36799
  const parsed = parseVerticalId(value);
35713
36800
  if (!parsed) {
35714
36801
  ctx.addIssue({
35715
- code: z64.ZodIssueCode.custom,
36802
+ code: z66.ZodIssueCode.custom,
35716
36803
  message: "Unknown booking vertical"
35717
36804
  });
35718
- return z64.NEVER;
36805
+ return z66.NEVER;
35719
36806
  }
35720
36807
  return parsed;
35721
36808
  });
35722
- var VerticalPresetIdSchema = z64.string().trim().transform((value, ctx) => {
36809
+ var VerticalPresetIdSchema = z66.string().trim().transform((value, ctx) => {
35723
36810
  const parsed = parseVerticalPresetId(value);
35724
36811
  if (!parsed) {
35725
36812
  ctx.addIssue({
35726
- code: z64.ZodIssueCode.custom,
36813
+ code: z66.ZodIssueCode.custom,
35727
36814
  message: "Unknown booking preset"
35728
36815
  });
35729
- return z64.NEVER;
36816
+ return z66.NEVER;
35730
36817
  }
35731
36818
  return parsed;
35732
36819
  });
35733
- var BookingVerticalConfigSchema = z64.object({
36820
+ var BookingVerticalConfigSchema = z66.object({
35734
36821
  verticalId: VerticalIdSchema.nullable(),
35735
- selectedPresetIds: z64.array(VerticalPresetIdSchema).max(20)
36822
+ selectedPresetIds: z66.array(VerticalPresetIdSchema).max(20)
35736
36823
  }).transform((value, ctx) => {
35737
36824
  const resolved = resolveSiteVerticalBookingConfig(value);
35738
36825
  if (resolved.kind === "invalid") {
35739
36826
  ctx.addIssue({
35740
- code: z64.ZodIssueCode.custom,
36827
+ code: z66.ZodIssueCode.custom,
35741
36828
  message: `Invalid booking vertical config: ${resolved.issues.join(", ")}`
35742
36829
  });
35743
- return z64.NEVER;
36830
+ return z66.NEVER;
35744
36831
  }
35745
36832
  return resolved.config;
35746
36833
  });
@@ -35762,56 +36849,56 @@ function preset(id, verticalId, canonicalBehaviour, label, pluralLabel, descript
35762
36849
  }
35763
36850
 
35764
36851
  // ../api/src/utils/isRecord.ts
35765
- function isRecord3(value) {
36852
+ function isRecord4(value) {
35766
36853
  return typeof value === "object" && value !== null && !Array.isArray(value);
35767
36854
  }
35768
36855
 
35769
36856
  // ../api/src/appointmentSetup.ts
35770
- import { z as z65 } from "zod";
36857
+ import { z as z67 } from "zod";
35771
36858
  var APPOINTMENT_SETUP_MAX_MINUTES = 1440;
35772
- var appointmentSetupRefSchema = z65.discriminatedUnion("kind", [
35773
- z65.object({ kind: z65.literal("existing"), id: z65.string().min(1) }),
35774
- z65.object({ kind: z65.literal("new"), draftId: z65.string().min(1) })
36859
+ var appointmentSetupRefSchema = z67.discriminatedUnion("kind", [
36860
+ z67.object({ kind: z67.literal("existing"), id: z67.string().min(1) }),
36861
+ z67.object({ kind: z67.literal("new"), draftId: z67.string().min(1) })
35775
36862
  ]);
35776
- var appointmentSetupVenueChoiceSchema = z65.discriminatedUnion("kind", [
35777
- z65.object({ kind: z65.literal("none") }),
35778
- z65.object({ kind: z65.literal("existing"), venueId: z65.string().min(1) }),
35779
- z65.object({
35780
- kind: z65.literal("create"),
35781
- draftId: z65.string().min(1),
35782
- title: z65.string().trim().min(1),
35783
- description: z65.string().nullable(),
35784
- timezone: z65.string().trim().min(1).nullable(),
35785
- addressJson: z65.record(z65.string(), z65.unknown()),
35786
- locationJson: z65.object({ lat: z65.number(), lng: z65.number() }).nullable()
36863
+ var appointmentSetupVenueChoiceSchema = z67.discriminatedUnion("kind", [
36864
+ z67.object({ kind: z67.literal("none") }),
36865
+ z67.object({ kind: z67.literal("existing"), venueId: z67.string().min(1) }),
36866
+ z67.object({
36867
+ kind: z67.literal("create"),
36868
+ draftId: z67.string().min(1),
36869
+ title: z67.string().trim().min(1),
36870
+ description: z67.string().nullable(),
36871
+ timezone: z67.string().trim().min(1).nullable(),
36872
+ addressJson: z67.record(z67.string(), z67.unknown()),
36873
+ locationJson: z67.object({ lat: z67.number(), lng: z67.number() }).nullable()
35787
36874
  })
35788
36875
  ]);
35789
- var appointmentSetupPaymentDraftSchema = z65.object({
35790
- priceType: z65.union([z65.literal("free"), z65.literal("paid")])
35791
- });
35792
- var appointmentSetupServiceAssignmentDraftSchema = z65.discriminatedUnion("kind", [
35793
- z65.object({ kind: z65.literal("all_practitioners") }),
35794
- z65.object({
35795
- kind: z65.literal("selected_practitioners"),
35796
- resourceRefs: z65.array(appointmentSetupRefSchema)
36876
+ var appointmentSetupPaymentDraftSchema = z67.object({
36877
+ priceType: z67.union([z67.literal("free"), z67.literal("paid")])
36878
+ });
36879
+ var appointmentSetupServiceAssignmentDraftSchema = z67.discriminatedUnion("kind", [
36880
+ z67.object({ kind: z67.literal("all_practitioners") }),
36881
+ z67.object({
36882
+ kind: z67.literal("selected_practitioners"),
36883
+ resourceRefs: z67.array(appointmentSetupRefSchema)
35797
36884
  })
35798
36885
  ]);
35799
- var appointmentSetupServiceDraftSchema = z65.object({
36886
+ var appointmentSetupServiceDraftSchema = z67.object({
35800
36887
  ref: appointmentSetupRefSchema,
35801
- title: z65.string().trim().min(1),
35802
- description: z65.string().nullable(),
35803
- durationMinutes: z65.number().int().positive().max(APPOINTMENT_SETUP_MAX_MINUTES),
35804
- prepMinutes: z65.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
35805
- cleanupMinutes: z65.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
35806
- priceAmount: z65.number().int().nonnegative().nullable(),
35807
- isActive: z65.boolean(),
35808
- locationType: z65.union([
35809
- z65.literal("virtual"),
35810
- z65.literal("in_person"),
35811
- z65.literal("hybrid")
36888
+ title: z67.string().trim().min(1),
36889
+ description: z67.string().nullable(),
36890
+ durationMinutes: z67.number().int().positive().max(APPOINTMENT_SETUP_MAX_MINUTES),
36891
+ prepMinutes: z67.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
36892
+ cleanupMinutes: z67.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
36893
+ priceAmount: z67.number().int().nonnegative().nullable(),
36894
+ isActive: z67.boolean(),
36895
+ locationType: z67.union([
36896
+ z67.literal("virtual"),
36897
+ z67.literal("in_person"),
36898
+ z67.literal("hybrid")
35812
36899
  ]),
35813
36900
  venue: appointmentSetupVenueChoiceSchema,
35814
- timezone: z65.string().trim().min(1).nullable(),
36901
+ timezone: z67.string().trim().min(1).nullable(),
35815
36902
  payment: appointmentSetupPaymentDraftSchema,
35816
36903
  assignment: appointmentSetupServiceAssignmentDraftSchema
35817
36904
  }).superRefine((service, ctx) => {
@@ -35830,49 +36917,49 @@ var appointmentSetupServiceDraftSchema = z65.object({
35830
36917
  });
35831
36918
  }
35832
36919
  });
35833
- var appointmentSetupPractitionerDraftSchema = z65.object({
36920
+ var appointmentSetupPractitionerDraftSchema = z67.object({
35834
36921
  ref: appointmentSetupRefSchema,
35835
- displayName: z65.string().trim().min(1),
35836
- bio: z65.string().nullable(),
35837
- timezone: z65.string().trim().min(1),
35838
- colorHex: z65.string().nullable()
35839
- });
35840
- var appointmentSetupWeeklyWindowDraftSchema = z65.object({
35841
- weekday: z65.number().int().min(0).max(6),
35842
- startTime: z65.string(),
35843
- endTime: z65.string()
35844
- });
35845
- var appointmentSetupStartTimePolicyDraftSchema = z65.discriminatedUnion("kind", [
35846
- z65.object({ kind: z65.literal("automatic_spacing") }),
35847
- z65.object({
35848
- kind: z65.literal("regular_interval"),
35849
- intervalMinutes: z65.union([
35850
- z65.literal(10),
35851
- z65.literal(15),
35852
- z65.literal(20),
35853
- z65.literal(30),
35854
- z65.literal(45),
35855
- z65.literal(60)
36922
+ displayName: z67.string().trim().min(1),
36923
+ bio: z67.string().nullable(),
36924
+ timezone: z67.string().trim().min(1),
36925
+ colorHex: z67.string().nullable()
36926
+ });
36927
+ var appointmentSetupWeeklyWindowDraftSchema = z67.object({
36928
+ weekday: z67.number().int().min(0).max(6),
36929
+ startTime: z67.string(),
36930
+ endTime: z67.string()
36931
+ });
36932
+ var appointmentSetupStartTimePolicyDraftSchema = z67.discriminatedUnion("kind", [
36933
+ z67.object({ kind: z67.literal("automatic_spacing") }),
36934
+ z67.object({
36935
+ kind: z67.literal("regular_interval"),
36936
+ intervalMinutes: z67.union([
36937
+ z67.literal(10),
36938
+ z67.literal(15),
36939
+ z67.literal(20),
36940
+ z67.literal(30),
36941
+ z67.literal(45),
36942
+ z67.literal(60)
35856
36943
  ])
35857
36944
  })
35858
36945
  ]);
35859
- var appointmentSetupAvailabilityDraftSchema = z65.object({
35860
- kind: z65.literal("weekly_windows"),
36946
+ var appointmentSetupAvailabilityDraftSchema = z67.object({
36947
+ kind: z67.literal("weekly_windows"),
35861
36948
  resourceRef: appointmentSetupRefSchema,
35862
36949
  serviceRef: appointmentSetupRefSchema.nullable(),
35863
- windows: z65.array(appointmentSetupWeeklyWindowDraftSchema),
36950
+ windows: z67.array(appointmentSetupWeeklyWindowDraftSchema),
35864
36951
  startTimePolicy: appointmentSetupStartTimePolicyDraftSchema.optional()
35865
36952
  });
35866
36953
  var APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX = 28 * 24 * 60;
35867
36954
  var APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX = 10 * 365 * 24 * 60;
35868
- var appointmentSetupBookingNoticeSchema = z65.object({
35869
- minLeadMinutes: z65.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX),
35870
- maxBookingNoticeMinutes: z65.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX)
35871
- });
35872
- var applyAppointmentSetupRequestSchema = z65.object({
35873
- services: z65.array(appointmentSetupServiceDraftSchema),
35874
- practitioners: z65.array(appointmentSetupPractitionerDraftSchema),
35875
- availability: z65.array(appointmentSetupAvailabilityDraftSchema),
36955
+ var appointmentSetupBookingNoticeSchema = z67.object({
36956
+ minLeadMinutes: z67.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX),
36957
+ maxBookingNoticeMinutes: z67.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX)
36958
+ });
36959
+ var applyAppointmentSetupRequestSchema = z67.object({
36960
+ services: z67.array(appointmentSetupServiceDraftSchema),
36961
+ practitioners: z67.array(appointmentSetupPractitionerDraftSchema),
36962
+ availability: z67.array(appointmentSetupAvailabilityDraftSchema),
35876
36963
  bookingNotice: appointmentSetupBookingNoticeSchema
35877
36964
  });
35878
36965
 
@@ -35905,24 +36992,24 @@ var STAFF_CANCELLATION_CONTEXT_CATEGORIES = [
35905
36992
  ];
35906
36993
 
35907
36994
  // ../api/src/siteBanner.ts
35908
- import { z as z66 } from "zod";
36995
+ import { z as z68 } from "zod";
35909
36996
  var SITE_BANNER_SCOPE_VALUES = ["homepage", "all-pages"];
35910
36997
  var SITE_BANNER_TONE_VALUES = ["announcement", "promotion", "notice", "warning"];
35911
36998
  var SITE_BANNER_MAX_TEXT_LENGTH = 320;
35912
36999
  var SITE_BANNER_MAX_PARAGRAPHS = 2;
35913
- var siteBannerScopeSchema = z66.enum(SITE_BANNER_SCOPE_VALUES);
35914
- var siteBannerToneSchema = z66.enum(SITE_BANNER_TONE_VALUES);
35915
- var siteBannerBodySchema = z66.unknown().transform(unwrapRichTextValue);
35916
- var siteBannerCtaSchema = z66.object({
35917
- label: z66.string().trim().min(1),
37000
+ var siteBannerScopeSchema = z68.enum(SITE_BANNER_SCOPE_VALUES);
37001
+ var siteBannerToneSchema = z68.enum(SITE_BANNER_TONE_VALUES);
37002
+ var siteBannerBodySchema = z68.unknown().transform(unwrapRichTextValue);
37003
+ var siteBannerCtaSchema = z68.object({
37004
+ label: z68.string().trim().min(1),
35918
37005
  link: linkPayloadSchema
35919
37006
  });
35920
- var siteBannerSettingsSchema = z66.discriminatedUnion("enabled", [
35921
- z66.object({
35922
- enabled: z66.literal(false)
37007
+ var siteBannerSettingsSchema = z68.discriminatedUnion("enabled", [
37008
+ z68.object({
37009
+ enabled: z68.literal(false)
35923
37010
  }),
35924
- z66.object({
35925
- enabled: z66.literal(true),
37011
+ z68.object({
37012
+ enabled: z68.literal(true),
35926
37013
  scope: siteBannerScopeSchema,
35927
37014
  tone: siteBannerToneSchema,
35928
37015
  body: siteBannerBodySchema,
@@ -35936,7 +37023,7 @@ var siteBannerSettingsInputSchema = siteBannerSettingsSchema.superRefine((value,
35936
37023
  const analysis = analyzeSiteBannerBody(value.body);
35937
37024
  for (const issue of analysis.issues) {
35938
37025
  ctx.addIssue({
35939
- code: z66.ZodIssueCode.custom,
37026
+ code: z68.ZodIssueCode.custom,
35940
37027
  path: ["body"],
35941
37028
  message: siteBannerBodyIssueMessage(issue)
35942
37029
  });
@@ -36069,7 +37156,7 @@ function sanitizeMarks(marks) {
36069
37156
  if (mark.type === "bold" || mark.type === "strong" || mark.type === "italic" || mark.type === "em") {
36070
37157
  return [{ type: mark.type }];
36071
37158
  }
36072
- if (mark.type === "link" && isRecord3(mark.attrs) && typeof mark.attrs.href === "string") {
37159
+ if (mark.type === "link" && isRecord4(mark.attrs) && typeof mark.attrs.href === "string") {
36073
37160
  const attrs = { href: mark.attrs.href };
36074
37161
  if (typeof mark.attrs.target === "string" && mark.attrs.target.trim().length > 0) {
36075
37162
  attrs.target = mark.attrs.target;
@@ -36084,10 +37171,10 @@ function sanitizeMarks(marks) {
36084
37171
  return sanitized.length > 0 ? sanitized : void 0;
36085
37172
  }
36086
37173
  function unwrapRichTextValue(value) {
36087
- if (isRecord3(value) && isRecord3(value.doc)) {
37174
+ if (isRecord4(value) && isRecord4(value.doc)) {
36088
37175
  return unwrapRichTextValue(value.doc);
36089
37176
  }
36090
- if (isRecord3(value) && value.type === "doc") {
37177
+ if (isRecord4(value) && value.type === "doc") {
36091
37178
  return {
36092
37179
  type: "doc",
36093
37180
  content: Array.isArray(value.content) ? value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) : []
@@ -36096,7 +37183,7 @@ function unwrapRichTextValue(value) {
36096
37183
  return EMPTY_SITE_BANNER_BODY;
36097
37184
  }
36098
37185
  function isTipTapNodeLike(value) {
36099
- return isRecord3(value) && typeof value.type === "string";
37186
+ return isRecord4(value) && typeof value.type === "string";
36100
37187
  }
36101
37188
  function coerceTipTapNode(value) {
36102
37189
  return {
@@ -36104,9 +37191,9 @@ function coerceTipTapNode(value) {
36104
37191
  ...Array.isArray(value.content) ? { content: value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) } : {},
36105
37192
  ...typeof value.text === "string" ? { text: value.text } : {},
36106
37193
  ...Array.isArray(value.marks) ? {
36107
- marks: value.marks.filter((mark) => isRecord3(mark) && typeof mark.type === "string").map((mark) => ({
37194
+ marks: value.marks.filter((mark) => isRecord4(mark) && typeof mark.type === "string").map((mark) => ({
36108
37195
  type: mark.type,
36109
- ...isRecord3(mark.attrs) ? { attrs: mark.attrs } : {}
37196
+ ...isRecord4(mark.attrs) ? { attrs: mark.attrs } : {}
36110
37197
  }))
36111
37198
  } : {}
36112
37199
  };
@@ -36198,71 +37285,71 @@ function unsafeAsNavigationMenuIdentifier(identifier) {
36198
37285
  var MAIN_NAVIGATION_MENU_IDENTIFIER = unsafeAsNavigationMenuIdentifier("main");
36199
37286
 
36200
37287
  // ../api/src/aiPlayground.ts
36201
- import { z as z67 } from "zod";
36202
- var Rfc6902PatchOp = z67.discriminatedUnion("op", [
37288
+ import { z as z69 } from "zod";
37289
+ var Rfc6902PatchOp = z69.discriminatedUnion("op", [
36203
37290
  // Standard RFC-6902 operations
36204
- z67.object({
36205
- op: z67.literal("add"),
36206
- path: z67.string(),
36207
- value: z67.unknown()
37291
+ z69.object({
37292
+ op: z69.literal("add"),
37293
+ path: z69.string(),
37294
+ value: z69.unknown()
36208
37295
  }),
36209
- z67.object({
36210
- op: z67.literal("remove"),
36211
- path: z67.string()
37296
+ z69.object({
37297
+ op: z69.literal("remove"),
37298
+ path: z69.string()
36212
37299
  }),
36213
- z67.object({
36214
- op: z67.literal("replace"),
36215
- path: z67.string(),
36216
- value: z67.unknown()
37300
+ z69.object({
37301
+ op: z69.literal("replace"),
37302
+ path: z69.string(),
37303
+ value: z69.unknown()
36217
37304
  }),
36218
- z67.object({
36219
- op: z67.literal("move"),
36220
- from: z67.string(),
36221
- path: z67.string()
37305
+ z69.object({
37306
+ op: z69.literal("move"),
37307
+ from: z69.string(),
37308
+ path: z69.string()
36222
37309
  }),
36223
- z67.object({
36224
- op: z67.literal("copy"),
36225
- from: z67.string(),
36226
- path: z67.string()
37310
+ z69.object({
37311
+ op: z69.literal("copy"),
37312
+ from: z69.string(),
37313
+ path: z69.string()
36227
37314
  }),
36228
37315
  // Block-level operations (Phase 2)
36229
- z67.object({
36230
- op: z67.literal("add_block"),
36231
- blockKind: z67.string(),
36232
- afterBlockId: z67.string().nullable(),
36233
- content: z67.record(z67.string(), z67.unknown()),
36234
- rationale: z67.string()
37316
+ z69.object({
37317
+ op: z69.literal("add_block"),
37318
+ blockKind: z69.string(),
37319
+ afterBlockId: z69.string().nullable(),
37320
+ content: z69.record(z69.string(), z69.unknown()),
37321
+ rationale: z69.string()
36235
37322
  }),
36236
- z67.object({
36237
- op: z67.literal("delete_block"),
36238
- blockId: z67.string(),
36239
- rationale: z67.string()
37323
+ z69.object({
37324
+ op: z69.literal("delete_block"),
37325
+ blockId: z69.string(),
37326
+ rationale: z69.string()
36240
37327
  }),
36241
- z67.object({
36242
- op: z67.literal("reorder_block"),
36243
- blockId: z67.string(),
36244
- afterBlockId: z67.string().nullable(),
36245
- rationale: z67.string()
37328
+ z69.object({
37329
+ op: z69.literal("reorder_block"),
37330
+ blockId: z69.string(),
37331
+ afterBlockId: z69.string().nullable(),
37332
+ rationale: z69.string()
36246
37333
  })
36247
37334
  ]);
36248
- var PlaygroundProposeRequest = z67.object({
36249
- request: z67.string().min(1).max(2e3)
37335
+ var PlaygroundProposeRequest = z69.object({
37336
+ request: z69.string().min(1).max(2e3)
36250
37337
  });
36251
- var MultiPagePatchEnvelope = z67.object({
36252
- pageId: z67.string(),
36253
- blockId: z67.string().optional(),
37338
+ var MultiPagePatchEnvelope = z69.object({
37339
+ pageId: z69.string(),
37340
+ blockId: z69.string().optional(),
36254
37341
  // Not present for page-level ops
36255
- blockKind: z67.string().optional(),
36256
- blockPurpose: z67.string().optional().nullable(),
36257
- ops: z67.array(Rfc6902PatchOp),
36258
- rationale: z67.string(),
36259
- currentContent: z67.record(z67.string(), z67.unknown()).optional()
36260
- });
36261
- var MultiPageUpdateResponse = z67.object({
36262
- patches: z67.array(MultiPagePatchEnvelope),
36263
- assistantMessage: z67.string(),
36264
- pagesModified: z67.number(),
36265
- toolCallsUsed: z67.number()
37342
+ blockKind: z69.string().optional(),
37343
+ blockPurpose: z69.string().optional().nullable(),
37344
+ ops: z69.array(Rfc6902PatchOp),
37345
+ rationale: z69.string(),
37346
+ currentContent: z69.record(z69.string(), z69.unknown()).optional()
37347
+ });
37348
+ var MultiPageUpdateResponse = z69.object({
37349
+ patches: z69.array(MultiPagePatchEnvelope),
37350
+ assistantMessage: z69.string(),
37351
+ pagesModified: z69.number(),
37352
+ toolCallsUsed: z69.number()
36266
37353
  });
36267
37354
 
36268
37355
  // src/data/prefetchBlockData.ts