@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
@@ -186,6 +186,7 @@ var ALLOWED_NODE_TYPES = [
186
186
  "event-spotlight",
187
187
  "event-listing",
188
188
  "event-calendar",
189
+ "offerings-preview",
189
190
  "event-combined",
190
191
  // Commerce
191
192
  "shop",
@@ -991,25 +992,10 @@ function registerManifest(manifest) {
991
992
  return manifest;
992
993
  }
993
994
 
994
- // ../theme-core/src/site-styles/appearancePresetResolution.ts
995
- function assertValidOptionGroups(preset) {
996
- preset.optionGroups?.forEach((group) => {
997
- const selectedOption = group.options.find(
998
- (option) => option.id === group.selectedOptionId
999
- );
1000
- if (!selectedOption) {
1001
- throw new Error(
1002
- `Appearance preset "${preset.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
1003
- );
1004
- }
1005
- });
1006
- }
1007
- function defineBlockAppearancePreset(preset) {
1008
- assertValidOptionGroups(preset);
1009
- return preset;
1010
- }
1011
-
1012
995
  // ../theme-core/src/site-styles/types.ts
996
+ function defineExactCatalog() {
997
+ return (entries) => entries;
998
+ }
1013
999
  function asDesignBlockId(value) {
1014
1000
  return brandNonEmptyString(value, "DesignBlockId");
1015
1001
  }
@@ -1158,11 +1144,31 @@ function defineBlockDesignCapability(capability) {
1158
1144
  tileTreatments: capability.tileTreatments ?? ["default"],
1159
1145
  eventListTreatments: capability.eventListTreatments ?? ["plain"],
1160
1146
  eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"],
1161
- ...capability.accordionIconSets ? { accordionIconSets: capability.accordionIconSets } : {},
1162
- ...capability.headingDecorations ? { headingDecorations: capability.headingDecorations } : {}
1147
+ headingDecorationCapability: capability.headingDecorationCapability ?? {
1148
+ kind: "unsupported"
1149
+ },
1150
+ ...capability.accordionIconSets ? { accordionIconSets: capability.accordionIconSets } : {}
1163
1151
  };
1164
1152
  }
1165
1153
 
1154
+ // ../theme-core/src/site-styles/appearancePresetResolution.ts
1155
+ function assertValidOptionGroups(preset) {
1156
+ preset.optionGroups?.forEach((group) => {
1157
+ const selectedOption = group.options.find(
1158
+ (option) => option.id === group.selectedOptionId
1159
+ );
1160
+ if (!selectedOption) {
1161
+ throw new Error(
1162
+ `Appearance preset "${preset.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
1163
+ );
1164
+ }
1165
+ });
1166
+ }
1167
+ function defineBlockAppearancePreset(preset) {
1168
+ assertValidOptionGroups(preset);
1169
+ return preset;
1170
+ }
1171
+
1166
1172
  // ../theme-core/src/site-styles/blockAppearancePresets.ts
1167
1173
  var blockAppearancePresets = [
1168
1174
  defineBlockAppearancePreset({
@@ -1524,8 +1530,25 @@ var blockAppearancePresets = [
1524
1530
  kind: "block-design",
1525
1531
  id: "intro-organic-statement",
1526
1532
  target: "intro",
1527
- label: "Organic intro statement",
1533
+ label: "Intro statement",
1534
+ blockKinds: ["block.intro"],
1535
+ design: {
1536
+ sectionSurface: "base",
1537
+ contentFrame: plainFrame,
1538
+ itemSurface: "none",
1539
+ transitionAfter: "soft-fade-short",
1540
+ emphasis: "high"
1541
+ }
1542
+ }),
1543
+ defineBlockAppearancePreset({
1544
+ kind: "block-design",
1545
+ id: "intro-editorial-statement",
1546
+ target: "intro",
1547
+ label: "Editorial intro statement",
1528
1548
  blockKinds: ["block.intro"],
1549
+ constraints: {
1550
+ layoutVariantKeys: ["centered-copy", "statement-copy"]
1551
+ },
1529
1552
  design: {
1530
1553
  sectionSurface: "base",
1531
1554
  contentFrame: plainFrame,
@@ -1548,12 +1571,7 @@ var blockAppearancePresets = [
1548
1571
  contentFrame: plainFrame,
1549
1572
  itemSurface: "none",
1550
1573
  transitionAfter: "soft-fade-short",
1551
- emphasis: "medium",
1552
- headingDecoration: {
1553
- family: "organic-squiggle",
1554
- placement: "after-heading",
1555
- colorToken: "primary"
1556
- }
1574
+ emphasis: "medium"
1557
1575
  }
1558
1576
  }),
1559
1577
  defineBlockAppearancePreset({
@@ -1570,6 +1588,48 @@ var blockAppearancePresets = [
1570
1588
  emphasis: "medium"
1571
1589
  }
1572
1590
  }),
1591
+ defineBlockAppearancePreset({
1592
+ kind: "block-design",
1593
+ id: "offerings-preview-default-cards",
1594
+ target: "offerings",
1595
+ label: "Default offering cards",
1596
+ blockKinds: ["block.offerings-preview"],
1597
+ design: {
1598
+ sectionSurface: "base",
1599
+ contentFrame: plainFrame,
1600
+ itemSurface: "default",
1601
+ transitionAfter: "soft-fade-short",
1602
+ emphasis: "medium"
1603
+ }
1604
+ }),
1605
+ defineBlockAppearancePreset({
1606
+ kind: "block-design",
1607
+ id: "offerings-preview-secondary-cards",
1608
+ target: "offerings",
1609
+ label: "Secondary offering cards",
1610
+ blockKinds: ["block.offerings-preview"],
1611
+ design: {
1612
+ sectionSurface: "muted-band",
1613
+ contentFrame: plainFrame,
1614
+ itemSurface: "inset",
1615
+ transitionAfter: "soft-fade-short",
1616
+ emphasis: "medium"
1617
+ }
1618
+ }),
1619
+ defineBlockAppearancePreset({
1620
+ kind: "block-design",
1621
+ id: "offerings-preview-non-carded",
1622
+ target: "offerings",
1623
+ label: "Non-carded offerings",
1624
+ blockKinds: ["block.offerings-preview"],
1625
+ design: {
1626
+ sectionSurface: "muted-band",
1627
+ contentFrame: plainFrame,
1628
+ itemSurface: "editorial",
1629
+ transitionAfter: "soft-fade-short",
1630
+ emphasis: "medium"
1631
+ }
1632
+ }),
1573
1633
  defineBlockAppearancePreset({
1574
1634
  kind: "block-design",
1575
1635
  id: "feature-cards-raised-rule",
@@ -1584,6 +1644,20 @@ var blockAppearancePresets = [
1584
1644
  emphasis: "high"
1585
1645
  }
1586
1646
  }),
1647
+ defineBlockAppearancePreset({
1648
+ kind: "block-design",
1649
+ id: "feature-cards-bold-colors",
1650
+ target: "feature-cards",
1651
+ label: "Bold colour-blocked cards",
1652
+ blockKinds: ["block.feature-cards"],
1653
+ design: {
1654
+ sectionSurface: "base",
1655
+ contentFrame: plainFrame,
1656
+ itemSurface: "color-blocked",
1657
+ transitionAfter: "none",
1658
+ emphasis: "high"
1659
+ }
1660
+ }),
1587
1661
  defineBlockAppearancePreset({
1588
1662
  kind: "block-design",
1589
1663
  id: "feature-cards-editorial-columns",
@@ -1837,7 +1911,7 @@ var blockAppearancePresets = [
1837
1911
  kind: "block-design",
1838
1912
  id: "contact-form-panel",
1839
1913
  target: "contact-form",
1840
- label: "Contact form panel",
1914
+ label: "Raised form panel",
1841
1915
  blockKinds: ["block.form"],
1842
1916
  design: {
1843
1917
  sectionSurface: "muted-band",
@@ -1849,30 +1923,16 @@ var blockAppearancePresets = [
1849
1923
  }),
1850
1924
  defineBlockAppearancePreset({
1851
1925
  kind: "block-design",
1852
- id: "contact-form-dark-card",
1853
- target: "contact-form",
1854
- label: "Dark form card",
1855
- blockKinds: ["block.form"],
1856
- design: {
1857
- sectionSurface: "accent-band",
1858
- contentFrame: panelFrame("raised"),
1859
- itemSurface: "none",
1860
- transitionAfter: "soft-fade-short",
1861
- emphasis: "high"
1862
- }
1863
- }),
1864
- defineBlockAppearancePreset({
1865
- kind: "block-design",
1866
- id: "contact-form-brand-depth-card",
1926
+ id: "contact-form-open",
1867
1927
  target: "contact-form",
1868
- label: "Brand-depth form card",
1928
+ label: "Open form",
1869
1929
  blockKinds: ["block.form"],
1870
1930
  design: {
1871
- sectionSurface: "brand-depth-band",
1872
- contentFrame: panelFrame("raised"),
1931
+ sectionSurface: "muted-band",
1932
+ contentFrame: plainFrame,
1873
1933
  itemSurface: "none",
1874
1934
  transitionAfter: "none",
1875
- emphasis: "high"
1935
+ emphasis: "medium"
1876
1936
  }
1877
1937
  }),
1878
1938
  defineBlockAppearancePreset({
@@ -1950,7 +2010,130 @@ function assertUniqueLayoutProfileKeys(profiles) {
1950
2010
 
1951
2011
  // ../theme-core/src/site-styles/pageDesignIntent.ts
1952
2012
  import { z as z3 } from "zod";
1953
- var pageDesignIntentSchemaVersion = 1;
2013
+
2014
+ // ../theme-core/src/site-styles/sectionTransitions.ts
2015
+ var noneBoundaryOption = {
2016
+ id: asBoundaryOptionId("break:none"),
2017
+ label: "None",
2018
+ transitionAfter: "none",
2019
+ treatment: { kind: "none" }
2020
+ };
2021
+ var softBoundaryOption = {
2022
+ id: asBoundaryOptionId("break:soft"),
2023
+ label: "Soft",
2024
+ transitionAfter: "soft-fade-short",
2025
+ treatment: { kind: "soft-fade", height: "medium", curve: "soft" }
2026
+ };
2027
+ var spaciousBoundaryOption = {
2028
+ id: asBoundaryOptionId("break:spacious"),
2029
+ label: "Spacious",
2030
+ transitionAfter: "soft-fade-long",
2031
+ treatment: { kind: "soft-fade", height: "large", curve: "spacious" }
2032
+ };
2033
+ var expansiveBoundaryOption = {
2034
+ id: asBoundaryOptionId("break:expansive"),
2035
+ label: "Expansive",
2036
+ transitionAfter: "soft-fade-expansive",
2037
+ treatment: { kind: "soft-fade", height: "expansive", curve: "expansive" }
2038
+ };
2039
+ var waveBoundaryOption = {
2040
+ id: asBoundaryOptionId("break:wave"),
2041
+ label: "Classic wave",
2042
+ transitionAfter: "wave-edge",
2043
+ treatment: {
2044
+ kind: "wave-edge",
2045
+ height: "medium",
2046
+ amplitude: "balanced",
2047
+ rhythm: "double",
2048
+ symmetry: "asymmetrical"
2049
+ }
2050
+ };
2051
+ var balancedWaveBoundaryOption = {
2052
+ id: asBoundaryOptionId("break:wave-balanced"),
2053
+ label: "Balanced wave",
2054
+ transitionAfter: "wave-edge-balanced",
2055
+ treatment: {
2056
+ kind: "wave-edge",
2057
+ height: "medium",
2058
+ amplitude: "balanced",
2059
+ rhythm: "double",
2060
+ symmetry: "symmetrical"
2061
+ }
2062
+ };
2063
+ var gentleWaveBoundaryOption = {
2064
+ id: asBoundaryOptionId("break:wave-gentle"),
2065
+ label: "Gentle wave",
2066
+ transitionAfter: "wave-edge-gentle",
2067
+ treatment: {
2068
+ kind: "wave-edge",
2069
+ height: "compact",
2070
+ amplitude: "subtle",
2071
+ rhythm: "single",
2072
+ symmetry: "symmetrical"
2073
+ }
2074
+ };
2075
+ var boldWaveBoundaryOption = {
2076
+ id: asBoundaryOptionId("break:wave-bold"),
2077
+ label: "Bold wave",
2078
+ transitionAfter: "wave-edge-bold",
2079
+ treatment: {
2080
+ kind: "wave-edge",
2081
+ height: "large",
2082
+ amplitude: "bold",
2083
+ rhythm: "double",
2084
+ symmetry: "symmetrical"
2085
+ }
2086
+ };
2087
+ var driftWaveBoundaryOption = {
2088
+ id: asBoundaryOptionId("break:wave-drift"),
2089
+ label: "Drift wave",
2090
+ transitionAfter: "wave-edge-drift",
2091
+ treatment: {
2092
+ kind: "wave-edge",
2093
+ height: "medium",
2094
+ amplitude: "balanced",
2095
+ rhythm: "double",
2096
+ symmetry: "drift"
2097
+ }
2098
+ };
2099
+ var subtleAngleBoundaryOption = {
2100
+ id: asBoundaryOptionId("break:angle-subtle"),
2101
+ label: "Subtle angle",
2102
+ transitionAfter: "angle-edge-subtle",
2103
+ treatment: {
2104
+ kind: "angle-edge",
2105
+ height: "compact",
2106
+ slope: "subtle",
2107
+ direction: "forward"
2108
+ }
2109
+ };
2110
+ var balancedAngleBoundaryOption = {
2111
+ id: asBoundaryOptionId("break:angle-balanced"),
2112
+ label: "Balanced angle",
2113
+ transitionAfter: "angle-edge",
2114
+ treatment: {
2115
+ kind: "angle-edge",
2116
+ height: "medium",
2117
+ slope: "balanced",
2118
+ direction: "forward"
2119
+ }
2120
+ };
2121
+ var steepAngleBoundaryOption = {
2122
+ id: asBoundaryOptionId("break:angle-steep"),
2123
+ label: "Steep angle",
2124
+ transitionAfter: "angle-edge-steep",
2125
+ treatment: {
2126
+ kind: "angle-edge",
2127
+ height: "large",
2128
+ slope: "steep",
2129
+ direction: "forward"
2130
+ }
2131
+ };
2132
+
2133
+ // ../theme-core/src/site-styles/pageDesignIntent.ts
2134
+ var pageDesignIntentSchemaVersion = 2;
2135
+ var legacyPageDesignIntentSchemaVersion = 1;
2136
+ var unknownBoundaryOptionId = asBoundaryOptionId("break:unknown");
1954
2137
  var pageDesignUserPinnedAppearanceChoiceSchema = z3.object({
1955
2138
  kind: z3.literal("user-pinned"),
1956
2139
  value: z3.string().min(1).transform(asAppearancePresetId)
@@ -1959,17 +2142,84 @@ var pageDesignUserPinnedBoundaryChoiceSchema = z3.object({
1959
2142
  kind: z3.literal("user-pinned"),
1960
2143
  value: z3.string().min(1).transform(asBoundaryOptionId)
1961
2144
  }).strict();
2145
+ var pageDesignBoundaryTreatmentSchema = z3.discriminatedUnion("kind", [
2146
+ z3.object({ kind: z3.literal("none") }).strict(),
2147
+ z3.object({
2148
+ kind: z3.literal("soft-fade"),
2149
+ height: z3.enum(["compact", "medium", "large", "expansive"]),
2150
+ curve: z3.enum(["soft", "spacious", "expansive"])
2151
+ }).strict(),
2152
+ z3.object({
2153
+ kind: z3.literal("wave-edge"),
2154
+ height: z3.enum(["compact", "medium", "large"]),
2155
+ amplitude: z3.enum(["subtle", "balanced", "bold"]),
2156
+ rhythm: z3.enum(["single", "double"]),
2157
+ symmetry: z3.enum(["symmetrical", "asymmetrical", "drift"])
2158
+ }).strict(),
2159
+ z3.object({
2160
+ kind: z3.literal("angle-edge"),
2161
+ height: z3.enum(["compact", "medium", "large"]),
2162
+ slope: z3.enum(["subtle", "balanced", "steep"]),
2163
+ direction: z3.enum(["forward", "reverse"])
2164
+ }).strict(),
2165
+ z3.object({
2166
+ kind: z3.literal("legacy-unsupported"),
2167
+ boundaryOptionId: z3.string().min(1).transform(asBoundaryOptionId)
2168
+ }).strict()
2169
+ ]);
2170
+ var pageDesignUserPinnedBoundaryTreatmentChoiceSchema = z3.object({
2171
+ kind: z3.literal("user-pinned"),
2172
+ value: pageDesignBoundaryTreatmentSchema
2173
+ }).strict();
1962
2174
  var pageDesignBlockLookPinSchema = z3.object({
1963
2175
  blockId: z3.string().min(1).transform(asDesignBlockId),
1964
2176
  blockKind: z3.string().min(1),
1965
2177
  choice: pageDesignUserPinnedAppearanceChoiceSchema
1966
2178
  }).strict();
1967
2179
  var pageDesignBoundaryPinSchema = z3.object({
2180
+ boundaryId: z3.string().min(1).transform(asDesignBoundaryId),
2181
+ previousBlockId: z3.string().min(1).transform(asDesignBlockId),
2182
+ nextBlockId: z3.string().min(1).transform(asDesignBlockId),
2183
+ choice: pageDesignUserPinnedBoundaryTreatmentChoiceSchema
2184
+ }).strict().superRefine(validateBoundaryPinIdMatchesBlocks);
2185
+ var legacyPageDesignBoundaryPinSchema = z3.object({
1968
2186
  boundaryId: z3.string().min(1).transform(asDesignBoundaryId),
1969
2187
  previousBlockId: z3.string().min(1).transform(asDesignBlockId),
1970
2188
  nextBlockId: z3.string().min(1).transform(asDesignBlockId),
1971
2189
  choice: pageDesignUserPinnedBoundaryChoiceSchema
1972
- }).strict().superRefine((pin, ctx) => {
2190
+ }).strict().superRefine(validateBoundaryPinIdMatchesBlocks);
2191
+ var pageDesignIntentV1Schema = z3.object({
2192
+ schemaVersion: z3.literal(legacyPageDesignIntentSchemaVersion),
2193
+ siteStyleId: z3.string().min(1).transform(asSiteStyleId),
2194
+ pageFlowPresetId: z3.string().min(1).transform(asPageFlowPresetId),
2195
+ blockLookPins: z3.array(pageDesignBlockLookPinSchema),
2196
+ boundaryPins: z3.array(legacyPageDesignBoundaryPinSchema)
2197
+ }).strict().superRefine(validateUniquePageDesignPins);
2198
+ var pageDesignIntentV2Schema = z3.object({
2199
+ schemaVersion: z3.literal(pageDesignIntentSchemaVersion),
2200
+ siteStyleId: z3.string().min(1).transform(asSiteStyleId),
2201
+ pageFlowPresetId: z3.string().min(1).transform(asPageFlowPresetId),
2202
+ blockLookPins: z3.array(pageDesignBlockLookPinSchema),
2203
+ boundaryPins: z3.array(pageDesignBoundaryPinSchema)
2204
+ }).strict().superRefine(validateUniquePageDesignPins);
2205
+ function addDuplicateStringIssues(ctx, input) {
2206
+ const seen = /* @__PURE__ */ new Set();
2207
+ const duplicates = /* @__PURE__ */ new Set();
2208
+ for (const value of input.values) {
2209
+ if (seen.has(value)) {
2210
+ duplicates.add(value);
2211
+ }
2212
+ seen.add(value);
2213
+ }
2214
+ for (const duplicate of duplicates) {
2215
+ ctx.addIssue({
2216
+ code: z3.ZodIssueCode.custom,
2217
+ path: [...input.path],
2218
+ message: `Duplicate ${input.label}: ${duplicate}.`
2219
+ });
2220
+ }
2221
+ }
2222
+ function validateBoundaryPinIdMatchesBlocks(pin, ctx) {
1973
2223
  const expectedBoundaryId = makeBoundaryId(
1974
2224
  pin.previousBlockId,
1975
2225
  pin.nextBlockId
@@ -1981,14 +2231,8 @@ var pageDesignBoundaryPinSchema = z3.object({
1981
2231
  message: `Boundary id must match previousBlockId and nextBlockId. Expected ${expectedBoundaryId}.`
1982
2232
  });
1983
2233
  }
1984
- });
1985
- var pageDesignIntentV1Schema = z3.object({
1986
- schemaVersion: z3.literal(pageDesignIntentSchemaVersion),
1987
- siteStyleId: z3.string().min(1).transform(asSiteStyleId),
1988
- pageFlowPresetId: z3.string().min(1).transform(asPageFlowPresetId),
1989
- blockLookPins: z3.array(pageDesignBlockLookPinSchema),
1990
- boundaryPins: z3.array(pageDesignBoundaryPinSchema)
1991
- }).strict().superRefine((intent, ctx) => {
2234
+ }
2235
+ function validateUniquePageDesignPins(intent, ctx) {
1992
2236
  addDuplicateStringIssues(ctx, {
1993
2237
  values: intent.blockLookPins.map((pin) => pin.blockId),
1994
2238
  path: ["blockLookPins"],
@@ -2001,23 +2245,6 @@ var pageDesignIntentV1Schema = z3.object({
2001
2245
  path: ["boundaryPins"],
2002
2246
  label: "boundary pin"
2003
2247
  });
2004
- });
2005
- function addDuplicateStringIssues(ctx, input) {
2006
- const seen = /* @__PURE__ */ new Set();
2007
- const duplicates = /* @__PURE__ */ new Set();
2008
- for (const value of input.values) {
2009
- if (seen.has(value)) {
2010
- duplicates.add(value);
2011
- }
2012
- seen.add(value);
2013
- }
2014
- for (const duplicate of duplicates) {
2015
- ctx.addIssue({
2016
- code: z3.ZodIssueCode.custom,
2017
- path: [...input.path],
2018
- message: `Duplicate ${input.label}: ${duplicate}.`
2019
- });
2020
- }
2021
2248
  }
2022
2249
  function boundaryKey(previousBlockId, nextBlockId) {
2023
2250
  return makeBoundaryId(previousBlockId, nextBlockId);
@@ -2263,7 +2490,9 @@ var buttonBorderSchema = z5.object({
2263
2490
  var variantShadowSchema = z5.object({
2264
2491
  elevation: z5.enum(["none", "low", "medium", "high"]),
2265
2492
  softness: z5.enum(["crisp", "soft", "hard"]).nullable(),
2266
- position: z5.enum(["bottom", "bottom-right"]).default("bottom")
2493
+ position: z5.enum(["bottom", "bottom-right"]).default("bottom"),
2494
+ // Optional palette token for a coloured offset shadow; omit for neutral black.
2495
+ colorToken: themeColorTokenSchema.optional()
2267
2496
  });
2268
2497
  var variantEffectsSchema = z5.object({
2269
2498
  base: z5.array(effectApplicationSchema).optional(),
@@ -2787,6 +3016,65 @@ var inkStamp = defineButtonPersonality({
2787
3016
  }
2788
3017
  });
2789
3018
 
3019
+ // ../theme-core/src/buttons/personalities/joy-stamp.ts
3020
+ var joyStamp = defineButtonPersonality({
3021
+ id: "joy-stamp",
3022
+ name: "Joy Stamp",
3023
+ description: "Pill buttons with a hard, brand-coloured offset shadow that presses in on hover.",
3024
+ tags: { tone: "bold", energy: "vibrant", motion: "expressive", era: "organic" },
3025
+ buttonSystem: {
3026
+ global: {
3027
+ cornerStyle: "pill",
3028
+ shadow: "high",
3029
+ textTransform: "none",
3030
+ // Bold display type on the buttons: use the heading font (Bricolage) at
3031
+ // 700, matching the mockup's chunky button labels.
3032
+ typography: "heading",
3033
+ fontWeight: 700,
3034
+ borderWidth: 2,
3035
+ hoverTransform: "none",
3036
+ hoverColor: "none"
3037
+ },
3038
+ sizes: {
3039
+ sm: { padding: "0.625rem 1.25rem", fontSize: "text-sm" },
3040
+ md: { padding: "0.875rem 1.75rem", fontSize: "text-base" },
3041
+ lg: { padding: "1.125rem 2.25rem", fontSize: "text-lg" },
3042
+ xl: { padding: "1.25rem 2.75rem", fontSize: "text-xl" }
3043
+ },
3044
+ variants: [
3045
+ {
3046
+ id: "primary",
3047
+ name: "Primary",
3048
+ enabled: true,
3049
+ priority: 1,
3050
+ background: { type: "solid", colorToken: "primary" },
3051
+ textColorToken: "primaryForeground",
3052
+ borderRadius: "rounded-full",
3053
+ // Cream stamp shadow under the burnt-orange fill.
3054
+ shadow: { elevation: "high", softness: "hard", position: "bottom-right", colorToken: "text" },
3055
+ effects: {
3056
+ hover: [{ effectId: "press-down" }]
3057
+ }
3058
+ },
3059
+ {
3060
+ id: "secondary",
3061
+ name: "Secondary",
3062
+ enabled: true,
3063
+ priority: 2,
3064
+ background: { type: "transparent" },
3065
+ textColorToken: "text",
3066
+ borderRadius: "rounded-full",
3067
+ border: { widthClass: "border-2", colorToken: "text" },
3068
+ // Brown stamp shadow under the cream outline.
3069
+ shadow: { elevation: "high", softness: "hard", position: "bottom-right", colorToken: "secondary" },
3070
+ effects: {
3071
+ hover: [{ effectId: "press-down" }]
3072
+ }
3073
+ }
3074
+ ]
3075
+ }
3076
+ });
3077
+
2790
3078
  // ../theme-core/src/buttons/personalities/pebble.ts
2791
3079
  var pebble = defineButtonPersonality({
2792
3080
  id: "pebble",
@@ -3060,7 +3348,8 @@ var buttonPersonalities = [
3060
3348
  pebble,
3061
3349
  inkStamp,
3062
3350
  brushedWash,
3063
- showtimePill
3351
+ showtimePill,
3352
+ joyStamp
3064
3353
  ];
3065
3354
  var personalitiesById = new Map(
3066
3355
  buttonPersonalities.map((p) => [p.id, p])
@@ -3857,7 +4146,9 @@ var boxBackgroundSchema = z20.object({
3857
4146
  motion: z20.enum(["static", "fixed-frame"]).nullable().optional(),
3858
4147
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
3859
4148
  textColor: tokenOrCssColorValueSchema.nullable().optional(),
3860
- headingColor: tokenOrCssColorValueSchema.nullable().optional()
4149
+ headingColor: tokenOrCssColorValueSchema.nullable().optional(),
4150
+ linkColor: tokenOrCssColorValueSchema.nullable().optional(),
4151
+ supportingColor: tokenOrCssColorValueSchema.nullable().optional()
3861
4152
  });
3862
4153
  var noHeadingDecorationSchema = z20.object({
3863
4154
  family: z20.literal("none")
@@ -3920,7 +4211,8 @@ var cardStylesOverrideSchema = z20.object({
3920
4211
  "editorial-rule",
3921
4212
  "soft-panel",
3922
4213
  "editorial-serif-quote",
3923
- "editorial-open"
4214
+ "editorial-open",
4215
+ "color-blocked"
3924
4216
  ]).nullable().optional(),
3925
4217
  // Which site-style card variant the card adopts (emits a `.card-{id}` class).
3926
4218
  // 'none' is boxless. Driven by the block look via testimonialCardTreatment.
@@ -4745,6 +5037,30 @@ var warmNeutralForest = definePaletteVariant({
4745
5037
  ]
4746
5038
  });
4747
5039
 
5040
+ // ../theme-core/src/palette/variants/warm-dark.ts
5041
+ var warmDarkEmber = definePaletteVariant({
5042
+ id: "warm-dark-ember",
5043
+ name: "Warm Dark \u2014 Ember",
5044
+ description: "Deep clay-brown ground with burnt-orange accent and warm cream text.",
5045
+ tags: { tone: "bold", energy: "vibrant", era: "organic" },
5046
+ mode: "dark",
5047
+ colors: [
5048
+ { name: "primary", hex: "#ce612f" },
5049
+ { name: "secondary", hex: "#894e31" },
5050
+ { name: "accent", hex: "#ce612f" },
5051
+ { name: "success", hex: "#6f8f57" },
5052
+ { name: "warning", hex: "#c98a3c" },
5053
+ { name: "destructive", hex: "#c0492f" },
5054
+ { name: "background", hex: "#4f2415" },
5055
+ { name: "surface", hex: "#5c3320" },
5056
+ { name: "surfaceAlt", hex: "#693a25" },
5057
+ { name: "muted", hex: "#6a3d27" },
5058
+ { name: "text", hex: "#f0e1d0" },
5059
+ { name: "primaryForeground", hex: "#4f2415" },
5060
+ { name: "border", hex: "#894e31" }
5061
+ ]
5062
+ });
5063
+
4748
5064
  // ../theme-core/src/palette/variants/index.ts
4749
5065
  var paletteVariants = [
4750
5066
  // Brand-led family
@@ -4765,7 +5081,9 @@ var paletteVariants = [
4765
5081
  softNaturalSage,
4766
5082
  softNaturalStone,
4767
5083
  softNaturalWatercolor,
4768
- softNaturalLilac
5084
+ softNaturalLilac,
5085
+ // Warm-dark family (dark mode)
5086
+ warmDarkEmber
4769
5087
  ];
4770
5088
  var paletteVariantsById = new Map(
4771
5089
  paletteVariants.map((v) => [v.id, v])
@@ -5046,7 +5364,33 @@ var clarityZenCardSystem = {
5046
5364
  }
5047
5365
  ]
5048
5366
  };
5049
-
5367
+ var originalJoyCardSystem = {
5368
+ variants: [
5369
+ {
5370
+ id: "default",
5371
+ name: "Default",
5372
+ enabled: true,
5373
+ priority: 1,
5374
+ background: { type: "solid", colorToken: "surface" },
5375
+ foregroundToken: "text",
5376
+ spacing: "comfortable",
5377
+ corners: "rounded",
5378
+ shadow: { elevation: "none", softness: null, position: "bottom" }
5379
+ },
5380
+ {
5381
+ id: "alternative",
5382
+ name: "Statement",
5383
+ enabled: true,
5384
+ priority: 2,
5385
+ background: { type: "solid", colorToken: "primary" },
5386
+ foregroundToken: "primaryForeground",
5387
+ spacing: "comfortable",
5388
+ corners: "rounded",
5389
+ shadow: { elevation: "none", softness: null, position: "bottom" }
5390
+ }
5391
+ ]
5392
+ };
5393
+
5050
5394
  // ../theme-core/src/site-styles/testimonialQuotePresets.ts
5051
5395
  var serifDisplayQuote = {
5052
5396
  style: "serif-display"
@@ -5166,7 +5510,7 @@ function baseHeader(theme) {
5166
5510
  navContainer: { type: "none", tint: null, opacity: 0.15 }
5167
5511
  };
5168
5512
  }
5169
- var headerLayoutCatalog = [
5513
+ var headerLayoutCatalog = defineExactCatalog()([
5170
5514
  {
5171
5515
  id: asHeaderLayoutId("classic"),
5172
5516
  label: "Classic",
@@ -5198,11 +5542,11 @@ var headerLayoutCatalog = [
5198
5542
  maxRecommendedNavItems: 5,
5199
5543
  allowedLogoShapes: ["none", "text-only", "horizontal"]
5200
5544
  }
5201
- ];
5545
+ ]);
5202
5546
  function supportedLayouts(ids) {
5203
5547
  return ids.map(asHeaderLayoutId);
5204
5548
  }
5205
- var headerStyleCatalog = [
5549
+ var headerStyleCatalog = defineExactCatalog()([
5206
5550
  {
5207
5551
  id: asHeaderStyleId("minimal"),
5208
5552
  label: "Minimal",
@@ -5357,7 +5701,7 @@ var headerStyleCatalog = [
5357
5701
  navTypography: "heading",
5358
5702
  moods: ["calm", "editorial"]
5359
5703
  }
5360
- ];
5704
+ ]);
5361
5705
  var headerLayoutsById = new Map(
5362
5706
  headerLayoutCatalog.map((layout) => [layout.id, layout])
5363
5707
  );
@@ -5470,7 +5814,7 @@ var headerStyleRepairOrder = /* @__PURE__ */ new Map(
5470
5814
  [asHeaderStyleId("minimal"), headerStyleRepairChain(["minimal"])]
5471
5815
  ]
5472
5816
  );
5473
- var legacyHeaderLookAliases = [
5817
+ var legacyHeaderLookAliases = defineExactCatalog()([
5474
5818
  {
5475
5819
  lookId: asHeaderLookId("clean-base"),
5476
5820
  selection: {
@@ -5527,7 +5871,7 @@ var legacyHeaderLookAliases = [
5527
5871
  styleId: asHeaderStyleId("glass")
5528
5872
  }
5529
5873
  }
5530
- ];
5874
+ ]);
5531
5875
  var legacyHeaderLookAliasesById = new Map(legacyHeaderLookAliases.map((alias) => [alias.lookId, alias]));
5532
5876
  function getHeaderStyle(id) {
5533
5877
  return headerStylesById.get(id) ?? null;
@@ -5681,6 +6025,12 @@ function serifLineHeader(theme) {
5681
6025
  letterSpacing: "wide",
5682
6026
  gradient: false
5683
6027
  },
6028
+ border: {
6029
+ style: "solid",
6030
+ width: "none",
6031
+ position: "none"
6032
+ },
6033
+ shadow: { elevation: "none" },
5684
6034
  ctaTreatment: "outline",
5685
6035
  ctaVariant: resolveHeaderCtaVariant(theme, "outline"),
5686
6036
  ctaGap: "relaxed"
@@ -5805,7 +6155,7 @@ function floatingGlassHeader(theme) {
5805
6155
  }
5806
6156
  };
5807
6157
  }
5808
- var headerLookCatalog = [
6158
+ var headerLookCatalog = defineExactCatalog()([
5809
6159
  {
5810
6160
  id: asHeaderLookId("clean-base"),
5811
6161
  label: "Clean base",
@@ -5923,7 +6273,7 @@ var headerLookCatalog = [
5923
6273
  logoAccommodations: overlayLogoAccommodations,
5924
6274
  compile: floatingGlassHeader
5925
6275
  }
5926
- ];
6276
+ ]);
5927
6277
  var guaranteedFallbackHeaderLookId = asHeaderLookId("clean-base");
5928
6278
  var guaranteedFallbackHeaderLayoutId = asHeaderLayoutId("classic");
5929
6279
  var guaranteedFallbackHeaderStyleId = asHeaderStyleId("minimal");
@@ -6089,7 +6439,7 @@ function editorialColumnsFooter(theme) {
6089
6439
  }
6090
6440
  };
6091
6441
  }
6092
- var footerLookCatalog = [
6442
+ var footerLookCatalog = defineExactCatalog()([
6093
6443
  {
6094
6444
  id: asFooterLookId("footer-muted-grounding"),
6095
6445
  label: "Muted grounding footer",
@@ -6112,7 +6462,7 @@ var footerLookCatalog = [
6112
6462
  allowedContentPresence: ["default-footer", "default-and-blocks"],
6113
6463
  compile: brandTwoBandFooter
6114
6464
  }
6115
- ];
6465
+ ]);
6116
6466
  var footerLooksById = new Map(
6117
6467
  footerLookCatalog.map((look) => [look.id, look])
6118
6468
  );
@@ -6134,7 +6484,7 @@ var generatedDesignOptionCatalog = {
6134
6484
  source: "generated",
6135
6485
  sectionSurfaces: ["base", "muted-band", "accent-band", "brand-depth-band", "hero-image"],
6136
6486
  contentFrames: generatedContentFrames,
6137
- itemSurfaces: ["none", "default", "flat", "outlined", "raised", "inset", "editorial"],
6487
+ itemSurfaces: ["none", "default", "flat", "outlined", "raised", "inset", "editorial", "color-blocked"],
6138
6488
  transitions: ["none", "soft-fade-short", "soft-fade-long"],
6139
6489
  emphases: ["low", "medium", "high"],
6140
6490
  detachedCustom: false
@@ -6146,8 +6496,15 @@ var userDesignOptionCatalog = {
6146
6496
  itemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
6147
6497
  transitions: [
6148
6498
  ...generatedDesignOptionCatalog.transitions,
6499
+ "soft-fade-expansive",
6149
6500
  "wave-edge",
6150
- "angle-edge"
6501
+ "wave-edge-balanced",
6502
+ "wave-edge-gentle",
6503
+ "wave-edge-bold",
6504
+ "wave-edge-drift",
6505
+ "angle-edge",
6506
+ "angle-edge-subtle",
6507
+ "angle-edge-steep"
6151
6508
  ],
6152
6509
  emphases: generatedDesignOptionCatalog.emphases,
6153
6510
  detachedCustom: false
@@ -6328,6 +6685,29 @@ var boldDisplayTypography = {
6328
6685
  },
6329
6686
  scale: "balanced"
6330
6687
  };
6688
+ var originalJoyTypography = {
6689
+ body: {
6690
+ family: "DM Sans, system-ui, sans-serif",
6691
+ size: "md",
6692
+ weight: "regular",
6693
+ lineHeight: "relaxed",
6694
+ letterSpacing: "normal"
6695
+ },
6696
+ headings: {
6697
+ default: {
6698
+ family: "Bricolage Grotesque, system-ui, sans-serif",
6699
+ weight: "bold",
6700
+ lineHeight: "normal",
6701
+ letterSpacing: "tight",
6702
+ italic: null,
6703
+ case: null
6704
+ },
6705
+ h1: { size: "2xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
6706
+ h2: { size: "xl", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null },
6707
+ h3: { size: "lg", weight: "bold", lineHeight: "normal", letterSpacing: "tight", italic: null }
6708
+ },
6709
+ scale: "balanced"
6710
+ };
6331
6711
  var typographyPresets = [
6332
6712
  defineTypographyPreset({
6333
6713
  id: "typography-preset:modern-sans",
@@ -6414,6 +6794,32 @@ var typographyPresets = [
6414
6794
  mobile: { headlineSize: "4xl", subheadlineSize: "xl" }
6415
6795
  }
6416
6796
  }
6797
+ }),
6798
+ defineTypographyPreset({
6799
+ id: "typography-preset:original-joy",
6800
+ name: "Original Joy",
6801
+ description: "Bold Bricolage Grotesque display headings over a clean DM Sans body, editorial and warm.",
6802
+ defaultFonts: { body: "DM Sans, system-ui, sans-serif", heading: "Bricolage Grotesque, system-ui, sans-serif" },
6803
+ recommendedFonts: {
6804
+ body: ["DM Sans", "Inter", "Manrope"],
6805
+ heading: ["Bricolage Grotesque", "Space Grotesk", "Archivo"]
6806
+ },
6807
+ slotPolicies: { body: bodyReadablePolicy, heading: displayHeadingPolicy },
6808
+ typography: originalJoyTypography,
6809
+ heroTypography: {
6810
+ headlineSize: "6xl",
6811
+ headlineLineHeight: "tight",
6812
+ subheadlineSize: "xl",
6813
+ subheadlineLineHeight: "normal",
6814
+ microHeadlineSize: "6xl",
6815
+ microHeadlineLineHeight: "tight",
6816
+ microSubheadlineSize: "lg",
6817
+ microSubheadlineLineHeight: "normal",
6818
+ responsive: {
6819
+ tablet: { headlineSize: "5xl" },
6820
+ mobile: { headlineSize: "4xl", subheadlineSize: "lg" }
6821
+ }
6822
+ }
6417
6823
  })
6418
6824
  ];
6419
6825
  var typographyPresetsById = new Map(
@@ -6437,7 +6843,8 @@ var curatedSiteStyleIdValues = [
6437
6843
  "site-style:clarity-zen-blue",
6438
6844
  SOFT_EARTH_SITE_STYLE_ID_VALUE,
6439
6845
  "site-style:bold-launch",
6440
- "site-style:south-west-twerk-school"
6846
+ "site-style:south-west-twerk-school",
6847
+ "site-style:original-joy"
6441
6848
  ];
6442
6849
  var quietBudget = {
6443
6850
  accentDensity: "low",
@@ -7483,7 +7890,7 @@ var curatedSiteStyles = [
7483
7890
  "body-text-editorial-intro",
7484
7891
  "schedule-details-brand-depth",
7485
7892
  "testimonials-statement-cards",
7486
- "contact-form-brand-depth-card"
7893
+ "contact-form-panel"
7487
7894
  ],
7488
7895
  recommendedHeaderLookIds: [
7489
7896
  "brand-solid",
@@ -7506,6 +7913,74 @@ var curatedSiteStyles = [
7506
7913
  paletteChoice("brand-led-warm"),
7507
7914
  paletteChoice("high-contrast-ink")
7508
7915
  ]
7916
+ }),
7917
+ defineCuratedSiteStyle({
7918
+ id: "site-style:original-joy",
7919
+ name: "Original Joy",
7920
+ headingDecoration: { family: "organic-squiggle", colorToken: "primary" },
7921
+ description: "Warm, dark, and editorial: deep clay grounds, cream type, and bold burnt-orange accents for soulful community brands.",
7922
+ 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.",
7923
+ tokenRecipes: {
7924
+ palette: "brand-led",
7925
+ contrast: "maximum",
7926
+ radius: "rounded",
7927
+ shadow: "subtle",
7928
+ typography: "clean-sans",
7929
+ spacing: "airy",
7930
+ motion: "expressive"
7931
+ },
7932
+ compositionBudget: expressiveBudget,
7933
+ typographyPresetChoices: [
7934
+ typographyChoice("typography-preset:original-joy"),
7935
+ typographyChoice("typography-preset:bold-display"),
7936
+ typographyChoice("typography-preset:modern-sans")
7937
+ ],
7938
+ defaultTypographyPresetId: "typography-preset:original-joy",
7939
+ themeOverrides: {
7940
+ accordions: boldBorderedAccordionSystem,
7941
+ // Shared card system: warm rounded brown cards (event + testimonial cards
7942
+ // pick this up automatically) with a burnt-orange statement variant.
7943
+ cards: originalJoyCardSystem,
7944
+ testimonialQuote: accentGlyphQuote,
7945
+ bodyText: {
7946
+ intro: {
7947
+ paragraphSize: "editorial",
7948
+ headingSize: "editorial"
7949
+ }
7950
+ }
7951
+ },
7952
+ // Recommended block looks: the bold colour-blocked feature cards, a calm
7953
+ // band for the events spotlight, and statement testimonial cards.
7954
+ recommendedAppearancePresetIds: [
7955
+ "feature-cards-bold-colors",
7956
+ "offerings-calm-list",
7957
+ "testimonials-statement-cards"
7958
+ ],
7959
+ // Floating, transparent "Clear Split" header (no fill behind the nav links).
7960
+ defaultHeaderSelection: { layoutId: "floating", styleId: "minimal-surface" },
7961
+ recommendedHeaderLayoutChoices: [headerLayoutChoice("floating")],
7962
+ recommendedHeaderStyleChoicesByLayout: {
7963
+ floating: [
7964
+ headerStyleChoice("minimal-surface"),
7965
+ headerStyleChoice("split-glass"),
7966
+ headerStyleChoice("glass")
7967
+ ]
7968
+ },
7969
+ // Legacy bridge only (the real curation is the explicit selection above).
7970
+ // Kept to a reserved-space, non-overlay look on purpose: the split hero
7971
+ // flows below the Clear Split header, so we must NOT trigger the immersive
7972
+ // overlay-hero promotion that looks like `floating-glass` would force.
7973
+ recommendedHeaderLookIds: ["minimal-transparent"],
7974
+ recommendedFooterLookIds: [
7975
+ "site-footer-brand-two-band",
7976
+ "footer-muted-grounding"
7977
+ ],
7978
+ buttonPersonalityChoices: [
7979
+ buttonChoice("joy-stamp"),
7980
+ buttonChoice("ink-stamp"),
7981
+ buttonChoice("showtime-pill")
7982
+ ],
7983
+ paletteVariantChoices: [paletteChoice("warm-dark-ember")]
7509
7984
  })
7510
7985
  ];
7511
7986
  var curatedSiteStylesById = new Map(
@@ -7521,26 +7996,6 @@ var microHeroLayoutVariantKey = asLayoutVariantKey("micro");
7521
7996
  var waveBoundaryOptionId = asBoundaryOptionId("break:wave");
7522
7997
 
7523
7998
  // ../theme-core/src/site-styles/pageDesignEditorModel.ts
7524
- var noneBoundaryOption = {
7525
- id: asBoundaryOptionId("break:none"),
7526
- label: "None",
7527
- transitionAfter: "none"
7528
- };
7529
- var softBoundaryOption = {
7530
- id: asBoundaryOptionId("break:soft"),
7531
- label: "Soft",
7532
- transitionAfter: "soft-fade-short"
7533
- };
7534
- var waveBoundaryOption = {
7535
- id: asBoundaryOptionId("break:wave"),
7536
- label: "Wave",
7537
- transitionAfter: "wave-edge"
7538
- };
7539
- var spaciousBoundaryOption = {
7540
- id: asBoundaryOptionId("break:spacious"),
7541
- label: "Spacious",
7542
- transitionAfter: "soft-fade-long"
7543
- };
7544
7999
  var pageFlowPresets = [
7545
8000
  {
7546
8001
  id: asPageFlowPresetId("flow:quiet"),
@@ -7740,8 +8195,7 @@ var defaultDesignRuntimeRules = defineDesignRuntimeRules({
7740
8195
  type: "image",
7741
8196
  opacity: 1,
7742
8197
  position: "center center",
7743
- textColor: "text",
7744
- headingColor: "text"
8198
+ ...uniformSectionForeground("text")
7745
8199
  }
7746
8200
  }
7747
8201
  },
@@ -7851,9 +8305,30 @@ var defaultComponentRuntimeRules = defineComponentRuntimeRules({
7851
8305
  border: {
7852
8306
  enabled: false
7853
8307
  }
8308
+ },
8309
+ "color-blocked": {
8310
+ // Bold, flat colour-blocked cards. The per-card background colour cycle
8311
+ // (by position) and staggered offset live in
8312
+ // blocks-static/card-treatments.css; here we set the shared shape:
8313
+ // generous padding, large radius, no border, flat (no shadow).
8314
+ treatment: "color-blocked",
8315
+ spacing: "spacious",
8316
+ rounded: "2xl",
8317
+ raised: false,
8318
+ border: {
8319
+ enabled: false
8320
+ }
7854
8321
  }
7855
8322
  }
7856
8323
  });
8324
+ function uniformSectionForeground(token) {
8325
+ return {
8326
+ textColor: token,
8327
+ headingColor: token,
8328
+ linkColor: token,
8329
+ supportingColor: token
8330
+ };
8331
+ }
7857
8332
 
7858
8333
  // ../theme-core/src/site-styles/generatedSchemas.ts
7859
8334
  import { z as z23 } from "zod";
@@ -9751,46 +10226,6 @@ function sectionState(opts) {
9751
10226
  );
9752
10227
  }
9753
10228
 
9754
- // ../blocks/src/system/node/fragments/headingDecoration.ts
9755
- var defaultBindFrom = "_sectionStyles.headingDecoration";
9756
- function headingDecoration({
9757
- bindFrom = defaultBindFrom,
9758
- className
9759
- } = {}) {
9760
- return el(
9761
- "div",
9762
- // Full-width block row so the mark inherits the heading's alignment. The
9763
- // heading stacks are flexbox; `text-align` positions inline content, not flex
9764
- // items, so the inline-block mark must sit inside a stretched block for a
9765
- // centred heading to centre it (and a left heading to keep it at the start).
9766
- { "aria-hidden": "true", className: "rb-heading-decoration-row" },
9767
- [
9768
- el("div", {
9769
- className: {
9770
- $bind: {
9771
- from: bindFrom,
9772
- transforms: [
9773
- {
9774
- id: "ui.headingDecorationClassName",
9775
- options: { baseClass: className }
9776
- }
9777
- ]
9778
- }
9779
- }
9780
- })
9781
- ],
9782
- // Gate on the presence of `family`. The render-time theme projection omits
9783
- // `headingDecoration` entirely for absent/none signatures, so the
9784
- // dominant "no decoration" case is absent → falsy → not rendered. A presence
9785
- // check (rather than `family !== 'none'`) is deliberate: `when`'s only
9786
- // negation form would render on *absent* values, which would emit a stub on
9787
- // every undecorated heading. The remaining edge — hand-authored content with
9788
- // an explicit `{ family: 'none' }` — renders an aria-hidden `rb-hidden`
9789
- // (display:none) stub with no visual or layout impact.
9790
- when(`${bindFrom}.family`)
9791
- );
9792
- }
9793
-
9794
10229
  // ../blocks/src/system/fragments/types.ts
9795
10230
  import { z as z26 } from "zod";
9796
10231
  var FRAGMENT_ID_PATTERN = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/i;
@@ -10263,6 +10698,9 @@ var heroCopyFragment = defineFragment({
10263
10698
  maxLength: 600
10264
10699
  }
10265
10700
  ],
10701
+ // Layout order is [eyebrow, headline, subheadline]. The hero block's
10702
+ // `splitEditorial` variant reads these nodes by index; keep the order stable
10703
+ // (it fails fast at import if the count changes).
10266
10704
  layout: [
10267
10705
  text(
10268
10706
  {
@@ -10485,6 +10923,7 @@ var heroCtaRowFragment = defineFragment({
10485
10923
  ctaRow({
10486
10924
  collectionPath: "content.ctas",
10487
10925
  itemName: "cta",
10926
+ gap: "md",
10488
10927
  justify: {
10489
10928
  $bind: {
10490
10929
  from: "content",
@@ -10570,7 +11009,6 @@ var testimonialsHeadingFragment = defineFragment({
10570
11009
  when("content.heading"),
10571
11010
  bind("content.heading")
10572
11011
  ),
10573
- headingDecoration(),
10574
11012
  text(
10575
11013
  {
10576
11014
  as: "p",
@@ -11201,7 +11639,7 @@ var blogFeaturedPostFragment = defineFragment({
11201
11639
  });
11202
11640
 
11203
11641
  // ../blocks/src/system/fragments/library/faqHeading.ts
11204
- function faqHeadingLayout(options = {}) {
11642
+ function faqHeadingLayout() {
11205
11643
  return stack(
11206
11644
  {
11207
11645
  gap: "sm",
@@ -11226,7 +11664,6 @@ function faqHeadingLayout(options = {}) {
11226
11664
  when("content.title"),
11227
11665
  bind("content.title")
11228
11666
  ),
11229
- ...options.decorated ? [headingDecoration()] : [],
11230
11667
  richText(
11231
11668
  {
11232
11669
  className: "faq-description rb-prose rb-mx-auto rb-max-w-none",
@@ -11268,7 +11705,6 @@ var faqHeadingFragment = defineFragment({
11268
11705
  ],
11269
11706
  layout: faqHeadingLayout()
11270
11707
  });
11271
- var decoratedFaqHeadingLayout = faqHeadingLayout({ decorated: true });
11272
11708
 
11273
11709
  // ../blocks/src/system/fragments/library/faqAccordion.ts
11274
11710
  function createFaqAccordionLayout(options = {}) {
@@ -12425,12 +12861,38 @@ function splitLayoutWith(children) {
12425
12861
  var splitContentColumn = heroContentWrapper(heroContentNodes, "md", "rb-w-full rb-text-left");
12426
12862
  var splitImageColumn = heroSplitImagePane();
12427
12863
  var splitLayout = splitLayoutWith([
12864
+ splitImageColumn,
12865
+ splitContentColumn
12866
+ ]);
12867
+ var splitReverseLayout = splitLayoutWith([
12428
12868
  splitContentColumn,
12429
12869
  splitImageColumn
12430
12870
  ]);
12431
- var splitReverseLayout = splitLayoutWith([
12432
- splitImageColumn,
12433
- splitContentColumn
12871
+ var heroEyebrowNode = heroCopyFragment.layout[0];
12872
+ var heroHeadlineNode = heroCopyFragment.layout[1];
12873
+ var heroSubheadlineNode = heroCopyFragment.layout[2];
12874
+ var heroCtaRowNode = heroCtaRowFragment.layout[0];
12875
+ if (!heroEyebrowNode || !heroHeadlineNode || !heroSubheadlineNode || !heroCtaRowNode) {
12876
+ throw new Error("Hero copy/CTA fragments are missing their expected layout nodes.");
12877
+ }
12878
+ var heroEditorialBottomRow = inline(
12879
+ {
12880
+ gap: "lg",
12881
+ align: "end",
12882
+ justify: "start",
12883
+ wrap: true,
12884
+ className: "rb-w-full"
12885
+ },
12886
+ [heroSubheadlineNode, heroCtaRowNode]
12887
+ );
12888
+ var splitEditorialContentColumn = heroContentWrapper(
12889
+ [heroEyebrowNode, heroHeadlineNode, heroEditorialBottomRow],
12890
+ "md",
12891
+ "rb-w-full rb-text-left"
12892
+ );
12893
+ var splitEditorialLayout = splitLayoutWith([
12894
+ splitEditorialContentColumn,
12895
+ splitImageColumn
12434
12896
  ]);
12435
12897
  var heroConfig = {
12436
12898
  id: "block.hero",
@@ -12457,7 +12919,8 @@ var heroConfig = {
12457
12919
  classic: classicLayout,
12458
12920
  micro: microLayout,
12459
12921
  split: splitLayout,
12460
- splitReverse: splitReverseLayout
12922
+ splitReverse: splitReverseLayout,
12923
+ splitEditorial: splitEditorialLayout
12461
12924
  },
12462
12925
  defaultVariant: "classic",
12463
12926
  description: "Hero section with headline, subtitle, and repeatable CTAs.",
@@ -12572,18 +13035,6 @@ function introHeading(className) {
12572
13035
  bind("content.title")
12573
13036
  );
12574
13037
  }
12575
- function introHeadingGroup(className) {
12576
- return stack(
12577
- {
12578
- gap: "sm",
12579
- className: "rb-intro-heading-group"
12580
- },
12581
- [
12582
- introHeading(className),
12583
- headingDecoration()
12584
- ]
12585
- );
12586
- }
12587
13038
  function introBody(className = "rb-prose rb-max-w-none") {
12588
13039
  return richText({ className }, bind("content.body"));
12589
13040
  }
@@ -12602,7 +13053,6 @@ function introCopyStack(options = {}) {
12602
13053
  },
12603
13054
  [
12604
13055
  introHeading(options.headingClassName ?? "rb-intro-title"),
12605
- headingDecoration(),
12606
13056
  introBody(options.bodyClassName),
12607
13057
  introCtas(options.ctaJustify)
12608
13058
  ]
@@ -12642,7 +13092,7 @@ var statementCopyLayout = styledSection({
12642
13092
  className: "rb-intro rb-intro-statement rb-grid rb-grid-cols-1 rb-gap-8 rb-md-grid-cols-2 rb-md-items-start"
12643
13093
  },
12644
13094
  [
12645
- introHeadingGroup("rb-intro-title rb-max-w-xl"),
13095
+ introHeading("rb-intro-title rb-max-w-xl"),
12646
13096
  stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
12647
13097
  introBody(),
12648
13098
  introCtas("start")
@@ -12663,7 +13113,7 @@ var statementMediaLayout = styledSection({
12663
13113
  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"
12664
13114
  },
12665
13115
  [
12666
- introHeadingGroup("rb-intro-title rb-max-w-xl"),
13116
+ introHeading("rb-intro-title rb-max-w-xl"),
12667
13117
  stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
12668
13118
  introBody(),
12669
13119
  introCtas("start")
@@ -13606,16 +14056,59 @@ var formComposition = composeFragments([
13606
14056
  { fragment: formCopyFragment },
13607
14057
  { fragment: formEmbedFragment }
13608
14058
  ]);
13609
- var formLayout = styledSection({
13610
- children: styledContainer({
13611
- rootType: "stack",
13612
- rootProps: { gap: "lg" },
13613
- children: formComposition.layout
13614
- }),
13615
- baseClass: "",
13616
- spacing: "medium",
13617
- background: "surface"
13618
- });
14059
+ function fragmentLayoutNode(layout) {
14060
+ return isNodeDefinitionArray(layout) ? el("div", {}, [...layout]) : layout;
14061
+ }
14062
+ function isNodeDefinitionArray(layout) {
14063
+ return Array.isArray(layout);
14064
+ }
14065
+ var copyLayout = fragmentLayoutNode(formCopyFragment.layout);
14066
+ var embedLayout = fragmentLayoutNode(formEmbedFragment.layout);
14067
+ var formSurface = styledContainer({
14068
+ bindFrom: "_containerStyles",
14069
+ constrainWidth: false,
14070
+ baseClassName: "rb-form-surface rb-relative rb-isolate rb-overflow-hidden",
14071
+ children: embedLayout
14072
+ });
14073
+ function createFormLayout(variant) {
14074
+ if (variant === "two-column") {
14075
+ return styledSection({
14076
+ children: el(
14077
+ "div",
14078
+ {
14079
+ className: "rb-container"
14080
+ },
14081
+ [
14082
+ el(
14083
+ "div",
14084
+ {
14085
+ className: "rb-form-two-column rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
14086
+ },
14087
+ [
14088
+ stack({ gap: "md", className: "rb-form-copy-column" }, [copyLayout]),
14089
+ formSurface
14090
+ ]
14091
+ )
14092
+ ]
14093
+ ),
14094
+ baseClass: "",
14095
+ spacing: "medium",
14096
+ background: "surface"
14097
+ });
14098
+ }
14099
+ return styledSection({
14100
+ children: styledContainer({
14101
+ rootType: "stack",
14102
+ rootProps: { gap: "lg" },
14103
+ children: formComposition.layout
14104
+ }),
14105
+ baseClass: "",
14106
+ spacing: "medium",
14107
+ background: "surface"
14108
+ });
14109
+ }
14110
+ var formLayout = createFormLayout("default");
14111
+ var twoColumnFormLayout = createFormLayout("two-column");
13619
14112
  var dataLoaders = buildFragmentDataLoaders(formComposition);
13620
14113
  var formManifest = createBlockManifest({
13621
14114
  id: "block.form",
@@ -13628,6 +14121,23 @@ var formManifest = createBlockManifest({
13628
14121
  { fragment: formEmbedFragment }
13629
14122
  ],
13630
14123
  layout: formLayout,
14124
+ variants: {
14125
+ default: formLayout,
14126
+ "two-column": twoColumnFormLayout
14127
+ },
14128
+ defaultVariant: "default",
14129
+ variantOptions: {
14130
+ default: {
14131
+ label: "Stacked",
14132
+ description: "Copy above the form.",
14133
+ icon: "PanelTop"
14134
+ },
14135
+ "two-column": {
14136
+ label: "Two column",
14137
+ description: "Copy on the left and form on the right.",
14138
+ icon: "Columns2"
14139
+ }
14140
+ },
13631
14141
  styleTokens: { background: "surface", typography: "body", spacing: "md" },
13632
14142
  behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: false },
13633
14143
  category: "interactive",
@@ -13653,15 +14163,14 @@ var formBlockDefinition = {
13653
14163
  };
13654
14164
 
13655
14165
  // ../blocks/src/system/blocks/faq.ts
13656
- function fragmentLayoutNode(layout) {
13657
- return isNodeDefinitionArray(layout) ? el("div", {}, [...layout]) : layout;
14166
+ function fragmentLayoutNode2(layout) {
14167
+ return isNodeDefinitionArray2(layout) ? el("div", {}, [...layout]) : layout;
13658
14168
  }
13659
- function isNodeDefinitionArray(layout) {
14169
+ function isNodeDefinitionArray2(layout) {
13660
14170
  return Array.isArray(layout);
13661
14171
  }
13662
- var headingLayout = fragmentLayoutNode(faqHeadingFragment.layout);
13663
- var accordionLayout = fragmentLayoutNode(faqAccordionFragment.layout);
13664
- var decoratedHeadingLayout = fragmentLayoutNode(decoratedFaqHeadingLayout);
14172
+ var headingLayout = fragmentLayoutNode2(faqHeadingFragment.layout);
14173
+ var accordionLayout = fragmentLayoutNode2(faqAccordionFragment.layout);
13665
14174
  var questionColumnsAccordionLayout = createFaqAccordionLayout({
13666
14175
  rootClassName: "accordion-root rb-faq-question-columns rb-grid rb-grid-cols-1 rb-gap-4 rb-lg-grid-cols-2"
13667
14176
  });
@@ -13669,7 +14178,7 @@ var defaultLayout = styledSection({
13669
14178
  children: styledContainer({
13670
14179
  baseClassName: "rb-relative rb-isolate",
13671
14180
  children: stack({ gap: "xl", className: "rb-w-full rb-max-w-4xl rb-mx-auto" }, [
13672
- decoratedHeadingLayout,
14181
+ headingLayout,
13673
14182
  accordionLayout
13674
14183
  ])
13675
14184
  }),
@@ -13697,7 +14206,7 @@ var questionColumnsLayout = styledSection({
13697
14206
  children: stack(
13698
14207
  { gap: "xl", className: "rb-w-full" },
13699
14208
  [
13700
- decoratedHeadingLayout,
14209
+ headingLayout,
13701
14210
  questionColumnsAccordionLayout
13702
14211
  ]
13703
14212
  )
@@ -14155,7 +14664,7 @@ var floatingLayout = inline(
14155
14664
  ),
14156
14665
  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`
14157
14666
  }),
14158
- align: "center"
14667
+ align: "start"
14159
14668
  },
14160
14669
  [
14161
14670
  logoRow,
@@ -14674,7 +15183,6 @@ var splitHeading = stack(
14674
15183
  when("content.heading"),
14675
15184
  bind("content.heading")
14676
15185
  ),
14677
- headingDecoration(),
14678
15186
  text(
14679
15187
  {
14680
15188
  as: "p",
@@ -15212,7 +15720,6 @@ var sectionHeading = stack(
15212
15720
  when("content.title"),
15213
15721
  bind("content.title")
15214
15722
  ),
15215
- headingDecoration(),
15216
15723
  richText(
15217
15724
  {
15218
15725
  className: "rb-feature-cards-description rb-prose rb-mx-auto rb-max-w-none",
@@ -15245,6 +15752,17 @@ var featureCard = styledCard(
15245
15752
  null,
15246
15753
  bind("card.icon")
15247
15754
  ),
15755
+ // Auto-numbered marker (01, 02, …). Always in the DOM; CSS shows it only
15756
+ // when cardMarker === 'numbers' and fills it via a counter. Its own class
15757
+ // (not the icon zone) so the icon-zone collapse behaviour is unaffected.
15758
+ el(
15759
+ "div",
15760
+ {
15761
+ className: "rb-feature-card-number-zone",
15762
+ "aria-hidden": "true"
15763
+ },
15764
+ null
15765
+ ),
15248
15766
  text(
15249
15767
  {
15250
15768
  as: "h3",
@@ -15284,6 +15802,12 @@ var cardsLayout = styledSection({
15284
15802
  sectionHeading,
15285
15803
  grid3(
15286
15804
  {
15805
+ className: "rb-feature-cards-grid",
15806
+ // Drives which marker shows (icons / numbers / none) via CSS; the
15807
+ // fallback keeps legacy content (no cardMarker) showing icons.
15808
+ "data-card-marker": {
15809
+ $bind: { from: "content.cardMarker", fallback: "icons" }
15810
+ },
15287
15811
  cols: {
15288
15812
  $bind: {
15289
15813
  from: "content.columns",
@@ -15411,6 +15935,20 @@ var featureCardsConfig = {
15411
15935
  ]
15412
15936
  }
15413
15937
  },
15938
+ {
15939
+ id: "cardMarker",
15940
+ type: "select",
15941
+ label: "Card marker",
15942
+ required: false,
15943
+ defaultValue: "icons",
15944
+ multiple: false,
15945
+ options: [
15946
+ { value: "icons", label: "Icons" },
15947
+ { value: "numbers", label: "Numbers (01, 02, \u2026)" },
15948
+ { value: "none", label: "None" }
15949
+ ],
15950
+ ui: { intent: "display" }
15951
+ },
15414
15952
  {
15415
15953
  id: "_iconTreatment",
15416
15954
  type: "select",
@@ -16179,6 +16717,22 @@ var eventCategorySchema = z35.object({
16179
16717
  var pricingTypeSchema = z35.enum(["free", "paid", "pass_only", "membership_only"]);
16180
16718
  var accessRestrictionSchema = z35.enum(["none", "category"]);
16181
16719
  var eventPricingModeSchema = z35.enum(["single", "ticket_types"]);
16720
+ var publicCoursePriceDisplaySchema = z35.discriminatedUnion("kind", [
16721
+ z35.object({ kind: z35.literal("free"), currency: z35.string() }),
16722
+ z35.object({ kind: z35.literal("exact"), amount: z35.number(), currency: z35.string() }),
16723
+ z35.object({ kind: z35.literal("from"), amount: z35.number(), currency: z35.string() }),
16724
+ z35.object({ kind: z35.literal("unavailable"), currency: z35.string() })
16725
+ ]);
16726
+ var publicEventPriceDisplaySchema = z35.discriminatedUnion("kind", [
16727
+ z35.object({ kind: z35.literal("free"), currency: z35.string() }),
16728
+ z35.object({ kind: z35.literal("exact"), amount: z35.number(), currency: z35.string() }),
16729
+ z35.object({ kind: z35.literal("from"), amount: z35.number(), currency: z35.string() }),
16730
+ z35.object({ kind: z35.literal("mixed"), paidFromAmount: z35.number(), currency: z35.string() }),
16731
+ z35.object({ kind: z35.literal("pass_only") }),
16732
+ z35.object({ kind: z35.literal("membership_only") }),
16733
+ z35.object({ kind: z35.literal("unavailable"), currency: z35.string() }),
16734
+ z35.object({ kind: z35.literal("course"), display: publicCoursePriceDisplaySchema })
16735
+ ]);
16182
16736
  var publicEventAttendanceModeSchema = z35.enum(["in_person", "online"]);
16183
16737
  var publicEventAttendanceModeAvailabilitySchema = z35.object({
16184
16738
  mode: publicEventAttendanceModeSchema,
@@ -16260,6 +16814,7 @@ var publicEventSchema = z35.object({
16260
16814
  pricingType: pricingTypeSchema,
16261
16815
  price: z35.number().nullable(),
16262
16816
  currency: z35.string(),
16817
+ priceDisplay: publicEventPriceDisplaySchema,
16263
16818
  paymentTerms: blockBookingPaymentTermsSchema,
16264
16819
  pricingMode: eventPricingModeSchema.optional(),
16265
16820
  ticketTypes: z35.array(publicEventTicketTypeSchema).optional(),
@@ -16305,7 +16860,7 @@ var cardStylingFields = [
16305
16860
  description: "Text for the event action button",
16306
16861
  required: false,
16307
16862
  multiline: false,
16308
- defaultValue: "Book now",
16863
+ defaultValue: "Book",
16309
16864
  maxLength: 40
16310
16865
  }
16311
16866
  ];
@@ -17658,7 +18213,7 @@ var eventSpotlightBlockDefinition = {
17658
18213
  };
17659
18214
 
17660
18215
  // ../blocks/src/system/runtime/nodes/events/EventListing.interactive.ts
17661
- import { z as z43 } from "zod";
18216
+ import { z as z44 } from "zod";
17662
18217
 
17663
18218
  // ../blocks/src/system/runtime/nodes/events/shared/utils.ts
17664
18219
  var COLUMN_CLASSES = {
@@ -17688,92 +18243,130 @@ function getCardOrientation(layout) {
17688
18243
  }
17689
18244
  }
17690
18245
 
18246
+ // ../blocks/src/system/runtime/nodes/events/shared/listOptions.ts
18247
+ import { z as z43 } from "zod";
18248
+ var eventPageSizeValues = [3, 6, 10, 12, 20, 24, 30];
18249
+ var eventPageSizeSchema = z43.union([
18250
+ z43.literal(3),
18251
+ z43.literal(6),
18252
+ z43.literal(10),
18253
+ z43.literal(12),
18254
+ z43.literal(20),
18255
+ z43.literal(24),
18256
+ z43.literal(30)
18257
+ ]);
18258
+ var eventPageSizeSet = new Set(eventPageSizeValues);
18259
+ function resolveEventPageSize(value, fallback = 12) {
18260
+ const candidate = typeof value === "number" ? value : typeof value === "string" && value.trim() !== "" ? Number(value.trim()) : null;
18261
+ return candidate != null && Number.isInteger(candidate) && eventPageSizeSet.has(candidate) ? candidate : fallback;
18262
+ }
18263
+ function resolveEventCalendarListPageSize(input) {
18264
+ return resolveEventPageSize(input.eventsPerPage);
18265
+ }
18266
+ var eventListPaginationActionSchema = z43.discriminatedUnion("kind", [
18267
+ z43.object({
18268
+ kind: z43.literal("loadMore"),
18269
+ label: z43.string()
18270
+ }),
18271
+ z43.object({
18272
+ kind: z43.literal("seeAllLink"),
18273
+ label: z43.string(),
18274
+ href: z43.string()
18275
+ })
18276
+ ]);
18277
+ function resolveEventListPaginationAction(input) {
18278
+ const label = input.loadMoreText?.trim() || input.defaultLabel || "Load more events";
18279
+ const href = input.seeAllUrl?.trim();
18280
+ if (input.paginationMode === "seeAllLink" && href) {
18281
+ return { kind: "seeAllLink", label, href };
18282
+ }
18283
+ return { kind: "loadMore", label };
18284
+ }
18285
+
17691
18286
  // ../blocks/src/system/runtime/nodes/events/EventListing.interactive.ts
17692
- var legacyEventCardVariantSchema = z43.enum(["variant1", "variant2"]);
17693
- var eventCardVariantInputSchema = z43.union([
18287
+ var legacyEventCardVariantSchema = z44.enum(["variant1", "variant2"]);
18288
+ var eventCardVariantInputSchema = z44.union([
17694
18289
  cardVariantRoleSchema,
17695
18290
  legacyEventCardVariantSchema
17696
18291
  ]);
17697
- var cardOrientationSchema = z43.enum(["vertical", "horizontal"]);
17698
- var eventBlockKindSchema = z43.enum(eventBlockKindValues);
17699
- var eventSurfaceScopeSchema = z43.enum(eventSurfaceScopeValues);
17700
- var eventScheduleScopeSchema2 = z43.enum(eventScheduleScopeValues);
17701
- var eventListingSourceSchema = z43.object({
17702
- events: z43.array(publicEventSchema).nullable().optional(),
17703
- siteId: z43.string(),
17704
- apiBaseUrl: z43.string().optional(),
18292
+ var cardOrientationSchema = z44.enum(["vertical", "horizontal"]);
18293
+ var eventBlockKindSchema = z44.enum(eventBlockKindValues);
18294
+ var eventSurfaceScopeSchema = z44.enum(eventSurfaceScopeValues);
18295
+ var eventScheduleScopeSchema2 = z44.enum(eventScheduleScopeValues);
18296
+ var eventListingSourceSchema = z44.object({
18297
+ events: z44.array(publicEventSchema).nullable().optional(),
18298
+ siteId: z44.string(),
18299
+ apiBaseUrl: z44.string().optional(),
17705
18300
  stage: previewStageSchema.optional(),
17706
18301
  layout: eventLayoutSchema.optional(),
17707
18302
  columns: columnOptionSchema.optional(),
17708
- eventsPerPage: z43.string().optional(),
17709
- paginationMode: z43.enum(["loadMore", "seeAllLink"]).optional(),
17710
- seeAllUrl: z43.string().optional(),
17711
- loadMoreText: z43.string().optional(),
18303
+ eventsPerPage: z44.string().optional(),
18304
+ paginationMode: z44.enum(["loadMore", "seeAllLink"]).optional(),
18305
+ seeAllUrl: z44.string().optional(),
18306
+ loadMoreText: z44.string().optional(),
17712
18307
  cardVariant: eventCardVariantInputSchema.optional(),
17713
18308
  buttonVariant: eventButtonVariantSchema.optional(),
17714
- buttonText: z43.string().optional(),
17715
- showVenue: z43.boolean().optional(),
17716
- showMap: z43.boolean().optional(),
17717
- showCapacity: z43.boolean().optional(),
17718
- emptyMessage: z43.string().optional(),
17719
- className: z43.string().optional(),
17720
- showFilters: z43.boolean().nullable().optional(),
18309
+ buttonText: z44.string().optional(),
18310
+ showVenue: z44.boolean().optional(),
18311
+ showMap: z44.boolean().optional(),
18312
+ showCapacity: z44.boolean().optional(),
18313
+ emptyMessage: z44.string().optional(),
18314
+ className: z44.string().optional(),
18315
+ showFilters: z44.boolean().nullable().optional(),
17721
18316
  showCategoryFilter: filterAutoShowSchema.optional(),
17722
- showVenueFilter: z43.boolean().nullable().optional(),
17723
- showStaffFilter: z43.boolean().nullable().optional(),
18317
+ showVenueFilter: z44.boolean().nullable().optional(),
18318
+ showStaffFilter: z44.boolean().nullable().optional(),
17724
18319
  eventKind: eventBlockKindSchema.nullable().optional(),
17725
18320
  eventSurface: eventSurfaceScopeSchema.nullable().optional(),
17726
- filterEventPresets: z43.union([z43.string(), z43.array(z43.string())]).nullable().optional(),
18321
+ filterEventPresets: z44.union([z44.string(), z44.array(z44.string())]).nullable().optional(),
17727
18322
  scheduleScope: eventScheduleScopeSchema2.nullable().optional(),
17728
- filterCategoryIds: z43.string().nullable().optional(),
17729
- filterStaffMemberId: z43.string().nullable().optional(),
17730
- filterVenueId: z43.string().nullable().optional()
18323
+ filterCategoryIds: z44.string().nullable().optional(),
18324
+ filterStaffMemberId: z44.string().nullable().optional(),
18325
+ filterVenueId: z44.string().nullable().optional()
17731
18326
  });
17732
- var eventListingDisplaySchema = z43.object({
17733
- kind: z43.literal("event-listing"),
17734
- state: z43.enum(["loading", "empty", "ready"]),
18327
+ var eventListingDisplaySchema = z44.object({
18328
+ kind: z44.literal("event-listing"),
18329
+ state: z44.enum(["loading", "empty", "ready"]),
17735
18330
  listLayout: eventLayoutSchema,
17736
- className: z43.string().nullable(),
17737
- emptyMessage: z43.string(),
17738
- loadingMessage: z43.string(),
17739
- containerClass: z43.string(),
18331
+ className: z44.string().nullable(),
18332
+ emptyMessage: z44.string(),
18333
+ loadingMessage: z44.string(),
18334
+ containerClass: z44.string(),
17740
18335
  cardVariant: cardVariantRoleSchema,
17741
18336
  buttonVariant: eventButtonVariantSchema,
17742
- buttonText: z43.string(),
17743
- showVenue: z43.boolean(),
17744
- showMap: z43.boolean(),
17745
- showCapacity: z43.boolean(),
18337
+ buttonText: z44.string(),
18338
+ showVenue: z44.boolean(),
18339
+ showMap: z44.boolean(),
18340
+ showCapacity: z44.boolean(),
17746
18341
  orientation: cardOrientationSchema,
17747
- events: z43.array(publicEventSchema)
18342
+ events: z44.array(publicEventSchema)
17748
18343
  });
17749
- var eventListingHydrationSchema = z43.object({
17750
- siteId: z43.string(),
18344
+ var eventListingHydrationSchema = z44.object({
18345
+ siteId: z44.string(),
17751
18346
  stage: previewStageSchema.optional(),
17752
- eventsPerPage: z43.string(),
17753
- paginationMode: z43.enum(["loadMore", "seeAllLink"]),
17754
- seeAllUrl: z43.string().optional(),
17755
- loadMoreText: z43.string(),
17756
- showFilters: z43.boolean(),
18347
+ eventsPerPage: eventPageSizeSchema,
18348
+ paginationAction: eventListPaginationActionSchema,
18349
+ showFilters: z44.boolean(),
17757
18350
  showCategoryFilter: filterAutoShowSchema,
17758
- showVenueFilter: z43.boolean(),
17759
- showStaffFilter: z43.boolean(),
18351
+ showVenueFilter: z44.boolean(),
18352
+ showStaffFilter: z44.boolean(),
17760
18353
  eventKind: eventBlockKindSchema,
17761
18354
  eventSurface: eventSurfaceScopeSchema,
17762
- filterEventPresets: z43.string().nullable(),
18355
+ filterEventPresets: z44.string().nullable(),
17763
18356
  scheduleScope: eventScheduleScopeSchema2,
17764
- filterCategoryIds: z43.string().nullable().optional(),
17765
- filterStaffMemberId: z43.string().nullable().optional(),
17766
- filterVenueId: z43.string().nullable().optional(),
17767
- fetchInitialEventsOnMount: z43.boolean()
18357
+ filterCategoryIds: z44.string().nullable().optional(),
18358
+ filterStaffMemberId: z44.string().nullable().optional(),
18359
+ filterVenueId: z44.string().nullable().optional(),
18360
+ fetchInitialEventsOnMount: z44.boolean()
17768
18361
  });
17769
- var eventListingRenderSchema = z43.object({
18362
+ var eventListingRenderSchema = z44.object({
17770
18363
  display: eventListingDisplaySchema,
17771
18364
  hydration: eventListingHydrationSchema
17772
18365
  });
17773
18366
  var eventListingIslandMetaCodec = createZodCodec(
17774
- z43.object({
17775
- siteId: z43.string(),
17776
- apiBaseUrl: z43.string().optional(),
18367
+ z44.object({
18368
+ siteId: z44.string(),
18369
+ apiBaseUrl: z44.string().optional(),
17777
18370
  stage: previewStageSchema.optional()
17778
18371
  })
17779
18372
  );
@@ -17785,7 +18378,7 @@ var eventListingBlockRuntime = defineProgressiveBlockRuntime({
17785
18378
  },
17786
18379
  buildRender: (source) => {
17787
18380
  const normalizedEvents = Array.isArray(source.events) ? source.events : [];
17788
- const pageSize = parseInt(source.eventsPerPage ?? "12", 10) || 12;
18381
+ const pageSize = resolveEventPageSize(source.eventsPerPage);
17789
18382
  const initialEvents = normalizedEvents.slice(0, pageSize);
17790
18383
  const didPrefetchEvents = source.events != null;
17791
18384
  const layout = source.layout ?? "grid";
@@ -17800,7 +18393,7 @@ var eventListingBlockRuntime = defineProgressiveBlockRuntime({
17800
18393
  containerClass: getContainerClass(layout, source.columns ?? "3"),
17801
18394
  cardVariant: normalizeCardVariantRole(source.cardVariant) ?? "default",
17802
18395
  buttonVariant: source.buttonVariant ?? "primary",
17803
- buttonText: source.buttonText ?? "Book now",
18396
+ buttonText: source.buttonText ?? "Book",
17804
18397
  showVenue: source.showVenue ?? true,
17805
18398
  showMap: source.showMap ?? true,
17806
18399
  showCapacity: source.showCapacity ?? true,
@@ -17810,10 +18403,12 @@ var eventListingBlockRuntime = defineProgressiveBlockRuntime({
17810
18403
  hydration: {
17811
18404
  siteId: source.siteId,
17812
18405
  stage: source.stage,
17813
- eventsPerPage: source.eventsPerPage ?? "12",
17814
- paginationMode: source.paginationMode ?? "loadMore",
17815
- seeAllUrl: source.seeAllUrl,
17816
- loadMoreText: source.loadMoreText || "Load more",
18406
+ eventsPerPage: pageSize,
18407
+ paginationAction: resolveEventListPaginationAction({
18408
+ paginationMode: source.paginationMode,
18409
+ seeAllUrl: source.seeAllUrl,
18410
+ loadMoreText: source.loadMoreText
18411
+ }),
17817
18412
  showFilters: source.showFilters ?? false,
17818
18413
  showCategoryFilter: source.showCategoryFilter ?? "auto",
17819
18414
  showVenueFilter: source.showVenueFilter ?? false,
@@ -18035,7 +18630,7 @@ var eventListingLayout = [
18035
18630
  loadMoreText: { $bind: { from: "content.loadMoreText", fallback: "Load more events" } },
18036
18631
  cardVariant: { $bind: { from: "content.cardVariant", fallback: "default" } },
18037
18632
  buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
18038
- buttonText: { $bind: { from: "content.buttonText", fallback: "Book now" } },
18633
+ buttonText: { $bind: { from: "content.buttonText", fallback: "Book" } },
18039
18634
  showVenue: { $bind: { from: "content.showVenue" } },
18040
18635
  showMap: { $bind: { from: "content.showMap" } },
18041
18636
  showCapacity: { $bind: { from: "content.showCapacity" } },
@@ -18130,15 +18725,15 @@ var eventListingBlockDefinition = {
18130
18725
  };
18131
18726
 
18132
18727
  // ../blocks/src/system/runtime/nodes/events/EventCalendar.interactive.ts
18133
- import { z as z44 } from "zod";
18134
- var eventBlockKindSchema2 = z44.enum(eventBlockKindValues);
18135
- var eventSurfaceScopeSchema2 = z44.enum(eventSurfaceScopeValues);
18136
- var eventScheduleScopeSchema3 = z44.enum(eventScheduleScopeValues);
18137
- var eventCalendarSourceSchema = z44.object(
18728
+ import { z as z45 } from "zod";
18729
+ var eventBlockKindSchema2 = z45.enum(eventBlockKindValues);
18730
+ var eventSurfaceScopeSchema2 = z45.enum(eventSurfaceScopeValues);
18731
+ var eventScheduleScopeSchema3 = z45.enum(eventScheduleScopeValues);
18732
+ var eventCalendarSourceSchema = z45.object(
18138
18733
  {
18139
- events: z44.array(publicEventSchema).nullable().optional(),
18140
- siteId: z44.string(),
18141
- apiBaseUrl: z44.string().optional(),
18734
+ events: z45.array(publicEventSchema).nullable().optional(),
18735
+ siteId: z45.string(),
18736
+ apiBaseUrl: z45.string().optional(),
18142
18737
  stage: previewStageSchema.optional(),
18143
18738
  variant: eventCalendarDisplayModeSchema.nullable().optional(),
18144
18739
  displayMode: eventCalendarDisplayModeSchema.nullable().optional(),
@@ -18146,77 +18741,78 @@ var eventCalendarSourceSchema = z44.object(
18146
18741
  listColumns: columnOptionSchema.optional(),
18147
18742
  layout: eventLayoutSchema.optional(),
18148
18743
  columns: columnOptionSchema.optional(),
18149
- eventsPerPage: z44.string().optional(),
18150
- compactEventsPerPage: z44.string().optional(),
18151
- loadMoreText: z44.string().optional(),
18744
+ eventsPerPage: z45.string().optional(),
18745
+ paginationMode: z45.enum(["loadMore", "seeAllLink"]).optional(),
18746
+ seeAllUrl: z45.string().optional(),
18747
+ loadMoreText: z45.string().optional(),
18152
18748
  startOfWeek: weekStartSchema.optional(),
18153
18749
  calendarTabViews: calendarTabViewsSchema.optional(),
18154
- showFilters: z44.boolean().nullable().optional(),
18750
+ showFilters: z45.boolean().nullable().optional(),
18155
18751
  showCategoryFilter: filterAutoShowSchema.optional(),
18156
- showVenueFilter: z44.boolean().nullable().optional(),
18157
- showStaffFilter: z44.boolean().nullable().optional(),
18752
+ showVenueFilter: z45.boolean().nullable().optional(),
18753
+ showStaffFilter: z45.boolean().nullable().optional(),
18158
18754
  kind: eventBlockKindSchema2.nullable().optional(),
18159
18755
  eventSurface: eventSurfaceScopeSchema2.nullable().optional(),
18160
- filterEventPresets: z44.union([z44.string(), z44.array(z44.string())]).nullable().optional(),
18756
+ filterEventPresets: z45.union([z45.string(), z45.array(z45.string())]).nullable().optional(),
18161
18757
  scheduleScope: eventScheduleScopeSchema3.nullable().optional(),
18162
- filterCategoryIds: z44.union([z44.string(), z44.array(z44.string())]).nullable().optional(),
18163
- filterStaffMemberId: z44.string().nullable().optional(),
18164
- filterVenueId: z44.string().nullable().optional(),
18758
+ filterCategoryIds: z45.union([z45.string(), z45.array(z45.string())]).nullable().optional(),
18759
+ filterStaffMemberId: z45.string().nullable().optional(),
18760
+ filterVenueId: z45.string().nullable().optional(),
18165
18761
  buttonVariant: eventButtonVariantSchema.optional(),
18166
- buttonText: z44.string().optional(),
18167
- showVenue: z44.boolean().nullable().optional(),
18168
- showMap: z44.boolean().nullable().optional(),
18169
- showCapacity: z44.boolean().nullable().optional(),
18170
- emptyMessage: z44.string().optional(),
18171
- className: z44.string().optional()
18762
+ buttonText: z45.string().optional(),
18763
+ showVenue: z45.boolean().nullable().optional(),
18764
+ showMap: z45.boolean().nullable().optional(),
18765
+ showCapacity: z45.boolean().nullable().optional(),
18766
+ emptyMessage: z45.string().optional(),
18767
+ className: z45.string().optional()
18172
18768
  }
18173
18769
  );
18174
- var eventCalendarDisplaySchema = z44.object({
18175
- kind: z44.literal("event-calendar"),
18770
+ var eventCalendarDisplaySchema = z45.object({
18771
+ kind: z45.literal("event-calendar"),
18176
18772
  displayMode: eventCalendarDisplayModeSchema,
18177
- className: z44.string().nullable(),
18178
- events: z44.array(publicEventSchema),
18773
+ className: z45.string().nullable(),
18774
+ events: z45.array(publicEventSchema),
18179
18775
  listLayout: eventLayoutSchema,
18180
18776
  listColumns: columnOptionSchema,
18181
- eventsPerPage: z44.string(),
18182
- loadMoreText: z44.string(),
18777
+ eventsPerPage: eventPageSizeSchema,
18778
+ paginationAction: eventListPaginationActionSchema,
18183
18779
  startOfWeek: weekStartSchema,
18184
18780
  calendarTabViews: calendarTabViewsSchema,
18185
- showFilters: z44.boolean(),
18781
+ showFilters: z45.boolean(),
18186
18782
  showCategoryFilter: filterAutoShowSchema,
18187
- showVenueFilter: z44.boolean(),
18188
- showStaffFilter: z44.boolean(),
18783
+ showVenueFilter: z45.boolean(),
18784
+ showStaffFilter: z45.boolean(),
18189
18785
  eventKind: eventBlockKindSchema2,
18190
18786
  eventSurface: eventSurfaceScopeSchema2,
18191
- filterEventPresets: z44.string().nullable(),
18787
+ filterEventPresets: z45.string().nullable(),
18192
18788
  scheduleScope: eventScheduleScopeSchema3,
18193
- filterCategoryIds: z44.string().nullable(),
18194
- filterStaffMemberId: z44.string().nullable(),
18195
- filterVenueId: z44.string().nullable(),
18789
+ filterCategoryIds: z45.string().nullable(),
18790
+ filterStaffMemberId: z45.string().nullable(),
18791
+ filterVenueId: z45.string().nullable(),
18196
18792
  buttonVariant: eventButtonVariantSchema,
18197
- buttonText: z44.string(),
18198
- showVenue: z44.boolean(),
18199
- showMap: z44.boolean(),
18200
- showCapacity: z44.boolean(),
18201
- emptyMessage: z44.string()
18202
- });
18203
- var eventCalendarHydrationSchema = z44.object({
18204
- siteId: z44.string(),
18793
+ buttonText: z45.string(),
18794
+ showVenue: z45.boolean(),
18795
+ showMap: z45.boolean(),
18796
+ showCapacity: z45.boolean(),
18797
+ emptyMessage: z45.string()
18798
+ });
18799
+ var eventCalendarHydrationSchema = z45.object({
18800
+ siteId: z45.string(),
18205
18801
  stage: previewStageSchema.optional(),
18206
- prefetchedEvents: z44.boolean(),
18802
+ prefetchedEvents: z45.boolean(),
18207
18803
  eventKind: eventBlockKindSchema2,
18208
18804
  eventSurface: eventSurfaceScopeSchema2,
18209
- filterEventPresets: z44.string().nullable(),
18805
+ filterEventPresets: z45.string().nullable(),
18210
18806
  scheduleScope: eventScheduleScopeSchema3
18211
18807
  });
18212
- var eventCalendarRenderSchema = z44.object({
18808
+ var eventCalendarRenderSchema = z45.object({
18213
18809
  display: eventCalendarDisplaySchema,
18214
18810
  hydration: eventCalendarHydrationSchema
18215
18811
  });
18216
18812
  var eventCalendarIslandMetaCodec = createZodCodec(
18217
- z44.object({
18218
- siteId: z44.string(),
18219
- apiBaseUrl: z44.string().optional(),
18813
+ z45.object({
18814
+ siteId: z45.string(),
18815
+ apiBaseUrl: z45.string().optional(),
18220
18816
  stage: previewStageSchema.optional()
18221
18817
  })
18222
18818
  );
@@ -18226,6 +18822,7 @@ var eventCalendarIslandMetaKeys = defineInteractiveIslandMetaKeys(
18226
18822
  "stage"
18227
18823
  );
18228
18824
  function buildEventCalendarDisplay(source) {
18825
+ const listLayout = source.listLayout ?? source.layout ?? "stack";
18229
18826
  return {
18230
18827
  kind: "event-calendar",
18231
18828
  displayMode: source.variant ?? source.displayMode ?? "combined",
@@ -18233,10 +18830,16 @@ function buildEventCalendarDisplay(source) {
18233
18830
  events: (source.events ?? []).slice().sort(
18234
18831
  (left, right) => new Date(left.startsAt).getTime() - new Date(right.startsAt).getTime()
18235
18832
  ),
18236
- listLayout: source.listLayout ?? source.layout ?? "stack",
18833
+ listLayout,
18237
18834
  listColumns: source.listColumns ?? source.columns ?? "3",
18238
- eventsPerPage: (source.listLayout ?? source.layout) === "compact" ? source.compactEventsPerPage ?? "10" : source.eventsPerPage ?? "12",
18239
- loadMoreText: source.loadMoreText ?? "Load more events",
18835
+ eventsPerPage: resolveEventCalendarListPageSize({
18836
+ eventsPerPage: source.eventsPerPage
18837
+ }),
18838
+ paginationAction: resolveEventListPaginationAction({
18839
+ paginationMode: source.paginationMode,
18840
+ seeAllUrl: source.seeAllUrl,
18841
+ loadMoreText: source.loadMoreText
18842
+ }),
18240
18843
  startOfWeek: source.startOfWeek ?? "monday",
18241
18844
  calendarTabViews: source.calendarTabViews ?? "both",
18242
18845
  showFilters: source.showFilters ?? true,
@@ -18253,7 +18856,7 @@ function buildEventCalendarDisplay(source) {
18253
18856
  ),
18254
18857
  filterVenueId: normalizeEventVenueId(source.filterVenueId),
18255
18858
  buttonVariant: source.buttonVariant ?? "primary",
18256
- buttonText: source.buttonText ?? "Book now",
18859
+ buttonText: source.buttonText ?? "Book",
18257
18860
  showVenue: source.showVenue ?? true,
18258
18861
  showMap: source.showMap ?? true,
18259
18862
  showCapacity: source.showCapacity ?? true,
@@ -18353,10 +18956,16 @@ var eventCalendarLayout = [
18353
18956
  layout: { $bind: { from: "content.layout" } },
18354
18957
  columns: { $bind: { from: "content.columns" } },
18355
18958
  eventsPerPage: {
18356
- $bind: { from: "content.eventsPerPage", fallback: "12" }
18959
+ $bind: { from: "content.eventsPerPage" }
18357
18960
  },
18358
- compactEventsPerPage: {
18359
- $bind: { from: "content.compactEventsPerPage", fallback: "10" }
18961
+ paginationMode: {
18962
+ $bind: { from: "content.paginationMode", fallback: "loadMore" }
18963
+ },
18964
+ seeAllUrl: {
18965
+ $bind: {
18966
+ from: "content.seeAllUrl",
18967
+ transforms: [{ id: "links.resolve" }]
18968
+ }
18360
18969
  },
18361
18970
  loadMoreText: {
18362
18971
  $bind: {
@@ -18409,7 +19018,7 @@ var eventCalendarLayout = [
18409
19018
  $bind: { from: "content.buttonVariant", fallback: "primary" }
18410
19019
  },
18411
19020
  buttonText: {
18412
- $bind: { from: "content.buttonText", fallback: "Book now" }
19021
+ $bind: { from: "content.buttonText", fallback: "Book" }
18413
19022
  },
18414
19023
  emptyMessage: { $bind: { from: "content.emptyMessage" } }
18415
19024
  })
@@ -18483,15 +19092,18 @@ var eventCalendarAdditionalFields = [
18483
19092
  {
18484
19093
  id: "eventsPerPage",
18485
19094
  type: "select",
18486
- label: "Events per page (cards)",
18487
- description: "Number of events to load initially in card layouts",
19095
+ label: "Events per page",
19096
+ description: "Number of events to load initially",
18488
19097
  required: false,
18489
19098
  multiple: false,
18490
19099
  defaultValue: "12",
18491
19100
  options: [
18492
19101
  { value: "6", label: "6" },
19102
+ { value: "10", label: "10" },
18493
19103
  { value: "12", label: "12" },
18494
- { value: "24", label: "24" }
19104
+ { value: "20", label: "20" },
19105
+ { value: "24", label: "24" },
19106
+ { value: "30", label: "30" }
18495
19107
  ],
18496
19108
  ui: {
18497
19109
  intent: "display",
@@ -18499,33 +19111,42 @@ var eventCalendarAdditionalFields = [
18499
19111
  }
18500
19112
  },
18501
19113
  {
18502
- id: "compactEventsPerPage",
19114
+ id: "paginationMode",
18503
19115
  type: "select",
18504
- label: "Events per page (compact)",
18505
- description: "Number of events to show per page in compact layout",
19116
+ label: "More events",
19117
+ description: "How to access events beyond the initial list",
18506
19118
  required: false,
18507
19119
  multiple: false,
18508
- defaultValue: "10",
19120
+ defaultValue: "loadMore",
18509
19121
  options: [
18510
- { value: "10", label: "10" },
18511
- { value: "20", label: "20" },
18512
- { value: "30", label: "30" }
19122
+ { value: "loadMore", label: "Load more button" },
19123
+ { value: "seeAllLink", label: "Link to another page" }
18513
19124
  ],
18514
19125
  ui: {
18515
19126
  intent: "display",
18516
- visibleWhen: { field: "listLayout", equals: "compact" }
19127
+ visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
19128
+ }
19129
+ },
19130
+ {
19131
+ id: "seeAllUrl",
19132
+ type: "link",
19133
+ label: "See all destination",
19134
+ required: false,
19135
+ ui: {
19136
+ intent: "display",
19137
+ visibleWhen: { field: "paginationMode", equals: "seeAllLink" }
18517
19138
  }
18518
19139
  },
18519
19140
  {
18520
19141
  id: "loadMoreText",
18521
19142
  type: "text",
18522
- label: "Load more button text",
18523
- description: "Text for the load more button",
19143
+ label: "CTA button text",
19144
+ description: "Text for the load more button or linked CTA",
18524
19145
  required: false,
18525
19146
  multiline: false,
18526
19147
  defaultValue: "Load more events",
18527
19148
  ui: {
18528
- intent: "content",
19149
+ intent: "display",
18529
19150
  visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
18530
19151
  }
18531
19152
  },
@@ -18785,42 +19406,384 @@ var eventCalendarVariants = {
18785
19406
  };
18786
19407
  var eventCalendarDerivedFields = [
18787
19408
  {
18788
- id: "displayMode",
19409
+ id: "displayMode",
19410
+ type: "select",
19411
+ required: false,
19412
+ multiple: false,
19413
+ options: [
19414
+ { value: "combined" },
19415
+ { value: "month" },
19416
+ { value: "week" },
19417
+ { value: "timetable" },
19418
+ { value: "list" }
19419
+ ]
19420
+ },
19421
+ {
19422
+ id: "listLayout",
19423
+ type: "select",
19424
+ required: false,
19425
+ multiple: false,
19426
+ options: eventCalendarListLayoutOptions.map((option) => ({
19427
+ value: option.id
19428
+ }))
19429
+ }
19430
+ ];
19431
+ var eventCalendarContentShape = {
19432
+ additionalFields: eventCalendarDerivedFields,
19433
+ variants: eventCalendarVariants,
19434
+ skipSectionStyles: true
19435
+ };
19436
+ var eventCalendarConfig = {
19437
+ id: "block.event-calendar",
19438
+ version: "3.6.0",
19439
+ title: "Event Calendar",
19440
+ titleSource: "heading",
19441
+ description: "Display events with calendar, list, or combined views with filtering",
19442
+ // Preserve legacy section styles field configuration (renderInHeader: false).
19443
+ skipSectionStyles: true,
19444
+ additionalFields: eventCalendarAdditionalFields,
19445
+ styleTokens: { background: "surface", typography: "body", spacing: "md" },
19446
+ behaviours: {
19447
+ supportsThemeSwitching: true,
19448
+ inlineEditing: false,
19449
+ animation: false,
19450
+ paletteHidden: false
19451
+ },
19452
+ category: "interactive",
19453
+ tags: [
19454
+ "events",
19455
+ "calendar",
19456
+ "month",
19457
+ "week",
19458
+ "schedule",
19459
+ "interactive",
19460
+ "list",
19461
+ "filter"
19462
+ ],
19463
+ icon: "CalendarDays",
19464
+ layout: eventCalendarLayout,
19465
+ variants: eventCalendarVariants,
19466
+ defaultVariant: "combined",
19467
+ variantOptions: {
19468
+ combined: { label: "Combined" },
19469
+ month: { label: "Month" },
19470
+ week: { label: "Week" },
19471
+ timetable: { label: "Timetable" },
19472
+ list: { label: "List" }
19473
+ }
19474
+ };
19475
+ var eventCalendarManifest = createBlockManifestWithContentShape(
19476
+ eventCalendarConfig,
19477
+ eventCalendarContentShape
19478
+ );
19479
+ var eventCalendarBlockDefinition = {
19480
+ manifest: eventCalendarManifest,
19481
+ normalizeContent: normalizeEventCalendarContent,
19482
+ dataSchemas: {
19483
+ events: publicEventsArraySchema.optional()
19484
+ },
19485
+ dataLoaders: {
19486
+ events: {
19487
+ endpoint: "listPublicEvents",
19488
+ params: {
19489
+ siteId: { $bind: { from: "$root.siteId" } },
19490
+ // Pre-fetch events - limit varies by mode but default to high for calendar
19491
+ limit: 100,
19492
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
19493
+ detailLevel: "listing",
19494
+ readProfile: { $bind: { from: "content.variant", fallback: "listing-card" } },
19495
+ // Pass filter params if configured
19496
+ kind: { $bind: { from: "content.kind" } },
19497
+ eventSurface: { $bind: { from: "content.eventSurface" } },
19498
+ eventPresets: {
19499
+ $bind: {
19500
+ from: "content.filterEventPresets",
19501
+ transforms: [{ id: "value.csv" }]
19502
+ }
19503
+ },
19504
+ scheduleScope: { $bind: { from: "content.scheduleScope" } },
19505
+ categoryIds: { $bind: { from: "content.filterCategoryIds" } },
19506
+ staffMemberId: { $bind: { from: "content.filterStaffMemberId" } },
19507
+ venueId: { $bind: { from: "content.filterVenueId" } }
19508
+ },
19509
+ mode: "server"
19510
+ }
19511
+ },
19512
+ runtime: eventCalendarBlockRuntime
19513
+ };
19514
+
19515
+ // ../blocks/src/system/blocks/offerings-preview/index.ts
19516
+ import { z as z46 } from "zod";
19517
+
19518
+ // ../blocks/src/system/blocks/offerings-preview/model.ts
19519
+ var OFFERINGS_PREVIEW_DEFAULT_ITEM_LIMIT = "3";
19520
+ var OFFERINGS_PREVIEW_DEFAULT_BUTTON_TEXT = "Book";
19521
+ var OFFERINGS_PREVIEW_DEFAULT_EMPTY_MESSAGE = "Nothing scheduled just yet.";
19522
+ var OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS = [
19523
+ {
19524
+ preset: "class",
19525
+ sourceKey: "eventPreset:class",
19526
+ dataKey: "classEvents",
19527
+ label: "Classes"
19528
+ },
19529
+ {
19530
+ preset: "workshop",
19531
+ sourceKey: "eventPreset:workshop",
19532
+ dataKey: "workshopEvents",
19533
+ label: "Workshops"
19534
+ },
19535
+ {
19536
+ preset: "retreat",
19537
+ sourceKey: "eventPreset:retreat",
19538
+ dataKey: "retreatEvents",
19539
+ label: "Retreats"
19540
+ },
19541
+ {
19542
+ preset: "performance",
19543
+ sourceKey: "eventPreset:performance",
19544
+ dataKey: "performanceEvents",
19545
+ label: "Performances"
19546
+ }
19547
+ ];
19548
+ var OFFERINGS_PREVIEW_EVENT_PRESETS = OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => definition.preset);
19549
+ var OFFERINGS_PREVIEW_AUTHORABLE_SOURCE_KEYS = [
19550
+ ...OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => definition.sourceKey),
19551
+ "course"
19552
+ ];
19553
+ var eventPresetSourceByKey = Object.fromEntries(
19554
+ OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [
19555
+ definition.sourceKey,
19556
+ { kind: "eventPreset", preset: definition.preset }
19557
+ ])
19558
+ );
19559
+
19560
+ // ../blocks/src/system/blocks/offerings-preview/index.ts
19561
+ var publicRouteCandidatesSchema = z46.object({
19562
+ routes: z46.array(z46.object({
19563
+ entityId: z46.string(),
19564
+ path: z46.string(),
19565
+ title: z46.string(),
19566
+ kind: z46.enum(["page", "content"]),
19567
+ contentTypeKey: z46.string().nullable().optional()
19568
+ }))
19569
+ });
19570
+ var groupOverrideFields = [
19571
+ {
19572
+ id: "sourceKey",
19573
+ type: "select",
19574
+ label: "Offering",
19575
+ required: true,
19576
+ multiple: false,
19577
+ options: [
19578
+ ...OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => ({
19579
+ value: definition.sourceKey,
19580
+ label: definition.label
19581
+ })),
19582
+ { value: "course", label: "Courses" }
19583
+ ],
19584
+ ui: { intent: "behavior" }
19585
+ },
19586
+ {
19587
+ id: "title",
19588
+ type: "text",
19589
+ label: "Title",
19590
+ required: false,
19591
+ multiline: false,
19592
+ maxLength: 80,
19593
+ ui: { intent: "content" }
19594
+ },
19595
+ {
19596
+ id: "intro",
19597
+ type: "text",
19598
+ label: "Intro",
19599
+ required: false,
19600
+ multiline: true,
19601
+ maxLength: 220,
19602
+ ui: { intent: "content" }
19603
+ },
19604
+ {
19605
+ id: "hidden",
19606
+ type: "boolean",
19607
+ label: "Hide this card",
19608
+ required: false,
19609
+ defaultValue: false,
19610
+ ui: { intent: "display" }
19611
+ },
19612
+ {
19613
+ id: "presentation",
19614
+ type: "select",
19615
+ label: "Items",
19616
+ required: false,
19617
+ multiple: false,
19618
+ defaultValue: "compact-list",
19619
+ options: [
19620
+ { value: "compact-list", label: "Compact list" },
19621
+ { value: "single-card", label: "Single card" }
19622
+ ],
19623
+ ui: { intent: "display" }
19624
+ },
19625
+ {
19626
+ id: "ctaMode",
19627
+ type: "select",
19628
+ label: "Card link",
19629
+ required: false,
19630
+ multiple: false,
19631
+ defaultValue: "auto",
19632
+ options: [
19633
+ { value: "auto", label: "Auto" },
19634
+ { value: "custom", label: "Custom link" },
19635
+ { value: "hidden", label: "Hidden" }
19636
+ ],
19637
+ ui: { intent: "behavior" }
19638
+ },
19639
+ {
19640
+ id: "ctaLabel",
19641
+ type: "text",
19642
+ label: "Card link label",
19643
+ required: false,
19644
+ multiline: false,
19645
+ maxLength: 40,
19646
+ ui: { intent: "content" }
19647
+ },
19648
+ {
19649
+ id: "ctaHref",
19650
+ type: "text",
19651
+ label: "Custom card link",
19652
+ required: false,
19653
+ multiline: false,
19654
+ maxLength: 160,
19655
+ ui: { intent: "behavior" }
19656
+ }
19657
+ ];
19658
+ var offeringsPreviewFields = [
19659
+ ...sectionHeaderFields("Offerings"),
19660
+ {
19661
+ id: "itemLimit",
18789
19662
  type: "select",
19663
+ label: "Items per card",
18790
19664
  required: false,
18791
19665
  multiple: false,
19666
+ defaultValue: OFFERINGS_PREVIEW_DEFAULT_ITEM_LIMIT,
18792
19667
  options: [
18793
- { value: "combined" },
18794
- { value: "month" },
18795
- { value: "week" },
18796
- { value: "timetable" },
18797
- { value: "list" }
18798
- ]
19668
+ { value: "1", label: "1 item" },
19669
+ { value: "2", label: "2 items" },
19670
+ { value: "3", label: "3 items" },
19671
+ { value: "4", label: "4 items" },
19672
+ { value: "5", label: "5 items" },
19673
+ { value: "6", label: "6 items" }
19674
+ ],
19675
+ ui: { intent: "display" }
18799
19676
  },
18800
19677
  {
18801
- id: "listLayout",
19678
+ id: "groupOverrides",
19679
+ type: "repeater",
19680
+ label: "Card overrides",
19681
+ description: "Edit card copy, order, or visibility for enabled offering presets.",
19682
+ required: false,
19683
+ maxItems: 5,
19684
+ itemLabel: "Offering card",
19685
+ itemLabelSource: "title",
19686
+ allowConversion: false,
19687
+ ui: { intent: "content" },
19688
+ schema: { fields: groupOverrideFields }
19689
+ },
19690
+ {
19691
+ id: "buttonVariant",
18802
19692
  type: "select",
19693
+ label: "Item button style",
18803
19694
  required: false,
18804
19695
  multiple: false,
18805
- options: eventCalendarListLayoutOptions.map((option) => ({
18806
- value: option.id
18807
- }))
18808
- }
19696
+ defaultValue: "primary",
19697
+ options: [
19698
+ { value: "primary", label: "Primary" },
19699
+ { value: "secondary", label: "Secondary" },
19700
+ { value: "outline", label: "Outline" },
19701
+ { value: "link", label: "Link" }
19702
+ ],
19703
+ ui: { intent: "display" }
19704
+ },
19705
+ {
19706
+ id: "buttonText",
19707
+ type: "text",
19708
+ label: "Item button text",
19709
+ required: false,
19710
+ multiline: false,
19711
+ defaultValue: OFFERINGS_PREVIEW_DEFAULT_BUTTON_TEXT,
19712
+ maxLength: 40,
19713
+ ui: { intent: "content" }
19714
+ },
19715
+ {
19716
+ id: "emptyMessage",
19717
+ type: "text",
19718
+ label: "Empty card message",
19719
+ required: false,
19720
+ multiline: false,
19721
+ defaultValue: OFFERINGS_PREVIEW_DEFAULT_EMPTY_MESSAGE,
19722
+ maxLength: 120,
19723
+ ui: { intent: "content" }
19724
+ },
19725
+ cardStylesField({
19726
+ id: "_cardStyles",
19727
+ label: "Offering card styles"
19728
+ }),
19729
+ sectionStylesField({
19730
+ id: "_sectionStyles",
19731
+ label: "Section styles",
19732
+ renderInHeader: false
19733
+ })
18809
19734
  ];
18810
- var eventCalendarContentShape = {
18811
- additionalFields: eventCalendarDerivedFields,
18812
- variants: eventCalendarVariants,
18813
- skipSectionStyles: true
18814
- };
18815
- var eventCalendarConfig = {
18816
- id: "block.event-calendar",
18817
- version: "3.6.0",
18818
- title: "Event Calendar",
19735
+ var offeringsPreviewEventDataBindings = Object.fromEntries(
19736
+ OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [
19737
+ definition.dataKey,
19738
+ { $bind: { from: `data.${definition.dataKey}` } }
19739
+ ])
19740
+ );
19741
+ var offeringsPreviewLayout = [
19742
+ styledSection({
19743
+ children: sectionContainer([
19744
+ text(
19745
+ { as: "h2", className: "rb-text-center" },
19746
+ bind("content.heading"),
19747
+ when("content.heading")
19748
+ ),
19749
+ richText(
19750
+ { className: "rb-prose rb-max-w-none" },
19751
+ bind("content.description"),
19752
+ when("content.description")
19753
+ ),
19754
+ el("offerings-preview", {
19755
+ bookingOfferingPresets: {
19756
+ $bind: { from: "$root.bookingOfferingPresets", fallback: [] }
19757
+ },
19758
+ groupOverrides: { $bind: { from: "content.groupOverrides", fallback: [] } },
19759
+ cardStyles: { $bind: { from: "content._cardStyles" } },
19760
+ itemLimit: { $bind: { from: "content.itemLimit", fallback: OFFERINGS_PREVIEW_DEFAULT_ITEM_LIMIT } },
19761
+ buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
19762
+ buttonText: { $bind: { from: "content.buttonText", fallback: OFFERINGS_PREVIEW_DEFAULT_BUTTON_TEXT } },
19763
+ emptyMessage: {
19764
+ $bind: {
19765
+ from: "content.emptyMessage",
19766
+ fallback: OFFERINGS_PREVIEW_DEFAULT_EMPTY_MESSAGE
19767
+ }
19768
+ },
19769
+ previewStage: { $bind: { from: "$root.previewStage", fallback: "published" } },
19770
+ routeCandidates: { $bind: { from: "data.routeCandidates" } },
19771
+ courses: { $bind: { from: "data.courses" } },
19772
+ ...offeringsPreviewEventDataBindings
19773
+ })
19774
+ ], { gap: "lg" }),
19775
+ baseClass: "",
19776
+ spacing: "comfortable"
19777
+ })
19778
+ ];
19779
+ var offeringsPreviewConfig = {
19780
+ id: "block.offerings-preview",
19781
+ version: "1.0.0",
19782
+ title: "Offerings Preview",
18819
19783
  titleSource: "heading",
18820
- description: "Display events with calendar, list, or combined views with filtering",
18821
- // Preserve legacy section styles field configuration (renderInHeader: false).
19784
+ description: "Show enabled offering presets as compact cards",
18822
19785
  skipSectionStyles: true,
18823
- additionalFields: eventCalendarAdditionalFields,
19786
+ additionalFields: offeringsPreviewFields,
18824
19787
  styleTokens: { background: "surface", typography: "body", spacing: "md" },
18825
19788
  behaviours: {
18826
19789
  supportsThemeSwitching: true,
@@ -18828,71 +19791,68 @@ var eventCalendarConfig = {
18828
19791
  animation: false,
18829
19792
  paletteHidden: false
18830
19793
  },
18831
- category: "interactive",
18832
- tags: [
18833
- "events",
18834
- "calendar",
18835
- "month",
18836
- "week",
18837
- "schedule",
18838
- "interactive",
18839
- "list",
18840
- "filter"
18841
- ],
18842
- icon: "CalendarDays",
18843
- layout: eventCalendarLayout,
18844
- variants: eventCalendarVariants,
18845
- defaultVariant: "combined",
18846
- variantOptions: {
18847
- combined: { label: "Combined" },
18848
- month: { label: "Month" },
18849
- week: { label: "Week" },
18850
- timetable: { label: "Timetable" },
18851
- list: { label: "List" }
18852
- }
19794
+ category: "content",
19795
+ tags: ["offerings", "events", "classes", "workshops", "retreats"],
19796
+ icon: "PanelsTopLeft",
19797
+ layout: offeringsPreviewLayout
18853
19798
  };
18854
- var eventCalendarManifest = createBlockManifestWithContentShape(
18855
- eventCalendarConfig,
18856
- eventCalendarContentShape
19799
+ var offeringsPreviewManifest = createBlockManifest(offeringsPreviewConfig);
19800
+ var optionalPublicEventsArraySchema = publicEventsArraySchema.optional();
19801
+ var offeringsPreviewEventDataSchemas = Object.fromEntries(
19802
+ OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [
19803
+ definition.dataKey,
19804
+ optionalPublicEventsArraySchema
19805
+ ])
18857
19806
  );
18858
- var eventCalendarBlockDefinition = {
18859
- manifest: eventCalendarManifest,
18860
- normalizeContent: normalizeEventCalendarContent,
19807
+ var offeringsPreviewEventDataLoaders = Object.fromEntries(
19808
+ OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [
19809
+ definition.dataKey,
19810
+ eventPresetLoader(definition.preset)
19811
+ ])
19812
+ );
19813
+ var offeringsPreviewBlockDefinition = {
19814
+ manifest: offeringsPreviewManifest,
18861
19815
  dataSchemas: {
18862
- events: publicEventsArraySchema.optional()
19816
+ ...offeringsPreviewEventDataSchemas,
19817
+ routeCandidates: publicRouteCandidatesSchema.optional(),
19818
+ courses: publicCoursesArraySchema.optional()
18863
19819
  },
18864
19820
  dataLoaders: {
18865
- events: {
18866
- endpoint: "listPublicEvents",
19821
+ ...offeringsPreviewEventDataLoaders,
19822
+ routeCandidates: {
19823
+ endpoint: "listPublicRouteCandidates",
19824
+ params: {},
19825
+ mode: "server"
19826
+ },
19827
+ courses: {
19828
+ endpoint: "listPublicCourses",
18867
19829
  params: {
18868
19830
  siteId: { $bind: { from: "$root.siteId" } },
18869
- // Pre-fetch events - limit varies by mode but default to high for calendar
18870
- limit: 100,
18871
- stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
18872
- detailLevel: "listing",
18873
- readProfile: { $bind: { from: "content.variant", fallback: "listing-card" } },
18874
- // Pass filter params if configured
18875
- kind: { $bind: { from: "content.kind" } },
18876
- eventSurface: { $bind: { from: "content.eventSurface" } },
18877
- eventPresets: {
18878
- $bind: {
18879
- from: "content.filterEventPresets",
18880
- transforms: [{ id: "value.csv" }]
18881
- }
18882
- },
18883
- scheduleScope: { $bind: { from: "content.scheduleScope" } },
18884
- categoryIds: { $bind: { from: "content.filterCategoryIds" } },
18885
- staffMemberId: { $bind: { from: "content.filterStaffMemberId" } },
18886
- venueId: { $bind: { from: "content.filterVenueId" } }
19831
+ limit: { $bind: { from: "content.itemLimit", fallback: OFFERINGS_PREVIEW_DEFAULT_ITEM_LIMIT } },
19832
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } }
18887
19833
  },
18888
19834
  mode: "server"
18889
19835
  }
18890
- },
18891
- runtime: eventCalendarBlockRuntime
19836
+ }
18892
19837
  };
19838
+ function eventPresetLoader(preset) {
19839
+ return {
19840
+ endpoint: "listPublicEvents",
19841
+ params: {
19842
+ siteId: { $bind: { from: "$root.siteId" } },
19843
+ limit: { $bind: { from: "content.itemLimit", fallback: OFFERINGS_PREVIEW_DEFAULT_ITEM_LIMIT } },
19844
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
19845
+ detailLevel: "listing",
19846
+ readProfile: "listing-card",
19847
+ kind: "events",
19848
+ eventPresets: preset
19849
+ },
19850
+ mode: "server"
19851
+ };
19852
+ }
18893
19853
 
18894
19854
  // ../blocks/src/system/blocks/embed.ts
18895
- import { z as z45 } from "zod";
19855
+ import { z as z47 } from "zod";
18896
19856
  var embedFields = [
18897
19857
  // Section heading
18898
19858
  parseFieldDefinition({
@@ -19027,7 +19987,7 @@ var embedFields = [
19027
19987
  ui: { intent: "display" }
19028
19988
  })
19029
19989
  ];
19030
- var embedLayout = styledSection({
19990
+ var embedLayout2 = styledSection({
19031
19991
  children: sectionContainer([
19032
19992
  // Heading
19033
19993
  text(
@@ -19115,7 +20075,7 @@ var embedManifest = createBlockManifest({
19115
20075
  category: "content",
19116
20076
  titleSource: "heading",
19117
20077
  additionalFields: embedFields,
19118
- layout: embedLayout,
20078
+ layout: embedLayout2,
19119
20079
  description: "Embed content entries from any content type. Sites provide custom layouts via block overrides.",
19120
20080
  tags: ["embed", "content", "dynamic", "collection", "entries", "listing"],
19121
20081
  icon: "LayoutList",
@@ -19123,18 +20083,18 @@ var embedManifest = createBlockManifest({
19123
20083
  spacing: "lg"
19124
20084
  }
19125
20085
  });
19126
- var embedEntrySchema = z45.object({
19127
- id: z45.string(),
19128
- identifier: z45.string(),
19129
- title: z45.string(),
19130
- slug: z45.string().nullable().optional(),
19131
- content: z45.record(z45.string(), z45.unknown()).optional(),
19132
- publishedAt: z45.string().nullable().optional()
20086
+ var embedEntrySchema = z47.object({
20087
+ id: z47.string(),
20088
+ identifier: z47.string(),
20089
+ title: z47.string(),
20090
+ slug: z47.string().nullable().optional(),
20091
+ content: z47.record(z47.string(), z47.unknown()).optional(),
20092
+ publishedAt: z47.string().nullable().optional()
19133
20093
  });
19134
20094
  var embedBlockDefinition = {
19135
20095
  manifest: embedManifest,
19136
20096
  dataSchemas: {
19137
- entries: z45.array(embedEntrySchema).optional()
20097
+ entries: z47.array(embedEntrySchema).optional()
19138
20098
  },
19139
20099
  dataLoaders: {
19140
20100
  entries: {
@@ -20309,54 +21269,54 @@ var fileDownloadBlockDefinition = {
20309
21269
  };
20310
21270
 
20311
21271
  // ../blocks/src/system/blocks/shop.ts
20312
- import { z as z49 } from "zod";
21272
+ import { z as z51 } from "zod";
20313
21273
 
20314
21274
  // ../blocks/src/system/runtime/nodes/shop.interactive.ts
20315
- import { z as z48 } from "zod";
21275
+ import { z as z50 } from "zod";
20316
21276
 
20317
21277
  // ../blocks/src/system/blocks/products/shared.ts
20318
- import { z as z46 } from "zod";
20319
- var publicProductVariantSchema = z46.object({
20320
- id: z46.string(),
20321
- title: z46.string(),
20322
- sku: z46.string().nullable(),
20323
- priceCents: z46.number(),
20324
- stockQuantity: z46.number().nullable(),
20325
- soldOut: z46.boolean()
20326
- });
20327
- var publicProductSchema = z46.object({
20328
- id: z46.string(),
20329
- contentEntryId: z46.string().nullable(),
20330
- title: z46.string(),
20331
- slug: z46.string(),
20332
- path: z46.string().nullable(),
20333
- status: z46.enum(["draft", "active"]),
20334
- priceCents: z46.number(),
20335
- currency: z46.string(),
20336
- productType: z46.enum(["physical", "digital"]),
20337
- requiresShipping: z46.boolean(),
20338
- hasVariants: z46.boolean(),
20339
- trackInventory: z46.boolean(),
20340
- soldOut: z46.boolean(),
20341
- category: z46.object({
20342
- id: z46.string(),
20343
- name: z46.string(),
20344
- slug: z46.string()
21278
+ import { z as z48 } from "zod";
21279
+ var publicProductVariantSchema = z48.object({
21280
+ id: z48.string(),
21281
+ title: z48.string(),
21282
+ sku: z48.string().nullable(),
21283
+ priceCents: z48.number(),
21284
+ stockQuantity: z48.number().nullable(),
21285
+ soldOut: z48.boolean()
21286
+ });
21287
+ var publicProductSchema = z48.object({
21288
+ id: z48.string(),
21289
+ contentEntryId: z48.string().nullable(),
21290
+ title: z48.string(),
21291
+ slug: z48.string(),
21292
+ path: z48.string().nullable(),
21293
+ status: z48.enum(["draft", "active"]),
21294
+ priceCents: z48.number(),
21295
+ currency: z48.string(),
21296
+ productType: z48.enum(["physical", "digital"]),
21297
+ requiresShipping: z48.boolean(),
21298
+ hasVariants: z48.boolean(),
21299
+ trackInventory: z48.boolean(),
21300
+ soldOut: z48.boolean(),
21301
+ category: z48.object({
21302
+ id: z48.string(),
21303
+ name: z48.string(),
21304
+ slug: z48.string()
20345
21305
  }).nullable(),
20346
- summary: z46.string().nullable(),
20347
- badges: z46.array(z46.string()),
20348
- ctaLabel: z46.string().nullable(),
20349
- body: z46.unknown().nullable(),
20350
- gallery: z46.array(
20351
- z46.object({
20352
- url: z46.string(),
20353
- alt: z46.string().nullable()
21306
+ summary: z48.string().nullable(),
21307
+ badges: z48.array(z48.string()),
21308
+ ctaLabel: z48.string().nullable(),
21309
+ body: z48.unknown().nullable(),
21310
+ gallery: z48.array(
21311
+ z48.object({
21312
+ url: z48.string(),
21313
+ alt: z48.string().nullable()
20354
21314
  })
20355
21315
  ),
20356
- variants: z46.array(publicProductVariantSchema)
21316
+ variants: z48.array(publicProductVariantSchema)
20357
21317
  });
20358
- var publicProductsResponseSchema = z46.object({
20359
- products: z46.array(publicProductSchema)
21318
+ var publicProductsResponseSchema = z48.object({
21319
+ products: z48.array(publicProductSchema)
20360
21320
  });
20361
21321
 
20362
21322
  // ../blocks/src/system/runtime/api/creditProducts.ts
@@ -20420,27 +21380,27 @@ function deriveCreditProductLabels(products, options = {}) {
20420
21380
  }
20421
21381
 
20422
21382
  // ../blocks/src/system/runtime/nodes/shop-commerce.shared.ts
20423
- import { z as z47 } from "zod";
20424
- var storedProductCartItemSchema = z47.object({
20425
- kind: z47.literal("product"),
20426
- productId: z47.string().min(1),
20427
- productCategoryId: z47.string().min(1).optional().nullable(),
20428
- variantId: z47.string().min(1).optional().nullable(),
20429
- title: z47.string().min(1),
20430
- variantTitle: z47.string().optional().nullable(),
20431
- quantity: z47.number().finite(),
20432
- unitPriceCents: z47.number().finite(),
20433
- currency: z47.string().min(1),
20434
- imageUrl: z47.string().optional().nullable(),
20435
- soldOut: z47.boolean().optional()
20436
- });
20437
- var storedPassCartItemSchema = z47.object({
20438
- kind: z47.literal("pass"),
20439
- passId: z47.string().min(1),
20440
- title: z47.string().min(1),
20441
- quantity: z47.number().finite().optional(),
20442
- unitPriceCents: z47.number().finite(),
20443
- currency: z47.string().min(1)
21383
+ import { z as z49 } from "zod";
21384
+ var storedProductCartItemSchema = z49.object({
21385
+ kind: z49.literal("product"),
21386
+ productId: z49.string().min(1),
21387
+ productCategoryId: z49.string().min(1).optional().nullable(),
21388
+ variantId: z49.string().min(1).optional().nullable(),
21389
+ title: z49.string().min(1),
21390
+ variantTitle: z49.string().optional().nullable(),
21391
+ quantity: z49.number().finite(),
21392
+ unitPriceCents: z49.number().finite(),
21393
+ currency: z49.string().min(1),
21394
+ imageUrl: z49.string().optional().nullable(),
21395
+ soldOut: z49.boolean().optional()
21396
+ });
21397
+ var storedPassCartItemSchema = z49.object({
21398
+ kind: z49.literal("pass"),
21399
+ passId: z49.string().min(1),
21400
+ title: z49.string().min(1),
21401
+ quantity: z49.number().finite().optional(),
21402
+ unitPriceCents: z49.number().finite(),
21403
+ currency: z49.string().min(1)
20444
21404
  });
20445
21405
  function deriveCommerceCheckoutState(state) {
20446
21406
  if (state.items.length === 0) {
@@ -20679,219 +21639,219 @@ function formatValidity(days) {
20679
21639
  }
20680
21640
 
20681
21641
  // ../blocks/src/system/runtime/nodes/shop.interactive.ts
20682
- var shopModeSchema = z48.enum(["passes-memberships", "product-list", "product-detail", "cart", "checkout"]);
20683
- var contentEntrySchema3 = z48.object({
20684
- id: z48.string().nullable().optional(),
20685
- slug: z48.string().nullable().optional()
21642
+ var shopModeSchema = z50.enum(["passes-memberships", "product-list", "product-detail", "cart", "checkout"]);
21643
+ var contentEntrySchema3 = z50.object({
21644
+ id: z50.string().nullable().optional(),
21645
+ slug: z50.string().nullable().optional()
20686
21646
  }).nullable();
20687
- var shopSourceSchema = z48.object({
20688
- className: z48.string().nullable().optional(),
21647
+ var shopSourceSchema = z50.object({
21648
+ className: z50.string().nullable().optional(),
20689
21649
  mode: shopModeSchema.optional(),
20690
- heading: z48.string().nullable().optional(),
20691
- productSlug: z48.string().nullable().optional(),
20692
- showPasses: z48.boolean().optional(),
20693
- showMemberships: z48.boolean().optional(),
20694
- layout: z48.enum(["grid", "list"]).optional(),
20695
- columns: z48.string().optional(),
20696
- showDescriptions: z48.boolean().optional(),
20697
- showSummary: z48.boolean().optional(),
20698
- showBody: z48.boolean().optional(),
20699
- showBadges: z48.boolean().optional(),
20700
- showPrices: z48.boolean().optional(),
20701
- showValidityPeriod: z48.boolean().optional(),
20702
- showPricePerCredit: z48.boolean().nullable().optional(),
20703
- passesHeading: z48.string().optional(),
20704
- membershipsHeading: z48.string().optional(),
20705
- buyButtonText: z48.string().optional(),
20706
- addButtonText: z48.string().optional(),
20707
- passPurchaseMode: z48.enum(["add_to_cart", "buy_now"]).optional(),
20708
- subscribeButtonText: z48.string().optional(),
20709
- emptyStateText: z48.string().optional(),
20710
- checkoutButtonText: z48.string().optional(),
20711
- clearButtonText: z48.string().optional(),
20712
- submitButtonText: z48.string().optional(),
21650
+ heading: z50.string().nullable().optional(),
21651
+ productSlug: z50.string().nullable().optional(),
21652
+ showPasses: z50.boolean().optional(),
21653
+ showMemberships: z50.boolean().optional(),
21654
+ layout: z50.enum(["grid", "list"]).optional(),
21655
+ columns: z50.string().optional(),
21656
+ showDescriptions: z50.boolean().optional(),
21657
+ showSummary: z50.boolean().optional(),
21658
+ showBody: z50.boolean().optional(),
21659
+ showBadges: z50.boolean().optional(),
21660
+ showPrices: z50.boolean().optional(),
21661
+ showValidityPeriod: z50.boolean().optional(),
21662
+ showPricePerCredit: z50.boolean().nullable().optional(),
21663
+ passesHeading: z50.string().optional(),
21664
+ membershipsHeading: z50.string().optional(),
21665
+ buyButtonText: z50.string().optional(),
21666
+ addButtonText: z50.string().optional(),
21667
+ passPurchaseMode: z50.enum(["add_to_cart", "buy_now"]).optional(),
21668
+ subscribeButtonText: z50.string().optional(),
21669
+ emptyStateText: z50.string().optional(),
21670
+ checkoutButtonText: z50.string().optional(),
21671
+ clearButtonText: z50.string().optional(),
21672
+ submitButtonText: z50.string().optional(),
20713
21673
  contentEntry: contentEntrySchema3.optional(),
20714
- passes: z48.array(publicPassProductSchema).nullable().optional(),
20715
- memberships: z48.array(publicMembershipProductSchema).nullable().optional(),
20716
- products: z48.array(publicProductSchema).nullable().optional(),
20717
- siteId: z48.string().optional(),
20718
- apiBaseUrl: z48.string().optional(),
21674
+ passes: z50.array(publicPassProductSchema).nullable().optional(),
21675
+ memberships: z50.array(publicMembershipProductSchema).nullable().optional(),
21676
+ products: z50.array(publicProductSchema).nullable().optional(),
21677
+ siteId: z50.string().optional(),
21678
+ apiBaseUrl: z50.string().optional(),
20719
21679
  stage: previewStageSchema.optional()
20720
21680
  });
20721
- var productVariantOptionDisplaySchema = z48.object({
20722
- id: z48.string(),
20723
- label: z48.string(),
20724
- soldOut: z48.boolean()
20725
- });
20726
- var productCardDisplaySchema = z48.object({
20727
- productId: z48.string(),
20728
- title: z48.string(),
20729
- path: z48.string().nullable(),
20730
- summary: z48.string().nullable(),
20731
- priceLabel: z48.string().nullable(),
20732
- badges: z48.array(z48.string()),
20733
- image: z48.object({
20734
- url: z48.string(),
20735
- alt: z48.string().nullable()
21681
+ var productVariantOptionDisplaySchema = z50.object({
21682
+ id: z50.string(),
21683
+ label: z50.string(),
21684
+ soldOut: z50.boolean()
21685
+ });
21686
+ var productCardDisplaySchema = z50.object({
21687
+ productId: z50.string(),
21688
+ title: z50.string(),
21689
+ path: z50.string().nullable(),
21690
+ summary: z50.string().nullable(),
21691
+ priceLabel: z50.string().nullable(),
21692
+ badges: z50.array(z50.string()),
21693
+ image: z50.object({
21694
+ url: z50.string(),
21695
+ alt: z50.string().nullable()
20736
21696
  }).nullable(),
20737
- variantOptions: z48.array(productVariantOptionDisplaySchema),
20738
- selectedVariantId: z48.string().nullable(),
20739
- selectionLabel: z48.string(),
20740
- actionLabel: z48.string(),
20741
- soldOut: z48.boolean()
20742
- });
20743
- var productListDisplaySchema = z48.object({
20744
- kind: z48.literal("product-list"),
20745
- state: z48.enum(["empty", "ready"]),
20746
- heading: z48.string().nullable(),
20747
- className: z48.string().nullable(),
20748
- layout: z48.enum(["grid", "list"]),
20749
- columns: z48.string(),
20750
- emptyMessage: z48.string(),
20751
- cards: z48.array(productCardDisplaySchema)
20752
- });
20753
- var productDetailDisplaySchema = z48.discriminatedUnion("state", [
20754
- z48.object({
20755
- kind: z48.literal("product-detail"),
20756
- state: z48.literal("empty"),
20757
- heading: z48.string().nullable(),
20758
- className: z48.string().nullable(),
20759
- emptyMessage: z48.string()
21697
+ variantOptions: z50.array(productVariantOptionDisplaySchema),
21698
+ selectedVariantId: z50.string().nullable(),
21699
+ selectionLabel: z50.string(),
21700
+ actionLabel: z50.string(),
21701
+ soldOut: z50.boolean()
21702
+ });
21703
+ var productListDisplaySchema = z50.object({
21704
+ kind: z50.literal("product-list"),
21705
+ state: z50.enum(["empty", "ready"]),
21706
+ heading: z50.string().nullable(),
21707
+ className: z50.string().nullable(),
21708
+ layout: z50.enum(["grid", "list"]),
21709
+ columns: z50.string(),
21710
+ emptyMessage: z50.string(),
21711
+ cards: z50.array(productCardDisplaySchema)
21712
+ });
21713
+ var productDetailDisplaySchema = z50.discriminatedUnion("state", [
21714
+ z50.object({
21715
+ kind: z50.literal("product-detail"),
21716
+ state: z50.literal("empty"),
21717
+ heading: z50.string().nullable(),
21718
+ className: z50.string().nullable(),
21719
+ emptyMessage: z50.string()
20760
21720
  }),
20761
- z48.object({
20762
- kind: z48.literal("product-detail"),
20763
- state: z48.literal("ready"),
20764
- heading: z48.string().nullable(),
20765
- className: z48.string().nullable(),
20766
- title: z48.string(),
20767
- priceLabel: z48.string(),
20768
- summary: z48.string().nullable(),
20769
- badges: z48.array(z48.string()),
20770
- categoryLabel: z48.string().nullable(),
20771
- gallery: z48.array(z48.object({
20772
- url: z48.string(),
20773
- alt: z48.string().nullable()
21721
+ z50.object({
21722
+ kind: z50.literal("product-detail"),
21723
+ state: z50.literal("ready"),
21724
+ heading: z50.string().nullable(),
21725
+ className: z50.string().nullable(),
21726
+ title: z50.string(),
21727
+ priceLabel: z50.string(),
21728
+ summary: z50.string().nullable(),
21729
+ badges: z50.array(z50.string()),
21730
+ categoryLabel: z50.string().nullable(),
21731
+ gallery: z50.array(z50.object({
21732
+ url: z50.string(),
21733
+ alt: z50.string().nullable()
20774
21734
  })),
20775
- variantOptions: z48.array(productVariantOptionDisplaySchema),
20776
- selectedVariantId: z48.string().nullable(),
20777
- selectionLabel: z48.string(),
20778
- actionLabel: z48.string(),
20779
- soldOut: z48.boolean(),
20780
- body: z48.unknown().nullable()
21735
+ variantOptions: z50.array(productVariantOptionDisplaySchema),
21736
+ selectedVariantId: z50.string().nullable(),
21737
+ selectionLabel: z50.string(),
21738
+ actionLabel: z50.string(),
21739
+ soldOut: z50.boolean(),
21740
+ body: z50.unknown().nullable()
20781
21741
  })
20782
21742
  ]);
20783
- var passCardDisplaySchema = z48.object({
20784
- id: z48.string(),
20785
- title: z48.string(),
20786
- description: z48.string().nullable(),
20787
- priceLabel: z48.string(),
20788
- creditsLabel: z48.string(),
20789
- perCreditLabel: z48.string().nullable(),
20790
- validityLabel: z48.string().nullable(),
20791
- actionLabel: z48.string()
20792
- });
20793
- var membershipCardDisplaySchema = z48.object({
20794
- id: z48.string(),
20795
- title: z48.string(),
20796
- description: z48.string().nullable(),
20797
- priceLabel: z48.string(),
20798
- intervalLabel: z48.string(),
20799
- actionLabel: z48.string()
20800
- });
20801
- var passesMembershipsDisplaySchema = z48.object({
20802
- kind: z48.literal("passes-memberships"),
20803
- state: z48.enum(["empty", "ready"]),
20804
- className: z48.string().nullable(),
20805
- layout: z48.enum(["grid", "list"]),
20806
- columns: z48.string(),
20807
- emptyMessage: z48.string(),
20808
- passesHeading: z48.string(),
20809
- membershipsHeading: z48.string(),
20810
- passes: z48.array(passCardDisplaySchema),
20811
- memberships: z48.array(membershipCardDisplaySchema)
20812
- });
20813
- var cartLineDisplaySchema = z48.object({
20814
- key: z48.string(),
20815
- title: z48.string(),
20816
- priceLabel: z48.string(),
20817
- quantity: z48.number(),
20818
- quantityEditable: z48.boolean()
20819
- });
20820
- var cartDisplaySchema = z48.object({
20821
- kind: z48.literal("cart"),
20822
- state: z48.enum(["empty", "ready"]),
20823
- heading: z48.string().nullable(),
20824
- className: z48.string().nullable(),
20825
- emptyMessage: z48.string(),
20826
- supportText: z48.string().nullable(),
20827
- items: z48.array(cartLineDisplaySchema),
20828
- subtotalLabel: z48.string().nullable(),
20829
- checkoutButtonText: z48.string(),
20830
- clearButtonText: z48.string()
20831
- });
20832
- var checkoutDisplaySchema = z48.object({
20833
- kind: z48.literal("checkout"),
20834
- state: z48.enum(["empty", "blocked", "ready"]),
20835
- heading: z48.string().nullable(),
20836
- className: z48.string().nullable(),
20837
- message: z48.string().nullable(),
20838
- submitButtonText: z48.string()
20839
- });
20840
- var passesMembershipsHydrationSchema = z48.object({
20841
- passes: z48.array(publicPassProductSchema),
20842
- memberships: z48.array(publicMembershipProductSchema),
20843
- passPurchaseMode: z48.enum(["add_to_cart", "buy_now"])
20844
- });
20845
- var productListHydrationSchema = z48.object({
20846
- products: z48.array(publicProductSchema),
20847
- showSummary: z48.boolean(),
20848
- showBadges: z48.boolean(),
20849
- showPrices: z48.boolean(),
20850
- addButtonText: z48.string()
20851
- });
20852
- var productDetailHydrationSchema = z48.object({
20853
- products: z48.array(publicProductSchema),
20854
- productId: z48.string().nullable(),
20855
- showSummary: z48.boolean(),
20856
- showBadges: z48.boolean(),
20857
- showBody: z48.boolean(),
20858
- addButtonText: z48.string()
20859
- });
20860
- var cartHydrationSchema = z48.object({
20861
- emptyStateText: z48.string(),
20862
- checkoutButtonText: z48.string(),
20863
- clearButtonText: z48.string()
20864
- });
20865
- var checkoutHydrationSchema = z48.object({
20866
- emptyStateText: z48.string(),
20867
- submitButtonText: z48.string()
20868
- });
20869
- var passesMembershipsRenderSchema = z48.object({
21743
+ var passCardDisplaySchema = z50.object({
21744
+ id: z50.string(),
21745
+ title: z50.string(),
21746
+ description: z50.string().nullable(),
21747
+ priceLabel: z50.string(),
21748
+ creditsLabel: z50.string(),
21749
+ perCreditLabel: z50.string().nullable(),
21750
+ validityLabel: z50.string().nullable(),
21751
+ actionLabel: z50.string()
21752
+ });
21753
+ var membershipCardDisplaySchema = z50.object({
21754
+ id: z50.string(),
21755
+ title: z50.string(),
21756
+ description: z50.string().nullable(),
21757
+ priceLabel: z50.string(),
21758
+ intervalLabel: z50.string(),
21759
+ actionLabel: z50.string()
21760
+ });
21761
+ var passesMembershipsDisplaySchema = z50.object({
21762
+ kind: z50.literal("passes-memberships"),
21763
+ state: z50.enum(["empty", "ready"]),
21764
+ className: z50.string().nullable(),
21765
+ layout: z50.enum(["grid", "list"]),
21766
+ columns: z50.string(),
21767
+ emptyMessage: z50.string(),
21768
+ passesHeading: z50.string(),
21769
+ membershipsHeading: z50.string(),
21770
+ passes: z50.array(passCardDisplaySchema),
21771
+ memberships: z50.array(membershipCardDisplaySchema)
21772
+ });
21773
+ var cartLineDisplaySchema = z50.object({
21774
+ key: z50.string(),
21775
+ title: z50.string(),
21776
+ priceLabel: z50.string(),
21777
+ quantity: z50.number(),
21778
+ quantityEditable: z50.boolean()
21779
+ });
21780
+ var cartDisplaySchema = z50.object({
21781
+ kind: z50.literal("cart"),
21782
+ state: z50.enum(["empty", "ready"]),
21783
+ heading: z50.string().nullable(),
21784
+ className: z50.string().nullable(),
21785
+ emptyMessage: z50.string(),
21786
+ supportText: z50.string().nullable(),
21787
+ items: z50.array(cartLineDisplaySchema),
21788
+ subtotalLabel: z50.string().nullable(),
21789
+ checkoutButtonText: z50.string(),
21790
+ clearButtonText: z50.string()
21791
+ });
21792
+ var checkoutDisplaySchema = z50.object({
21793
+ kind: z50.literal("checkout"),
21794
+ state: z50.enum(["empty", "blocked", "ready"]),
21795
+ heading: z50.string().nullable(),
21796
+ className: z50.string().nullable(),
21797
+ message: z50.string().nullable(),
21798
+ submitButtonText: z50.string()
21799
+ });
21800
+ var passesMembershipsHydrationSchema = z50.object({
21801
+ passes: z50.array(publicPassProductSchema),
21802
+ memberships: z50.array(publicMembershipProductSchema),
21803
+ passPurchaseMode: z50.enum(["add_to_cart", "buy_now"])
21804
+ });
21805
+ var productListHydrationSchema = z50.object({
21806
+ products: z50.array(publicProductSchema),
21807
+ showSummary: z50.boolean(),
21808
+ showBadges: z50.boolean(),
21809
+ showPrices: z50.boolean(),
21810
+ addButtonText: z50.string()
21811
+ });
21812
+ var productDetailHydrationSchema = z50.object({
21813
+ products: z50.array(publicProductSchema),
21814
+ productId: z50.string().nullable(),
21815
+ showSummary: z50.boolean(),
21816
+ showBadges: z50.boolean(),
21817
+ showBody: z50.boolean(),
21818
+ addButtonText: z50.string()
21819
+ });
21820
+ var cartHydrationSchema = z50.object({
21821
+ emptyStateText: z50.string(),
21822
+ checkoutButtonText: z50.string(),
21823
+ clearButtonText: z50.string()
21824
+ });
21825
+ var checkoutHydrationSchema = z50.object({
21826
+ emptyStateText: z50.string(),
21827
+ submitButtonText: z50.string()
21828
+ });
21829
+ var passesMembershipsRenderSchema = z50.object({
20870
21830
  display: passesMembershipsDisplaySchema,
20871
21831
  hydration: passesMembershipsHydrationSchema
20872
21832
  });
20873
- var productListRenderSchema = z48.object({
21833
+ var productListRenderSchema = z50.object({
20874
21834
  display: productListDisplaySchema,
20875
21835
  hydration: productListHydrationSchema
20876
21836
  });
20877
- var productDetailRenderSchema = z48.object({
21837
+ var productDetailRenderSchema = z50.object({
20878
21838
  display: productDetailDisplaySchema,
20879
21839
  hydration: productDetailHydrationSchema
20880
21840
  });
20881
- var cartRenderSchema = z48.object({
21841
+ var cartRenderSchema = z50.object({
20882
21842
  display: cartDisplaySchema,
20883
21843
  hydration: cartHydrationSchema
20884
21844
  });
20885
- var checkoutRenderSchema = z48.object({
21845
+ var checkoutRenderSchema = z50.object({
20886
21846
  display: checkoutDisplaySchema,
20887
21847
  hydration: checkoutHydrationSchema
20888
21848
  });
20889
21849
  function resolveShowPricePerCredit(source) {
20890
21850
  return source.showPricePerCredit ?? true;
20891
21851
  }
20892
- var shopIslandMetaCodec = createZodCodec(z48.object({
20893
- siteId: z48.string().optional(),
20894
- apiBaseUrl: z48.string().optional(),
21852
+ var shopIslandMetaCodec = createZodCodec(z50.object({
21853
+ siteId: z50.string().optional(),
21854
+ apiBaseUrl: z50.string().optional(),
20895
21855
  stage: previewStageSchema.optional()
20896
21856
  }));
20897
21857
  var shopIslandMetaKeys = defineInteractiveIslandMetaKeys("siteId", "apiBaseUrl", "stage");
@@ -21273,9 +22233,9 @@ var shopBlockDefinition = {
21273
22233
  runtime: shopBlockRuntime,
21274
22234
  dataSchemas: {
21275
22235
  // listPublicPasses returns { passes: [...] }
21276
- passes: z49.object({ passes: z49.array(publicPassProductSchema) }).optional(),
22236
+ passes: z51.object({ passes: z51.array(publicPassProductSchema) }).optional(),
21277
22237
  // listPublicMemberships returns { memberships: [...] }
21278
- memberships: z49.object({ memberships: z49.array(publicMembershipProductSchema) }).optional()
22238
+ memberships: z51.object({ memberships: z51.array(publicMembershipProductSchema) }).optional()
21279
22239
  },
21280
22240
  dataLoaders: {
21281
22241
  // Load passes for display
@@ -21298,7 +22258,7 @@ var shopBlockDefinition = {
21298
22258
  };
21299
22259
 
21300
22260
  // ../blocks/src/system/blocks/product-list.ts
21301
- import { z as z50 } from "zod";
22261
+ import { z as z52 } from "zod";
21302
22262
  var productListManifest = createBlockManifest({
21303
22263
  id: "block.product-list",
21304
22264
  version: "1.0.0",
@@ -21440,7 +22400,7 @@ var productListBlockDefinition = {
21440
22400
  }
21441
22401
  }
21442
22402
  };
21443
- var productListDataSchema = z50.object({
22403
+ var productListDataSchema = z52.object({
21444
22404
  products: publicProductsResponseSchema.optional()
21445
22405
  });
21446
22406
 
@@ -21710,72 +22670,72 @@ var checkoutBlockDefinition = {
21710
22670
  };
21711
22671
 
21712
22672
  // ../blocks/src/system/runtime/nodes/gifting.interactive.ts
21713
- import { z as z51 } from "zod";
21714
- var publicGiftCardOfferSchema = z51.object({
21715
- id: z51.string(),
21716
- kind: z51.literal("gift_card"),
21717
- title: z51.string(),
21718
- description: z51.string().nullable(),
21719
- sortOrder: z51.number().int(),
21720
- giftCard: z51.object({
21721
- fixedDenominations: z51.array(z51.number().int().positive()),
21722
- customAmountEnabled: z51.boolean(),
21723
- customAmountMinCents: z51.number().int().positive(),
21724
- customAmountMaxCents: z51.number().int().positive()
22673
+ import { z as z53 } from "zod";
22674
+ var publicGiftCardOfferSchema = z53.object({
22675
+ id: z53.string(),
22676
+ kind: z53.literal("gift_card"),
22677
+ title: z53.string(),
22678
+ description: z53.string().nullable(),
22679
+ sortOrder: z53.number().int(),
22680
+ giftCard: z53.object({
22681
+ fixedDenominations: z53.array(z53.number().int().positive()),
22682
+ customAmountEnabled: z53.boolean(),
22683
+ customAmountMinCents: z53.number().int().positive(),
22684
+ customAmountMaxCents: z53.number().int().positive()
21725
22685
  }),
21726
- voucher: z51.null()
21727
- });
21728
- var publicVoucherOfferSchema = z51.object({
21729
- id: z51.string(),
21730
- kind: z51.literal("voucher"),
21731
- title: z51.string(),
21732
- description: z51.string().nullable(),
21733
- sortOrder: z51.number().int(),
21734
- giftCard: z51.null(),
21735
- voucher: z51.object({
21736
- purchaseAmountCents: z51.number().int().positive()
22686
+ voucher: z53.null()
22687
+ });
22688
+ var publicVoucherOfferSchema = z53.object({
22689
+ id: z53.string(),
22690
+ kind: z53.literal("voucher"),
22691
+ title: z53.string(),
22692
+ description: z53.string().nullable(),
22693
+ sortOrder: z53.number().int(),
22694
+ giftCard: z53.null(),
22695
+ voucher: z53.object({
22696
+ purchaseAmountCents: z53.number().int().positive()
21737
22697
  })
21738
22698
  });
21739
- var publicGiftingOffersResponseSchema = z51.object({
21740
- currency: z51.string(),
21741
- giftCards: z51.array(publicGiftCardOfferSchema),
21742
- vouchers: z51.array(publicVoucherOfferSchema)
22699
+ var publicGiftingOffersResponseSchema = z53.object({
22700
+ currency: z53.string(),
22701
+ giftCards: z53.array(publicGiftCardOfferSchema),
22702
+ vouchers: z53.array(publicVoucherOfferSchema)
21743
22703
  });
21744
- var giftingSourceSchema = z51.object({
21745
- siteId: z51.string().optional(),
21746
- apiBaseUrl: z51.string().optional(),
22704
+ var giftingSourceSchema = z53.object({
22705
+ siteId: z53.string().optional(),
22706
+ apiBaseUrl: z53.string().optional(),
21747
22707
  offers: publicGiftingOffersResponseSchema.nullable().optional(),
21748
- className: z51.string().nullable().optional(),
21749
- heading: z51.string().nullable().optional(),
21750
- intro: z51.string().nullable().optional(),
21751
- giftCardsHeading: z51.string().nullable().optional(),
21752
- vouchersHeading: z51.string().nullable().optional(),
21753
- emptyStateText: z51.string().nullable().optional(),
21754
- checkoutButtonText: z51.string().nullable().optional(),
21755
- successMessage: z51.string().nullable().optional()
21756
- });
21757
- var giftingDisplaySchema = z51.object({
21758
- kind: z51.literal("gifting"),
21759
- state: z51.literal("ready"),
21760
- className: z51.string().nullable(),
21761
- heading: z51.string(),
21762
- intro: z51.string().nullable(),
21763
- giftCardsHeading: z51.string(),
21764
- vouchersHeading: z51.string(),
21765
- emptyStateText: z51.string()
21766
- });
21767
- var giftingHydrationSchema = z51.object({
22708
+ className: z53.string().nullable().optional(),
22709
+ heading: z53.string().nullable().optional(),
22710
+ intro: z53.string().nullable().optional(),
22711
+ giftCardsHeading: z53.string().nullable().optional(),
22712
+ vouchersHeading: z53.string().nullable().optional(),
22713
+ emptyStateText: z53.string().nullable().optional(),
22714
+ checkoutButtonText: z53.string().nullable().optional(),
22715
+ successMessage: z53.string().nullable().optional()
22716
+ });
22717
+ var giftingDisplaySchema = z53.object({
22718
+ kind: z53.literal("gifting"),
22719
+ state: z53.literal("ready"),
22720
+ className: z53.string().nullable(),
22721
+ heading: z53.string(),
22722
+ intro: z53.string().nullable(),
22723
+ giftCardsHeading: z53.string(),
22724
+ vouchersHeading: z53.string(),
22725
+ emptyStateText: z53.string()
22726
+ });
22727
+ var giftingHydrationSchema = z53.object({
21768
22728
  offers: publicGiftingOffersResponseSchema.nullable(),
21769
- checkoutButtonText: z51.string(),
21770
- successMessage: z51.string()
22729
+ checkoutButtonText: z53.string(),
22730
+ successMessage: z53.string()
21771
22731
  });
21772
- var giftingRenderSchema = z51.object({
22732
+ var giftingRenderSchema = z53.object({
21773
22733
  display: giftingDisplaySchema,
21774
22734
  hydration: giftingHydrationSchema
21775
22735
  });
21776
- var giftingIslandMetaCodec = createZodCodec(z51.object({
21777
- siteId: z51.string().optional(),
21778
- apiBaseUrl: z51.string().optional()
22736
+ var giftingIslandMetaCodec = createZodCodec(z53.object({
22737
+ siteId: z53.string().optional(),
22738
+ apiBaseUrl: z53.string().optional()
21779
22739
  }));
21780
22740
  var giftingIslandMetaKeys = defineInteractiveIslandMetaKeys(
21781
22741
  "siteId",
@@ -21946,7 +22906,7 @@ var giftingBlockDefinition = {
21946
22906
  };
21947
22907
 
21948
22908
  // ../blocks/src/system/runtime/nodes/newsletter-form.interactive.ts
21949
- import { z as z52 } from "zod";
22909
+ import { z as z54 } from "zod";
21950
22910
 
21951
22911
  // ../blocks/src/system/runtime/nodes/newsletter-form.types.ts
21952
22912
  function getPresetFields(preset, options) {
@@ -22000,49 +22960,49 @@ function withOptionalPhone(fields3, includePhone) {
22000
22960
  }
22001
22961
 
22002
22962
  // ../blocks/src/system/runtime/nodes/newsletter-form.interactive.ts
22003
- var newsletterPresetSchema = z52.enum(["emailOnly", "emailName", "emailFirstLast", "emailNameCompany"]);
22004
- var newsletterFieldSchema = z52.object({
22005
- id: z52.string(),
22006
- type: z52.enum(["email", "text"]),
22007
- label: z52.string(),
22008
- required: z52.boolean(),
22009
- placeholder: z52.string().optional()
22010
- });
22011
- var newsletterSourceSchema = z52.object({
22012
- siteId: z52.string().optional(),
22013
- apiBaseUrl: z52.string().optional(),
22014
- listId: z52.string().nullable().optional(),
22963
+ var newsletterPresetSchema = z54.enum(["emailOnly", "emailName", "emailFirstLast", "emailNameCompany"]);
22964
+ var newsletterFieldSchema = z54.object({
22965
+ id: z54.string(),
22966
+ type: z54.enum(["email", "text"]),
22967
+ label: z54.string(),
22968
+ required: z54.boolean(),
22969
+ placeholder: z54.string().optional()
22970
+ });
22971
+ var newsletterSourceSchema = z54.object({
22972
+ siteId: z54.string().optional(),
22973
+ apiBaseUrl: z54.string().optional(),
22974
+ listId: z54.string().nullable().optional(),
22015
22975
  preset: newsletterPresetSchema.optional(),
22016
- includePhone: z52.boolean().optional(),
22017
- buttonLabel: z52.string().nullable().optional(),
22018
- successMessage: z52.string().nullable().optional(),
22019
- privacyNote: z52.string().nullable().optional(),
22020
- tags: z52.string().nullable().optional(),
22021
- spamProtectionEnabled: z52.boolean().optional(),
22022
- className: z52.string().nullable().optional()
22023
- });
22024
- var newsletterDisplaySchema = z52.object({
22025
- kind: z52.literal("newsletter-form"),
22026
- className: z52.string().nullable(),
22027
- buttonLabel: z52.string(),
22028
- successMessage: z52.string().nullable(),
22029
- privacyNote: z52.string().nullable(),
22030
- fields: z52.array(newsletterFieldSchema)
22031
- });
22032
- var newsletterHydrationSchema = z52.object({
22033
- listId: z52.string().nullable().optional(),
22976
+ includePhone: z54.boolean().optional(),
22977
+ buttonLabel: z54.string().nullable().optional(),
22978
+ successMessage: z54.string().nullable().optional(),
22979
+ privacyNote: z54.string().nullable().optional(),
22980
+ tags: z54.string().nullable().optional(),
22981
+ spamProtectionEnabled: z54.boolean().optional(),
22982
+ className: z54.string().nullable().optional()
22983
+ });
22984
+ var newsletterDisplaySchema = z54.object({
22985
+ kind: z54.literal("newsletter-form"),
22986
+ className: z54.string().nullable(),
22987
+ buttonLabel: z54.string(),
22988
+ successMessage: z54.string().nullable(),
22989
+ privacyNote: z54.string().nullable(),
22990
+ fields: z54.array(newsletterFieldSchema)
22991
+ });
22992
+ var newsletterHydrationSchema = z54.object({
22993
+ listId: z54.string().nullable().optional(),
22034
22994
  preset: newsletterPresetSchema,
22035
- includePhone: z52.boolean(),
22036
- tags: z52.string().nullable().optional(),
22037
- spamProtectionEnabled: z52.boolean().optional()
22995
+ includePhone: z54.boolean(),
22996
+ tags: z54.string().nullable().optional(),
22997
+ spamProtectionEnabled: z54.boolean().optional()
22038
22998
  });
22039
- var newsletterRenderSchema = z52.object({
22999
+ var newsletterRenderSchema = z54.object({
22040
23000
  display: newsletterDisplaySchema,
22041
23001
  hydration: newsletterHydrationSchema
22042
23002
  });
22043
- var newsletterIslandMetaCodec = createZodCodec(z52.object({
22044
- siteId: z52.string().optional(),
22045
- apiBaseUrl: z52.string().optional()
23003
+ var newsletterIslandMetaCodec = createZodCodec(z54.object({
23004
+ siteId: z54.string().optional(),
23005
+ apiBaseUrl: z54.string().optional()
22046
23006
  }));
22047
23007
  var newsletterIslandMetaKeys = defineInteractiveIslandMetaKeys("siteId", "apiBaseUrl");
22048
23008
  function buildNewsletterDisplay(source) {
@@ -22163,23 +23123,23 @@ var newsletterSignupBlockDefinition = {
22163
23123
  };
22164
23124
 
22165
23125
  // ../blocks/src/system/blocks/team-members.ts
22166
- import { z as z53 } from "zod";
23126
+ import { z as z55 } from "zod";
22167
23127
  var ITEM_NAME2 = "member";
22168
23128
  var teamMemberPhotoSchema = mediaSchema2.refine((media2) => media2.type === "image", {
22169
23129
  message: "Team member photos must be image media"
22170
23130
  }).nullable();
22171
- var teamMemberDataSchema = z53.object({
22172
- _type: z53.literal("teamMember"),
22173
- id: z53.string(),
22174
- name: z53.string(),
22175
- role: z53.string().nullable(),
22176
- roleLabel: z53.string().nullable(),
22177
- bio: z53.string().nullable(),
22178
- summary: z53.string().nullable(),
23131
+ var teamMemberDataSchema = z55.object({
23132
+ _type: z55.literal("teamMember"),
23133
+ id: z55.string(),
23134
+ name: z55.string(),
23135
+ role: z55.string().nullable(),
23136
+ roleLabel: z55.string().nullable(),
23137
+ bio: z55.string().nullable(),
23138
+ summary: z55.string().nullable(),
22179
23139
  photo: teamMemberPhotoSchema,
22180
- profilePath: z53.string().nullable()
23140
+ profilePath: z55.string().nullable()
22181
23141
  });
22182
- var teamMembersDataSchema = z53.array(teamMemberDataSchema);
23142
+ var teamMembersDataSchema = z55.array(teamMemberDataSchema);
22183
23143
  var dynamicSourceWhen = { equals: "site_staff" };
22184
23144
  var manualSourceWhen = { equals: "site_staff", not: true };
22185
23145
  var headingNode = text(
@@ -22949,6 +23909,13 @@ function eventListCapable() {
22949
23909
  eventListTreatments
22950
23910
  });
22951
23911
  }
23912
+ function offeringsPreviewCapable() {
23913
+ return declareBlockDesignCapability({
23914
+ sectionSurfaces: "supported",
23915
+ contentFrames: ["plain"],
23916
+ itemSurfaces: "supported"
23917
+ });
23918
+ }
22952
23919
  function defaultBoundaryBias(visualWeight) {
22953
23920
  return visualWeight === "featured" || visualWeight === "immersive" ? "clear" : "soft";
22954
23921
  }
@@ -23062,6 +24029,13 @@ var systemBlockDefinitionsRaw = [
23062
24029
  weight: "featured",
23063
24030
  bias: "clear",
23064
24031
  surfaces: heroSectionSurfaces
24032
+ }),
24033
+ layoutProfile({
24034
+ variantKey: "splitEditorial",
24035
+ family: "split",
24036
+ weight: "featured",
24037
+ bias: "clear",
24038
+ surfaces: heroSectionSurfaces
23065
24039
  })
23066
24040
  ]
23067
24041
  })),
@@ -23156,7 +24130,10 @@ var systemBlockDefinitionsRaw = [
23156
24130
  })),
23157
24131
  withDesignCapability("block.form", formBlockDefinition, panelCapable(), defineBlockDesignMetadata({
23158
24132
  flow: conversionFlow,
23159
- layoutProfiles: [layoutProfile({ variantKey: "default", family: "form", weight: "standard" })]
24133
+ layoutProfiles: [
24134
+ layoutProfile({ variantKey: "default", family: "form", weight: "standard" }),
24135
+ layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
24136
+ ]
23160
24137
  })),
23161
24138
  withDesignCapability("block.faq", faqBlockDefinition, withEyebrowCapability(declareBlockDesignCapability({
23162
24139
  sectionSurfaces: "supported",
@@ -23185,7 +24162,10 @@ var systemBlockDefinitionsRaw = [
23185
24162
  contentFrames: ["plain", "panel"],
23186
24163
  itemSurfaces: "supported",
23187
24164
  testimonialCardTreatments: ["default", "statement", "non-carded", "accent-quote", "editorial-serif-quote"],
23188
- headingDecorations: ["short-center-rule"]
24165
+ headingDecorationCapability: {
24166
+ kind: "supported",
24167
+ families: ["short-center-rule"]
24168
+ }
23189
24169
  }), defineBlockDesignMetadata({
23190
24170
  flow: proofFlow,
23191
24171
  layoutProfiles: [
@@ -23288,6 +24268,10 @@ var systemBlockDefinitionsRaw = [
23288
24268
  layoutProfile({ variantKey: "timetable", family: "stack", weight: "standard" })
23289
24269
  ]
23290
24270
  })),
24271
+ withDesignCapability("block.offerings-preview", offeringsPreviewBlockDefinition, offeringsPreviewCapable(), defineBlockDesignMetadata({
24272
+ flow: offeringsFlow,
24273
+ layoutProfiles: [layoutProfile({ variantKey: "cards", family: "grid", weight: "standard" })]
24274
+ })),
23291
24275
  // Friendly wrapper blocks
23292
24276
  withDesignCapability("block.team-members", teamMembersBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
23293
24277
  flow: proofFlow,
@@ -23652,11 +24636,11 @@ function resolveModelForPass(passId, tierOverrides, passOverrides, globalModel)
23652
24636
  }
23653
24637
 
23654
24638
  // src/page-converter/passes/pass1-segmentation-matching.ts
23655
- import { z as z58 } from "zod";
24639
+ import { z as z60 } from "zod";
23656
24640
 
23657
24641
  // src/manifest/passes/pass1-fields.ts
23658
- import { z as z54 } from "zod";
23659
- var simpleFieldTypeEnum = z54.enum([
24642
+ import { z as z56 } from "zod";
24643
+ var simpleFieldTypeEnum = z56.enum([
23660
24644
  "text",
23661
24645
  "richText",
23662
24646
  "media",
@@ -23665,7 +24649,7 @@ var simpleFieldTypeEnum = z54.enum([
23665
24649
  "select",
23666
24650
  "number"
23667
24651
  ]);
23668
- var fieldTypeEnum = z54.enum([
24652
+ var fieldTypeEnum = z56.enum([
23669
24653
  "text",
23670
24654
  "richText",
23671
24655
  "media",
@@ -23676,109 +24660,109 @@ var fieldTypeEnum = z54.enum([
23676
24660
  "repeater",
23677
24661
  "group"
23678
24662
  ]);
23679
- var linkDefaultValue = z54.object({
23680
- label: z54.string().describe("The visible link text")
24663
+ var linkDefaultValue = z56.object({
24664
+ label: z56.string().describe("The visible link text")
23681
24665
  });
23682
- var mediaDefaultValue = z54.object({
23683
- src: z54.string().describe("Image/video source URL"),
23684
- alt: z54.string().describe("Alt text for accessibility (empty string if none)")
24666
+ var mediaDefaultValue = z56.object({
24667
+ src: z56.string().describe("Image/video source URL"),
24668
+ alt: z56.string().describe("Alt text for accessibility (empty string if none)")
23685
24669
  });
23686
- var nestedFieldSchema = z54.object({
23687
- id: z54.string().min(1).describe("camelCase field ID"),
24670
+ var nestedFieldSchema = z56.object({
24671
+ id: z56.string().min(1).describe("camelCase field ID"),
23688
24672
  type: simpleFieldTypeEnum,
23689
- label: z54.string().min(1),
23690
- required: z54.boolean().nullable()
24673
+ label: z56.string().min(1),
24674
+ required: z56.boolean().nullable()
23691
24675
  });
23692
- var simpleFieldSchema = z54.object({
23693
- id: z54.string().min(1).describe("camelCase field ID (e.g., headline, ctaButton)"),
24676
+ var simpleFieldSchema = z56.object({
24677
+ id: z56.string().min(1).describe("camelCase field ID (e.g., headline, ctaButton)"),
23694
24678
  type: simpleFieldTypeEnum,
23695
- label: z54.string().min(1),
23696
- required: z54.boolean(),
23697
- multiline: z54.boolean().nullable().describe("For text fields: true if multiple lines"),
23698
- defaultValue: z54.union([
23699
- z54.string(),
23700
- z54.number(),
23701
- z54.boolean(),
24679
+ label: z56.string().min(1),
24680
+ required: z56.boolean(),
24681
+ multiline: z56.boolean().nullable().describe("For text fields: true if multiple lines"),
24682
+ defaultValue: z56.union([
24683
+ z56.string(),
24684
+ z56.number(),
24685
+ z56.boolean(),
23702
24686
  linkDefaultValue,
23703
24687
  mediaDefaultValue,
23704
- z54.null()
24688
+ z56.null()
23705
24689
  ]).describe("Default content extracted from HTML"),
23706
- htmlContext: z54.string().describe("Brief description of where this appears in the HTML")
24690
+ htmlContext: z56.string().describe("Brief description of where this appears in the HTML")
23707
24691
  });
23708
- var repeaterFieldSchema2 = z54.object({
23709
- id: z54.string().min(1).describe("camelCase field ID (e.g., socialLinks, features)"),
23710
- type: z54.literal("repeater"),
23711
- label: z54.string().min(1),
23712
- required: z54.boolean(),
23713
- itemLabel: z54.string().min(1).describe('Singular label for each item (e.g., "Link", "Feature")'),
23714
- itemFields: z54.array(nestedFieldSchema).min(1).describe("Fields for each item in the repeater"),
23715
- htmlContext: z54.string().describe("Brief description of where this appears in the HTML")
23716
- });
23717
- var groupFieldSchema2 = z54.object({
23718
- id: z54.string().min(1).describe("camelCase field ID (e.g., contactInfo, seoSettings)"),
23719
- type: z54.literal("group"),
23720
- label: z54.string().min(1),
23721
- required: z54.boolean(),
23722
- groupFields: z54.array(nestedFieldSchema).min(1).describe("Fields within the group"),
23723
- htmlContext: z54.string().describe("Brief description of where this appears in the HTML")
24692
+ var repeaterFieldSchema2 = z56.object({
24693
+ id: z56.string().min(1).describe("camelCase field ID (e.g., socialLinks, features)"),
24694
+ type: z56.literal("repeater"),
24695
+ label: z56.string().min(1),
24696
+ required: z56.boolean(),
24697
+ itemLabel: z56.string().min(1).describe('Singular label for each item (e.g., "Link", "Feature")'),
24698
+ itemFields: z56.array(nestedFieldSchema).min(1).describe("Fields for each item in the repeater"),
24699
+ htmlContext: z56.string().describe("Brief description of where this appears in the HTML")
23724
24700
  });
23725
- var extractedFieldSchema = z54.union([
24701
+ var groupFieldSchema2 = z56.object({
24702
+ id: z56.string().min(1).describe("camelCase field ID (e.g., contactInfo, seoSettings)"),
24703
+ type: z56.literal("group"),
24704
+ label: z56.string().min(1),
24705
+ required: z56.boolean(),
24706
+ groupFields: z56.array(nestedFieldSchema).min(1).describe("Fields within the group"),
24707
+ htmlContext: z56.string().describe("Brief description of where this appears in the HTML")
24708
+ });
24709
+ var extractedFieldSchema = z56.union([
23726
24710
  simpleFieldSchema,
23727
24711
  repeaterFieldSchema2,
23728
24712
  groupFieldSchema2
23729
24713
  ]);
23730
- var extractedEntrySchema = z54.object({
23731
- identifier: z54.string().regex(/^[a-z0-9-]+$/).describe("Unique slug-safe identifier (e.g., wine-tasting-evening)"),
23732
- title: z54.string().min(1).describe("Entry title"),
24714
+ var extractedEntrySchema = z56.object({
24715
+ identifier: z56.string().regex(/^[a-z0-9-]+$/).describe("Unique slug-safe identifier (e.g., wine-tasting-evening)"),
24716
+ title: z56.string().min(1).describe("Entry title"),
23733
24717
  // Use passthrough() instead of record() - generates additionalProperties:true without propertyNames
23734
24718
  // which OpenAI's structured output accepts
23735
- data: z54.object({}).passthrough().describe("Entry data matching the content type schema")
23736
- });
23737
- var newContentTypeSchema = z54.object({
23738
- key: z54.string().regex(/^[a-z][a-z0-9-]*$/).describe("Content type key (e.g., testimonial, team-member)"),
23739
- name: z54.string().min(1).describe("Human-readable name"),
23740
- description: z54.string().nullable().describe("Description of this content type"),
23741
- fields: z54.array(z54.object({
23742
- id: z54.string().min(1),
23743
- type: z54.string().min(1),
23744
- label: z54.string().min(1),
23745
- required: z54.boolean().nullable(),
23746
- description: z54.string().nullable()
24719
+ data: z56.object({}).passthrough().describe("Entry data matching the content type schema")
24720
+ });
24721
+ var newContentTypeSchema = z56.object({
24722
+ key: z56.string().regex(/^[a-z][a-z0-9-]*$/).describe("Content type key (e.g., testimonial, team-member)"),
24723
+ name: z56.string().min(1).describe("Human-readable name"),
24724
+ description: z56.string().nullable().describe("Description of this content type"),
24725
+ fields: z56.array(z56.object({
24726
+ id: z56.string().min(1),
24727
+ type: z56.string().min(1),
24728
+ label: z56.string().min(1),
24729
+ required: z56.boolean().nullable(),
24730
+ description: z56.string().nullable()
23747
24731
  })).min(1),
23748
- isRouted: z54.boolean().describe("Whether entries have their own pages")
24732
+ isRouted: z56.boolean().describe("Whether entries have their own pages")
23749
24733
  });
23750
- var contentTypeApproachSchema = z54.discriminatedUnion("approach", [
24734
+ var contentTypeApproachSchema = z56.discriminatedUnion("approach", [
23751
24735
  // Use an existing content type
23752
- z54.object({
23753
- approach: z54.literal("existingContentType"),
23754
- contentTypeKey: z54.string().min(1).describe("Key of the existing content type to use"),
23755
- entries: z54.array(extractedEntrySchema).min(1).describe("Extracted entries"),
23756
- rationale: z54.string().describe("Why this content type fits")
24736
+ z56.object({
24737
+ approach: z56.literal("existingContentType"),
24738
+ contentTypeKey: z56.string().min(1).describe("Key of the existing content type to use"),
24739
+ entries: z56.array(extractedEntrySchema).min(1).describe("Extracted entries"),
24740
+ rationale: z56.string().describe("Why this content type fits")
23757
24741
  }),
23758
24742
  // Create a new content type
23759
- z54.object({
23760
- approach: z54.literal("newContentType"),
24743
+ z56.object({
24744
+ approach: z56.literal("newContentType"),
23761
24745
  contentType: newContentTypeSchema,
23762
- entries: z54.array(extractedEntrySchema).min(1).describe("Extracted entries"),
23763
- rationale: z54.string().describe("Why a new content type is needed")
24746
+ entries: z56.array(extractedEntrySchema).min(1).describe("Extracted entries"),
24747
+ rationale: z56.string().describe("Why a new content type is needed")
23764
24748
  }),
23765
24749
  // Use repeater field (page-specific data)
23766
- z54.object({
23767
- approach: z54.literal("repeater"),
23768
- rationale: z54.string().describe("Why repeater is preferred over content type")
24750
+ z56.object({
24751
+ approach: z56.literal("repeater"),
24752
+ rationale: z56.string().describe("Why repeater is preferred over content type")
23769
24753
  }),
23770
24754
  // No list data - standard field extraction
23771
- z54.object({
23772
- approach: z54.literal("none"),
23773
- rationale: z54.string().describe("Why this is not list data")
24755
+ z56.object({
24756
+ approach: z56.literal("none"),
24757
+ rationale: z56.string().describe("Why this is not list data")
23774
24758
  })
23775
24759
  ]);
23776
- var pass1OutputSchema = z54.object({
23777
- blockId: z54.string().regex(/^custom\.[a-z][a-z0-9-]*$/).describe("Block ID like custom.hero-section"),
23778
- blockTitle: z54.string().min(1),
23779
- blockDescription: z54.string().nullable(),
23780
- category: z54.enum(["marketing", "content", "blog", "media", "layout", "interactive"]),
23781
- fields: z54.array(extractedFieldSchema).min(1),
24760
+ var pass1OutputSchema = z56.object({
24761
+ blockId: z56.string().regex(/^custom\.[a-z][a-z0-9-]*$/).describe("Block ID like custom.hero-section"),
24762
+ blockTitle: z56.string().min(1),
24763
+ blockDescription: z56.string().nullable(),
24764
+ category: z56.enum(["marketing", "content", "blog", "media", "layout", "interactive"]),
24765
+ fields: z56.array(extractedFieldSchema).min(1),
23782
24766
  /**
23783
24767
  * Content type decision for list-like content.
23784
24768
  * When content types are available, the LLM may decide to use content entries
@@ -24020,10 +25004,10 @@ async function getJsonFromAiText(ai, config, userMessage, schema) {
24020
25004
  }
24021
25005
 
24022
25006
  // src/manifest/passes/pass3-styling.ts
24023
- import { z as z57 } from "zod";
25007
+ import { z as z59 } from "zod";
24024
25008
 
24025
25009
  // src/manifest/validation/output-schema.ts
24026
- import { z as z56 } from "zod";
25010
+ import { z as z58 } from "zod";
24027
25011
 
24028
25012
  // src/manifest/validation/layout-utils.ts
24029
25013
  function collectLayoutNodeInfos(node, path2 = "layout", out = []) {
@@ -24064,14 +25048,14 @@ function collectLayoutClassNames(node, out = /* @__PURE__ */ new Set()) {
24064
25048
  }
24065
25049
 
24066
25050
  // src/zod/titleSourceSchema.ts
24067
- import { z as z55 } from "zod";
24068
- var titleSourceValueSchema = z55.union([
24069
- z55.string().min(1),
24070
- z55.array(z55.string().min(1)).min(1)
25051
+ import { z as z57 } from "zod";
25052
+ var titleSourceValueSchema = z57.union([
25053
+ z57.string().min(1),
25054
+ z57.array(z57.string().min(1)).min(1)
24071
25055
  ]);
24072
25056
 
24073
25057
  // src/manifest/validation/output-schema.ts
24074
- var blockCategoryEnum2 = z56.enum([
25058
+ var blockCategoryEnum2 = z58.enum([
24075
25059
  "marketing",
24076
25060
  "content",
24077
25061
  "blog",
@@ -24079,53 +25063,53 @@ var blockCategoryEnum2 = z56.enum([
24079
25063
  "layout",
24080
25064
  "interactive"
24081
25065
  ]);
24082
- var llmColorValue = z56.object({
24083
- name: z56.string(),
24084
- hex: z56.string()
24085
- });
24086
- var llmThemePrimitive = z56.union([
24087
- z56.string(),
24088
- z56.number(),
24089
- z56.boolean(),
24090
- z56.null()
25066
+ var llmColorValue = z58.object({
25067
+ name: z58.string(),
25068
+ hex: z58.string()
25069
+ });
25070
+ var llmThemePrimitive = z58.union([
25071
+ z58.string(),
25072
+ z58.number(),
25073
+ z58.boolean(),
25074
+ z58.null()
24091
25075
  ]);
24092
- var llmThemePatchValue = z56.union([
25076
+ var llmThemePatchValue = z58.union([
24093
25077
  llmThemePrimitive,
24094
25078
  llmColorValue,
24095
- z56.array(llmColorValue),
24096
- z56.array(llmThemePrimitive)
25079
+ z58.array(llmColorValue),
25080
+ z58.array(llmThemePrimitive)
24097
25081
  ]);
24098
- var llmThemePatchOpSchema = z56.discriminatedUnion("op", [
24099
- z56.object({
24100
- op: z56.literal("add"),
24101
- path: z56.string().min(1),
25082
+ var llmThemePatchOpSchema = z58.discriminatedUnion("op", [
25083
+ z58.object({
25084
+ op: z58.literal("add"),
25085
+ path: z58.string().min(1),
24102
25086
  value: llmThemePatchValue
24103
25087
  }),
24104
- z56.object({
24105
- op: z56.literal("replace"),
24106
- path: z56.string().min(1),
25088
+ z58.object({
25089
+ op: z58.literal("replace"),
25090
+ path: z58.string().min(1),
24107
25091
  value: llmThemePatchValue
24108
25092
  }),
24109
- z56.object({ op: z56.literal("remove"), path: z56.string().min(1) })
25093
+ z58.object({ op: z58.literal("remove"), path: z58.string().min(1) })
24110
25094
  ]);
24111
- var llmCssDeclaration = z56.object({
24112
- property: z56.string(),
24113
- value: z56.string()
25095
+ var llmCssDeclaration = z58.object({
25096
+ property: z58.string(),
25097
+ value: z58.string()
24114
25098
  });
24115
- var llmCustomCssRuleSchema = z56.object({
24116
- id: z56.string().min(1),
24117
- selector: z56.string().min(1),
24118
- declarations: z56.array(llmCssDeclaration)
25099
+ var llmCustomCssRuleSchema = z58.object({
25100
+ id: z58.string().min(1),
25101
+ selector: z58.string().min(1),
25102
+ declarations: z58.array(llmCssDeclaration)
24119
25103
  });
24120
- var llmNestedRuleSchema = z56.object({
24121
- selector: z56.string().min(1),
24122
- declarations: z56.array(llmCssDeclaration)
25104
+ var llmNestedRuleSchema = z58.object({
25105
+ selector: z58.string().min(1),
25106
+ declarations: z58.array(llmCssDeclaration)
24123
25107
  });
24124
- var llmMediaAtRuleSchema = z56.object({
24125
- id: z56.string().min(1),
24126
- type: z56.literal("media"),
24127
- query: z56.string().min(1),
24128
- rules: z56.array(llmNestedRuleSchema)
25108
+ var llmMediaAtRuleSchema = z58.object({
25109
+ id: z58.string().min(1),
25110
+ type: z58.literal("media"),
25111
+ query: z58.string().min(1),
25112
+ rules: z58.array(llmNestedRuleSchema)
24129
25113
  });
24130
25114
  function normalizeDeclarationsArrayToRecord(declarations) {
24131
25115
  const record = {};
@@ -24155,85 +25139,85 @@ function normalizeLlmMediaAtRule(atRule) {
24155
25139
  rules: atRule.rules.map(normalizeLlmNestedRule)
24156
25140
  };
24157
25141
  }
24158
- var jsonPrimitiveSchema = z56.union([
24159
- z56.string(),
24160
- z56.number(),
24161
- z56.boolean(),
24162
- z56.null()
25142
+ var jsonPrimitiveSchema = z58.union([
25143
+ z58.string(),
25144
+ z58.number(),
25145
+ z58.boolean(),
25146
+ z58.null()
24163
25147
  ]);
24164
- var jsonValueSchema = z56.union([
25148
+ var jsonValueSchema = z58.union([
24165
25149
  jsonPrimitiveSchema,
24166
- z56.array(jsonPrimitiveSchema)
25150
+ z58.array(jsonPrimitiveSchema)
24167
25151
  ]);
24168
- var llmBaseFieldSchema = z56.object({
24169
- id: z56.string().min(1),
24170
- label: z56.string().min(1),
24171
- description: z56.string().nullable(),
24172
- required: z56.boolean(),
25152
+ var llmBaseFieldSchema = z58.object({
25153
+ id: z58.string().min(1),
25154
+ label: z58.string().min(1),
25155
+ description: z58.string().nullable(),
25156
+ required: z58.boolean(),
24173
25157
  defaultValue: jsonValueSchema.nullable()
24174
25158
  });
24175
25159
  var llmTextFieldSchema = llmBaseFieldSchema.extend({
24176
- type: z56.literal("text"),
24177
- multiline: z56.boolean(),
24178
- maxLength: z56.number().int().positive().nullable()
25160
+ type: z58.literal("text"),
25161
+ multiline: z58.boolean(),
25162
+ maxLength: z58.number().int().positive().nullable()
24179
25163
  });
24180
25164
  var llmRichTextFieldSchema = llmBaseFieldSchema.extend({
24181
- type: z56.literal("richText")
25165
+ type: z58.literal("richText")
24182
25166
  });
24183
25167
  var llmMediaFieldSchema = llmBaseFieldSchema.extend({
24184
- type: z56.literal("media"),
24185
- mediaKinds: z56.array(z56.enum(["image", "video", "audio"])).nullable()
25168
+ type: z58.literal("media"),
25169
+ mediaKinds: z58.array(z58.enum(["image", "video", "audio"])).nullable()
24186
25170
  });
24187
25171
  var llmFileFieldSchema = llmBaseFieldSchema.extend({
24188
- type: z56.literal("file"),
24189
- fileKinds: z56.array(z56.enum(["document", "spreadsheet", "archive", "audio"])).nullable()
25172
+ type: z58.literal("file"),
25173
+ fileKinds: z58.array(z58.enum(["document", "spreadsheet", "archive", "audio"])).nullable()
24190
25174
  });
24191
25175
  var llmBooleanFieldSchema = llmBaseFieldSchema.extend({
24192
- type: z56.literal("boolean")
25176
+ type: z58.literal("boolean")
24193
25177
  });
24194
25178
  var llmLinkFieldSchema = llmBaseFieldSchema.extend({
24195
- type: z56.literal("link")
25179
+ type: z58.literal("link")
24196
25180
  });
24197
25181
  var llmSelectFieldSchema = llmBaseFieldSchema.extend({
24198
- type: z56.literal("select"),
24199
- options: z56.array(
24200
- z56.object({
24201
- value: z56.string(),
24202
- label: z56.string()
25182
+ type: z58.literal("select"),
25183
+ options: z58.array(
25184
+ z58.object({
25185
+ value: z58.string(),
25186
+ label: z58.string()
24203
25187
  })
24204
25188
  ),
24205
- multiple: z56.boolean().nullable()
25189
+ multiple: z58.boolean().nullable()
24206
25190
  });
24207
25191
  var llmNumberFieldSchema = llmBaseFieldSchema.extend({
24208
- type: z56.literal("number")
24209
- });
24210
- var llmNestedFieldSchema = z56.object({
24211
- id: z56.string(),
24212
- type: z56.string(),
24213
- label: z56.string(),
24214
- required: z56.boolean().nullable(),
24215
- multiline: z56.boolean().nullable(),
25192
+ type: z58.literal("number")
25193
+ });
25194
+ var llmNestedFieldSchema = z58.object({
25195
+ id: z58.string(),
25196
+ type: z58.string(),
25197
+ label: z58.string(),
25198
+ required: z58.boolean().nullable(),
25199
+ multiline: z58.boolean().nullable(),
24216
25200
  defaultValue: jsonValueSchema.nullable()
24217
25201
  }).passthrough();
24218
- var llmNestedFieldsSchema = z56.array(llmNestedFieldSchema);
25202
+ var llmNestedFieldsSchema = z58.array(llmNestedFieldSchema);
24219
25203
  var llmGroupFieldSchema = llmBaseFieldSchema.extend({
24220
- type: z56.literal("group"),
24221
- schema: z56.object({
25204
+ type: z58.literal("group"),
25205
+ schema: z58.object({
24222
25206
  fields: llmNestedFieldsSchema
24223
25207
  })
24224
25208
  });
24225
25209
  var llmRepeaterFieldSchema = llmBaseFieldSchema.extend({
24226
- type: z56.literal("repeater"),
24227
- itemLabel: z56.string(),
24228
- itemLabelSource: z56.string().nullable(),
24229
- minItems: z56.number().int().min(0),
24230
- maxItems: z56.number().int().positive().nullable(),
24231
- allowConversion: z56.boolean(),
24232
- schema: z56.object({
25210
+ type: z58.literal("repeater"),
25211
+ itemLabel: z58.string(),
25212
+ itemLabelSource: z58.string().nullable(),
25213
+ minItems: z58.number().int().min(0),
25214
+ maxItems: z58.number().int().positive().nullable(),
25215
+ allowConversion: z58.boolean(),
25216
+ schema: z58.object({
24233
25217
  fields: llmNestedFieldsSchema
24234
25218
  })
24235
25219
  });
24236
- var llmFieldSchema = z56.union([
25220
+ var llmFieldSchema = z58.union([
24237
25221
  llmTextFieldSchema,
24238
25222
  llmRichTextFieldSchema,
24239
25223
  llmMediaFieldSchema,
@@ -24245,66 +25229,66 @@ var llmFieldSchema = z56.union([
24245
25229
  llmGroupFieldSchema,
24246
25230
  llmRepeaterFieldSchema
24247
25231
  ]);
24248
- var llmBindingSchema = z56.object({
24249
- from: z56.string(),
24250
- fallback: z56.string().nullable(),
24251
- transforms: z56.array(
24252
- z56.object({
24253
- id: z56.string()
25232
+ var llmBindingSchema = z58.object({
25233
+ from: z58.string(),
25234
+ fallback: z58.string().nullable(),
25235
+ transforms: z58.array(
25236
+ z58.object({
25237
+ id: z58.string()
24254
25238
  })
24255
25239
  ).nullable()
24256
25240
  });
24257
- var llmRepeatSchema = z56.object({
24258
- collection: z56.object({ from: z56.string() }),
24259
- itemName: z56.string()
25241
+ var llmRepeatSchema = z58.object({
25242
+ collection: z58.object({ from: z58.string() }),
25243
+ itemName: z58.string()
24260
25244
  });
24261
- var llmPropsSchema = z56.object({}).passthrough().nullable();
25245
+ var llmPropsSchema = z58.object({}).passthrough().nullable();
24262
25246
  function buildLlmNodeSchema(maxDepth) {
24263
- const nodeBase = z56.object({
24264
- type: z56.string(),
25247
+ const nodeBase = z58.object({
25248
+ type: z58.string(),
24265
25249
  props: llmPropsSchema,
24266
25250
  $bind: llmBindingSchema.nullable(),
24267
25251
  $repeat: llmRepeatSchema.nullable(),
24268
- $when: z56.object({
24269
- condition: z56.object({ from: z56.string() })
25252
+ $when: z58.object({
25253
+ condition: z58.object({ from: z58.string() })
24270
25254
  }).nullable()
24271
25255
  });
24272
- let schema = nodeBase.extend({ children: z56.null() });
25256
+ let schema = nodeBase.extend({ children: z58.null() });
24273
25257
  for (let i = 0; i < maxDepth; i++) {
24274
- schema = nodeBase.extend({ children: z56.array(schema).nullable() });
25258
+ schema = nodeBase.extend({ children: z58.array(schema).nullable() });
24275
25259
  }
24276
25260
  return schema;
24277
25261
  }
24278
25262
  var MAX_LAYOUT_DEPTH = 6;
24279
25263
  var llmNodeSchema = buildLlmNodeSchema(MAX_LAYOUT_DEPTH);
24280
- var llmCustomBlockSchema = z56.object({
24281
- id: z56.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
25264
+ var llmCustomBlockSchema = z58.object({
25265
+ id: z58.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
24282
25266
  message: "Block ID must start with 'custom.' followed by lowercase letters, numbers, or hyphens"
24283
25267
  }),
24284
- title: z56.string().min(1, "Title is required"),
25268
+ title: z58.string().min(1, "Title is required"),
24285
25269
  // Keep in sync with `sdkCustomBlockSchema` and the system manifest schema:
24286
25270
  // - `null` used by OpenAI structured output for "optional" values
24287
25271
  // - array allows multi-part titles (e.g. ["navLabel", "title"])
24288
25272
  titleSource: titleSourceValueSchema.nullable(),
24289
- description: z56.string().nullable(),
25273
+ description: z58.string().nullable(),
24290
25274
  category: blockCategoryEnum2,
24291
- icon: z56.string().nullable(),
24292
- tags: z56.array(z56.string()).nullable(),
25275
+ icon: z58.string().nullable(),
25276
+ tags: z58.array(z58.string()).nullable(),
24293
25277
  // Use LLM-specific field schema (no z.any() for OpenAI compatibility)
24294
25278
  fields: llmFieldSchema.array().min(1, "Custom blocks must have at least one field"),
24295
25279
  // Use LLM-specific node schema (no z.any() for OpenAI compatibility)
24296
25280
  layout: llmNodeSchema
24297
25281
  });
24298
- var htmlToManifestOutputSchema = z56.object({
24299
- blocks: z56.array(llmCustomBlockSchema).min(1, "At least one block is required").max(10, "Maximum 10 blocks per conversion"),
24300
- themePatch: z56.array(llmThemePatchOpSchema).nullable(),
24301
- customCssRules: z56.array(llmCustomCssRuleSchema).nullable(),
24302
- customCssAtRules: z56.array(llmMediaAtRuleSchema).nullable(),
25282
+ var htmlToManifestOutputSchema = z58.object({
25283
+ blocks: z58.array(llmCustomBlockSchema).min(1, "At least one block is required").max(10, "Maximum 10 blocks per conversion"),
25284
+ themePatch: z58.array(llmThemePatchOpSchema).nullable(),
25285
+ customCssRules: z58.array(llmCustomCssRuleSchema).nullable(),
25286
+ customCssAtRules: z58.array(llmMediaAtRuleSchema).nullable(),
24303
25287
  /**
24304
25288
  * Explanation of fixes made when retrying after validation errors.
24305
25289
  * Should explain what changes were made and why.
24306
25290
  */
24307
- fixRationale: z56.string().nullable()
25291
+ fixRationale: z58.string().nullable()
24308
25292
  });
24309
25293
  function collectValidationErrors(output) {
24310
25294
  const errors = [];
@@ -25267,20 +26251,20 @@ function formatValidationFeedback(errors, output) {
25267
26251
  }
25268
26252
 
25269
26253
  // src/manifest/passes/pass3-styling.ts
25270
- var pass3aOutputSchema = z57.object({
25271
- classNamePatches: z57.array(
25272
- z57.object({
25273
- nodePath: z57.string(),
26254
+ var pass3aOutputSchema = z59.object({
26255
+ classNamePatches: z59.array(
26256
+ z59.object({
26257
+ nodePath: z59.string(),
25274
26258
  // "" for root, "children[0]", "children[0].children[1]" etc.
25275
- className: z57.string().min(1)
26259
+ className: z59.string().min(1)
25276
26260
  })
25277
26261
  ),
25278
- rationale: z57.string()
26262
+ rationale: z59.string()
25279
26263
  });
25280
- var pass3bOutputSchema = z57.object({
25281
- customCssRules: z57.array(llmCustomCssRuleSchema).nullable(),
25282
- customCssAtRules: z57.array(llmMediaAtRuleSchema).nullable(),
25283
- rationale: z57.string()
26264
+ var pass3bOutputSchema = z59.object({
26265
+ customCssRules: z59.array(llmCustomCssRuleSchema).nullable(),
26266
+ customCssAtRules: z59.array(llmMediaAtRuleSchema).nullable(),
26267
+ rationale: z59.string()
25284
26268
  });
25285
26269
  function getNodeAtPath(layout, path2) {
25286
26270
  if (path2 === "" || path2 === "root" || path2 === "layout") {
@@ -25587,38 +26571,38 @@ Do NOT include [data-block=...] in selectors - we add that automatically.
25587
26571
 
25588
26572
  // src/page-converter/passes/pass1-segmentation-matching.ts
25589
26573
  var SIZE_WARNING_BYTES = 100 * 1024;
25590
- var sectionTypeEnum = z58.enum(["header", "content", "footer"]);
25591
- var blockCategoryEnum3 = z58.enum(["marketing", "content", "blog", "media", "layout", "interactive"]);
25592
- var baseSectionSchema = z58.object({
25593
- html: z58.string().min(1),
25594
- purpose: z58.string().min(1),
26574
+ var sectionTypeEnum = z60.enum(["header", "content", "footer"]);
26575
+ var blockCategoryEnum3 = z60.enum(["marketing", "content", "blog", "media", "layout", "interactive"]);
26576
+ var baseSectionSchema = z60.object({
26577
+ html: z60.string().min(1),
26578
+ purpose: z60.string().min(1),
25595
26579
  sectionType: sectionTypeEnum
25596
26580
  });
25597
26581
  var builtinMatchSchema = baseSectionSchema.extend({
25598
- decision: z58.literal("builtin"),
25599
- matchedBlock: z58.string().min(1),
25600
- matchScore: z58.number().min(0).max(100),
25601
- matchRationale: z58.string().min(1)
26582
+ decision: z60.literal("builtin"),
26583
+ matchedBlock: z60.string().min(1),
26584
+ matchScore: z60.number().min(0).max(100),
26585
+ matchRationale: z60.string().min(1)
25602
26586
  });
25603
26587
  var customMatchSchema = baseSectionSchema.extend({
25604
- decision: z58.literal("custom"),
25605
- customBlockSuggestion: z58.object({
25606
- title: z58.string().min(1),
26588
+ decision: z60.literal("custom"),
26589
+ customBlockSuggestion: z60.object({
26590
+ title: z60.string().min(1),
25607
26591
  category: blockCategoryEnum3
25608
26592
  })
25609
26593
  });
25610
- var sectionMatchSchema = z58.discriminatedUnion("decision", [
26594
+ var sectionMatchSchema = z60.discriminatedUnion("decision", [
25611
26595
  builtinMatchSchema,
25612
26596
  customMatchSchema
25613
26597
  ]);
25614
- var skippedContentSchema = z58.object({
25615
- description: z58.string(),
25616
- reason: z58.string()
26598
+ var skippedContentSchema = z60.object({
26599
+ description: z60.string(),
26600
+ reason: z60.string()
25617
26601
  });
25618
- var combinedPassSchema = z58.object({
25619
- sections: z58.array(sectionMatchSchema).min(1),
25620
- skippedContent: z58.array(skippedContentSchema).nullable(),
25621
- rationale: z58.string()
26602
+ var combinedPassSchema = z60.object({
26603
+ sections: z60.array(sectionMatchSchema).min(1),
26604
+ skippedContent: z60.array(skippedContentSchema).nullable(),
26605
+ rationale: z60.string()
25622
26606
  });
25623
26607
  function buildSystemPrompt(availableBlocks, matchThreshold) {
25624
26608
  const blockCatalog = availableBlocks.map((b) => {
@@ -25825,10 +26809,10 @@ async function segmentAndMatchBlocks(html, availableBlocks, ctx) {
25825
26809
  }
25826
26810
 
25827
26811
  // src/page-converter/passes/pass2-population.ts
25828
- import { z as z60 } from "zod";
26812
+ import { z as z62 } from "zod";
25829
26813
 
25830
26814
  // src/manifest/three-pass-converter.ts
25831
- import { z as z59 } from "zod";
26815
+ import { z as z61 } from "zod";
25832
26816
 
25833
26817
  // src/manifest/prompt/theme-summary.ts
25834
26818
  var WEIGHT_MAP = {
@@ -26164,9 +27148,9 @@ function mapPass1FieldToOutputField(field) {
26164
27148
  maxLength: null
26165
27149
  };
26166
27150
  }
26167
- var pass2OutputSchema = z59.object({
27151
+ var pass2OutputSchema = z61.object({
26168
27152
  layout: llmNodeSchema,
26169
- rationale: z59.string().describe("Explain which node binds to which field")
27153
+ rationale: z61.string().describe("Explain which node binds to which field")
26170
27154
  });
26171
27155
  function buildPass2SystemPrompt(fields3, contentTypeApproach) {
26172
27156
  const fieldList = fields3.map((f) => {
@@ -27026,9 +28010,9 @@ async function convertHtmlToManifest(input, options) {
27026
28010
  }
27027
28011
 
27028
28012
  // src/page-converter/passes/pass2-population.ts
27029
- var builtinContentSchema = z60.object({
27030
- content: z60.unknown(),
27031
- rationale: z60.string()
28013
+ var builtinContentSchema = z62.object({
28014
+ content: z62.unknown(),
28015
+ rationale: z62.string()
27032
28016
  });
27033
28017
  var SECTION_STYLES_ALLOWED_KEYS = /* @__PURE__ */ new Set(["background", "spacing"]);
27034
28018
  var BOX_STYLES_ALLOWED_KEYS = /* @__PURE__ */ new Set(["background", "spacing", "raised", "rounded", "border", "fullWidth"]);