@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
@@ -6363,6 +6363,11 @@ function toLocationCoordinates(value) {
6363
6363
  };
6364
6364
  }
6365
6365
 
6366
+ // ../core/src/assert-never.ts
6367
+ function assertNever(value, message = "Unexpected variant") {
6368
+ throw new Error(`${message}: ${String(value)}`);
6369
+ }
6370
+
6366
6371
  // ../api/src/accessAdmin.ts
6367
6372
  import { z } from "zod";
6368
6373
  var managedDomainAddOnPricingSnapshotSchema = z.object({
@@ -6467,7 +6472,7 @@ var navigationLinkInputSchema = z2.discriminatedUnion(
6467
6472
  );
6468
6473
 
6469
6474
  // ../api/src/sdkConfig/contracts.ts
6470
- import { z as z62 } from "zod";
6475
+ import { z as z64 } from "zod";
6471
6476
 
6472
6477
  // ../blocks/src/system/manifest/augmentManifest.ts
6473
6478
  function augmentManifest(manifest) {
@@ -7474,25 +7479,10 @@ function featuresFromHex(hex) {
7474
7479
  return { r, g, b, h, s, l, v, Y, chroma, okL, okC, okH, hex };
7475
7480
  }
7476
7481
 
7477
- // ../theme-core/src/site-styles/appearancePresetResolution.ts
7478
- function assertValidOptionGroups(preset2) {
7479
- preset2.optionGroups?.forEach((group) => {
7480
- const selectedOption = group.options.find(
7481
- (option) => option.id === group.selectedOptionId
7482
- );
7483
- if (!selectedOption) {
7484
- throw new Error(
7485
- `Appearance preset "${preset2.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
7486
- );
7487
- }
7488
- });
7489
- }
7490
- function defineBlockAppearancePreset(preset2) {
7491
- assertValidOptionGroups(preset2);
7492
- return preset2;
7493
- }
7494
-
7495
7482
  // ../theme-core/src/site-styles/types.ts
7483
+ function defineExactCatalog() {
7484
+ return (entries) => entries;
7485
+ }
7496
7486
  function asDesignBlockId(value) {
7497
7487
  return brandNonEmptyString(value, "DesignBlockId");
7498
7488
  }
@@ -7551,7 +7541,7 @@ function makeBoundaryId(previousBlockId, nextBlockId) {
7551
7541
  const next = encodeURIComponent(nextBlockId);
7552
7542
  return asDesignBoundaryId(`boundary:${previous}:${next}`);
7553
7543
  }
7554
- function assertNever(value, message = "Unhandled Theme V2 variant") {
7544
+ function assertNever2(value, message = "Unhandled Theme V2 variant") {
7555
7545
  throw new Error(`${message}: ${String(value)}`);
7556
7546
  }
7557
7547
  function brandNonEmptyString(value, label) {
@@ -7641,11 +7631,31 @@ function defineBlockDesignCapability(capability) {
7641
7631
  tileTreatments: capability.tileTreatments ?? ["default"],
7642
7632
  eventListTreatments: capability.eventListTreatments ?? ["plain"],
7643
7633
  eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"],
7644
- ...capability.accordionIconSets ? { accordionIconSets: capability.accordionIconSets } : {},
7645
- ...capability.headingDecorations ? { headingDecorations: capability.headingDecorations } : {}
7634
+ headingDecorationCapability: capability.headingDecorationCapability ?? {
7635
+ kind: "unsupported"
7636
+ },
7637
+ ...capability.accordionIconSets ? { accordionIconSets: capability.accordionIconSets } : {}
7646
7638
  };
7647
7639
  }
7648
7640
 
7641
+ // ../theme-core/src/site-styles/appearancePresetResolution.ts
7642
+ function assertValidOptionGroups(preset2) {
7643
+ preset2.optionGroups?.forEach((group) => {
7644
+ const selectedOption = group.options.find(
7645
+ (option) => option.id === group.selectedOptionId
7646
+ );
7647
+ if (!selectedOption) {
7648
+ throw new Error(
7649
+ `Appearance preset "${preset2.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
7650
+ );
7651
+ }
7652
+ });
7653
+ }
7654
+ function defineBlockAppearancePreset(preset2) {
7655
+ assertValidOptionGroups(preset2);
7656
+ return preset2;
7657
+ }
7658
+
7649
7659
  // ../theme-core/src/site-styles/blockAppearancePresets.ts
7650
7660
  var blockAppearancePresets = [
7651
7661
  defineBlockAppearancePreset({
@@ -8007,8 +8017,25 @@ var blockAppearancePresets = [
8007
8017
  kind: "block-design",
8008
8018
  id: "intro-organic-statement",
8009
8019
  target: "intro",
8010
- label: "Organic intro statement",
8020
+ label: "Intro statement",
8021
+ blockKinds: ["block.intro"],
8022
+ design: {
8023
+ sectionSurface: "base",
8024
+ contentFrame: plainFrame,
8025
+ itemSurface: "none",
8026
+ transitionAfter: "soft-fade-short",
8027
+ emphasis: "high"
8028
+ }
8029
+ }),
8030
+ defineBlockAppearancePreset({
8031
+ kind: "block-design",
8032
+ id: "intro-editorial-statement",
8033
+ target: "intro",
8034
+ label: "Editorial intro statement",
8011
8035
  blockKinds: ["block.intro"],
8036
+ constraints: {
8037
+ layoutVariantKeys: ["centered-copy", "statement-copy"]
8038
+ },
8012
8039
  design: {
8013
8040
  sectionSurface: "base",
8014
8041
  contentFrame: plainFrame,
@@ -8031,12 +8058,7 @@ var blockAppearancePresets = [
8031
8058
  contentFrame: plainFrame,
8032
8059
  itemSurface: "none",
8033
8060
  transitionAfter: "soft-fade-short",
8034
- emphasis: "medium",
8035
- headingDecoration: {
8036
- family: "organic-squiggle",
8037
- placement: "after-heading",
8038
- colorToken: "primary"
8039
- }
8061
+ emphasis: "medium"
8040
8062
  }
8041
8063
  }),
8042
8064
  defineBlockAppearancePreset({
@@ -8053,6 +8075,48 @@ var blockAppearancePresets = [
8053
8075
  emphasis: "medium"
8054
8076
  }
8055
8077
  }),
8078
+ defineBlockAppearancePreset({
8079
+ kind: "block-design",
8080
+ id: "offerings-preview-default-cards",
8081
+ target: "offerings",
8082
+ label: "Default offering cards",
8083
+ blockKinds: ["block.offerings-preview"],
8084
+ design: {
8085
+ sectionSurface: "base",
8086
+ contentFrame: plainFrame,
8087
+ itemSurface: "default",
8088
+ transitionAfter: "soft-fade-short",
8089
+ emphasis: "medium"
8090
+ }
8091
+ }),
8092
+ defineBlockAppearancePreset({
8093
+ kind: "block-design",
8094
+ id: "offerings-preview-secondary-cards",
8095
+ target: "offerings",
8096
+ label: "Secondary offering cards",
8097
+ blockKinds: ["block.offerings-preview"],
8098
+ design: {
8099
+ sectionSurface: "muted-band",
8100
+ contentFrame: plainFrame,
8101
+ itemSurface: "inset",
8102
+ transitionAfter: "soft-fade-short",
8103
+ emphasis: "medium"
8104
+ }
8105
+ }),
8106
+ defineBlockAppearancePreset({
8107
+ kind: "block-design",
8108
+ id: "offerings-preview-non-carded",
8109
+ target: "offerings",
8110
+ label: "Non-carded offerings",
8111
+ blockKinds: ["block.offerings-preview"],
8112
+ design: {
8113
+ sectionSurface: "muted-band",
8114
+ contentFrame: plainFrame,
8115
+ itemSurface: "editorial",
8116
+ transitionAfter: "soft-fade-short",
8117
+ emphasis: "medium"
8118
+ }
8119
+ }),
8056
8120
  defineBlockAppearancePreset({
8057
8121
  kind: "block-design",
8058
8122
  id: "feature-cards-raised-rule",
@@ -8067,6 +8131,20 @@ var blockAppearancePresets = [
8067
8131
  emphasis: "high"
8068
8132
  }
8069
8133
  }),
8134
+ defineBlockAppearancePreset({
8135
+ kind: "block-design",
8136
+ id: "feature-cards-bold-colors",
8137
+ target: "feature-cards",
8138
+ label: "Bold colour-blocked cards",
8139
+ blockKinds: ["block.feature-cards"],
8140
+ design: {
8141
+ sectionSurface: "base",
8142
+ contentFrame: plainFrame,
8143
+ itemSurface: "color-blocked",
8144
+ transitionAfter: "none",
8145
+ emphasis: "high"
8146
+ }
8147
+ }),
8070
8148
  defineBlockAppearancePreset({
8071
8149
  kind: "block-design",
8072
8150
  id: "feature-cards-editorial-columns",
@@ -8320,7 +8398,7 @@ var blockAppearancePresets = [
8320
8398
  kind: "block-design",
8321
8399
  id: "contact-form-panel",
8322
8400
  target: "contact-form",
8323
- label: "Contact form panel",
8401
+ label: "Raised form panel",
8324
8402
  blockKinds: ["block.form"],
8325
8403
  design: {
8326
8404
  sectionSurface: "muted-band",
@@ -8332,30 +8410,16 @@ var blockAppearancePresets = [
8332
8410
  }),
8333
8411
  defineBlockAppearancePreset({
8334
8412
  kind: "block-design",
8335
- id: "contact-form-dark-card",
8336
- target: "contact-form",
8337
- label: "Dark form card",
8338
- blockKinds: ["block.form"],
8339
- design: {
8340
- sectionSurface: "accent-band",
8341
- contentFrame: panelFrame("raised"),
8342
- itemSurface: "none",
8343
- transitionAfter: "soft-fade-short",
8344
- emphasis: "high"
8345
- }
8346
- }),
8347
- defineBlockAppearancePreset({
8348
- kind: "block-design",
8349
- id: "contact-form-brand-depth-card",
8413
+ id: "contact-form-open",
8350
8414
  target: "contact-form",
8351
- label: "Brand-depth form card",
8415
+ label: "Open form",
8352
8416
  blockKinds: ["block.form"],
8353
8417
  design: {
8354
- sectionSurface: "brand-depth-band",
8355
- contentFrame: panelFrame("raised"),
8418
+ sectionSurface: "muted-band",
8419
+ contentFrame: plainFrame,
8356
8420
  itemSurface: "none",
8357
8421
  transitionAfter: "none",
8358
- emphasis: "high"
8422
+ emphasis: "medium"
8359
8423
  }
8360
8424
  }),
8361
8425
  defineBlockAppearancePreset({
@@ -8433,7 +8497,130 @@ function assertUniqueLayoutProfileKeys(profiles) {
8433
8497
 
8434
8498
  // ../theme-core/src/site-styles/pageDesignIntent.ts
8435
8499
  import { z as z5 } from "zod";
8436
- var pageDesignIntentSchemaVersion = 1;
8500
+
8501
+ // ../theme-core/src/site-styles/sectionTransitions.ts
8502
+ var noneBoundaryOption = {
8503
+ id: asBoundaryOptionId("break:none"),
8504
+ label: "None",
8505
+ transitionAfter: "none",
8506
+ treatment: { kind: "none" }
8507
+ };
8508
+ var softBoundaryOption = {
8509
+ id: asBoundaryOptionId("break:soft"),
8510
+ label: "Soft",
8511
+ transitionAfter: "soft-fade-short",
8512
+ treatment: { kind: "soft-fade", height: "medium", curve: "soft" }
8513
+ };
8514
+ var spaciousBoundaryOption = {
8515
+ id: asBoundaryOptionId("break:spacious"),
8516
+ label: "Spacious",
8517
+ transitionAfter: "soft-fade-long",
8518
+ treatment: { kind: "soft-fade", height: "large", curve: "spacious" }
8519
+ };
8520
+ var expansiveBoundaryOption = {
8521
+ id: asBoundaryOptionId("break:expansive"),
8522
+ label: "Expansive",
8523
+ transitionAfter: "soft-fade-expansive",
8524
+ treatment: { kind: "soft-fade", height: "expansive", curve: "expansive" }
8525
+ };
8526
+ var waveBoundaryOption = {
8527
+ id: asBoundaryOptionId("break:wave"),
8528
+ label: "Classic wave",
8529
+ transitionAfter: "wave-edge",
8530
+ treatment: {
8531
+ kind: "wave-edge",
8532
+ height: "medium",
8533
+ amplitude: "balanced",
8534
+ rhythm: "double",
8535
+ symmetry: "asymmetrical"
8536
+ }
8537
+ };
8538
+ var balancedWaveBoundaryOption = {
8539
+ id: asBoundaryOptionId("break:wave-balanced"),
8540
+ label: "Balanced wave",
8541
+ transitionAfter: "wave-edge-balanced",
8542
+ treatment: {
8543
+ kind: "wave-edge",
8544
+ height: "medium",
8545
+ amplitude: "balanced",
8546
+ rhythm: "double",
8547
+ symmetry: "symmetrical"
8548
+ }
8549
+ };
8550
+ var gentleWaveBoundaryOption = {
8551
+ id: asBoundaryOptionId("break:wave-gentle"),
8552
+ label: "Gentle wave",
8553
+ transitionAfter: "wave-edge-gentle",
8554
+ treatment: {
8555
+ kind: "wave-edge",
8556
+ height: "compact",
8557
+ amplitude: "subtle",
8558
+ rhythm: "single",
8559
+ symmetry: "symmetrical"
8560
+ }
8561
+ };
8562
+ var boldWaveBoundaryOption = {
8563
+ id: asBoundaryOptionId("break:wave-bold"),
8564
+ label: "Bold wave",
8565
+ transitionAfter: "wave-edge-bold",
8566
+ treatment: {
8567
+ kind: "wave-edge",
8568
+ height: "large",
8569
+ amplitude: "bold",
8570
+ rhythm: "double",
8571
+ symmetry: "symmetrical"
8572
+ }
8573
+ };
8574
+ var driftWaveBoundaryOption = {
8575
+ id: asBoundaryOptionId("break:wave-drift"),
8576
+ label: "Drift wave",
8577
+ transitionAfter: "wave-edge-drift",
8578
+ treatment: {
8579
+ kind: "wave-edge",
8580
+ height: "medium",
8581
+ amplitude: "balanced",
8582
+ rhythm: "double",
8583
+ symmetry: "drift"
8584
+ }
8585
+ };
8586
+ var subtleAngleBoundaryOption = {
8587
+ id: asBoundaryOptionId("break:angle-subtle"),
8588
+ label: "Subtle angle",
8589
+ transitionAfter: "angle-edge-subtle",
8590
+ treatment: {
8591
+ kind: "angle-edge",
8592
+ height: "compact",
8593
+ slope: "subtle",
8594
+ direction: "forward"
8595
+ }
8596
+ };
8597
+ var balancedAngleBoundaryOption = {
8598
+ id: asBoundaryOptionId("break:angle-balanced"),
8599
+ label: "Balanced angle",
8600
+ transitionAfter: "angle-edge",
8601
+ treatment: {
8602
+ kind: "angle-edge",
8603
+ height: "medium",
8604
+ slope: "balanced",
8605
+ direction: "forward"
8606
+ }
8607
+ };
8608
+ var steepAngleBoundaryOption = {
8609
+ id: asBoundaryOptionId("break:angle-steep"),
8610
+ label: "Steep angle",
8611
+ transitionAfter: "angle-edge-steep",
8612
+ treatment: {
8613
+ kind: "angle-edge",
8614
+ height: "large",
8615
+ slope: "steep",
8616
+ direction: "forward"
8617
+ }
8618
+ };
8619
+
8620
+ // ../theme-core/src/site-styles/pageDesignIntent.ts
8621
+ var pageDesignIntentSchemaVersion = 2;
8622
+ var legacyPageDesignIntentSchemaVersion = 1;
8623
+ var unknownBoundaryOptionId = asBoundaryOptionId("break:unknown");
8437
8624
  var pageDesignUserPinnedAppearanceChoiceSchema = z5.object({
8438
8625
  kind: z5.literal("user-pinned"),
8439
8626
  value: z5.string().min(1).transform(asAppearancePresetId)
@@ -8442,17 +8629,84 @@ var pageDesignUserPinnedBoundaryChoiceSchema = z5.object({
8442
8629
  kind: z5.literal("user-pinned"),
8443
8630
  value: z5.string().min(1).transform(asBoundaryOptionId)
8444
8631
  }).strict();
8632
+ var pageDesignBoundaryTreatmentSchema = z5.discriminatedUnion("kind", [
8633
+ z5.object({ kind: z5.literal("none") }).strict(),
8634
+ z5.object({
8635
+ kind: z5.literal("soft-fade"),
8636
+ height: z5.enum(["compact", "medium", "large", "expansive"]),
8637
+ curve: z5.enum(["soft", "spacious", "expansive"])
8638
+ }).strict(),
8639
+ z5.object({
8640
+ kind: z5.literal("wave-edge"),
8641
+ height: z5.enum(["compact", "medium", "large"]),
8642
+ amplitude: z5.enum(["subtle", "balanced", "bold"]),
8643
+ rhythm: z5.enum(["single", "double"]),
8644
+ symmetry: z5.enum(["symmetrical", "asymmetrical", "drift"])
8645
+ }).strict(),
8646
+ z5.object({
8647
+ kind: z5.literal("angle-edge"),
8648
+ height: z5.enum(["compact", "medium", "large"]),
8649
+ slope: z5.enum(["subtle", "balanced", "steep"]),
8650
+ direction: z5.enum(["forward", "reverse"])
8651
+ }).strict(),
8652
+ z5.object({
8653
+ kind: z5.literal("legacy-unsupported"),
8654
+ boundaryOptionId: z5.string().min(1).transform(asBoundaryOptionId)
8655
+ }).strict()
8656
+ ]);
8657
+ var pageDesignUserPinnedBoundaryTreatmentChoiceSchema = z5.object({
8658
+ kind: z5.literal("user-pinned"),
8659
+ value: pageDesignBoundaryTreatmentSchema
8660
+ }).strict();
8445
8661
  var pageDesignBlockLookPinSchema = z5.object({
8446
8662
  blockId: z5.string().min(1).transform(asDesignBlockId),
8447
8663
  blockKind: z5.string().min(1),
8448
8664
  choice: pageDesignUserPinnedAppearanceChoiceSchema
8449
8665
  }).strict();
8450
8666
  var pageDesignBoundaryPinSchema = z5.object({
8667
+ boundaryId: z5.string().min(1).transform(asDesignBoundaryId),
8668
+ previousBlockId: z5.string().min(1).transform(asDesignBlockId),
8669
+ nextBlockId: z5.string().min(1).transform(asDesignBlockId),
8670
+ choice: pageDesignUserPinnedBoundaryTreatmentChoiceSchema
8671
+ }).strict().superRefine(validateBoundaryPinIdMatchesBlocks);
8672
+ var legacyPageDesignBoundaryPinSchema = z5.object({
8451
8673
  boundaryId: z5.string().min(1).transform(asDesignBoundaryId),
8452
8674
  previousBlockId: z5.string().min(1).transform(asDesignBlockId),
8453
8675
  nextBlockId: z5.string().min(1).transform(asDesignBlockId),
8454
8676
  choice: pageDesignUserPinnedBoundaryChoiceSchema
8455
- }).strict().superRefine((pin, ctx) => {
8677
+ }).strict().superRefine(validateBoundaryPinIdMatchesBlocks);
8678
+ var pageDesignIntentV1Schema = z5.object({
8679
+ schemaVersion: z5.literal(legacyPageDesignIntentSchemaVersion),
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(legacyPageDesignBoundaryPinSchema)
8684
+ }).strict().superRefine(validateUniquePageDesignPins);
8685
+ var pageDesignIntentV2Schema = z5.object({
8686
+ schemaVersion: z5.literal(pageDesignIntentSchemaVersion),
8687
+ siteStyleId: z5.string().min(1).transform(asSiteStyleId),
8688
+ pageFlowPresetId: z5.string().min(1).transform(asPageFlowPresetId),
8689
+ blockLookPins: z5.array(pageDesignBlockLookPinSchema),
8690
+ boundaryPins: z5.array(pageDesignBoundaryPinSchema)
8691
+ }).strict().superRefine(validateUniquePageDesignPins);
8692
+ function addDuplicateStringIssues(ctx, input) {
8693
+ const seen = /* @__PURE__ */ new Set();
8694
+ const duplicates = /* @__PURE__ */ new Set();
8695
+ for (const value of input.values) {
8696
+ if (seen.has(value)) {
8697
+ duplicates.add(value);
8698
+ }
8699
+ seen.add(value);
8700
+ }
8701
+ for (const duplicate of duplicates) {
8702
+ ctx.addIssue({
8703
+ code: z5.ZodIssueCode.custom,
8704
+ path: [...input.path],
8705
+ message: `Duplicate ${input.label}: ${duplicate}.`
8706
+ });
8707
+ }
8708
+ }
8709
+ function validateBoundaryPinIdMatchesBlocks(pin, ctx) {
8456
8710
  const expectedBoundaryId = makeBoundaryId(
8457
8711
  pin.previousBlockId,
8458
8712
  pin.nextBlockId
@@ -8464,14 +8718,8 @@ var pageDesignBoundaryPinSchema = z5.object({
8464
8718
  message: `Boundary id must match previousBlockId and nextBlockId. Expected ${expectedBoundaryId}.`
8465
8719
  });
8466
8720
  }
8467
- });
8468
- var pageDesignIntentV1Schema = z5.object({
8469
- schemaVersion: z5.literal(pageDesignIntentSchemaVersion),
8470
- siteStyleId: z5.string().min(1).transform(asSiteStyleId),
8471
- pageFlowPresetId: z5.string().min(1).transform(asPageFlowPresetId),
8472
- blockLookPins: z5.array(pageDesignBlockLookPinSchema),
8473
- boundaryPins: z5.array(pageDesignBoundaryPinSchema)
8474
- }).strict().superRefine((intent, ctx) => {
8721
+ }
8722
+ function validateUniquePageDesignPins(intent, ctx) {
8475
8723
  addDuplicateStringIssues(ctx, {
8476
8724
  values: intent.blockLookPins.map((pin) => pin.blockId),
8477
8725
  path: ["blockLookPins"],
@@ -8484,23 +8732,6 @@ var pageDesignIntentV1Schema = z5.object({
8484
8732
  path: ["boundaryPins"],
8485
8733
  label: "boundary pin"
8486
8734
  });
8487
- });
8488
- function addDuplicateStringIssues(ctx, input) {
8489
- const seen = /* @__PURE__ */ new Set();
8490
- const duplicates = /* @__PURE__ */ new Set();
8491
- for (const value of input.values) {
8492
- if (seen.has(value)) {
8493
- duplicates.add(value);
8494
- }
8495
- seen.add(value);
8496
- }
8497
- for (const duplicate of duplicates) {
8498
- ctx.addIssue({
8499
- code: z5.ZodIssueCode.custom,
8500
- path: [...input.path],
8501
- message: `Duplicate ${input.label}: ${duplicate}.`
8502
- });
8503
- }
8504
8735
  }
8505
8736
  function boundaryKey(previousBlockId, nextBlockId) {
8506
8737
  return makeBoundaryId(previousBlockId, nextBlockId);
@@ -8759,7 +8990,9 @@ var buttonBorderSchema = z7.object({
8759
8990
  var variantShadowSchema = z7.object({
8760
8991
  elevation: z7.enum(["none", "low", "medium", "high"]),
8761
8992
  softness: z7.enum(["crisp", "soft", "hard"]).nullable(),
8762
- position: z7.enum(["bottom", "bottom-right"]).default("bottom")
8993
+ position: z7.enum(["bottom", "bottom-right"]).default("bottom"),
8994
+ // Optional palette token for a coloured offset shadow; omit for neutral black.
8995
+ colorToken: themeColorTokenSchema.optional()
8763
8996
  });
8764
8997
  var variantEffectsSchema = z7.object({
8765
8998
  base: z7.array(effectApplicationSchema).optional(),
@@ -9283,6 +9516,65 @@ var inkStamp = defineButtonPersonality({
9283
9516
  }
9284
9517
  });
9285
9518
 
9519
+ // ../theme-core/src/buttons/personalities/joy-stamp.ts
9520
+ var joyStamp = defineButtonPersonality({
9521
+ id: "joy-stamp",
9522
+ name: "Joy Stamp",
9523
+ description: "Pill buttons with a hard, brand-coloured offset shadow that presses in on hover.",
9524
+ tags: { tone: "bold", energy: "vibrant", motion: "expressive", era: "organic" },
9525
+ buttonSystem: {
9526
+ global: {
9527
+ cornerStyle: "pill",
9528
+ shadow: "high",
9529
+ textTransform: "none",
9530
+ // Bold display type on the buttons: use the heading font (Bricolage) at
9531
+ // 700, matching the mockup's chunky button labels.
9532
+ typography: "heading",
9533
+ fontWeight: 700,
9534
+ borderWidth: 2,
9535
+ hoverTransform: "none",
9536
+ hoverColor: "none"
9537
+ },
9538
+ sizes: {
9539
+ sm: { padding: "0.625rem 1.25rem", fontSize: "text-sm" },
9540
+ md: { padding: "0.875rem 1.75rem", fontSize: "text-base" },
9541
+ lg: { padding: "1.125rem 2.25rem", fontSize: "text-lg" },
9542
+ xl: { padding: "1.25rem 2.75rem", fontSize: "text-xl" }
9543
+ },
9544
+ variants: [
9545
+ {
9546
+ id: "primary",
9547
+ name: "Primary",
9548
+ enabled: true,
9549
+ priority: 1,
9550
+ background: { type: "solid", colorToken: "primary" },
9551
+ textColorToken: "primaryForeground",
9552
+ borderRadius: "rounded-full",
9553
+ // Cream stamp shadow under the burnt-orange fill.
9554
+ shadow: { elevation: "high", softness: "hard", position: "bottom-right", colorToken: "text" },
9555
+ effects: {
9556
+ hover: [{ effectId: "press-down" }]
9557
+ }
9558
+ },
9559
+ {
9560
+ id: "secondary",
9561
+ name: "Secondary",
9562
+ enabled: true,
9563
+ priority: 2,
9564
+ background: { type: "transparent" },
9565
+ textColorToken: "text",
9566
+ borderRadius: "rounded-full",
9567
+ border: { widthClass: "border-2", colorToken: "text" },
9568
+ // Brown stamp shadow under the cream outline.
9569
+ shadow: { elevation: "high", softness: "hard", position: "bottom-right", colorToken: "secondary" },
9570
+ effects: {
9571
+ hover: [{ effectId: "press-down" }]
9572
+ }
9573
+ }
9574
+ ]
9575
+ }
9576
+ });
9577
+
9286
9578
  // ../theme-core/src/buttons/personalities/pebble.ts
9287
9579
  var pebble = defineButtonPersonality({
9288
9580
  id: "pebble",
@@ -9556,7 +9848,8 @@ var buttonPersonalities = [
9556
9848
  pebble,
9557
9849
  inkStamp,
9558
9850
  brushedWash,
9559
- showtimePill
9851
+ showtimePill,
9852
+ joyStamp
9560
9853
  ];
9561
9854
  var personalitiesById = new Map(
9562
9855
  buttonPersonalities.map((p) => [p.id, p])
@@ -10427,7 +10720,9 @@ var boxBackgroundSchema = z22.object({
10427
10720
  motion: z22.enum(["static", "fixed-frame"]).nullable().optional(),
10428
10721
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
10429
10722
  textColor: tokenOrCssColorValueSchema.nullable().optional(),
10430
- headingColor: tokenOrCssColorValueSchema.nullable().optional()
10723
+ headingColor: tokenOrCssColorValueSchema.nullable().optional(),
10724
+ linkColor: tokenOrCssColorValueSchema.nullable().optional(),
10725
+ supportingColor: tokenOrCssColorValueSchema.nullable().optional()
10431
10726
  });
10432
10727
  var noHeadingDecorationSchema = z22.object({
10433
10728
  family: z22.literal("none")
@@ -10490,7 +10785,8 @@ var cardStylesOverrideSchema = z22.object({
10490
10785
  "editorial-rule",
10491
10786
  "soft-panel",
10492
10787
  "editorial-serif-quote",
10493
- "editorial-open"
10788
+ "editorial-open",
10789
+ "color-blocked"
10494
10790
  ]).nullable().optional(),
10495
10791
  // Which site-style card variant the card adopts (emits a `.card-{id}` class).
10496
10792
  // 'none' is boxless. Driven by the block look via testimonialCardTreatment.
@@ -11315,6 +11611,30 @@ var warmNeutralForest = definePaletteVariant({
11315
11611
  ]
11316
11612
  });
11317
11613
 
11614
+ // ../theme-core/src/palette/variants/warm-dark.ts
11615
+ var warmDarkEmber = definePaletteVariant({
11616
+ id: "warm-dark-ember",
11617
+ name: "Warm Dark \u2014 Ember",
11618
+ description: "Deep clay-brown ground with burnt-orange accent and warm cream text.",
11619
+ tags: { tone: "bold", energy: "vibrant", era: "organic" },
11620
+ mode: "dark",
11621
+ colors: [
11622
+ { name: "primary", hex: "#ce612f" },
11623
+ { name: "secondary", hex: "#894e31" },
11624
+ { name: "accent", hex: "#ce612f" },
11625
+ { name: "success", hex: "#6f8f57" },
11626
+ { name: "warning", hex: "#c98a3c" },
11627
+ { name: "destructive", hex: "#c0492f" },
11628
+ { name: "background", hex: "#4f2415" },
11629
+ { name: "surface", hex: "#5c3320" },
11630
+ { name: "surfaceAlt", hex: "#693a25" },
11631
+ { name: "muted", hex: "#6a3d27" },
11632
+ { name: "text", hex: "#f0e1d0" },
11633
+ { name: "primaryForeground", hex: "#4f2415" },
11634
+ { name: "border", hex: "#894e31" }
11635
+ ]
11636
+ });
11637
+
11318
11638
  // ../theme-core/src/palette/variants/index.ts
11319
11639
  var paletteVariants = [
11320
11640
  // Brand-led family
@@ -11335,7 +11655,9 @@ var paletteVariants = [
11335
11655
  softNaturalSage,
11336
11656
  softNaturalStone,
11337
11657
  softNaturalWatercolor,
11338
- softNaturalLilac
11658
+ softNaturalLilac,
11659
+ // Warm-dark family (dark mode)
11660
+ warmDarkEmber
11339
11661
  ];
11340
11662
  var paletteVariantsById = new Map(
11341
11663
  paletteVariants.map((v) => [v.id, v])
@@ -11616,6 +11938,32 @@ var clarityZenCardSystem = {
11616
11938
  }
11617
11939
  ]
11618
11940
  };
11941
+ var originalJoyCardSystem = {
11942
+ variants: [
11943
+ {
11944
+ id: "default",
11945
+ name: "Default",
11946
+ enabled: true,
11947
+ priority: 1,
11948
+ background: { type: "solid", colorToken: "surface" },
11949
+ foregroundToken: "text",
11950
+ spacing: "comfortable",
11951
+ corners: "rounded",
11952
+ shadow: { elevation: "none", softness: null, position: "bottom" }
11953
+ },
11954
+ {
11955
+ id: "alternative",
11956
+ name: "Statement",
11957
+ enabled: true,
11958
+ priority: 2,
11959
+ background: { type: "solid", colorToken: "primary" },
11960
+ foregroundToken: "primaryForeground",
11961
+ spacing: "comfortable",
11962
+ corners: "rounded",
11963
+ shadow: { elevation: "none", softness: null, position: "bottom" }
11964
+ }
11965
+ ]
11966
+ };
11619
11967
 
11620
11968
  // ../theme-core/src/site-styles/testimonialQuotePresets.ts
11621
11969
  var serifDisplayQuote = {
@@ -11736,7 +12084,7 @@ function baseHeader(theme) {
11736
12084
  navContainer: { type: "none", tint: null, opacity: 0.15 }
11737
12085
  };
11738
12086
  }
11739
- var headerLayoutCatalog = [
12087
+ var headerLayoutCatalog = defineExactCatalog()([
11740
12088
  {
11741
12089
  id: asHeaderLayoutId("classic"),
11742
12090
  label: "Classic",
@@ -11768,11 +12116,11 @@ var headerLayoutCatalog = [
11768
12116
  maxRecommendedNavItems: 5,
11769
12117
  allowedLogoShapes: ["none", "text-only", "horizontal"]
11770
12118
  }
11771
- ];
12119
+ ]);
11772
12120
  function supportedLayouts(ids) {
11773
12121
  return ids.map(asHeaderLayoutId);
11774
12122
  }
11775
- var headerStyleCatalog = [
12123
+ var headerStyleCatalog = defineExactCatalog()([
11776
12124
  {
11777
12125
  id: asHeaderStyleId("minimal"),
11778
12126
  label: "Minimal",
@@ -11927,7 +12275,7 @@ var headerStyleCatalog = [
11927
12275
  navTypography: "heading",
11928
12276
  moods: ["calm", "editorial"]
11929
12277
  }
11930
- ];
12278
+ ]);
11931
12279
  var headerLayoutsById = new Map(
11932
12280
  headerLayoutCatalog.map((layout) => [layout.id, layout])
11933
12281
  );
@@ -12040,7 +12388,7 @@ var headerStyleRepairOrder = /* @__PURE__ */ new Map(
12040
12388
  [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
12041
12389
  ]
12042
12390
  );
12043
- var legacyHeaderLookAliases = [
12391
+ var legacyHeaderLookAliases = defineExactCatalog()([
12044
12392
  {
12045
12393
  lookId: asHeaderLookId("clean-base"),
12046
12394
  selection: {
@@ -12097,7 +12445,7 @@ var legacyHeaderLookAliases = [
12097
12445
  styleId: asHeaderStyleId("glass")
12098
12446
  }
12099
12447
  }
12100
- ];
12448
+ ]);
12101
12449
  var legacyHeaderLookAliasesById = new Map(legacyHeaderLookAliases.map((alias) => [alias.lookId, alias]));
12102
12450
  function getHeaderStyle(id) {
12103
12451
  return headerStylesById.get(id) ?? null;
@@ -12134,7 +12482,7 @@ function themedHeaderShadow(theme) {
12134
12482
  case "high":
12135
12483
  return { elevation: "lg" };
12136
12484
  default:
12137
- return assertNever(
12485
+ return assertNever2(
12138
12486
  theme.shadow.elevation,
12139
12487
  "Unhandled theme shadow elevation"
12140
12488
  );
@@ -12251,6 +12599,12 @@ function serifLineHeader(theme) {
12251
12599
  letterSpacing: "wide",
12252
12600
  gradient: false
12253
12601
  },
12602
+ border: {
12603
+ style: "solid",
12604
+ width: "none",
12605
+ position: "none"
12606
+ },
12607
+ shadow: { elevation: "none" },
12254
12608
  ctaTreatment: "outline",
12255
12609
  ctaVariant: resolveHeaderCtaVariant(theme, "outline"),
12256
12610
  ctaGap: "relaxed"
@@ -12375,7 +12729,7 @@ function floatingGlassHeader(theme) {
12375
12729
  }
12376
12730
  };
12377
12731
  }
12378
- var headerLookCatalog = [
12732
+ var headerLookCatalog = defineExactCatalog()([
12379
12733
  {
12380
12734
  id: asHeaderLookId("clean-base"),
12381
12735
  label: "Clean base",
@@ -12493,7 +12847,7 @@ var headerLookCatalog = [
12493
12847
  logoAccommodations: overlayLogoAccommodations,
12494
12848
  compile: floatingGlassHeader
12495
12849
  }
12496
- ];
12850
+ ]);
12497
12851
  var guaranteedFallbackHeaderLookId = asHeaderLookId("clean-base");
12498
12852
  var guaranteedFallbackHeaderLayoutId = asHeaderLayoutId("classic");
12499
12853
  var guaranteedFallbackHeaderStyleId = asHeaderStyleId("minimal");
@@ -12659,7 +13013,7 @@ function editorialColumnsFooter(theme) {
12659
13013
  }
12660
13014
  };
12661
13015
  }
12662
- var footerLookCatalog = [
13016
+ var footerLookCatalog = defineExactCatalog()([
12663
13017
  {
12664
13018
  id: asFooterLookId("footer-muted-grounding"),
12665
13019
  label: "Muted grounding footer",
@@ -12682,7 +13036,7 @@ var footerLookCatalog = [
12682
13036
  allowedContentPresence: ["default-footer", "default-and-blocks"],
12683
13037
  compile: brandTwoBandFooter
12684
13038
  }
12685
- ];
13039
+ ]);
12686
13040
  var footerLooksById = new Map(
12687
13041
  footerLookCatalog.map((look) => [look.id, look])
12688
13042
  );
@@ -12704,7 +13058,7 @@ var generatedDesignOptionCatalog = {
12704
13058
  source: "generated",
12705
13059
  sectionSurfaces: ["base", "muted-band", "accent-band", "brand-depth-band", "hero-image"],
12706
13060
  contentFrames: generatedContentFrames,
12707
- itemSurfaces: ["none", "default", "flat", "outlined", "raised", "inset", "editorial"],
13061
+ itemSurfaces: ["none", "default", "flat", "outlined", "raised", "inset", "editorial", "color-blocked"],
12708
13062
  transitions: ["none", "soft-fade-short", "soft-fade-long"],
12709
13063
  emphases: ["low", "medium", "high"],
12710
13064
  detachedCustom: false
@@ -12716,8 +13070,15 @@ var userDesignOptionCatalog = {
12716
13070
  itemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
12717
13071
  transitions: [
12718
13072
  ...generatedDesignOptionCatalog.transitions,
13073
+ "soft-fade-expansive",
12719
13074
  "wave-edge",
12720
- "angle-edge"
13075
+ "wave-edge-balanced",
13076
+ "wave-edge-gentle",
13077
+ "wave-edge-bold",
13078
+ "wave-edge-drift",
13079
+ "angle-edge",
13080
+ "angle-edge-subtle",
13081
+ "angle-edge-steep"
12721
13082
  ],
12722
13083
  emphases: generatedDesignOptionCatalog.emphases,
12723
13084
  detachedCustom: false
@@ -12898,6 +13259,29 @@ var boldDisplayTypography = {
12898
13259
  },
12899
13260
  scale: "balanced"
12900
13261
  };
13262
+ var originalJoyTypography = {
13263
+ body: {
13264
+ family: "DM Sans, system-ui, sans-serif",
13265
+ size: "md",
13266
+ weight: "regular",
13267
+ lineHeight: "relaxed",
13268
+ letterSpacing: "normal"
13269
+ },
13270
+ headings: {
13271
+ default: {
13272
+ family: "Bricolage Grotesque, system-ui, sans-serif",
13273
+ weight: "bold",
13274
+ lineHeight: "normal",
13275
+ letterSpacing: "tight",
13276
+ italic: null,
13277
+ case: null
13278
+ },
13279
+ h1: { size: "2xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
13280
+ h2: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
13281
+ h3: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null }
13282
+ },
13283
+ scale: "balanced"
13284
+ };
12901
13285
  var typographyPresets = [
12902
13286
  defineTypographyPreset({
12903
13287
  id: "typography-preset:modern-sans",
@@ -12984,6 +13368,32 @@ var typographyPresets = [
12984
13368
  mobile: { headlineSize: "4xl", subheadlineSize: "xl" }
12985
13369
  }
12986
13370
  }
13371
+ }),
13372
+ defineTypographyPreset({
13373
+ id: "typography-preset:original-joy",
13374
+ name: "Original Joy",
13375
+ description: "Bold Bricolage Grotesque display headings over a clean DM Sans body, editorial and warm.",
13376
+ defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Bricolage Grotesque, system-ui, sans-serif" },
13377
+ recommendedFonts: {
13378
+ body: ["DM Sans", "Inter", "Manrope"],
13379
+ heading: ["Bricolage Grotesque", "Space Grotesk", "Archivo"]
13380
+ },
13381
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
13382
+ typography: originalJoyTypography,
13383
+ heroTypography: {
13384
+ headlineSize: "6xl",
13385
+ headlineLineHeight: "tight",
13386
+ subheadlineSize: "xl",
13387
+ subheadlineLineHeight: "normal",
13388
+ microHeadlineSize: "6xl",
13389
+ microHeadlineLineHeight: "tight",
13390
+ microSubheadlineSize: "lg",
13391
+ microSubheadlineLineHeight: "normal",
13392
+ responsive: {
13393
+ tablet: { headlineSize: "5xl" },
13394
+ mobile: { headlineSize: "4xl", subheadlineSize: "lg" }
13395
+ }
13396
+ }
12987
13397
  })
12988
13398
  ];
12989
13399
  var typographyPresetsById = new Map(
@@ -13007,7 +13417,8 @@ var curatedSiteStyleIdValues = [
13007
13417
  "site-style:clarity-zen-blue",
13008
13418
  SOFT_EARTH_SITE_STYLE_ID_VALUE,
13009
13419
  "site-style:bold-launch",
13010
- "site-style:south-west-twerk-school"
13420
+ "site-style:south-west-twerk-school",
13421
+ "site-style:original-joy"
13011
13422
  ];
13012
13423
  var quietBudget = {
13013
13424
  accentDensity: "low",
@@ -14053,7 +14464,7 @@ var curatedSiteStyles = [
14053
14464
  "body-text-editorial-intro",
14054
14465
  "schedule-details-brand-depth",
14055
14466
  "testimonials-statement-cards",
14056
- "contact-form-brand-depth-card"
14467
+ "contact-form-panel"
14057
14468
  ],
14058
14469
  recommendedHeaderLookIds: [
14059
14470
  "brand-solid",
@@ -14076,6 +14487,74 @@ var curatedSiteStyles = [
14076
14487
  paletteChoice("brand-led-warm"),
14077
14488
  paletteChoice("high-contrast-ink")
14078
14489
  ]
14490
+ }),
14491
+ defineCuratedSiteStyle({
14492
+ id: "site-style:original-joy",
14493
+ name: "Original Joy",
14494
+ headingDecoration: { family: "organic-squiggle", colorToken: "primary" },
14495
+ description: "Warm, dark, and editorial: deep clay grounds, cream type, and bold burnt-orange accents for soulful community brands.",
14496
+ 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.",
14497
+ tokenRecipes: {
14498
+ palette: "brand-led",
14499
+ contrast: "maximum",
14500
+ radius: "rounded",
14501
+ shadow: "subtle",
14502
+ typography: "clean-sans",
14503
+ spacing: "airy",
14504
+ motion: "expressive"
14505
+ },
14506
+ compositionBudget: expressiveBudget,
14507
+ typographyPresetChoices: [
14508
+ typographyChoice("typography-preset:original-joy"),
14509
+ typographyChoice("typography-preset:bold-display"),
14510
+ typographyChoice("typography-preset:modern-sans")
14511
+ ],
14512
+ defaultTypographyPresetId: "typography-preset:original-joy",
14513
+ themeOverrides: {
14514
+ accordions: boldBorderedAccordionSystem,
14515
+ // Shared card system: warm rounded brown cards (event + testimonial cards
14516
+ // pick this up automatically) with a burnt-orange statement variant.
14517
+ cards: originalJoyCardSystem,
14518
+ testimonialQuote: accentGlyphQuote,
14519
+ bodyText: {
14520
+ intro: {
14521
+ paragraphSize: "editorial",
14522
+ headingSize: "editorial"
14523
+ }
14524
+ }
14525
+ },
14526
+ // Recommended block looks: the bold colour-blocked feature cards, a calm
14527
+ // band for the events spotlight, and statement testimonial cards.
14528
+ recommendedAppearancePresetIds: [
14529
+ "feature-cards-bold-colors",
14530
+ "offerings-calm-list",
14531
+ "testimonials-statement-cards"
14532
+ ],
14533
+ // Floating, transparent "Clear Split" header (no fill behind the nav links).
14534
+ defaultHeaderSelection: { layoutId: "floating", styleId: "minimal-surface" },
14535
+ recommendedHeaderLayoutChoices: [headerLayoutChoice("floating")],
14536
+ recommendedHeaderStyleChoicesByLayout: {
14537
+ floating: [
14538
+ headerStyleChoice("minimal-surface"),
14539
+ headerStyleChoice("split-glass"),
14540
+ headerStyleChoice("glass")
14541
+ ]
14542
+ },
14543
+ // Legacy bridge only (the real curation is the explicit selection above).
14544
+ // Kept to a reserved-space, non-overlay look on purpose: the split hero
14545
+ // flows below the Clear Split header, so we must NOT trigger the immersive
14546
+ // overlay-hero promotion that looks like `floating-glass` would force.
14547
+ recommendedHeaderLookIds: ["minimal-transparent"],
14548
+ recommendedFooterLookIds: [
14549
+ "site-footer-brand-two-band",
14550
+ "footer-muted-grounding"
14551
+ ],
14552
+ buttonPersonalityChoices: [
14553
+ buttonChoice("joy-stamp"),
14554
+ buttonChoice("ink-stamp"),
14555
+ buttonChoice("showtime-pill")
14556
+ ],
14557
+ paletteVariantChoices: [paletteChoice("warm-dark-ember")]
14079
14558
  })
14080
14559
  ];
14081
14560
  var curatedSiteStylesById = new Map(
@@ -14091,26 +14570,6 @@ var microHeroLayoutVariantKey = asLayoutVariantKey("micro");
14091
14570
  var waveBoundaryOptionId = asBoundaryOptionId("break:wave");
14092
14571
 
14093
14572
  // ../theme-core/src/site-styles/pageDesignEditorModel.ts
14094
- var noneBoundaryOption = {
14095
- id: asBoundaryOptionId("break:none"),
14096
- label: "None",
14097
- transitionAfter: "none"
14098
- };
14099
- var softBoundaryOption = {
14100
- id: asBoundaryOptionId("break:soft"),
14101
- label: "Soft",
14102
- transitionAfter: "soft-fade-short"
14103
- };
14104
- var waveBoundaryOption = {
14105
- id: asBoundaryOptionId("break:wave"),
14106
- label: "Wave",
14107
- transitionAfter: "wave-edge"
14108
- };
14109
- var spaciousBoundaryOption = {
14110
- id: asBoundaryOptionId("break:spacious"),
14111
- label: "Spacious",
14112
- transitionAfter: "soft-fade-long"
14113
- };
14114
14573
  var pageFlowPresets = [
14115
14574
  {
14116
14575
  id: asPageFlowPresetId("flow:quiet"),
@@ -14380,8 +14839,7 @@ var defaultDesignRuntimeRules = defineDesignRuntimeRules({
14380
14839
  type: "image",
14381
14840
  opacity: 1,
14382
14841
  position: "center center",
14383
- textColor: "text",
14384
- headingColor: "text"
14842
+ ...uniformSectionForeground("text")
14385
14843
  }
14386
14844
  }
14387
14845
  },
@@ -14491,9 +14949,30 @@ var defaultComponentRuntimeRules = defineComponentRuntimeRules({
14491
14949
  border: {
14492
14950
  enabled: false
14493
14951
  }
14952
+ },
14953
+ "color-blocked": {
14954
+ // Bold, flat colour-blocked cards. The per-card background colour cycle
14955
+ // (by position) and staggered offset live in
14956
+ // blocks-static/card-treatments.css; here we set the shared shape:
14957
+ // generous padding, large radius, no border, flat (no shadow).
14958
+ treatment: "color-blocked",
14959
+ spacing: "spacious",
14960
+ rounded: "2xl",
14961
+ raised: false,
14962
+ border: {
14963
+ enabled: false
14964
+ }
14494
14965
  }
14495
14966
  }
14496
14967
  });
14968
+ function uniformSectionForeground(token) {
14969
+ return {
14970
+ textColor: token,
14971
+ headingColor: token,
14972
+ linkColor: token,
14973
+ supportingColor: token
14974
+ };
14975
+ }
14497
14976
 
14498
14977
  // ../theme-core/src/site-styles/generatedSchemas.ts
14499
14978
  import { z as z25 } from "zod";
@@ -16242,6 +16721,37 @@ function resolveBackgroundColorValue(value, context) {
16242
16721
  });
16243
16722
  }
16244
16723
 
16724
+ // ../blocks/src/system/transforms/registry/_utils/sectionForegroundStyles.ts
16725
+ function readColorToken(input, key) {
16726
+ const value = input[key];
16727
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
16728
+ }
16729
+ function resolveOptionalForegroundColor(value, context) {
16730
+ if (!value) return null;
16731
+ return resolveBackgroundColorValue(value, context);
16732
+ }
16733
+ function resolveSectionForegroundStyles(value, context) {
16734
+ if (!value || typeof value !== "object") {
16735
+ return {};
16736
+ }
16737
+ const input = value;
16738
+ const textColor = readColorToken(input, "textColor");
16739
+ const resolvedText = resolveOptionalForegroundColor(textColor, context);
16740
+ if (!resolvedText) {
16741
+ return {};
16742
+ }
16743
+ const resolvedHeading = resolveOptionalForegroundColor(readColorToken(input, "headingColor"), context) ?? resolvedText;
16744
+ const resolvedLink = resolveOptionalForegroundColor(readColorToken(input, "linkColor"), context) ?? resolvedText;
16745
+ const resolvedSupporting = resolveOptionalForegroundColor(readColorToken(input, "supportingColor"), context) ?? resolvedText;
16746
+ return {
16747
+ color: resolvedText,
16748
+ "--section-text-color": resolvedText,
16749
+ "--section-heading-color": resolvedHeading,
16750
+ "--section-link-color": resolvedLink,
16751
+ "--section-supporting-color": resolvedSupporting
16752
+ };
16753
+ }
16754
+
16245
16755
  // ../blocks/src/system/transforms/registry/boxStyles.ts
16246
16756
  var spacingTransform = {
16247
16757
  id: "boxStyles.spacing",
@@ -16376,6 +16886,8 @@ var boxStylesCompositeTransform = {
16376
16886
  classes.push("rb-card-treatment-editorial-serif-quote");
16377
16887
  } else if (input.treatment === "editorial-open") {
16378
16888
  classes.push("rb-card-treatment-editorial-open");
16889
+ } else if (input.treatment === "color-blocked") {
16890
+ classes.push("rb-card-treatment-color-blocked");
16379
16891
  }
16380
16892
  const cardVariant = normalizeBoxStylesCardVariant(input.cardVariant);
16381
16893
  if (cardVariant && cardVariant !== "none") {
@@ -16651,35 +17163,8 @@ var sectionHeadingColorStyleTransform = {
16651
17163
  var sectionColorsStyleTransform = {
16652
17164
  id: "sectionStyles.resolveColorsStyle",
16653
17165
  kind: "formatter",
16654
- summary: "Resolve section text and heading colors into a style object",
16655
- run: (value, _options, context) => {
16656
- if (!value || typeof value !== "object") {
16657
- return {};
16658
- }
16659
- const bg = value;
16660
- const textColor = typeof bg.textColor === "string" ? bg.textColor.trim() : null;
16661
- const headingColor = typeof bg.headingColor === "string" ? bg.headingColor.trim() : null;
16662
- const style = {};
16663
- if (textColor) {
16664
- const resolvedText = resolveBackgroundColorValue(textColor, context);
16665
- if (resolvedText) {
16666
- style.color = resolvedText;
16667
- style["--section-text-color"] = resolvedText;
16668
- if (headingColor) {
16669
- const resolvedHeading = resolveBackgroundColorValue(
16670
- headingColor,
16671
- context
16672
- );
16673
- if (resolvedHeading) {
16674
- style["--section-heading-color"] = resolvedHeading;
16675
- }
16676
- } else {
16677
- style["--section-heading-color"] = resolvedText;
16678
- }
16679
- }
16680
- }
16681
- return style;
16682
- }
17166
+ summary: "Resolve section foreground colors into a style object",
17167
+ run: (value, _options, context) => resolveSectionForegroundStyles(value, context)
16683
17168
  };
16684
17169
  var GAP_CLASS_MAP = {
16685
17170
  none: "rb-gap-semantic-none",
@@ -16991,46 +17476,6 @@ function sectionState(opts) {
16991
17476
  );
16992
17477
  }
16993
17478
 
16994
- // ../blocks/src/system/node/fragments/headingDecoration.ts
16995
- var defaultBindFrom = "_sectionStyles.headingDecoration";
16996
- function headingDecoration({
16997
- bindFrom = defaultBindFrom,
16998
- className
16999
- } = {}) {
17000
- return el(
17001
- "div",
17002
- // Full-width block row so the mark inherits the heading's alignment. The
17003
- // heading stacks are flexbox; `text-align` positions inline content, not flex
17004
- // items, so the inline-block mark must sit inside a stretched block for a
17005
- // centred heading to centre it (and a left heading to keep it at the start).
17006
- { "aria-hidden": "true", className: "rb-heading-decoration-row" },
17007
- [
17008
- el("div", {
17009
- className: {
17010
- $bind: {
17011
- from: bindFrom,
17012
- transforms: [
17013
- {
17014
- id: "ui.headingDecorationClassName",
17015
- options: { baseClass: className }
17016
- }
17017
- ]
17018
- }
17019
- }
17020
- })
17021
- ],
17022
- // Gate on the presence of `family`. The render-time theme projection omits
17023
- // `headingDecoration` entirely for absent/none signatures, so the
17024
- // dominant "no decoration" case is absent → falsy → not rendered. A presence
17025
- // check (rather than `family !== 'none'`) is deliberate: `when`'s only
17026
- // negation form would render on *absent* values, which would emit a stub on
17027
- // every undecorated heading. The remaining edge — hand-authored content with
17028
- // an explicit `{ family: 'none' }` — renders an aria-hidden `rb-hidden`
17029
- // (display:none) stub with no visual or layout impact.
17030
- when(`${bindFrom}.family`)
17031
- );
17032
- }
17033
-
17034
17479
  // ../blocks/src/system/fragments/types.ts
17035
17480
  import { z as z28 } from "zod";
17036
17481
  var FRAGMENT_ID_PATTERN = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/i;
@@ -17503,6 +17948,9 @@ var heroCopyFragment = defineFragment({
17503
17948
  maxLength: 600
17504
17949
  }
17505
17950
  ],
17951
+ // Layout order is [eyebrow, headline, subheadline]. The hero block's
17952
+ // `splitEditorial` variant reads these nodes by index; keep the order stable
17953
+ // (it fails fast at import if the count changes).
17506
17954
  layout: [
17507
17955
  text(
17508
17956
  {
@@ -17725,6 +18173,7 @@ var heroCtaRowFragment = defineFragment({
17725
18173
  ctaRow({
17726
18174
  collectionPath: "content.ctas",
17727
18175
  itemName: "cta",
18176
+ gap: "md",
17728
18177
  justify: {
17729
18178
  $bind: {
17730
18179
  from: "content",
@@ -17810,7 +18259,6 @@ var testimonialsHeadingFragment = defineFragment({
17810
18259
  when("content.heading"),
17811
18260
  bind("content.heading")
17812
18261
  ),
17813
- headingDecoration(),
17814
18262
  text(
17815
18263
  {
17816
18264
  as: "p",
@@ -18441,7 +18889,7 @@ var blogFeaturedPostFragment = defineFragment({
18441
18889
  });
18442
18890
 
18443
18891
  // ../blocks/src/system/fragments/library/faqHeading.ts
18444
- function faqHeadingLayout(options = {}) {
18892
+ function faqHeadingLayout() {
18445
18893
  return stack(
18446
18894
  {
18447
18895
  gap: "sm",
@@ -18466,7 +18914,6 @@ function faqHeadingLayout(options = {}) {
18466
18914
  when("content.title"),
18467
18915
  bind("content.title")
18468
18916
  ),
18469
- ...options.decorated ? [headingDecoration()] : [],
18470
18917
  richText(
18471
18918
  {
18472
18919
  className: "faq-description rb-prose rb-mx-auto rb-max-w-none",
@@ -18508,7 +18955,6 @@ var faqHeadingFragment = defineFragment({
18508
18955
  ],
18509
18956
  layout: faqHeadingLayout()
18510
18957
  });
18511
- var decoratedFaqHeadingLayout = faqHeadingLayout({ decorated: true });
18512
18958
 
18513
18959
  // ../blocks/src/system/fragments/library/faqAccordion.ts
18514
18960
  function createFaqAccordionLayout(options = {}) {
@@ -19665,12 +20111,38 @@ function splitLayoutWith(children) {
19665
20111
  var splitContentColumn = heroContentWrapper(heroContentNodes, "md", "rb-w-full rb-text-left");
19666
20112
  var splitImageColumn = heroSplitImagePane();
19667
20113
  var splitLayout = splitLayoutWith([
20114
+ splitImageColumn,
20115
+ splitContentColumn
20116
+ ]);
20117
+ var splitReverseLayout = splitLayoutWith([
19668
20118
  splitContentColumn,
19669
20119
  splitImageColumn
19670
20120
  ]);
19671
- var splitReverseLayout = splitLayoutWith([
19672
- splitImageColumn,
19673
- splitContentColumn
20121
+ var heroEyebrowNode = heroCopyFragment.layout[0];
20122
+ var heroHeadlineNode = heroCopyFragment.layout[1];
20123
+ var heroSubheadlineNode = heroCopyFragment.layout[2];
20124
+ var heroCtaRowNode = heroCtaRowFragment.layout[0];
20125
+ if (!heroEyebrowNode || !heroHeadlineNode || !heroSubheadlineNode || !heroCtaRowNode) {
20126
+ throw new Error("Hero copy/CTA fragments are missing their expected layout nodes.");
20127
+ }
20128
+ var heroEditorialBottomRow = inline(
20129
+ {
20130
+ gap: "lg",
20131
+ align: "end",
20132
+ justify: "start",
20133
+ wrap: true,
20134
+ className: "rb-w-full"
20135
+ },
20136
+ [heroSubheadlineNode, heroCtaRowNode]
20137
+ );
20138
+ var splitEditorialContentColumn = heroContentWrapper(
20139
+ [heroEyebrowNode, heroHeadlineNode, heroEditorialBottomRow],
20140
+ "md",
20141
+ "rb-w-full rb-text-left"
20142
+ );
20143
+ var splitEditorialLayout = splitLayoutWith([
20144
+ splitEditorialContentColumn,
20145
+ splitImageColumn
19674
20146
  ]);
19675
20147
  var heroConfig = {
19676
20148
  id: "block.hero",
@@ -19697,7 +20169,8 @@ var heroConfig = {
19697
20169
  classic: classicLayout,
19698
20170
  micro: microLayout,
19699
20171
  split: splitLayout,
19700
- splitReverse: splitReverseLayout
20172
+ splitReverse: splitReverseLayout,
20173
+ splitEditorial: splitEditorialLayout
19701
20174
  },
19702
20175
  defaultVariant: "classic",
19703
20176
  description: "Hero section with headline, subtitle, and repeatable CTAs.",
@@ -19812,18 +20285,6 @@ function introHeading(className) {
19812
20285
  bind("content.title")
19813
20286
  );
19814
20287
  }
19815
- function introHeadingGroup(className) {
19816
- return stack(
19817
- {
19818
- gap: "sm",
19819
- className: "rb-intro-heading-group"
19820
- },
19821
- [
19822
- introHeading(className),
19823
- headingDecoration()
19824
- ]
19825
- );
19826
- }
19827
20288
  function introBody(className = "rb-prose rb-max-w-none") {
19828
20289
  return richText({ className }, bind("content.body"));
19829
20290
  }
@@ -19842,7 +20303,6 @@ function introCopyStack(options = {}) {
19842
20303
  },
19843
20304
  [
19844
20305
  introHeading(options.headingClassName ?? "rb-intro-title"),
19845
- headingDecoration(),
19846
20306
  introBody(options.bodyClassName),
19847
20307
  introCtas(options.ctaJustify)
19848
20308
  ]
@@ -19882,7 +20342,7 @@ var statementCopyLayout = styledSection({
19882
20342
  className: "rb-intro rb-intro-statement rb-grid rb-grid-cols-1 rb-gap-8 rb-md-grid-cols-2 rb-md-items-start"
19883
20343
  },
19884
20344
  [
19885
- introHeadingGroup("rb-intro-title rb-max-w-xl"),
20345
+ introHeading("rb-intro-title rb-max-w-xl"),
19886
20346
  stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
19887
20347
  introBody(),
19888
20348
  introCtas("start")
@@ -19903,7 +20363,7 @@ var statementMediaLayout = styledSection({
19903
20363
  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"
19904
20364
  },
19905
20365
  [
19906
- introHeadingGroup("rb-intro-title rb-max-w-xl"),
20366
+ introHeading("rb-intro-title rb-max-w-xl"),
19907
20367
  stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
19908
20368
  introBody(),
19909
20369
  introCtas("start")
@@ -20846,16 +21306,59 @@ var formComposition = composeFragments([
20846
21306
  { fragment: formCopyFragment },
20847
21307
  { fragment: formEmbedFragment }
20848
21308
  ]);
20849
- var formLayout = styledSection({
20850
- children: styledContainer({
20851
- rootType: "stack",
20852
- rootProps: { gap: "lg" },
20853
- children: formComposition.layout
20854
- }),
20855
- baseClass: "",
20856
- spacing: "medium",
20857
- background: "surface"
20858
- });
21309
+ function fragmentLayoutNode(layout) {
21310
+ return isNodeDefinitionArray(layout) ? el("div", {}, [...layout]) : layout;
21311
+ }
21312
+ function isNodeDefinitionArray(layout) {
21313
+ return Array.isArray(layout);
21314
+ }
21315
+ var copyLayout = fragmentLayoutNode(formCopyFragment.layout);
21316
+ var embedLayout = fragmentLayoutNode(formEmbedFragment.layout);
21317
+ var formSurface = styledContainer({
21318
+ bindFrom: "_containerStyles",
21319
+ constrainWidth: false,
21320
+ baseClassName: "rb-form-surface rb-relative rb-isolate rb-overflow-hidden",
21321
+ children: embedLayout
21322
+ });
21323
+ function createFormLayout(variant) {
21324
+ if (variant === "two-column") {
21325
+ return styledSection({
21326
+ children: el(
21327
+ "div",
21328
+ {
21329
+ className: "rb-container"
21330
+ },
21331
+ [
21332
+ el(
21333
+ "div",
21334
+ {
21335
+ className: "rb-form-two-column rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
21336
+ },
21337
+ [
21338
+ stack({ gap: "md", className: "rb-form-copy-column" }, [copyLayout]),
21339
+ formSurface
21340
+ ]
21341
+ )
21342
+ ]
21343
+ ),
21344
+ baseClass: "",
21345
+ spacing: "medium",
21346
+ background: "surface"
21347
+ });
21348
+ }
21349
+ return styledSection({
21350
+ children: styledContainer({
21351
+ rootType: "stack",
21352
+ rootProps: { gap: "lg" },
21353
+ children: formComposition.layout
21354
+ }),
21355
+ baseClass: "",
21356
+ spacing: "medium",
21357
+ background: "surface"
21358
+ });
21359
+ }
21360
+ var formLayout = createFormLayout("default");
21361
+ var twoColumnFormLayout = createFormLayout("two-column");
20859
21362
  var dataLoaders = buildFragmentDataLoaders(formComposition);
20860
21363
  var formManifest = createBlockManifest({
20861
21364
  id: "block.form",
@@ -20868,6 +21371,23 @@ var formManifest = createBlockManifest({
20868
21371
  { fragment: formEmbedFragment }
20869
21372
  ],
20870
21373
  layout: formLayout,
21374
+ variants: {
21375
+ default: formLayout,
21376
+ "two-column": twoColumnFormLayout
21377
+ },
21378
+ defaultVariant: "default",
21379
+ variantOptions: {
21380
+ default: {
21381
+ label: "Stacked",
21382
+ description: "Copy above the form.",
21383
+ icon: "PanelTop"
21384
+ },
21385
+ "two-column": {
21386
+ label: "Two column",
21387
+ description: "Copy on the left and form on the right.",
21388
+ icon: "Columns2"
21389
+ }
21390
+ },
20871
21391
  styleTokens: { background: "surface", typography: "body", spacing: "md" },
20872
21392
  behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: false },
20873
21393
  category: "interactive",
@@ -20893,15 +21413,14 @@ var formBlockDefinition = {
20893
21413
  };
20894
21414
 
20895
21415
  // ../blocks/src/system/blocks/faq.ts
20896
- function fragmentLayoutNode(layout) {
20897
- return isNodeDefinitionArray(layout) ? el("div", {}, [...layout]) : layout;
21416
+ function fragmentLayoutNode2(layout) {
21417
+ return isNodeDefinitionArray2(layout) ? el("div", {}, [...layout]) : layout;
20898
21418
  }
20899
- function isNodeDefinitionArray(layout) {
21419
+ function isNodeDefinitionArray2(layout) {
20900
21420
  return Array.isArray(layout);
20901
21421
  }
20902
- var headingLayout = fragmentLayoutNode(faqHeadingFragment.layout);
20903
- var accordionLayout = fragmentLayoutNode(faqAccordionFragment.layout);
20904
- var decoratedHeadingLayout = fragmentLayoutNode(decoratedFaqHeadingLayout);
21422
+ var headingLayout = fragmentLayoutNode2(faqHeadingFragment.layout);
21423
+ var accordionLayout = fragmentLayoutNode2(faqAccordionFragment.layout);
20905
21424
  var questionColumnsAccordionLayout = createFaqAccordionLayout({
20906
21425
  rootClassName: "accordion-root rb-faq-question-columns rb-grid rb-grid-cols-1 rb-gap-4 rb-lg-grid-cols-2"
20907
21426
  });
@@ -20909,7 +21428,7 @@ var defaultLayout = styledSection({
20909
21428
  children: styledContainer({
20910
21429
  baseClassName: "rb-relative rb-isolate",
20911
21430
  children: stack({ gap: "xl", className: "rb-w-full rb-max-w-4xl rb-mx-auto" }, [
20912
- decoratedHeadingLayout,
21431
+ headingLayout,
20913
21432
  accordionLayout
20914
21433
  ])
20915
21434
  }),
@@ -20937,7 +21456,7 @@ var questionColumnsLayout = styledSection({
20937
21456
  children: stack(
20938
21457
  { gap: "xl", className: "rb-w-full" },
20939
21458
  [
20940
- decoratedHeadingLayout,
21459
+ headingLayout,
20941
21460
  questionColumnsAccordionLayout
20942
21461
  ]
20943
21462
  )
@@ -21271,7 +21790,7 @@ function resolveHeroContentAlignment(content) {
21271
21790
  const raw = readHeroLayoutString(content, "contentAlignment");
21272
21791
  if (raw === "left" || raw === "center" || raw === "right") return raw;
21273
21792
  const variant = resolveHeroVariant(content);
21274
- if (variant === "split" || variant === "splitReverse") return "left";
21793
+ if (variant === "split" || variant === "splitReverse" || variant === "splitEditorial") return "left";
21275
21794
  return "center";
21276
21795
  }
21277
21796
  function resolveHeroVerticalAlignment(content) {
@@ -21281,7 +21800,7 @@ function resolveHeroVerticalAlignment(content) {
21281
21800
  const minHeight = sectionStyles?.minHeight;
21282
21801
  if (minHeight === "banner" || minHeight === "hero" || minHeight === "immersive") return "center";
21283
21802
  const variant = resolveHeroVariant(content);
21284
- if (variant === "split" || variant === "splitReverse") return "center";
21803
+ if (variant === "split" || variant === "splitReverse" || variant === "splitEditorial") return "center";
21285
21804
  return "top";
21286
21805
  }
21287
21806
  function resolveHeroContentMaxWidth(content) {
@@ -21683,7 +22202,7 @@ function planSiteChromePlacement(positioning) {
21683
22202
  standaloneShellClassName: "fixed left-0 right-0 top-0 z-40 w-full"
21684
22203
  };
21685
22204
  default:
21686
- return assertNever(positioning);
22205
+ return assertNever2(positioning);
21687
22206
  }
21688
22207
  }
21689
22208
 
@@ -22837,7 +23356,7 @@ var floatingLayout = inline(
22837
23356
  ),
22838
23357
  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`
22839
23358
  }),
22840
- align: "center"
23359
+ align: "start"
22841
23360
  },
22842
23361
  [
22843
23362
  logoRow,
@@ -23356,7 +23875,6 @@ var splitHeading = stack(
23356
23875
  when("content.heading"),
23357
23876
  bind("content.heading")
23358
23877
  ),
23359
- headingDecoration(),
23360
23878
  text(
23361
23879
  {
23362
23880
  as: "p",
@@ -23894,7 +24412,6 @@ var sectionHeading = stack(
23894
24412
  when("content.title"),
23895
24413
  bind("content.title")
23896
24414
  ),
23897
- headingDecoration(),
23898
24415
  richText(
23899
24416
  {
23900
24417
  className: "rb-feature-cards-description rb-prose rb-mx-auto rb-max-w-none",
@@ -23927,6 +24444,17 @@ var featureCard = styledCard(
23927
24444
  null,
23928
24445
  bind("card.icon")
23929
24446
  ),
24447
+ // Auto-numbered marker (01, 02, …). Always in the DOM; CSS shows it only
24448
+ // when cardMarker === 'numbers' and fills it via a counter. Its own class
24449
+ // (not the icon zone) so the icon-zone collapse behaviour is unaffected.
24450
+ el(
24451
+ "div",
24452
+ {
24453
+ className: "rb-feature-card-number-zone",
24454
+ "aria-hidden": "true"
24455
+ },
24456
+ null
24457
+ ),
23930
24458
  text(
23931
24459
  {
23932
24460
  as: "h3",
@@ -23966,6 +24494,12 @@ var cardsLayout = styledSection({
23966
24494
  sectionHeading,
23967
24495
  grid3(
23968
24496
  {
24497
+ className: "rb-feature-cards-grid",
24498
+ // Drives which marker shows (icons / numbers / none) via CSS; the
24499
+ // fallback keeps legacy content (no cardMarker) showing icons.
24500
+ "data-card-marker": {
24501
+ $bind: { from: "content.cardMarker", fallback: "icons" }
24502
+ },
23969
24503
  cols: {
23970
24504
  $bind: {
23971
24505
  from: "content.columns",
@@ -24094,9 +24628,23 @@ var featureCardsConfig = {
24094
24628
  }
24095
24629
  },
24096
24630
  {
24097
- id: "_iconTreatment",
24631
+ id: "cardMarker",
24098
24632
  type: "select",
24099
- label: "Icon style",
24633
+ label: "Card marker",
24634
+ required: false,
24635
+ defaultValue: "icons",
24636
+ multiple: false,
24637
+ options: [
24638
+ { value: "icons", label: "Icons" },
24639
+ { value: "numbers", label: "Numbers (01, 02, \u2026)" },
24640
+ { value: "none", label: "None" }
24641
+ ],
24642
+ ui: { intent: "display" }
24643
+ },
24644
+ {
24645
+ id: "_iconTreatment",
24646
+ type: "select",
24647
+ label: "Icon style",
24100
24648
  required: false,
24101
24649
  defaultValue: "soft-badge",
24102
24650
  multiple: false,
@@ -24861,6 +25409,22 @@ var eventCategorySchema = z42.object({
24861
25409
  var pricingTypeSchema = z42.enum(["free", "paid", "pass_only", "membership_only"]);
24862
25410
  var accessRestrictionSchema = z42.enum(["none", "category"]);
24863
25411
  var eventPricingModeSchema = z42.enum(["single", "ticket_types"]);
25412
+ var publicCoursePriceDisplaySchema = z42.discriminatedUnion("kind", [
25413
+ z42.object({ kind: z42.literal("free"), currency: z42.string() }),
25414
+ z42.object({ kind: z42.literal("exact"), amount: z42.number(), currency: z42.string() }),
25415
+ z42.object({ kind: z42.literal("from"), amount: z42.number(), currency: z42.string() }),
25416
+ z42.object({ kind: z42.literal("unavailable"), currency: z42.string() })
25417
+ ]);
25418
+ var publicEventPriceDisplaySchema = z42.discriminatedUnion("kind", [
25419
+ z42.object({ kind: z42.literal("free"), currency: z42.string() }),
25420
+ z42.object({ kind: z42.literal("exact"), amount: z42.number(), currency: z42.string() }),
25421
+ z42.object({ kind: z42.literal("from"), amount: z42.number(), currency: z42.string() }),
25422
+ z42.object({ kind: z42.literal("mixed"), paidFromAmount: z42.number(), currency: z42.string() }),
25423
+ z42.object({ kind: z42.literal("pass_only") }),
25424
+ z42.object({ kind: z42.literal("membership_only") }),
25425
+ z42.object({ kind: z42.literal("unavailable"), currency: z42.string() }),
25426
+ z42.object({ kind: z42.literal("course"), display: publicCoursePriceDisplaySchema })
25427
+ ]);
24864
25428
  var publicEventAttendanceModeSchema = z42.enum(["in_person", "online"]);
24865
25429
  var publicEventAttendanceModeAvailabilitySchema = z42.object({
24866
25430
  mode: publicEventAttendanceModeSchema,
@@ -24942,6 +25506,7 @@ var publicEventSchema = z42.object({
24942
25506
  pricingType: pricingTypeSchema,
24943
25507
  price: z42.number().nullable(),
24944
25508
  currency: z42.string(),
25509
+ priceDisplay: publicEventPriceDisplaySchema,
24945
25510
  paymentTerms: blockBookingPaymentTermsSchema,
24946
25511
  pricingMode: eventPricingModeSchema.optional(),
24947
25512
  ticketTypes: z42.array(publicEventTicketTypeSchema).optional(),
@@ -24987,7 +25552,7 @@ var cardStylingFields = [
24987
25552
  description: "Text for the event action button",
24988
25553
  required: false,
24989
25554
  multiline: false,
24990
- defaultValue: "Book now",
25555
+ defaultValue: "Book",
24991
25556
  maxLength: 40
24992
25557
  }
24993
25558
  ];
@@ -26340,7 +26905,7 @@ var eventSpotlightBlockDefinition = {
26340
26905
  };
26341
26906
 
26342
26907
  // ../blocks/src/system/runtime/nodes/events/EventListing.interactive.ts
26343
- import { z as z50 } from "zod";
26908
+ import { z as z51 } from "zod";
26344
26909
 
26345
26910
  // ../blocks/src/system/runtime/nodes/events/shared/utils.ts
26346
26911
  var COLUMN_CLASSES = {
@@ -26446,92 +27011,130 @@ function computeMediaTransformStyle(value, style, targetAspectRatio, options) {
26446
27011
  return mergeStyles(style, stylePatch);
26447
27012
  }
26448
27013
 
27014
+ // ../blocks/src/system/runtime/nodes/events/shared/listOptions.ts
27015
+ import { z as z50 } from "zod";
27016
+ var eventPageSizeValues = [3, 6, 10, 12, 20, 24, 30];
27017
+ var eventPageSizeSchema = z50.union([
27018
+ z50.literal(3),
27019
+ z50.literal(6),
27020
+ z50.literal(10),
27021
+ z50.literal(12),
27022
+ z50.literal(20),
27023
+ z50.literal(24),
27024
+ z50.literal(30)
27025
+ ]);
27026
+ var eventPageSizeSet = new Set(eventPageSizeValues);
27027
+ function resolveEventPageSize(value, fallback = 12) {
27028
+ const candidate = typeof value === "number" ? value : typeof value === "string" && value.trim() !== "" ? Number(value.trim()) : null;
27029
+ return candidate != null && Number.isInteger(candidate) && eventPageSizeSet.has(candidate) ? candidate : fallback;
27030
+ }
27031
+ function resolveEventCalendarListPageSize(input) {
27032
+ return resolveEventPageSize(input.eventsPerPage);
27033
+ }
27034
+ var eventListPaginationActionSchema = z50.discriminatedUnion("kind", [
27035
+ z50.object({
27036
+ kind: z50.literal("loadMore"),
27037
+ label: z50.string()
27038
+ }),
27039
+ z50.object({
27040
+ kind: z50.literal("seeAllLink"),
27041
+ label: z50.string(),
27042
+ href: z50.string()
27043
+ })
27044
+ ]);
27045
+ function resolveEventListPaginationAction(input) {
27046
+ const label = input.loadMoreText?.trim() || input.defaultLabel || "Load more events";
27047
+ const href = input.seeAllUrl?.trim();
27048
+ if (input.paginationMode === "seeAllLink" && href) {
27049
+ return { kind: "seeAllLink", label, href };
27050
+ }
27051
+ return { kind: "loadMore", label };
27052
+ }
27053
+
26449
27054
  // ../blocks/src/system/runtime/nodes/events/EventListing.interactive.ts
26450
- var legacyEventCardVariantSchema = z50.enum(["variant1", "variant2"]);
26451
- var eventCardVariantInputSchema = z50.union([
27055
+ var legacyEventCardVariantSchema = z51.enum(["variant1", "variant2"]);
27056
+ var eventCardVariantInputSchema = z51.union([
26452
27057
  cardVariantRoleSchema,
26453
27058
  legacyEventCardVariantSchema
26454
27059
  ]);
26455
- var cardOrientationSchema = z50.enum(["vertical", "horizontal"]);
26456
- var eventBlockKindSchema = z50.enum(eventBlockKindValues);
26457
- var eventSurfaceScopeSchema = z50.enum(eventSurfaceScopeValues);
26458
- var eventScheduleScopeSchema2 = z50.enum(eventScheduleScopeValues);
26459
- var eventListingSourceSchema = z50.object({
26460
- events: z50.array(publicEventSchema).nullable().optional(),
26461
- siteId: z50.string(),
26462
- apiBaseUrl: z50.string().optional(),
27060
+ var cardOrientationSchema = z51.enum(["vertical", "horizontal"]);
27061
+ var eventBlockKindSchema = z51.enum(eventBlockKindValues);
27062
+ var eventSurfaceScopeSchema = z51.enum(eventSurfaceScopeValues);
27063
+ var eventScheduleScopeSchema2 = z51.enum(eventScheduleScopeValues);
27064
+ var eventListingSourceSchema = z51.object({
27065
+ events: z51.array(publicEventSchema).nullable().optional(),
27066
+ siteId: z51.string(),
27067
+ apiBaseUrl: z51.string().optional(),
26463
27068
  stage: previewStageSchema.optional(),
26464
27069
  layout: eventLayoutSchema.optional(),
26465
27070
  columns: columnOptionSchema.optional(),
26466
- eventsPerPage: z50.string().optional(),
26467
- paginationMode: z50.enum(["loadMore", "seeAllLink"]).optional(),
26468
- seeAllUrl: z50.string().optional(),
26469
- loadMoreText: z50.string().optional(),
27071
+ eventsPerPage: z51.string().optional(),
27072
+ paginationMode: z51.enum(["loadMore", "seeAllLink"]).optional(),
27073
+ seeAllUrl: z51.string().optional(),
27074
+ loadMoreText: z51.string().optional(),
26470
27075
  cardVariant: eventCardVariantInputSchema.optional(),
26471
27076
  buttonVariant: eventButtonVariantSchema.optional(),
26472
- buttonText: z50.string().optional(),
26473
- showVenue: z50.boolean().optional(),
26474
- showMap: z50.boolean().optional(),
26475
- showCapacity: z50.boolean().optional(),
26476
- emptyMessage: z50.string().optional(),
26477
- className: z50.string().optional(),
26478
- showFilters: z50.boolean().nullable().optional(),
27077
+ buttonText: z51.string().optional(),
27078
+ showVenue: z51.boolean().optional(),
27079
+ showMap: z51.boolean().optional(),
27080
+ showCapacity: z51.boolean().optional(),
27081
+ emptyMessage: z51.string().optional(),
27082
+ className: z51.string().optional(),
27083
+ showFilters: z51.boolean().nullable().optional(),
26479
27084
  showCategoryFilter: filterAutoShowSchema.optional(),
26480
- showVenueFilter: z50.boolean().nullable().optional(),
26481
- showStaffFilter: z50.boolean().nullable().optional(),
27085
+ showVenueFilter: z51.boolean().nullable().optional(),
27086
+ showStaffFilter: z51.boolean().nullable().optional(),
26482
27087
  eventKind: eventBlockKindSchema.nullable().optional(),
26483
27088
  eventSurface: eventSurfaceScopeSchema.nullable().optional(),
26484
- filterEventPresets: z50.union([z50.string(), z50.array(z50.string())]).nullable().optional(),
27089
+ filterEventPresets: z51.union([z51.string(), z51.array(z51.string())]).nullable().optional(),
26485
27090
  scheduleScope: eventScheduleScopeSchema2.nullable().optional(),
26486
- filterCategoryIds: z50.string().nullable().optional(),
26487
- filterStaffMemberId: z50.string().nullable().optional(),
26488
- filterVenueId: z50.string().nullable().optional()
27091
+ filterCategoryIds: z51.string().nullable().optional(),
27092
+ filterStaffMemberId: z51.string().nullable().optional(),
27093
+ filterVenueId: z51.string().nullable().optional()
26489
27094
  });
26490
- var eventListingDisplaySchema = z50.object({
26491
- kind: z50.literal("event-listing"),
26492
- state: z50.enum(["loading", "empty", "ready"]),
27095
+ var eventListingDisplaySchema = z51.object({
27096
+ kind: z51.literal("event-listing"),
27097
+ state: z51.enum(["loading", "empty", "ready"]),
26493
27098
  listLayout: eventLayoutSchema,
26494
- className: z50.string().nullable(),
26495
- emptyMessage: z50.string(),
26496
- loadingMessage: z50.string(),
26497
- containerClass: z50.string(),
27099
+ className: z51.string().nullable(),
27100
+ emptyMessage: z51.string(),
27101
+ loadingMessage: z51.string(),
27102
+ containerClass: z51.string(),
26498
27103
  cardVariant: cardVariantRoleSchema,
26499
27104
  buttonVariant: eventButtonVariantSchema,
26500
- buttonText: z50.string(),
26501
- showVenue: z50.boolean(),
26502
- showMap: z50.boolean(),
26503
- showCapacity: z50.boolean(),
27105
+ buttonText: z51.string(),
27106
+ showVenue: z51.boolean(),
27107
+ showMap: z51.boolean(),
27108
+ showCapacity: z51.boolean(),
26504
27109
  orientation: cardOrientationSchema,
26505
- events: z50.array(publicEventSchema)
27110
+ events: z51.array(publicEventSchema)
26506
27111
  });
26507
- var eventListingHydrationSchema = z50.object({
26508
- siteId: z50.string(),
27112
+ var eventListingHydrationSchema = z51.object({
27113
+ siteId: z51.string(),
26509
27114
  stage: previewStageSchema.optional(),
26510
- eventsPerPage: z50.string(),
26511
- paginationMode: z50.enum(["loadMore", "seeAllLink"]),
26512
- seeAllUrl: z50.string().optional(),
26513
- loadMoreText: z50.string(),
26514
- showFilters: z50.boolean(),
27115
+ eventsPerPage: eventPageSizeSchema,
27116
+ paginationAction: eventListPaginationActionSchema,
27117
+ showFilters: z51.boolean(),
26515
27118
  showCategoryFilter: filterAutoShowSchema,
26516
- showVenueFilter: z50.boolean(),
26517
- showStaffFilter: z50.boolean(),
27119
+ showVenueFilter: z51.boolean(),
27120
+ showStaffFilter: z51.boolean(),
26518
27121
  eventKind: eventBlockKindSchema,
26519
27122
  eventSurface: eventSurfaceScopeSchema,
26520
- filterEventPresets: z50.string().nullable(),
27123
+ filterEventPresets: z51.string().nullable(),
26521
27124
  scheduleScope: eventScheduleScopeSchema2,
26522
- filterCategoryIds: z50.string().nullable().optional(),
26523
- filterStaffMemberId: z50.string().nullable().optional(),
26524
- filterVenueId: z50.string().nullable().optional(),
26525
- fetchInitialEventsOnMount: z50.boolean()
27125
+ filterCategoryIds: z51.string().nullable().optional(),
27126
+ filterStaffMemberId: z51.string().nullable().optional(),
27127
+ filterVenueId: z51.string().nullable().optional(),
27128
+ fetchInitialEventsOnMount: z51.boolean()
26526
27129
  });
26527
- var eventListingRenderSchema = z50.object({
27130
+ var eventListingRenderSchema = z51.object({
26528
27131
  display: eventListingDisplaySchema,
26529
27132
  hydration: eventListingHydrationSchema
26530
27133
  });
26531
27134
  var eventListingIslandMetaCodec = createZodCodec(
26532
- z50.object({
26533
- siteId: z50.string(),
26534
- apiBaseUrl: z50.string().optional(),
27135
+ z51.object({
27136
+ siteId: z51.string(),
27137
+ apiBaseUrl: z51.string().optional(),
26535
27138
  stage: previewStageSchema.optional()
26536
27139
  })
26537
27140
  );
@@ -26543,7 +27146,7 @@ var eventListingBlockRuntime = defineProgressiveBlockRuntime({
26543
27146
  },
26544
27147
  buildRender: (source) => {
26545
27148
  const normalizedEvents = Array.isArray(source.events) ? source.events : [];
26546
- const pageSize = parseInt(source.eventsPerPage ?? "12", 10) || 12;
27149
+ const pageSize = resolveEventPageSize(source.eventsPerPage);
26547
27150
  const initialEvents = normalizedEvents.slice(0, pageSize);
26548
27151
  const didPrefetchEvents = source.events != null;
26549
27152
  const layout = source.layout ?? "grid";
@@ -26558,7 +27161,7 @@ var eventListingBlockRuntime = defineProgressiveBlockRuntime({
26558
27161
  containerClass: getContainerClass(layout, source.columns ?? "3"),
26559
27162
  cardVariant: normalizeCardVariantRole(source.cardVariant) ?? "default",
26560
27163
  buttonVariant: source.buttonVariant ?? "primary",
26561
- buttonText: source.buttonText ?? "Book now",
27164
+ buttonText: source.buttonText ?? "Book",
26562
27165
  showVenue: source.showVenue ?? true,
26563
27166
  showMap: source.showMap ?? true,
26564
27167
  showCapacity: source.showCapacity ?? true,
@@ -26568,10 +27171,12 @@ var eventListingBlockRuntime = defineProgressiveBlockRuntime({
26568
27171
  hydration: {
26569
27172
  siteId: source.siteId,
26570
27173
  stage: source.stage,
26571
- eventsPerPage: source.eventsPerPage ?? "12",
26572
- paginationMode: source.paginationMode ?? "loadMore",
26573
- seeAllUrl: source.seeAllUrl,
26574
- loadMoreText: source.loadMoreText || "Load more",
27174
+ eventsPerPage: pageSize,
27175
+ paginationAction: resolveEventListPaginationAction({
27176
+ paginationMode: source.paginationMode,
27177
+ seeAllUrl: source.seeAllUrl,
27178
+ loadMoreText: source.loadMoreText
27179
+ }),
26575
27180
  showFilters: source.showFilters ?? false,
26576
27181
  showCategoryFilter: source.showCategoryFilter ?? "auto",
26577
27182
  showVenueFilter: source.showVenueFilter ?? false,
@@ -26793,7 +27398,7 @@ var eventListingLayout = [
26793
27398
  loadMoreText: { $bind: { from: "content.loadMoreText", fallback: "Load more events" } },
26794
27399
  cardVariant: { $bind: { from: "content.cardVariant", fallback: "default" } },
26795
27400
  buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
26796
- buttonText: { $bind: { from: "content.buttonText", fallback: "Book now" } },
27401
+ buttonText: { $bind: { from: "content.buttonText", fallback: "Book" } },
26797
27402
  showVenue: { $bind: { from: "content.showVenue" } },
26798
27403
  showMap: { $bind: { from: "content.showMap" } },
26799
27404
  showCapacity: { $bind: { from: "content.showCapacity" } },
@@ -26888,15 +27493,15 @@ var eventListingBlockDefinition = {
26888
27493
  };
26889
27494
 
26890
27495
  // ../blocks/src/system/runtime/nodes/events/EventCalendar.interactive.ts
26891
- import { z as z51 } from "zod";
26892
- var eventBlockKindSchema2 = z51.enum(eventBlockKindValues);
26893
- var eventSurfaceScopeSchema2 = z51.enum(eventSurfaceScopeValues);
26894
- var eventScheduleScopeSchema3 = z51.enum(eventScheduleScopeValues);
26895
- var eventCalendarSourceSchema = z51.object(
27496
+ import { z as z52 } from "zod";
27497
+ var eventBlockKindSchema2 = z52.enum(eventBlockKindValues);
27498
+ var eventSurfaceScopeSchema2 = z52.enum(eventSurfaceScopeValues);
27499
+ var eventScheduleScopeSchema3 = z52.enum(eventScheduleScopeValues);
27500
+ var eventCalendarSourceSchema = z52.object(
26896
27501
  {
26897
- events: z51.array(publicEventSchema).nullable().optional(),
26898
- siteId: z51.string(),
26899
- apiBaseUrl: z51.string().optional(),
27502
+ events: z52.array(publicEventSchema).nullable().optional(),
27503
+ siteId: z52.string(),
27504
+ apiBaseUrl: z52.string().optional(),
26900
27505
  stage: previewStageSchema.optional(),
26901
27506
  variant: eventCalendarDisplayModeSchema.nullable().optional(),
26902
27507
  displayMode: eventCalendarDisplayModeSchema.nullable().optional(),
@@ -26904,77 +27509,78 @@ var eventCalendarSourceSchema = z51.object(
26904
27509
  listColumns: columnOptionSchema.optional(),
26905
27510
  layout: eventLayoutSchema.optional(),
26906
27511
  columns: columnOptionSchema.optional(),
26907
- eventsPerPage: z51.string().optional(),
26908
- compactEventsPerPage: z51.string().optional(),
26909
- loadMoreText: z51.string().optional(),
27512
+ eventsPerPage: z52.string().optional(),
27513
+ paginationMode: z52.enum(["loadMore", "seeAllLink"]).optional(),
27514
+ seeAllUrl: z52.string().optional(),
27515
+ loadMoreText: z52.string().optional(),
26910
27516
  startOfWeek: weekStartSchema.optional(),
26911
27517
  calendarTabViews: calendarTabViewsSchema.optional(),
26912
- showFilters: z51.boolean().nullable().optional(),
27518
+ showFilters: z52.boolean().nullable().optional(),
26913
27519
  showCategoryFilter: filterAutoShowSchema.optional(),
26914
- showVenueFilter: z51.boolean().nullable().optional(),
26915
- showStaffFilter: z51.boolean().nullable().optional(),
27520
+ showVenueFilter: z52.boolean().nullable().optional(),
27521
+ showStaffFilter: z52.boolean().nullable().optional(),
26916
27522
  kind: eventBlockKindSchema2.nullable().optional(),
26917
27523
  eventSurface: eventSurfaceScopeSchema2.nullable().optional(),
26918
- filterEventPresets: z51.union([z51.string(), z51.array(z51.string())]).nullable().optional(),
27524
+ filterEventPresets: z52.union([z52.string(), z52.array(z52.string())]).nullable().optional(),
26919
27525
  scheduleScope: eventScheduleScopeSchema3.nullable().optional(),
26920
- filterCategoryIds: z51.union([z51.string(), z51.array(z51.string())]).nullable().optional(),
26921
- filterStaffMemberId: z51.string().nullable().optional(),
26922
- filterVenueId: z51.string().nullable().optional(),
27526
+ filterCategoryIds: z52.union([z52.string(), z52.array(z52.string())]).nullable().optional(),
27527
+ filterStaffMemberId: z52.string().nullable().optional(),
27528
+ filterVenueId: z52.string().nullable().optional(),
26923
27529
  buttonVariant: eventButtonVariantSchema.optional(),
26924
- buttonText: z51.string().optional(),
26925
- showVenue: z51.boolean().nullable().optional(),
26926
- showMap: z51.boolean().nullable().optional(),
26927
- showCapacity: z51.boolean().nullable().optional(),
26928
- emptyMessage: z51.string().optional(),
26929
- className: z51.string().optional()
27530
+ buttonText: z52.string().optional(),
27531
+ showVenue: z52.boolean().nullable().optional(),
27532
+ showMap: z52.boolean().nullable().optional(),
27533
+ showCapacity: z52.boolean().nullable().optional(),
27534
+ emptyMessage: z52.string().optional(),
27535
+ className: z52.string().optional()
26930
27536
  }
26931
27537
  );
26932
- var eventCalendarDisplaySchema = z51.object({
26933
- kind: z51.literal("event-calendar"),
27538
+ var eventCalendarDisplaySchema = z52.object({
27539
+ kind: z52.literal("event-calendar"),
26934
27540
  displayMode: eventCalendarDisplayModeSchema,
26935
- className: z51.string().nullable(),
26936
- events: z51.array(publicEventSchema),
27541
+ className: z52.string().nullable(),
27542
+ events: z52.array(publicEventSchema),
26937
27543
  listLayout: eventLayoutSchema,
26938
27544
  listColumns: columnOptionSchema,
26939
- eventsPerPage: z51.string(),
26940
- loadMoreText: z51.string(),
27545
+ eventsPerPage: eventPageSizeSchema,
27546
+ paginationAction: eventListPaginationActionSchema,
26941
27547
  startOfWeek: weekStartSchema,
26942
27548
  calendarTabViews: calendarTabViewsSchema,
26943
- showFilters: z51.boolean(),
27549
+ showFilters: z52.boolean(),
26944
27550
  showCategoryFilter: filterAutoShowSchema,
26945
- showVenueFilter: z51.boolean(),
26946
- showStaffFilter: z51.boolean(),
27551
+ showVenueFilter: z52.boolean(),
27552
+ showStaffFilter: z52.boolean(),
26947
27553
  eventKind: eventBlockKindSchema2,
26948
27554
  eventSurface: eventSurfaceScopeSchema2,
26949
- filterEventPresets: z51.string().nullable(),
27555
+ filterEventPresets: z52.string().nullable(),
26950
27556
  scheduleScope: eventScheduleScopeSchema3,
26951
- filterCategoryIds: z51.string().nullable(),
26952
- filterStaffMemberId: z51.string().nullable(),
26953
- filterVenueId: z51.string().nullable(),
27557
+ filterCategoryIds: z52.string().nullable(),
27558
+ filterStaffMemberId: z52.string().nullable(),
27559
+ filterVenueId: z52.string().nullable(),
26954
27560
  buttonVariant: eventButtonVariantSchema,
26955
- buttonText: z51.string(),
26956
- showVenue: z51.boolean(),
26957
- showMap: z51.boolean(),
26958
- showCapacity: z51.boolean(),
26959
- emptyMessage: z51.string()
26960
- });
26961
- var eventCalendarHydrationSchema = z51.object({
26962
- siteId: z51.string(),
27561
+ buttonText: z52.string(),
27562
+ showVenue: z52.boolean(),
27563
+ showMap: z52.boolean(),
27564
+ showCapacity: z52.boolean(),
27565
+ emptyMessage: z52.string()
27566
+ });
27567
+ var eventCalendarHydrationSchema = z52.object({
27568
+ siteId: z52.string(),
26963
27569
  stage: previewStageSchema.optional(),
26964
- prefetchedEvents: z51.boolean(),
27570
+ prefetchedEvents: z52.boolean(),
26965
27571
  eventKind: eventBlockKindSchema2,
26966
27572
  eventSurface: eventSurfaceScopeSchema2,
26967
- filterEventPresets: z51.string().nullable(),
27573
+ filterEventPresets: z52.string().nullable(),
26968
27574
  scheduleScope: eventScheduleScopeSchema3
26969
27575
  });
26970
- var eventCalendarRenderSchema = z51.object({
27576
+ var eventCalendarRenderSchema = z52.object({
26971
27577
  display: eventCalendarDisplaySchema,
26972
27578
  hydration: eventCalendarHydrationSchema
26973
27579
  });
26974
27580
  var eventCalendarIslandMetaCodec = createZodCodec(
26975
- z51.object({
26976
- siteId: z51.string(),
26977
- apiBaseUrl: z51.string().optional(),
27581
+ z52.object({
27582
+ siteId: z52.string(),
27583
+ apiBaseUrl: z52.string().optional(),
26978
27584
  stage: previewStageSchema.optional()
26979
27585
  })
26980
27586
  );
@@ -26984,6 +27590,7 @@ var eventCalendarIslandMetaKeys = defineInteractiveIslandMetaKeys(
26984
27590
  "stage"
26985
27591
  );
26986
27592
  function buildEventCalendarDisplay(source) {
27593
+ const listLayout = source.listLayout ?? source.layout ?? "stack";
26987
27594
  return {
26988
27595
  kind: "event-calendar",
26989
27596
  displayMode: source.variant ?? source.displayMode ?? "combined",
@@ -26991,10 +27598,16 @@ function buildEventCalendarDisplay(source) {
26991
27598
  events: (source.events ?? []).slice().sort(
26992
27599
  (left, right) => new Date(left.startsAt).getTime() - new Date(right.startsAt).getTime()
26993
27600
  ),
26994
- listLayout: source.listLayout ?? source.layout ?? "stack",
27601
+ listLayout,
26995
27602
  listColumns: source.listColumns ?? source.columns ?? "3",
26996
- eventsPerPage: (source.listLayout ?? source.layout) === "compact" ? source.compactEventsPerPage ?? "10" : source.eventsPerPage ?? "12",
26997
- loadMoreText: source.loadMoreText ?? "Load more events",
27603
+ eventsPerPage: resolveEventCalendarListPageSize({
27604
+ eventsPerPage: source.eventsPerPage
27605
+ }),
27606
+ paginationAction: resolveEventListPaginationAction({
27607
+ paginationMode: source.paginationMode,
27608
+ seeAllUrl: source.seeAllUrl,
27609
+ loadMoreText: source.loadMoreText
27610
+ }),
26998
27611
  startOfWeek: source.startOfWeek ?? "monday",
26999
27612
  calendarTabViews: source.calendarTabViews ?? "both",
27000
27613
  showFilters: source.showFilters ?? true,
@@ -27011,7 +27624,7 @@ function buildEventCalendarDisplay(source) {
27011
27624
  ),
27012
27625
  filterVenueId: normalizeEventVenueId(source.filterVenueId),
27013
27626
  buttonVariant: source.buttonVariant ?? "primary",
27014
- buttonText: source.buttonText ?? "Book now",
27627
+ buttonText: source.buttonText ?? "Book",
27015
27628
  showVenue: source.showVenue ?? true,
27016
27629
  showMap: source.showMap ?? true,
27017
27630
  showCapacity: source.showCapacity ?? true,
@@ -27111,10 +27724,16 @@ var eventCalendarLayout = [
27111
27724
  layout: { $bind: { from: "content.layout" } },
27112
27725
  columns: { $bind: { from: "content.columns" } },
27113
27726
  eventsPerPage: {
27114
- $bind: { from: "content.eventsPerPage", fallback: "12" }
27727
+ $bind: { from: "content.eventsPerPage" }
27115
27728
  },
27116
- compactEventsPerPage: {
27117
- $bind: { from: "content.compactEventsPerPage", fallback: "10" }
27729
+ paginationMode: {
27730
+ $bind: { from: "content.paginationMode", fallback: "loadMore" }
27731
+ },
27732
+ seeAllUrl: {
27733
+ $bind: {
27734
+ from: "content.seeAllUrl",
27735
+ transforms: [{ id: "links.resolve" }]
27736
+ }
27118
27737
  },
27119
27738
  loadMoreText: {
27120
27739
  $bind: {
@@ -27167,7 +27786,7 @@ var eventCalendarLayout = [
27167
27786
  $bind: { from: "content.buttonVariant", fallback: "primary" }
27168
27787
  },
27169
27788
  buttonText: {
27170
- $bind: { from: "content.buttonText", fallback: "Book now" }
27789
+ $bind: { from: "content.buttonText", fallback: "Book" }
27171
27790
  },
27172
27791
  emptyMessage: { $bind: { from: "content.emptyMessage" } }
27173
27792
  })
@@ -27241,15 +27860,18 @@ var eventCalendarAdditionalFields = [
27241
27860
  {
27242
27861
  id: "eventsPerPage",
27243
27862
  type: "select",
27244
- label: "Events per page (cards)",
27245
- description: "Number of events to load initially in card layouts",
27863
+ label: "Events per page",
27864
+ description: "Number of events to load initially",
27246
27865
  required: false,
27247
27866
  multiple: false,
27248
27867
  defaultValue: "12",
27249
27868
  options: [
27250
27869
  { value: "6", label: "6" },
27870
+ { value: "10", label: "10" },
27251
27871
  { value: "12", label: "12" },
27252
- { value: "24", label: "24" }
27872
+ { value: "20", label: "20" },
27873
+ { value: "24", label: "24" },
27874
+ { value: "30", label: "30" }
27253
27875
  ],
27254
27876
  ui: {
27255
27877
  intent: "display",
@@ -27257,33 +27879,42 @@ var eventCalendarAdditionalFields = [
27257
27879
  }
27258
27880
  },
27259
27881
  {
27260
- id: "compactEventsPerPage",
27882
+ id: "paginationMode",
27261
27883
  type: "select",
27262
- label: "Events per page (compact)",
27263
- description: "Number of events to show per page in compact layout",
27884
+ label: "More events",
27885
+ description: "How to access events beyond the initial list",
27264
27886
  required: false,
27265
27887
  multiple: false,
27266
- defaultValue: "10",
27888
+ defaultValue: "loadMore",
27267
27889
  options: [
27268
- { value: "10", label: "10" },
27269
- { value: "20", label: "20" },
27270
- { value: "30", label: "30" }
27890
+ { value: "loadMore", label: "Load more button" },
27891
+ { value: "seeAllLink", label: "Link to another page" }
27271
27892
  ],
27272
27893
  ui: {
27273
27894
  intent: "display",
27274
- visibleWhen: { field: "listLayout", equals: "compact" }
27895
+ visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
27896
+ }
27897
+ },
27898
+ {
27899
+ id: "seeAllUrl",
27900
+ type: "link",
27901
+ label: "See all destination",
27902
+ required: false,
27903
+ ui: {
27904
+ intent: "display",
27905
+ visibleWhen: { field: "paginationMode", equals: "seeAllLink" }
27275
27906
  }
27276
27907
  },
27277
27908
  {
27278
27909
  id: "loadMoreText",
27279
27910
  type: "text",
27280
- label: "Load more button text",
27281
- description: "Text for the load more button",
27911
+ label: "CTA button text",
27912
+ description: "Text for the load more button or linked CTA",
27282
27913
  required: false,
27283
27914
  multiline: false,
27284
27915
  defaultValue: "Load more events",
27285
27916
  ui: {
27286
- intent: "content",
27917
+ intent: "display",
27287
27918
  visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
27288
27919
  }
27289
27920
  },
@@ -27534,51 +28165,393 @@ var eventCalendarAdditionalFields = [
27534
28165
  renderInHeader: false
27535
28166
  })
27536
28167
  ];
27537
- var eventCalendarVariants = {
27538
- combined: eventCalendarLayout[0],
27539
- month: eventCalendarLayout[0],
27540
- week: eventCalendarLayout[0],
27541
- timetable: eventCalendarLayout[0],
27542
- list: eventCalendarLayout[0]
27543
- };
27544
- var eventCalendarDerivedFields = [
27545
- {
27546
- id: "displayMode",
27547
- type: "select",
27548
- required: false,
27549
- multiple: false,
27550
- options: [
27551
- { value: "combined" },
27552
- { value: "month" },
27553
- { value: "week" },
27554
- { value: "timetable" },
27555
- { value: "list" }
27556
- ]
27557
- },
27558
- {
27559
- id: "listLayout",
27560
- type: "select",
27561
- required: false,
27562
- multiple: false,
27563
- options: eventCalendarListLayoutOptions.map((option) => ({
27564
- value: option.id
27565
- }))
27566
- }
27567
- ];
27568
- var eventCalendarContentShape = {
27569
- additionalFields: eventCalendarDerivedFields,
27570
- variants: eventCalendarVariants,
27571
- skipSectionStyles: true
27572
- };
27573
- var eventCalendarConfig = {
27574
- id: "block.event-calendar",
27575
- version: "3.6.0",
27576
- title: "Event Calendar",
28168
+ var eventCalendarVariants = {
28169
+ combined: eventCalendarLayout[0],
28170
+ month: eventCalendarLayout[0],
28171
+ week: eventCalendarLayout[0],
28172
+ timetable: eventCalendarLayout[0],
28173
+ list: eventCalendarLayout[0]
28174
+ };
28175
+ var eventCalendarDerivedFields = [
28176
+ {
28177
+ id: "displayMode",
28178
+ type: "select",
28179
+ required: false,
28180
+ multiple: false,
28181
+ options: [
28182
+ { value: "combined" },
28183
+ { value: "month" },
28184
+ { value: "week" },
28185
+ { value: "timetable" },
28186
+ { value: "list" }
28187
+ ]
28188
+ },
28189
+ {
28190
+ id: "listLayout",
28191
+ type: "select",
28192
+ required: false,
28193
+ multiple: false,
28194
+ options: eventCalendarListLayoutOptions.map((option) => ({
28195
+ value: option.id
28196
+ }))
28197
+ }
28198
+ ];
28199
+ var eventCalendarContentShape = {
28200
+ additionalFields: eventCalendarDerivedFields,
28201
+ variants: eventCalendarVariants,
28202
+ skipSectionStyles: true
28203
+ };
28204
+ var eventCalendarConfig = {
28205
+ id: "block.event-calendar",
28206
+ version: "3.6.0",
28207
+ title: "Event Calendar",
28208
+ titleSource: "heading",
28209
+ description: "Display events with calendar, list, or combined views with filtering",
28210
+ // Preserve legacy section styles field configuration (renderInHeader: false).
28211
+ skipSectionStyles: true,
28212
+ additionalFields: eventCalendarAdditionalFields,
28213
+ styleTokens: { background: "surface", typography: "body", spacing: "md" },
28214
+ behaviours: {
28215
+ supportsThemeSwitching: true,
28216
+ inlineEditing: false,
28217
+ animation: false,
28218
+ paletteHidden: false
28219
+ },
28220
+ category: "interactive",
28221
+ tags: [
28222
+ "events",
28223
+ "calendar",
28224
+ "month",
28225
+ "week",
28226
+ "schedule",
28227
+ "interactive",
28228
+ "list",
28229
+ "filter"
28230
+ ],
28231
+ icon: "CalendarDays",
28232
+ layout: eventCalendarLayout,
28233
+ variants: eventCalendarVariants,
28234
+ defaultVariant: "combined",
28235
+ variantOptions: {
28236
+ combined: { label: "Combined" },
28237
+ month: { label: "Month" },
28238
+ week: { label: "Week" },
28239
+ timetable: { label: "Timetable" },
28240
+ list: { label: "List" }
28241
+ }
28242
+ };
28243
+ var eventCalendarManifest = createBlockManifestWithContentShape(
28244
+ eventCalendarConfig,
28245
+ eventCalendarContentShape
28246
+ );
28247
+ var eventCalendarBlockDefinition = {
28248
+ manifest: eventCalendarManifest,
28249
+ normalizeContent: normalizeEventCalendarContent,
28250
+ dataSchemas: {
28251
+ events: publicEventsArraySchema.optional()
28252
+ },
28253
+ dataLoaders: {
28254
+ events: {
28255
+ endpoint: "listPublicEvents",
28256
+ params: {
28257
+ siteId: { $bind: { from: "$root.siteId" } },
28258
+ // Pre-fetch events - limit varies by mode but default to high for calendar
28259
+ limit: 100,
28260
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
28261
+ detailLevel: "listing",
28262
+ readProfile: { $bind: { from: "content.variant", fallback: "listing-card" } },
28263
+ // Pass filter params if configured
28264
+ kind: { $bind: { from: "content.kind" } },
28265
+ eventSurface: { $bind: { from: "content.eventSurface" } },
28266
+ eventPresets: {
28267
+ $bind: {
28268
+ from: "content.filterEventPresets",
28269
+ transforms: [{ id: "value.csv" }]
28270
+ }
28271
+ },
28272
+ scheduleScope: { $bind: { from: "content.scheduleScope" } },
28273
+ categoryIds: { $bind: { from: "content.filterCategoryIds" } },
28274
+ staffMemberId: { $bind: { from: "content.filterStaffMemberId" } },
28275
+ venueId: { $bind: { from: "content.filterVenueId" } }
28276
+ },
28277
+ mode: "server"
28278
+ }
28279
+ },
28280
+ runtime: eventCalendarBlockRuntime
28281
+ };
28282
+
28283
+ // ../blocks/src/system/blocks/offerings-preview/index.ts
28284
+ import { z as z53 } from "zod";
28285
+
28286
+ // ../blocks/src/system/blocks/offerings-preview/model.ts
28287
+ var OFFERINGS_PREVIEW_DEFAULT_ITEM_LIMIT = "3";
28288
+ var OFFERINGS_PREVIEW_DEFAULT_BUTTON_TEXT = "Book";
28289
+ var OFFERINGS_PREVIEW_DEFAULT_EMPTY_MESSAGE = "Nothing scheduled just yet.";
28290
+ var OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS = [
28291
+ {
28292
+ preset: "class",
28293
+ sourceKey: "eventPreset:class",
28294
+ dataKey: "classEvents",
28295
+ label: "Classes"
28296
+ },
28297
+ {
28298
+ preset: "workshop",
28299
+ sourceKey: "eventPreset:workshop",
28300
+ dataKey: "workshopEvents",
28301
+ label: "Workshops"
28302
+ },
28303
+ {
28304
+ preset: "retreat",
28305
+ sourceKey: "eventPreset:retreat",
28306
+ dataKey: "retreatEvents",
28307
+ label: "Retreats"
28308
+ },
28309
+ {
28310
+ preset: "performance",
28311
+ sourceKey: "eventPreset:performance",
28312
+ dataKey: "performanceEvents",
28313
+ label: "Performances"
28314
+ }
28315
+ ];
28316
+ var OFFERINGS_PREVIEW_EVENT_PRESETS = OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => definition.preset);
28317
+ var OFFERINGS_PREVIEW_AUTHORABLE_SOURCE_KEYS = [
28318
+ ...OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => definition.sourceKey),
28319
+ "course"
28320
+ ];
28321
+ var eventPresetSourceByKey = Object.fromEntries(
28322
+ OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [
28323
+ definition.sourceKey,
28324
+ { kind: "eventPreset", preset: definition.preset }
28325
+ ])
28326
+ );
28327
+
28328
+ // ../blocks/src/system/blocks/offerings-preview/index.ts
28329
+ var publicRouteCandidatesSchema = z53.object({
28330
+ routes: z53.array(z53.object({
28331
+ entityId: z53.string(),
28332
+ path: z53.string(),
28333
+ title: z53.string(),
28334
+ kind: z53.enum(["page", "content"]),
28335
+ contentTypeKey: z53.string().nullable().optional()
28336
+ }))
28337
+ });
28338
+ var groupOverrideFields = [
28339
+ {
28340
+ id: "sourceKey",
28341
+ type: "select",
28342
+ label: "Offering",
28343
+ required: true,
28344
+ multiple: false,
28345
+ options: [
28346
+ ...OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => ({
28347
+ value: definition.sourceKey,
28348
+ label: definition.label
28349
+ })),
28350
+ { value: "course", label: "Courses" }
28351
+ ],
28352
+ ui: { intent: "behavior" }
28353
+ },
28354
+ {
28355
+ id: "title",
28356
+ type: "text",
28357
+ label: "Title",
28358
+ required: false,
28359
+ multiline: false,
28360
+ maxLength: 80,
28361
+ ui: { intent: "content" }
28362
+ },
28363
+ {
28364
+ id: "intro",
28365
+ type: "text",
28366
+ label: "Intro",
28367
+ required: false,
28368
+ multiline: true,
28369
+ maxLength: 220,
28370
+ ui: { intent: "content" }
28371
+ },
28372
+ {
28373
+ id: "hidden",
28374
+ type: "boolean",
28375
+ label: "Hide this card",
28376
+ required: false,
28377
+ defaultValue: false,
28378
+ ui: { intent: "display" }
28379
+ },
28380
+ {
28381
+ id: "presentation",
28382
+ type: "select",
28383
+ label: "Items",
28384
+ required: false,
28385
+ multiple: false,
28386
+ defaultValue: "compact-list",
28387
+ options: [
28388
+ { value: "compact-list", label: "Compact list" },
28389
+ { value: "single-card", label: "Single card" }
28390
+ ],
28391
+ ui: { intent: "display" }
28392
+ },
28393
+ {
28394
+ id: "ctaMode",
28395
+ type: "select",
28396
+ label: "Card link",
28397
+ required: false,
28398
+ multiple: false,
28399
+ defaultValue: "auto",
28400
+ options: [
28401
+ { value: "auto", label: "Auto" },
28402
+ { value: "custom", label: "Custom link" },
28403
+ { value: "hidden", label: "Hidden" }
28404
+ ],
28405
+ ui: { intent: "behavior" }
28406
+ },
28407
+ {
28408
+ id: "ctaLabel",
28409
+ type: "text",
28410
+ label: "Card link label",
28411
+ required: false,
28412
+ multiline: false,
28413
+ maxLength: 40,
28414
+ ui: { intent: "content" }
28415
+ },
28416
+ {
28417
+ id: "ctaHref",
28418
+ type: "text",
28419
+ label: "Custom card link",
28420
+ required: false,
28421
+ multiline: false,
28422
+ maxLength: 160,
28423
+ ui: { intent: "behavior" }
28424
+ }
28425
+ ];
28426
+ var offeringsPreviewFields = [
28427
+ ...sectionHeaderFields("Offerings"),
28428
+ {
28429
+ id: "itemLimit",
28430
+ type: "select",
28431
+ label: "Items per card",
28432
+ required: false,
28433
+ multiple: false,
28434
+ defaultValue: OFFERINGS_PREVIEW_DEFAULT_ITEM_LIMIT,
28435
+ options: [
28436
+ { value: "1", label: "1 item" },
28437
+ { value: "2", label: "2 items" },
28438
+ { value: "3", label: "3 items" },
28439
+ { value: "4", label: "4 items" },
28440
+ { value: "5", label: "5 items" },
28441
+ { value: "6", label: "6 items" }
28442
+ ],
28443
+ ui: { intent: "display" }
28444
+ },
28445
+ {
28446
+ id: "groupOverrides",
28447
+ type: "repeater",
28448
+ label: "Card overrides",
28449
+ description: "Edit card copy, order, or visibility for enabled offering presets.",
28450
+ required: false,
28451
+ maxItems: 5,
28452
+ itemLabel: "Offering card",
28453
+ itemLabelSource: "title",
28454
+ allowConversion: false,
28455
+ ui: { intent: "content" },
28456
+ schema: { fields: groupOverrideFields }
28457
+ },
28458
+ {
28459
+ id: "buttonVariant",
28460
+ type: "select",
28461
+ label: "Item button style",
28462
+ required: false,
28463
+ multiple: false,
28464
+ defaultValue: "primary",
28465
+ options: [
28466
+ { value: "primary", label: "Primary" },
28467
+ { value: "secondary", label: "Secondary" },
28468
+ { value: "outline", label: "Outline" },
28469
+ { value: "link", label: "Link" }
28470
+ ],
28471
+ ui: { intent: "display" }
28472
+ },
28473
+ {
28474
+ id: "buttonText",
28475
+ type: "text",
28476
+ label: "Item button text",
28477
+ required: false,
28478
+ multiline: false,
28479
+ defaultValue: OFFERINGS_PREVIEW_DEFAULT_BUTTON_TEXT,
28480
+ maxLength: 40,
28481
+ ui: { intent: "content" }
28482
+ },
28483
+ {
28484
+ id: "emptyMessage",
28485
+ type: "text",
28486
+ label: "Empty card message",
28487
+ required: false,
28488
+ multiline: false,
28489
+ defaultValue: OFFERINGS_PREVIEW_DEFAULT_EMPTY_MESSAGE,
28490
+ maxLength: 120,
28491
+ ui: { intent: "content" }
28492
+ },
28493
+ cardStylesField({
28494
+ id: "_cardStyles",
28495
+ label: "Offering card styles"
28496
+ }),
28497
+ sectionStylesField({
28498
+ id: "_sectionStyles",
28499
+ label: "Section styles",
28500
+ renderInHeader: false
28501
+ })
28502
+ ];
28503
+ var offeringsPreviewEventDataBindings = Object.fromEntries(
28504
+ OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [
28505
+ definition.dataKey,
28506
+ { $bind: { from: `data.${definition.dataKey}` } }
28507
+ ])
28508
+ );
28509
+ var offeringsPreviewLayout = [
28510
+ styledSection({
28511
+ children: sectionContainer([
28512
+ text(
28513
+ { as: "h2", className: "rb-text-center" },
28514
+ bind("content.heading"),
28515
+ when("content.heading")
28516
+ ),
28517
+ richText(
28518
+ { className: "rb-prose rb-max-w-none" },
28519
+ bind("content.description"),
28520
+ when("content.description")
28521
+ ),
28522
+ el("offerings-preview", {
28523
+ bookingOfferingPresets: {
28524
+ $bind: { from: "$root.bookingOfferingPresets", fallback: [] }
28525
+ },
28526
+ groupOverrides: { $bind: { from: "content.groupOverrides", fallback: [] } },
28527
+ cardStyles: { $bind: { from: "content._cardStyles" } },
28528
+ itemLimit: { $bind: { from: "content.itemLimit", fallback: OFFERINGS_PREVIEW_DEFAULT_ITEM_LIMIT } },
28529
+ buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
28530
+ buttonText: { $bind: { from: "content.buttonText", fallback: OFFERINGS_PREVIEW_DEFAULT_BUTTON_TEXT } },
28531
+ emptyMessage: {
28532
+ $bind: {
28533
+ from: "content.emptyMessage",
28534
+ fallback: OFFERINGS_PREVIEW_DEFAULT_EMPTY_MESSAGE
28535
+ }
28536
+ },
28537
+ previewStage: { $bind: { from: "$root.previewStage", fallback: "published" } },
28538
+ routeCandidates: { $bind: { from: "data.routeCandidates" } },
28539
+ courses: { $bind: { from: "data.courses" } },
28540
+ ...offeringsPreviewEventDataBindings
28541
+ })
28542
+ ], { gap: "lg" }),
28543
+ baseClass: "",
28544
+ spacing: "comfortable"
28545
+ })
28546
+ ];
28547
+ var offeringsPreviewConfig = {
28548
+ id: "block.offerings-preview",
28549
+ version: "1.0.0",
28550
+ title: "Offerings Preview",
27577
28551
  titleSource: "heading",
27578
- description: "Display events with calendar, list, or combined views with filtering",
27579
- // Preserve legacy section styles field configuration (renderInHeader: false).
28552
+ description: "Show enabled offering presets as compact cards",
27580
28553
  skipSectionStyles: true,
27581
- additionalFields: eventCalendarAdditionalFields,
28554
+ additionalFields: offeringsPreviewFields,
27582
28555
  styleTokens: { background: "surface", typography: "body", spacing: "md" },
27583
28556
  behaviours: {
27584
28557
  supportsThemeSwitching: true,
@@ -27586,71 +28559,68 @@ var eventCalendarConfig = {
27586
28559
  animation: false,
27587
28560
  paletteHidden: false
27588
28561
  },
27589
- category: "interactive",
27590
- tags: [
27591
- "events",
27592
- "calendar",
27593
- "month",
27594
- "week",
27595
- "schedule",
27596
- "interactive",
27597
- "list",
27598
- "filter"
27599
- ],
27600
- icon: "CalendarDays",
27601
- layout: eventCalendarLayout,
27602
- variants: eventCalendarVariants,
27603
- defaultVariant: "combined",
27604
- variantOptions: {
27605
- combined: { label: "Combined" },
27606
- month: { label: "Month" },
27607
- week: { label: "Week" },
27608
- timetable: { label: "Timetable" },
27609
- list: { label: "List" }
27610
- }
28562
+ category: "content",
28563
+ tags: ["offerings", "events", "classes", "workshops", "retreats"],
28564
+ icon: "PanelsTopLeft",
28565
+ layout: offeringsPreviewLayout
27611
28566
  };
27612
- var eventCalendarManifest = createBlockManifestWithContentShape(
27613
- eventCalendarConfig,
27614
- eventCalendarContentShape
28567
+ var offeringsPreviewManifest = createBlockManifest(offeringsPreviewConfig);
28568
+ var optionalPublicEventsArraySchema = publicEventsArraySchema.optional();
28569
+ var offeringsPreviewEventDataSchemas = Object.fromEntries(
28570
+ OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [
28571
+ definition.dataKey,
28572
+ optionalPublicEventsArraySchema
28573
+ ])
27615
28574
  );
27616
- var eventCalendarBlockDefinition = {
27617
- manifest: eventCalendarManifest,
27618
- normalizeContent: normalizeEventCalendarContent,
28575
+ var offeringsPreviewEventDataLoaders = Object.fromEntries(
28576
+ OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [
28577
+ definition.dataKey,
28578
+ eventPresetLoader(definition.preset)
28579
+ ])
28580
+ );
28581
+ var offeringsPreviewBlockDefinition = {
28582
+ manifest: offeringsPreviewManifest,
27619
28583
  dataSchemas: {
27620
- events: publicEventsArraySchema.optional()
28584
+ ...offeringsPreviewEventDataSchemas,
28585
+ routeCandidates: publicRouteCandidatesSchema.optional(),
28586
+ courses: publicCoursesArraySchema.optional()
27621
28587
  },
27622
28588
  dataLoaders: {
27623
- events: {
27624
- endpoint: "listPublicEvents",
28589
+ ...offeringsPreviewEventDataLoaders,
28590
+ routeCandidates: {
28591
+ endpoint: "listPublicRouteCandidates",
28592
+ params: {},
28593
+ mode: "server"
28594
+ },
28595
+ courses: {
28596
+ endpoint: "listPublicCourses",
27625
28597
  params: {
27626
28598
  siteId: { $bind: { from: "$root.siteId" } },
27627
- // Pre-fetch events - limit varies by mode but default to high for calendar
27628
- limit: 100,
27629
- stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
27630
- detailLevel: "listing",
27631
- readProfile: { $bind: { from: "content.variant", fallback: "listing-card" } },
27632
- // Pass filter params if configured
27633
- kind: { $bind: { from: "content.kind" } },
27634
- eventSurface: { $bind: { from: "content.eventSurface" } },
27635
- eventPresets: {
27636
- $bind: {
27637
- from: "content.filterEventPresets",
27638
- transforms: [{ id: "value.csv" }]
27639
- }
27640
- },
27641
- scheduleScope: { $bind: { from: "content.scheduleScope" } },
27642
- categoryIds: { $bind: { from: "content.filterCategoryIds" } },
27643
- staffMemberId: { $bind: { from: "content.filterStaffMemberId" } },
27644
- venueId: { $bind: { from: "content.filterVenueId" } }
28599
+ limit: { $bind: { from: "content.itemLimit", fallback: OFFERINGS_PREVIEW_DEFAULT_ITEM_LIMIT } },
28600
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } }
27645
28601
  },
27646
28602
  mode: "server"
27647
28603
  }
27648
- },
27649
- runtime: eventCalendarBlockRuntime
28604
+ }
27650
28605
  };
28606
+ function eventPresetLoader(preset2) {
28607
+ return {
28608
+ endpoint: "listPublicEvents",
28609
+ params: {
28610
+ siteId: { $bind: { from: "$root.siteId" } },
28611
+ limit: { $bind: { from: "content.itemLimit", fallback: OFFERINGS_PREVIEW_DEFAULT_ITEM_LIMIT } },
28612
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
28613
+ detailLevel: "listing",
28614
+ readProfile: "listing-card",
28615
+ kind: "events",
28616
+ eventPresets: preset2
28617
+ },
28618
+ mode: "server"
28619
+ };
28620
+ }
27651
28621
 
27652
28622
  // ../blocks/src/system/blocks/embed.ts
27653
- import { z as z52 } from "zod";
28623
+ import { z as z54 } from "zod";
27654
28624
  var embedFields = [
27655
28625
  // Section heading
27656
28626
  parseFieldDefinition({
@@ -27785,7 +28755,7 @@ var embedFields = [
27785
28755
  ui: { intent: "display" }
27786
28756
  })
27787
28757
  ];
27788
- var embedLayout = styledSection({
28758
+ var embedLayout2 = styledSection({
27789
28759
  children: sectionContainer([
27790
28760
  // Heading
27791
28761
  text(
@@ -27873,7 +28843,7 @@ var embedManifest = createBlockManifest({
27873
28843
  category: "content",
27874
28844
  titleSource: "heading",
27875
28845
  additionalFields: embedFields,
27876
- layout: embedLayout,
28846
+ layout: embedLayout2,
27877
28847
  description: "Embed content entries from any content type. Sites provide custom layouts via block overrides.",
27878
28848
  tags: ["embed", "content", "dynamic", "collection", "entries", "listing"],
27879
28849
  icon: "LayoutList",
@@ -27881,18 +28851,18 @@ var embedManifest = createBlockManifest({
27881
28851
  spacing: "lg"
27882
28852
  }
27883
28853
  });
27884
- var embedEntrySchema = z52.object({
27885
- id: z52.string(),
27886
- identifier: z52.string(),
27887
- title: z52.string(),
27888
- slug: z52.string().nullable().optional(),
27889
- content: z52.record(z52.string(), z52.unknown()).optional(),
27890
- publishedAt: z52.string().nullable().optional()
28854
+ var embedEntrySchema = z54.object({
28855
+ id: z54.string(),
28856
+ identifier: z54.string(),
28857
+ title: z54.string(),
28858
+ slug: z54.string().nullable().optional(),
28859
+ content: z54.record(z54.string(), z54.unknown()).optional(),
28860
+ publishedAt: z54.string().nullable().optional()
27891
28861
  });
27892
28862
  var embedBlockDefinition = {
27893
28863
  manifest: embedManifest,
27894
28864
  dataSchemas: {
27895
- entries: z52.array(embedEntrySchema).optional()
28865
+ entries: z54.array(embedEntrySchema).optional()
27896
28866
  },
27897
28867
  dataLoaders: {
27898
28868
  entries: {
@@ -29067,58 +30037,58 @@ var fileDownloadBlockDefinition = {
29067
30037
  };
29068
30038
 
29069
30039
  // ../blocks/src/system/blocks/shop.ts
29070
- import { z as z56 } from "zod";
30040
+ import { z as z58 } from "zod";
29071
30041
 
29072
30042
  // ../blocks/src/system/runtime/nodes/shop.interactive.ts
29073
- import { z as z55 } from "zod";
30043
+ import { z as z57 } from "zod";
29074
30044
 
29075
30045
  // ../blocks/src/system/blocks/products/shared.ts
29076
- import { z as z53 } from "zod";
29077
- var publicProductVariantSchema = z53.object({
29078
- id: z53.string(),
29079
- title: z53.string(),
29080
- sku: z53.string().nullable(),
29081
- priceCents: z53.number(),
29082
- stockQuantity: z53.number().nullable(),
29083
- soldOut: z53.boolean()
29084
- });
29085
- var publicProductSchema = z53.object({
29086
- id: z53.string(),
29087
- contentEntryId: z53.string().nullable(),
29088
- title: z53.string(),
29089
- slug: z53.string(),
29090
- path: z53.string().nullable(),
29091
- status: z53.enum(["draft", "active"]),
29092
- priceCents: z53.number(),
29093
- currency: z53.string(),
29094
- productType: z53.enum(["physical", "digital"]),
29095
- requiresShipping: z53.boolean(),
29096
- hasVariants: z53.boolean(),
29097
- trackInventory: z53.boolean(),
29098
- soldOut: z53.boolean(),
29099
- category: z53.object({
29100
- id: z53.string(),
29101
- name: z53.string(),
29102
- slug: z53.string()
30046
+ import { z as z55 } from "zod";
30047
+ var publicProductVariantSchema = z55.object({
30048
+ id: z55.string(),
30049
+ title: z55.string(),
30050
+ sku: z55.string().nullable(),
30051
+ priceCents: z55.number(),
30052
+ stockQuantity: z55.number().nullable(),
30053
+ soldOut: z55.boolean()
30054
+ });
30055
+ var publicProductSchema = z55.object({
30056
+ id: z55.string(),
30057
+ contentEntryId: z55.string().nullable(),
30058
+ title: z55.string(),
30059
+ slug: z55.string(),
30060
+ path: z55.string().nullable(),
30061
+ status: z55.enum(["draft", "active"]),
30062
+ priceCents: z55.number(),
30063
+ currency: z55.string(),
30064
+ productType: z55.enum(["physical", "digital"]),
30065
+ requiresShipping: z55.boolean(),
30066
+ hasVariants: z55.boolean(),
30067
+ trackInventory: z55.boolean(),
30068
+ soldOut: z55.boolean(),
30069
+ category: z55.object({
30070
+ id: z55.string(),
30071
+ name: z55.string(),
30072
+ slug: z55.string()
29103
30073
  }).nullable(),
29104
- summary: z53.string().nullable(),
29105
- badges: z53.array(z53.string()),
29106
- ctaLabel: z53.string().nullable(),
29107
- body: z53.unknown().nullable(),
29108
- gallery: z53.array(
29109
- z53.object({
29110
- url: z53.string(),
29111
- alt: z53.string().nullable()
30074
+ summary: z55.string().nullable(),
30075
+ badges: z55.array(z55.string()),
30076
+ ctaLabel: z55.string().nullable(),
30077
+ body: z55.unknown().nullable(),
30078
+ gallery: z55.array(
30079
+ z55.object({
30080
+ url: z55.string(),
30081
+ alt: z55.string().nullable()
29112
30082
  })
29113
30083
  ),
29114
- variants: z53.array(publicProductVariantSchema)
30084
+ variants: z55.array(publicProductVariantSchema)
29115
30085
  });
29116
- var publicProductsResponseSchema = z53.object({
29117
- products: z53.array(publicProductSchema)
30086
+ var publicProductsResponseSchema = z55.object({
30087
+ products: z55.array(publicProductSchema)
29118
30088
  });
29119
30089
 
29120
30090
  // ../blocks/src/system/runtime/api/creditProducts.ts
29121
- function assertNever2(value) {
30091
+ function assertNever3(value) {
29122
30092
  throw new Error(`Unhandled credit product case: ${String(value)}`);
29123
30093
  }
29124
30094
  function useCasesFromModules(modules) {
@@ -29151,7 +30121,7 @@ function getCreditProductCreditUnit(useCase) {
29151
30121
  perCreditSuffix: "credit"
29152
30122
  };
29153
30123
  default:
29154
- return assertNever2(useCase);
30124
+ return assertNever3(useCase);
29155
30125
  }
29156
30126
  }
29157
30127
  function deriveCreditProductLabels(products, options = {}) {
@@ -29178,27 +30148,27 @@ function deriveCreditProductLabels(products, options = {}) {
29178
30148
  }
29179
30149
 
29180
30150
  // ../blocks/src/system/runtime/nodes/shop-commerce.shared.ts
29181
- import { z as z54 } from "zod";
29182
- var storedProductCartItemSchema = z54.object({
29183
- kind: z54.literal("product"),
29184
- productId: z54.string().min(1),
29185
- productCategoryId: z54.string().min(1).optional().nullable(),
29186
- variantId: z54.string().min(1).optional().nullable(),
29187
- title: z54.string().min(1),
29188
- variantTitle: z54.string().optional().nullable(),
29189
- quantity: z54.number().finite(),
29190
- unitPriceCents: z54.number().finite(),
29191
- currency: z54.string().min(1),
29192
- imageUrl: z54.string().optional().nullable(),
29193
- soldOut: z54.boolean().optional()
29194
- });
29195
- var storedPassCartItemSchema = z54.object({
29196
- kind: z54.literal("pass"),
29197
- passId: z54.string().min(1),
29198
- title: z54.string().min(1),
29199
- quantity: z54.number().finite().optional(),
29200
- unitPriceCents: z54.number().finite(),
29201
- currency: z54.string().min(1)
30151
+ import { z as z56 } from "zod";
30152
+ var storedProductCartItemSchema = z56.object({
30153
+ kind: z56.literal("product"),
30154
+ productId: z56.string().min(1),
30155
+ productCategoryId: z56.string().min(1).optional().nullable(),
30156
+ variantId: z56.string().min(1).optional().nullable(),
30157
+ title: z56.string().min(1),
30158
+ variantTitle: z56.string().optional().nullable(),
30159
+ quantity: z56.number().finite(),
30160
+ unitPriceCents: z56.number().finite(),
30161
+ currency: z56.string().min(1),
30162
+ imageUrl: z56.string().optional().nullable(),
30163
+ soldOut: z56.boolean().optional()
30164
+ });
30165
+ var storedPassCartItemSchema = z56.object({
30166
+ kind: z56.literal("pass"),
30167
+ passId: z56.string().min(1),
30168
+ title: z56.string().min(1),
30169
+ quantity: z56.number().finite().optional(),
30170
+ unitPriceCents: z56.number().finite(),
30171
+ currency: z56.string().min(1)
29202
30172
  });
29203
30173
  function deriveCommerceCheckoutState(state) {
29204
30174
  if (state.items.length === 0) {
@@ -29437,219 +30407,219 @@ function formatValidity(days) {
29437
30407
  }
29438
30408
 
29439
30409
  // ../blocks/src/system/runtime/nodes/shop.interactive.ts
29440
- var shopModeSchema = z55.enum(["passes-memberships", "product-list", "product-detail", "cart", "checkout"]);
29441
- var contentEntrySchema3 = z55.object({
29442
- id: z55.string().nullable().optional(),
29443
- slug: z55.string().nullable().optional()
30410
+ var shopModeSchema = z57.enum(["passes-memberships", "product-list", "product-detail", "cart", "checkout"]);
30411
+ var contentEntrySchema3 = z57.object({
30412
+ id: z57.string().nullable().optional(),
30413
+ slug: z57.string().nullable().optional()
29444
30414
  }).nullable();
29445
- var shopSourceSchema = z55.object({
29446
- className: z55.string().nullable().optional(),
30415
+ var shopSourceSchema = z57.object({
30416
+ className: z57.string().nullable().optional(),
29447
30417
  mode: shopModeSchema.optional(),
29448
- heading: z55.string().nullable().optional(),
29449
- productSlug: z55.string().nullable().optional(),
29450
- showPasses: z55.boolean().optional(),
29451
- showMemberships: z55.boolean().optional(),
29452
- layout: z55.enum(["grid", "list"]).optional(),
29453
- columns: z55.string().optional(),
29454
- showDescriptions: z55.boolean().optional(),
29455
- showSummary: z55.boolean().optional(),
29456
- showBody: z55.boolean().optional(),
29457
- showBadges: z55.boolean().optional(),
29458
- showPrices: z55.boolean().optional(),
29459
- showValidityPeriod: z55.boolean().optional(),
29460
- showPricePerCredit: z55.boolean().nullable().optional(),
29461
- passesHeading: z55.string().optional(),
29462
- membershipsHeading: z55.string().optional(),
29463
- buyButtonText: z55.string().optional(),
29464
- addButtonText: z55.string().optional(),
29465
- passPurchaseMode: z55.enum(["add_to_cart", "buy_now"]).optional(),
29466
- subscribeButtonText: z55.string().optional(),
29467
- emptyStateText: z55.string().optional(),
29468
- checkoutButtonText: z55.string().optional(),
29469
- clearButtonText: z55.string().optional(),
29470
- submitButtonText: z55.string().optional(),
30418
+ heading: z57.string().nullable().optional(),
30419
+ productSlug: z57.string().nullable().optional(),
30420
+ showPasses: z57.boolean().optional(),
30421
+ showMemberships: z57.boolean().optional(),
30422
+ layout: z57.enum(["grid", "list"]).optional(),
30423
+ columns: z57.string().optional(),
30424
+ showDescriptions: z57.boolean().optional(),
30425
+ showSummary: z57.boolean().optional(),
30426
+ showBody: z57.boolean().optional(),
30427
+ showBadges: z57.boolean().optional(),
30428
+ showPrices: z57.boolean().optional(),
30429
+ showValidityPeriod: z57.boolean().optional(),
30430
+ showPricePerCredit: z57.boolean().nullable().optional(),
30431
+ passesHeading: z57.string().optional(),
30432
+ membershipsHeading: z57.string().optional(),
30433
+ buyButtonText: z57.string().optional(),
30434
+ addButtonText: z57.string().optional(),
30435
+ passPurchaseMode: z57.enum(["add_to_cart", "buy_now"]).optional(),
30436
+ subscribeButtonText: z57.string().optional(),
30437
+ emptyStateText: z57.string().optional(),
30438
+ checkoutButtonText: z57.string().optional(),
30439
+ clearButtonText: z57.string().optional(),
30440
+ submitButtonText: z57.string().optional(),
29471
30441
  contentEntry: contentEntrySchema3.optional(),
29472
- passes: z55.array(publicPassProductSchema).nullable().optional(),
29473
- memberships: z55.array(publicMembershipProductSchema).nullable().optional(),
29474
- products: z55.array(publicProductSchema).nullable().optional(),
29475
- siteId: z55.string().optional(),
29476
- apiBaseUrl: z55.string().optional(),
30442
+ passes: z57.array(publicPassProductSchema).nullable().optional(),
30443
+ memberships: z57.array(publicMembershipProductSchema).nullable().optional(),
30444
+ products: z57.array(publicProductSchema).nullable().optional(),
30445
+ siteId: z57.string().optional(),
30446
+ apiBaseUrl: z57.string().optional(),
29477
30447
  stage: previewStageSchema.optional()
29478
30448
  });
29479
- var productVariantOptionDisplaySchema = z55.object({
29480
- id: z55.string(),
29481
- label: z55.string(),
29482
- soldOut: z55.boolean()
29483
- });
29484
- var productCardDisplaySchema = z55.object({
29485
- productId: z55.string(),
29486
- title: z55.string(),
29487
- path: z55.string().nullable(),
29488
- summary: z55.string().nullable(),
29489
- priceLabel: z55.string().nullable(),
29490
- badges: z55.array(z55.string()),
29491
- image: z55.object({
29492
- url: z55.string(),
29493
- alt: z55.string().nullable()
30449
+ var productVariantOptionDisplaySchema = z57.object({
30450
+ id: z57.string(),
30451
+ label: z57.string(),
30452
+ soldOut: z57.boolean()
30453
+ });
30454
+ var productCardDisplaySchema = z57.object({
30455
+ productId: z57.string(),
30456
+ title: z57.string(),
30457
+ path: z57.string().nullable(),
30458
+ summary: z57.string().nullable(),
30459
+ priceLabel: z57.string().nullable(),
30460
+ badges: z57.array(z57.string()),
30461
+ image: z57.object({
30462
+ url: z57.string(),
30463
+ alt: z57.string().nullable()
29494
30464
  }).nullable(),
29495
- variantOptions: z55.array(productVariantOptionDisplaySchema),
29496
- selectedVariantId: z55.string().nullable(),
29497
- selectionLabel: z55.string(),
29498
- actionLabel: z55.string(),
29499
- soldOut: z55.boolean()
29500
- });
29501
- var productListDisplaySchema = z55.object({
29502
- kind: z55.literal("product-list"),
29503
- state: z55.enum(["empty", "ready"]),
29504
- heading: z55.string().nullable(),
29505
- className: z55.string().nullable(),
29506
- layout: z55.enum(["grid", "list"]),
29507
- columns: z55.string(),
29508
- emptyMessage: z55.string(),
29509
- cards: z55.array(productCardDisplaySchema)
29510
- });
29511
- var productDetailDisplaySchema = z55.discriminatedUnion("state", [
29512
- z55.object({
29513
- kind: z55.literal("product-detail"),
29514
- state: z55.literal("empty"),
29515
- heading: z55.string().nullable(),
29516
- className: z55.string().nullable(),
29517
- emptyMessage: z55.string()
30465
+ variantOptions: z57.array(productVariantOptionDisplaySchema),
30466
+ selectedVariantId: z57.string().nullable(),
30467
+ selectionLabel: z57.string(),
30468
+ actionLabel: z57.string(),
30469
+ soldOut: z57.boolean()
30470
+ });
30471
+ var productListDisplaySchema = z57.object({
30472
+ kind: z57.literal("product-list"),
30473
+ state: z57.enum(["empty", "ready"]),
30474
+ heading: z57.string().nullable(),
30475
+ className: z57.string().nullable(),
30476
+ layout: z57.enum(["grid", "list"]),
30477
+ columns: z57.string(),
30478
+ emptyMessage: z57.string(),
30479
+ cards: z57.array(productCardDisplaySchema)
30480
+ });
30481
+ var productDetailDisplaySchema = z57.discriminatedUnion("state", [
30482
+ z57.object({
30483
+ kind: z57.literal("product-detail"),
30484
+ state: z57.literal("empty"),
30485
+ heading: z57.string().nullable(),
30486
+ className: z57.string().nullable(),
30487
+ emptyMessage: z57.string()
29518
30488
  }),
29519
- z55.object({
29520
- kind: z55.literal("product-detail"),
29521
- state: z55.literal("ready"),
29522
- heading: z55.string().nullable(),
29523
- className: z55.string().nullable(),
29524
- title: z55.string(),
29525
- priceLabel: z55.string(),
29526
- summary: z55.string().nullable(),
29527
- badges: z55.array(z55.string()),
29528
- categoryLabel: z55.string().nullable(),
29529
- gallery: z55.array(z55.object({
29530
- url: z55.string(),
29531
- alt: z55.string().nullable()
30489
+ z57.object({
30490
+ kind: z57.literal("product-detail"),
30491
+ state: z57.literal("ready"),
30492
+ heading: z57.string().nullable(),
30493
+ className: z57.string().nullable(),
30494
+ title: z57.string(),
30495
+ priceLabel: z57.string(),
30496
+ summary: z57.string().nullable(),
30497
+ badges: z57.array(z57.string()),
30498
+ categoryLabel: z57.string().nullable(),
30499
+ gallery: z57.array(z57.object({
30500
+ url: z57.string(),
30501
+ alt: z57.string().nullable()
29532
30502
  })),
29533
- variantOptions: z55.array(productVariantOptionDisplaySchema),
29534
- selectedVariantId: z55.string().nullable(),
29535
- selectionLabel: z55.string(),
29536
- actionLabel: z55.string(),
29537
- soldOut: z55.boolean(),
29538
- body: z55.unknown().nullable()
30503
+ variantOptions: z57.array(productVariantOptionDisplaySchema),
30504
+ selectedVariantId: z57.string().nullable(),
30505
+ selectionLabel: z57.string(),
30506
+ actionLabel: z57.string(),
30507
+ soldOut: z57.boolean(),
30508
+ body: z57.unknown().nullable()
29539
30509
  })
29540
30510
  ]);
29541
- var passCardDisplaySchema = z55.object({
29542
- id: z55.string(),
29543
- title: z55.string(),
29544
- description: z55.string().nullable(),
29545
- priceLabel: z55.string(),
29546
- creditsLabel: z55.string(),
29547
- perCreditLabel: z55.string().nullable(),
29548
- validityLabel: z55.string().nullable(),
29549
- actionLabel: z55.string()
29550
- });
29551
- var membershipCardDisplaySchema = z55.object({
29552
- id: z55.string(),
29553
- title: z55.string(),
29554
- description: z55.string().nullable(),
29555
- priceLabel: z55.string(),
29556
- intervalLabel: z55.string(),
29557
- actionLabel: z55.string()
29558
- });
29559
- var passesMembershipsDisplaySchema = z55.object({
29560
- kind: z55.literal("passes-memberships"),
29561
- state: z55.enum(["empty", "ready"]),
29562
- className: z55.string().nullable(),
29563
- layout: z55.enum(["grid", "list"]),
29564
- columns: z55.string(),
29565
- emptyMessage: z55.string(),
29566
- passesHeading: z55.string(),
29567
- membershipsHeading: z55.string(),
29568
- passes: z55.array(passCardDisplaySchema),
29569
- memberships: z55.array(membershipCardDisplaySchema)
29570
- });
29571
- var cartLineDisplaySchema = z55.object({
29572
- key: z55.string(),
29573
- title: z55.string(),
29574
- priceLabel: z55.string(),
29575
- quantity: z55.number(),
29576
- quantityEditable: z55.boolean()
29577
- });
29578
- var cartDisplaySchema = z55.object({
29579
- kind: z55.literal("cart"),
29580
- state: z55.enum(["empty", "ready"]),
29581
- heading: z55.string().nullable(),
29582
- className: z55.string().nullable(),
29583
- emptyMessage: z55.string(),
29584
- supportText: z55.string().nullable(),
29585
- items: z55.array(cartLineDisplaySchema),
29586
- subtotalLabel: z55.string().nullable(),
29587
- checkoutButtonText: z55.string(),
29588
- clearButtonText: z55.string()
29589
- });
29590
- var checkoutDisplaySchema = z55.object({
29591
- kind: z55.literal("checkout"),
29592
- state: z55.enum(["empty", "blocked", "ready"]),
29593
- heading: z55.string().nullable(),
29594
- className: z55.string().nullable(),
29595
- message: z55.string().nullable(),
29596
- submitButtonText: z55.string()
29597
- });
29598
- var passesMembershipsHydrationSchema = z55.object({
29599
- passes: z55.array(publicPassProductSchema),
29600
- memberships: z55.array(publicMembershipProductSchema),
29601
- passPurchaseMode: z55.enum(["add_to_cart", "buy_now"])
29602
- });
29603
- var productListHydrationSchema = z55.object({
29604
- products: z55.array(publicProductSchema),
29605
- showSummary: z55.boolean(),
29606
- showBadges: z55.boolean(),
29607
- showPrices: z55.boolean(),
29608
- addButtonText: z55.string()
29609
- });
29610
- var productDetailHydrationSchema = z55.object({
29611
- products: z55.array(publicProductSchema),
29612
- productId: z55.string().nullable(),
29613
- showSummary: z55.boolean(),
29614
- showBadges: z55.boolean(),
29615
- showBody: z55.boolean(),
29616
- addButtonText: z55.string()
29617
- });
29618
- var cartHydrationSchema = z55.object({
29619
- emptyStateText: z55.string(),
29620
- checkoutButtonText: z55.string(),
29621
- clearButtonText: z55.string()
29622
- });
29623
- var checkoutHydrationSchema = z55.object({
29624
- emptyStateText: z55.string(),
29625
- submitButtonText: z55.string()
29626
- });
29627
- var passesMembershipsRenderSchema = z55.object({
30511
+ var passCardDisplaySchema = z57.object({
30512
+ id: z57.string(),
30513
+ title: z57.string(),
30514
+ description: z57.string().nullable(),
30515
+ priceLabel: z57.string(),
30516
+ creditsLabel: z57.string(),
30517
+ perCreditLabel: z57.string().nullable(),
30518
+ validityLabel: z57.string().nullable(),
30519
+ actionLabel: z57.string()
30520
+ });
30521
+ var membershipCardDisplaySchema = z57.object({
30522
+ id: z57.string(),
30523
+ title: z57.string(),
30524
+ description: z57.string().nullable(),
30525
+ priceLabel: z57.string(),
30526
+ intervalLabel: z57.string(),
30527
+ actionLabel: z57.string()
30528
+ });
30529
+ var passesMembershipsDisplaySchema = z57.object({
30530
+ kind: z57.literal("passes-memberships"),
30531
+ state: z57.enum(["empty", "ready"]),
30532
+ className: z57.string().nullable(),
30533
+ layout: z57.enum(["grid", "list"]),
30534
+ columns: z57.string(),
30535
+ emptyMessage: z57.string(),
30536
+ passesHeading: z57.string(),
30537
+ membershipsHeading: z57.string(),
30538
+ passes: z57.array(passCardDisplaySchema),
30539
+ memberships: z57.array(membershipCardDisplaySchema)
30540
+ });
30541
+ var cartLineDisplaySchema = z57.object({
30542
+ key: z57.string(),
30543
+ title: z57.string(),
30544
+ priceLabel: z57.string(),
30545
+ quantity: z57.number(),
30546
+ quantityEditable: z57.boolean()
30547
+ });
30548
+ var cartDisplaySchema = z57.object({
30549
+ kind: z57.literal("cart"),
30550
+ state: z57.enum(["empty", "ready"]),
30551
+ heading: z57.string().nullable(),
30552
+ className: z57.string().nullable(),
30553
+ emptyMessage: z57.string(),
30554
+ supportText: z57.string().nullable(),
30555
+ items: z57.array(cartLineDisplaySchema),
30556
+ subtotalLabel: z57.string().nullable(),
30557
+ checkoutButtonText: z57.string(),
30558
+ clearButtonText: z57.string()
30559
+ });
30560
+ var checkoutDisplaySchema = z57.object({
30561
+ kind: z57.literal("checkout"),
30562
+ state: z57.enum(["empty", "blocked", "ready"]),
30563
+ heading: z57.string().nullable(),
30564
+ className: z57.string().nullable(),
30565
+ message: z57.string().nullable(),
30566
+ submitButtonText: z57.string()
30567
+ });
30568
+ var passesMembershipsHydrationSchema = z57.object({
30569
+ passes: z57.array(publicPassProductSchema),
30570
+ memberships: z57.array(publicMembershipProductSchema),
30571
+ passPurchaseMode: z57.enum(["add_to_cart", "buy_now"])
30572
+ });
30573
+ var productListHydrationSchema = z57.object({
30574
+ products: z57.array(publicProductSchema),
30575
+ showSummary: z57.boolean(),
30576
+ showBadges: z57.boolean(),
30577
+ showPrices: z57.boolean(),
30578
+ addButtonText: z57.string()
30579
+ });
30580
+ var productDetailHydrationSchema = z57.object({
30581
+ products: z57.array(publicProductSchema),
30582
+ productId: z57.string().nullable(),
30583
+ showSummary: z57.boolean(),
30584
+ showBadges: z57.boolean(),
30585
+ showBody: z57.boolean(),
30586
+ addButtonText: z57.string()
30587
+ });
30588
+ var cartHydrationSchema = z57.object({
30589
+ emptyStateText: z57.string(),
30590
+ checkoutButtonText: z57.string(),
30591
+ clearButtonText: z57.string()
30592
+ });
30593
+ var checkoutHydrationSchema = z57.object({
30594
+ emptyStateText: z57.string(),
30595
+ submitButtonText: z57.string()
30596
+ });
30597
+ var passesMembershipsRenderSchema = z57.object({
29628
30598
  display: passesMembershipsDisplaySchema,
29629
30599
  hydration: passesMembershipsHydrationSchema
29630
30600
  });
29631
- var productListRenderSchema = z55.object({
30601
+ var productListRenderSchema = z57.object({
29632
30602
  display: productListDisplaySchema,
29633
30603
  hydration: productListHydrationSchema
29634
30604
  });
29635
- var productDetailRenderSchema = z55.object({
30605
+ var productDetailRenderSchema = z57.object({
29636
30606
  display: productDetailDisplaySchema,
29637
30607
  hydration: productDetailHydrationSchema
29638
30608
  });
29639
- var cartRenderSchema = z55.object({
30609
+ var cartRenderSchema = z57.object({
29640
30610
  display: cartDisplaySchema,
29641
30611
  hydration: cartHydrationSchema
29642
30612
  });
29643
- var checkoutRenderSchema = z55.object({
30613
+ var checkoutRenderSchema = z57.object({
29644
30614
  display: checkoutDisplaySchema,
29645
30615
  hydration: checkoutHydrationSchema
29646
30616
  });
29647
30617
  function resolveShowPricePerCredit(source) {
29648
30618
  return source.showPricePerCredit ?? true;
29649
30619
  }
29650
- var shopIslandMetaCodec = createZodCodec(z55.object({
29651
- siteId: z55.string().optional(),
29652
- apiBaseUrl: z55.string().optional(),
30620
+ var shopIslandMetaCodec = createZodCodec(z57.object({
30621
+ siteId: z57.string().optional(),
30622
+ apiBaseUrl: z57.string().optional(),
29653
30623
  stage: previewStageSchema.optional()
29654
30624
  }));
29655
30625
  var shopIslandMetaKeys = defineInteractiveIslandMetaKeys("siteId", "apiBaseUrl", "stage");
@@ -30031,9 +31001,9 @@ var shopBlockDefinition = {
30031
31001
  runtime: shopBlockRuntime,
30032
31002
  dataSchemas: {
30033
31003
  // listPublicPasses returns { passes: [...] }
30034
- passes: z56.object({ passes: z56.array(publicPassProductSchema) }).optional(),
31004
+ passes: z58.object({ passes: z58.array(publicPassProductSchema) }).optional(),
30035
31005
  // listPublicMemberships returns { memberships: [...] }
30036
- memberships: z56.object({ memberships: z56.array(publicMembershipProductSchema) }).optional()
31006
+ memberships: z58.object({ memberships: z58.array(publicMembershipProductSchema) }).optional()
30037
31007
  },
30038
31008
  dataLoaders: {
30039
31009
  // Load passes for display
@@ -30056,7 +31026,7 @@ var shopBlockDefinition = {
30056
31026
  };
30057
31027
 
30058
31028
  // ../blocks/src/system/blocks/product-list.ts
30059
- import { z as z57 } from "zod";
31029
+ import { z as z59 } from "zod";
30060
31030
  var productListManifest = createBlockManifest({
30061
31031
  id: "block.product-list",
30062
31032
  version: "1.0.0",
@@ -30198,7 +31168,7 @@ var productListBlockDefinition = {
30198
31168
  }
30199
31169
  }
30200
31170
  };
30201
- var productListDataSchema = z57.object({
31171
+ var productListDataSchema = z59.object({
30202
31172
  products: publicProductsResponseSchema.optional()
30203
31173
  });
30204
31174
 
@@ -30468,72 +31438,72 @@ var checkoutBlockDefinition = {
30468
31438
  };
30469
31439
 
30470
31440
  // ../blocks/src/system/runtime/nodes/gifting.interactive.ts
30471
- import { z as z58 } from "zod";
30472
- var publicGiftCardOfferSchema = z58.object({
30473
- id: z58.string(),
30474
- kind: z58.literal("gift_card"),
30475
- title: z58.string(),
30476
- description: z58.string().nullable(),
30477
- sortOrder: z58.number().int(),
30478
- giftCard: z58.object({
30479
- fixedDenominations: z58.array(z58.number().int().positive()),
30480
- customAmountEnabled: z58.boolean(),
30481
- customAmountMinCents: z58.number().int().positive(),
30482
- customAmountMaxCents: z58.number().int().positive()
31441
+ import { z as z60 } from "zod";
31442
+ var publicGiftCardOfferSchema = z60.object({
31443
+ id: z60.string(),
31444
+ kind: z60.literal("gift_card"),
31445
+ title: z60.string(),
31446
+ description: z60.string().nullable(),
31447
+ sortOrder: z60.number().int(),
31448
+ giftCard: z60.object({
31449
+ fixedDenominations: z60.array(z60.number().int().positive()),
31450
+ customAmountEnabled: z60.boolean(),
31451
+ customAmountMinCents: z60.number().int().positive(),
31452
+ customAmountMaxCents: z60.number().int().positive()
30483
31453
  }),
30484
- voucher: z58.null()
30485
- });
30486
- var publicVoucherOfferSchema = z58.object({
30487
- id: z58.string(),
30488
- kind: z58.literal("voucher"),
30489
- title: z58.string(),
30490
- description: z58.string().nullable(),
30491
- sortOrder: z58.number().int(),
30492
- giftCard: z58.null(),
30493
- voucher: z58.object({
30494
- purchaseAmountCents: z58.number().int().positive()
31454
+ voucher: z60.null()
31455
+ });
31456
+ var publicVoucherOfferSchema = z60.object({
31457
+ id: z60.string(),
31458
+ kind: z60.literal("voucher"),
31459
+ title: z60.string(),
31460
+ description: z60.string().nullable(),
31461
+ sortOrder: z60.number().int(),
31462
+ giftCard: z60.null(),
31463
+ voucher: z60.object({
31464
+ purchaseAmountCents: z60.number().int().positive()
30495
31465
  })
30496
31466
  });
30497
- var publicGiftingOffersResponseSchema = z58.object({
30498
- currency: z58.string(),
30499
- giftCards: z58.array(publicGiftCardOfferSchema),
30500
- vouchers: z58.array(publicVoucherOfferSchema)
31467
+ var publicGiftingOffersResponseSchema = z60.object({
31468
+ currency: z60.string(),
31469
+ giftCards: z60.array(publicGiftCardOfferSchema),
31470
+ vouchers: z60.array(publicVoucherOfferSchema)
30501
31471
  });
30502
- var giftingSourceSchema = z58.object({
30503
- siteId: z58.string().optional(),
30504
- apiBaseUrl: z58.string().optional(),
31472
+ var giftingSourceSchema = z60.object({
31473
+ siteId: z60.string().optional(),
31474
+ apiBaseUrl: z60.string().optional(),
30505
31475
  offers: publicGiftingOffersResponseSchema.nullable().optional(),
30506
- className: z58.string().nullable().optional(),
30507
- heading: z58.string().nullable().optional(),
30508
- intro: z58.string().nullable().optional(),
30509
- giftCardsHeading: z58.string().nullable().optional(),
30510
- vouchersHeading: z58.string().nullable().optional(),
30511
- emptyStateText: z58.string().nullable().optional(),
30512
- checkoutButtonText: z58.string().nullable().optional(),
30513
- successMessage: z58.string().nullable().optional()
30514
- });
30515
- var giftingDisplaySchema = z58.object({
30516
- kind: z58.literal("gifting"),
30517
- state: z58.literal("ready"),
30518
- className: z58.string().nullable(),
30519
- heading: z58.string(),
30520
- intro: z58.string().nullable(),
30521
- giftCardsHeading: z58.string(),
30522
- vouchersHeading: z58.string(),
30523
- emptyStateText: z58.string()
30524
- });
30525
- var giftingHydrationSchema = z58.object({
31476
+ className: z60.string().nullable().optional(),
31477
+ heading: z60.string().nullable().optional(),
31478
+ intro: z60.string().nullable().optional(),
31479
+ giftCardsHeading: z60.string().nullable().optional(),
31480
+ vouchersHeading: z60.string().nullable().optional(),
31481
+ emptyStateText: z60.string().nullable().optional(),
31482
+ checkoutButtonText: z60.string().nullable().optional(),
31483
+ successMessage: z60.string().nullable().optional()
31484
+ });
31485
+ var giftingDisplaySchema = z60.object({
31486
+ kind: z60.literal("gifting"),
31487
+ state: z60.literal("ready"),
31488
+ className: z60.string().nullable(),
31489
+ heading: z60.string(),
31490
+ intro: z60.string().nullable(),
31491
+ giftCardsHeading: z60.string(),
31492
+ vouchersHeading: z60.string(),
31493
+ emptyStateText: z60.string()
31494
+ });
31495
+ var giftingHydrationSchema = z60.object({
30526
31496
  offers: publicGiftingOffersResponseSchema.nullable(),
30527
- checkoutButtonText: z58.string(),
30528
- successMessage: z58.string()
31497
+ checkoutButtonText: z60.string(),
31498
+ successMessage: z60.string()
30529
31499
  });
30530
- var giftingRenderSchema = z58.object({
31500
+ var giftingRenderSchema = z60.object({
30531
31501
  display: giftingDisplaySchema,
30532
31502
  hydration: giftingHydrationSchema
30533
31503
  });
30534
- var giftingIslandMetaCodec = createZodCodec(z58.object({
30535
- siteId: z58.string().optional(),
30536
- apiBaseUrl: z58.string().optional()
31504
+ var giftingIslandMetaCodec = createZodCodec(z60.object({
31505
+ siteId: z60.string().optional(),
31506
+ apiBaseUrl: z60.string().optional()
30537
31507
  }));
30538
31508
  var giftingIslandMetaKeys = defineInteractiveIslandMetaKeys(
30539
31509
  "siteId",
@@ -30704,7 +31674,7 @@ var giftingBlockDefinition = {
30704
31674
  };
30705
31675
 
30706
31676
  // ../blocks/src/system/runtime/nodes/newsletter-form.interactive.ts
30707
- import { z as z59 } from "zod";
31677
+ import { z as z61 } from "zod";
30708
31678
 
30709
31679
  // ../blocks/src/system/runtime/nodes/newsletter-form.types.ts
30710
31680
  function getPresetFields(preset2, options) {
@@ -30758,49 +31728,49 @@ function withOptionalPhone(fields3, includePhone) {
30758
31728
  }
30759
31729
 
30760
31730
  // ../blocks/src/system/runtime/nodes/newsletter-form.interactive.ts
30761
- var newsletterPresetSchema = z59.enum(["emailOnly", "emailName", "emailFirstLast", "emailNameCompany"]);
30762
- var newsletterFieldSchema = z59.object({
30763
- id: z59.string(),
30764
- type: z59.enum(["email", "text"]),
30765
- label: z59.string(),
30766
- required: z59.boolean(),
30767
- placeholder: z59.string().optional()
30768
- });
30769
- var newsletterSourceSchema = z59.object({
30770
- siteId: z59.string().optional(),
30771
- apiBaseUrl: z59.string().optional(),
30772
- listId: z59.string().nullable().optional(),
31731
+ var newsletterPresetSchema = z61.enum(["emailOnly", "emailName", "emailFirstLast", "emailNameCompany"]);
31732
+ var newsletterFieldSchema = z61.object({
31733
+ id: z61.string(),
31734
+ type: z61.enum(["email", "text"]),
31735
+ label: z61.string(),
31736
+ required: z61.boolean(),
31737
+ placeholder: z61.string().optional()
31738
+ });
31739
+ var newsletterSourceSchema = z61.object({
31740
+ siteId: z61.string().optional(),
31741
+ apiBaseUrl: z61.string().optional(),
31742
+ listId: z61.string().nullable().optional(),
30773
31743
  preset: newsletterPresetSchema.optional(),
30774
- includePhone: z59.boolean().optional(),
30775
- buttonLabel: z59.string().nullable().optional(),
30776
- successMessage: z59.string().nullable().optional(),
30777
- privacyNote: z59.string().nullable().optional(),
30778
- tags: z59.string().nullable().optional(),
30779
- spamProtectionEnabled: z59.boolean().optional(),
30780
- className: z59.string().nullable().optional()
30781
- });
30782
- var newsletterDisplaySchema = z59.object({
30783
- kind: z59.literal("newsletter-form"),
30784
- className: z59.string().nullable(),
30785
- buttonLabel: z59.string(),
30786
- successMessage: z59.string().nullable(),
30787
- privacyNote: z59.string().nullable(),
30788
- fields: z59.array(newsletterFieldSchema)
30789
- });
30790
- var newsletterHydrationSchema = z59.object({
30791
- listId: z59.string().nullable().optional(),
31744
+ includePhone: z61.boolean().optional(),
31745
+ buttonLabel: z61.string().nullable().optional(),
31746
+ successMessage: z61.string().nullable().optional(),
31747
+ privacyNote: z61.string().nullable().optional(),
31748
+ tags: z61.string().nullable().optional(),
31749
+ spamProtectionEnabled: z61.boolean().optional(),
31750
+ className: z61.string().nullable().optional()
31751
+ });
31752
+ var newsletterDisplaySchema = z61.object({
31753
+ kind: z61.literal("newsletter-form"),
31754
+ className: z61.string().nullable(),
31755
+ buttonLabel: z61.string(),
31756
+ successMessage: z61.string().nullable(),
31757
+ privacyNote: z61.string().nullable(),
31758
+ fields: z61.array(newsletterFieldSchema)
31759
+ });
31760
+ var newsletterHydrationSchema = z61.object({
31761
+ listId: z61.string().nullable().optional(),
30792
31762
  preset: newsletterPresetSchema,
30793
- includePhone: z59.boolean(),
30794
- tags: z59.string().nullable().optional(),
30795
- spamProtectionEnabled: z59.boolean().optional()
31763
+ includePhone: z61.boolean(),
31764
+ tags: z61.string().nullable().optional(),
31765
+ spamProtectionEnabled: z61.boolean().optional()
30796
31766
  });
30797
- var newsletterRenderSchema = z59.object({
31767
+ var newsletterRenderSchema = z61.object({
30798
31768
  display: newsletterDisplaySchema,
30799
31769
  hydration: newsletterHydrationSchema
30800
31770
  });
30801
- var newsletterIslandMetaCodec = createZodCodec(z59.object({
30802
- siteId: z59.string().optional(),
30803
- apiBaseUrl: z59.string().optional()
31771
+ var newsletterIslandMetaCodec = createZodCodec(z61.object({
31772
+ siteId: z61.string().optional(),
31773
+ apiBaseUrl: z61.string().optional()
30804
31774
  }));
30805
31775
  var newsletterIslandMetaKeys = defineInteractiveIslandMetaKeys("siteId", "apiBaseUrl");
30806
31776
  function buildNewsletterDisplay(source) {
@@ -30921,23 +31891,23 @@ var newsletterSignupBlockDefinition = {
30921
31891
  };
30922
31892
 
30923
31893
  // ../blocks/src/system/blocks/team-members.ts
30924
- import { z as z60 } from "zod";
31894
+ import { z as z62 } from "zod";
30925
31895
  var ITEM_NAME2 = "member";
30926
31896
  var teamMemberPhotoSchema = mediaSchema2.refine((media2) => media2.type === "image", {
30927
31897
  message: "Team member photos must be image media"
30928
31898
  }).nullable();
30929
- var teamMemberDataSchema = z60.object({
30930
- _type: z60.literal("teamMember"),
30931
- id: z60.string(),
30932
- name: z60.string(),
30933
- role: z60.string().nullable(),
30934
- roleLabel: z60.string().nullable(),
30935
- bio: z60.string().nullable(),
30936
- summary: z60.string().nullable(),
31899
+ var teamMemberDataSchema = z62.object({
31900
+ _type: z62.literal("teamMember"),
31901
+ id: z62.string(),
31902
+ name: z62.string(),
31903
+ role: z62.string().nullable(),
31904
+ roleLabel: z62.string().nullable(),
31905
+ bio: z62.string().nullable(),
31906
+ summary: z62.string().nullable(),
30937
31907
  photo: teamMemberPhotoSchema,
30938
- profilePath: z60.string().nullable()
31908
+ profilePath: z62.string().nullable()
30939
31909
  });
30940
- var teamMembersDataSchema = z60.array(teamMemberDataSchema);
31910
+ var teamMembersDataSchema = z62.array(teamMemberDataSchema);
30941
31911
  var dynamicSourceWhen = { equals: "site_staff" };
30942
31912
  var manualSourceWhen = { equals: "site_staff", not: true };
30943
31913
  var headingNode = text(
@@ -31707,6 +32677,13 @@ function eventListCapable() {
31707
32677
  eventListTreatments
31708
32678
  });
31709
32679
  }
32680
+ function offeringsPreviewCapable() {
32681
+ return declareBlockDesignCapability({
32682
+ sectionSurfaces: "supported",
32683
+ contentFrames: ["plain"],
32684
+ itemSurfaces: "supported"
32685
+ });
32686
+ }
31710
32687
  function defaultBoundaryBias(visualWeight) {
31711
32688
  return visualWeight === "featured" || visualWeight === "immersive" ? "clear" : "soft";
31712
32689
  }
@@ -31820,6 +32797,13 @@ var systemBlockDefinitionsRaw = [
31820
32797
  weight: "featured",
31821
32798
  bias: "clear",
31822
32799
  surfaces: heroSectionSurfaces
32800
+ }),
32801
+ layoutProfile({
32802
+ variantKey: "splitEditorial",
32803
+ family: "split",
32804
+ weight: "featured",
32805
+ bias: "clear",
32806
+ surfaces: heroSectionSurfaces
31823
32807
  })
31824
32808
  ]
31825
32809
  })),
@@ -31914,7 +32898,10 @@ var systemBlockDefinitionsRaw = [
31914
32898
  })),
31915
32899
  withDesignCapability("block.form", formBlockDefinition, panelCapable(), defineBlockDesignMetadata({
31916
32900
  flow: conversionFlow,
31917
- layoutProfiles: [layoutProfile({ variantKey: "default", family: "form", weight: "standard" })]
32901
+ layoutProfiles: [
32902
+ layoutProfile({ variantKey: "default", family: "form", weight: "standard" }),
32903
+ layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
32904
+ ]
31918
32905
  })),
31919
32906
  withDesignCapability("block.faq", faqBlockDefinition, withEyebrowCapability(declareBlockDesignCapability({
31920
32907
  sectionSurfaces: "supported",
@@ -31943,7 +32930,10 @@ var systemBlockDefinitionsRaw = [
31943
32930
  contentFrames: ["plain", "panel"],
31944
32931
  itemSurfaces: "supported",
31945
32932
  testimonialCardTreatments: ["default", "statement", "non-carded", "accent-quote", "editorial-serif-quote"],
31946
- headingDecorations: ["short-center-rule"]
32933
+ headingDecorationCapability: {
32934
+ kind: "supported",
32935
+ families: ["short-center-rule"]
32936
+ }
31947
32937
  }), defineBlockDesignMetadata({
31948
32938
  flow: proofFlow,
31949
32939
  layoutProfiles: [
@@ -32046,6 +33036,10 @@ var systemBlockDefinitionsRaw = [
32046
33036
  layoutProfile({ variantKey: "timetable", family: "stack", weight: "standard" })
32047
33037
  ]
32048
33038
  })),
33039
+ withDesignCapability("block.offerings-preview", offeringsPreviewBlockDefinition, offeringsPreviewCapable(), defineBlockDesignMetadata({
33040
+ flow: offeringsFlow,
33041
+ layoutProfiles: [layoutProfile({ variantKey: "cards", family: "grid", weight: "standard" })]
33042
+ })),
32049
33043
  // Friendly wrapper blocks
32050
33044
  withDesignCapability("block.team-members", teamMembersBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
32051
33045
  flow: proofFlow,
@@ -32569,32 +33563,8 @@ var backgroundTransforms = [
32569
33563
  {
32570
33564
  id: "background.resolveColorsStyle",
32571
33565
  kind: "formatter",
32572
- summary: "Resolve text + heading colors from a background object into scoped CSS vars",
32573
- run: (value, _options, context) => {
32574
- if (!value || typeof value !== "object") {
32575
- return {};
32576
- }
32577
- const input = value;
32578
- const textColor = isString(input.textColor) ? input.textColor.trim() : null;
32579
- const headingColor = isString(input.headingColor) ? input.headingColor.trim() : null;
32580
- const style = {};
32581
- if (textColor) {
32582
- const resolvedText = resolveBackgroundColorValue(textColor, context);
32583
- if (resolvedText) {
32584
- style.color = resolvedText;
32585
- style["--section-text-color"] = resolvedText;
32586
- if (headingColor) {
32587
- const resolvedHeading = resolveBackgroundColorValue(headingColor, context);
32588
- if (resolvedHeading) {
32589
- style["--section-heading-color"] = resolvedHeading;
32590
- }
32591
- } else {
32592
- style["--section-heading-color"] = resolvedText;
32593
- }
32594
- }
32595
- }
32596
- return style;
32597
- }
33566
+ summary: "Resolve section foreground colors from a background object into scoped CSS vars",
33567
+ run: (value, _options, context) => resolveSectionForegroundStyles(value, context)
32598
33568
  },
32599
33569
  {
32600
33570
  id: "background.resolveAllowOverflow",
@@ -32822,6 +33792,104 @@ var builtinTransformDefinitions = [
32822
33792
  ];
32823
33793
  var defaultTransforms = createTransformRegistry(builtinTransformDefinitions);
32824
33794
 
33795
+ // ../blocks/src/system/data/linkedContentEntries.ts
33796
+ var LINKED_CONTENT_ENTRY_META_KEY = "__rbLinkedContentEntry";
33797
+ function coerceLinkedContentEntriesPayload(payload) {
33798
+ if (!isRecord3(payload)) return payload;
33799
+ const response = payload;
33800
+ if (!Array.isArray(response.entries)) return payload;
33801
+ const contentType = parsePublicContentTypeMeta(response.contentType);
33802
+ if (!contentType) return response.entries;
33803
+ return response.entries.map((entry) => enrichLinkedContentEntry(entry, contentType));
33804
+ }
33805
+ function enrichLinkedContentEntry(entry, contentType) {
33806
+ if (!isRecord3(entry)) return entry;
33807
+ const entryId = typeof entry.id === "string" ? entry.id : null;
33808
+ if (!entryId) return entry;
33809
+ const title = typeof entry.title === "string" && entry.title.trim().length > 0 ? entry.title : entryId;
33810
+ const optimisticHash = typeof entry.optimisticHash === "string" && entry.optimisticHash.length > 0 ? entry.optimisticHash : null;
33811
+ const meta = {
33812
+ kind: "linked-content-entry",
33813
+ entryId,
33814
+ contentTypeKey: contentType.key,
33815
+ contentTypeLabel: contentTypeKeyToLabel(contentType.key),
33816
+ title,
33817
+ optimisticHash,
33818
+ support: resolveLinkedContentEditSupport(contentType),
33819
+ contentType
33820
+ };
33821
+ return {
33822
+ ...entry,
33823
+ [LINKED_CONTENT_ENTRY_META_KEY]: meta
33824
+ };
33825
+ }
33826
+ function resolveLinkedContentEditSupport(contentType) {
33827
+ if (contentType.fields.length === 0) {
33828
+ return { kind: "unsupported-missing-schema", reason: "Content type has no public field metadata." };
33829
+ }
33830
+ const metadata = contentType.previewLinkedEntryEditing;
33831
+ if (!metadata) {
33832
+ return { kind: "unsupported-content-type", reason: "Content type has not enabled linked-entry preview editing." };
33833
+ }
33834
+ switch (metadata.kind) {
33835
+ case "generic":
33836
+ return { kind: "supported" };
33837
+ case "unsupported-domain-backed":
33838
+ return { kind: "unsupported-domain-backed", reason: metadata.reason };
33839
+ default:
33840
+ return assertNever(metadata);
33841
+ }
33842
+ }
33843
+ function contentTypeKeyToLabel(key) {
33844
+ const singular = key.endsWith("ies") ? `${key.slice(0, -3)}y` : key.endsWith("s") ? key.slice(0, -1) : key;
33845
+ return singular.split(/[-_\s]+/).filter((part) => part.length > 0).map((part, index) => index === 0 ? capitalize(part) : part.toLowerCase()).join(" ");
33846
+ }
33847
+ function capitalize(value) {
33848
+ return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();
33849
+ }
33850
+ function parsePublicContentTypeMeta(value) {
33851
+ if (!isRecord3(value)) return null;
33852
+ if (typeof value.key !== "string" || value.key.trim().length === 0) return null;
33853
+ return {
33854
+ key: value.key,
33855
+ titleField: typeof value.titleField === "string" ? value.titleField : null,
33856
+ fields: Array.isArray(value.fields) ? value.fields.flatMap(parsePublicContentTypeFieldMeta) : [],
33857
+ previewLinkedEntryEditing: parsePublicContentTypeLinkedEntryEditing(value.previewLinkedEntryEditing)
33858
+ };
33859
+ }
33860
+ function parsePublicContentTypeLinkedEntryEditing(value) {
33861
+ if (!isRecord3(value) || typeof value.kind !== "string") return null;
33862
+ switch (value.kind) {
33863
+ case "generic":
33864
+ return { kind: "generic" };
33865
+ case "unsupported-domain-backed":
33866
+ return {
33867
+ kind: "unsupported-domain-backed",
33868
+ reason: typeof value.reason === "string" ? value.reason : "Domain-backed entries need a dedicated editor workflow."
33869
+ };
33870
+ default:
33871
+ return null;
33872
+ }
33873
+ }
33874
+ function parsePublicContentTypeFieldMeta(value) {
33875
+ if (!isRecord3(value)) return [];
33876
+ if (typeof value.id !== "string" || typeof value.type !== "string") return [];
33877
+ return [{
33878
+ id: value.id,
33879
+ type: value.type,
33880
+ mediaKinds: parseStringArray(value.mediaKinds),
33881
+ fileKinds: parseStringArray(value.fileKinds)
33882
+ }];
33883
+ }
33884
+ function parseStringArray(value) {
33885
+ if (value === null || typeof value === "undefined") return null;
33886
+ if (!Array.isArray(value)) return null;
33887
+ return value.filter((item) => typeof item === "string");
33888
+ }
33889
+ function isRecord3(value) {
33890
+ return typeof value === "object" && value !== null && !Array.isArray(value);
33891
+ }
33892
+
32825
33893
  // ../theme-core/src/navigation/presets.ts
32826
33894
  var NAV_LINK_PRESETS = {
32827
33895
  /**
@@ -32980,9 +34048,21 @@ var NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES = [
32980
34048
  ];
32981
34049
 
32982
34050
  // ../theme-core/src/layout/generateLayoutCss.ts
32983
- var waveTransitionMask = svgDataUrl(
34051
+ var classicWaveTransitionMask = svgDataUrl(
32984
34052
  "<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>"
32985
34053
  );
34054
+ var balancedWaveTransitionMask = svgDataUrl(
34055
+ "<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>"
34056
+ );
34057
+ var gentleWaveTransitionMask = svgDataUrl(
34058
+ "<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>"
34059
+ );
34060
+ var boldWaveTransitionMask = svgDataUrl(
34061
+ "<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>"
34062
+ );
34063
+ var driftWaveTransitionMask = svgDataUrl(
34064
+ "<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>"
34065
+ );
32986
34066
  function svgDataUrl(svg) {
32987
34067
  return `data:image/svg+xml,${encodeURIComponent(svg)}`;
32988
34068
  }
@@ -34761,34 +35841,34 @@ import { Fragment, jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
34761
35841
  var MAX_FONT_UPLOAD_BYTES = 5 * 1024 * 1024;
34762
35842
 
34763
35843
  // ../theme-core/src/runtime/buildThemeRuntimeFromBridge.ts
34764
- import { z as z61 } from "zod";
34765
- var themeBridgeConfigSchema = z61.object({
34766
- tokens: z61.record(z61.string(), z61.string()),
34767
- typography: z61.object({
34768
- headingFamily: z61.string().optional(),
34769
- bodyFamily: z61.string().optional(),
34770
- headingWeight: z61.number().optional(),
34771
- bodyWeight: z61.number().optional()
35844
+ import { z as z63 } from "zod";
35845
+ var themeBridgeConfigSchema = z63.object({
35846
+ tokens: z63.record(z63.string(), z63.string()),
35847
+ typography: z63.object({
35848
+ headingFamily: z63.string().optional(),
35849
+ bodyFamily: z63.string().optional(),
35850
+ headingWeight: z63.number().optional(),
35851
+ bodyWeight: z63.number().optional()
34772
35852
  }).optional(),
34773
- spacing: z61.enum(["comfortable", "standard", "dense"]).optional(),
34774
- corners: z61.enum(["square", "soft", "rounded", "pill"]).optional(),
34775
- shadows: z61.enum(["none", "low", "medium", "high"]).optional(),
34776
- components: z61.object({
34777
- buttons: z61.union([
34778
- z61.boolean(),
34779
- z61.object({
34780
- variants: z61.array(z61.enum(["primary", "secondary", "outline", "ghost"])).optional()
35853
+ spacing: z63.enum(["comfortable", "standard", "dense"]).optional(),
35854
+ corners: z63.enum(["square", "soft", "rounded", "pill"]).optional(),
35855
+ shadows: z63.enum(["none", "low", "medium", "high"]).optional(),
35856
+ components: z63.object({
35857
+ buttons: z63.union([
35858
+ z63.boolean(),
35859
+ z63.object({
35860
+ variants: z63.array(z63.enum(["primary", "secondary", "outline", "ghost"])).optional()
34781
35861
  })
34782
35862
  ]).optional(),
34783
- cards: z61.union([
34784
- z61.boolean(),
34785
- z61.object({
34786
- variants: z61.array(z61.enum(["default", "elevated", "outlined"])).optional()
35863
+ cards: z63.union([
35864
+ z63.boolean(),
35865
+ z63.object({
35866
+ variants: z63.array(z63.enum(["default", "elevated", "outlined"])).optional()
34787
35867
  })
34788
35868
  ]).optional(),
34789
- inputs: z61.boolean().optional()
35869
+ inputs: z63.boolean().optional()
34790
35870
  }).optional(),
34791
- overrides: z61.record(z61.string(), z61.string()).optional()
35871
+ overrides: z63.record(z63.string(), z63.string()).optional()
34792
35872
  }).passthrough();
34793
35873
 
34794
35874
  // ../theme-core/src/siteChrome.tsx
@@ -34988,6 +36068,8 @@ function coerceToString(value) {
34988
36068
  return String(value);
34989
36069
  }
34990
36070
  function coercePayload(payload) {
36071
+ const linkedContentEntries = coerceLinkedContentEntriesPayload(payload);
36072
+ if (linkedContentEntries !== payload) return linkedContentEntries;
34991
36073
  if (payload && typeof payload === "object" && !Array.isArray(payload)) {
34992
36074
  const record = payload;
34993
36075
  if ("data" in record && typeof record.data !== "function") return record.data;
@@ -35075,6 +36157,7 @@ var SUPPORTED_LOADER_ENDPOINTS = [
35075
36157
  "listPublicEvents",
35076
36158
  "getPublicEventDetails",
35077
36159
  "listPublicCourses",
36160
+ "listPublicRouteCandidates",
35078
36161
  "listPublicTeamMembers",
35079
36162
  "listPublicProducts",
35080
36163
  "listPublicPasses",
@@ -35135,6 +36218,10 @@ function normalizeLoaderParams(endpoint, params, context) {
35135
36218
  ensureSiteId(out, context);
35136
36219
  return out;
35137
36220
  }
36221
+ if (endpoint === "listPublicRouteCandidates") {
36222
+ ensureSiteId(out, context);
36223
+ return out;
36224
+ }
35138
36225
  if (endpoint === "getPublishedEntryPreview") {
35139
36226
  ensureSiteId(out, context);
35140
36227
  return out;
@@ -35147,17 +36234,17 @@ function normalizeLoaderParams(endpoint, params, context) {
35147
36234
  function unsafeRetypeZodSchema(schema) {
35148
36235
  return schema;
35149
36236
  }
35150
- var navIdListSchema = z62.preprocess((value) => {
36237
+ var navIdListSchema = z64.preprocess((value) => {
35151
36238
  if (!Array.isArray(value)) return void 0;
35152
36239
  const filtered = value.filter((v) => typeof v === "string" && v.trim().length > 0);
35153
36240
  return filtered.length > 0 ? filtered : void 0;
35154
- }, z62.array(z62.string()).max(200).optional());
35155
- var dashboardNavVisibilityBaseSchema = z62.object({
35156
- mode: z62.enum(["augment", "restrict"]).optional(),
36241
+ }, z64.array(z64.string()).max(200).optional());
36242
+ var dashboardNavVisibilityBaseSchema = z64.object({
36243
+ mode: z64.enum(["augment", "restrict"]).optional(),
35157
36244
  allowIds: navIdListSchema,
35158
36245
  denyIds: navIdListSchema
35159
36246
  }).strip();
35160
- var dashboardNavVisibilityRolesSchema = z62.object({
36247
+ var dashboardNavVisibilityRolesSchema = z64.object({
35161
36248
  administrator: dashboardNavVisibilityBaseSchema.optional(),
35162
36249
  editor: dashboardNavVisibilityBaseSchema.optional(),
35163
36250
  team_member: dashboardNavVisibilityBaseSchema.optional()
@@ -35165,63 +36252,63 @@ var dashboardNavVisibilityRolesSchema = z62.object({
35165
36252
  var dashboardNavVisibilitySchema = dashboardNavVisibilityBaseSchema.extend({
35166
36253
  roles: dashboardNavVisibilityRolesSchema
35167
36254
  }).strip();
35168
- var dashboardNavigationConfigSchema = z62.object({
36255
+ var dashboardNavigationConfigSchema = z64.object({
35169
36256
  siteNav: dashboardNavVisibilitySchema.optional(),
35170
36257
  settingsNav: dashboardNavVisibilitySchema.optional()
35171
36258
  }).strip();
35172
- var dashboardConfigSchema = z62.object({
35173
- previewEditingEnabled: z62.boolean().optional(),
36259
+ var dashboardConfigSchema = z64.object({
36260
+ previewEditingEnabled: z64.boolean().optional(),
35174
36261
  navigation: dashboardNavigationConfigSchema.optional()
35175
36262
  }).strip();
35176
36263
  var fieldDefinitionInputSchema = unsafeRetypeZodSchema(fieldSchema);
35177
36264
  var nodeDefinitionSchema = unsafeRetypeZodSchema(NodeSchema);
35178
- var sdkLoaderEndpointSchema = z62.enum(SUPPORTED_LOADER_ENDPOINTS);
35179
- var loaderFallbackScalarSchema = z62.union([
35180
- z62.string(),
35181
- z62.number(),
35182
- z62.boolean(),
35183
- z62.null()
36265
+ var sdkLoaderEndpointSchema = z64.enum(SUPPORTED_LOADER_ENDPOINTS);
36266
+ var loaderFallbackScalarSchema = z64.union([
36267
+ z64.string(),
36268
+ z64.number(),
36269
+ z64.boolean(),
36270
+ z64.null()
35184
36271
  ]);
35185
- var loaderParamBindingSchema = z62.object({
35186
- $bind: z62.object({
35187
- from: z62.string().min(1, "Binding path is required"),
36272
+ var loaderParamBindingSchema = z64.object({
36273
+ $bind: z64.object({
36274
+ from: z64.string().min(1, "Binding path is required"),
35188
36275
  fallback: loaderFallbackScalarSchema.optional()
35189
36276
  })
35190
36277
  });
35191
- var loaderParamValueSchema = z62.union([
35192
- z62.string(),
35193
- z62.number(),
35194
- z62.boolean(),
36278
+ var loaderParamValueSchema = z64.union([
36279
+ z64.string(),
36280
+ z64.number(),
36281
+ z64.boolean(),
35195
36282
  loaderParamBindingSchema
35196
36283
  ]);
35197
- var sdkConfigLoaderSchema = z62.object({
36284
+ var sdkConfigLoaderSchema = z64.object({
35198
36285
  endpoint: sdkLoaderEndpointSchema,
35199
- params: z62.record(z62.string(), loaderParamValueSchema),
35200
- mode: z62.enum(["server", "client"]).default("server")
36286
+ params: z64.record(z64.string(), loaderParamValueSchema),
36287
+ mode: z64.enum(["server", "client"]).default("server")
35201
36288
  });
35202
- var sdkDataLoadersSchema = z62.record(z62.string(), sdkConfigLoaderSchema).refine((loaders) => Object.keys(loaders).length <= 5, { message: "Maximum 5 data loaders per block" }).optional();
35203
- var sdkCustomBlockIdSchema = z62.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
36289
+ var sdkDataLoadersSchema = z64.record(z64.string(), sdkConfigLoaderSchema).refine((loaders) => Object.keys(loaders).length <= 5, { message: "Maximum 5 data loaders per block" }).optional();
36290
+ var sdkCustomBlockIdSchema = z64.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
35204
36291
  message: "Block ID must start with 'custom.' followed by lowercase letters, numbers, or hyphens"
35205
36292
  }).transform((value) => value);
35206
- var sdkCustomBlockInputSchema = z62.object({
36293
+ var sdkCustomBlockInputSchema = z64.object({
35207
36294
  id: sdkCustomBlockIdSchema,
35208
- title: z62.string().min(1),
35209
- titleSource: z62.union([z62.string().min(1), z62.array(z62.string().min(1)).min(1)]).optional(),
35210
- description: z62.string().optional(),
36295
+ title: z64.string().min(1),
36296
+ titleSource: z64.union([z64.string().min(1), z64.array(z64.string().min(1)).min(1)]).optional(),
36297
+ description: z64.string().optional(),
35211
36298
  category: blockCategoryEnum,
35212
- icon: z62.string().optional(),
35213
- tags: z62.array(z62.string()).optional(),
36299
+ icon: z64.string().optional(),
36300
+ tags: z64.array(z64.string()).optional(),
35214
36301
  fields: fieldDefinitionInputSchema.array().min(1),
35215
36302
  dataLoaders: sdkDataLoadersSchema,
35216
36303
  layout: NodeSchema.optional(),
35217
- variants: z62.record(z62.string().min(1), NodeSchema).optional(),
35218
- defaultVariant: z62.string().min(1).optional(),
35219
- variantOptions: z62.record(
35220
- z62.string().min(1),
35221
- z62.object({
35222
- label: z62.string().min(1).optional(),
35223
- description: z62.string().min(1).optional(),
35224
- icon: z62.string().min(1).optional()
36304
+ variants: z64.record(z64.string().min(1), NodeSchema).optional(),
36305
+ defaultVariant: z64.string().min(1).optional(),
36306
+ variantOptions: z64.record(
36307
+ z64.string().min(1),
36308
+ z64.object({
36309
+ label: z64.string().min(1).optional(),
36310
+ description: z64.string().min(1).optional(),
36311
+ icon: z64.string().min(1).optional()
35225
36312
  })
35226
36313
  ).optional()
35227
36314
  }).superRefine((data, ctx) => {
@@ -35231,7 +36318,7 @@ var sdkCustomBlockInputSchema = z62.object({
35231
36318
  const exists = data.fields.some((field) => field.id === source);
35232
36319
  if (!exists) {
35233
36320
  ctx.addIssue({
35234
- code: z62.ZodIssueCode.custom,
36321
+ code: z64.ZodIssueCode.custom,
35235
36322
  message: `titleSource must reference a valid field ID (got "${source}")`,
35236
36323
  path: Array.isArray(data.titleSource) ? ["titleSource", index] : ["titleSource"]
35237
36324
  });
@@ -35240,7 +36327,7 @@ var sdkCustomBlockInputSchema = z62.object({
35240
36327
  }
35241
36328
  if (data.layout && data.variants) {
35242
36329
  ctx.addIssue({
35243
- code: z62.ZodIssueCode.custom,
36330
+ code: z64.ZodIssueCode.custom,
35244
36331
  message: "Custom block must define either `layout` or `variants`, not both",
35245
36332
  path: ["variants"]
35246
36333
  });
@@ -35249,14 +36336,14 @@ var sdkCustomBlockInputSchema = z62.object({
35249
36336
  const keys = Object.keys(data.variants);
35250
36337
  if (keys.length === 0) {
35251
36338
  ctx.addIssue({
35252
- code: z62.ZodIssueCode.custom,
36339
+ code: z64.ZodIssueCode.custom,
35253
36340
  message: "`variants` must contain at least one variant key",
35254
36341
  path: ["variants"]
35255
36342
  });
35256
36343
  }
35257
36344
  if (data.defaultVariant && !Object.prototype.hasOwnProperty.call(data.variants, data.defaultVariant)) {
35258
36345
  ctx.addIssue({
35259
- code: z62.ZodIssueCode.custom,
36346
+ code: z64.ZodIssueCode.custom,
35260
36347
  message: "`defaultVariant` must be a key present in `variants`",
35261
36348
  path: ["defaultVariant"]
35262
36349
  });
@@ -35265,7 +36352,7 @@ var sdkCustomBlockInputSchema = z62.object({
35265
36352
  for (const key of Object.keys(data.variantOptions)) {
35266
36353
  if (!Object.prototype.hasOwnProperty.call(data.variants, key)) {
35267
36354
  ctx.addIssue({
35268
- code: z62.ZodIssueCode.custom,
36355
+ code: z64.ZodIssueCode.custom,
35269
36356
  message: "`variantOptions` key must exist in `variants`",
35270
36357
  path: ["variantOptions", key]
35271
36358
  });
@@ -35274,78 +36361,78 @@ var sdkCustomBlockInputSchema = z62.object({
35274
36361
  }
35275
36362
  }
35276
36363
  });
35277
- var sdkBlockFieldExtensionInputSchema = z62.object({
36364
+ var sdkBlockFieldExtensionInputSchema = z64.object({
35278
36365
  fields: fieldDefinitionInputSchema.array().min(1)
35279
36366
  });
35280
- var sdkBlockFieldExtensionsInputSchema = z62.record(
35281
- z62.string().min(1),
36367
+ var sdkBlockFieldExtensionsInputSchema = z64.record(
36368
+ z64.string().min(1),
35282
36369
  sdkBlockFieldExtensionInputSchema
35283
36370
  );
35284
- var sdkThemePaletteSchema = z62.record(z62.string(), z62.string());
35285
- var sdkThemeConfigSchema = z62.object({
36371
+ var sdkThemePaletteSchema = z64.record(z64.string(), z64.string());
36372
+ var sdkThemeConfigSchema = z64.object({
35286
36373
  palette: sdkThemePaletteSchema
35287
36374
  });
35288
- var sdkSectionBackgroundSchema = z62.object({
35289
- id: z62.string().min(1),
35290
- label: z62.string().min(1),
35291
- token: z62.string().min(1)
36375
+ var sdkSectionBackgroundSchema = z64.object({
36376
+ id: z64.string().min(1),
36377
+ label: z64.string().min(1),
36378
+ token: z64.string().min(1)
35292
36379
  });
35293
- var sdkSectionOptionsConfigSchema = z62.object({
35294
- backgroundColor: z62.boolean().optional(),
35295
- backgroundImage: z62.boolean().optional(),
35296
- backgroundGradient: z62.boolean().optional(),
35297
- spacing: z62.union([z62.array(z62.enum(["compact", "default", "spacious"])), z62.boolean()]).optional(),
35298
- textColor: z62.boolean().optional()
36380
+ var sdkSectionOptionsConfigSchema = z64.object({
36381
+ backgroundColor: z64.boolean().optional(),
36382
+ backgroundImage: z64.boolean().optional(),
36383
+ backgroundGradient: z64.boolean().optional(),
36384
+ spacing: z64.union([z64.array(z64.enum(["compact", "default", "spacious"])), z64.boolean()]).optional(),
36385
+ textColor: z64.boolean().optional()
35299
36386
  });
35300
- var sdkContainerOptionsConfigSchema = z62.object({
35301
- maxWidth: z62.union([z62.array(z62.enum(["narrow", "default", "wide", "full"])), z62.boolean()]).optional(),
35302
- alignment: z62.union([z62.array(z62.enum(["left", "center", "right"])), z62.boolean()]).optional()
36387
+ var sdkContainerOptionsConfigSchema = z64.object({
36388
+ maxWidth: z64.union([z64.array(z64.enum(["narrow", "default", "wide", "full"])), z64.boolean()]).optional(),
36389
+ alignment: z64.union([z64.array(z64.enum(["left", "center", "right"])), z64.boolean()]).optional()
35303
36390
  });
35304
- var sdkSiteStyleConfigSchema = z62.object({
35305
- sectionBackgrounds: z62.array(sdkSectionBackgroundSchema).optional(),
36391
+ var sdkSiteStyleConfigSchema = z64.object({
36392
+ sectionBackgrounds: z64.array(sdkSectionBackgroundSchema).optional(),
35306
36393
  sectionOptions: sdkSectionOptionsConfigSchema.optional(),
35307
36394
  containerOptions: sdkContainerOptionsConfigSchema.optional()
35308
36395
  });
35309
- var sdkSiteLayoutConfigSchema = z62.object({
35310
- footerBlocks: z62.array(
35311
- z62.object({
35312
- id: z62.string().min(1).optional(),
35313
- kind: z62.string().min(1),
35314
- content: z62.record(z62.string(), z62.unknown()).optional()
36396
+ var sdkSiteLayoutConfigSchema = z64.object({
36397
+ footerBlocks: z64.array(
36398
+ z64.object({
36399
+ id: z64.string().min(1).optional(),
36400
+ kind: z64.string().min(1),
36401
+ content: z64.record(z64.string(), z64.unknown()).optional()
35315
36402
  })
35316
36403
  ).optional()
35317
36404
  });
35318
- var sdkFieldSelectOptionSchema = z62.object({
35319
- value: z62.string(),
35320
- label: z62.string()
36405
+ var sdkFieldSelectOptionSchema = z64.object({
36406
+ value: z64.string(),
36407
+ label: z64.string()
35321
36408
  });
35322
- var sdkBlockFieldConfigSchema = z62.object({
35323
- options: z62.array(sdkFieldSelectOptionSchema).optional()
36409
+ var sdkBlockFieldConfigSchema = z64.object({
36410
+ options: z64.array(sdkFieldSelectOptionSchema).optional()
35324
36411
  });
35325
- var sdkBlockFieldOptionsMapSchema = z62.record(
35326
- z62.string().regex(/^(block\.|custom\.)[a-z][a-z0-9-]*$/, {
36412
+ var sdkBlockFieldOptionsMapSchema = z64.record(
36413
+ z64.string().regex(/^(block\.|custom\.)[a-z][a-z0-9-]*$/, {
35327
36414
  message: "Block ID must be 'block.*' or 'custom.*' format"
35328
36415
  }),
35329
- z62.record(z62.string().min(1), sdkBlockFieldConfigSchema)
36416
+ z64.record(z64.string().min(1), sdkBlockFieldConfigSchema)
35330
36417
  ).optional();
35331
- var sdkContentTypeTemplateConfigSchema = z62.object({
35332
- blocks: z62.array(z62.unknown())
36418
+ var sdkContentTypeTemplateConfigSchema = z64.object({
36419
+ blocks: z64.array(z64.unknown())
35333
36420
  }).passthrough();
35334
- var sdkContentTypeOrderingConfigSchema = z62.object({
35335
- mode: z62.enum(["default", "manual"]).optional()
36421
+ var sdkContentTypeOrderingConfigSchema = z64.object({
36422
+ mode: z64.enum(["default", "manual"]).optional()
35336
36423
  }).optional();
35337
- var sdkContentTypeConfigSchema = z62.object({
35338
- key: z62.string().min(1),
35339
- fields: z62.array(z62.unknown()),
36424
+ var sdkContentTypeConfigSchema = z64.object({
36425
+ key: z64.string().min(1),
36426
+ fields: z64.array(z64.unknown()),
35340
36427
  ordering: sdkContentTypeOrderingConfigSchema,
35341
36428
  template: sdkContentTypeTemplateConfigSchema.nullable().optional()
35342
36429
  }).passthrough();
35343
- var sdkContentConfigSchema = z62.object({
35344
- contentTypes: z62.array(sdkContentTypeConfigSchema).optional(),
35345
- pages: z62.array(z62.unknown()).optional(),
35346
- entries: z62.array(z62.unknown()).optional(),
35347
- navigationMenus: z62.array(z62.unknown()).optional(),
35348
- settings: z62.unknown().optional()
36430
+ var sdkContentConfigSchema = z64.object({
36431
+ contentTypes: z64.array(sdkContentTypeConfigSchema).optional(),
36432
+ pages: z64.array(z64.unknown()).optional(),
36433
+ entries: z64.array(z64.unknown()).optional(),
36434
+ navigationMenus: z64.array(z64.unknown()).optional(),
36435
+ settings: z64.unknown().optional()
35349
36436
  }).passthrough();
35350
36437
  var SDK_WORKFLOW_ID_MAX_LENGTH = 120;
35351
36438
  var SDK_WORKFLOW_TITLE_MAX_LENGTH = 120;
@@ -35360,62 +36447,62 @@ var SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH = 120;
35360
36447
  var SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH = 500;
35361
36448
  var SDK_WORKFLOW_ID_PATTERN = /^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/;
35362
36449
  var SDK_WORKFLOW_ENDPOINT_PATTERN = /^\//;
35363
- var sdkWorkflowIdSchema = z62.string().min(1).max(SDK_WORKFLOW_ID_MAX_LENGTH).regex(SDK_WORKFLOW_ID_PATTERN, {
36450
+ var sdkWorkflowIdSchema = z64.string().min(1).max(SDK_WORKFLOW_ID_MAX_LENGTH).regex(SDK_WORKFLOW_ID_PATTERN, {
35364
36451
  message: "Workflow ID must start with a lowercase letter and use lowercase letters, numbers, dots, underscores, or hyphens"
35365
36452
  });
35366
- 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 "/"' });
35367
- var sdkWorkflowManualTriggerSchema = z62.object({
35368
- type: z62.literal("manual")
36453
+ 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 "/"' });
36454
+ var sdkWorkflowManualTriggerSchema = z64.object({
36455
+ type: z64.literal("manual")
35369
36456
  }).strict();
35370
- var sdkWorkflowTriggerFieldSchema = z62.string().trim().min(1).max(SDK_WORKFLOW_TRIGGER_FIELD_MAX_LENGTH).refine((field) => !field.includes("."), {
36457
+ var sdkWorkflowTriggerFieldSchema = z64.string().trim().min(1).max(SDK_WORKFLOW_TRIGGER_FIELD_MAX_LENGTH).refine((field) => !field.includes("."), {
35371
36458
  message: "Workflow trigger fields must be top-level content field IDs, not paths"
35372
36459
  });
35373
- var sdkWorkflowFieldChangedConditionSchema = z62.object({
36460
+ var sdkWorkflowFieldChangedConditionSchema = z64.object({
35374
36461
  field: sdkWorkflowTriggerFieldSchema,
35375
- changed: z62.literal(true)
36462
+ changed: z64.literal(true)
35376
36463
  }).strict();
35377
- var sdkWorkflowFieldEmptyConditionSchema = z62.object({
36464
+ var sdkWorkflowFieldEmptyConditionSchema = z64.object({
35378
36465
  field: sdkWorkflowTriggerFieldSchema,
35379
- isEmpty: z62.boolean()
36466
+ isEmpty: z64.boolean()
35380
36467
  }).strict();
35381
- var sdkWorkflowEntryDraftUpdatedTriggerSchema = z62.object({
35382
- type: z62.literal("entry.draft.updated"),
35383
- when: z62.array(
35384
- z62.union([
36468
+ var sdkWorkflowEntryDraftUpdatedTriggerSchema = z64.object({
36469
+ type: z64.literal("entry.draft.updated"),
36470
+ when: z64.array(
36471
+ z64.union([
35385
36472
  sdkWorkflowFieldChangedConditionSchema,
35386
36473
  sdkWorkflowFieldEmptyConditionSchema
35387
36474
  ])
35388
36475
  ).min(1).max(SDK_WORKFLOW_TRIGGER_CONDITION_MAX_COUNT)
35389
36476
  }).strict();
35390
- var sdkWorkflowTriggerSchema = z62.discriminatedUnion("type", [
36477
+ var sdkWorkflowTriggerSchema = z64.discriminatedUnion("type", [
35391
36478
  sdkWorkflowManualTriggerSchema,
35392
36479
  sdkWorkflowEntryDraftUpdatedTriggerSchema
35393
36480
  ]);
35394
- var sdkWorkflowConfirmationSchema = z62.object({
35395
- title: z62.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH),
35396
- body: z62.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH).optional()
36481
+ var sdkWorkflowConfirmationSchema = z64.object({
36482
+ title: z64.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH),
36483
+ body: z64.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH).optional()
35397
36484
  }).strict();
35398
- var sdkWorkflowConfigSchema = z62.object({
36485
+ var sdkWorkflowConfigSchema = z64.object({
35399
36486
  id: sdkWorkflowIdSchema,
35400
- title: z62.string().trim().min(1).max(SDK_WORKFLOW_TITLE_MAX_LENGTH),
35401
- description: z62.string().trim().min(1).max(SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH).optional(),
35402
- contentType: z62.string().trim().min(1).max(SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH),
36487
+ title: z64.string().trim().min(1).max(SDK_WORKFLOW_TITLE_MAX_LENGTH),
36488
+ description: z64.string().trim().min(1).max(SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH).optional(),
36489
+ contentType: z64.string().trim().min(1).max(SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH),
35403
36490
  endpoint: sdkWorkflowEndpointSchema,
35404
- triggers: z62.array(sdkWorkflowTriggerSchema).min(1).max(SDK_WORKFLOW_TRIGGER_MAX_COUNT),
36491
+ triggers: z64.array(sdkWorkflowTriggerSchema).min(1).max(SDK_WORKFLOW_TRIGGER_MAX_COUNT),
35405
36492
  confirmation: sdkWorkflowConfirmationSchema.optional()
35406
36493
  }).strict();
35407
- var sdkWorkflowsSchema = z62.array(sdkWorkflowConfigSchema).max(SDK_WORKFLOW_MAX_COUNT, "Maximum 50 workflows per site").refine((workflows) => {
36494
+ var sdkWorkflowsSchema = z64.array(sdkWorkflowConfigSchema).max(SDK_WORKFLOW_MAX_COUNT, "Maximum 50 workflows per site").refine((workflows) => {
35408
36495
  const ids = workflows.map((workflow) => workflow.id);
35409
36496
  return ids.length === new Set(ids).size;
35410
36497
  }, { message: "Workflow IDs must be unique" }).optional();
35411
- var riverbankSiteConfigInputSchema = z62.object({
35412
- siteId: z62.string().uuid(),
35413
- previewUrl: z62.string().url().optional(),
35414
- liveUrl: z62.string().url().optional(),
36498
+ var riverbankSiteConfigInputSchema = z64.object({
36499
+ siteId: z64.string().uuid(),
36500
+ previewUrl: z64.string().url().optional(),
36501
+ liveUrl: z64.string().url().optional(),
35415
36502
  theme: sdkThemeConfigSchema.optional(),
35416
36503
  styles: sdkSiteStyleConfigSchema.optional(),
35417
36504
  layout: sdkSiteLayoutConfigSchema.optional(),
35418
- customBlocks: z62.array(sdkCustomBlockInputSchema).max(100, "Maximum 100 custom blocks per site").refine((blocks) => {
36505
+ customBlocks: z64.array(sdkCustomBlockInputSchema).max(100, "Maximum 100 custom blocks per site").refine((blocks) => {
35419
36506
  const ids = blocks.map((b) => b.id);
35420
36507
  return ids.length === new Set(ids).size;
35421
36508
  }, { message: "Block IDs must be unique" }).optional(),
@@ -35423,50 +36510,50 @@ var riverbankSiteConfigInputSchema = z62.object({
35423
36510
  blockFieldExtensions: sdkBlockFieldExtensionsInputSchema.optional(),
35424
36511
  workflows: sdkWorkflowsSchema,
35425
36512
  content: sdkContentConfigSchema.optional(),
35426
- contentDir: z62.string().optional(),
35427
- sync: z62.object({
35428
- existingEntries: z62.enum(["skip", "update"]).optional()
36513
+ contentDir: z64.string().optional(),
36514
+ sync: z64.object({
36515
+ existingEntries: z64.enum(["skip", "update"]).optional()
35429
36516
  }).optional(),
35430
- deploy: z62.object({
35431
- verifyCommand: z62.string().optional(),
35432
- prebuildOutput: z62.string().optional()
36517
+ deploy: z64.object({
36518
+ verifyCommand: z64.string().optional(),
36519
+ prebuildOutput: z64.string().optional()
35433
36520
  }).optional(),
35434
- themeSource: z62.enum(["local", "cms"]).optional(),
35435
- activeTheme: z62.string().optional(),
35436
- enablePortal: z62.boolean().optional(),
36521
+ themeSource: z64.enum(["local", "cms"]).optional(),
36522
+ activeTheme: z64.string().optional(),
36523
+ enablePortal: z64.boolean().optional(),
35437
36524
  dashboard: dashboardConfigSchema.optional()
35438
36525
  }).strict();
35439
- var pushSdkConfigBodySchema = z62.object({
36526
+ var pushSdkConfigBodySchema = z64.object({
35440
36527
  config: riverbankSiteConfigInputSchema,
35441
- forceContentTypes: z62.boolean().optional()
36528
+ forceContentTypes: z64.boolean().optional()
35442
36529
  }).strict();
35443
36530
 
35444
36531
  // ../api/src/siteOnboarding.ts
35445
- import { z as z63 } from "zod";
36532
+ import { z as z65 } from "zod";
35446
36533
  var LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS = {
35447
36534
  configure_appointments: {
35448
36535
  requirementId: "configure_appointments",
35449
36536
  reason: "launch_anyway"
35450
36537
  }
35451
36538
  };
35452
- var acknowledgeLaunchRequirementRequestSchema = z63.discriminatedUnion(
36539
+ var acknowledgeLaunchRequirementRequestSchema = z65.discriminatedUnion(
35453
36540
  "requirementId",
35454
36541
  [
35455
- z63.object({
35456
- requirementId: z63.literal("review_generated_site")
36542
+ z65.object({
36543
+ requirementId: z65.literal("review_generated_site")
35457
36544
  }),
35458
- z63.object({
35459
- requirementId: z63.literal(
36545
+ z65.object({
36546
+ requirementId: z65.literal(
35460
36547
  LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS.configure_appointments.requirementId
35461
36548
  ),
35462
- overrideReason: z63.literal(
36549
+ overrideReason: z65.literal(
35463
36550
  LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS.configure_appointments.reason
35464
36551
  )
35465
36552
  })
35466
36553
  ]
35467
36554
  );
35468
- var goLiveSiteRequestSchema = z63.object({
35469
- acceptExtraSiteCharge: z63.boolean().optional()
36555
+ var goLiveSiteRequestSchema = z65.object({
36556
+ acceptExtraSiteCharge: z65.boolean().optional()
35470
36557
  });
35471
36558
 
35472
36559
  // ../surfaces/src/index.ts
@@ -35550,7 +36637,7 @@ var COURSE_ENROLLMENT_REFUND_FAILED_CODES = [
35550
36637
  ];
35551
36638
 
35552
36639
  // ../api/src/bookingVerticals.ts
35553
- import { z as z64 } from "zod";
36640
+ import { z as z66 } from "zod";
35554
36641
  var VERTICAL_IDS = [
35555
36642
  "yoga_wellness",
35556
36643
  "fitness_pt",
@@ -35715,39 +36802,39 @@ function getSiteVerticalConfigIssues(rawConfig, config) {
35715
36802
  }
35716
36803
  return [...issues];
35717
36804
  }
35718
- var VerticalIdSchema = z64.string().trim().transform((value, ctx) => {
36805
+ var VerticalIdSchema = z66.string().trim().transform((value, ctx) => {
35719
36806
  const parsed = parseVerticalId(value);
35720
36807
  if (!parsed) {
35721
36808
  ctx.addIssue({
35722
- code: z64.ZodIssueCode.custom,
36809
+ code: z66.ZodIssueCode.custom,
35723
36810
  message: "Unknown booking vertical"
35724
36811
  });
35725
- return z64.NEVER;
36812
+ return z66.NEVER;
35726
36813
  }
35727
36814
  return parsed;
35728
36815
  });
35729
- var VerticalPresetIdSchema = z64.string().trim().transform((value, ctx) => {
36816
+ var VerticalPresetIdSchema = z66.string().trim().transform((value, ctx) => {
35730
36817
  const parsed = parseVerticalPresetId(value);
35731
36818
  if (!parsed) {
35732
36819
  ctx.addIssue({
35733
- code: z64.ZodIssueCode.custom,
36820
+ code: z66.ZodIssueCode.custom,
35734
36821
  message: "Unknown booking preset"
35735
36822
  });
35736
- return z64.NEVER;
36823
+ return z66.NEVER;
35737
36824
  }
35738
36825
  return parsed;
35739
36826
  });
35740
- var BookingVerticalConfigSchema = z64.object({
36827
+ var BookingVerticalConfigSchema = z66.object({
35741
36828
  verticalId: VerticalIdSchema.nullable(),
35742
- selectedPresetIds: z64.array(VerticalPresetIdSchema).max(20)
36829
+ selectedPresetIds: z66.array(VerticalPresetIdSchema).max(20)
35743
36830
  }).transform((value, ctx) => {
35744
36831
  const resolved = resolveSiteVerticalBookingConfig(value);
35745
36832
  if (resolved.kind === "invalid") {
35746
36833
  ctx.addIssue({
35747
- code: z64.ZodIssueCode.custom,
36834
+ code: z66.ZodIssueCode.custom,
35748
36835
  message: `Invalid booking vertical config: ${resolved.issues.join(", ")}`
35749
36836
  });
35750
- return z64.NEVER;
36837
+ return z66.NEVER;
35751
36838
  }
35752
36839
  return resolved.config;
35753
36840
  });
@@ -35769,56 +36856,56 @@ function preset(id, verticalId, canonicalBehaviour, label, pluralLabel, descript
35769
36856
  }
35770
36857
 
35771
36858
  // ../api/src/utils/isRecord.ts
35772
- function isRecord3(value) {
36859
+ function isRecord4(value) {
35773
36860
  return typeof value === "object" && value !== null && !Array.isArray(value);
35774
36861
  }
35775
36862
 
35776
36863
  // ../api/src/appointmentSetup.ts
35777
- import { z as z65 } from "zod";
36864
+ import { z as z67 } from "zod";
35778
36865
  var APPOINTMENT_SETUP_MAX_MINUTES = 1440;
35779
- var appointmentSetupRefSchema = z65.discriminatedUnion("kind", [
35780
- z65.object({ kind: z65.literal("existing"), id: z65.string().min(1) }),
35781
- z65.object({ kind: z65.literal("new"), draftId: z65.string().min(1) })
36866
+ var appointmentSetupRefSchema = z67.discriminatedUnion("kind", [
36867
+ z67.object({ kind: z67.literal("existing"), id: z67.string().min(1) }),
36868
+ z67.object({ kind: z67.literal("new"), draftId: z67.string().min(1) })
35782
36869
  ]);
35783
- var appointmentSetupVenueChoiceSchema = z65.discriminatedUnion("kind", [
35784
- z65.object({ kind: z65.literal("none") }),
35785
- z65.object({ kind: z65.literal("existing"), venueId: z65.string().min(1) }),
35786
- z65.object({
35787
- kind: z65.literal("create"),
35788
- draftId: z65.string().min(1),
35789
- title: z65.string().trim().min(1),
35790
- description: z65.string().nullable(),
35791
- timezone: z65.string().trim().min(1).nullable(),
35792
- addressJson: z65.record(z65.string(), z65.unknown()),
35793
- locationJson: z65.object({ lat: z65.number(), lng: z65.number() }).nullable()
36870
+ var appointmentSetupVenueChoiceSchema = z67.discriminatedUnion("kind", [
36871
+ z67.object({ kind: z67.literal("none") }),
36872
+ z67.object({ kind: z67.literal("existing"), venueId: z67.string().min(1) }),
36873
+ z67.object({
36874
+ kind: z67.literal("create"),
36875
+ draftId: z67.string().min(1),
36876
+ title: z67.string().trim().min(1),
36877
+ description: z67.string().nullable(),
36878
+ timezone: z67.string().trim().min(1).nullable(),
36879
+ addressJson: z67.record(z67.string(), z67.unknown()),
36880
+ locationJson: z67.object({ lat: z67.number(), lng: z67.number() }).nullable()
35794
36881
  })
35795
36882
  ]);
35796
- var appointmentSetupPaymentDraftSchema = z65.object({
35797
- priceType: z65.union([z65.literal("free"), z65.literal("paid")])
35798
- });
35799
- var appointmentSetupServiceAssignmentDraftSchema = z65.discriminatedUnion("kind", [
35800
- z65.object({ kind: z65.literal("all_practitioners") }),
35801
- z65.object({
35802
- kind: z65.literal("selected_practitioners"),
35803
- resourceRefs: z65.array(appointmentSetupRefSchema)
36883
+ var appointmentSetupPaymentDraftSchema = z67.object({
36884
+ priceType: z67.union([z67.literal("free"), z67.literal("paid")])
36885
+ });
36886
+ var appointmentSetupServiceAssignmentDraftSchema = z67.discriminatedUnion("kind", [
36887
+ z67.object({ kind: z67.literal("all_practitioners") }),
36888
+ z67.object({
36889
+ kind: z67.literal("selected_practitioners"),
36890
+ resourceRefs: z67.array(appointmentSetupRefSchema)
35804
36891
  })
35805
36892
  ]);
35806
- var appointmentSetupServiceDraftSchema = z65.object({
36893
+ var appointmentSetupServiceDraftSchema = z67.object({
35807
36894
  ref: appointmentSetupRefSchema,
35808
- title: z65.string().trim().min(1),
35809
- description: z65.string().nullable(),
35810
- durationMinutes: z65.number().int().positive().max(APPOINTMENT_SETUP_MAX_MINUTES),
35811
- prepMinutes: z65.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
35812
- cleanupMinutes: z65.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
35813
- priceAmount: z65.number().int().nonnegative().nullable(),
35814
- isActive: z65.boolean(),
35815
- locationType: z65.union([
35816
- z65.literal("virtual"),
35817
- z65.literal("in_person"),
35818
- z65.literal("hybrid")
36895
+ title: z67.string().trim().min(1),
36896
+ description: z67.string().nullable(),
36897
+ durationMinutes: z67.number().int().positive().max(APPOINTMENT_SETUP_MAX_MINUTES),
36898
+ prepMinutes: z67.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
36899
+ cleanupMinutes: z67.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
36900
+ priceAmount: z67.number().int().nonnegative().nullable(),
36901
+ isActive: z67.boolean(),
36902
+ locationType: z67.union([
36903
+ z67.literal("virtual"),
36904
+ z67.literal("in_person"),
36905
+ z67.literal("hybrid")
35819
36906
  ]),
35820
36907
  venue: appointmentSetupVenueChoiceSchema,
35821
- timezone: z65.string().trim().min(1).nullable(),
36908
+ timezone: z67.string().trim().min(1).nullable(),
35822
36909
  payment: appointmentSetupPaymentDraftSchema,
35823
36910
  assignment: appointmentSetupServiceAssignmentDraftSchema
35824
36911
  }).superRefine((service, ctx) => {
@@ -35837,49 +36924,49 @@ var appointmentSetupServiceDraftSchema = z65.object({
35837
36924
  });
35838
36925
  }
35839
36926
  });
35840
- var appointmentSetupPractitionerDraftSchema = z65.object({
36927
+ var appointmentSetupPractitionerDraftSchema = z67.object({
35841
36928
  ref: appointmentSetupRefSchema,
35842
- displayName: z65.string().trim().min(1),
35843
- bio: z65.string().nullable(),
35844
- timezone: z65.string().trim().min(1),
35845
- colorHex: z65.string().nullable()
35846
- });
35847
- var appointmentSetupWeeklyWindowDraftSchema = z65.object({
35848
- weekday: z65.number().int().min(0).max(6),
35849
- startTime: z65.string(),
35850
- endTime: z65.string()
35851
- });
35852
- var appointmentSetupStartTimePolicyDraftSchema = z65.discriminatedUnion("kind", [
35853
- z65.object({ kind: z65.literal("automatic_spacing") }),
35854
- z65.object({
35855
- kind: z65.literal("regular_interval"),
35856
- intervalMinutes: z65.union([
35857
- z65.literal(10),
35858
- z65.literal(15),
35859
- z65.literal(20),
35860
- z65.literal(30),
35861
- z65.literal(45),
35862
- z65.literal(60)
36929
+ displayName: z67.string().trim().min(1),
36930
+ bio: z67.string().nullable(),
36931
+ timezone: z67.string().trim().min(1),
36932
+ colorHex: z67.string().nullable()
36933
+ });
36934
+ var appointmentSetupWeeklyWindowDraftSchema = z67.object({
36935
+ weekday: z67.number().int().min(0).max(6),
36936
+ startTime: z67.string(),
36937
+ endTime: z67.string()
36938
+ });
36939
+ var appointmentSetupStartTimePolicyDraftSchema = z67.discriminatedUnion("kind", [
36940
+ z67.object({ kind: z67.literal("automatic_spacing") }),
36941
+ z67.object({
36942
+ kind: z67.literal("regular_interval"),
36943
+ intervalMinutes: z67.union([
36944
+ z67.literal(10),
36945
+ z67.literal(15),
36946
+ z67.literal(20),
36947
+ z67.literal(30),
36948
+ z67.literal(45),
36949
+ z67.literal(60)
35863
36950
  ])
35864
36951
  })
35865
36952
  ]);
35866
- var appointmentSetupAvailabilityDraftSchema = z65.object({
35867
- kind: z65.literal("weekly_windows"),
36953
+ var appointmentSetupAvailabilityDraftSchema = z67.object({
36954
+ kind: z67.literal("weekly_windows"),
35868
36955
  resourceRef: appointmentSetupRefSchema,
35869
36956
  serviceRef: appointmentSetupRefSchema.nullable(),
35870
- windows: z65.array(appointmentSetupWeeklyWindowDraftSchema),
36957
+ windows: z67.array(appointmentSetupWeeklyWindowDraftSchema),
35871
36958
  startTimePolicy: appointmentSetupStartTimePolicyDraftSchema.optional()
35872
36959
  });
35873
36960
  var APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX = 28 * 24 * 60;
35874
36961
  var APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX = 10 * 365 * 24 * 60;
35875
- var appointmentSetupBookingNoticeSchema = z65.object({
35876
- minLeadMinutes: z65.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX),
35877
- maxBookingNoticeMinutes: z65.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX)
35878
- });
35879
- var applyAppointmentSetupRequestSchema = z65.object({
35880
- services: z65.array(appointmentSetupServiceDraftSchema),
35881
- practitioners: z65.array(appointmentSetupPractitionerDraftSchema),
35882
- availability: z65.array(appointmentSetupAvailabilityDraftSchema),
36962
+ var appointmentSetupBookingNoticeSchema = z67.object({
36963
+ minLeadMinutes: z67.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX),
36964
+ maxBookingNoticeMinutes: z67.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX)
36965
+ });
36966
+ var applyAppointmentSetupRequestSchema = z67.object({
36967
+ services: z67.array(appointmentSetupServiceDraftSchema),
36968
+ practitioners: z67.array(appointmentSetupPractitionerDraftSchema),
36969
+ availability: z67.array(appointmentSetupAvailabilityDraftSchema),
35883
36970
  bookingNotice: appointmentSetupBookingNoticeSchema
35884
36971
  });
35885
36972
 
@@ -35912,24 +36999,24 @@ var STAFF_CANCELLATION_CONTEXT_CATEGORIES = [
35912
36999
  ];
35913
37000
 
35914
37001
  // ../api/src/siteBanner.ts
35915
- import { z as z66 } from "zod";
37002
+ import { z as z68 } from "zod";
35916
37003
  var SITE_BANNER_SCOPE_VALUES = ["homepage", "all-pages"];
35917
37004
  var SITE_BANNER_TONE_VALUES = ["announcement", "promotion", "notice", "warning"];
35918
37005
  var SITE_BANNER_MAX_TEXT_LENGTH = 320;
35919
37006
  var SITE_BANNER_MAX_PARAGRAPHS = 2;
35920
- var siteBannerScopeSchema = z66.enum(SITE_BANNER_SCOPE_VALUES);
35921
- var siteBannerToneSchema = z66.enum(SITE_BANNER_TONE_VALUES);
35922
- var siteBannerBodySchema = z66.unknown().transform(unwrapRichTextValue);
35923
- var siteBannerCtaSchema = z66.object({
35924
- label: z66.string().trim().min(1),
37007
+ var siteBannerScopeSchema = z68.enum(SITE_BANNER_SCOPE_VALUES);
37008
+ var siteBannerToneSchema = z68.enum(SITE_BANNER_TONE_VALUES);
37009
+ var siteBannerBodySchema = z68.unknown().transform(unwrapRichTextValue);
37010
+ var siteBannerCtaSchema = z68.object({
37011
+ label: z68.string().trim().min(1),
35925
37012
  link: linkPayloadSchema
35926
37013
  });
35927
- var siteBannerSettingsSchema = z66.discriminatedUnion("enabled", [
35928
- z66.object({
35929
- enabled: z66.literal(false)
37014
+ var siteBannerSettingsSchema = z68.discriminatedUnion("enabled", [
37015
+ z68.object({
37016
+ enabled: z68.literal(false)
35930
37017
  }),
35931
- z66.object({
35932
- enabled: z66.literal(true),
37018
+ z68.object({
37019
+ enabled: z68.literal(true),
35933
37020
  scope: siteBannerScopeSchema,
35934
37021
  tone: siteBannerToneSchema,
35935
37022
  body: siteBannerBodySchema,
@@ -35943,7 +37030,7 @@ var siteBannerSettingsInputSchema = siteBannerSettingsSchema.superRefine((value,
35943
37030
  const analysis = analyzeSiteBannerBody(value.body);
35944
37031
  for (const issue of analysis.issues) {
35945
37032
  ctx.addIssue({
35946
- code: z66.ZodIssueCode.custom,
37033
+ code: z68.ZodIssueCode.custom,
35947
37034
  path: ["body"],
35948
37035
  message: siteBannerBodyIssueMessage(issue)
35949
37036
  });
@@ -36076,7 +37163,7 @@ function sanitizeMarks(marks) {
36076
37163
  if (mark.type === "bold" || mark.type === "strong" || mark.type === "italic" || mark.type === "em") {
36077
37164
  return [{ type: mark.type }];
36078
37165
  }
36079
- if (mark.type === "link" && isRecord3(mark.attrs) && typeof mark.attrs.href === "string") {
37166
+ if (mark.type === "link" && isRecord4(mark.attrs) && typeof mark.attrs.href === "string") {
36080
37167
  const attrs = { href: mark.attrs.href };
36081
37168
  if (typeof mark.attrs.target === "string" && mark.attrs.target.trim().length > 0) {
36082
37169
  attrs.target = mark.attrs.target;
@@ -36091,10 +37178,10 @@ function sanitizeMarks(marks) {
36091
37178
  return sanitized.length > 0 ? sanitized : void 0;
36092
37179
  }
36093
37180
  function unwrapRichTextValue(value) {
36094
- if (isRecord3(value) && isRecord3(value.doc)) {
37181
+ if (isRecord4(value) && isRecord4(value.doc)) {
36095
37182
  return unwrapRichTextValue(value.doc);
36096
37183
  }
36097
- if (isRecord3(value) && value.type === "doc") {
37184
+ if (isRecord4(value) && value.type === "doc") {
36098
37185
  return {
36099
37186
  type: "doc",
36100
37187
  content: Array.isArray(value.content) ? value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) : []
@@ -36103,7 +37190,7 @@ function unwrapRichTextValue(value) {
36103
37190
  return EMPTY_SITE_BANNER_BODY;
36104
37191
  }
36105
37192
  function isTipTapNodeLike(value) {
36106
- return isRecord3(value) && typeof value.type === "string";
37193
+ return isRecord4(value) && typeof value.type === "string";
36107
37194
  }
36108
37195
  function coerceTipTapNode(value) {
36109
37196
  return {
@@ -36111,9 +37198,9 @@ function coerceTipTapNode(value) {
36111
37198
  ...Array.isArray(value.content) ? { content: value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) } : {},
36112
37199
  ...typeof value.text === "string" ? { text: value.text } : {},
36113
37200
  ...Array.isArray(value.marks) ? {
36114
- marks: value.marks.filter((mark) => isRecord3(mark) && typeof mark.type === "string").map((mark) => ({
37201
+ marks: value.marks.filter((mark) => isRecord4(mark) && typeof mark.type === "string").map((mark) => ({
36115
37202
  type: mark.type,
36116
- ...isRecord3(mark.attrs) ? { attrs: mark.attrs } : {}
37203
+ ...isRecord4(mark.attrs) ? { attrs: mark.attrs } : {}
36117
37204
  }))
36118
37205
  } : {}
36119
37206
  };
@@ -36205,71 +37292,71 @@ function unsafeAsNavigationMenuIdentifier(identifier) {
36205
37292
  var MAIN_NAVIGATION_MENU_IDENTIFIER = unsafeAsNavigationMenuIdentifier("main");
36206
37293
 
36207
37294
  // ../api/src/aiPlayground.ts
36208
- import { z as z67 } from "zod";
36209
- var Rfc6902PatchOp = z67.discriminatedUnion("op", [
37295
+ import { z as z69 } from "zod";
37296
+ var Rfc6902PatchOp = z69.discriminatedUnion("op", [
36210
37297
  // Standard RFC-6902 operations
36211
- z67.object({
36212
- op: z67.literal("add"),
36213
- path: z67.string(),
36214
- value: z67.unknown()
37298
+ z69.object({
37299
+ op: z69.literal("add"),
37300
+ path: z69.string(),
37301
+ value: z69.unknown()
36215
37302
  }),
36216
- z67.object({
36217
- op: z67.literal("remove"),
36218
- path: z67.string()
37303
+ z69.object({
37304
+ op: z69.literal("remove"),
37305
+ path: z69.string()
36219
37306
  }),
36220
- z67.object({
36221
- op: z67.literal("replace"),
36222
- path: z67.string(),
36223
- value: z67.unknown()
37307
+ z69.object({
37308
+ op: z69.literal("replace"),
37309
+ path: z69.string(),
37310
+ value: z69.unknown()
36224
37311
  }),
36225
- z67.object({
36226
- op: z67.literal("move"),
36227
- from: z67.string(),
36228
- path: z67.string()
37312
+ z69.object({
37313
+ op: z69.literal("move"),
37314
+ from: z69.string(),
37315
+ path: z69.string()
36229
37316
  }),
36230
- z67.object({
36231
- op: z67.literal("copy"),
36232
- from: z67.string(),
36233
- path: z67.string()
37317
+ z69.object({
37318
+ op: z69.literal("copy"),
37319
+ from: z69.string(),
37320
+ path: z69.string()
36234
37321
  }),
36235
37322
  // Block-level operations (Phase 2)
36236
- z67.object({
36237
- op: z67.literal("add_block"),
36238
- blockKind: z67.string(),
36239
- afterBlockId: z67.string().nullable(),
36240
- content: z67.record(z67.string(), z67.unknown()),
36241
- rationale: z67.string()
37323
+ z69.object({
37324
+ op: z69.literal("add_block"),
37325
+ blockKind: z69.string(),
37326
+ afterBlockId: z69.string().nullable(),
37327
+ content: z69.record(z69.string(), z69.unknown()),
37328
+ rationale: z69.string()
36242
37329
  }),
36243
- z67.object({
36244
- op: z67.literal("delete_block"),
36245
- blockId: z67.string(),
36246
- rationale: z67.string()
37330
+ z69.object({
37331
+ op: z69.literal("delete_block"),
37332
+ blockId: z69.string(),
37333
+ rationale: z69.string()
36247
37334
  }),
36248
- z67.object({
36249
- op: z67.literal("reorder_block"),
36250
- blockId: z67.string(),
36251
- afterBlockId: z67.string().nullable(),
36252
- rationale: z67.string()
37335
+ z69.object({
37336
+ op: z69.literal("reorder_block"),
37337
+ blockId: z69.string(),
37338
+ afterBlockId: z69.string().nullable(),
37339
+ rationale: z69.string()
36253
37340
  })
36254
37341
  ]);
36255
- var PlaygroundProposeRequest = z67.object({
36256
- request: z67.string().min(1).max(2e3)
37342
+ var PlaygroundProposeRequest = z69.object({
37343
+ request: z69.string().min(1).max(2e3)
36257
37344
  });
36258
- var MultiPagePatchEnvelope = z67.object({
36259
- pageId: z67.string(),
36260
- blockId: z67.string().optional(),
37345
+ var MultiPagePatchEnvelope = z69.object({
37346
+ pageId: z69.string(),
37347
+ blockId: z69.string().optional(),
36261
37348
  // Not present for page-level ops
36262
- blockKind: z67.string().optional(),
36263
- blockPurpose: z67.string().optional().nullable(),
36264
- ops: z67.array(Rfc6902PatchOp),
36265
- rationale: z67.string(),
36266
- currentContent: z67.record(z67.string(), z67.unknown()).optional()
36267
- });
36268
- var MultiPageUpdateResponse = z67.object({
36269
- patches: z67.array(MultiPagePatchEnvelope),
36270
- assistantMessage: z67.string(),
36271
- pagesModified: z67.number(),
36272
- toolCallsUsed: z67.number()
37349
+ blockKind: z69.string().optional(),
37350
+ blockPurpose: z69.string().optional().nullable(),
37351
+ ops: z69.array(Rfc6902PatchOp),
37352
+ rationale: z69.string(),
37353
+ currentContent: z69.record(z69.string(), z69.unknown()).optional()
37354
+ });
37355
+ var MultiPageUpdateResponse = z69.object({
37356
+ patches: z69.array(MultiPagePatchEnvelope),
37357
+ assistantMessage: z69.string(),
37358
+ pagesModified: z69.number(),
37359
+ toolCallsUsed: z69.number()
36273
37360
  });
36274
37361
 
36275
37362
  // src/data/prefetchBlockData.ts