@riverbankcms/sdk 0.77.1 → 0.78.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/README.md +114 -43
  2. package/dist/{PreviewEditorSidebar-DVUG7GK4.mjs → PreviewEditorSidebar-4DXLYX2V.mjs} +4962 -4885
  3. package/dist/{PreviewEditorUI-P7RN4CDS.mjs → PreviewEditorUI-CS5P4N3P.mjs} +4 -4
  4. package/dist/SdkPreviewModeRuntime-IJDHTW4W.mjs +8 -0
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +190 -154
  6. package/dist/_dts/api/src/accessAdmin.d.ts +5 -0
  7. package/dist/_dts/api/src/billing.d.ts +3 -26
  8. package/dist/_dts/api/src/bookingVerticals.d.ts +4 -0
  9. package/dist/_dts/api/src/content-editor.d.ts +1 -0
  10. package/dist/_dts/api/src/contentRuntime.d.ts +1 -0
  11. package/dist/_dts/api/src/demoDashboardMutationSurfaces.d.ts +46 -0
  12. package/dist/_dts/api/src/endpoints.d.ts +17 -0
  13. package/dist/_dts/api/src/index.d.ts +16 -4
  14. package/dist/_dts/api/src/navigation/dashboardBookingsNav.d.ts +87 -0
  15. package/dist/_dts/api/src/navigation/dashboardDemoNav.d.ts +5 -0
  16. package/dist/_dts/api/src/navigation/dashboardSettingsNav.d.ts +45 -0
  17. package/dist/_dts/api/src/navigation/dashboardSiteNav.d.ts +42 -0
  18. package/dist/_dts/api/src/navigation/dashboardTeamMemberNav.d.ts +24 -0
  19. package/dist/_dts/api/src/navigation/linkUrlType.d.ts +3 -0
  20. package/dist/_dts/api/src/navigation.d.ts +12 -0
  21. package/dist/_dts/api/src/public/types.d.ts +1 -1
  22. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +55 -26
  23. package/dist/_dts/api/src/request.d.ts +3 -11
  24. package/dist/_dts/api/src/sdkConfig/contracts.d.ts +1 -0
  25. package/dist/_dts/api/src/sdkContracts.d.ts +7 -1
  26. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +10 -0
  27. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +1 -0
  28. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +15 -19
  29. package/dist/_dts/api/src/staffAccess.d.ts +79 -0
  30. package/dist/_dts/api/src/types.d.ts +14 -27
  31. package/dist/_dts/api/src/workflows/automaticWorkflowTriggers.d.ts +21 -0
  32. package/dist/_dts/block-form/src/fields/types.d.ts +6 -0
  33. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterList.d.ts +3 -2
  34. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterRow.d.ts +6 -3
  35. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterRowActions.d.ts +8 -3
  36. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/index.d.ts +1 -1
  37. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useLinearRepeaterDnd.d.ts +1 -0
  38. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useRepeaterPointerDragCapability.d.ts +1 -0
  39. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useResolvedItemLabel.d.ts +7 -0
  40. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/buildSummary.d.ts +1 -0
  41. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/index.d.ts +3 -1
  42. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/repeaterDndDomain.d.ts +1 -1
  43. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/repeaterLabelSource.d.ts +15 -0
  44. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/repeaterRowActionsDomain.d.ts +50 -0
  45. package/dist/_dts/blocks/src/client/site-chrome.d.ts +4 -1
  46. package/dist/_dts/blocks/src/index.d.ts +1 -0
  47. package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +879 -288
  48. package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +879 -288
  49. package/dist/_dts/blocks/src/system/blocks/cart.d.ts +879 -288
  50. package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +879 -288
  51. package/dist/_dts/blocks/src/system/blocks/collection.d.ts +879 -288
  52. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +2 -2
  53. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +885 -289
  54. package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +879 -288
  55. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +3 -1
  56. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +68 -21
  57. package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +879 -288
  58. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +879 -288
  59. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +879 -288
  60. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +3 -0
  61. package/dist/_dts/blocks/src/system/data/index.d.ts +5 -3
  62. package/dist/_dts/blocks/src/system/data/previewResolvedDataState.d.ts +45 -0
  63. package/dist/_dts/blocks/src/system/fields/boxStyles.d.ts +2 -1
  64. package/dist/_dts/blocks/src/system/fragments/library/faqAccordion.d.ts +5 -0
  65. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +193 -29
  66. package/dist/_dts/blocks/src/system/node/fragments/headingDecoration.d.ts +10 -0
  67. package/dist/_dts/blocks/src/system/node/fragments/index.d.ts +1 -0
  68. package/dist/_dts/blocks/src/system/node/fragments/styledSection.d.ts +9 -0
  69. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +3 -2
  70. package/dist/_dts/blocks/src/system/runtime/api/endpoints.d.ts +8 -0
  71. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  72. package/dist/_dts/blocks/src/system/runtime/api/types.d.ts +43 -8
  73. package/dist/_dts/blocks/src/system/runtime/header/shared.d.ts +8 -7
  74. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.state.d.ts +1 -1
  75. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +1 -1
  76. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventCompactRow.d.ts +1 -4
  77. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/utils.d.ts +7 -0
  78. package/dist/_dts/blocks/src/system/runtime/nodes/header-section.client.d.ts +2 -8
  79. package/dist/_dts/blocks/src/system/runtime/nodes/header-section.server.d.ts +2 -9
  80. package/dist/_dts/blocks/src/system/runtime/nodes/shop-cart-discount-ui.d.ts +5 -0
  81. package/dist/_dts/blocks/src/system/runtime/nodes/shop-checkout-form.d.ts +76 -0
  82. package/dist/_dts/blocks/src/system/runtime/nodes/shop-checkout.state.d.ts +1 -4
  83. package/dist/_dts/blocks/src/system/runtime/nodes/shop-commerce-store.d.ts +2 -0
  84. package/dist/_dts/blocks/src/system/runtime/nodes/shop-commerce.shared.d.ts +1 -0
  85. package/dist/_dts/blocks/src/system/runtime/nodes/shop-discount-apply.state.d.ts +52 -0
  86. package/dist/_dts/blocks/src/system/runtime/nodes/shop.state.d.ts +2 -4
  87. package/dist/_dts/blocks/src/system/runtime/nodes/useDiscountApply.d.ts +21 -0
  88. package/dist/_dts/blocks/src/system/runtime/shared/components/DiscountCodeDisclosure.d.ts +54 -0
  89. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +2 -0
  90. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +2 -2
  91. package/dist/_dts/blocks/src/system/transforms/registry/ui.d.ts +1 -1
  92. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +1 -1
  93. package/dist/_dts/content-editor/src/contentTypeEditorContentState.d.ts +26 -0
  94. package/dist/_dts/content-editor/src/definitions/factory.d.ts +75 -0
  95. package/dist/_dts/content-editor/src/entryWorkflows.d.ts +2 -0
  96. package/dist/_dts/content-editor/src/footerBlocksEditorState.d.ts +76 -0
  97. package/dist/_dts/content-editor/src/index.d.ts +6 -1
  98. package/dist/_dts/content-editor/src/pageWorkflowContent.d.ts +29 -0
  99. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +2 -2
  100. package/dist/_dts/content-model/src/content-types/schema.d.ts +17 -3
  101. package/dist/_dts/content-model/src/index.d.ts +1 -0
  102. package/dist/_dts/content-model/src/routeTemplate.d.ts +4 -0
  103. package/dist/_dts/content-model/src/templates/bindingTypeCompatibility.d.ts +3 -1
  104. package/dist/_dts/content-model/src/templates/bindingValidation.d.ts +10 -4
  105. package/dist/_dts/content-model/src/templates/editorState.d.ts +25 -0
  106. package/dist/_dts/content-model/src/templates/fieldPaths.d.ts +20 -0
  107. package/dist/_dts/content-model/src/templates/manifestAdapter.d.ts +5 -2
  108. package/dist/_dts/core/src/branded.d.ts +108 -85
  109. package/dist/_dts/core/src/csv-cells.d.ts +10 -0
  110. package/dist/_dts/core/src/csv-date-filter.d.ts +27 -0
  111. package/dist/_dts/core/src/csv-escape.d.ts +1 -0
  112. package/dist/_dts/core/src/csv-filename.d.ts +18 -0
  113. package/dist/_dts/core/src/csv-render.d.ts +4 -0
  114. package/dist/_dts/core/src/csv-types.d.ts +116 -0
  115. package/dist/_dts/core/src/currency-format.d.ts +4 -0
  116. package/dist/_dts/core/src/demo-capability-policy.d.ts +29 -0
  117. package/dist/_dts/core/src/demo-claim-access.d.ts +14 -0
  118. package/dist/_dts/core/src/demo-lifecycle-status.d.ts +11 -0
  119. package/dist/_dts/core/src/demo-runtime.d.ts +47 -0
  120. package/dist/_dts/core/src/duration.d.ts +14 -0
  121. package/dist/_dts/core/src/editor-state.d.ts +7 -7
  122. package/dist/_dts/core/src/email-format.d.ts +10 -0
  123. package/dist/_dts/core/src/field-errors.d.ts +1 -0
  124. package/dist/_dts/core/src/form-submission-preview.d.ts +24 -0
  125. package/dist/_dts/core/src/index.d.ts +20 -0
  126. package/dist/_dts/core/src/number-input.d.ts +22 -0
  127. package/dist/_dts/core/src/participants.d.ts +2 -2
  128. package/dist/_dts/core/src/public-url-validation.d.ts +12 -0
  129. package/dist/_dts/core/src/slug.d.ts +39 -0
  130. package/dist/_dts/core/src/string.d.ts +19 -0
  131. package/dist/_dts/core/src/uuid.d.ts +6 -0
  132. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +11 -0
  133. package/dist/_dts/db/src/schemas/forms.d.ts +50 -50
  134. package/dist/_dts/editor-blocks/src/blockPayload.d.ts +1 -1
  135. package/dist/_dts/media-core/src/assetsInUseSummary.d.ts +34 -0
  136. package/dist/_dts/media-core/src/bulkDeletePlanning.d.ts +24 -0
  137. package/dist/_dts/media-core/src/canonicalCropReview.d.ts +66 -0
  138. package/dist/_dts/media-core/src/classifyAllPlanning.d.ts +48 -0
  139. package/dist/_dts/media-core/src/filename.d.ts +1 -0
  140. package/dist/_dts/media-core/src/index.d.ts +10 -0
  141. package/dist/_dts/media-core/src/mediaAssetUsageStatus.d.ts +47 -0
  142. package/dist/_dts/media-core/src/mediaSettingsState.d.ts +3 -0
  143. package/dist/_dts/media-core/src/portableMediaReferences.d.ts +38 -0
  144. package/dist/_dts/media-core/src/uploadVerificationContract.d.ts +28 -0
  145. package/dist/_dts/media-core/src/videoAssetRepair.d.ts +38 -0
  146. package/dist/_dts/media-editor/src/MediaEditor.d.ts +3 -1
  147. package/dist/_dts/media-editor/src/MediaPreview.d.ts +3 -1
  148. package/dist/_dts/media-editor/src/fieldUi.d.ts +5 -0
  149. package/dist/_dts/media-editor/src/index.d.ts +1 -1
  150. package/dist/_dts/media-editor/src/mediaEditorDebug.d.ts +1 -0
  151. package/dist/_dts/path-utils/src/index.d.ts +8 -0
  152. package/dist/_dts/path-utils/src/redirectPaths.d.ts +26 -0
  153. package/dist/_dts/path-utils/src/safeAppPath.d.ts +26 -0
  154. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeButton.d.ts +2 -1
  155. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +4 -0
  156. package/dist/_dts/preview-next/src/client/preview/previewDocumentFrame.d.ts +31 -0
  157. package/dist/_dts/sdk/src/cli/commands/push/consts.d.ts +1 -1
  158. package/dist/_dts/sdk/src/cli/commands/push/metadata.d.ts +2 -0
  159. package/dist/_dts/sdk/src/cli/commands/push/stale.d.ts +3 -3
  160. package/dist/_dts/sdk/src/cli/commands/push-execute.d.ts +7 -0
  161. package/dist/_dts/sdk/src/cli/commands/push.d.ts +2 -0
  162. package/dist/_dts/sdk/src/cli/content/reader.d.ts +13 -0
  163. package/dist/_dts/sdk/src/cli/content/writer.d.ts +2 -1
  164. package/dist/_dts/sdk/src/cli/helpers.d.ts +2 -0
  165. package/dist/_dts/sdk/src/cli/site-commands/commandKeys.d.ts +6 -6
  166. package/dist/_dts/sdk/src/cli/site-commands/commandRuntime.d.ts +5 -0
  167. package/dist/_dts/sdk/src/cli/site-commands/commandSurfaceDispatch.d.ts +4 -0
  168. package/dist/_dts/sdk/src/cli/site-commands/pageCommands.d.ts +5 -2
  169. package/dist/_dts/sdk/src/cli/site-commands/pushExecution.d.ts +10 -1
  170. package/dist/_dts/sdk/src/cli/site-commands/pushExecutionTypes.d.ts +1 -1
  171. package/dist/_dts/sdk/src/client/error.d.ts +3 -0
  172. package/dist/_dts/sdk/src/client/index.d.ts +2 -2
  173. package/dist/_dts/sdk/src/client/management/types.d.ts +6 -0
  174. package/dist/_dts/sdk/src/client/types.d.ts +39 -21
  175. package/dist/_dts/sdk/src/config/content-types.d.ts +7 -0
  176. package/dist/_dts/sdk/src/config/field-definitions.d.ts +2 -0
  177. package/dist/_dts/sdk/src/index.d.ts +2 -2
  178. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +16 -16
  179. package/dist/_dts/sdk/src/next/content-load-failure.d.ts +51 -0
  180. package/dist/_dts/sdk/src/next/index.d.ts +2 -1
  181. package/dist/_dts/sdk/src/next/types.d.ts +19 -0
  182. package/dist/_dts/sdk/src/portal/redirects.d.ts +1 -1
  183. package/dist/_dts/sdk/src/routing/index.d.ts +3 -2
  184. package/dist/_dts/sdk/src/routing/resolvePageContent.d.ts +71 -6
  185. package/dist/_dts/sdk/src/version.d.ts +1 -1
  186. package/dist/_dts/site-commands/src/commands.d.ts +15 -12
  187. package/dist/_dts/site-commands/src/index.d.ts +1 -0
  188. package/dist/_dts/site-commands/src/pagePaths.d.ts +6 -0
  189. package/dist/_dts/theme-core/src/accordions/siteStyleDefaults.d.ts +26 -0
  190. package/dist/_dts/theme-core/src/accordions/types.d.ts +1 -0
  191. package/dist/_dts/theme-core/src/blocks/vars/index.d.ts +1 -0
  192. package/dist/_dts/theme-core/src/fonts/index.d.ts +1 -0
  193. package/dist/_dts/theme-core/src/fonts/uploadFormat.d.ts +44 -0
  194. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  195. package/dist/_dts/theme-core/src/index.d.ts +3 -1
  196. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +36 -24
  197. package/dist/_dts/theme-core/src/navigation/generateNavLinkCSS.d.ts +6 -1
  198. package/dist/_dts/theme-core/src/navigation/types.d.ts +12 -0
  199. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +3 -3
  200. package/dist/_dts/theme-core/src/runtime/themeCssVarNames.d.ts +7 -0
  201. package/dist/_dts/theme-core/src/schema.d.ts +64 -18
  202. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +214 -34
  203. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +5 -2
  204. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +214 -34
  205. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +24 -0
  206. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +31 -3
  207. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -4
  208. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +33 -1
  209. package/dist/_dts/theme-core/src/site-styles/rawStyleFields.d.ts +4 -2
  210. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +9 -1
  211. package/dist/_dts/theme-core/src/site-styles/types.d.ts +27 -2
  212. package/dist/_dts/theme-core/src/siteChrome.d.ts +17 -34
  213. package/dist/_dts/theme-core/src/siteChromeOverlayClearance.d.ts +22 -0
  214. package/dist/_dts/theme-core/src/siteChromePlacement.d.ts +22 -0
  215. package/dist/_dts/theme-core/src/siteChromePlanning.d.ts +32 -0
  216. package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +2 -2
  217. package/dist/{altcha-B5XGSXP5.mjs → altcha-EKUEQ4RP.mjs} +1 -1
  218. package/dist/{chunk-IENWFSLO.mjs → chunk-4QEGTLK6.mjs} +1 -1
  219. package/dist/{chunk-ZYEJLCTN.mjs → chunk-6HYXHRAI.mjs} +5 -5
  220. package/dist/{chunk-VX7B5VAC.mjs → chunk-CR5HKAGU.mjs} +32 -5
  221. package/dist/{chunk-KWJPDZH2.mjs → chunk-MCRQMPET.mjs} +3793 -1201
  222. package/dist/{chunk-6SMUFTXD.mjs → chunk-OKMBEAXY.mjs} +1 -1
  223. package/dist/{chunk-XGB3TDIC.mjs → chunk-R7POPVJR.mjs} +2 -8
  224. package/dist/{chunk-2SPENC5M.mjs → chunk-RGTOD4AJ.mjs} +242 -57
  225. package/dist/cli/index.mjs +2361 -668
  226. package/dist/cli/init-docs/content/cli-reference.md +3 -2
  227. package/dist/cli/init-docs/content/content-management.md +2 -2
  228. package/dist/cli/init-docs/content/workflow-preview-mode.md +68 -2
  229. package/dist/client/{accordion-RZMQSYLR.mjs → accordion-PLYNJIIM.mjs} +2 -2
  230. package/dist/client/analytics.mjs +1 -1
  231. package/dist/client/{bookingForm-NF4ASVNV.mjs → bookingForm-BXAP6AO7.mjs} +76 -72
  232. package/dist/client/bookings.mjs +3765 -310
  233. package/dist/client/{carousel-LDX47ZIK.mjs → carousel-TRBXDHGF.mjs} +3 -4
  234. package/dist/client/{cart-RGXDS5F4.mjs → cart-Z7H3HJRS.mjs} +8 -8
  235. package/dist/client/{checkout-P7WWSNNY.mjs → checkout-WAFCUBIX.mjs} +8 -8
  236. package/dist/client/{chunk-II7O4XN3.mjs → chunk-75OUS5MT.mjs} +2 -2
  237. package/dist/client/{chunk-PMAIXMAB.mjs → chunk-AUJ5DBZJ.mjs} +42 -37
  238. package/dist/client/{chunk-TQ5MSPDX.mjs → chunk-CE7IBGVW.mjs} +3 -1
  239. package/dist/client/{chunk-E2TDNXCL.mjs → chunk-CWGTG37I.mjs} +2 -1
  240. package/dist/client/{chunk-UFSWADAO.mjs → chunk-DNRGY432.mjs} +6 -67
  241. package/dist/client/{chunk-GMVTOKYG.mjs → chunk-FUXW6VW2.mjs} +512 -66
  242. package/dist/client/{chunk-R56FQ3RR.mjs → chunk-JGXPTEI2.mjs} +322 -106
  243. package/dist/client/{chunk-L3DNHIJX.mjs → chunk-JRDUHZCT.mjs} +53 -53
  244. package/dist/client/{chunk-M3L3KYYR.mjs → chunk-UDNSI5PY.mjs} +12 -0
  245. package/dist/client/{chunk-JEZECJ3W.mjs → chunk-UVQEJJTN.mjs} +129 -3
  246. package/dist/client/{chunk-F7LHOKEH.mjs → chunk-XSV6KW4D.mjs} +1 -1
  247. package/dist/client/chunk-ZFHRN6W2.mjs +66 -0
  248. package/dist/client/{chunk-JNC7CGHX.mjs → chunk-ZI3LLBPZ.mjs} +3 -3
  249. package/dist/client/client.mjs +7577 -4979
  250. package/dist/client/{courseRegistration-7F65K5ZR.mjs → courseRegistration-AHFQHWIJ.mjs} +19 -16
  251. package/dist/client/{eventCalendar-GLSC5KTL.mjs → eventCalendar-LDXTV5R7.mjs} +10 -10
  252. package/dist/client/{eventCombined-ZHK4WKUR.mjs → eventCombined-A4JGTNJO.mjs} +10 -10
  253. package/dist/client/{eventDetails-E3PJYBIN.mjs → eventDetails-4YXTZ7EG.mjs} +10 -10
  254. package/dist/client/{eventListing-EMS3WC3E.mjs → eventListing-P72TPFFM.mjs} +10 -10
  255. package/dist/client/{eventRegistration-NZOTVNPI.mjs → eventRegistration-LSYJHGMT.mjs} +10 -10
  256. package/dist/client/{form-ETFZFATW.mjs → form-AOPYOKOW.mjs} +10 -7
  257. package/dist/client/{headerSection-4LBP7ULT.mjs → headerSection-5TFYDFVQ.mjs} +3 -3
  258. package/dist/client/hooks.mjs +1119 -327
  259. package/dist/client/{locationMap-5M655YSJ.mjs → locationMap-QSZ3ZVAZ.mjs} +3 -3
  260. package/dist/client/{newsletterForm-QOUYW44O.mjs → newsletterForm-KTRHZY52.mjs} +3 -3
  261. package/dist/client/{productDetail-O4DOCWQG.mjs → productDetail-N4E775RG.mjs} +8 -8
  262. package/dist/client/{productList-A5RO5WIS.mjs → productList-UGUQ2S45.mjs} +8 -8
  263. package/dist/client/rendering/client.mjs +7262 -2775
  264. package/dist/client/rendering/islands.mjs +19 -19
  265. package/dist/client/rendering.mjs +6964 -4587
  266. package/dist/client/{shop-L4MZH4I2.mjs → shop-VHSZEEQ2.mjs} +8 -8
  267. package/dist/preview-next/before-render.mjs +18 -1
  268. package/dist/preview-next/client/runtime.mjs +6 -6
  269. package/dist/preview-next/editor-chrome.css +10 -0
  270. package/dist/preview-next/middleware.mjs +18 -1
  271. package/dist/preview-next/tailwind-sources.css +1 -0
  272. package/dist/sdk-runtime-WHPJEF5G.mjs +8 -0
  273. package/dist/server/components.mjs +2736 -1316
  274. package/dist/server/config-template-validation.mjs +221 -15
  275. package/dist/server/config-validation.mjs +1346 -550
  276. package/dist/server/config.mjs +1346 -550
  277. package/dist/server/data.mjs +1118 -326
  278. package/dist/server/index.mjs +514 -251
  279. package/dist/server/next.mjs +4446 -2444
  280. package/dist/server/page-converter.mjs +631 -155
  281. package/dist/server/prebuild.mjs +1 -1
  282. package/dist/server/rendering/server.mjs +2743 -1323
  283. package/dist/server/rendering.mjs +2764 -1328
  284. package/dist/server/routing.mjs +1860 -590
  285. package/dist/server/server.mjs +1622 -575
  286. package/dist/server/theme-bridge.mjs +3151 -131
  287. package/dist/server/theme.mjs +10 -1
  288. package/dist/styles/index.css +488 -48
  289. package/package.json +2 -1
  290. package/dist/SdkPreviewModeRuntime-KLPX47SE.mjs +0 -8
  291. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/DiscountCodeSection.d.ts +0 -7
  292. package/dist/_dts/preview-next/src/client/widgets/PreviewMediaField.d.ts +0 -4
  293. package/dist/client/chunk-OJPZEZU2.mjs +0 -31
  294. package/dist/client/chunk-RTZ3JKKX.mjs +0 -178
  295. package/dist/sdk-runtime-6UT2S7KZ.mjs +0 -8
