@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
@@ -1755,7 +1755,16 @@ var ENDPOINT_DEFINITIONS = {
1755
1755
  revalidate: 60,
1756
1756
  tags: ["site-{siteId}", "content-{siteId}-{type}"],
1757
1757
  auth: "user",
1758
- responseKind: "json"
1758
+ responseKind: "json",
1759
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
1760
+ },
1761
+ reorderContentEntries: {
1762
+ path: "/sites/{siteId}/content/{type}/order",
1763
+ method: "POST",
1764
+ tags: ["site-{siteId}", "content-{siteId}-{type}"],
1765
+ auth: "user",
1766
+ responseKind: "json",
1767
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
1759
1768
  },
1760
1769
  getContentTemplate: {
1761
1770
  path: "/sites/{siteId}/content/types/{type}/template",
@@ -3907,6 +3916,14 @@ var ENDPOINT_DEFINITIONS = {
3907
3916
  responseKind: "json",
3908
3917
  errors: []
3909
3918
  },
3919
+ applyDiscountCode: {
3920
+ path: "/public/sites/{siteId}/bookings/discounts/apply",
3921
+ method: "POST",
3922
+ tags: ["site-{siteId}", "booking-discounts"],
3923
+ auth: "public",
3924
+ responseKind: "json",
3925
+ errors: ["validation:invalid_input", "rate_limit:exceeded"]
3926
+ },
3910
3927
  // Batch endpoint for block loader requests (reduces SSR fan-out)
3911
3928
  batchBlockLoaders: {
3912
3929
  path: "/public/sites/{siteId}/block-loaders/batch",
@@ -6246,6 +6263,27 @@ var ENDPOINT_DEFINITIONS = {
6246
6263
  }
6247
6264
  };
6248
6265
 
6266
+ // ../core/src/location.ts
6267
+ function normalizeLocationAddressText(value) {
6268
+ if (typeof value !== "string") {
6269
+ return null;
6270
+ }
6271
+ const trimmed = value.trim();
6272
+ return trimmed ? trimmed : null;
6273
+ }
6274
+ function hasLocationCoordinates(value) {
6275
+ return typeof value?.lat === "number" && typeof value?.lng === "number";
6276
+ }
6277
+ function toLocationCoordinates(value) {
6278
+ if (!hasLocationCoordinates(value)) {
6279
+ return null;
6280
+ }
6281
+ return {
6282
+ lat: value.lat,
6283
+ lng: value.lng
6284
+ };
6285
+ }
6286
+
6249
6287
  // ../api/src/accessAdmin.ts
6250
6288
  import { z } from "zod";
6251
6289
  var managedDomainAddOnPricingSnapshotSchema = z.object({
@@ -6388,27 +6426,6 @@ function formatKeyAsLabel(key) {
6388
6426
  // ../blocks/src/system/manifest/schema.ts
6389
6427
  import { z as z4 } from "zod";
6390
6428
 
6391
- // ../core/src/location.ts
6392
- function normalizeLocationAddressText(value) {
6393
- if (typeof value !== "string") {
6394
- return null;
6395
- }
6396
- const trimmed = value.trim();
6397
- return trimmed ? trimmed : null;
6398
- }
6399
- function hasLocationCoordinates(value) {
6400
- return typeof value?.lat === "number" && typeof value?.lng === "number";
6401
- }
6402
- function toLocationCoordinates(value) {
6403
- if (!hasLocationCoordinates(value)) {
6404
- return null;
6405
- }
6406
- return {
6407
- lat: value.lat,
6408
- lng: value.lng
6409
- };
6410
- }
6411
-
6412
6429
  // ../media-core/src/transformRect.ts
6413
6430
  function isValidTransformRectStructure(rect) {
6414
6431
  if (!Array.isArray(rect) || rect.length !== 4) return false;
@@ -6491,14 +6508,14 @@ function rotateNormalizedPoint(point, rotation) {
6491
6508
  const x = point.x;
6492
6509
  const y = point.y;
6493
6510
  switch (rotation) {
6511
+ case 0:
6512
+ return { x, y };
6494
6513
  case 90:
6495
6514
  return { x: 1 - y, y: x };
6496
6515
  case 180:
6497
6516
  return { x: 1 - x, y: 1 - y };
6498
6517
  case 270:
6499
6518
  return { x: y, y: 1 - x };
6500
- default:
6501
- return { x, y };
6502
6519
  }
6503
6520
  }
6504
6521
 
@@ -6691,6 +6708,8 @@ var uiSchema = z4.object({
6691
6708
  mediaPickerAutoOpen: z4.boolean().optional(),
6692
6709
  showMediaPreview: z4.boolean().optional(),
6693
6710
  showMediaOverlayActions: z4.boolean().optional(),
6711
+ mediaPreviewMaxWidth: z4.enum(["xs", "sm", "md", "none"]).optional(),
6712
+ preventMediaPreviewUpscale: z4.boolean().optional(),
6694
6713
  mediaDelivery: mediaDeliverySchema.optional(),
6695
6714
  mediaDeliveryByVariant: z4.record(z4.string(), mediaDeliverySchema).optional(),
6696
6715
  // Optional input hints for validators/widgets
@@ -6940,6 +6959,9 @@ var repeaterFieldSchema = baseFieldSchema.extend({
6940
6959
  type: z4.literal("repeater"),
6941
6960
  itemLabel: z4.string().default("Item"),
6942
6961
  itemLabelSource: z4.string().optional(),
6962
+ showSummary: z4.boolean().optional(),
6963
+ summaryFields: z4.string().array().optional(),
6964
+ summaryMaxChars: z4.number().int().positive().optional(),
6943
6965
  minItems: z4.number().int().min(0).default(0),
6944
6966
  maxItems: z4.number().int().positive().optional(),
6945
6967
  // Monomorphic mode
@@ -7433,6 +7455,9 @@ function makeBoundaryId(previousBlockId, nextBlockId) {
7433
7455
  const next = encodeURIComponent(nextBlockId);
7434
7456
  return asDesignBoundaryId(`boundary:${previous}:${next}`);
7435
7457
  }
7458
+ function assertNever(value, message = "Unhandled Theme V2 variant") {
7459
+ throw new Error(`${message}: ${String(value)}`);
7460
+ }
7436
7461
  function brandNonEmptyString(value, label) {
7437
7462
  if (value.length === 0) {
7438
7463
  throw new Error(`${label} must be a non-empty string.`);
@@ -7460,6 +7485,10 @@ var tileTreatmentValues = [
7460
7485
  "quiet",
7461
7486
  "brand-depth"
7462
7487
  ];
7488
+ var eventListTreatmentValues = [
7489
+ "plain",
7490
+ "lined-panel"
7491
+ ];
7463
7492
  var eyebrowTreatmentValues = [
7464
7493
  "plain",
7465
7494
  "pill",
@@ -7517,6 +7546,7 @@ function defineBlockDesignCapability(capability) {
7517
7546
  imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
7518
7547
  testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"],
7519
7548
  tileTreatments: capability.tileTreatments ?? ["default"],
7549
+ eventListTreatments: capability.eventListTreatments ?? ["plain"],
7520
7550
  eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"],
7521
7551
  ...capability.headingDecorations ? { headingDecorations: capability.headingDecorations } : {},
7522
7552
  ...capability.accordionIconSets ? { accordionIconSets: capability.accordionIconSets } : {}
@@ -7541,9 +7571,98 @@ var blockAppearancePresets = [
7541
7571
  transitionAfter: "soft-fade-short",
7542
7572
  emphasis: "high",
7543
7573
  sectionHeight: "hero",
7574
+ heroComposition: "center",
7575
+ heroTypographyScale: "display",
7544
7576
  imageSurfaceTreatment: { kind: "neutral-wash" }
7545
7577
  }
7546
7578
  }),
7579
+ defineBlockAppearancePreset({
7580
+ kind: "block-design",
7581
+ id: "hero-bottom-left-panel",
7582
+ target: "hero",
7583
+ label: "Bottom-left panel hero",
7584
+ blockKinds: ["block.hero"],
7585
+ constraints: {
7586
+ layoutFamilies: ["centered", "compact"]
7587
+ },
7588
+ optionGroups: [
7589
+ {
7590
+ id: "image-surface-treatment",
7591
+ label: "Treatment",
7592
+ selectedOptionId: "neutral-scrim",
7593
+ options: [
7594
+ {
7595
+ id: "neutral-scrim",
7596
+ label: "Neutral scrim",
7597
+ designPatch: {
7598
+ imageSurfaceTreatment: { kind: "neutral-scrim", intensity: "balanced" }
7599
+ }
7600
+ },
7601
+ {
7602
+ id: "brand-scrim-primary",
7603
+ label: "Brand scrim",
7604
+ designPatch: {
7605
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary", intensity: "balanced" }
7606
+ }
7607
+ }
7608
+ ]
7609
+ }
7610
+ ],
7611
+ layoutPatches: [
7612
+ {
7613
+ constraints: {
7614
+ layoutVariantKeys: ["micro"]
7615
+ },
7616
+ designPatch: {
7617
+ sectionHeight: "banner",
7618
+ heroTypographyScale: "editorial"
7619
+ }
7620
+ }
7621
+ ],
7622
+ design: {
7623
+ sectionSurface: "hero-image",
7624
+ contentFrame: panelFrame("raised"),
7625
+ itemSurface: "none",
7626
+ transitionAfter: "soft-fade-short",
7627
+ emphasis: "high",
7628
+ sectionHeight: "immersive",
7629
+ heroComposition: "bottom-left",
7630
+ heroTypographyScale: "display",
7631
+ imageSurfaceTreatment: { kind: "neutral-scrim", intensity: "balanced" }
7632
+ }
7633
+ }),
7634
+ defineBlockAppearancePreset({
7635
+ kind: "block-design",
7636
+ id: "hero-poster-image",
7637
+ target: "hero",
7638
+ label: "Poster image hero",
7639
+ blockKinds: ["block.hero"],
7640
+ constraints: {
7641
+ layoutFamilies: ["centered", "compact"]
7642
+ },
7643
+ layoutPatches: [
7644
+ {
7645
+ constraints: {
7646
+ layoutVariantKeys: ["micro"]
7647
+ },
7648
+ designPatch: {
7649
+ sectionHeight: "banner",
7650
+ heroTypographyScale: "display"
7651
+ }
7652
+ }
7653
+ ],
7654
+ design: {
7655
+ sectionSurface: "hero-image",
7656
+ contentFrame: plainFrame,
7657
+ itemSurface: "none",
7658
+ transitionAfter: "soft-fade-short",
7659
+ emphasis: "high",
7660
+ sectionHeight: "immersive",
7661
+ heroComposition: "center",
7662
+ heroTypographyScale: "poster",
7663
+ imageSurfaceTreatment: { kind: "brand-scrim", token: "primary", intensity: "strong" }
7664
+ }
7665
+ }),
7547
7666
  defineBlockAppearancePreset({
7548
7667
  kind: "block-design",
7549
7668
  id: "hero-brand-scrim",
@@ -7593,6 +7712,8 @@ var blockAppearancePresets = [
7593
7712
  transitionAfter: "soft-fade-short",
7594
7713
  emphasis: "high",
7595
7714
  sectionHeight: "immersive",
7715
+ heroComposition: "center",
7716
+ heroTypographyScale: "display",
7596
7717
  imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" }
7597
7718
  }
7598
7719
  }),
@@ -7645,6 +7766,8 @@ var blockAppearancePresets = [
7645
7766
  transitionAfter: "soft-fade-short",
7646
7767
  emphasis: "high",
7647
7768
  sectionHeight: "immersive",
7769
+ heroComposition: "center",
7770
+ heroTypographyScale: "display",
7648
7771
  imageSurfaceTreatment: { kind: "brand-scrim", token: "primary" },
7649
7772
  imageSurfaceMotion: "fixed-frame",
7650
7773
  eyebrowTreatment: "accent-pill-bounce"
@@ -7665,6 +7788,8 @@ var blockAppearancePresets = [
7665
7788
  itemSurface: "none",
7666
7789
  transitionAfter: "soft-fade-short",
7667
7790
  emphasis: "high",
7791
+ heroComposition: "center",
7792
+ heroTypographyScale: "editorial",
7668
7793
  eyebrowTreatment: "accent-pill-bounce"
7669
7794
  }
7670
7795
  }),
@@ -7679,7 +7804,82 @@ var blockAppearancePresets = [
7679
7804
  contentFrame: panelFrame("inset"),
7680
7805
  itemSurface: "none",
7681
7806
  transitionAfter: "none",
7682
- emphasis: "high"
7807
+ emphasis: "high",
7808
+ heroComposition: "center",
7809
+ heroTypographyScale: "editorial"
7810
+ }
7811
+ }),
7812
+ defineBlockAppearancePreset({
7813
+ kind: "block-design",
7814
+ id: "hero-split-editorial",
7815
+ target: "hero",
7816
+ label: "Editorial split hero",
7817
+ blockKinds: ["block.hero"],
7818
+ constraints: {
7819
+ layoutFamilies: ["split"]
7820
+ },
7821
+ design: {
7822
+ sectionSurface: "base",
7823
+ contentFrame: plainFrame,
7824
+ itemSurface: "none",
7825
+ transitionAfter: "soft-fade-short",
7826
+ emphasis: "high",
7827
+ heroTypographyScale: "editorial"
7828
+ }
7829
+ }),
7830
+ defineBlockAppearancePreset({
7831
+ kind: "block-design",
7832
+ id: "hero-split-brand",
7833
+ target: "hero",
7834
+ label: "Brand split hero",
7835
+ blockKinds: ["block.hero"],
7836
+ constraints: {
7837
+ layoutFamilies: ["split"]
7838
+ },
7839
+ design: {
7840
+ sectionSurface: "brand-depth-band",
7841
+ contentFrame: plainFrame,
7842
+ itemSurface: "none",
7843
+ transitionAfter: "soft-fade-short",
7844
+ emphasis: "high",
7845
+ heroTypographyScale: "display",
7846
+ eyebrowTreatment: "accent-pill-bounce"
7847
+ }
7848
+ }),
7849
+ defineBlockAppearancePreset({
7850
+ kind: "block-design",
7851
+ id: "hero-split-soft-panel",
7852
+ target: "hero",
7853
+ label: "Soft panel split hero",
7854
+ blockKinds: ["block.hero"],
7855
+ constraints: {
7856
+ layoutFamilies: ["split"]
7857
+ },
7858
+ design: {
7859
+ sectionSurface: "muted-band",
7860
+ contentFrame: panelFrame("raised"),
7861
+ itemSurface: "none",
7862
+ transitionAfter: "soft-fade-short",
7863
+ emphasis: "high",
7864
+ heroTypographyScale: "editorial"
7865
+ }
7866
+ }),
7867
+ defineBlockAppearancePreset({
7868
+ kind: "block-design",
7869
+ id: "hero-split-accent",
7870
+ target: "hero",
7871
+ label: "Accent split hero",
7872
+ blockKinds: ["block.hero"],
7873
+ constraints: {
7874
+ layoutFamilies: ["split"]
7875
+ },
7876
+ design: {
7877
+ sectionSurface: "accent-band",
7878
+ contentFrame: panelFrame("raised"),
7879
+ itemSurface: "none",
7880
+ transitionAfter: "soft-fade-short",
7881
+ emphasis: "high",
7882
+ heroTypographyScale: "display"
7683
7883
  }
7684
7884
  }),
7685
7885
  defineBlockAppearancePreset({
@@ -7712,9 +7912,9 @@ var blockAppearancePresets = [
7712
7912
  }),
7713
7913
  defineBlockAppearancePreset({
7714
7914
  kind: "block-design",
7715
- id: "intro-soft-earth-statement",
7915
+ id: "intro-organic-statement",
7716
7916
  target: "intro",
7717
- label: "Soft Earth intro statement",
7917
+ label: "Organic intro statement",
7718
7918
  blockKinds: ["block.intro"],
7719
7919
  design: {
7720
7920
  sectionSurface: "base",
@@ -7745,9 +7945,9 @@ var blockAppearancePresets = [
7745
7945
  }),
7746
7946
  defineBlockAppearancePreset({
7747
7947
  kind: "block-design",
7748
- id: "feature-cards-soft-earth-offerings",
7948
+ id: "feature-cards-raised-rule",
7749
7949
  target: "feature-cards",
7750
- label: "Soft Earth offering cards",
7950
+ label: "Raised cards with rule",
7751
7951
  blockKinds: ["block.feature-cards"],
7752
7952
  design: {
7753
7953
  sectionSurface: "base",
@@ -7776,6 +7976,21 @@ var blockAppearancePresets = [
7776
7976
  emphasis: "medium"
7777
7977
  }
7778
7978
  }),
7979
+ defineBlockAppearancePreset({
7980
+ kind: "block-design",
7981
+ id: "events-lined-panel",
7982
+ target: "events",
7983
+ label: "Lined event panel",
7984
+ blockKinds: ["block.event-calendar", "block.event-listing"],
7985
+ design: {
7986
+ sectionSurface: "base",
7987
+ contentFrame: plainFrame,
7988
+ itemSurface: "none",
7989
+ transitionAfter: "none",
7990
+ emphasis: "medium",
7991
+ eventListTreatment: "lined-panel"
7992
+ }
7993
+ }),
7779
7994
  defineBlockAppearancePreset({
7780
7995
  kind: "block-design",
7781
7996
  id: "schedule-details-accent-section",
@@ -7835,9 +8050,9 @@ var blockAppearancePresets = [
7835
8050
  }),
7836
8051
  defineBlockAppearancePreset({
7837
8052
  kind: "block-design",
7838
- id: "testimonials-carded-proof",
8053
+ id: "testimonials-simple-cards",
7839
8054
  target: "testimonials",
7840
- label: "Carded social proof",
8055
+ label: "Simple testimonial cards",
7841
8056
  blockKinds: ["block.testimonials"],
7842
8057
  design: {
7843
8058
  sectionSurface: "base",
@@ -7849,9 +8064,9 @@ var blockAppearancePresets = [
7849
8064
  }),
7850
8065
  defineBlockAppearancePreset({
7851
8066
  kind: "block-design",
7852
- id: "testimonials-contained-proof",
8067
+ id: "testimonials-raised-panel",
7853
8068
  target: "testimonials",
7854
- label: "Contained social proof",
8069
+ label: "Raised testimonial panel",
7855
8070
  blockKinds: ["block.testimonials"],
7856
8071
  design: {
7857
8072
  sectionSurface: "muted-band",
@@ -7863,9 +8078,9 @@ var blockAppearancePresets = [
7863
8078
  }),
7864
8079
  defineBlockAppearancePreset({
7865
8080
  kind: "block-design",
7866
- id: "testimonials-dark-proof",
8081
+ id: "testimonials-accent-panel",
7867
8082
  target: "testimonials",
7868
- label: "Dark proof panel",
8083
+ label: "Accent testimonial panel",
7869
8084
  blockKinds: ["block.testimonials"],
7870
8085
  design: {
7871
8086
  sectionSurface: "accent-band",
@@ -7877,9 +8092,9 @@ var blockAppearancePresets = [
7877
8092
  }),
7878
8093
  defineBlockAppearancePreset({
7879
8094
  kind: "block-design",
7880
- id: "testimonials-accent-quote-proof",
8095
+ id: "testimonials-accent-quote-cards",
7881
8096
  target: "testimonials",
7882
- label: "Accent quote proof",
8097
+ label: "Accent quote cards",
7883
8098
  blockKinds: ["block.testimonials"],
7884
8099
  design: {
7885
8100
  sectionSurface: "accent-band",
@@ -7892,9 +8107,9 @@ var blockAppearancePresets = [
7892
8107
  }),
7893
8108
  defineBlockAppearancePreset({
7894
8109
  kind: "block-design",
7895
- id: "testimonials-soft-earth-proof-band",
8110
+ id: "testimonials-brand-background-quotes",
7896
8111
  target: "testimonials",
7897
- label: "Soft Earth proof band",
8112
+ label: "Brand background quotes",
7898
8113
  blockKinds: ["block.testimonials"],
7899
8114
  design: {
7900
8115
  sectionSurface: "brand-depth-band",
@@ -7938,25 +8153,6 @@ var blockAppearancePresets = [
7938
8153
  emphasis: "low"
7939
8154
  }
7940
8155
  }),
7941
- defineBlockAppearancePreset({
7942
- kind: "block-design",
7943
- id: "faq-soft-earth-two-column",
7944
- target: "faq",
7945
- label: "Soft Earth two-column FAQ",
7946
- blockKinds: ["block.faq"],
7947
- design: {
7948
- sectionSurface: "base",
7949
- contentFrame: plainFrame,
7950
- itemSurface: "flat",
7951
- transitionAfter: "none",
7952
- emphasis: "medium",
7953
- accordionIconTreatment: {
7954
- iconSet: "plus",
7955
- colorToken: "primary",
7956
- motion: "swap"
7957
- }
7958
- }
7959
- }),
7960
8156
  defineBlockAppearancePreset({
7961
8157
  kind: "block-design",
7962
8158
  id: "contact-form-panel",
@@ -9335,7 +9531,8 @@ var accordionSystemSchema = z12.object({
9335
9531
  icon: z12.object({
9336
9532
  style: accordionIconSchema,
9337
9533
  position: z12.enum(["left", "right"]),
9338
- size: z12.enum(["sm", "md", "lg"])
9534
+ size: z12.enum(["sm", "md", "lg"]),
9535
+ colorToken: themeColorTokenSchema.optional()
9339
9536
  }),
9340
9537
  // Trigger (question) styling
9341
9538
  trigger: z12.object({
@@ -9469,6 +9666,7 @@ var navLinkPaddingXSchema = z16.enum(["none", "tight", "compact", "default", "re
9469
9666
  var navLinkBorderRadiusSchema = z16.enum(["none", "sm", "md", "full"]);
9470
9667
  var navLinkTextSizeSchema = z16.enum(["xs", "sm", "base", "lg"]);
9471
9668
  var navLinkLetterSpacingSchema = z16.enum(["normal", "wide", "wider", "widest"]);
9669
+ var navLinkContrastTreatmentSchema = z16.enum(["none", "soft-glow"]);
9472
9670
  var navLinkStyleSchema = z16.object({
9473
9671
  /** Display name for the style */
9474
9672
  name: z16.string().min(1).max(30).optional(),
@@ -9480,6 +9678,8 @@ var navLinkStyleSchema = z16.object({
9480
9678
  textSize: navLinkTextSizeSchema.optional(),
9481
9679
  /** Optional letter spacing override */
9482
9680
  letterSpacing: navLinkLetterSpacingSchema.optional(),
9681
+ /** Optional text-only contrast treatment for transparent/overlay navigation */
9682
+ contrastTreatment: navLinkContrastTreatmentSchema.optional(),
9483
9683
  /** Hover/active color token (for color-change effects) */
9484
9684
  hoverColorToken: themeColorTokenSchema.nullable().optional(),
9485
9685
  /** Padding preset */
@@ -9909,6 +10109,7 @@ var sectionStylesOverrideSchema = z21.object({
9909
10109
  spacing: semanticSpacingSchema.nullable().optional(),
9910
10110
  minHeight: z21.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
9911
10111
  tileTreatment: z21.enum(tileTreatmentValues).nullable().optional(),
10112
+ eventListTreatment: z21.enum(eventListTreatmentValues).nullable().optional(),
9912
10113
  eyebrowTreatment: z21.enum(eyebrowTreatmentValues).nullable().optional(),
9913
10114
  headingDecoration: headingDecorationSchema.nullable().optional(),
9914
10115
  // Author-level override consumed by later block/editor rendering phases.
@@ -10742,6 +10943,34 @@ var paletteVariantsById = new Map(
10742
10943
  paletteVariants.map((v) => [v.id, v])
10743
10944
  );
10744
10945
 
10946
+ // ../theme-core/src/accordions/siteStyleDefaults.ts
10947
+ var softEarthAccordionSystem = {
10948
+ background: {
10949
+ type: "solid",
10950
+ colorToken: "background"
10951
+ },
10952
+ spacing: "comfortable",
10953
+ corners: "square",
10954
+ border: null,
10955
+ shadow: null,
10956
+ icon: {
10957
+ style: "plus-minus",
10958
+ position: "right",
10959
+ size: "md",
10960
+ colorToken: "primary"
10961
+ },
10962
+ trigger: {
10963
+ textColorToken: "text",
10964
+ fontWeight: "medium"
10965
+ },
10966
+ hover: {
10967
+ textColorToken: "primary"
10968
+ },
10969
+ content: {
10970
+ textColorToken: "neutral-700"
10971
+ }
10972
+ };
10973
+
10745
10974
  // ../theme-core/src/site-styles/headerLooks.ts
10746
10975
  function asHeaderLookId(value) {
10747
10976
  return value;
@@ -10797,7 +11026,7 @@ var headerLayoutCatalog = [
10797
11026
  description: "Detached header chrome that sits over the opening section.",
10798
11027
  structure: "floating-shell",
10799
11028
  variant: "floating",
10800
- defaultPositioning: "fixed",
11029
+ defaultPositioning: "sticky",
10801
11030
  shrinkOnScroll: true,
10802
11031
  maxRecommendedNavItems: 5,
10803
11032
  allowedLogoShapes: ["none", "text-only", "horizontal"]
@@ -10814,7 +11043,9 @@ var headerStyleCatalog = [
10814
11043
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10815
11044
  navInteraction: "color-change",
10816
11045
  surface: "neutral",
10817
- navTypography: "plain"
11046
+ defaultDepth: "none",
11047
+ navTypography: "plain",
11048
+ moods: ["calm", "professional", "editorial"]
10818
11049
  },
10819
11050
  {
10820
11051
  id: asHeaderStyleId("fine-line"),
@@ -10823,7 +11054,9 @@ var headerStyleCatalog = [
10823
11054
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10824
11055
  navInteraction: "underline-grow",
10825
11056
  surface: "bordered",
10826
- navTypography: "plain"
11057
+ defaultDepth: "line",
11058
+ navTypography: "plain",
11059
+ moods: ["calm", "professional", "editorial"]
10827
11060
  },
10828
11061
  {
10829
11062
  id: asHeaderStyleId("soft-bar"),
@@ -10832,7 +11065,9 @@ var headerStyleCatalog = [
10832
11065
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10833
11066
  navInteraction: "pill-background",
10834
11067
  surface: "soft",
10835
- navTypography: "plain"
11068
+ defaultDepth: "line",
11069
+ navTypography: "plain",
11070
+ moods: ["calm", "professional"]
10836
11071
  },
10837
11072
  {
10838
11073
  id: asHeaderStyleId("pill-nav"),
@@ -10841,7 +11076,9 @@ var headerStyleCatalog = [
10841
11076
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10842
11077
  navInteraction: "pill-background",
10843
11078
  surface: "soft",
10844
- navTypography: "plain"
11079
+ defaultDepth: "none",
11080
+ navTypography: "plain",
11081
+ moods: ["calm"]
10845
11082
  },
10846
11083
  {
10847
11084
  id: asHeaderStyleId("brand-bar"),
@@ -10850,7 +11087,9 @@ var headerStyleCatalog = [
10850
11087
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10851
11088
  navInteraction: "color-change",
10852
11089
  surface: "brand-solid",
10853
- navTypography: "brand-caps"
11090
+ defaultDepth: "none",
11091
+ navTypography: "brand-caps",
11092
+ moods: ["professional", "expressive", "utility"]
10854
11093
  },
10855
11094
  {
10856
11095
  id: asHeaderStyleId("brand-underline"),
@@ -10859,7 +11098,9 @@ var headerStyleCatalog = [
10859
11098
  supportedLayoutIds: supportedLayouts(["classic"]),
10860
11099
  navInteraction: "underline-grow",
10861
11100
  surface: "brand-solid",
10862
- navTypography: "brand-caps"
11101
+ defaultDepth: "none",
11102
+ navTypography: "brand-caps",
11103
+ moods: ["expressive"]
10863
11104
  },
10864
11105
  {
10865
11106
  id: asHeaderStyleId("brand-pill"),
@@ -10868,7 +11109,9 @@ var headerStyleCatalog = [
10868
11109
  supportedLayoutIds: supportedLayouts(["classic", "centered", "floating"]),
10869
11110
  navInteraction: "pill-background",
10870
11111
  surface: "brand-solid",
10871
- navTypography: "brand-caps"
11112
+ defaultDepth: "none",
11113
+ navTypography: "brand-caps",
11114
+ moods: ["expressive"]
10872
11115
  },
10873
11116
  {
10874
11117
  id: asHeaderStyleId("serif-line"),
@@ -10877,7 +11120,9 @@ var headerStyleCatalog = [
10877
11120
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10878
11121
  navInteraction: "underline-grow",
10879
11122
  surface: "bordered",
10880
- navTypography: "heading"
11123
+ defaultDepth: "line",
11124
+ navTypography: "heading",
11125
+ moods: ["editorial", "calm"]
10881
11126
  },
10882
11127
  {
10883
11128
  id: asHeaderStyleId("flat-tabs"),
@@ -10886,16 +11131,20 @@ var headerStyleCatalog = [
10886
11131
  supportedLayoutIds: supportedLayouts(["classic", "centered"]),
10887
11132
  navInteraction: "flat-block",
10888
11133
  surface: "bordered",
10889
- navTypography: "quiet-caps"
11134
+ defaultDepth: "shadow",
11135
+ navTypography: "quiet-caps",
11136
+ moods: ["professional", "utility", "expressive"]
10890
11137
  },
10891
11138
  {
10892
11139
  id: asHeaderStyleId("glass"),
10893
11140
  label: "Glass",
10894
11141
  description: "Translucent chrome with frosted navigation backing.",
10895
- supportedLayoutIds: supportedLayouts(["classic", "floating"]),
11142
+ supportedLayoutIds: supportedLayouts(["floating"]),
10896
11143
  navInteraction: "glass-backed",
10897
11144
  surface: "floating",
10898
- navTypography: "plain"
11145
+ defaultDepth: "shadow",
11146
+ navTypography: "plain",
11147
+ moods: ["expressive", "calm"]
10899
11148
  },
10900
11149
  {
10901
11150
  id: asHeaderStyleId("minimal-surface"),
@@ -10904,7 +11153,9 @@ var headerStyleCatalog = [
10904
11153
  supportedLayoutIds: supportedLayouts(["floating"]),
10905
11154
  navInteraction: "color-change",
10906
11155
  surface: "floating",
10907
- navTypography: "plain"
11156
+ defaultDepth: "none",
11157
+ navTypography: "plain",
11158
+ moods: ["editorial", "calm"]
10908
11159
  },
10909
11160
  {
10910
11161
  id: asHeaderStyleId("soft-shell"),
@@ -10913,7 +11164,9 @@ var headerStyleCatalog = [
10913
11164
  supportedLayoutIds: supportedLayouts(["floating"]),
10914
11165
  navInteraction: "pill-background",
10915
11166
  surface: "floating",
10916
- navTypography: "plain"
11167
+ defaultDepth: "shadow",
11168
+ navTypography: "plain",
11169
+ moods: ["calm", "professional"]
10917
11170
  },
10918
11171
  {
10919
11172
  id: asHeaderStyleId("split-glass"),
@@ -10922,7 +11175,9 @@ var headerStyleCatalog = [
10922
11175
  supportedLayoutIds: supportedLayouts(["floating"]),
10923
11176
  navInteraction: "glass-backed",
10924
11177
  surface: "floating",
10925
- navTypography: "quiet-caps"
11178
+ defaultDepth: "shadow",
11179
+ navTypography: "quiet-caps",
11180
+ moods: ["expressive"]
10926
11181
  },
10927
11182
  {
10928
11183
  id: asHeaderStyleId("split-pill"),
@@ -10931,7 +11186,9 @@ var headerStyleCatalog = [
10931
11186
  supportedLayoutIds: supportedLayouts(["floating"]),
10932
11187
  navInteraction: "pill-background",
10933
11188
  surface: "floating",
10934
- navTypography: "heading"
11189
+ defaultDepth: "shadow",
11190
+ navTypography: "heading",
11191
+ moods: ["calm", "editorial"]
10935
11192
  }
10936
11193
  ];
10937
11194
  var headerLayoutsById = new Map(
@@ -10945,7 +11202,6 @@ var headerStyleCompatibilityOrder = /* @__PURE__ */ new Map([
10945
11202
  asHeaderLayoutId("classic"),
10946
11203
  headerStyleRepairChain([
10947
11204
  "minimal",
10948
- "glass",
10949
11205
  "fine-line",
10950
11206
  "soft-bar",
10951
11207
  "pill-nav",
@@ -11012,7 +11268,13 @@ var headerStyleRepairOrder = /* @__PURE__ */ new Map(
11012
11268
  ],
11013
11269
  [
11014
11270
  asHeaderStyleId("glass"),
11015
- headerStyleRepairChain(["glass", "minimal-surface", "minimal"])
11271
+ headerStyleRepairChain([
11272
+ "glass",
11273
+ "soft-shell",
11274
+ "fine-line",
11275
+ "minimal-surface",
11276
+ "minimal"
11277
+ ])
11016
11278
  ],
11017
11279
  [
11018
11280
  asHeaderStyleId("soft-shell"),
@@ -11124,6 +11386,23 @@ function getCompatibleHeaderStyleIds(layoutId) {
11124
11386
  }
11125
11387
  );
11126
11388
  }
11389
+ function themedHeaderShadow(theme) {
11390
+ switch (theme.shadow.elevation) {
11391
+ case "none":
11392
+ return void 0;
11393
+ case "low":
11394
+ return { elevation: "sm" };
11395
+ case "medium":
11396
+ return { elevation: "md" };
11397
+ case "high":
11398
+ return { elevation: "lg" };
11399
+ default:
11400
+ return assertNever(
11401
+ theme.shadow.elevation,
11402
+ "Unhandled theme shadow elevation"
11403
+ );
11404
+ }
11405
+ }
11127
11406
  function solidBrandHeader(theme) {
11128
11407
  const ctaVariant = resolveHeaderCtaVariant(theme, "inverted");
11129
11408
  return {
@@ -11273,9 +11552,7 @@ function practicalUtilityHeader(theme) {
11273
11552
  navColor: "text",
11274
11553
  navStyle: "solid",
11275
11554
  navWeight: "semibold",
11276
- shadow: {
11277
- elevation: "sm"
11278
- },
11555
+ shadow: themedHeaderShadow(theme),
11279
11556
  border: {
11280
11557
  style: "solid",
11281
11558
  width: "thin",
@@ -11344,6 +11621,7 @@ function floatingGlassHeader(theme) {
11344
11621
  return {
11345
11622
  ...transparentOverlayHeader(theme),
11346
11623
  variant: "floating",
11624
+ positioning: "sticky",
11347
11625
  navStyle: "frosted",
11348
11626
  navContainer: {
11349
11627
  type: "glass",
@@ -11859,7 +12137,7 @@ var typographyPresets = [
11859
12137
  heroTypography: {
11860
12138
  headlineSize: "6xl",
11861
12139
  headlineLineHeight: "tight",
11862
- subheadlineSize: "editorial",
12140
+ subheadlineSize: "2xl",
11863
12141
  subheadlineLineHeight: "normal",
11864
12142
  microHeadlineSize: "6xl",
11865
12143
  microHeadlineLineHeight: "tight",
@@ -11877,6 +12155,8 @@ var typographyPresetsById = new Map(
11877
12155
  );
11878
12156
 
11879
12157
  // ../theme-core/src/site-styles/curatedSiteStyles.ts
12158
+ var SOFT_EARTH_SITE_STYLE_ID_VALUE = "site-style:soft-earth";
12159
+ var SOFT_EARTH_SITE_STYLE_ID = asSiteStyleId(SOFT_EARTH_SITE_STYLE_ID_VALUE);
11880
12160
  var curatedSiteStyleIdValues = [
11881
12161
  "site-style:calm-studio",
11882
12162
  "site-style:clear-professional",
@@ -11888,7 +12168,7 @@ var curatedSiteStyleIdValues = [
11888
12168
  "site-style:personal-retreat-journal",
11889
12169
  "site-style:tactile-workshop",
11890
12170
  "site-style:modern-wellness",
11891
- "site-style:soft-earth",
12171
+ SOFT_EARTH_SITE_STYLE_ID_VALUE,
11892
12172
  "site-style:bold-launch",
11893
12173
  "site-style:south-west-twerk-school"
11894
12174
  ];
@@ -11970,7 +12250,10 @@ function uniqueContentFrameKinds() {
11970
12250
  var generatedContentFrameKinds = uniqueContentFrameKinds();
11971
12251
  function defineCuratedSiteStyle(input) {
11972
12252
  const legacyHeaderLookIds = input.recommendedHeaderLookIds ?? ["clean-base"];
11973
- const inferredHeaderCuration = inferHeaderCurationFromLegacyLooks(legacyHeaderLookIds);
12253
+ const inferredHeaderCuration = inferHeaderCurationFromLegacyLooks(
12254
+ legacyHeaderLookIds,
12255
+ input.tokenRecipes
12256
+ );
11974
12257
  const typographyPresetChoices = input.typographyPresetChoices ?? defaultTypographyPresetChoicesForRecipe(input.tokenRecipes.typography);
11975
12258
  const defaultTypographyPresetId = input.defaultTypographyPresetId ? asTypographyPresetId(input.defaultTypographyPresetId) : typographyPresetChoices[0].id;
11976
12259
  if (!typographyPresetChoices.some(
@@ -12003,6 +12286,7 @@ function defineCuratedSiteStyle(input) {
12003
12286
  supportedTransitions: generatedDesignOptionCatalog.transitions
12004
12287
  },
12005
12288
  ...input.themeOverrides ? { themeOverrides: input.themeOverrides } : {},
12289
+ ...input.defaultBlockVariants ? { defaultBlockVariants: input.defaultBlockVariants } : {},
12006
12290
  recommendedAppearancePresetIds: (input.recommendedAppearancePresetIds ?? []).map(asAppearancePresetId),
12007
12291
  defaultHeaderSelection: input.defaultHeaderSelection ? {
12008
12292
  layoutId: asHeaderLayoutId(input.defaultHeaderSelection.layoutId),
@@ -12061,7 +12345,69 @@ function nonEmptyHeaderStyleChoices(choices, fallbackLayoutId) {
12061
12345
  };
12062
12346
  return [first, ...choices.slice(1)];
12063
12347
  }
12064
- function inferHeaderCurationFromLegacyLooks(lookIds) {
12348
+ function uniqueCompatibleHeaderStyleChoices(choices, fallbackLayoutId) {
12349
+ const compatible = new Set(getCompatibleHeaderStyleIds(fallbackLayoutId));
12350
+ const seen = /* @__PURE__ */ new Set();
12351
+ const unique = choices.filter((choice) => {
12352
+ if (!compatible.has(choice.id)) return false;
12353
+ if (seen.has(choice.id)) return false;
12354
+ seen.add(choice.id);
12355
+ return true;
12356
+ });
12357
+ return nonEmptyHeaderStyleChoices(unique, fallbackLayoutId);
12358
+ }
12359
+ function inferredHeaderStyleValuesForRecipes(layoutId, recipes) {
12360
+ switch (layoutId) {
12361
+ case "classic":
12362
+ if (isExpressiveRecipe(recipes)) {
12363
+ return [
12364
+ "brand-bar",
12365
+ "brand-underline",
12366
+ "flat-tabs",
12367
+ "brand-pill",
12368
+ "fine-line"
12369
+ ];
12370
+ }
12371
+ if (recipes.spacing === "compact") {
12372
+ return ["flat-tabs", "fine-line", "minimal", "brand-bar"];
12373
+ }
12374
+ if (isSerifTypographyRecipe(recipes)) {
12375
+ return ["serif-line", "fine-line", "minimal", "soft-bar"];
12376
+ }
12377
+ if (recipes.radius === "rounded" || recipes.radius === "pill") {
12378
+ return ["soft-bar", "pill-nav", "fine-line", "minimal"];
12379
+ }
12380
+ return ["fine-line", "minimal", "soft-bar", "brand-bar"];
12381
+ case "centered":
12382
+ if (isSerifTypographyRecipe(recipes)) {
12383
+ return ["serif-line", "fine-line", "minimal", "soft-bar"];
12384
+ }
12385
+ if (isExpressiveRecipe(recipes)) {
12386
+ return ["brand-pill", "flat-tabs", "brand-bar", "fine-line"];
12387
+ }
12388
+ if (recipes.radius === "rounded" || recipes.radius === "pill") {
12389
+ return ["soft-bar", "pill-nav", "fine-line", "minimal"];
12390
+ }
12391
+ return ["minimal", "fine-line", "soft-bar"];
12392
+ case "floating":
12393
+ if (isExpressiveRecipe(recipes)) {
12394
+ return ["glass", "split-glass", "brand-pill", "soft-shell"];
12395
+ }
12396
+ if (isSerifTypographyRecipe(recipes)) {
12397
+ return ["split-pill", "minimal-surface", "soft-shell"];
12398
+ }
12399
+ return ["soft-shell", "minimal-surface", "glass"];
12400
+ default:
12401
+ return [];
12402
+ }
12403
+ }
12404
+ function isExpressiveRecipe(recipes) {
12405
+ return recipes.contrast === "maximum" || recipes.shadow === "layered" || recipes.motion === "expressive";
12406
+ }
12407
+ function isSerifTypographyRecipe(recipes) {
12408
+ return recipes.typography === "serif-editorial" || recipes.typography === "classic-serif";
12409
+ }
12410
+ function inferHeaderCurationFromLegacyLooks(lookIds, recipes) {
12065
12411
  const selections = lookIds.map((lookId) => resolveLegacyHeaderLookAlias(asHeaderLookId(lookId))).filter(
12066
12412
  (selection) => Boolean(selection)
12067
12413
  );
@@ -12074,8 +12420,15 @@ function inferHeaderCurationFromLegacyLooks(lookIds) {
12074
12420
  );
12075
12421
  const stylesByLayout = {};
12076
12422
  for (const layoutChoice of layoutChoices) {
12077
- const styleChoices = selections.filter((selection) => selection.layoutId === layoutChoice.id).map((selection) => headerStyleChoice(selection.styleId));
12078
- stylesByLayout[unbrandHeaderLayoutId(layoutChoice.id)] = nonEmptyHeaderStyleChoices(styleChoices, layoutChoice.id);
12423
+ const legacyStyleChoices = selections.filter((selection) => selection.layoutId === layoutChoice.id).map((selection) => headerStyleChoice(selection.styleId));
12424
+ const inferredStyleChoices = inferredHeaderStyleValuesForRecipes(
12425
+ layoutChoice.id,
12426
+ recipes
12427
+ ).map((styleId) => headerStyleChoice(styleId));
12428
+ stylesByLayout[unbrandHeaderLayoutId(layoutChoice.id)] = uniqueCompatibleHeaderStyleChoices(
12429
+ [...legacyStyleChoices, ...inferredStyleChoices],
12430
+ layoutChoice.id
12431
+ );
12079
12432
  }
12080
12433
  return {
12081
12434
  defaultHeaderSelection,
@@ -12495,10 +12848,10 @@ var curatedSiteStyles = [
12495
12848
  ]
12496
12849
  }),
12497
12850
  defineCuratedSiteStyle({
12498
- id: "site-style:soft-earth",
12851
+ id: SOFT_EARTH_SITE_STYLE_ID,
12499
12852
  name: "Soft Earth",
12500
12853
  description: "Warm, grounded, and editorial for yoga studios, retreats, and wellbeing communities.",
12501
- 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.",
12854
+ 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.",
12502
12855
  siteCreatorSelection: {
12503
12856
  kind: "site_creator_keyword_heuristic",
12504
12857
  priority: 45
@@ -12568,14 +12921,18 @@ var curatedSiteStyles = [
12568
12921
  paragraphSize: "default",
12569
12922
  headingSize: "editorial"
12570
12923
  }
12571
- }
12924
+ },
12925
+ accordions: softEarthAccordionSystem
12926
+ },
12927
+ defaultBlockVariants: {
12928
+ "block.faq": "question-columns"
12572
12929
  },
12573
12930
  recommendedAppearancePresetIds: [
12574
12931
  "hero-brand-scrim",
12575
- "intro-soft-earth-statement",
12576
- "feature-cards-soft-earth-offerings",
12577
- "testimonials-soft-earth-proof-band",
12578
- "faq-soft-earth-two-column",
12932
+ "intro-organic-statement",
12933
+ "feature-cards-raised-rule",
12934
+ "events-lined-panel",
12935
+ "testimonials-brand-background-quotes",
12579
12936
  "contact-form-panel"
12580
12937
  ],
12581
12938
  recommendedHeaderLookIds: [
@@ -12679,7 +13036,7 @@ var curatedSiteStyles = [
12679
13036
  "hero-brand-scrim-fixed-frame",
12680
13037
  "body-text-editorial-intro",
12681
13038
  "schedule-details-brand-depth",
12682
- "testimonials-accent-quote-proof",
13039
+ "testimonials-accent-quote-cards",
12683
13040
  "contact-form-brand-depth-card"
12684
13041
  ],
12685
13042
  recommendedHeaderLookIds: [
@@ -12774,6 +13131,7 @@ var themeV2RuntimeStyleFieldNames = [
12774
13131
  ];
12775
13132
  var themeV2BlockSpecificRawStyleFieldNames = [
12776
13133
  "_contentCardStyles",
13134
+ "_heroLayoutStyles",
12777
13135
  "_textCardStyles"
12778
13136
  ];
12779
13137
  var themeV2NormalEditorRawStyleFieldNames = [
@@ -12783,6 +13141,10 @@ var themeV2NormalEditorRawStyleFieldNames = [
12783
13141
  var themeV2NormalEditorRawStyleFieldNameSet = new Set(
12784
13142
  themeV2NormalEditorRawStyleFieldNames
12785
13143
  );
13144
+ var themeV2CompilerOwnedFieldNames = [
13145
+ ...themeV2RuntimeStyleFieldNames,
13146
+ ...themeV2BlockSpecificRawStyleFieldNames
13147
+ ];
12786
13148
 
12787
13149
  // ../theme-core/src/site-styles/designState.ts
12788
13150
  var themeV2DesignStateSchemaVersion = 1;
@@ -12797,6 +13159,16 @@ var heroLegibilityStrategySchema = z23.enum([
12797
13159
  "scrim-gradient",
12798
13160
  "solid-panel"
12799
13161
  ]);
13162
+ var heroCompositionIntentSchema = z23.enum([
13163
+ "center",
13164
+ "bottom-left"
13165
+ ]);
13166
+ var heroTypographyScaleIntentSchema = z23.enum([
13167
+ "quiet",
13168
+ "editorial",
13169
+ "display",
13170
+ "poster"
13171
+ ]);
12800
13172
  var sectionHeightIntentSchema = z23.enum([
12801
13173
  "default",
12802
13174
  "banner",
@@ -12832,6 +13204,7 @@ var imageSurfaceTreatmentSchema = z23.discriminatedUnion("kind", [
12832
13204
  ]);
12833
13205
  var testimonialCardTreatmentSchema = z23.enum(["default", "accent-quote"]);
12834
13206
  var tileTreatmentSchema = z23.enum(tileTreatmentValues);
13207
+ var eventListTreatmentSchema = z23.enum(eventListTreatmentValues);
12835
13208
  var eyebrowTreatmentSchema = z23.enum(eyebrowTreatmentValues);
12836
13209
  function uniqueNonEmpty(values) {
12837
13210
  const uniqueValues = [...new Set(values)];
@@ -12873,10 +13246,13 @@ var blockDesignPlanSchema = z23.object({
12873
13246
  emphasis: z23.enum(userDesignOptionCatalog.emphases),
12874
13247
  sectionHeight: sectionHeightIntentSchema.optional(),
12875
13248
  heroLegibility: heroLegibilityStrategySchema.optional(),
13249
+ heroComposition: heroCompositionIntentSchema.optional(),
13250
+ heroTypographyScale: heroTypographyScaleIntentSchema.optional(),
12876
13251
  imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
12877
13252
  imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
12878
13253
  testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
12879
13254
  tileTreatment: tileTreatmentSchema.optional(),
13255
+ eventListTreatment: eventListTreatmentSchema.optional(),
12880
13256
  eyebrowTreatment: eyebrowTreatmentSchema.optional()
12881
13257
  }).strict();
12882
13258
  var styleAuthoritySchema = z23.discriminatedUnion("kind", [
@@ -14276,6 +14652,7 @@ function styledSection(config) {
14276
14652
  renderBackgroundImage = true,
14277
14653
  backgroundImageLoading,
14278
14654
  backgroundImageFetchPriority,
14655
+ allowOverflow = false,
14279
14656
  fullWidthPath
14280
14657
  } = config;
14281
14658
  const renderedBackgroundNodes = backgroundLayer(`${bindFrom}.background`, {
@@ -14310,7 +14687,7 @@ function styledSection(config) {
14310
14687
  // No fallback needed - transform handles all cases via defaultSpacing
14311
14688
  }
14312
14689
  },
14313
- allowOverflow: {
14690
+ allowOverflow: allowOverflow ? true : {
14314
14691
  $bind: {
14315
14692
  from: `${bindFrom}.background`,
14316
14693
  transforms: [{ id: "background.resolveAllowOverflow" }],
@@ -15005,6 +15382,14 @@ var tileTreatmentSet = new Set(tileTreatmentValues);
15005
15382
  function isTileTreatment(value) {
15006
15383
  return typeof value === "string" && tileTreatmentSet.has(value);
15007
15384
  }
15385
+ var eventListTreatmentClassMap = {
15386
+ plain: "",
15387
+ "lined-panel": "rb-event-list-treatment-lined-panel"
15388
+ };
15389
+ var eventListTreatmentSet = new Set(eventListTreatmentValues);
15390
+ function isEventListTreatment(value) {
15391
+ return typeof value === "string" && eventListTreatmentSet.has(value);
15392
+ }
15008
15393
  var sectionClassNameTransform = {
15009
15394
  id: "sectionStyles.resolveClassName",
15010
15395
  kind: "string",
@@ -15067,9 +15452,20 @@ var sectionClassNameTransform = {
15067
15452
  if (tileTreatmentClass) {
15068
15453
  classes.push(tileTreatmentClass);
15069
15454
  }
15070
- } else if (typeof tileTreatment === "string" && true) {
15455
+ } else if (typeof tileTreatment === "string" && true) {
15456
+ console.warn(
15457
+ `[sectionStyles] Invalid tileTreatment value in _sectionStyles: "${tileTreatment}". Expected one of: ${tileTreatmentValues.join(", ")}.`
15458
+ );
15459
+ }
15460
+ const eventListTreatment = input?.eventListTreatment;
15461
+ if (isEventListTreatment(eventListTreatment)) {
15462
+ const eventListTreatmentClass = eventListTreatmentClassMap[eventListTreatment];
15463
+ if (eventListTreatmentClass) {
15464
+ classes.push(eventListTreatmentClass);
15465
+ }
15466
+ } else if (typeof eventListTreatment === "string" && true) {
15071
15467
  console.warn(
15072
- `[sectionStyles] Invalid tileTreatment value in _sectionStyles: "${tileTreatment}". Expected one of: ${tileTreatmentValues.join(", ")}.`
15468
+ `[sectionStyles] Invalid eventListTreatment value in _sectionStyles: "${eventListTreatment}". Expected one of: ${eventListTreatmentValues.join(", ")}.`
15073
15469
  );
15074
15470
  }
15075
15471
  if (hasFixedFrameBackgroundMotion(input)) {
@@ -15507,6 +15903,35 @@ function sectionState(opts) {
15507
15903
  );
15508
15904
  }
15509
15905
 
15906
+ // ../blocks/src/system/node/fragments/headingDecoration.ts
15907
+ var defaultBindFrom = "_sectionStyles.headingDecoration";
15908
+ function headingDecoration({
15909
+ bindFrom = defaultBindFrom,
15910
+ family,
15911
+ placement,
15912
+ className
15913
+ }) {
15914
+ return el(
15915
+ "div",
15916
+ {
15917
+ "aria-hidden": "true",
15918
+ className: {
15919
+ $bind: {
15920
+ from: bindFrom,
15921
+ transforms: [
15922
+ {
15923
+ id: "ui.headingDecorationClassName",
15924
+ options: { baseClass: className, family }
15925
+ }
15926
+ ]
15927
+ }
15928
+ }
15929
+ },
15930
+ null,
15931
+ when(`${bindFrom}.placement`, { equals: placement })
15932
+ );
15933
+ }
15934
+
15510
15935
  // ../blocks/src/system/fragments/types.ts
15511
15936
  import { z as z27 } from "zod";
15512
15937
  var FRAGMENT_ID_PATTERN = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/i;
@@ -15592,47 +16017,48 @@ function validateFieldDefinitions(fields3, fragmentId) {
15592
16017
  function prefixFieldId(field, scope) {
15593
16018
  const cloned = cloneFieldDefinition2(field);
15594
16019
  cloned.id = `${scope}.${field.id}`;
15595
- cloned.defaultValue = cloneUnknown(cloned.defaultValue);
16020
+ const defaultValue = cloned.defaultValue;
16021
+ cloned.defaultValue = cloneUnknown(defaultValue);
15596
16022
  cloned.visibleRoles = cloned.visibleRoles ? [...cloned.visibleRoles] : void 0;
15597
16023
  cloned.ui = cloneUnknown(cloned.ui);
15598
16024
  return cloned;
15599
16025
  }
15600
16026
  function cloneFieldDefinition2(field) {
15601
- switch (field.type) {
15602
- case "repeater":
15603
- if (field.polymorphic && field.itemTypes) {
15604
- return {
15605
- ...field,
15606
- polymorphic: true,
15607
- itemTypes: Object.fromEntries(
15608
- Object.entries(field.itemTypes).map(([key, itemType]) => [
15609
- key,
15610
- {
15611
- ...itemType,
15612
- fields: itemType.fields.map(cloneFieldDefinition2)
15613
- }
15614
- ])
15615
- )
15616
- };
15617
- } else if (field.schema) {
15618
- return {
15619
- ...field,
15620
- schema: {
15621
- fields: field.schema.fields.map(cloneFieldDefinition2)
15622
- }
15623
- };
15624
- }
15625
- return { ...field };
15626
- case "group":
16027
+ if (field.type === "repeater") {
16028
+ if (field.polymorphic && field.itemTypes) {
16029
+ return {
16030
+ ...field,
16031
+ polymorphic: true,
16032
+ itemTypes: Object.fromEntries(
16033
+ Object.entries(field.itemTypes).map(([key, itemType]) => [
16034
+ key,
16035
+ {
16036
+ ...itemType,
16037
+ fields: itemType.fields.map(cloneFieldDefinition2)
16038
+ }
16039
+ ])
16040
+ )
16041
+ };
16042
+ }
16043
+ if (field.schema) {
15627
16044
  return {
15628
16045
  ...field,
15629
16046
  schema: {
15630
16047
  fields: field.schema.fields.map(cloneFieldDefinition2)
15631
16048
  }
15632
16049
  };
15633
- default:
15634
- return { ...field };
16050
+ }
16051
+ return { ...field };
16052
+ }
16053
+ if (field.type === "group") {
16054
+ return {
16055
+ ...field,
16056
+ schema: {
16057
+ fields: field.schema.fields.map(cloneFieldDefinition2)
16058
+ }
16059
+ };
15635
16060
  }
16061
+ return { ...field };
15636
16062
  }
15637
16063
  function cloneUnknown(value) {
15638
16064
  if (value == null || typeof value !== "object") {
@@ -16285,6 +16711,10 @@ var testimonialsHeadingFragment = defineFragment({
16285
16711
  when("content.heading"),
16286
16712
  bind("content.heading")
16287
16713
  ),
16714
+ headingDecoration({
16715
+ family: "short-center-rule",
16716
+ placement: "under-centered-heading"
16717
+ }),
16288
16718
  text(
16289
16719
  {
16290
16720
  as: "p",
@@ -16956,6 +17386,41 @@ var faqHeadingFragment = defineFragment({
16956
17386
  });
16957
17387
 
16958
17388
  // ../blocks/src/system/fragments/library/faqAccordion.ts
17389
+ function createFaqAccordionLayout(options = {}) {
17390
+ return accordionList({
17391
+ collection: "content.items",
17392
+ itemName: "faqItem",
17393
+ indexName: "faqIndex",
17394
+ accordionProps: {
17395
+ className: options.rootClassName ?? "accordion-root",
17396
+ type: "single",
17397
+ collapsible: true
17398
+ },
17399
+ itemProps: {
17400
+ className: {
17401
+ $bind: {
17402
+ from: "content._cardStyles",
17403
+ transforms: [
17404
+ {
17405
+ id: "boxStyles.all",
17406
+ options: {
17407
+ axis: "all",
17408
+ includeSpacing: false,
17409
+ baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-hidden"
17410
+ }
17411
+ }
17412
+ ]
17413
+ },
17414
+ fallback: "rb-faq-item"
17415
+ },
17416
+ iconStyle: { $bind: { from: "theme.accordions.icon.style" } },
17417
+ // Legacy theme accordion style
17418
+ iconTreatment: { $bind: { from: "content._sectionStyles.accordionIconTreatment" } }
17419
+ },
17420
+ triggerFrom: "faqItem.question",
17421
+ contentFrom: "faqItem.answer"
17422
+ });
17423
+ }
16959
17424
  var faqAccordionFragment = defineFragment({
16960
17425
  id: "faqAccordion",
16961
17426
  title: "FAQ Accordion",
@@ -16989,40 +17454,7 @@ var faqAccordionFragment = defineFragment({
16989
17454
  }
16990
17455
  }
16991
17456
  ],
16992
- layout: accordionList({
16993
- collection: "content.items",
16994
- itemName: "faqItem",
16995
- indexName: "faqIndex",
16996
- accordionProps: {
16997
- className: "accordion-root",
16998
- // CSS-first: all styling handled by theme CSS
16999
- type: "single",
17000
- collapsible: true
17001
- },
17002
- itemProps: {
17003
- className: {
17004
- $bind: {
17005
- from: "content._cardStyles",
17006
- transforms: [
17007
- {
17008
- id: "boxStyles.all",
17009
- options: {
17010
- axis: "all",
17011
- includeSpacing: false,
17012
- baseClass: "rb-faq-item rb-relative rb-isolate rb-overflow-hidden rb-border"
17013
- }
17014
- }
17015
- ]
17016
- },
17017
- fallback: "rb-faq-item"
17018
- },
17019
- iconStyle: { $bind: { from: "theme.accordions.icon.style" } },
17020
- // Legacy theme accordion style
17021
- iconTreatment: { $bind: { from: "content._sectionStyles.accordionIconTreatment" } }
17022
- },
17023
- triggerFrom: "faqItem.question",
17024
- contentFrom: "faqItem.answer"
17025
- })
17457
+ layout: createFaqAccordionLayout()
17026
17458
  });
17027
17459
 
17028
17460
  // ../blocks/src/system/fragments/library/card.ts
@@ -17969,7 +18401,8 @@ function createBlockManifestWithContentShape(config, _contentShape) {
17969
18401
  return createBlockManifest(config);
17970
18402
  }
17971
18403
  function normalizeBlockLayout(layout) {
17972
- return Array.isArray(layout) ? [...layout] : layout;
18404
+ const rawLayout = layout;
18405
+ return Array.isArray(rawLayout) ? rawLayout : rawLayout;
17973
18406
  }
17974
18407
  function deriveComponentName(id) {
17975
18408
  const base = id.replace(/^block\./, "");
@@ -18075,6 +18508,7 @@ var microLayout = styledSection({
18075
18508
  function splitLayoutWith(children) {
18076
18509
  return styledSection({
18077
18510
  children: styledContainer({
18511
+ baseClassName: "rb-relative rb-isolate rb-overflow-visible",
18078
18512
  children: {
18079
18513
  type: "grid",
18080
18514
  props: {
@@ -18099,6 +18533,7 @@ function splitLayoutWith(children) {
18099
18533
  // The split variants render the image as a real grid column, so suppress
18100
18534
  // the default absolute background image layer while keeping color/overlay.
18101
18535
  renderBackgroundImage: false,
18536
+ allowOverflow: true,
18102
18537
  baseClass: ""
18103
18538
  });
18104
18539
  }
@@ -18252,6 +18687,21 @@ function introHeading(className) {
18252
18687
  bind("content.title")
18253
18688
  );
18254
18689
  }
18690
+ function introHeadingGroup(className) {
18691
+ return stack(
18692
+ {
18693
+ gap: "sm",
18694
+ className: "rb-intro-heading-group"
18695
+ },
18696
+ [
18697
+ introHeading(className),
18698
+ headingDecoration({
18699
+ family: "organic-squiggle",
18700
+ placement: "after-heading"
18701
+ })
18702
+ ]
18703
+ );
18704
+ }
18255
18705
  function introBody(className = "rb-prose rb-max-w-none") {
18256
18706
  return richText({ className }, bind("content.body"));
18257
18707
  }
@@ -18270,6 +18720,10 @@ function introCopyStack(options = {}) {
18270
18720
  },
18271
18721
  [
18272
18722
  introHeading(options.headingClassName ?? "rb-intro-title"),
18723
+ headingDecoration({
18724
+ family: "organic-squiggle",
18725
+ placement: "after-heading"
18726
+ }),
18273
18727
  introBody(options.bodyClassName),
18274
18728
  introCtas(options.ctaJustify)
18275
18729
  ]
@@ -18309,7 +18763,7 @@ var statementCopyLayout = styledSection({
18309
18763
  className: "rb-intro rb-intro-statement rb-grid rb-grid-cols-1 rb-gap-8 rb-md-grid-cols-2 rb-md-items-start"
18310
18764
  },
18311
18765
  [
18312
- introHeading("rb-intro-title rb-max-w-xl"),
18766
+ introHeadingGroup("rb-intro-title rb-max-w-xl"),
18313
18767
  stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
18314
18768
  introBody(),
18315
18769
  introCtas("start")
@@ -18330,7 +18784,7 @@ var statementMediaLayout = styledSection({
18330
18784
  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"
18331
18785
  },
18332
18786
  [
18333
- introHeading("rb-intro-title rb-max-w-xl"),
18787
+ introHeadingGroup("rb-intro-title rb-max-w-xl"),
18334
18788
  stack({ gap: "md", className: "rb-intro-copy rb-max-w-xl" }, [
18335
18789
  introBody(),
18336
18790
  introCtas("start")
@@ -19332,6 +19786,9 @@ function isNodeDefinitionArray(layout) {
19332
19786
  }
19333
19787
  var headingLayout = fragmentLayoutNode(faqHeadingFragment.layout);
19334
19788
  var accordionLayout = fragmentLayoutNode(faqAccordionFragment.layout);
19789
+ var questionColumnsAccordionLayout = createFaqAccordionLayout({
19790
+ rootClassName: "accordion-root rb-faq-question-columns rb-grid rb-grid-cols-1 rb-gap-4 rb-lg-grid-cols-2"
19791
+ });
19335
19792
  var defaultLayout = styledSection({
19336
19793
  children: styledContainer({
19337
19794
  baseClassName: "rb-relative rb-isolate",
@@ -19345,11 +19802,24 @@ var twoColumnLayout = styledSection({
19345
19802
  children: el(
19346
19803
  "div",
19347
19804
  {
19348
- className: "rb-faq-two-column rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
19805
+ className: "rb-faq-split-heading rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
19349
19806
  },
19350
19807
  [
19351
- el("div", { className: "rb-faq-two-column-heading" }, [headingLayout]),
19352
- el("div", { className: "rb-faq-two-column-accordion" }, [accordionLayout])
19808
+ el("div", { className: "rb-faq-split-heading-copy" }, [headingLayout]),
19809
+ el("div", { className: "rb-faq-split-heading-accordion" }, [accordionLayout])
19810
+ ]
19811
+ )
19812
+ }),
19813
+ baseClass: ""
19814
+ });
19815
+ var questionColumnsLayout = styledSection({
19816
+ children: styledContainer({
19817
+ baseClassName: "rb-relative rb-isolate",
19818
+ children: stack(
19819
+ { gap: "xl", className: "rb-w-full" },
19820
+ [
19821
+ headingLayout,
19822
+ questionColumnsAccordionLayout
19353
19823
  ]
19354
19824
  )
19355
19825
  }),
@@ -19374,7 +19844,8 @@ var faqManifest = createBlockManifest({
19374
19844
  layout: defaultLayout,
19375
19845
  variants: {
19376
19846
  default: defaultLayout,
19377
- "two-column": twoColumnLayout
19847
+ "two-column": twoColumnLayout,
19848
+ "question-columns": questionColumnsLayout
19378
19849
  },
19379
19850
  defaultVariant: "default",
19380
19851
  variantOptions: {
@@ -19385,6 +19856,10 @@ var faqManifest = createBlockManifest({
19385
19856
  "two-column": {
19386
19857
  label: "Two column",
19387
19858
  description: "A left heading column with FAQ items on the right."
19859
+ },
19860
+ "question-columns": {
19861
+ label: "Question columns",
19862
+ description: "A full-width heading above FAQ items split into two columns."
19388
19863
  }
19389
19864
  },
19390
19865
  description: "Accordion of frequently asked questions and answers.",
@@ -19473,16 +19948,20 @@ var marqueeLoopTransform = {
19473
19948
  summary: "Repeat an array to a minimum length, then duplicate it for seamless marquee looping",
19474
19949
  schema: marqueeLoopOptionsSchema,
19475
19950
  run: (value, options) => {
19476
- if (!Array.isArray(value) || value.length === 0) return [];
19951
+ const items = toUnknownArray(value);
19952
+ if (items.length === 0) return [];
19477
19953
  const minItems = options?.minItems ?? 10;
19478
19954
  const base = [];
19479
19955
  while (base.length < minItems) {
19480
- base.push(...value);
19956
+ base.push(...items);
19481
19957
  if (base.length > 1e3) break;
19482
19958
  }
19483
19959
  return [...base, ...base];
19484
19960
  }
19485
19961
  };
19962
+ function toUnknownArray(value) {
19963
+ return Array.isArray(value) ? value : [];
19964
+ }
19486
19965
  var formattingTransforms = [
19487
19966
  uppercaseTransform,
19488
19967
  fallbackTransform,
@@ -19506,9 +19985,21 @@ var eyebrowTreatmentClassMap = {
19506
19985
  "accent-pill-bounce": "rb-eyebrow-treatment-pill rb-eyebrow-treatment-accent rb-eyebrow-treatment-pill-bounce"
19507
19986
  };
19508
19987
  var eyebrowTreatmentSet = new Set(eyebrowTreatmentValues);
19988
+ var headingDecorationFamilySet = new Set(visibleHeadingDecorationFamilyValues);
19989
+ var headingDecorationPlacementSet = new Set(visibleHeadingDecorationPlacementValues);
19990
+ var headingDecorationColorTokenSet = new Set(headingDecorationColorTokenValues);
19509
19991
  function isEyebrowTreatment(value) {
19510
19992
  return typeof value === "string" && eyebrowTreatmentSet.has(value);
19511
19993
  }
19994
+ function isHeadingDecorationFamily(value) {
19995
+ return typeof value === "string" && headingDecorationFamilySet.has(value);
19996
+ }
19997
+ function isHeadingDecorationPlacement(value) {
19998
+ return typeof value === "string" && headingDecorationPlacementSet.has(value);
19999
+ }
20000
+ function isHeadingDecorationColorToken(value) {
20001
+ return typeof value === "string" && headingDecorationColorTokenSet.has(value);
20002
+ }
19512
20003
  var imageGalleryCornerClassMap = {
19513
20004
  none: "",
19514
20005
  sm: "rb-rounded-sm",
@@ -19612,6 +20103,10 @@ var sectionStateToneTransform = {
19612
20103
  summary: "Map semantic section-state kind to feedback tone",
19613
20104
  run: (value) => sectionStateToneFromUnknown(value)
19614
20105
  };
20106
+ var heroTitleLengthThresholds = {
20107
+ medium: { maxCharacters: 42, maxWords: 6 },
20108
+ long: { maxCharacters: 78, maxWords: 11 }
20109
+ };
19615
20110
  function isPlainObject(value) {
19616
20111
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
19617
20112
  }
@@ -19619,6 +20114,14 @@ function readString(obj, key) {
19619
20114
  const v = obj[key];
19620
20115
  return typeof v === "string" ? v : void 0;
19621
20116
  }
20117
+ function resolveGeneratedHeroLayoutStyles(content) {
20118
+ const raw = content._heroLayoutStyles;
20119
+ return isPlainObject(raw) ? raw : null;
20120
+ }
20121
+ function readHeroLayoutString(content, generatedKey, fallbackKey = generatedKey) {
20122
+ const generated = resolveGeneratedHeroLayoutStyles(content);
20123
+ return generated && typeof generated[generatedKey] === "string" ? generated[generatedKey] : readString(content, fallbackKey);
20124
+ }
19622
20125
  function resolveHeroVariant(content) {
19623
20126
  const variant = readString(content, "variant");
19624
20127
  if (variant && variant.trim()) return variant.trim();
@@ -19627,14 +20130,14 @@ function resolveHeroVariant(content) {
19627
20130
  return null;
19628
20131
  }
19629
20132
  function resolveHeroContentAlignment(content) {
19630
- const raw = readString(content, "contentAlignment");
20133
+ const raw = readHeroLayoutString(content, "contentAlignment");
19631
20134
  if (raw === "left" || raw === "center" || raw === "right") return raw;
19632
20135
  const variant = resolveHeroVariant(content);
19633
20136
  if (variant === "split" || variant === "splitReverse") return "left";
19634
20137
  return "center";
19635
20138
  }
19636
20139
  function resolveHeroVerticalAlignment(content) {
19637
- const raw = readString(content, "verticalAlignment");
20140
+ const raw = readHeroLayoutString(content, "verticalAlignment");
19638
20141
  if (raw === "top" || raw === "center" || raw === "bottom") return raw;
19639
20142
  const sectionStyles = asPartialObject(content._sectionStyles);
19640
20143
  const minHeight = sectionStyles?.minHeight;
@@ -19644,11 +20147,29 @@ function resolveHeroVerticalAlignment(content) {
19644
20147
  return "top";
19645
20148
  }
19646
20149
  function resolveHeroContentMaxWidth(content) {
19647
- const raw = readString(content, "contentMaxWidth");
20150
+ const raw = readHeroLayoutString(content, "contentMaxWidth");
19648
20151
  if (raw === "default" || raw === "narrow" || raw === "medium" || raw === "wide")
19649
20152
  return raw;
19650
20153
  return "default";
19651
20154
  }
20155
+ function resolveHeroTypographyScale(content) {
20156
+ const raw = readHeroLayoutString(
20157
+ content,
20158
+ "typographyScale",
20159
+ "heroTypographyScale"
20160
+ );
20161
+ if (raw === "quiet" || raw === "editorial" || raw === "display" || raw === "poster") {
20162
+ return raw;
20163
+ }
20164
+ return null;
20165
+ }
20166
+ function resolveHeroTitleLength(content) {
20167
+ const headline = readString(content, "headline")?.trim() ?? "";
20168
+ const wordCount = headline.length === 0 ? 0 : headline.split(/\s+/).length;
20169
+ if (headline.length > heroTitleLengthThresholds.long.maxCharacters || wordCount > heroTitleLengthThresholds.long.maxWords) return "long";
20170
+ if (headline.length > heroTitleLengthThresholds.medium.maxCharacters || wordCount > heroTitleLengthThresholds.medium.maxWords) return "medium";
20171
+ return "short";
20172
+ }
19652
20173
  var heroContentWrapperClassSchema = z33.object({
19653
20174
  base: z33.string().optional()
19654
20175
  });
@@ -19661,6 +20182,8 @@ var heroContentWrapperClassTransform = {
19661
20182
  const content = isPlainObject(value) ? value : isPlainObject(context.data) ? context.data : {};
19662
20183
  const alignment = resolveHeroContentAlignment(content);
19663
20184
  const maxWidth = resolveHeroContentMaxWidth(content);
20185
+ const typographyScale = resolveHeroTypographyScale(content);
20186
+ const titleLength = resolveHeroTitleLength(content);
19664
20187
  const textAlignClass = alignment === "center" ? "rb-text-center" : alignment === "right" ? "rb-text-right" : "rb-text-left";
19665
20188
  const maxWidthClass = maxWidth === "narrow" ? "rb-max-w-2xl" : maxWidth === "medium" ? "rb-max-w-3xl" : maxWidth === "wide" ? "rb-max-w-5xl" : "";
19666
20189
  const positionClass = alignment === "center" ? "rb-mx-auto" : alignment === "right" ? "rb-ml-auto" : "";
@@ -19668,7 +20191,9 @@ var heroContentWrapperClassTransform = {
19668
20191
  options?.base,
19669
20192
  textAlignClass,
19670
20193
  maxWidthClass,
19671
- positionClass
20194
+ positionClass,
20195
+ typographyScale ? `rb-hero-typography-${typographyScale}` : "",
20196
+ `rb-hero-title-${titleLength}`
19672
20197
  ]);
19673
20198
  }
19674
20199
  };
@@ -19968,11 +20493,67 @@ var uiTransforms = [
19968
20493
  const treatment = isEyebrowTreatment(value) ? value : "plain";
19969
20494
  return joinClasses3([baseClass, eyebrowTreatmentClassMap[treatment]]);
19970
20495
  }
20496
+ },
20497
+ {
20498
+ id: "ui.headingDecorationClassName",
20499
+ kind: "string",
20500
+ summary: "Apply constrained Theme V2 heading decoration classes",
20501
+ run: (value, options) => {
20502
+ const baseClass = typeof options?.baseClass === "string" && options.baseClass.trim() ? options.baseClass : "rb-heading-decoration";
20503
+ const decoration = asPartialObject(value);
20504
+ const family = isHeadingDecorationFamily(decoration?.family) ? decoration.family : null;
20505
+ const allowedFamily = isHeadingDecorationFamily(options?.family) ? options.family : null;
20506
+ const placement = isHeadingDecorationPlacement(decoration?.placement) ? decoration.placement : null;
20507
+ const colorToken = isHeadingDecorationColorToken(decoration?.colorToken) ? decoration.colorToken : "primary";
20508
+ if (!family || !placement) return "rb-hidden";
20509
+ if (allowedFamily && family !== allowedFamily) return "rb-hidden";
20510
+ return joinClasses3([
20511
+ baseClass,
20512
+ `rb-heading-decoration-${family}`,
20513
+ `rb-heading-decoration-placement-${placement}`,
20514
+ `rb-heading-decoration-color-${colorToken}`
20515
+ ]);
20516
+ }
19971
20517
  }
19972
20518
  ];
19973
20519
 
19974
20520
  // ../blocks/src/system/transforms/registry/layout.ts
19975
20521
  import { z as z34 } from "zod";
20522
+
20523
+ // ../theme-core/src/siteChromePlacement.ts
20524
+ var HEADER_POSITIONINGS = ["static", "sticky", "fixed"];
20525
+ function parseHeaderPositioning(value) {
20526
+ return isHeaderPositioning(value) ? value : "static";
20527
+ }
20528
+ function isHeaderPositioning(value) {
20529
+ return typeof value === "string" && HEADER_POSITIONINGS.includes(value);
20530
+ }
20531
+ function planSiteChromePlacement(positioning) {
20532
+ switch (positioning) {
20533
+ case "static":
20534
+ return {
20535
+ kind: "static",
20536
+ headerRootClassName: null,
20537
+ standaloneShellClassName: null
20538
+ };
20539
+ case "sticky":
20540
+ return {
20541
+ kind: "sticky",
20542
+ headerRootClassName: "rb-sticky rb-top-0",
20543
+ standaloneShellClassName: "sticky top-0 z-40 w-full"
20544
+ };
20545
+ case "fixed":
20546
+ return {
20547
+ kind: "fixed",
20548
+ headerRootClassName: "rb-fixed rb-top-0 rb-left-0 rb-right-0",
20549
+ standaloneShellClassName: "fixed left-0 right-0 top-0 z-40 w-full"
20550
+ };
20551
+ default:
20552
+ return assertNever(positioning);
20553
+ }
20554
+ }
20555
+
20556
+ // ../blocks/src/system/transforms/registry/layout.ts
19976
20557
  var joinClasses4 = (parts) => parts.filter(
19977
20558
  (part) => typeof part === "string" && part.trim().length > 0
19978
20559
  ).join(" ").replace(/\s+/g, " ").trim();
@@ -20088,7 +20669,8 @@ var headerRootClassTransform = {
20088
20669
  ...options
20089
20670
  };
20090
20671
  const content = asPartialObject(value) ?? {};
20091
- const positioning = typeof content.positioning === "string" ? content.positioning : "static";
20672
+ const positioning = parseHeaderPositioning(content.positioning);
20673
+ const placement = planSiteChromePlacement(positioning);
20092
20674
  const shrinkOnScroll = Boolean(content.shrinkOnScroll);
20093
20675
  const header = asPartialObject(value);
20094
20676
  const visuals = resolveHeaderVisualStyles(header, context.theme);
@@ -20100,14 +20682,14 @@ var headerRootClassTransform = {
20100
20682
  if (config.blur) classes.push(config.blur);
20101
20683
  if (config.blurSupport) classes.push(config.blurSupport);
20102
20684
  }
20103
- if (positioning === "sticky") {
20685
+ if (placement.kind === "sticky") {
20104
20686
  classes.push(
20105
20687
  visuals.isTransparent ? config.stickyTransparent : config.sticky
20106
20688
  );
20107
- } else if (positioning === "fixed") {
20689
+ } else if (placement.kind === "fixed") {
20108
20690
  classes.push(config.fixed);
20109
20691
  }
20110
- if (shrinkOnScroll && (positioning === "sticky" || positioning === "fixed")) {
20692
+ if (shrinkOnScroll && placement.kind !== "static") {
20111
20693
  classes.push(config.shrink);
20112
20694
  }
20113
20695
  const VALID_VARIANTS = [
@@ -20642,6 +21224,10 @@ function desktopOnlyDisplay(display) {
20642
21224
  return `rb-hidden ${LARGE_DISPLAY_CLASSES[display]}`;
20643
21225
  }
20644
21226
 
21227
+ // ../theme-core/src/siteChromeOverlayClearance.ts
21228
+ var SITE_CHROME_VISIBLE_HEADER_ATTR = "data-site-chrome-visible-header";
21229
+ var SITE_CHROME_VISIBLE_HEADER_SELECTOR = `[${SITE_CHROME_VISIBLE_HEADER_ATTR}="true"]`;
21230
+
20645
21231
  // ../blocks/src/system/blocks/site-header.ts
20646
21232
  var logoRow = link(
20647
21233
  {
@@ -20914,6 +21500,7 @@ var transparentLayout = inline(
20914
21500
  );
20915
21501
  var floatingLayout = inline(
20916
21502
  {
21503
+ [SITE_CHROME_VISIBLE_HEADER_ATTR]: "true",
20917
21504
  className: bindProp("$root.theme.header.maxWidth", {
20918
21505
  transforms: pipe(
20919
21506
  tx("layout.maxWidthClass", {
@@ -21859,6 +22446,10 @@ var sectionHeading = stack(
21859
22446
  when("content.title"),
21860
22447
  bind("content.title")
21861
22448
  ),
22449
+ headingDecoration({
22450
+ family: "short-center-rule",
22451
+ placement: "under-centered-heading"
22452
+ }),
21862
22453
  richText(
21863
22454
  {
21864
22455
  className: "rb-feature-cards-description rb-prose rb-mx-auto rb-max-w-none",
@@ -23040,8 +23631,8 @@ var eventSurfaceScopeValues = [
23040
23631
  "custom"
23041
23632
  ];
23042
23633
  var eventScheduleScopeValues = ["any", "recurring", "oneOff"];
23043
- var asEventCategoryId = (value) => value;
23044
- var asVenueId = (value) => value;
23634
+ var unsafeAsEventCategoryId = (value) => value;
23635
+ var unsafeAsVenueId = (value) => value;
23045
23636
  function normalizeEventBlockKind(value) {
23046
23637
  return value === "courses" || value === "events" ? value : "all";
23047
23638
  }
@@ -23067,10 +23658,10 @@ function normalizeEventCategoryIds(value) {
23067
23658
  if (Array.isArray(value)) {
23068
23659
  return normalizeIdList(
23069
23660
  value.filter((entry) => typeof entry === "string")
23070
- ).map(asEventCategoryId);
23661
+ ).map(unsafeAsEventCategoryId);
23071
23662
  }
23072
23663
  if (typeof value === "string") {
23073
- return normalizeIdList(value.split(",")).map(asEventCategoryId);
23664
+ return normalizeIdList(value.split(",")).map(unsafeAsEventCategoryId);
23074
23665
  }
23075
23666
  return [];
23076
23667
  }
@@ -23083,7 +23674,7 @@ function normalizeEventVenueId(value) {
23083
23674
  return null;
23084
23675
  }
23085
23676
  const trimmed = value.trim();
23086
- return trimmed ? asVenueId(trimmed) : null;
23677
+ return trimmed ? unsafeAsVenueId(trimmed) : null;
23087
23678
  }
23088
23679
  function normalizeEventStaffMemberId(value) {
23089
23680
  if (typeof value !== "string") {
@@ -24282,7 +24873,7 @@ var COLUMN_CLASSES = {
24282
24873
  };
24283
24874
  function getContainerClass(layout, columns) {
24284
24875
  if (layout === "compact") {
24285
- return "event-listing-compact-container rb-flex rb-flex-col rb-gap-2";
24876
+ return "event-listing-compact-container rb-flex rb-flex-col";
24286
24877
  }
24287
24878
  if (layout === "stack") {
24288
24879
  return "rb-flex rb-flex-col rb-gap-6";
@@ -27110,6 +27701,7 @@ import { z as z53 } from "zod";
27110
27701
  var storedProductCartItemSchema = z53.object({
27111
27702
  kind: z53.literal("product"),
27112
27703
  productId: z53.string().min(1),
27704
+ productCategoryId: z53.string().min(1).optional().nullable(),
27113
27705
  variantId: z53.string().min(1).optional().nullable(),
27114
27706
  title: z53.string().min(1),
27115
27707
  variantTitle: z53.string().optional().nullable(),
@@ -29614,6 +30206,10 @@ var scheduleTileTreatments = [
29614
30206
  "quiet",
29615
30207
  "brand-depth"
29616
30208
  ];
30209
+ var eventListTreatments = [
30210
+ "plain",
30211
+ "lined-panel"
30212
+ ];
29617
30213
  function scheduleDetailsCapable() {
29618
30214
  return declareBlockDesignCapability({
29619
30215
  sectionSurfaces: "supported",
@@ -29622,6 +30218,14 @@ function scheduleDetailsCapable() {
29622
30218
  tileTreatments: scheduleTileTreatments
29623
30219
  });
29624
30220
  }
30221
+ function eventListCapable() {
30222
+ return declareBlockDesignCapability({
30223
+ sectionSurfaces: "supported",
30224
+ contentFrames: ["plain"],
30225
+ itemSurfaces: "unsupported",
30226
+ eventListTreatments
30227
+ });
30228
+ }
29625
30229
  function defaultBoundaryBias(visualWeight) {
29626
30230
  return visualWeight === "featured" || visualWeight === "immersive" ? "clear" : "soft";
29627
30231
  }
@@ -29841,7 +30445,8 @@ var systemBlockDefinitionsRaw = [
29841
30445
  flow: bodyFlow,
29842
30446
  layoutProfiles: [
29843
30447
  layoutProfile({ variantKey: "default", family: "stack", weight: "standard" }),
29844
- layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" })
30448
+ layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" }),
30449
+ layoutProfile({ variantKey: "question-columns", family: "grid", weight: "standard" })
29845
30450
  ]
29846
30451
  })),
29847
30452
  withDesignCapability("block.site-header", siteHeaderBlockDefinition, declareNoBlockDesignCapability("site-chrome"), defineBlockDesignMetadata({
@@ -29935,11 +30540,11 @@ var systemBlockDefinitionsRaw = [
29935
30540
  flow: offeringsFlow,
29936
30541
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "centered", weight: "featured" })]
29937
30542
  })),
29938
- withDesignCapability("block.event-listing", eventListingBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
30543
+ withDesignCapability("block.event-listing", eventListingBlockDefinition, eventListCapable(), defineBlockDesignMetadata({
29939
30544
  flow: offeringsFlow,
29940
30545
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "stack", weight: "standard" })]
29941
30546
  })),
29942
- withDesignCapability("block.event-calendar", eventCalendarBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
30547
+ withDesignCapability("block.event-calendar", eventCalendarBlockDefinition, eventListCapable(), defineBlockDesignMetadata({
29943
30548
  flow: offeringsFlow,
29944
30549
  layoutProfiles: [
29945
30550
  layoutProfile({ variantKey: "combined", family: "grid", weight: "standard" }),
@@ -31036,6 +31641,15 @@ ${root} {
31036
31641
  `;
31037
31642
  }
31038
31643
 
31644
+ // ../theme-core/src/runtime/themeCssVarNames.ts
31645
+ var THEME_RADIUS_CSS_VARS = {
31646
+ block: "--rb-block-radius",
31647
+ button: "--rb-button-radius",
31648
+ input: "--rb-input-radius",
31649
+ legacyCard: "--radius-card",
31650
+ legacyControl: "--radius-control"
31651
+ };
31652
+
31039
31653
  // ../theme-core/src/blocks/vars/customer-portal.ts
31040
31654
  function generateCustomerPortalVars({
31041
31655
  themeId
@@ -31049,6 +31663,11 @@ ${root} {
31049
31663
  --cp-muted: rgb(var(--tb-mutedText));
31050
31664
  --cp-border: rgb(var(--tb-border));
31051
31665
  --cp-shadow: var(--shadow-elev);
31666
+ --cp-primary: rgb(var(--tb-primary));
31667
+ --cp-primary-hover: rgb(var(--tb-primary-700, var(--tb-primary)));
31668
+ --cp-error: rgb(var(--tb-destructive));
31669
+ --cp-card-radius: var(${THEME_RADIUS_CSS_VARS.block}, var(${THEME_RADIUS_CSS_VARS.legacyCard}, 0.75rem));
31670
+ --cp-control-radius: var(${THEME_RADIUS_CSS_VARS.input}, var(${THEME_RADIUS_CSS_VARS.legacyControl}, 0.5rem));
31052
31671
 
31053
31672
  /* Shared tab bar (underline style) */
31054
31673
  --rb-tab-border-width: 1px;
@@ -31099,7 +31718,7 @@ ${root} {
31099
31718
  --rb-modal-bg: var(--cp-card-bg);
31100
31719
  --rb-modal-border: var(--cp-card-border);
31101
31720
  --rb-modal-shadow: var(--shadow-lg, var(--shadow-elev));
31102
- --rb-modal-radius: var(--radius-card);
31721
+ --rb-modal-radius: var(--cp-card-radius);
31103
31722
  --rb-modal-max-width: 560px;
31104
31723
 
31105
31724
  /* Header */
@@ -32480,6 +33099,9 @@ import { jsx as jsx5 } from "react/jsx-runtime";
32480
33099
  import * as React from "react";
32481
33100
  import { Fragment, jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
32482
33101
 
33102
+ // ../theme-core/src/fonts/uploadFormat.ts
33103
+ var MAX_FONT_UPLOAD_BYTES = 5 * 1024 * 1024;
33104
+
32483
33105
  // ../theme-core/src/runtime/buildThemeRuntimeFromBridge.ts
32484
33106
  import { z as z60 } from "zod";
32485
33107
  var themeBridgeConfigSchema = z60.object({
@@ -32676,11 +33298,11 @@ function normalizeContent(block) {
32676
33298
  }
32677
33299
  function normalizeParams(input) {
32678
33300
  if (!input || typeof input !== "object") return {};
32679
- const entries = Object.entries(input).map(([key, value]) => [
32680
- key,
32681
- coerceToString(value)
32682
- ]);
32683
- return Object.fromEntries(entries);
33301
+ const output = {};
33302
+ for (const [key, value] of Object.entries(input)) {
33303
+ output[key] = coerceToString(value);
33304
+ }
33305
+ return output;
32684
33306
  }
32685
33307
  function isNonArrayObject(value) {
32686
33308
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -32896,10 +33518,16 @@ var dashboardConfigSchema = z61.object({
32896
33518
  var fieldDefinitionInputSchema = unsafeRetypeZodSchema(fieldSchema);
32897
33519
  var nodeDefinitionSchema = unsafeRetypeZodSchema(NodeSchema);
32898
33520
  var sdkLoaderEndpointSchema = z61.enum(SUPPORTED_LOADER_ENDPOINTS);
33521
+ var loaderFallbackScalarSchema = z61.union([
33522
+ z61.string(),
33523
+ z61.number(),
33524
+ z61.boolean(),
33525
+ z61.null()
33526
+ ]);
32899
33527
  var loaderParamBindingSchema = z61.object({
32900
33528
  $bind: z61.object({
32901
33529
  from: z61.string().min(1, "Binding path is required"),
32902
- fallback: z61.string().optional()
33530
+ fallback: loaderFallbackScalarSchema.optional()
32903
33531
  })
32904
33532
  });
32905
33533
  var loaderParamValueSchema = z61.union([
@@ -33045,9 +33673,13 @@ var sdkBlockFieldOptionsMapSchema = z61.record(
33045
33673
  var sdkContentTypeTemplateConfigSchema = z61.object({
33046
33674
  blocks: z61.array(z61.unknown())
33047
33675
  }).passthrough();
33676
+ var sdkContentTypeOrderingConfigSchema = z61.object({
33677
+ mode: z61.enum(["default", "manual"]).optional()
33678
+ }).optional();
33048
33679
  var sdkContentTypeConfigSchema = z61.object({
33049
33680
  key: z61.string().min(1),
33050
33681
  fields: z61.array(z61.unknown()),
33682
+ ordering: sdkContentTypeOrderingConfigSchema,
33051
33683
  template: sdkContentTypeTemplateConfigSchema.nullable().optional()
33052
33684
  }).passthrough();
33053
33685
  var sdkContentConfigSchema = z61.object({
@@ -33260,6 +33892,7 @@ var COURSE_ENROLLMENT_REFUND_FAILED_CODES = [
33260
33892
  ];
33261
33893
 
33262
33894
  // ../api/src/bookingVerticals.ts
33895
+ import { z as z63 } from "zod";
33263
33896
  var VERTICAL_IDS = [
33264
33897
  "yoga_wellness",
33265
33898
  "fitness_pt",
@@ -33338,6 +33971,132 @@ var VERTICAL_ID_SET = new Set(VERTICAL_IDS);
33338
33971
  var VERTICAL_PRESET_ID_SET = new Set(
33339
33972
  VERTICAL_BOOKING_PRESETS.map((presetDefinition) => presetDefinition.id)
33340
33973
  );
33974
+ function parseVerticalId(value) {
33975
+ return typeof value === "string" && VERTICAL_ID_SET.has(value) ? value : null;
33976
+ }
33977
+ function parseVerticalPresetId(value) {
33978
+ return typeof value === "string" && VERTICAL_PRESET_ID_SET.has(value) ? value : null;
33979
+ }
33980
+ function getVerticalPresetDefinition(presetId) {
33981
+ const definition = VERTICAL_BOOKING_PRESETS.find((presetDefinition) => presetDefinition.id === presetId);
33982
+ if (!definition) {
33983
+ throw new Error(`Unhandled vertical preset id: ${presetId}`);
33984
+ }
33985
+ return definition;
33986
+ }
33987
+ function toNonEmptyVerticalPresetIds(presetIds) {
33988
+ const firstPresetId = presetIds[0];
33989
+ return firstPresetId ? [firstPresetId, ...presetIds.slice(1)] : null;
33990
+ }
33991
+ function createConfiguredSiteVerticalBookingConfig(verticalId, selectedPresetIds) {
33992
+ return {
33993
+ verticalId,
33994
+ selectedPresetIds
33995
+ };
33996
+ }
33997
+ function createSiteVerticalBookingConfig(verticalId, selectedPresetIds) {
33998
+ const nonEmptyPresetIds = toNonEmptyVerticalPresetIds(selectedPresetIds);
33999
+ return nonEmptyPresetIds ? createConfiguredSiteVerticalBookingConfig(verticalId, nonEmptyPresetIds) : null;
34000
+ }
34001
+ function resolveSiteVerticalBookingConfig(rawConfig) {
34002
+ if (!rawConfig) {
34003
+ return { kind: "unconfigured", config: DEFAULT_SITE_VERTICAL_BOOKING_CONFIG };
34004
+ }
34005
+ const verticalId = parseVerticalId(rawConfig.verticalId);
34006
+ const rawPresetIds = Array.isArray(rawConfig.selectedPresetIds) ? rawConfig.selectedPresetIds : [];
34007
+ const selectedPresetIds = rawPresetIds.map(parseVerticalPresetId).filter((presetId) => Boolean(presetId));
34008
+ const config = {
34009
+ verticalId,
34010
+ selectedPresetIds
34011
+ };
34012
+ if (!verticalId && selectedPresetIds.length === 0) {
34013
+ return { kind: "unconfigured", config: DEFAULT_SITE_VERTICAL_BOOKING_CONFIG };
34014
+ }
34015
+ const issues = getSiteVerticalConfigIssues(rawConfig, config);
34016
+ if (issues.length > 0) {
34017
+ return { kind: "invalid", config, issues };
34018
+ }
34019
+ const configuredConfig = verticalId ? createSiteVerticalBookingConfig(verticalId, selectedPresetIds) : null;
34020
+ if (!configuredConfig) {
34021
+ return { kind: "invalid", config, issues: ["empty_selected_presets"] };
34022
+ }
34023
+ return {
34024
+ kind: "configured",
34025
+ config: configuredConfig,
34026
+ selectedPresets: configuredConfig.selectedPresetIds.map(getVerticalPresetDefinition)
34027
+ };
34028
+ }
34029
+ function getSiteVerticalConfigIssues(rawConfig, config) {
34030
+ const issues = /* @__PURE__ */ new Set();
34031
+ if (rawConfig.verticalId != null && !config.verticalId) {
34032
+ issues.add("unknown_vertical");
34033
+ }
34034
+ if (!config.verticalId && config.selectedPresetIds.length > 0) {
34035
+ issues.add("missing_vertical");
34036
+ }
34037
+ const rawPresetIds = Array.isArray(rawConfig.selectedPresetIds) ? rawConfig.selectedPresetIds : [];
34038
+ if (rawPresetIds.some((presetId) => parseVerticalPresetId(presetId) === null)) {
34039
+ issues.add("unknown_preset");
34040
+ }
34041
+ if (config.verticalId && config.selectedPresetIds.length === 0) {
34042
+ issues.add("empty_selected_presets");
34043
+ }
34044
+ const seenBehaviours = /* @__PURE__ */ new Set();
34045
+ for (const presetId of config.selectedPresetIds) {
34046
+ const presetDefinition = getVerticalPresetDefinition(presetId);
34047
+ if (config.verticalId && presetDefinition.verticalId !== config.verticalId) {
34048
+ issues.add("preset_vertical_mismatch");
34049
+ }
34050
+ if (presetDefinition.availability === "future") {
34051
+ issues.add("future_preset_selected");
34052
+ }
34053
+ if (seenBehaviours.has(presetDefinition.canonicalBehaviour)) {
34054
+ issues.add("duplicate_canonical_behaviour");
34055
+ }
34056
+ seenBehaviours.add(presetDefinition.canonicalBehaviour);
34057
+ }
34058
+ return [...issues];
34059
+ }
34060
+ var VerticalIdSchema = z63.string().trim().transform((value, ctx) => {
34061
+ const parsed = parseVerticalId(value);
34062
+ if (!parsed) {
34063
+ ctx.addIssue({
34064
+ code: z63.ZodIssueCode.custom,
34065
+ message: "Unknown booking vertical"
34066
+ });
34067
+ return z63.NEVER;
34068
+ }
34069
+ return parsed;
34070
+ });
34071
+ var VerticalPresetIdSchema = z63.string().trim().transform((value, ctx) => {
34072
+ const parsed = parseVerticalPresetId(value);
34073
+ if (!parsed) {
34074
+ ctx.addIssue({
34075
+ code: z63.ZodIssueCode.custom,
34076
+ message: "Unknown booking preset"
34077
+ });
34078
+ return z63.NEVER;
34079
+ }
34080
+ return parsed;
34081
+ });
34082
+ var BookingVerticalConfigSchema = z63.object({
34083
+ verticalId: VerticalIdSchema.nullable(),
34084
+ selectedPresetIds: z63.array(VerticalPresetIdSchema).max(20)
34085
+ }).transform((value, ctx) => {
34086
+ const resolved = resolveSiteVerticalBookingConfig(value);
34087
+ if (resolved.kind === "invalid") {
34088
+ ctx.addIssue({
34089
+ code: z63.ZodIssueCode.custom,
34090
+ message: `Invalid booking vertical config: ${resolved.issues.join(", ")}`
34091
+ });
34092
+ return z63.NEVER;
34093
+ }
34094
+ return resolved.config;
34095
+ });
34096
+ var DEFAULT_SITE_VERTICAL_BOOKING_CONFIG = {
34097
+ verticalId: null,
34098
+ selectedPresetIds: []
34099
+ };
33341
34100
  function preset(id, verticalId, canonicalBehaviour, label, pluralLabel, description, availability = "onboarding") {
33342
34101
  return {
33343
34102
  id,
@@ -33357,51 +34116,51 @@ function isRecord3(value) {
33357
34116
  }
33358
34117
 
33359
34118
  // ../api/src/appointmentSetup.ts
33360
- import { z as z63 } from "zod";
34119
+ import { z as z64 } from "zod";
33361
34120
  var APPOINTMENT_SETUP_MAX_MINUTES = 1440;
33362
- var appointmentSetupRefSchema = z63.discriminatedUnion("kind", [
33363
- z63.object({ kind: z63.literal("existing"), id: z63.string().min(1) }),
33364
- z63.object({ kind: z63.literal("new"), draftId: z63.string().min(1) })
34121
+ var appointmentSetupRefSchema = z64.discriminatedUnion("kind", [
34122
+ z64.object({ kind: z64.literal("existing"), id: z64.string().min(1) }),
34123
+ z64.object({ kind: z64.literal("new"), draftId: z64.string().min(1) })
33365
34124
  ]);
33366
- var appointmentSetupVenueChoiceSchema = z63.discriminatedUnion("kind", [
33367
- z63.object({ kind: z63.literal("none") }),
33368
- z63.object({ kind: z63.literal("existing"), venueId: z63.string().min(1) }),
33369
- z63.object({
33370
- kind: z63.literal("create"),
33371
- draftId: z63.string().min(1),
33372
- title: z63.string().trim().min(1),
33373
- description: z63.string().nullable(),
33374
- timezone: z63.string().trim().min(1).nullable(),
33375
- addressJson: z63.record(z63.string(), z63.unknown()),
33376
- locationJson: z63.object({ lat: z63.number(), lng: z63.number() }).nullable()
34125
+ var appointmentSetupVenueChoiceSchema = z64.discriminatedUnion("kind", [
34126
+ z64.object({ kind: z64.literal("none") }),
34127
+ z64.object({ kind: z64.literal("existing"), venueId: z64.string().min(1) }),
34128
+ z64.object({
34129
+ kind: z64.literal("create"),
34130
+ draftId: z64.string().min(1),
34131
+ title: z64.string().trim().min(1),
34132
+ description: z64.string().nullable(),
34133
+ timezone: z64.string().trim().min(1).nullable(),
34134
+ addressJson: z64.record(z64.string(), z64.unknown()),
34135
+ locationJson: z64.object({ lat: z64.number(), lng: z64.number() }).nullable()
33377
34136
  })
33378
34137
  ]);
33379
- var appointmentSetupPaymentDraftSchema = z63.object({
33380
- priceType: z63.union([z63.literal("free"), z63.literal("paid")])
33381
- });
33382
- var appointmentSetupServiceAssignmentDraftSchema = z63.discriminatedUnion("kind", [
33383
- z63.object({ kind: z63.literal("all_practitioners") }),
33384
- z63.object({
33385
- kind: z63.literal("selected_practitioners"),
33386
- resourceRefs: z63.array(appointmentSetupRefSchema)
34138
+ var appointmentSetupPaymentDraftSchema = z64.object({
34139
+ priceType: z64.union([z64.literal("free"), z64.literal("paid")])
34140
+ });
34141
+ var appointmentSetupServiceAssignmentDraftSchema = z64.discriminatedUnion("kind", [
34142
+ z64.object({ kind: z64.literal("all_practitioners") }),
34143
+ z64.object({
34144
+ kind: z64.literal("selected_practitioners"),
34145
+ resourceRefs: z64.array(appointmentSetupRefSchema)
33387
34146
  })
33388
34147
  ]);
33389
- var appointmentSetupServiceDraftSchema = z63.object({
34148
+ var appointmentSetupServiceDraftSchema = z64.object({
33390
34149
  ref: appointmentSetupRefSchema,
33391
- title: z63.string().trim().min(1),
33392
- description: z63.string().nullable(),
33393
- durationMinutes: z63.number().int().positive().max(APPOINTMENT_SETUP_MAX_MINUTES),
33394
- prepMinutes: z63.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
33395
- cleanupMinutes: z63.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
33396
- priceAmount: z63.number().int().nonnegative().nullable(),
33397
- isActive: z63.boolean(),
33398
- locationType: z63.union([
33399
- z63.literal("virtual"),
33400
- z63.literal("in_person"),
33401
- z63.literal("hybrid")
34150
+ title: z64.string().trim().min(1),
34151
+ description: z64.string().nullable(),
34152
+ durationMinutes: z64.number().int().positive().max(APPOINTMENT_SETUP_MAX_MINUTES),
34153
+ prepMinutes: z64.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
34154
+ cleanupMinutes: z64.number().int().nonnegative().max(APPOINTMENT_SETUP_MAX_MINUTES).default(0),
34155
+ priceAmount: z64.number().int().nonnegative().nullable(),
34156
+ isActive: z64.boolean(),
34157
+ locationType: z64.union([
34158
+ z64.literal("virtual"),
34159
+ z64.literal("in_person"),
34160
+ z64.literal("hybrid")
33402
34161
  ]),
33403
34162
  venue: appointmentSetupVenueChoiceSchema,
33404
- timezone: z63.string().trim().min(1).nullable(),
34163
+ timezone: z64.string().trim().min(1).nullable(),
33405
34164
  payment: appointmentSetupPaymentDraftSchema,
33406
34165
  assignment: appointmentSetupServiceAssignmentDraftSchema
33407
34166
  }).superRefine((service, ctx) => {
@@ -33420,49 +34179,49 @@ var appointmentSetupServiceDraftSchema = z63.object({
33420
34179
  });
33421
34180
  }
33422
34181
  });
33423
- var appointmentSetupPractitionerDraftSchema = z63.object({
34182
+ var appointmentSetupPractitionerDraftSchema = z64.object({
33424
34183
  ref: appointmentSetupRefSchema,
33425
- displayName: z63.string().trim().min(1),
33426
- bio: z63.string().nullable(),
33427
- timezone: z63.string().trim().min(1),
33428
- colorHex: z63.string().nullable()
33429
- });
33430
- var appointmentSetupWeeklyWindowDraftSchema = z63.object({
33431
- weekday: z63.number().int().min(0).max(6),
33432
- startTime: z63.string(),
33433
- endTime: z63.string()
33434
- });
33435
- var appointmentSetupStartTimePolicyDraftSchema = z63.discriminatedUnion("kind", [
33436
- z63.object({ kind: z63.literal("automatic_spacing") }),
33437
- z63.object({
33438
- kind: z63.literal("regular_interval"),
33439
- intervalMinutes: z63.union([
33440
- z63.literal(10),
33441
- z63.literal(15),
33442
- z63.literal(20),
33443
- z63.literal(30),
33444
- z63.literal(45),
33445
- z63.literal(60)
34184
+ displayName: z64.string().trim().min(1),
34185
+ bio: z64.string().nullable(),
34186
+ timezone: z64.string().trim().min(1),
34187
+ colorHex: z64.string().nullable()
34188
+ });
34189
+ var appointmentSetupWeeklyWindowDraftSchema = z64.object({
34190
+ weekday: z64.number().int().min(0).max(6),
34191
+ startTime: z64.string(),
34192
+ endTime: z64.string()
34193
+ });
34194
+ var appointmentSetupStartTimePolicyDraftSchema = z64.discriminatedUnion("kind", [
34195
+ z64.object({ kind: z64.literal("automatic_spacing") }),
34196
+ z64.object({
34197
+ kind: z64.literal("regular_interval"),
34198
+ intervalMinutes: z64.union([
34199
+ z64.literal(10),
34200
+ z64.literal(15),
34201
+ z64.literal(20),
34202
+ z64.literal(30),
34203
+ z64.literal(45),
34204
+ z64.literal(60)
33446
34205
  ])
33447
34206
  })
33448
34207
  ]);
33449
- var appointmentSetupAvailabilityDraftSchema = z63.object({
33450
- kind: z63.literal("weekly_windows"),
34208
+ var appointmentSetupAvailabilityDraftSchema = z64.object({
34209
+ kind: z64.literal("weekly_windows"),
33451
34210
  resourceRef: appointmentSetupRefSchema,
33452
34211
  serviceRef: appointmentSetupRefSchema.nullable(),
33453
- windows: z63.array(appointmentSetupWeeklyWindowDraftSchema),
34212
+ windows: z64.array(appointmentSetupWeeklyWindowDraftSchema),
33454
34213
  startTimePolicy: appointmentSetupStartTimePolicyDraftSchema.optional()
33455
34214
  });
33456
34215
  var APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX = 28 * 24 * 60;
33457
34216
  var APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX = 10 * 365 * 24 * 60;
33458
- var appointmentSetupBookingNoticeSchema = z63.object({
33459
- minLeadMinutes: z63.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX),
33460
- maxBookingNoticeMinutes: z63.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX)
33461
- });
33462
- var applyAppointmentSetupRequestSchema = z63.object({
33463
- services: z63.array(appointmentSetupServiceDraftSchema),
33464
- practitioners: z63.array(appointmentSetupPractitionerDraftSchema),
33465
- availability: z63.array(appointmentSetupAvailabilityDraftSchema),
34217
+ var appointmentSetupBookingNoticeSchema = z64.object({
34218
+ minLeadMinutes: z64.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX),
34219
+ maxBookingNoticeMinutes: z64.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX)
34220
+ });
34221
+ var applyAppointmentSetupRequestSchema = z64.object({
34222
+ services: z64.array(appointmentSetupServiceDraftSchema),
34223
+ practitioners: z64.array(appointmentSetupPractitionerDraftSchema),
34224
+ availability: z64.array(appointmentSetupAvailabilityDraftSchema),
33466
34225
  bookingNotice: appointmentSetupBookingNoticeSchema
33467
34226
  });
33468
34227
 
@@ -33495,24 +34254,24 @@ var STAFF_CANCELLATION_CONTEXT_CATEGORIES = [
33495
34254
  ];
33496
34255
 
33497
34256
  // ../api/src/siteBanner.ts
33498
- import { z as z64 } from "zod";
34257
+ import { z as z65 } from "zod";
33499
34258
  var SITE_BANNER_SCOPE_VALUES = ["homepage", "all-pages"];
33500
34259
  var SITE_BANNER_TONE_VALUES = ["announcement", "promotion", "notice", "warning"];
33501
34260
  var SITE_BANNER_MAX_TEXT_LENGTH = 320;
33502
34261
  var SITE_BANNER_MAX_PARAGRAPHS = 2;
33503
- var siteBannerScopeSchema = z64.enum(SITE_BANNER_SCOPE_VALUES);
33504
- var siteBannerToneSchema = z64.enum(SITE_BANNER_TONE_VALUES);
33505
- var siteBannerBodySchema = z64.unknown().transform(unwrapRichTextValue);
33506
- var siteBannerCtaSchema = z64.object({
33507
- label: z64.string().trim().min(1),
34262
+ var siteBannerScopeSchema = z65.enum(SITE_BANNER_SCOPE_VALUES);
34263
+ var siteBannerToneSchema = z65.enum(SITE_BANNER_TONE_VALUES);
34264
+ var siteBannerBodySchema = z65.unknown().transform(unwrapRichTextValue);
34265
+ var siteBannerCtaSchema = z65.object({
34266
+ label: z65.string().trim().min(1),
33508
34267
  link: linkPayloadSchema
33509
34268
  });
33510
- var siteBannerSettingsSchema = z64.discriminatedUnion("enabled", [
33511
- z64.object({
33512
- enabled: z64.literal(false)
34269
+ var siteBannerSettingsSchema = z65.discriminatedUnion("enabled", [
34270
+ z65.object({
34271
+ enabled: z65.literal(false)
33513
34272
  }),
33514
- z64.object({
33515
- enabled: z64.literal(true),
34273
+ z65.object({
34274
+ enabled: z65.literal(true),
33516
34275
  scope: siteBannerScopeSchema,
33517
34276
  tone: siteBannerToneSchema,
33518
34277
  body: siteBannerBodySchema,
@@ -33526,7 +34285,7 @@ var siteBannerSettingsInputSchema = siteBannerSettingsSchema.superRefine((value,
33526
34285
  const analysis = analyzeSiteBannerBody(value.body);
33527
34286
  for (const issue of analysis.issues) {
33528
34287
  ctx.addIssue({
33529
- code: z64.ZodIssueCode.custom,
34288
+ code: z65.ZodIssueCode.custom,
33530
34289
  path: ["body"],
33531
34290
  message: siteBannerBodyIssueMessage(issue)
33532
34291
  });
@@ -33749,72 +34508,105 @@ function parsePublicProductCategorySelector(value) {
33749
34508
  return void 0;
33750
34509
  }
33751
34510
 
34511
+ // ../api/src/navigation/dashboardSiteNav.ts
34512
+ var hiddenDemoSiteNavSurfaceIds = [
34513
+ "site.newsletter"
34514
+ ];
34515
+ var hiddenDemoSiteNavIds = new Set(
34516
+ hiddenDemoSiteNavSurfaceIds
34517
+ );
34518
+ var websiteSurfaceIds = [
34519
+ "site.content",
34520
+ "site.footerBlocks",
34521
+ "site.navigation",
34522
+ "site.media",
34523
+ "site.style",
34524
+ "site.performance"
34525
+ ];
34526
+ var websiteSurfaceIdSet = new Set(
34527
+ websiteSurfaceIds
34528
+ );
34529
+
34530
+ // ../api/src/navigation/dashboardSettingsNav.ts
34531
+ var hiddenDemoSettingsNavSurfaceIds = [
34532
+ "settings.features",
34533
+ "settings.domains",
34534
+ "settings.bookings",
34535
+ "settings.emails",
34536
+ "settings.team",
34537
+ "settings.billing",
34538
+ "settings.developer",
34539
+ "settings.apiKeys",
34540
+ "settings.backup"
34541
+ ];
34542
+ var hiddenDemoSettingsNavIds = new Set(hiddenDemoSettingsNavSurfaceIds);
34543
+
33752
34544
  // ../api/src/aiPlayground.ts
33753
- import { z as z65 } from "zod";
33754
- var Rfc6902PatchOp = z65.discriminatedUnion("op", [
34545
+ import { z as z66 } from "zod";
34546
+ var Rfc6902PatchOp = z66.discriminatedUnion("op", [
33755
34547
  // Standard RFC-6902 operations
33756
- z65.object({
33757
- op: z65.literal("add"),
33758
- path: z65.string(),
33759
- value: z65.unknown()
34548
+ z66.object({
34549
+ op: z66.literal("add"),
34550
+ path: z66.string(),
34551
+ value: z66.unknown()
33760
34552
  }),
33761
- z65.object({
33762
- op: z65.literal("remove"),
33763
- path: z65.string()
34553
+ z66.object({
34554
+ op: z66.literal("remove"),
34555
+ path: z66.string()
33764
34556
  }),
33765
- z65.object({
33766
- op: z65.literal("replace"),
33767
- path: z65.string(),
33768
- value: z65.unknown()
34557
+ z66.object({
34558
+ op: z66.literal("replace"),
34559
+ path: z66.string(),
34560
+ value: z66.unknown()
33769
34561
  }),
33770
- z65.object({
33771
- op: z65.literal("move"),
33772
- from: z65.string(),
33773
- path: z65.string()
34562
+ z66.object({
34563
+ op: z66.literal("move"),
34564
+ from: z66.string(),
34565
+ path: z66.string()
33774
34566
  }),
33775
- z65.object({
33776
- op: z65.literal("copy"),
33777
- from: z65.string(),
33778
- path: z65.string()
34567
+ z66.object({
34568
+ op: z66.literal("copy"),
34569
+ from: z66.string(),
34570
+ path: z66.string()
33779
34571
  }),
33780
34572
  // Block-level operations (Phase 2)
33781
- z65.object({
33782
- op: z65.literal("add_block"),
33783
- blockKind: z65.string(),
33784
- afterBlockId: z65.string().nullable(),
33785
- content: z65.record(z65.string(), z65.unknown()),
33786
- rationale: z65.string()
34573
+ z66.object({
34574
+ op: z66.literal("add_block"),
34575
+ blockKind: z66.string(),
34576
+ afterBlockId: z66.string().nullable(),
34577
+ content: z66.record(z66.string(), z66.unknown()),
34578
+ rationale: z66.string()
33787
34579
  }),
33788
- z65.object({
33789
- op: z65.literal("delete_block"),
33790
- blockId: z65.string(),
33791
- rationale: z65.string()
34580
+ z66.object({
34581
+ op: z66.literal("delete_block"),
34582
+ blockId: z66.string(),
34583
+ rationale: z66.string()
33792
34584
  }),
33793
- z65.object({
33794
- op: z65.literal("reorder_block"),
33795
- blockId: z65.string(),
33796
- afterBlockId: z65.string().nullable(),
33797
- rationale: z65.string()
34585
+ z66.object({
34586
+ op: z66.literal("reorder_block"),
34587
+ blockId: z66.string(),
34588
+ afterBlockId: z66.string().nullable(),
34589
+ rationale: z66.string()
33798
34590
  })
33799
34591
  ]);
33800
- var PlaygroundProposeRequest = z65.object({
33801
- request: z65.string().min(1).max(2e3)
34592
+ var PlaygroundProposeRequest = z66.object({
34593
+ request: z66.string().min(1).max(2e3)
33802
34594
  });
33803
- var MultiPagePatchEnvelope = z65.object({
33804
- pageId: z65.string(),
33805
- blockId: z65.string().optional(),
34595
+ var MultiPagePatchEnvelope = z66.object({
34596
+ pageId: z66.string(),
34597
+ blockId: z66.string().optional(),
33806
34598
  // Not present for page-level ops
33807
- blockKind: z65.string().optional(),
33808
- blockPurpose: z65.string().optional().nullable(),
33809
- ops: z65.array(Rfc6902PatchOp),
33810
- rationale: z65.string(),
33811
- currentContent: z65.record(z65.string(), z65.unknown()).optional()
34599
+ blockKind: z66.string().optional(),
34600
+ blockPurpose: z66.string().optional().nullable(),
34601
+ ops: z66.array(Rfc6902PatchOp),
34602
+ rationale: z66.string(),
34603
+ currentContent: z66.record(z66.string(), z66.unknown()).optional()
33812
34604
  });
33813
- var MultiPageUpdateResponse = z65.object({
33814
- patches: z65.array(MultiPagePatchEnvelope),
33815
- assistantMessage: z65.string(),
33816
- pagesModified: z65.number(),
33817
- toolCallsUsed: z65.number()
34605
+ var MultiPageUpdateResponse = z66.object({
34606
+ patches: z66.array(MultiPagePatchEnvelope),
34607
+ assistantMessage: z66.string(),
34608
+ pagesModified: z66.number(),
34609
+ toolCallsUsed: z66.number()
33818
34610
  });
33819
34611
 
33820
34612
  // src/data/prefetchBlockData.ts
@@ -33887,7 +34679,7 @@ async function prefetchBlockData2(page, context, client, options) {
33887
34679
  throw new Error("listPublishedEntries requires siteId and type params");
33888
34680
  }
33889
34681
  const parsedLimit = typeof limit === "string" ? Number.parseInt(limit, 10) : typeof limit === "number" ? limit : void 0;
33890
- const order = orderBy === "newest" || orderBy === "oldest" || orderBy === "title" || orderBy === "order" ? orderBy : void 0;
34682
+ const order = orderBy === "order" ? "manual" : orderBy === "newest" || orderBy === "oldest" || orderBy === "title" ? orderBy : void 0;
33891
34683
  const parsedEntryIds = mode === "manual" ? parseManualEntryIds(entryIds) : void 0;
33892
34684
  if (mode === "manual" && (!parsedEntryIds || parsedEntryIds.length === 0)) {
33893
34685
  return { entries: [] };
@@ -34160,7 +34952,7 @@ function usePage(params) {
34160
34952
  });
34161
34953
  }
34162
34954
  }
34163
- fetchPage();
34955
+ void fetchPage();
34164
34956
  return () => {
34165
34957
  cancelled = true;
34166
34958
  };