@@ -1748,7 +1748,16 @@ var ENDPOINT_DEFINITIONS = {
1748
1748
  revalidate: 60,
1749
1749
  tags: ["site-{siteId}", "content-{siteId}-{type}"],
1750
1750
  auth: "user",
1751
- responseKind: "json"
1751
+ responseKind: "json",
1752
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
1753
+ },
1754
+ reorderContentEntries: {
1755
+ path: "/sites/{siteId}/content/{type}/order",
1756
+ method: "POST",
1757
+ tags: ["site-{siteId}", "content-{siteId}-{type}"],
1758
+ auth: "user",
1759
+ responseKind: "json",
1760
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
1752
1761
  },
1753
1762
  getContentTemplate: {
1754
1763
  path: "/sites/{siteId}/content/types/{type}/template",
@@ -3900,6 +3909,14 @@ var ENDPOINT_DEFINITIONS = {
3900
3909
  responseKind: "json",
3901
3910
  errors: []
3902
3911
  },
3912
+ applyDiscountCode: {
3913
+ path: "/public/sites/{siteId}/bookings/discounts/apply",
3914
+ method: "POST",
3915
+ tags: ["site-{siteId}", "booking-discounts"],
3916
+ auth: "public",
3917
+ responseKind: "json",
3918
+ errors: ["validation:invalid_input", "rate_limit:exceeded"]
3919
+ },
3903
3920
  // Batch endpoint for block loader requests (reduces SSR fan-out)
3904
3921
  batchBlockLoaders: {
3905
3922
  path: "/public/sites/{siteId}/block-loaders/batch",
@@ -6239,6 +6256,27 @@ var ENDPOINT_DEFINITIONS = {
6239
6256
  }
6240
6257
  };
6241
6258
 
6259
+ // ../core/src/location.ts
6260
+ function normalizeLocationAddressText(value) {
6261
+ if (typeof value !== "string") {
6262
+ return null;
6263
+ }
6264
+ const trimmed = value.trim();
6265
+ return trimmed ? trimmed : null;
6266
+ }
6267
+ function hasLocationCoordinates(value) {
6268
+ return typeof value?.lat === "number" && typeof value?.lng === "number";
6269
+ }
6270
+ function toLocationCoordinates(value) {
6271
+ if (!hasLocationCoordinates(value)) {
6272
+ return null;
6273
+ }
6274
+ return {
6275
+ lat: value.lat,
6276
+ lng: value.lng
6277
+ };
6278
+ }
6279
+
6242
6280
  // ../api/src/accessAdmin.ts
6243
6281
  import { z } from "zod";
6244
6282
  var managedDomainAddOnPricingSnapshotSchema = z.object({
@@ -6381,27 +6419,6 @@ function formatKeyAsLabel(key) {
6381
6419
  // ../blocks/src/system/manifest/schema.ts
6382
6420
  import { z as z4 } from "zod";
6383
6421
 
6384
- // ../core/src/location.ts
6385
- function normalizeLocationAddressText(value) {
6386
- if (typeof value !== "string") {
6387
- return null;
6388
- }
6389
- const trimmed = value.trim();
6390
- return trimmed ? trimmed : null;
6391
- }
6392
- function hasLocationCoordinates(value) {
6393
- return typeof value?.lat === "number" && typeof value?.lng === "number";
6394
- }
6395
- function toLocationCoordinates(value) {
6396
- if (!hasLocationCoordinates(value)) {
6397
- return null;
6398
- }
6399
- return {
6400
- lat: value.lat,
6401
- lng: value.lng
6402
- };
6403
- }
6404
-
6405
6422
  // ../media-core/src/transformRect.ts
6406
6423
  function isValidTransformRectStructure(rect) {
6407
6424
  if (!Array.isArray(rect) || rect.length !== 4) return false;
@@ -6484,14 +6501,14 @@ function rotateNormalizedPoint(point, rotation) {
6484
6501
  const x = point.x;
6485
6502
  const y = point.y;
6486
6503
  switch (rotation) {
6504
+ case 0:
6505
+ return { x, y };
6487
6506
  case 90:
6488
6507
  return { x: 1 - y, y: x };
6489
6508
  case 180:
6490
6509
  return { x: 1 - x, y: 1 - y };
6491
6510
  case 270:
6492
6511
  return { x: y, y: 1 - x };
6493
- default:
6494
- return { x, y };
6495
6512
  }
6496
6513
  }
6497
6514
 
@@ -6684,6 +6701,8 @@ var uiSchema = z4.object({
6684
6701
  mediaPickerAutoOpen: z4.boolean().optional(),
6685
6702
  showMediaPreview: z4.boolean().optional(),
6686
6703
  showMediaOverlayActions: z4.boolean().optional(),
6704
+ mediaPreviewMaxWidth: z4.enum(["xs", "sm", "md", "none"]).optional(),
6705
+ preventMediaPreviewUpscale: z4.boolean().optional(),
6687
6706
  mediaDelivery: mediaDeliverySchema.optional(),
6688
6707
  mediaDeliveryByVariant: z4.record(z4.string(), mediaDeliverySchema).optional(),
6689
6708
  // Optional input hints for validators/widgets
@@ -6933,6 +6952,9 @@ var repeaterFieldSchema = baseFieldSchema.extend({
6933
6952
  type: z4.literal("repeater"),
6934
6953
  itemLabel: z4.string().default("Item"),
6935
6954
  itemLabelSource: z4.string().optional(),
6955
+ showSummary: z4.boolean().optional(),
6956
+ summaryFields: z4.string().array().optional(),
6957
+ summaryMaxChars: z4.number().int().positive().optional(),
6936
6958
  minItems: z4.number().int().min(0).default(0),
6937
6959
  maxItems: z4.number().int().positive().optional(),
6938
6960
  // Monomorphic mode
@@ -7426,6 +7448,9 @@ function makeBoundaryId(previousBlockId, nextBlockId) {
7426
7448
  const next = encodeURIComponent(nextBlockId);
7427
7449
  return asDesignBoundaryId(`boundary:${previous}:${next}`);
7428
7450
  }
7451
+ function assertNever(value, message = "Unhandled Theme V2 variant") {
7452
+ throw new Error(`${message}: ${String(value)}`);
7453
+ }
7429
7454
  function brandNonEmptyString(value, label) {
7430
7455
  if (value.length === 0) {
7431
7456
  throw new Error(`${label} must be a non-empty string.`);
@@ -7453,6 +7478,10 @@ var tileTreatmentValues = [
7453
7478
  "quiet",
7454
7479
  "brand-depth"
7455
7480
  ];
7481
+ var eventListTreatmentValues = [
7482
+ "plain",
7483
+ "lined-panel"
7484
+ ];
7456
7485
  var eyebrowTreatmentValues = [
7457
7486
  "plain",
7458
7487
  "pill",
@@ -7510,6 +7539,7 @@ function defineBlockDesignCapability(capability) {
7510
7539
  imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
7511
7540
  testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"],
7512
7541
  tileTreatments: capability.tileTreatments ?? ["default"],
7542
+ eventListTreatments: capability.eventListTreatments ?? ["plain"],
7513
7543
  eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"],
7514
7544
  ...capability.headingDecorations ? { headingDecorations: capability.headingDecorations } : {},
7515
7545
  ...capability.accordionIconSets ? { accordionIconSets: capability.accordionIconSets } : {}
@@ -7534,9 +7564,98 @@ var blockAppearancePresets = [
7534
7564
  transitionAfter: "soft-fade-short",
7535
7565
  emphasis: "high",
7536
7566
  sectionHeight: "hero",
7567
+ heroComposition: "center",
7568
+ heroTypographyScale: "display",
7537
7569
  imageSurfaceTreatment: { kind: "neutral-wash" }
7538
7570
  }
7539
7571
  }),
7572
+ defineBlockAppearancePreset({
7573
+ kind: "block-design",
7574
+ id: "hero-bottom-left-panel",
7575
+ target: "hero",
7576
+ label: "Bottom-left panel hero",
7577
+ blockKinds: ["block.hero"],
7578
+ constraints: {
7579
+ layoutFamilies: ["centered", "compact"]
7580
+ },
7581
+ optionGroups: [
7582
+ {
7583
+ id: "image-surface-treatment",
7584
+ label: "Treatment",
7585
+ selectedOptionId: "neutral-scrim",
7586
+ options: [
7587
+ {
7588
+ id: "neutral-scrim",
7589
+ label: "Neutral scrim",
7590
+ designPatch: {
7591
+ imageSurfaceTreatment: { kind: "neutral-scrim", intensity: "balanced" }
7592
+ }
7593
+ },
7594
+ {
7595
+ id: "brand-scrim-primary",
7596
+ label: "Brand scrim",
7597
+ designPatch: {
7598
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary", intensity: "balanced" }
7599
+ }
7600
+ }
7601
+ ]
7602
+ }
7603
+ ],
7604
+ layoutPatches: [
7605
+ {
7606
+ constraints: {
7607
+ layoutVariantKeys: ["micro"]
7608
+ },
7609
+ designPatch: {
7610
+ sectionHeight: "banner",
7611
+ heroTypographyScale: "editorial"
7612
+ }
7613
+ }
7614
+ ],
7615
+ design: {
7616
+ sectionSurface: "hero-image",
7617
+ contentFrame: panelFrame("raised"),
7618
+ itemSurface: "none",
7619
+ transitionAfter: "soft-fade-short",
7620
+ emphasis: "high",
7621
+ sectionHeight: "immersive",
7622
+ heroComposition: "bottom-left",
7623
+ heroTypographyScale: "display",
7624
+ imageSurfaceTreatment: { kind: "neutral-scrim", intensity: "balanced" }
7625
+ }
7626
+ }),
7627
+ defineBlockAppearancePreset({
7628
+ kind: "block-design",
7629
+ id: "hero-poster-image",
7630
+ target: "hero",
7631
+ label: "Poster image hero",
7632
+ blockKinds: ["block.hero"],
7633
+ constraints: {
7634
+ layoutFamilies: ["centered", "compact"]
7635
+ },
7636
+ layoutPatches: [
7637
+ {
7638
+ constraints: {
7639
+ layoutVariantKeys: ["micro"]
7640
+ },
7641
+ designPatch: {
7642
+ sectionHeight: "banner",
7643
+ heroTypographyScale: "display"
7644
+ }
7645
+ }
7646
+ ],
7647
+ design: {
7648
+ sectionSurface: "hero-image",
7649
+ contentFrame: plainFrame,
7650
+ itemSurface: "none",
7651
+ transitionAfter: "soft-fade-short",
7652
+ emphasis: "high",
7653
+ sectionHeight: "immersive",
7654
+ heroComposition: "center",
7655
+ heroTypographyScale: "poster",
7656
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary", intensity: "strong" }
7657
+ }
7658
+ }),
7540
7659
  defineBlockAppearancePreset({
7541
7660
  kind: "block-design",
7542
7661
  id: "hero-brand-scrim",
@@ -7586,6 +7705,8 @@ var blockAppearancePresets = [
7586
7705
  transitionAfter: "soft-fade-short",
7587
7706
  emphasis: "high",
7588
7707
  sectionHeight: "immersive",
7708
+ heroComposition: "center",
7709
+ heroTypographyScale: "display",
7589
7710
  imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
7590
7711
  }
7591
7712
  }),
@@ -7638,6 +7759,8 @@ var blockAppearancePresets = [
7638
7759
  transitionAfter: "soft-fade-short",
7639
7760
  emphasis: "high",
7640
7761
  sectionHeight: "immersive",
7762
+ heroComposition: "center",
7763
+ heroTypographyScale: "display",
7641
7764
  imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" },
7642
7765
  imageSurfaceMotion: "fixed-frame",
7643
7766
  eyebrowTreatment: "accent-pill-bounce"
@@ -7658,6 +7781,8 @@ var blockAppearancePresets = [
7658
7781
  itemSurface: "none",
7659
7782
  transitionAfter: "soft-fade-short",
7660
7783
  emphasis: "high",
7784
+ heroComposition: "center",
7785
+ heroTypographyScale: "editorial",
7661
7786
  eyebrowTreatment: "accent-pill-bounce"
7662
7787
  }
7663
7788
  }),
@@ -7672,7 +7797,82 @@ var blockAppearancePresets = [
7672
7797
  contentFrame: panelFrame("inset"),
7673
7798
  itemSurface: "none",
7674
7799
  transitionAfter: "none",
7675
- emphasis: "high"
7800
+ emphasis: "high",
7801
+ heroComposition: "center",
7802
+ heroTypographyScale: "editorial"
7803
+ }
7804
+ }),
7805
+ defineBlockAppearancePreset({
7806
+ kind: "block-design",
7807
+ id: "hero-split-editorial",
7808
+ target: "hero",
7809
+ label: "Editorial split hero",
7810
+ blockKinds: ["block.hero"],
7811
+ constraints: {
7812
+ layoutFamilies: ["split"]
7813
+ },
7814
+ design: {
7815
+ sectionSurface: "base",
7816
+ contentFrame: plainFrame,
7817
+ itemSurface: "none",
7818
+ transitionAfter: "soft-fade-short",
7819
+ emphasis: "high",
7820
+ heroTypographyScale: "editorial"
7821
+ }
7822
+ }),
7823
+ defineBlockAppearancePreset({
7824
+ kind: "block-design",
7825
+ id: "hero-split-brand",
7826
+ target: "hero",
7827
+ label: "Brand split hero",
7828
+ blockKinds: ["block.hero"],
7829
+ constraints: {
7830
+ layoutFamilies: ["split"]
7831
+ },
7832
+ design: {
7833
+ sectionSurface: "brand-depth-band",
7834
+ contentFrame: plainFrame,
7835
+ itemSurface: "none",
7836
+ transitionAfter: "soft-fade-short",
7837
+ emphasis: "high",
7838
+ heroTypographyScale: "display",
7839
+ eyebrowTreatment: "accent-pill-bounce"
7840
+ }
7841
+ }),
7842
+ defineBlockAppearancePreset({
7843
+ kind: "block-design",
7844
+ id: "hero-split-soft-panel",
7845
+ target: "hero",
7846
+ label: "Soft panel split hero",
7847
+ blockKinds: ["block.hero"],
7848
+ constraints: {
7849
+ layoutFamilies: ["split"]
7850
+ },
7851
+ design: {
7852
+ sectionSurface: "muted-band",
7853
+ contentFrame: panelFrame("raised"),
7854
+ itemSurface: "none",
7855
+ transitionAfter: "soft-fade-short",
7856
+ emphasis: "high",
7857
+ heroTypographyScale: "editorial"
7858
+ }
7859
+ }),
7860
+ defineBlockAppearancePreset({
7861
+ kind: "block-design",
7862
+ id: "hero-split-accent",
7863
+ target: "hero",
7864
+ label: "Accent split hero",
7865
+ blockKinds: ["block.hero"],
7866
+ constraints: {
7867
+ layoutFamilies: ["split"]
7868
+ },
7869
+ design: {
7870
+ sectionSurface: "accent-band",
7871
+ contentFrame: panelFrame("raised"),
7872
+ itemSurface: "none",
7873
+ transitionAfter: "soft-fade-short",
7874
+ emphasis: "high",
7875
+ heroTypographyScale: "display"
7676
7876
  }
7677
7877
  }),
7678
7878
  defineBlockAppearancePreset({
@@ -7705,9 +7905,9 @@ var blockAppearancePresets = [
7705
7905
  }),
7706
7906
  defineBlockAppearancePreset({
7707
7907
  kind: "block-design",
7708
- id: "intro-soft-earth-statement",
7908
+ id: "intro-organic-statement",
7709
7909
  target: "intro",
7710
- label: "Soft Earth intro statement",
7910
+ label: "Organic intro statement",
7711
7911
  blockKinds: ["block.intro"],
7712
7912
  design: {
7713
7913
  sectionSurface: "base",
@@ -7738,9 +7938,9 @@ var blockAppearancePresets = [
7738
7938
  }),
7739
7939
  defineBlockAppearancePreset({
7740
7940
  kind: "block-design",
7741
- id: "feature-cards-soft-earth-offerings",
7941
+ id: "feature-cards-raised-rule",
7742
7942
  target: "feature-cards",
7743
- label: "Soft Earth offering cards",
7943
+ label: "Raised cards with rule",
7744
7944
  blockKinds: ["block.feature-cards"],
7745
7945
  design: {
7746
7946
  sectionSurface: "base",
@@ -7769,6 +7969,21 @@ var blockAppearancePresets = [
7769
7969
  emphasis: "medium"
7770
7970
  }
7771
7971
  }),
7972
+ defineBlockAppearancePreset({
7973
+ kind: "block-design",
7974
+ id: "events-lined-panel",
7975
+ target: "events",
7976
+ label: "Lined event panel",
7977
+ blockKinds: ["block.event-calendar", "block.event-listing"],
7978
+ design: {
7979
+ sectionSurface: "base",
7980
+ contentFrame: plainFrame,
7981
+ itemSurface: "none",
7982
+ transitionAfter: "none",
7983
+ emphasis: "medium",
7984
+ eventListTreatment: "lined-panel"
7985
+ }
7986
+ }),
7772
7987
  defineBlockAppearancePreset({
7773
7988
  kind: "block-design",
7774
7989
  id: "schedule-details-accent-section",
@@ -7828,9 +8043,9 @@ var blockAppearancePresets = [
7828
8043
  }),
7829
8044
  defineBlockAppearancePreset({
7830
8045
  kind: "block-design",
7831
- id: "testimonials-carded-proof",
8046
+ id: "testimonials-simple-cards",
7832
8047
  target: "testimonials",
7833
- label: "Carded social proof",
8048
+ label: "Simple testimonial cards",
7834
8049
  blockKinds: ["block.testimonials"],
7835
8050
  design: {
7836
8051
  sectionSurface: "base",
@@ -7842,9 +8057,9 @@ var blockAppearancePresets = [
7842
8057
  }),
7843
8058
  defineBlockAppearancePreset({
7844
8059
  kind: "block-design",
7845
- id: "testimonials-contained-proof",
8060
+ id: "testimonials-raised-panel",
7846
8061
  target: "testimonials",
7847
- label: "Contained social proof",
8062
+ label: "Raised testimonial panel",
7848
8063
  blockKinds: ["block.testimonials"],
7849
8064
  design: {
7850
8065
  sectionSurface: "muted-band",
@@ -7856,9 +8071,9 @@ var blockAppearancePresets = [
7856
8071
  }),
7857
8072
  defineBlockAppearancePreset({
7858
8073
  kind: "block-design",
7859
- id: "testimonials-dark-proof",
8074
+ id: "testimonials-accent-panel",
7860
8075
  target: "testimonials",
7861
- label: "Dark proof panel",
8076
+ label: "Accent testimonial panel",
7862
8077
  blockKinds: ["block.testimonials"],
7863
8078
  design: {
7864
8079
  sectionSurface: "accent-band",
@@ -7870,9 +8085,9 @@ var blockAppearancePresets = [
7870
8085
  }),
7871
8086
  defineBlockAppearancePreset({
7872
8087
  kind: "block-design",
7873
- id: "testimonials-accent-quote-proof",
8088
+ id: "testimonials-accent-quote-cards",
7874
8089
  target: "testimonials",
7875
- label: "Accent quote proof",
8090
+ label: "Accent quote cards",
7876
8091
  blockKinds: ["block.testimonials"],
7877
8092
  design: {
7878
8093
  sectionSurface: "accent-band",
@@ -7885,9 +8100,9 @@ var blockAppearancePresets = [
7885
8100
  }),
7886
8101
  defineBlockAppearancePreset({
7887
8102
  kind: "block-design",
7888
- id: "testimonials-soft-earth-proof-band",
8103
+ id: "testimonials-brand-background-quotes",
7889
8104
  target: "testimonials",
7890
- label: "Soft Earth proof band",
8105
+ label: "Brand background quotes",
7891
8106
  blockKinds: ["block.testimonials"],
7892
8107
  design: {
7893
8108
  sectionSurface: "brand-depth-band",
@@ -7931,25 +8146,6 @@ var blockAppearancePresets = [
7931
8146
  emphasis: "low"
7932
8147
  }
7933
8148
  }),
7934
- defineBlockAppearancePreset({
7935
- kind: "block-design",
7936
- id: "faq-soft-earth-two-column",
7937
- target: "faq",
7938
- label: "Soft Earth two-column FAQ",
7939
- blockKinds: ["block.faq"],
7940
- design: {
7941
- sectionSurface: "base",
7942
- contentFrame: plainFrame,
7943
- itemSurface: "flat",
7944
- transitionAfter: "none",
7945
- emphasis: "medium",
7946
- accordionIconTreatment: {
7947
- iconSet: "plus",
7948
- colorToken: "primary",
7949
- motion: "swap"
7950
- }
7951
- }
7952
- }),
7953
8149
  defineBlockAppearancePreset({
7954
8150
  kind: "block-design",
7955
8151
  id: "contact-form-panel",
@@ -9328,7 +9524,8 @@ var accordionSystemSchema = z12.object({
9328
9524
  icon: z12.object({
9329
9525
  style: accordionIconSchema,
9330
9526
  position: z12.enum(["left", "right"]),
9331
- size: z12.enum(["sm", "md", "lg"])
9527
+ size: z12.enum(["sm", "md", "lg"]),
9528
+ colorToken: themeColorTokenSchema.optional()
9332
9529
  }),
9333
9530
  // Trigger (question) styling
9334
9531
  trigger: z12.object({
@@ -9462,6 +9659,7 @@ var navLinkPaddingXSchema = z16.enum(["none", "tight", "compact", "default", "re
9462
9659
  var navLinkBorderRadiusSchema = z16.enum(["none", "sm", "md", "full"]);
9463
9660
  var navLinkTextSizeSchema = z16.enum(["xs", "sm", "base", "lg"]);
9464
9661
  var navLinkLetterSpacingSchema = z16.enum(["normal", "wide", "wider", "widest"]);
9662
+ var navLinkContrastTreatmentSchema = z16.enum(["none", "soft-glow"]);
9465
9663
  var navLinkStyleSchema = z16.object({
9466
9664
  /** Display name for the style */
9467
9665
  name: z16.string().min(1).max(30).optional(),
@@ -9473,6 +9671,8 @@ var navLinkStyleSchema = z16.object({
9473
9671
  textSize: navLinkTextSizeSchema.optional(),
9474
9672
  /** Optional letter spacing override */
9475
9673
  letterSpacing: navLinkLetterSpacingSchema.optional(),
9674
+ /** Optional text-only contrast treatment for transparent/overlay navigation */
9675
+ contrastTreatment: navLinkContrastTreatmentSchema.optional(),
9476
9676
  /** Hover/active color token (for color-change effects) */
9477
9677
  hoverColorToken: themeColorTokenSchema.nullable().optional(),
9478
9678
  /** Padding preset */
@@ -9902,6 +10102,7 @@ var sectionStylesOverrideSchema = z21.object({
9902
10102
  spacing: semanticSpacingSchema.nullable().optional(),
9903
10103
  minHeight: z21.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
9904
10104
  tileTreatment: z21.enum(tileTreatmentValues).nullable().optional(),
10105
+ eventListTreatment: z21.enum(eventListTreatmentValues).nullable().optional(),
9905
10106
  eyebrowTreatment: z21.enum(eyebrowTreatmentValues).nullable().optional(),
9906
10107
  headingDecoration: headingDecorationSchema.nullable().optional(),
9907
10108
  // Author-level override consumed by later block/editor rendering phases.
@@ -10735,6 +10936,34 @@ var paletteVariantsById = new Map(
10735
10936
  paletteVariants.map((v) => [v.id, v])
10736
10937
  );
10737
10938
 
10939
+ // ../theme-core/src/accordions/siteStyleDefaults.ts
10940
+ var softEarthAccordionSystem = {
10941
+ background: {
10942
+ type: "solid",
10943
+ colorToken: "background"
10944
+ },
10945
+ spacing: "comfortable",
10946
+ corners: "square",
10947
+ border: null,
10948
+ shadow: null,
10949
+ icon: {
10950
+ style: "plus-minus",
10951
+ position: "right",
10952
+ size: "md",
10953
+ colorToken: "primary"
10954
+ },
10955
+ trigger: {
10956
+ textColorToken: "text",
10957
+ fontWeight: "medium"
10958
+ },
10959
+ hover: {
10960
+ textColorToken: "primary"
10961
+ },
10962
+ content: {
10963
+ textColorToken: "neutral-700"
10964
+ }
10965
+ };
10966
+
10738
10967
  // ../theme-core/src/site-styles/headerLooks.ts
10739
10968
  function asHeaderLookId(value) {
10740
10969
  return value;
@@ -10790,7 +11019,7 @@ var headerLayoutCatalog = [
10790
11019
  description: "Detached header chrome that sits over the opening section.",
10791
11020
  structure: "floating-shell",
10792
11021
  variant: "floating",
10793
- defaultPositioning: "fixed",
11022
+ defaultPositioning: "sticky",
10794
11023
  shrinkOnScroll: true,
10795
11024
  maxRecommendedNavItems: 5,
10796
11025
  allowedLogoShapes: ["none", "text-only", "horizontal"]
@@ -10807,7 +11036,9 @@ var headerStyleCatalog = [
10807
11036
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10808
11037
  navInteraction: "color-change",
10809
11038
  surface: "neutral",
10810
- navTypography: "plain"
11039
+ defaultDepth: "none",
11040
+ navTypography: "plain",
11041
+ moods: ["calm", "professional", "editorial"]
10811
11042
  },
10812
11043
  {
10813
11044
  id: asHeaderStyleId("fine-line"),
@@ -10816,7 +11047,9 @@ var headerStyleCatalog = [
10816
11047
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10817
11048
  navInteraction: "underline-grow",
10818
11049
  surface: "bordered",
10819
- navTypography: "plain"
11050
+ defaultDepth: "line",
11051
+ navTypography: "plain",
11052
+ moods: ["calm", "professional", "editorial"]
10820
11053
  },
10821
11054
  {
10822
11055
  id: asHeaderStyleId("soft-bar"),
@@ -10825,7 +11058,9 @@ var headerStyleCatalog = [
10825
11058
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10826
11059
  navInteraction: "pill-background",
10827
11060
  surface: "soft",
10828
- navTypography: "plain"
11061
+ defaultDepth: "line",
11062
+ navTypography: "plain",
11063
+ moods: ["calm", "professional"]
10829
11064
  },
10830
11065
  {
10831
11066
  id: asHeaderStyleId("pill-nav"),
@@ -10834,7 +11069,9 @@ var headerStyleCatalog = [
10834
11069
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10835
11070
  navInteraction: "pill-background",
10836
11071
  surface: "soft",
10837
- navTypography: "plain"
11072
+ defaultDepth: "none",
11073
+ navTypography: "plain",
11074
+ moods: ["calm"]
10838
11075
  },
10839
11076
  {
10840
11077
  id: asHeaderStyleId("brand-bar"),
@@ -10843,7 +11080,9 @@ var headerStyleCatalog = [
10843
11080
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10844
11081
  navInteraction: "color-change",
10845
11082
  surface: "brand-solid",
10846
- navTypography: "brand-caps"
11083
+ defaultDepth: "none",
11084
+ navTypography: "brand-caps",
11085
+ moods: ["professional", "expressive", "utility"]
10847
11086
  },
10848
11087
  {
10849
11088
  id: asHeaderStyleId("brand-underline"),
@@ -10852,7 +11091,9 @@ var headerStyleCatalog = [
10852
11091
  supportedLayoutIds: supportedLayouts(["classic"]),
10853
11092
  navInteraction: "underline-grow",
10854
11093
  surface: "brand-solid",
10855
- navTypography: "brand-caps"
11094
+ defaultDepth: "none",
11095
+ navTypography: "brand-caps",
11096
+ moods: ["expressive"]
10856
11097
  },
10857
11098
  {
10858
11099
  id: asHeaderStyleId("brand-pill"),
@@ -10861,7 +11102,9 @@ var headerStyleCatalog = [
10861
11102
  supportedLayoutIds: supportedLayouts(["classic", "centered", "floating"]),
10862
11103
  navInteraction: "pill-background",
10863
11104
  surface: "brand-solid",
10864
- navTypography: "brand-caps"
11105
+ defaultDepth: "none",
11106
+ navTypography: "brand-caps",
11107
+ moods: ["expressive"]
10865
11108
  },
10866
11109
  {
10867
11110
  id: asHeaderStyleId("serif-line"),
@@ -10870,7 +11113,9 @@ var headerStyleCatalog = [
10870
11113
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10871
11114
  navInteraction: "underline-grow",
10872
11115
  surface: "bordered",
10873
- navTypography: "heading"
11116
+ defaultDepth: "line",
11117
+ navTypography: "heading",
11118
+ moods: ["editorial", "calm"]
10874
11119
  },
10875
11120
  {
10876
11121
  id: asHeaderStyleId("flat-tabs"),
@@ -10879,16 +11124,20 @@ var headerStyleCatalog = [
10879
11124
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10880
11125
  navInteraction: "flat-block",
10881
11126
  surface: "bordered",
10882
- navTypography: "quiet-caps"
11127
+ defaultDepth: "shadow",
11128
+ navTypography: "quiet-caps",
11129
+ moods: ["professional", "utility", "expressive"]
10883
11130
  },
10884
11131
  {
10885
11132
  id: asHeaderStyleId("glass"),
10886
11133
  label: "Glass",
10887
11134
  description: "Translucent chrome with frosted navigation backing.",
10888
- supportedLayoutIds: supportedLayouts(["classic", "floating"]),
11135
+ supportedLayoutIds: supportedLayouts(["floating"]),
10889
11136
  navInteraction: "glass-backed",
10890
11137
  surface: "floating",
10891
- navTypography: "plain"
11138
+ defaultDepth: "shadow",
11139
+ navTypography: "plain",
11140
+ moods: ["expressive", "calm"]
10892
11141
  },
10893
11142
  {
10894
11143
  id: asHeaderStyleId("minimal-surface"),
@@ -10897,7 +11146,9 @@ var headerStyleCatalog = [
10897
11146
  supportedLayoutIds: supportedLayouts(["floating"]),
10898
11147
  navInteraction: "color-change",
10899
11148
  surface: "floating",
10900
- navTypography: "plain"
11149
+ defaultDepth: "none",
11150
+ navTypography: "plain",
11151
+ moods: ["editorial", "calm"]
10901
11152
  },
10902
11153
  {
10903
11154
  id: asHeaderStyleId("soft-shell"),
@@ -10906,7 +11157,9 @@ var headerStyleCatalog = [
10906
11157
  supportedLayoutIds: supportedLayouts(["floating"]),
10907
11158
  navInteraction: "pill-background",
10908
11159
  surface: "floating",
10909
- navTypography: "plain"
11160
+ defaultDepth: "shadow",
11161
+ navTypography: "plain",
11162
+ moods: ["calm", "professional"]
10910
11163
  },
10911
11164
  {
10912
11165
  id: asHeaderStyleId("split-glass"),
@@ -10915,7 +11168,9 @@ var headerStyleCatalog = [
10915
11168
  supportedLayoutIds: supportedLayouts(["floating"]),
10916
11169
  navInteraction: "glass-backed",
10917
11170
  surface: "floating",
10918
- navTypography: "quiet-caps"
11171
+ defaultDepth: "shadow",
11172
+ navTypography: "quiet-caps",
11173
+ moods: ["expressive"]
10919
11174
  },
10920
11175
  {
10921
11176
  id: asHeaderStyleId("split-pill"),
@@ -10924,7 +11179,9 @@ var headerStyleCatalog = [
10924
11179
  supportedLayoutIds: supportedLayouts(["floating"]),
10925
11180
  navInteraction: "pill-background",
10926
11181
  surface: "floating",
10927
- navTypography: "heading"
11182
+ defaultDepth: "shadow",
11183
+ navTypography: "heading",
11184
+ moods: ["calm", "editorial"]
10928
11185
  }
10929
11186
  ];
10930
11187
  var headerLayoutsById = new Map(
@@ -10938,7 +11195,6 @@ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
10938
11195
  asHeaderLayoutId("classic"),
10939
11196
  headerStyleRepairChain([
10940
11197
  "minimal",
10941
- "glass",
10942
11198
  "fine-line",
10943
11199
  "soft-bar",
10944
11200
  "pill-nav",
@@ -11005,7 +11261,13 @@ var headerStyleRepairOrder = /* @__PURE__ */ new Map(
11005
11261
  ],
11006
11262
  [
11007
11263
  asHeaderStyleId("glass"),
11008
- headerStyleRepairChain(["glass", "minimal-surface", "minimal"])
11264
+ headerStyleRepairChain([
11265
+ "glass",
11266
+ "soft-shell",
11267
+ "fine-line",
11268
+ "minimal-surface",
11269
+ "minimal"
11270
+ ])
11009
11271
  ],
11010
11272
  [
11011
11273
  asHeaderStyleId("soft-shell"),
@@ -11117,6 +11379,23 @@ function getCompatibleHeaderStyleIds(layoutId) {
11117
11379
  }
11118
11380
  );
11119
11381
  }
11382
+ function themedHeaderShadow(theme) {
11383
+ switch (theme.shadow.elevation) {
11384
+ case "none":
11385
+ return void 0;
11386
+ case "low":
11387
+ return { elevation: "sm" };
11388
+ case "medium":
11389
+ return { elevation: "md" };
11390
+ case "high":
11391
+ return { elevation: "lg" };
11392
+ default:
11393
+ return assertNever(
11394
+ theme.shadow.elevation,
11395
+ "Unhandled theme shadow elevation"
11396
+ );
11397
+ }
11398
+ }
11120
11399
  function solidBrandHeader(theme) {
11121
11400
  const ctaVariant = resolveHeaderCtaVariant(theme, "inverted");
11122
11401
  return {
@@ -11266,9 +11545,7 @@ function practicalUtilityHeader(theme) {
11266
11545
  navColor: "text",
11267
11546
  navStyle: "solid",
11268
11547
  navWeight: "semibold",
11269
- shadow: {
11270
- elevation: "sm"
11271
- },
11548
+ shadow: themedHeaderShadow(theme),
11272
11549
  border: {
11273
11550
  style: "solid",
11274
11551
  width: "thin",
@@ -11337,6 +11614,7 @@ function floatingGlassHeader(theme) {
11337
11614
  return {
11338
11615
  ...transparentOverlayHeader(theme),
11339
11616
  variant: "floating",
11617
+ positioning: "sticky",
11340
11618
  navStyle: "frosted",
11341
11619
  navContainer: {
11342
11620
  type: "glass",
@@ -11852,7 +12130,7 @@ var typographyPresets = [
11852
12130
  heroTypography: {
11853
12131
  headlineSize: "6xl",
11854
12132
  headlineLineHeight: "tight",
11855
- subheadlineSize: "editorial",
12133
+ subheadlineSize: "2xl",
11856
12134
  subheadlineLineHeight: "normal",
11857
12135
  microHeadlineSize: "6xl",
11858
12136
  microHeadlineLineHeight: "tight",
@@ -11870,6 +12148,8 @@ var typographyPresetsById = new Map(
11870
12148
  );
11871
12149
 
11872
12150
  // ../theme-core/src/site-styles/curatedSiteStyles.ts
12151
+ var SOFT_EARTH_SITE_STYLE_ID_VALUE = "site-style:soft-earth";
12152
+ var SOFT_EARTH_SITE_STYLE_ID = asSiteStyleId(SOFT_EARTH_SITE_STYLE_ID_VALUE);
11873
12153
  var curatedSiteStyleIdValues = [
11874
12154
  "site-style:calm-studio",
11875
12155
  "site-style:clear-professional",
@@ -11881,7 +12161,7 @@ var curatedSiteStyleIdValues = [
11881
12161
  "site-style:personal-retreat-journal",
11882
12162
  "site-style:tactile-workshop",
11883
12163
  "site-style:modern-wellness",
11884
- "site-style:soft-earth",
12164
+ SOFT_EARTH_SITE_STYLE_ID_VALUE,
11885
12165
  "site-style:bold-launch",
11886
12166
  "site-style:south-west-twerk-school"
11887
12167
  ];
@@ -11963,7 +12243,10 @@ function uniqueContentFrameKinds() {
11963
12243
  var generatedContentFrameKinds = uniqueContentFrameKinds();
11964
12244
  function defineCuratedSiteStyle(input) {
11965
12245
  const legacyHeaderLookIds = input.recommendedHeaderLookIds ?? ["clean-base"];
11966
- const inferredHeaderCuration = inferHeaderCurationFromLegacyLooks(legacyHeaderLookIds);
12246
+ const inferredHeaderCuration = inferHeaderCurationFromLegacyLooks(
12247
+ legacyHeaderLookIds,
12248
+ input.tokenRecipes
12249
+ );
11967
12250
  const typographyPresetChoices = input.typographyPresetChoices ?? defaultTypographyPresetChoicesForRecipe(input.tokenRecipes.typography);
11968
12251
  const defaultTypographyPresetId = input.defaultTypographyPresetId ? asTypographyPresetId(input.defaultTypographyPresetId) : typographyPresetChoices[0].id;
11969
12252
  if (!typographyPresetChoices.some(
@@ -11996,6 +12279,7 @@ function defineCuratedSiteStyle(input) {
11996
12279
  supportedTransitions: generatedDesignOptionCatalog.transitions
11997
12280
  },
11998
12281
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
12282
+ ...input.defaultBlockVariants ? { defaultBlockVariants: input.defaultBlockVariants } : {},
11999
12283
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
12000
12284
  defaultHeaderSelection: input.defaultHeaderSelection ? {
12001
12285
  layoutId: asHeaderLayoutId(input.defaultHeaderSelection.layoutId),
@@ -12054,7 +12338,69 @@ function nonEmptyHeaderStyleChoices(choices, fallbackLayoutId) {
12054
12338
  };
12055
12339
  return [first, ...choices.slice(1)];
12056
12340
  }
12057
- function inferHeaderCurationFromLegacyLooks(lookIds) {
12341
+ function uniqueCompatibleHeaderStyleChoices(choices, fallbackLayoutId) {
12342
+ const compatible = new Set(getCompatibleHeaderStyleIds(fallbackLayoutId));
12343
+ const seen = /* @__PURE__ */ new Set();
12344
+ const unique = choices.filter((choice) => {
12345
+ if (!compatible.has(choice.id)) return false;
12346
+ if (seen.has(choice.id)) return false;
12347
+ seen.add(choice.id);
12348
+ return true;
12349
+ });
12350
+ return nonEmptyHeaderStyleChoices(unique, fallbackLayoutId);
12351
+ }
12352
+ function inferredHeaderStyleValuesForRecipes(layoutId, recipes) {
12353
+ switch (layoutId) {
12354
+ case "classic":
12355
+ if (isExpressiveRecipe(recipes)) {
12356
+ return [
12357
+ "brand-bar",
12358
+ "brand-underline",
12359
+ "flat-tabs",
12360
+ "brand-pill",
12361
+ "fine-line"
12362
+ ];
12363
+ }
12364
+ if (recipes.spacing === "compact") {
12365
+ return ["flat-tabs", "fine-line", "minimal", "brand-bar"];
12366
+ }
12367
+ if (isSerifTypographyRecipe(recipes)) {
12368
+ return ["serif-line", "fine-line", "minimal", "soft-bar"];
12369
+ }
12370
+ if (recipes.radius === "rounded" || recipes.radius === "pill") {
12371
+ return ["soft-bar", "pill-nav", "fine-line", "minimal"];
12372
+ }
12373
+ return ["fine-line", "minimal", "soft-bar", "brand-bar"];
12374
+ case "centered":
12375
+ if (isSerifTypographyRecipe(recipes)) {
12376
+ return ["serif-line", "fine-line", "minimal", "soft-bar"];
12377
+ }
12378
+ if (isExpressiveRecipe(recipes)) {
12379
+ return ["brand-pill", "flat-tabs", "brand-bar", "fine-line"];
12380
+ }
12381
+ if (recipes.radius === "rounded" || recipes.radius === "pill") {
12382
+ return ["soft-bar", "pill-nav", "fine-line", "minimal"];
12383
+ }
12384
+ return ["minimal", "fine-line", "soft-bar"];
12385
+ case "floating":
12386
+ if (isExpressiveRecipe(recipes)) {
12387
+ return ["glass", "split-glass", "brand-pill", "soft-shell"];
12388
+ }
12389
+ if (isSerifTypographyRecipe(recipes)) {
12390
+ return ["split-pill", "minimal-surface", "soft-shell"];
12391
+ }
12392
+ return ["soft-shell", "minimal-surface", "glass"];
12393
+ default:
12394
+ return [];
12395
+ }
12396
+ }
12397
+ function isExpressiveRecipe(recipes) {
12398
+ return recipes.contrast === "maximum" || recipes.shadow === "layered" || recipes.motion === "expressive";
12399
+ }
12400
+ function isSerifTypographyRecipe(recipes) {
12401
+ return recipes.typography === "serif-editorial" || recipes.typography === "classic-serif";
12402
+ }
12403
+ function inferHeaderCurationFromLegacyLooks(lookIds, recipes) {
12058
12404
  const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter(
12059
12405
  (selection) => Boolean(selection)
12060
12406
  );
@@ -12067,8 +12413,15 @@ function inferHeaderCurationFromLegacyLooks(lookIds) {
12067
12413
  );
12068
12414
  const stylesByLayout = {};
12069
12415
  for (const layoutChoice of layoutChoices) {
12070
- const styleChoices = selections.filter((selection) => selection.layoutId === layoutChoice.id).map((selection) => headerStyleChoice(selection.styleId));
12071
- stylesByLayout[unbrandHeaderLayoutId(layoutChoice.id)] = nonEmptyHeaderStyleChoices(styleChoices, layoutChoice.id);
12416
+ const legacyStyleChoices = selections.filter((selection) => selection.layoutId === layoutChoice.id).map((selection) => headerStyleChoice(selection.styleId));
12417
+ const inferredStyleChoices = inferredHeaderStyleValuesForRecipes(
12418
+ layoutChoice.id,
12419
+ recipes
12420
+ ).map((styleId) => headerStyleChoice(styleId));
12421
+ stylesByLayout[unbrandHeaderLayoutId(layoutChoice.id)] = uniqueCompatibleHeaderStyleChoices(
12422
+ [...legacyStyleChoices, ...inferredStyleChoices],
12423
+ layoutChoice.id
12424
+ );
12072
12425
  }
12073
12426
  return {
12074
12427
  defaultHeaderSelection,
@@ -12488,10 +12841,10 @@ var curatedSiteStyles = [
12488
12841
  ]
12489
12842
  }),
12490
12843
  defineCuratedSiteStyle({
12491
- id: "site-style:soft-earth",
12844
+ id: SOFT_EARTH_SITE_STYLE_ID,
12492
12845
  name: "Soft Earth",
12493
12846
  description: "Warm, grounded, and editorial for yoga studios, retreats, and wellbeing communities.",
12494
- generationBrief: "Use cream space, terracotta CTAs, olive proof bands, natural imagery, generous but composed spacing, and editorial serif headings. Prefer a real intro section, image-led offering cards, warm community proof, and a simple two-column FAQ when content allows.",
12847
+ generationBrief: "Use cream space, terracotta CTAs, olive quote bands, natural imagery, generous but composed spacing, and editorial serif headings. Prefer a real intro section, image-led offering cards, warm community quotes, and an FAQ with a full-width intro above two columns of questions when content allows.",
12495
12848
  siteCreatorSelection: {
12496
12849
  kind: "site_creator_keyword_heuristic",
12497
12850
  priority: 45
@@ -12561,14 +12914,18 @@ var curatedSiteStyles = [
12561
12914
  paragraphSize: "default",
12562
12915
  headingSize: "editorial"
12563
12916
  }
12564
- }
12917
+ },
12918
+ accordions: softEarthAccordionSystem
12919
+ },
12920
+ defaultBlockVariants: {
12921
+ "block.faq": "question-columns"
12565
12922
  },
12566
12923
  recommendedAppearancePresetIds: [
12567
12924
  "hero-brand-scrim",
12568
- "intro-soft-earth-statement",
12569
- "feature-cards-soft-earth-offerings",
12570
- "testimonials-soft-earth-proof-band",
12571
- "faq-soft-earth-two-column",
12925
+ "intro-organic-statement",
12926
+ "feature-cards-raised-rule",
12927
+ "events-lined-panel",
12928
+ "testimonials-brand-background-quotes",
12572
12929
  "contact-form-panel"
12573
12930
  ],
12574
12931
  recommendedHeaderLookIds: [
@@ -12672,7 +13029,7 @@ var curatedSiteStyles = [
12672
13029
  "hero-brand-scrim-fixed-frame",
12673
13030
  "body-text-editorial-intro",
12674
13031
  "schedule-details-brand-depth",
12675
- "testimonials-accent-quote-proof",
13032
+ "testimonials-accent-quote-cards",
12676
13033
  "contact-form-brand-depth-card"
12677
13034
  ],
12678
13035
  recommendedHeaderLookIds: [
@@ -12767,6 +13124,7 @@ var themeV2RuntimeStyleFieldNames = [
12767
13124
  ];
12768
13125
  var themeV2BlockSpecificRawStyleFieldNames = [
12769
13126
  "_contentCardStyles",
13127
+ "_heroLayoutStyles",
12770
13128
  "_textCardStyles"
12771
13129
  ];
12772
13130
  var themeV2NormalEditorRawStyleFieldNames = [
@@ -12776,6 +13134,10 @@ var themeV2NormalEditorRawStyleFieldNames = [
12776
13134
  var themeV2NormalEditorRawStyleFieldNameSet = new Set(
12777
13135
  themeV2NormalEditorRawStyleFieldNames
12778
13136
  );
13137
+ var themeV2CompilerOwnedFieldNames = [
13138
+ ...themeV2RuntimeStyleFieldNames,
13139
+ ...themeV2BlockSpecificRawStyleFieldNames
13140
+ ];
12779
13141
 
12780
13142
  // ../theme-core/src/site-styles/designState.ts
12781
13143
  var themeV2DesignStateSchemaVersion = 1;
@@ -12790,6 +13152,16 @@ var heroLegibilityStrategySchema = z23.enum([
12790
13152
  "scrim-gradient",
12791
13153
  "solid-panel"
12792
13154
  ]);
13155
+ var heroCompositionIntentSchema = z23.enum([
13156
+ "center",
13157
+ "bottom-left"
13158
+ ]);
13159
+ var heroTypographyScaleIntentSchema = z23.enum([
13160
+ "quiet",
13161
+ "editorial",
13162
+ "display",
13163
+ "poster"
13164
+ ]);
12793
13165
  var sectionHeightIntentSchema = z23.enum([
12794
13166
  "default",
12795
13167
  "banner",
@@ -12825,6 +13197,7 @@ var imageSurfaceTreatmentSchema = z23.discriminatedUnion("kind", [
12825
13197
  ]);
12826
13198
  var testimonialCardTreatmentSchema = z23.enum(["default", "accent-quote"]);
12827
13199
  var tileTreatmentSchema = z23.enum(tileTreatmentValues);
13200
+ var eventListTreatmentSchema = z23.enum(eventListTreatmentValues);
12828
13201
  var eyebrowTreatmentSchema = z23.enum(eyebrowTreatmentValues);
12829
13202
  function uniqueNonEmpty(values) {
12830
13203
  const uniqueValues = [...new Set(values)];
@@ -12866,10 +13239,13 @@ var blockDesignPlanSchema = z23.object({
12866
13239
  emphasis: z23.enum(userDesignOptionCatalog.emphases),
12867
13240
  sectionHeight: sectionHeightIntentSchema.optional(),
12868
13241
  heroLegibility: heroLegibilityStrategySchema.optional(),
13242
+ heroComposition: heroCompositionIntentSchema.optional(),
13243
+ heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
12869
13244
  imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
12870
13245
  imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
12871
13246
  testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
12872
13247
  tileTreatment: tileTreatmentSchema.optional(),
13248
+ eventListTreatment: eventListTreatmentSchema.optional(),
12873
13249
  eyebrowTreatment: eyebrowTreatmentSchema.optional()
12874
13250
  }).strict();
12875
13251
  var styleAuthoritySchema = z23.discriminatedUnion("kind", [
@@ -14269,6 +14645,7 @@ function styledSection(config) {
14269
14645
  renderBackgroundImage = true,
14270
14646
  backgroundImageLoading,
14271
14647
  backgroundImageFetchPriority,
14648
+ allowOverflow = false,
14272
14649
  fullWidthPath
14273
14650
  } = config;
14274
14651
  const renderedBackgroundNodes = backgroundLayer(`${bindFrom}.background`, {
@@ -14303,7 +14680,7 @@ function styledSection(config) {
14303
14680
  // No fallback needed - transform handles all cases via defaultSpacing
14304
14681
  }
14305
14682
  },
14306
- allowOverflow: {
14683
+ allowOverflow: allowOverflow ? true : {
14307
14684
  $bind: {
14308
14685
  from: `${bindFrom}.background`,
14309
14686
  transforms: [{ id: "background.resolveAllowOverflow" }],
@@ -14998,6 +15375,14 @@ var tileTreatmentSet = new Set(tileTreatmentValues);
14998
15375
  function isTileTreatment(value) {
14999
15376
  return typeof value === "string" && tileTreatmentSet.has(value);
15000
15377
  }
15378
+ var eventListTreatmentClassMap = {
15379
+ plain: "",
15380
+ "lined-panel": "rb-event-list-treatment-lined-panel"
15381
+ };
15382
+ var eventListTreatmentSet = new Set(eventListTreatmentValues);
15383
+ function isEventListTreatment(value) {
15384
+ return typeof value === "string" && eventListTreatmentSet.has(value);
15385
+ }
15001
15386
  var sectionClassNameTransform = {
15002
15387
  id: "sectionStyles.resolveClassName",
15003
15388
  kind: "string",
@@ -15060,9 +15445,20 @@ var sectionClassNameTransform = {
15060
15445
  if (tileTreatmentClass) {
15061
15446
  classes.push(tileTreatmentClass);
15062
15447
  }
15063
- } else if (typeof tileTreatment === "string" && process.env.NODE_ENV !== "production") {
15448
+ } else if (typeof tileTreatment === "string" && process.env.NODE_ENV !== "production") {
15449
+ console.warn(
15450
+ `[sectionStyles] Invalid tileTreatment value in _sectionStyles: "${tileTreatment}". Expected one of: ${tileTreatmentValues.join(", ")}.`
15451
+ );
15452
+ }
15453
+ const eventListTreatment = input?.eventListTreatment;
15454
+ if (isEventListTreatment(eventListTreatment)) {
15455
+ const eventListTreatmentClass = eventListTreatmentClassMap[eventListTreatment];
15456
+ if (eventListTreatmentClass) {
15457
+ classes.push(eventListTreatmentClass);
15458
+ }
15459
+ } else if (typeof eventListTreatment === "string" && process.env.NODE_ENV !== "production") {
15064
15460
  console.warn(
15065
- `[sectionStyles] Invalid tileTreatment value in _sectionStyles: "${tileTreatment}". Expected one of: ${tileTreatmentValues.join(", ")}.`
15461
+ `[sectionStyles] Invalid eventListTreatment value in _sectionStyles: "${eventListTreatment}". Expected one of: ${eventListTreatmentValues.join(", ")}.`
15066
15462
  );
15067
15463
  }
15068
15464
  if (hasFixedFrameBackgroundMotion(input)) {
@@ -15500,6 +15896,35 @@ function sectionState(opts) {
15500
15896
  );
15501
15897
  }
15502
15898
 
15899
+ // ../blocks/src/system/node/fragments/headingDecoration.ts
15900
+ var defaultBindFrom = "_sectionStyles.headingDecoration";
15901
+ function headingDecoration({
15902
+ bindFrom = defaultBindFrom,
15903
+ family,
15904
+ placement,
15905
+ className
15906
+ }) {
15907
+ return el(
15908
+ "div",
15909
+ {
15910
+ "aria-hidden": "true",
15911
+ className: {
15912
+ $bind: {
15913
+ from: bindFrom,
15914
+ transforms: [
15915
+ {
15916
+ id: "ui.headingDecorationClassName",
15917
+ options: { baseClass: className, family }
15918
+ }
15919
+ ]
15920
+ }
15921
+ }
15922
+ },
15923
+ null,
15924
+ when(`${bindFrom}.placement`, { equals: placement })
15925
+ );
15926
+ }
15927
+
15503
15928
  // ../blocks/src/system/fragments/types.ts
15504
15929
  import { z as z27 } from "zod";
15505
15930
  var FRAGMENT_ID_PATTERN = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/i;
@@ -15585,47 +16010,48 @@ function validateFieldDefinitions(fields3, fragmentId) {
15585
16010
  function prefixFieldId(field, scope) {
15586
16011
  const cloned = cloneFieldDefinition2(field);
15587
16012
  cloned.id = `${scope}.${field.id}`;
15588
- cloned.defaultValue = cloneUnknown(cloned.defaultValue);
16013
+ const defaultValue = cloned.defaultValue;
16014
+ cloned.defaultValue = cloneUnknown(defaultValue);
15589
16015
  cloned.visibleRoles = cloned.visibleRoles ? [...cloned.visibleRoles] : void 0;
15590
16016
  cloned.ui = cloneUnknown(cloned.ui);
15591
16017
  return cloned;
15592
16018
  }
15593
16019
  function cloneFieldDefinition2(field) {
15594
- switch (field.type) {
15595
- case "repeater":
15596
- if (field.polymorphic && field.itemTypes) {
15597
- return {
15598
- ...field,
15599
- polymorphic: true,
15600
- itemTypes: Object.fromEntries(
15601
- Object.entries(field.itemTypes).map(([key, itemType]) => [
15602
- key,
15603
- {
15604
- ...itemType,
15605
- fields: itemType.fields.map(cloneFieldDefinition2)
15606
- }
15607
- ])
15608
- )
15609
- };
15610
- } else if (field.schema) {
15611
- return {
15612
- ...field,
15613
- schema: {
15614
- fields: field.schema.fields.map(cloneFieldDefinition2)
15615
- }
15616
- };
15617
- }
15618
- return { ...field };
15619
- case "group":
16020
+ if (field.type === "repeater") {
16021
+ if (field.polymorphic && field.itemTypes) {
16022
+ return {
16023
+ ...field,
16024
+ polymorphic: true,
16025
+ itemTypes: Object.fromEntries(
16026
+ Object.entries(field.itemTypes).map(([key, itemType]) => [
16027
+ key,
16028
+ {
16029
+ ...itemType,
16030
+ fields: itemType.fields.map(cloneFieldDefinition2)
16031
+ }
16032
+ ])
16033
+ )
16034
+ };
16035
+ }
16036
+ if (field.schema) {
15620
16037
  return {
15621
16038
  ...field,
15622
16039
  schema: {
15623
16040
  fields: field.schema.fields.map(cloneFieldDefinition2)
15624
16041
  }
15625
16042
  };
15626
- default:
15627
- return { ...field };
16043
+ }
16044
+ return { ...field };
16045
+ }
16046
+ if (field.type === "group") {
16047
+ return {
16048
+ ...field,
16049
+ schema: {
16050
+ fields: field.schema.fields.map(cloneFieldDefinition2)
16051
+ }
16052
+ };
15628
16053
  }
16054
+ return { ...field };
15629
16055
  }
15630
16056
  function cloneUnknown(value) {
15631
16057
  if (value == null || typeof value !== "object") {
@@ -16278,6 +16704,10 @@ var testimonialsHeadingFragment = defineFragment({
16278
16704
  when("content.heading"),
16279
16705
  bind("content.heading")
16280
16706
  ),
16707
+ headingDecoration({
16708
+ family: "short-center-rule",
16709
+ placement: "under-centered-heading"
16710
+ }),
16281
16711
  text(
16282
16712
  {
16283
16713
  as: "p",
@@ -16949,6 +17379,41 @@ var faqHeadingFragment = defineFragment({
16949
17379
  });
16950
17380
 
16951
17381
  // ../blocks/src/system/fragments/library/faqAccordion.ts
17382
+ function createFaqAccordionLayout(options = {}) {
17383
+ return accordionList({
17384
+ collection: "content.items",
17385
+ itemName: "faqItem",
17386
+ indexName: "faqIndex",
17387
+ accordionProps: {
17388
+ className: options.rootClassName ?? "accordion-root",
17389
+ type: "single",
17390
+ collapsible: true
17391
+ },
17392
+ itemProps: {
17393
+ className: {
17394
+ $bind: {
17395
+ from: "content._cardStyles",
17396
+ transforms: [
17397
+ {
17398
+ id: "boxStyles.all",
17399
+ options: {
17400
+ axis: "all",
17401
+ includeSpacing: false,
17402
+ baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-hidden"
17403
+ }
17404
+ }
17405
+ ]
17406
+ },
17407
+ fallback: "rb-faq-item"
17408
+ },
17409
+ iconStyle: { $bind: { from: "theme.accordions.icon.style" } },
17410
+ // Legacy theme accordion style
17411
+ iconTreatment: { $bind: { from: "content._sectionStyles.accordionIconTreatment" } }
17412
+ },
17413
+ triggerFrom: "faqItem.question",
17414
+ contentFrom: "faqItem.answer"
17415
+ });
17416
+ }
16952
17417
  var faqAccordionFragment = defineFragment({
16953
17418
  id: "faqAccordion",
16954
17419
  title: "FAQ Accordion",
@@ -16982,40 +17447,7 @@ var faqAccordionFragment = defineFragment({
16982
17447
  }
16983
17448
  }
16984
17449
  ],
16985
- layout: accordionList({
16986
- collection: "content.items",
16987
- itemName: "faqItem",
16988
- indexName: "faqIndex",
16989
- accordionProps: {
16990
- className: "accordion-root",
16991
- // CSS-first: all styling handled by theme CSS
16992
- type: "single",
16993
- collapsible: true
16994
- },
16995
- itemProps: {
16996
- className: {
16997
- $bind: {
16998
- from: "content._cardStyles",
16999
- transforms: [
17000
- {
17001
- id: "boxStyles.all",
17002
- options: {
17003
- axis: "all",
17004
- includeSpacing: false,
17005
- baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-hidden rb-border"
17006
- }
17007
- }
17008
- ]
17009
- },
17010
- fallback: "rb-faq-item"
17011
- },
17012
- iconStyle: { $bind: { from: "theme.accordions.icon.style" } },
17013
- // Legacy theme accordion style
17014
- iconTreatment: { $bind: { from: "content._sectionStyles.accordionIconTreatment" } }
17015
- },
17016
- triggerFrom: "faqItem.question",
17017
- contentFrom: "faqItem.answer"
17018
- })
17450
+ layout: createFaqAccordionLayout()
17019
17451
  });
17020
17452
 
17021
17453
  // ../blocks/src/system/fragments/library/card.ts
@@ -17962,7 +18394,8 @@ function createBlockManifestWithContentShape(config, _contentShape) {
17962
18394
  return createBlockManifest(config);
17963
18395
  }
17964
18396
  function normalizeBlockLayout(layout) {
17965
- return Array.isArray(layout) ? [...layout] : layout;
18397
+ const rawLayout = layout;
18398
+ return Array.isArray(rawLayout) ? rawLayout : rawLayout;
17966
18399
  }
17967
18400
  function deriveComponentName(id) {
17968
18401
  const base = id.replace(/^block\./, "");
@@ -18068,6 +18501,7 @@ var microLayout = styledSection({
18068
18501
  function splitLayoutWith(children) {
18069
18502
  return styledSection({
18070
18503
  children: styledContainer({
18504
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible",
18071
18505
  children: {
18072
18506
  type: "grid",
18073
18507
  props: {
@@ -18092,6 +18526,7 @@ function splitLayoutWith(children) {
18092
18526
  // The split variants render the image as a real grid column, so suppress
18093
18527
  // the default absolute background image layer while keeping color/overlay.
18094
18528
  renderBackgroundImage: false,
18529
+ allowOverflow: true,
18095
18530
  baseClass: ""
18096
18531
  });
18097
18532
  }
@@ -18245,6 +18680,21 @@ function introHeading(className) {
18245
18680
  bind("content.title")
18246
18681
  );
18247
18682
  }
18683
+ function introHeadingGroup(className) {
18684
+ return stack(
18685
+ {
18686
+ gap: "sm",
18687
+ className: "rb-intro-heading-group"
18688
+ },
18689
+ [
18690
+ introHeading(className),
18691
+ headingDecoration({
18692
+ family: "organic-squiggle",
18693
+ placement: "after-heading"
18694
+ })
18695
+ ]
18696
+ );
18697
+ }
18248
18698
  function introBody(className = "rb-prose rb-max-w-none") {
18249
18699
  return richText({ className }, bind("content.body"));
18250
18700
  }
@@ -18263,6 +18713,10 @@ function introCopyStack(options = {}) {
18263
18713
  },
18264
18714
  [
18265
18715
  introHeading(options.headingClassName ?? "rb-intro-title"),
18716
+ headingDecoration({
18717
+ family: "organic-squiggle",
18718
+ placement: "after-heading"
18719
+ }),
18266
18720
  introBody(options.bodyClassName),
18267
18721
  introCtas(options.ctaJustify)
18268
18722
  ]
@@ -18302,7 +18756,7 @@ var statementCopyLayout = styledSection({
18302
18756
  className: "rb-intro rb-intro-statement rb-grid rb-grid-cols-1 rb-gap-8 rb-md-grid-cols-2 rb-md-items-start"
18303
18757
  },
18304
18758
  [
18305
- introHeading("rb-intro-title rb-max-w-xl"),
18759
+ introHeadingGroup("rb-intro-title rb-max-w-xl"),
18306
18760
  stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
18307
18761
  introBody(),
18308
18762
  introCtas("start")
@@ -18323,7 +18777,7 @@ var statementMediaLayout = styledSection({
18323
18777
  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"
18324
18778
  },
18325
18779
  [
18326
- introHeading("rb-intro-title rb-max-w-xl"),
18780
+ introHeadingGroup("rb-intro-title rb-max-w-xl"),
18327
18781
  stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
18328
18782
  introBody(),
18329
18783
  introCtas("start")
@@ -19325,6 +19779,9 @@ function isNodeDefinitionArray(layout) {
19325
19779
  }
19326
19780
  var headingLayout = fragmentLayoutNode(faqHeadingFragment.layout);
19327
19781
  var accordionLayout = fragmentLayoutNode(faqAccordionFragment.layout);
19782
+ var questionColumnsAccordionLayout = createFaqAccordionLayout({
19783
+ rootClassName: "accordion-root rb-faq-question-columns rb-grid rb-grid-cols-1 rb-gap-4 rb-lg-grid-cols-2"
19784
+ });
19328
19785
  var defaultLayout = styledSection({
19329
19786
  children: styledContainer({
19330
19787
  baseClassName: "rb-relative rb-isolate",
@@ -19338,11 +19795,24 @@ var twoColumnLayout = styledSection({
19338
19795
  children: el(
19339
19796
  "div",
19340
19797
  {
19341
- className: "rb-faq-two-column rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
19798
+ className: "rb-faq-split-heading rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
19342
19799
  },
19343
19800
  [
19344
- el("div", { className: "rb-faq-two-column-heading" }, [headingLayout]),
19345
- el("div", { className: "rb-faq-two-column-accordion" }, [accordionLayout])
19801
+ el("div", { className: "rb-faq-split-heading-copy" }, [headingLayout]),
19802
+ el("div", { className: "rb-faq-split-heading-accordion" }, [accordionLayout])
19803
+ ]
19804
+ )
19805
+ }),
19806
+ baseClass: ""
19807
+ });
19808
+ var questionColumnsLayout = styledSection({
19809
+ children: styledContainer({
19810
+ baseClassName: "rb-relative rb-isolate",
19811
+ children: stack(
19812
+ { gap: "xl", className: "rb-w-full" },
19813
+ [
19814
+ headingLayout,
19815
+ questionColumnsAccordionLayout
19346
19816
  ]
19347
19817
  )
19348
19818
  }),
@@ -19367,7 +19837,8 @@ var faqManifest = createBlockManifest({
19367
19837
  layout: defaultLayout,
19368
19838
  variants: {
19369
19839
  default: defaultLayout,
19370
- "two-column": twoColumnLayout
19840
+ "two-column": twoColumnLayout,
19841
+ "question-columns": questionColumnsLayout
19371
19842
  },
19372
19843
  defaultVariant: "default",
19373
19844
  variantOptions: {
@@ -19378,6 +19849,10 @@ var faqManifest = createBlockManifest({
19378
19849
  "two-column": {
19379
19850
  label: "Two column",
19380
19851
  description: "A left heading column with FAQ items on the right."
19852
+ },
19853
+ "question-columns": {
19854
+ label: "Question columns",
19855
+ description: "A full-width heading above FAQ items split into two columns."
19381
19856
  }
19382
19857
  },
19383
19858
  description: "Accordion of frequently asked questions and answers.",
@@ -19466,16 +19941,20 @@ var marqueeLoopTransform = {
19466
19941
  summary: "Repeat an array to a minimum length, then duplicate it for seamless marquee looping",
19467
19942
  schema: marqueeLoopOptionsSchema,
19468
19943
  run: (value, options) => {
19469
- if (!Array.isArray(value) || value.length === 0) return [];
19944
+ const items = toUnknownArray(value);
19945
+ if (items.length === 0) return [];
19470
19946
  const minItems = options?.minItems ?? 10;
19471
19947
  const base = [];
19472
19948
  while (base.length < minItems) {
19473
- base.push(...value);
19949
+ base.push(...items);
19474
19950
  if (base.length > 1e3) break;
19475
19951
  }
19476
19952
  return [...base, ...base];
19477
19953
  }
19478
19954
  };
19955
+ function toUnknownArray(value) {
19956
+ return Array.isArray(value) ? value : [];
19957
+ }
19479
19958
  var formattingTransforms = [
19480
19959
  uppercaseTransform,
19481
19960
  fallbackTransform,
@@ -19499,9 +19978,21 @@ var eyebrowTreatmentClassMap = {
19499
19978
  "accent-pill-bounce": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-accent rb-eyebrow-treatment-pill-bounce"
19500
19979
  };
19501
19980
  var eyebrowTreatmentSet = new Set(eyebrowTreatmentValues);
19981
+ var headingDecorationFamilySet = new Set(visibleHeadingDecorationFamilyValues);
19982
+ var headingDecorationPlacementSet = new Set(visibleHeadingDecorationPlacementValues);
19983
+ var headingDecorationColorTokenSet = new Set(headingDecorationColorTokenValues);
19502
19984
  function isEyebrowTreatment(value) {
19503
19985
  return typeof value === "string" && eyebrowTreatmentSet.has(value);
19504
19986
  }
19987
+ function isHeadingDecorationFamily(value) {
19988
+ return typeof value === "string" && headingDecorationFamilySet.has(value);
19989
+ }
19990
+ function isHeadingDecorationPlacement(value) {
19991
+ return typeof value === "string" && headingDecorationPlacementSet.has(value);
19992
+ }
19993
+ function isHeadingDecorationColorToken(value) {
19994
+ return typeof value === "string" && headingDecorationColorTokenSet.has(value);
19995
+ }
19505
19996
  var imageGalleryCornerClassMap = {
19506
19997
  none: "",
19507
19998
  sm: "rb-rounded-sm",
@@ -19605,6 +20096,10 @@ var sectionStateToneTransform = {
19605
20096
  summary: "Map semantic section-state kind to feedback tone",
19606
20097
  run: (value) => sectionStateToneFromUnknown(value)
19607
20098
  };
20099
+ var heroTitleLengthThresholds = {
20100
+ medium: { maxCharacters: 42, maxWords: 6 },
20101
+ long: { maxCharacters: 78, maxWords: 11 }
20102
+ };
19608
20103
  function isPlainObject(value) {
19609
20104
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
19610
20105
  }
@@ -19612,6 +20107,14 @@ function readString(obj, key) {
19612
20107
  const v = obj[key];
19613
20108
  return typeof v === "string" ? v : void 0;
19614
20109
  }
20110
+ function resolveGeneratedHeroLayoutStyles(content) {
20111
+ const raw = content._heroLayoutStyles;
20112
+ return isPlainObject(raw) ? raw : null;
20113
+ }
20114
+ function readHeroLayoutString(content, generatedKey, fallbackKey = generatedKey) {
20115
+ const generated = resolveGeneratedHeroLayoutStyles(content);
20116
+ return generated && typeof generated[generatedKey] === "string" ? generated[generatedKey] : readString(content, fallbackKey);
20117
+ }
19615
20118
  function resolveHeroVariant(content) {
19616
20119
  const variant = readString(content, "variant");
19617
20120
  if (variant && variant.trim()) return variant.trim();
@@ -19620,14 +20123,14 @@ function resolveHeroVariant(content) {
19620
20123
  return null;
19621
20124
  }
19622
20125
  function resolveHeroContentAlignment(content) {
19623
- const raw = readString(content, "contentAlignment");
20126
+ const raw = readHeroLayoutString(content, "contentAlignment");
19624
20127
  if (raw === "left" || raw === "center" || raw === "right") return raw;
19625
20128
  const variant = resolveHeroVariant(content);
19626
20129
  if (variant === "split" || variant === "splitReverse") return "left";
19627
20130
  return "center";
19628
20131
  }
19629
20132
  function resolveHeroVerticalAlignment(content) {
19630
- const raw = readString(content, "verticalAlignment");
20133
+ const raw = readHeroLayoutString(content, "verticalAlignment");
19631
20134
  if (raw === "top" || raw === "center" || raw === "bottom") return raw;
19632
20135
  const sectionStyles = asPartialObject(content._sectionStyles);
19633
20136
  const minHeight = sectionStyles?.minHeight;
@@ -19637,11 +20140,29 @@ function resolveHeroVerticalAlignment(content) {
19637
20140
  return "top";
19638
20141
  }
19639
20142
  function resolveHeroContentMaxWidth(content) {
19640
- const raw = readString(content, "contentMaxWidth");
20143
+ const raw = readHeroLayoutString(content, "contentMaxWidth");
19641
20144
  if (raw === "default" || raw === "narrow" || raw === "medium" || raw === "wide")
19642
20145
  return raw;
19643
20146
  return "default";
19644
20147
  }
20148
+ function resolveHeroTypographyScale(content) {
20149
+ const raw = readHeroLayoutString(
20150
+ content,
20151
+ "typographyScale",
20152
+ "heroTypographyScale"
20153
+ );
20154
+ if (raw === "quiet" || raw === "editorial" || raw === "display" || raw === "poster") {
20155
+ return raw;
20156
+ }
20157
+ return null;
20158
+ }
20159
+ function resolveHeroTitleLength(content) {
20160
+ const headline = readString(content, "headline")?.trim() ?? "";
20161
+ const wordCount = headline.length === 0 ? 0 : headline.split(/\s+/).length;
20162
+ if (headline.length > heroTitleLengthThresholds.long.maxCharacters || wordCount > heroTitleLengthThresholds.long.maxWords) return "long";
20163
+ if (headline.length > heroTitleLengthThresholds.medium.maxCharacters || wordCount > heroTitleLengthThresholds.medium.maxWords) return "medium";
20164
+ return "short";
20165
+ }
19645
20166
  var heroContentWrapperClassSchema = z33.object({
19646
20167
  base: z33.string().optional()
19647
20168
  });
@@ -19654,6 +20175,8 @@ var heroContentWrapperClassTransform = {
19654
20175
  const content = isPlainObject(value) ? value : isPlainObject(context.data) ? context.data : {};
19655
20176
  const alignment = resolveHeroContentAlignment(content);
19656
20177
  const maxWidth = resolveHeroContentMaxWidth(content);
20178
+ const typographyScale = resolveHeroTypographyScale(content);
20179
+ const titleLength = resolveHeroTitleLength(content);
19657
20180
  const textAlignClass = alignment === "center" ? "rb-text-center" : alignment === "right" ? "rb-text-right" : "rb-text-left";
19658
20181
  const maxWidthClass = maxWidth === "narrow" ? "rb-max-w-2xl" : maxWidth === "medium" ? "rb-max-w-3xl" : maxWidth === "wide" ? "rb-max-w-5xl" : "";
19659
20182
  const positionClass = alignment === "center" ? "rb-mx-auto" : alignment === "right" ? "rb-ml-auto" : "";
@@ -19661,7 +20184,9 @@ var heroContentWrapperClassTransform = {
19661
20184
  options?.base,
19662
20185
  textAlignClass,
19663
20186
  maxWidthClass,
19664
- positionClass
20187
+ positionClass,
20188
+ typographyScale ? `rb-hero-typography-${typographyScale}` : "",
20189
+ `rb-hero-title-${titleLength}`
19665
20190
  ]);
19666
20191
  }
19667
20192
  };
@@ -19961,11 +20486,67 @@ var uiTransforms = [
19961
20486
  const treatment = isEyebrowTreatment(value) ? value : "plain";
19962
20487
  return joinClasses3([baseClass, eyebrowTreatmentClassMap[treatment]]);
19963
20488
  }
20489
+ },
20490
+ {
20491
+ id: "ui.headingDecorationClassName",
20492
+ kind: "string",
20493
+ summary: "Apply constrained Theme V2 heading decoration classes",
20494
+ run: (value, options) => {
20495
+ const baseClass = typeof options?.baseClass === "string" && options.baseClass.trim() ? options.baseClass : "rb-heading-decoration";
20496
+ const decoration = asPartialObject(value);
20497
+ const family = isHeadingDecorationFamily(decoration?.family) ? decoration.family : null;
20498
+ const allowedFamily = isHeadingDecorationFamily(options?.family) ? options.family : null;
20499
+ const placement = isHeadingDecorationPlacement(decoration?.placement) ? decoration.placement : null;
20500
+ const colorToken = isHeadingDecorationColorToken(decoration?.colorToken) ? decoration.colorToken : "primary";
20501
+ if (!family || !placement) return "rb-hidden";
20502
+ if (allowedFamily && family !== allowedFamily) return "rb-hidden";
20503
+ return joinClasses3([
20504
+ baseClass,
20505
+ `rb-heading-decoration-${family}`,
20506
+ `rb-heading-decoration-placement-${placement}`,
20507
+ `rb-heading-decoration-color-${colorToken}`
20508
+ ]);
20509
+ }
19964
20510
  }
19965
20511
  ];
19966
20512
 
19967
20513
  // ../blocks/src/system/transforms/registry/layout.ts
19968
20514
  import { z as z34 } from "zod";
20515
+
20516
+ // ../theme-core/src/siteChromePlacement.ts
20517
+ var HEADER_POSITIONINGS = ["static", "sticky", "fixed"];
20518
+ function parseHeaderPositioning(value) {
20519
+ return isHeaderPositioning(value) ? value : "static";
20520
+ }
20521
+ function isHeaderPositioning(value) {
20522
+ return typeof value === "string" && HEADER_POSITIONINGS.includes(value);
20523
+ }
20524
+ function planSiteChromePlacement(positioning) {
20525
+ switch (positioning) {
20526
+ case "static":
20527
+ return {
20528
+ kind: "static",
20529
+ headerRootClassName: null,
20530
+ standaloneShellClassName: null
20531
+ };
20532
+ case "sticky":
20533
+ return {
20534
+ kind: "sticky",
20535
+ headerRootClassName: "rb-sticky rb-top-0",
20536
+ standaloneShellClassName: "sticky top-0 z-40 w-full"
20537
+ };
20538
+ case "fixed":
20539
+ return {
20540
+ kind: "fixed",
20541
+ headerRootClassName: "rb-fixed rb-top-0 rb-left-0 rb-right-0",
20542
+ standaloneShellClassName: "fixed left-0 right-0 top-0 z-40 w-full"
20543
+ };
20544
+ default:
20545
+ return assertNever(positioning);
20546
+ }
20547
+ }
20548
+
20549
+ // ../blocks/src/system/transforms/registry/layout.ts
19969
20550
  var joinClasses4 = (parts) => parts.filter(
19970
20551
  (part) => typeof part === "string" && part.trim().length > 0
19971
20552
  ).join(" ").replace(/\s+/g, " ").trim();
@@ -20081,7 +20662,8 @@ var headerRootClassTransform = {
20081
20662
  ...options
20082
20663
  };
20083
20664
  const content = asPartialObject(value) ?? {};
20084
- const positioning = typeof content.positioning === "string" ? content.positioning : "static";
20665
+ const positioning = parseHeaderPositioning(content.positioning);
20666
+ const placement = planSiteChromePlacement(positioning);
20085
20667
  const shrinkOnScroll = Boolean(content.shrinkOnScroll);
20086
20668
  const header = asPartialObject(value);
20087
20669
  const visuals = resolveHeaderVisualStyles(header, context.theme);
@@ -20093,14 +20675,14 @@ var headerRootClassTransform = {
20093
20675
  if (config.blur) classes.push(config.blur);
20094
20676
  if (config.blurSupport) classes.push(config.blurSupport);
20095
20677
  }
20096
- if (positioning === "sticky") {
20678
+ if (placement.kind === "sticky") {
20097
20679
  classes.push(
20098
20680
  visuals.isTransparent ? config.stickyTransparent : config.sticky
20099
20681
  );
20100
- } else if (positioning === "fixed") {
20682
+ } else if (placement.kind === "fixed") {
20101
20683
  classes.push(config.fixed);
20102
20684
  }
20103
- if (shrinkOnScroll && (positioning === "sticky" || positioning === "fixed")) {
20685
+ if (shrinkOnScroll && placement.kind !== "static") {
20104
20686
  classes.push(config.shrink);
20105
20687
  }
20106
20688
  const VALID_VARIANTS = [
@@ -20635,6 +21217,10 @@ function desktopOnlyDisplay(display) {
20635
21217
  return `rb-hidden ${LARGE_DISPLAY_CLASSES[display]}`;
20636
21218
  }
20637
21219
 
21220
+ // ../theme-core/src/siteChromeOverlayClearance.ts
21221
+ var SITE_CHROME_VISIBLE_HEADER_ATTR = "data-site-chrome-visible-header";
21222
+ var SITE_CHROME_VISIBLE_HEADER_SELECTOR = `[${SITE_CHROME_VISIBLE_HEADER_ATTR}="true"]`;
21223
+
20638
21224
  // ../blocks/src/system/blocks/site-header.ts
20639
21225
  var logoRow = link(
20640
21226
  {
@@ -20907,6 +21493,7 @@ var transparentLayout = inline(
20907
21493
  );
20908
21494
  var floatingLayout = inline(
20909
21495
  {
21496
+ [SITE_CHROME_VISIBLE_HEADER_ATTR]: "true",
20910
21497
  className: bindProp("$root.theme.header.maxWidth", {
20911
21498
  transforms: pipe(
20912
21499
  tx("layout.maxWidthClass", {
@@ -21852,6 +22439,10 @@ var sectionHeading = stack(
21852
22439
  when("content.title"),
21853
22440
  bind("content.title")
21854
22441
  ),
22442
+ headingDecoration({
22443
+ family: "short-center-rule",
22444
+ placement: "under-centered-heading"
22445
+ }),
21855
22446
  richText(
21856
22447
  {
21857
22448
  className: "rb-feature-cards-description rb-prose rb-mx-auto rb-max-w-none",
@@ -23033,8 +23624,8 @@ var eventSurfaceScopeValues = [
23033
23624
  "custom"
23034
23625
  ];
23035
23626
  var eventScheduleScopeValues = ["any", "recurring", "oneOff"];
23036
- var asEventCategoryId = (value) => value;
23037
- var asVenueId = (value) => value;
23627
+ var unsafeAsEventCategoryId = (value) => value;
23628
+ var unsafeAsVenueId = (value) => value;
23038
23629
  function normalizeEventBlockKind(value) {
23039
23630
  return value === "courses" || value === "events" ? value : "all";
23040
23631
  }
@@ -23060,10 +23651,10 @@ function normalizeEventCategoryIds(value) {
23060
23651
  if (Array.isArray(value)) {
23061
23652
  return normalizeIdList(
23062
23653
  value.filter((entry) => typeof entry === "string")
23063
- ).map(asEventCategoryId);
23654
+ ).map(unsafeAsEventCategoryId);
23064
23655
  }
23065
23656
  if (typeof value === "string") {
23066
- return normalizeIdList(value.split(",")).map(asEventCategoryId);
23657
+ return normalizeIdList(value.split(",")).map(unsafeAsEventCategoryId);
23067
23658
  }
23068
23659
  return [];
23069
23660
  }
@@ -23076,7 +23667,7 @@ function normalizeEventVenueId(value) {
23076
23667
  return null;
23077
23668
  }
23078
23669
  const trimmed = value.trim();
23079
- return trimmed ? asVenueId(trimmed) : null;
23670
+ return trimmed ? unsafeAsVenueId(trimmed) : null;
23080
23671
  }
23081
23672
  function normalizeEventStaffMemberId(value) {
23082
23673
  if (typeof value !== "string") {
@@ -24275,7 +24866,7 @@ var COLUMN_CLASSES = {
24275
24866
  };
24276
24867
  function getContainerClass(layout, columns) {
24277
24868
  if (layout === "compact") {
24278
- return "event-listing-compact-container rb-flex rb-flex-col rb-gap-2";
24869
+ return "event-listing-compact-container rb-flex rb-flex-col";
24279
24870
  }
24280
24871
  if (layout === "stack") {
24281
24872
  return "rb-flex rb-flex-col rb-gap-6";
@@ -27103,6 +27694,7 @@ import { z as z53 } from "zod";
27103
27694
  var storedProductCartItemSchema = z53.object({
27104
27695
  kind: z53.literal("product"),
27105
27696
  productId: z53.string().min(1),
27697
+ productCategoryId: z53.string().min(1).optional().nullable(),
27106
27698
  variantId: z53.string().min(1).optional().nullable(),
27107
27699
  title: z53.string().min(1),
27108
27700
  variantTitle: z53.string().optional().nullable(),
@@ -29607,6 +30199,10 @@ var scheduleTileTreatments = [
29607
30199
  "quiet",
29608
30200
  "brand-depth"
29609
30201
  ];
30202
+ var eventListTreatments = [
30203
+ "plain",
30204
+ "lined-panel"
30205
+ ];
29610
30206
  function scheduleDetailsCapable() {
29611
30207
  return declareBlockDesignCapability({
29612
30208
  sectionSurfaces: "supported",
@@ -29615,6 +30211,14 @@ function scheduleDetailsCapable() {
29615
30211
  tileTreatments: scheduleTileTreatments
29616
30212
  });
29617
30213
  }
30214
+ function eventListCapable() {
30215
+ return declareBlockDesignCapability({
30216
+ sectionSurfaces: "supported",
30217
+ contentFrames: ["plain"],
30218
+ itemSurfaces: "unsupported",
30219
+ eventListTreatments
30220
+ });
30221
+ }
29618
30222
  function defaultBoundaryBias(visualWeight) {
29619
30223
  return visualWeight === "featured" || visualWeight === "immersive" ? "clear" : "soft";
29620
30224
  }
@@ -29834,7 +30438,8 @@ var systemBlockDefinitionsRaw = [
29834
30438
  flow: bodyFlow,
29835
30439
  layoutProfiles: [
29836
30440
  layoutProfile({ variantKey: "default", family: "stack", weight: "standard" }),
29837
- layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
30441
+ layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" }),
30442
+ layoutProfile({ variantKey: "question-columns", family: "grid", weight: "standard" })
29838
30443
  ]
29839
30444
  })),
29840
30445
  withDesignCapability("block.site-header", siteHeaderBlockDefinition, declareNoBlockDesignCapability("site-chrome"), defineBlockDesignMetadata({
@@ -29928,11 +30533,11 @@ var systemBlockDefinitionsRaw = [
29928
30533
  flow: offeringsFlow,
29929
30534
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "centered", weight: "featured" })]
29930
30535
  })),
29931
- withDesignCapability("block.event-listing", eventListingBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
30536
+ withDesignCapability("block.event-listing", eventListingBlockDefinition, eventListCapable(), defineBlockDesignMetadata({
29932
30537
  flow: offeringsFlow,
29933
30538
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "stack", weight: "standard" })]
29934
30539
  })),
29935
- withDesignCapability("block.event-calendar", eventCalendarBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
30540
+ withDesignCapability("block.event-calendar", eventCalendarBlockDefinition, eventListCapable(), defineBlockDesignMetadata({
29936
30541
  flow: offeringsFlow,
29937
30542
  layoutProfiles: [
29938
30543
  layoutProfile({ variantKey: "combined", family: "grid", weight: "standard" }),
@@ -31029,6 +31634,15 @@ ${root} {
31029
31634
  `;
31030
31635
  }
31031
31636
 
31637
+ // ../theme-core/src/runtime/themeCssVarNames.ts
31638
+ var THEME_RADIUS_CSS_VARS = {
31639
+ block: "--rb-block-radius",
31640
+ button: "--rb-button-radius",
31641
+ input: "--rb-input-radius",
31642
+ legacyCard: "--radius-card",
31643
+ legacyControl: "--radius-control"
31644
+ };
31645
+
31032
31646
  // ../theme-core/src/blocks/vars/customer-portal.ts
31033
31647
  function generateCustomerPortalVars({
31034
31648
  themeId
@@ -31042,6 +31656,11 @@ ${root} {
31042
31656
  --cp-muted: rgb(var(--tb-mutedText));
31043
31657
  --cp-border: rgb(var(--tb-border));
31044
31658
  --cp-shadow: var(--shadow-elev);
31659
+ --cp-primary: rgb(var(--tb-primary));
31660
+ --cp-primary-hover: rgb(var(--tb-primary-700, var(--tb-primary)));
31661
+ --cp-error: rgb(var(--tb-destructive));
31662
+ --cp-card-radius: var(${THEME_RADIUS_CSS_VARS.block}, var(${THEME_RADIUS_CSS_VARS.legacyCard}, 0.75rem));
31663
+ --cp-control-radius: var(${THEME_RADIUS_CSS_VARS.input}, var(${THEME_RADIUS_CSS_VARS.legacyControl}, 0.5rem));
31045
31664
 
31046
31665
  /* Shared tab bar (underline style) */
31047
31666
  --rb-tab-border-width: 1px;
@@ -31092,7 +31711,7 @@ ${root} {
31092
31711
  --rb-modal-bg: var(--cp-card-bg);
31093
31712
  --rb-modal-border: var(--cp-card-border);
31094
31713
  --rb-modal-shadow: var(--shadow-lg, var(--shadow-elev));
31095
- --rb-modal-radius: var(--radius-card);
31714
+ --rb-modal-radius: var(--cp-card-radius);
31096
31715
  --rb-modal-max-width: 560px;
31097
31716
 
31098
31717
  /* Header */
@@ -32473,6 +33092,9 @@ import { jsx as jsx5 } from "react/jsx-runtime";
32473
33092
  import * as React from "react";
32474
33093
  import { Fragment, jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
32475
33094
 
33095
+ // ../theme-core/src/fonts/uploadFormat.ts
33096
+ var MAX_FONT_UPLOAD_BYTES = 5 * 1024 * 1024;
33097
+
32476
33098
  // ../theme-core/src/runtime/buildThemeRuntimeFromBridge.ts
32477
33099
  import { z as z60 } from "zod";
32478
33100
  var themeBridgeConfigSchema = z60.object({
@@ -32669,11 +33291,11 @@ function normalizeContent(block) {
32669
33291
  }
32670
33292
  function normalizeParams(input) {
32671
33293
  if (!input || typeof input !== "object") return {};
32672
- const entries = Object.entries(input).map(([key, value]) => [
32673
- key,
32674
- coerceToString(value)
32675
- ]);
32676
- return Object.fromEntries(entries);
33294
+ const output = {};
33295
+ for (const [key, value] of Object.entries(input)) {
33296
+ output[key] = coerceToString(value);
33297
+ }
33298
+ return output;
32677
33299
  }
32678
33300
  function isNonArrayObject(value) {
32679
33301
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -32889,10 +33511,16 @@ var dashboardConfigSchema = z61.object({
32889
33511
  var fieldDefinitionInputSchema = unsafeRetypeZodSchema(fieldSchema);
32890
33512
  var nodeDefinitionSchema = unsafeRetypeZodSchema(NodeSchema);
32891
33513
  var sdkLoaderEndpointSchema = z61.enum(SUPPORTED_LOADER_ENDPOINTS);
33514
+ var loaderFallbackScalarSchema = z61.union([
33515
+ z61.string(),
33516
+ z61.number(),
33517
+ z61.boolean(),
33518
+ z61.null()
33519
+ ]);
32892
33520
  var loaderParamBindingSchema = z61.object({
32893
33521
  $bind: z61.object({
32894
33522
  from: z61.string().min(1, "Binding path is required"),
32895
- fallback: z61.string().optional()
33523
+ fallback: loaderFallbackScalarSchema.optional()
32896
33524
  })
32897
33525
  });
32898
33526
  var loaderParamValueSchema = z61.union([
@@ -33038,9 +33666,13 @@ var sdkBlockFieldOptionsMapSchema = z61.record(
33038
33666
  var sdkContentTypeTemplateConfigSchema = z61.object({
33039
33667
  blocks: z61.array(z61.unknown())
33040
33668
  }).passthrough();
33669
+ var sdkContentTypeOrderingConfigSchema = z61.object({
33670
+ mode: z61.enum(["default", "manual"]).optional()
33671
+ }).optional();
33041
33672
  var sdkContentTypeConfigSchema = z61.object({
33042
33673
  key: z61.string().min(1),
33043
33674
  fields: z61.array(z61.unknown()),
33675
+ ordering: sdkContentTypeOrderingConfigSchema,
33044
33676
  template: sdkContentTypeTemplateConfigSchema.nullable().optional()
33045
33677
  }).passthrough();
33046
33678
  var sdkContentConfigSchema = z61.object({
@@ -33253,6 +33885,7 @@ var COURSE_ENROLLMENT_REFUND_FAILED_CODES = [
33253
33885
  ];
33254
33886
 
33255
33887
  // ../api/src/bookingVerticals.ts
33888
+ import { z as z63 } from "zod";
33256
33889
  var VERTICAL_IDS = [
33257
33890
  "yoga_wellness",
33258
33891
  "fitness_pt",
@@ -33331,6 +33964,132 @@ var VERTICAL_ID_SET = new Set(VERTICAL_IDS);
33331
33964
  var VERTICAL_PRESET_ID_SET = new Set(
33332
33965
  VERTICAL_BOOKING_PRESETS.map((presetDefinition) => presetDefinition.id)
33333
33966
  );
33967
+ function parseVerticalId(value) {
33968
+ return typeof value === "string" && VERTICAL_ID_SET.has(value) ? value : null;
33969
+ }
33970
+ function parseVerticalPresetId(value) {
33971
+ return typeof value === "string" && VERTICAL_PRESET_ID_SET.has(value) ? value : null;
33972
+ }
33973
+ function getVerticalPresetDefinition(presetId) {
33974
+ const definition = VERTICAL_BOOKING_PRESETS.find((presetDefinition) => presetDefinition.id === presetId);
33975
+ if (!definition) {
33976
+ throw new Error(`Unhandled vertical preset id: ${presetId}`);
33977
+ }
33978
+ return definition;
33979
+ }
33980
+ function toNonEmptyVerticalPresetIds(presetIds) {
33981
+ const firstPresetId = presetIds[0];
33982
+ return firstPresetId ? [firstPresetId, ...presetIds.slice(1)] : null;
33983
+ }
33984
+ function createConfiguredSiteVerticalBookingConfig(verticalId, selectedPresetIds) {
33985
+ return {
33986
+ verticalId,
33987
+ selectedPresetIds
33988
+ };
33989
+ }
33990
+ function createSiteVerticalBookingConfig(verticalId, selectedPresetIds) {
33991
+ const nonEmptyPresetIds = toNonEmptyVerticalPresetIds(selectedPresetIds);
33992
+ return nonEmptyPresetIds ? createConfiguredSiteVerticalBookingConfig(verticalId, nonEmptyPresetIds) : null;
33993
+ }
33994
+ function resolveSiteVerticalBookingConfig(rawConfig) {
33995
+ if (!rawConfig) {
33996
+ return { kind: "unconfigured", config: DEFAULT_SITE_VERTICAL_BOOKING_CONFIG };
33997
+ }
33998
+ const verticalId = parseVerticalId(rawConfig.verticalId);
33999
+ const rawPresetIds = Array.isArray(rawConfig.selectedPresetIds) ? rawConfig.selectedPresetIds : [];
34000
+ const selectedPresetIds = rawPresetIds.map(parseVerticalPresetId).filter((presetId) => Boolean(presetId));
34001
+ const config = {
34002
+ verticalId,
34003
+ selectedPresetIds
34004
+ };
34005
+ if (!verticalId && selectedPresetIds.length === 0) {
34006
+ return { kind: "unconfigured", config: DEFAULT_SITE_VERTICAL_BOOKING_CONFIG };
34007
+ }
34008
+ const issues = getSiteVerticalConfigIssues(rawConfig, config);
34009
+ if (issues.length > 0) {
34010
+ return { kind: "invalid", config, issues };
34011
+ }
34012
+ const configuredConfig = verticalId ? createSiteVerticalBookingConfig(verticalId, selectedPresetIds) : null;
34013
+ if (!configuredConfig) {
34014
+ return { kind: "invalid", config, issues: ["empty_selected_presets"] };
34015
+ }
34016
+ return {
34017
+ kind: "configured",
34018
+ config: configuredConfig,
34019
+ selectedPresets: configuredConfig.selectedPresetIds.map(getVerticalPresetDefinition)
34020
+ };
34021
+ }
34022
+ function getSiteVerticalConfigIssues(rawConfig, config) {
34023
+ const issues = /* @__PURE__ */ new Set();
34024
+ if (rawConfig.verticalId != null && !config.verticalId) {
34025
+ issues.add("unknown_vertical");
34026
+ }
34027
+ if (!config.verticalId && config.selectedPresetIds.length > 0) {
34028
+ issues.add("missing_vertical");
34029
+ }
34030
+ const rawPresetIds = Array.isArray(rawConfig.selectedPresetIds) ? rawConfig.selectedPresetIds : [];
34031
+ if (rawPresetIds.some((presetId) => parseVerticalPresetId(presetId) === null)) {
34032
+ issues.add("unknown_preset");
34033
+ }
34034
+ if (config.verticalId && config.selectedPresetIds.length === 0) {
34035
+ issues.add("empty_selected_presets");
34036
+ }
34037
+ const seenBehaviours = /* @__PURE__ */ new Set();
34038
+ for (const presetId of config.selectedPresetIds) {
34039
+ const presetDefinition = getVerticalPresetDefinition(presetId);
34040
+ if (config.verticalId && presetDefinition.verticalId !== config.verticalId) {
34041
+ issues.add("preset_vertical_mismatch");
34042
+ }
34043
+ if (presetDefinition.availability === "future") {
34044
+ issues.add("future_preset_selected");
34045
+ }
34046
+ if (seenBehaviours.has(presetDefinition.canonicalBehaviour)) {
34047
+ issues.add("duplicate_canonical_behaviour");
34048
+ }
34049
+ seenBehaviours.add(presetDefinition.canonicalBehaviour);
34050
+ }
34051
+ return [...issues];
34052
+ }
34053
+ var VerticalIdSchema = z63.string().trim().transform((value, ctx) => {
34054
+ const parsed = parseVerticalId(value);
34055
+ if (!parsed) {
34056
+ ctx.addIssue({
34057
+ code: z63.ZodIssueCode.custom,
34058
+ message: "Unknown booking vertical"
34059
+ });
34060
+ return z63.NEVER;
34061
+ }
34062
+ return parsed;
34063
+ });
34064
+ var VerticalPresetIdSchema = z63.string().trim().transform((value, ctx) => {
34065
+ const parsed = parseVerticalPresetId(value);
34066
+ if (!parsed) {
34067
+ ctx.addIssue({
34068
+ code: z63.ZodIssueCode.custom,
34069
+ message: "Unknown booking preset"
34070
+ });
34071
+ return z63.NEVER;
34072
+ }
34073
+ return parsed;
34074
+ });
34075
+ var BookingVerticalConfigSchema = z63.object({
34076
+ verticalId: VerticalIdSchema.nullable(),
34077
+ selectedPresetIds: z63.array(VerticalPresetIdSchema).max(20)
34078
+ }).transform((value, ctx) => {
34079
+ const resolved = resolveSiteVerticalBookingConfig(value);
34080
+ if (resolved.kind === "invalid") {
34081
+ ctx.addIssue({
34082
+ code: z63.ZodIssueCode.custom,
34083
+ message: `Invalid booking vertical config: ${resolved.issues.join(", ")}`
34084
+ });
34085
+ return z63.NEVER;
34086
+ }
34087
+ return resolved.config;
34088
+ });
34089
+ var DEFAULT_SITE_VERTICAL_BOOKING_CONFIG = {
34090
+ verticalId: null,
34091
+ selectedPresetIds: []
34092
+ };
33334
34093
  function preset(id, verticalId, canonicalBehaviour, label, pluralLabel, description, availability = "onboarding") {
33335
34094
  return {
33336
34095
  id,
@@ -33350,51 +34109,51 @@ function isRecord3(value) {
33350
34109
  }
33351
34110
 
33352
34111
  // ../api/src/appointmentSetup.ts
33353
- import { z as z63 } from "zod";
34112
+ import { z as z64 } from "zod";
33354
34113
  var APPOINTMENT_SETUP_MAX_MINUTES = 1440;
33355
- var appointmentSetupRefSchema = z63.discriminatedUnion("kind", [
33356
- z63.object({ kind: z63.literal("existing"), id: z63.string().min(1) }),
33357
- z63.object({ kind: z63.literal("new"), draftId: z63.string().min(1) })
34114
+ var appointmentSetupRefSchema = z64.discriminatedUnion("kind", [
34115
+ z64.object({ kind: z64.literal("existing"), id: z64.string().min(1) }),
34116
+ z64.object({ kind: z64.literal("new"), draftId: z64.string().min(1) })
33358
34117
  ]);
33359
- var appointmentSetupVenueChoiceSchema = z63.discriminatedUnion("kind", [
33360
- z63.object({ kind: z63.literal("none") }),
33361
- z63.object({ kind: z63.literal("existing"), venueId: z63.string().min(1) }),
33362
- z63.object({
33363
- kind: z63.literal("create"),
33364
- draftId: z63.string().min(1),
33365
- title: z63.string().trim().min(1),
33366
- description: z63.string().nullable(),
33367
- timezone: z63.string().trim().min(1).nullable(),
33368
- addressJson: z63.record(z63.string(), z63.unknown()),
33369
- locationJson: z63.object({ lat: z63.number(), lng: z63.number() }).nullable()
34118
+ var appointmentSetupVenueChoiceSchema = z64.discriminatedUnion("kind", [
34119
+ z64.object({ kind: z64.literal("none") }),
34120
+ z64.object({ kind: z64.literal("existing"), venueId: z64.string().min(1) }),
34121
+ z64.object({
34122
+ kind: z64.literal("create"),
34123
+ draftId: z64.string().min(1),
34124
+ title: z64.string().trim().min(1),
34125
+ description: z64.string().nullable(),
34126
+ timezone: z64.string().trim().min(1).nullable(),
34127
+ addressJson: z64.record(z64.string(), z64.unknown()),
34128
+ locationJson: z64.object({ lat: z64.number(), lng: z64.number() }).nullable()
33370
34129
  })
33371
34130
  ]);
33372
- var appointmentSetupPaymentDraftSchema = z63.object({
33373
- priceType: z63.union([z63.literal("free"), z63.literal("paid")])
33374
- });
33375
- var appointmentSetupServiceAssignmentDraftSchema = z63.discriminatedUnion("kind", [
33376
- z63.object({ kind: z63.literal("all_practitioners") }),
33377
- z63.object({
33378
- kind: z63.literal("selected_practitioners"),
33379
- resourceRefs: z63.array(appointmentSetupRefSchema)
34131
+ var appointmentSetupPaymentDraftSchema = z64.object({
34132
+ priceType: z64.union([z64.literal("free"), z64.literal("paid")])
34133
+ });
34134
+ var appointmentSetupServiceAssignmentDraftSchema = z64.discriminatedUnion("kind", [
34135
+ z64.object({ kind: z64.literal("all_practitioners") }),
34136
+ z64.object({
34137
+ kind: z64.literal("selected_practitioners"),
34138
+ resourceRefs: z64.array(appointmentSetupRefSchema)
33380
34139
  })
33381
34140
  ]);
33382
- var appointmentSetupServiceDraftSchema = z63.object({
34141
+ var appointmentSetupServiceDraftSchema = z64.object({
33383
34142
  ref: appointmentSetupRefSchema,
33384
- title: z63.string().trim().min(1),
33385
- description: z63.string().nullable(),
33386
- durationMinutes: z63.number().int().positive().max(APPOINTMENT_SETUP_MAX_MINUTES),
33387
- prepMinutes: z63.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
33388
- cleanupMinutes: z63.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
33389
- priceAmount: z63.number().int().nonnegative().nullable(),
33390
- isActive: z63.boolean(),
33391
- locationType: z63.union([
33392
- z63.literal("virtual"),
33393
- z63.literal("in_person"),
33394
- z63.literal("hybrid")
34143
+ title: z64.string().trim().min(1),
34144
+ description: z64.string().nullable(),
34145
+ durationMinutes: z64.number().int().positive().max(APPOINTMENT_SETUP_MAX_MINUTES),
34146
+ prepMinutes: z64.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
34147
+ cleanupMinutes: z64.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
34148
+ priceAmount: z64.number().int().nonnegative().nullable(),
34149
+ isActive: z64.boolean(),
34150
+ locationType: z64.union([
34151
+ z64.literal("virtual"),
34152
+ z64.literal("in_person"),
34153
+ z64.literal("hybrid")
33395
34154
  ]),
33396
34155
  venue: appointmentSetupVenueChoiceSchema,
33397
- timezone: z63.string().trim().min(1).nullable(),
34156
+ timezone: z64.string().trim().min(1).nullable(),
33398
34157
  payment: appointmentSetupPaymentDraftSchema,
33399
34158
  assignment: appointmentSetupServiceAssignmentDraftSchema
33400
34159
  }).superRefine((service, ctx) => {
@@ -33413,49 +34172,49 @@ var appointmentSetupServiceDraftSchema = z63.object({
33413
34172
  });
33414
34173
  }
33415
34174
  });
33416
- var appointmentSetupPractitionerDraftSchema = z63.object({
34175
+ var appointmentSetupPractitionerDraftSchema = z64.object({
33417
34176
  ref: appointmentSetupRefSchema,
33418
- displayName: z63.string().trim().min(1),
33419
- bio: z63.string().nullable(),
33420
- timezone: z63.string().trim().min(1),
33421
- colorHex: z63.string().nullable()
33422
- });
33423
- var appointmentSetupWeeklyWindowDraftSchema = z63.object({
33424
- weekday: z63.number().int().min(0).max(6),
33425
- startTime: z63.string(),
33426
- endTime: z63.string()
33427
- });
33428
- var appointmentSetupStartTimePolicyDraftSchema = z63.discriminatedUnion("kind", [
33429
- z63.object({ kind: z63.literal("automatic_spacing") }),
33430
- z63.object({
33431
- kind: z63.literal("regular_interval"),
33432
- intervalMinutes: z63.union([
33433
- z63.literal(10),
33434
- z63.literal(15),
33435
- z63.literal(20),
33436
- z63.literal(30),
33437
- z63.literal(45),
33438
- z63.literal(60)
34177
+ displayName: z64.string().trim().min(1),
34178
+ bio: z64.string().nullable(),
34179
+ timezone: z64.string().trim().min(1),
34180
+ colorHex: z64.string().nullable()
34181
+ });
34182
+ var appointmentSetupWeeklyWindowDraftSchema = z64.object({
34183
+ weekday: z64.number().int().min(0).max(6),
34184
+ startTime: z64.string(),
34185
+ endTime: z64.string()
34186
+ });
34187
+ var appointmentSetupStartTimePolicyDraftSchema = z64.discriminatedUnion("kind", [
34188
+ z64.object({ kind: z64.literal("automatic_spacing") }),
34189
+ z64.object({
34190
+ kind: z64.literal("regular_interval"),
34191
+ intervalMinutes: z64.union([
34192
+ z64.literal(10),
34193
+ z64.literal(15),
34194
+ z64.literal(20),
34195
+ z64.literal(30),
34196
+ z64.literal(45),
34197
+ z64.literal(60)
33439
34198
  ])
33440
34199
  })
33441
34200
  ]);
33442
- var appointmentSetupAvailabilityDraftSchema = z63.object({
33443
- kind: z63.literal("weekly_windows"),
34201
+ var appointmentSetupAvailabilityDraftSchema = z64.object({
34202
+ kind: z64.literal("weekly_windows"),
33444
34203
  resourceRef: appointmentSetupRefSchema,
33445
34204
  serviceRef: appointmentSetupRefSchema.nullable(),
33446
- windows: z63.array(appointmentSetupWeeklyWindowDraftSchema),
34205
+ windows: z64.array(appointmentSetupWeeklyWindowDraftSchema),
33447
34206
  startTimePolicy: appointmentSetupStartTimePolicyDraftSchema.optional()
33448
34207
  });
33449
34208
  var APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX = 28 * 24 * 60;
33450
34209
  var APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX = 10 * 365 * 24 * 60;
33451
- var appointmentSetupBookingNoticeSchema = z63.object({
33452
- minLeadMinutes: z63.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX),
33453
- maxBookingNoticeMinutes: z63.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX)
33454
- });
33455
- var applyAppointmentSetupRequestSchema = z63.object({
33456
- services: z63.array(appointmentSetupServiceDraftSchema),
33457
- practitioners: z63.array(appointmentSetupPractitionerDraftSchema),
33458
- availability: z63.array(appointmentSetupAvailabilityDraftSchema),
34210
+ var appointmentSetupBookingNoticeSchema = z64.object({
34211
+ minLeadMinutes: z64.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX),
34212
+ maxBookingNoticeMinutes: z64.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX)
34213
+ });
34214
+ var applyAppointmentSetupRequestSchema = z64.object({
34215
+ services: z64.array(appointmentSetupServiceDraftSchema),
34216
+ practitioners: z64.array(appointmentSetupPractitionerDraftSchema),
34217
+ availability: z64.array(appointmentSetupAvailabilityDraftSchema),
33459
34218
  bookingNotice: appointmentSetupBookingNoticeSchema
33460
34219
  });
33461
34220
 
@@ -33488,24 +34247,24 @@ var STAFF_CANCELLATION_CONTEXT_CATEGORIES = [
33488
34247
  ];
33489
34248
 
33490
34249
  // ../api/src/siteBanner.ts
33491
- import { z as z64 } from "zod";
34250
+ import { z as z65 } from "zod";
33492
34251
  var SITE_BANNER_SCOPE_VALUES = ["homepage", "all-pages"];
33493
34252
  var SITE_BANNER_TONE_VALUES = ["announcement", "promotion", "notice", "warning"];
33494
34253
  var SITE_BANNER_MAX_TEXT_LENGTH = 320;
33495
34254
  var SITE_BANNER_MAX_PARAGRAPHS = 2;
33496
- var siteBannerScopeSchema = z64.enum(SITE_BANNER_SCOPE_VALUES);
33497
- var siteBannerToneSchema = z64.enum(SITE_BANNER_TONE_VALUES);
33498
- var siteBannerBodySchema = z64.unknown().transform(unwrapRichTextValue);
33499
- var siteBannerCtaSchema = z64.object({
33500
- label: z64.string().trim().min(1),
34255
+ var siteBannerScopeSchema = z65.enum(SITE_BANNER_SCOPE_VALUES);
34256
+ var siteBannerToneSchema = z65.enum(SITE_BANNER_TONE_VALUES);
34257
+ var siteBannerBodySchema = z65.unknown().transform(unwrapRichTextValue);
34258
+ var siteBannerCtaSchema = z65.object({
34259
+ label: z65.string().trim().min(1),
33501
34260
  link: linkPayloadSchema
33502
34261
  });
33503
- var siteBannerSettingsSchema = z64.discriminatedUnion("enabled", [
33504
- z64.object({
33505
- enabled: z64.literal(false)
34262
+ var siteBannerSettingsSchema = z65.discriminatedUnion("enabled", [
34263
+ z65.object({
34264
+ enabled: z65.literal(false)
33506
34265
  }),
33507
- z64.object({
33508
- enabled: z64.literal(true),
34266
+ z65.object({
34267
+ enabled: z65.literal(true),
33509
34268
  scope: siteBannerScopeSchema,
33510
34269
  tone: siteBannerToneSchema,
33511
34270
  body: siteBannerBodySchema,
@@ -33519,7 +34278,7 @@ var siteBannerSettingsInputSchema = siteBannerSettingsSchema.superRefine((value,
33519
34278
  const analysis = analyzeSiteBannerBody(value.body);
33520
34279
  for (const issue of analysis.issues) {
33521
34280
  ctx.addIssue({
33522
- code: z64.ZodIssueCode.custom,
34281
+ code: z65.ZodIssueCode.custom,
33523
34282
  path: ["body"],
33524
34283
  message: siteBannerBodyIssueMessage(issue)
33525
34284
  });
@@ -33742,72 +34501,105 @@ function parsePublicProductCategorySelector(value) {
33742
34501
  return void 0;
33743
34502
  }
33744
34503
 
34504
+ // ../api/src/navigation/dashboardSiteNav.ts
34505
+ var hiddenDemoSiteNavSurfaceIds = [
34506
+ "site.newsletter"
34507
+ ];
34508
+ var hiddenDemoSiteNavIds = new Set(
34509
+ hiddenDemoSiteNavSurfaceIds
34510
+ );
34511
+ var websiteSurfaceIds = [
34512
+ "site.content",
34513
+ "site.footerBlocks",
34514
+ "site.navigation",
34515
+ "site.media",
34516
+ "site.style",
34517
+ "site.performance"
34518
+ ];
34519
+ var websiteSurfaceIdSet = new Set(
34520
+ websiteSurfaceIds
34521
+ );
34522
+
34523
+ // ../api/src/navigation/dashboardSettingsNav.ts
34524
+ var hiddenDemoSettingsNavSurfaceIds = [
34525
+ "settings.features",
34526
+ "settings.domains",
34527
+ "settings.bookings",
34528
+ "settings.emails",
34529
+ "settings.team",
34530
+ "settings.billing",
34531
+ "settings.developer",
34532
+ "settings.apiKeys",
34533
+ "settings.backup"
34534
+ ];
34535
+ var hiddenDemoSettingsNavIds = new Set(hiddenDemoSettingsNavSurfaceIds);
34536
+
33745
34537
  // ../api/src/aiPlayground.ts
33746
- import { z as z65 } from "zod";
33747
- var Rfc6902PatchOp = z65.discriminatedUnion("op", [
34538
+ import { z as z66 } from "zod";
34539
+ var Rfc6902PatchOp = z66.discriminatedUnion("op", [
33748
34540
  // Standard RFC-6902 operations
33749
- z65.object({
33750
- op: z65.literal("add"),
33751
- path: z65.string(),
33752
- value: z65.unknown()
34541
+ z66.object({
34542
+ op: z66.literal("add"),
34543
+ path: z66.string(),
34544
+ value: z66.unknown()
33753
34545
  }),
33754
- z65.object({
33755
- op: z65.literal("remove"),
33756
- path: z65.string()
34546
+ z66.object({
34547
+ op: z66.literal("remove"),
34548
+ path: z66.string()
33757
34549
  }),
33758
- z65.object({
33759
- op: z65.literal("replace"),
33760
- path: z65.string(),
33761
- value: z65.unknown()
34550
+ z66.object({
34551
+ op: z66.literal("replace"),
34552
+ path: z66.string(),
34553
+ value: z66.unknown()
33762
34554
  }),
33763
- z65.object({
33764
- op: z65.literal("move"),
33765
- from: z65.string(),
33766
- path: z65.string()
34555
+ z66.object({
34556
+ op: z66.literal("move"),
34557
+ from: z66.string(),
34558
+ path: z66.string()
33767
34559
  }),
33768
- z65.object({
33769
- op: z65.literal("copy"),
33770
- from: z65.string(),
33771
- path: z65.string()
34560
+ z66.object({
34561
+ op: z66.literal("copy"),
34562
+ from: z66.string(),
34563
+ path: z66.string()
33772
34564
  }),
33773
34565
  // Block-level operations (Phase 2)
33774
- z65.object({
33775
- op: z65.literal("add_block"),
33776
- blockKind: z65.string(),
33777
- afterBlockId: z65.string().nullable(),
33778
- content: z65.record(z65.string(), z65.unknown()),
33779
- rationale: z65.string()
34566
+ z66.object({
34567
+ op: z66.literal("add_block"),
34568
+ blockKind: z66.string(),
34569
+ afterBlockId: z66.string().nullable(),
34570
+ content: z66.record(z66.string(), z66.unknown()),
34571
+ rationale: z66.string()
33780
34572
  }),
33781
- z65.object({
33782
- op: z65.literal("delete_block"),
33783
- blockId: z65.string(),
33784
- rationale: z65.string()
34573
+ z66.object({
34574
+ op: z66.literal("delete_block"),
34575
+ blockId: z66.string(),
34576
+ rationale: z66.string()
33785
34577
  }),
33786
- z65.object({
33787
- op: z65.literal("reorder_block"),
33788
- blockId: z65.string(),
33789
- afterBlockId: z65.string().nullable(),
33790
- rationale: z65.string()
34578
+ z66.object({
34579
+ op: z66.literal("reorder_block"),
34580
+ blockId: z66.string(),
34581
+ afterBlockId: z66.string().nullable(),
34582
+ rationale: z66.string()
33791
34583
  })
33792
34584
  ]);
33793
- var PlaygroundProposeRequest = z65.object({
33794
- request: z65.string().min(1).max(2e3)
34585
+ var PlaygroundProposeRequest = z66.object({
34586
+ request: z66.string().min(1).max(2e3)
33795
34587
  });
33796
- var MultiPagePatchEnvelope = z65.object({
33797
- pageId: z65.string(),
33798
- blockId: z65.string().optional(),
34588
+ var MultiPagePatchEnvelope = z66.object({
34589
+ pageId: z66.string(),
34590
+ blockId: z66.string().optional(),
33799
34591
  // Not present for page-level ops
33800
- blockKind: z65.string().optional(),
33801
- blockPurpose: z65.string().optional().nullable(),
33802
- ops: z65.array(Rfc6902PatchOp),
33803
- rationale: z65.string(),
33804
- currentContent: z65.record(z65.string(), z65.unknown()).optional()
34592
+ blockKind: z66.string().optional(),
34593
+ blockPurpose: z66.string().optional().nullable(),
34594
+ ops: z66.array(Rfc6902PatchOp),
34595
+ rationale: z66.string(),
34596
+ currentContent: z66.record(z66.string(), z66.unknown()).optional()
33805
34597
  });
33806
- var MultiPageUpdateResponse = z65.object({
33807
- patches: z65.array(MultiPagePatchEnvelope),
33808
- assistantMessage: z65.string(),
33809
- pagesModified: z65.number(),
33810
- toolCallsUsed: z65.number()
34598
+ var MultiPageUpdateResponse = z66.object({
34599
+ patches: z66.array(MultiPagePatchEnvelope),
34600
+ assistantMessage: z66.string(),
34601
+ pagesModified: z66.number(),
34602
+ toolCallsUsed: z66.number()
33811
34603
  });
33812
34604
 
33813
34605
  // src/data/prefetchBlockData.ts
@@ -33880,7 +34672,7 @@ async function prefetchBlockData2(page, context, client, options) {
33880
34672
  throw new Error("listPublishedEntries requires siteId and type params");
33881
34673
  }
33882
34674
  const parsedLimit = typeof limit === "string" ? Number.parseInt(limit, 10) : typeof limit === "number" ? limit : void 0;
33883
- const order = orderBy === "newest" || orderBy === "oldest" || orderBy === "title" || orderBy === "order" ? orderBy : void 0;
34675
+ const order = orderBy === "order" ? "manual" : orderBy === "newest" || orderBy === "oldest" || orderBy === "title" ? orderBy : void 0;
33884
34676
  const parsedEntryIds = mode === "manual" ? parseManualEntryIds(entryIds) : void 0;
33885
34677
  if (mode === "manual" && (!parsedEntryIds || parsedEntryIds.length === 0)) {
33886
34678
  return { entries: [] };