@riverbankcms/sdk 0.151.0 → 0.152.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/{EventEmbeddedCheckoutStep-BBHbM22D.mjs → EventEmbeddedCheckoutStep-DVQXWFm6.mjs} +10 -9
  3. package/dist/{PreviewEditorSidebar-BHplI9HE.mjs → PreviewEditorSidebar-Dr4NJi3Q.mjs} +4 -3
  4. package/dist/{PreviewEditorUI-DuyN8nsD.mjs → PreviewEditorUI-DSZXQbyh.mjs} +5 -4
  5. package/dist/{SdkPreviewModeRuntime-CR5ypwxJ.mjs → SdkPreviewModeRuntime-Dl4GyMc3.mjs} +124 -53
  6. package/dist/{SiteChromeCustomizeContext-D5t6joF_.mjs → SiteChromeCustomizeContext-DgBe-FlM.mjs} +20418 -32298
  7. package/dist/ThemedButton-B8ViBnLK.mjs +16350 -0
  8. package/dist/_dts/api/src/bookingOperations.d.ts +5 -3
  9. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +4 -0
  10. package/dist/_dts/api/src/endpoints.d.ts +7 -0
  11. package/dist/_dts/api/src/index.d.ts +1 -1
  12. package/dist/_dts/api/src/navigation/types.d.ts +7 -0
  13. package/dist/_dts/api/src/navigation.d.ts +1 -1
  14. package/dist/_dts/api/src/publicAppointmentBookingContracts.d.ts +10 -1
  15. package/dist/_dts/api/src/siteAssets.d.ts +1 -0
  16. package/dist/_dts/blocks/src/definitions.d.ts +1 -1
  17. package/dist/_dts/blocks/src/index.d.ts +1 -0
  18. package/dist/_dts/blocks/src/pageRenderPreparation.d.ts +1 -0
  19. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +1 -1
  20. package/dist/_dts/blocks/src/primitives/content/utils/sanitizeHref.d.ts +1 -1
  21. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +4 -4
  22. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +16 -0
  23. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +5 -0
  24. package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +2 -0
  25. package/dist/_dts/blocks/src/system/helpers/normalizeMailingListBlockContent.d.ts +2 -0
  26. package/dist/_dts/blocks/src/system/registry.d.ts +14 -2
  27. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +0 -5
  28. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +2 -0
  29. package/dist/_dts/blocks/src/system/runtime/api/schemas/events.d.ts +971 -0
  30. package/dist/_dts/blocks/src/system/runtime/api/schemas/waitlist-claims.d.ts +42 -0
  31. package/dist/_dts/blocks/src/system/runtime/api/types/appointments.d.ts +10 -2
  32. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +10 -136
  33. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +48 -6
  34. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +24 -3
  35. package/dist/_dts/blocks/src/system/runtime/hooks/useBookingSubmission.state.d.ts +2 -0
  36. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +3 -1
  37. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.state.d.ts +1 -1
  38. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +23 -0
  39. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +6 -2
  40. package/dist/_dts/blocks/src/system/runtime/nodes/carousel.client.hooks.d.ts +6 -0
  41. package/dist/_dts/blocks/src/system/runtime/nodes/carousel.client.state.d.ts +7 -0
  42. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/BookingEntryViews.d.ts +42 -0
  43. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventEmbeddedCheckoutStep.d.ts +4 -1
  44. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationBookingLayer.d.ts +19 -9
  45. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationPayment.d.ts +4 -2
  46. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationSurface.d.ts +24 -9
  47. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizardContent.d.ts +4 -2
  48. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventSelectionStep.d.ts +5 -4
  49. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/GuestDetailsSection.d.ts +1 -1
  50. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/PaymentStatusStep.d.ts +2 -0
  51. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/SingleTicketEntitlementNote.d.ts +11 -0
  52. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/SuccessStep.d.ts +4 -0
  53. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/TicketSelectionStep.d.ts +5 -0
  54. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/VerifyingTimeoutStep.d.ts +2 -0
  55. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/bookingCardDisplay.d.ts +31 -0
  56. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/bookingEntry.d.ts +154 -0
  57. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/bookingFocus.d.ts +12 -0
  58. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +2 -2
  59. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.planning.d.ts +2 -2
  60. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.d.ts +9 -0
  61. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/finishedBooking.d.ts +77 -0
  62. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/index.d.ts +0 -1
  63. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/offeringNoun.d.ts +12 -0
  64. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/paymentResponse.d.ts +2 -1
  65. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationCompletion.d.ts +33 -1
  66. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationDerivations.d.ts +11 -0
  67. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationDisplay.d.ts +31 -0
  68. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationDraft.state.d.ts +60 -0
  69. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationErrorRecovery.d.ts +1 -1
  70. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationEventAdapter.d.ts +3 -0
  71. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationStateMachine.d.ts +58 -10
  72. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationSurface.d.ts +17 -0
  73. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +23 -7
  74. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useBookingBarFacts.d.ts +12 -0
  75. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationRecoveryRequest.d.ts +3 -0
  76. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationStripeReturn.d.ts +4 -0
  77. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +4 -11
  78. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +1563 -31
  79. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventSourceRecovery.d.ts +2 -12
  80. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/usePaymentStatusRecovery.d.ts +147 -4
  81. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/utils.d.ts +50 -2
  82. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/waitlistClaimRestoration.d.ts +6 -5
  83. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/wizardSteps.d.ts +85 -15
  84. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +53 -8
  85. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/MonthLookView.d.ts +10 -3
  86. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +16 -0
  87. package/dist/_dts/blocks/src/system/runtime/shared/bookingPaymentOptionCopy.d.ts +5 -1
  88. package/dist/_dts/blocks/src/system/runtime/shared/bookingPaymentOptions.d.ts +37 -1
  89. package/dist/_dts/blocks/src/system/runtime/shared/components/ModalShell.d.ts +9 -2
  90. package/dist/_dts/blocks/src/system/runtime/shared/components/PaymentChoiceRows.d.ts +28 -0
  91. package/dist/_dts/blocks/src/system/runtime/shared/components/StepIndicator.d.ts +6 -8
  92. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +2 -2
  93. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +2 -2
  94. package/dist/_dts/blocks/src/system/runtime/shared/useWaitlistClaim.d.ts +9 -12
  95. package/dist/_dts/blocks/src/system/runtime/shared/useWaitlistClaim.state.d.ts +15 -0
  96. package/dist/_dts/blocks/src/system/runtime/shared/utils/themePortalRoot.d.ts +10 -15
  97. package/dist/_dts/blocks/src/system/transforms/registry/index.d.ts +1 -0
  98. package/dist/_dts/blocks/src/system/transforms/registry/links.d.ts +3 -1
  99. package/dist/_dts/commerce/src/purchase/bookingInstalmentSchedule.d.ts +2 -0
  100. package/dist/_dts/commerce/src/purchase/bookingPaymentSelection.d.ts +6 -0
  101. package/dist/_dts/commerce/src/purchase/confirmationEmailPayment.d.ts +14 -14
  102. package/dist/_dts/commerce/src/purchase/confirmationPayment.d.ts +65 -0
  103. package/dist/_dts/commerce/src/purchase/confirmationPaymentSchema.d.ts +66 -0
  104. package/dist/_dts/commerce/src/purchase/index.d.ts +2 -0
  105. package/dist/_dts/commerce/src/purchase/orderPaymentState.d.ts +8 -0
  106. package/dist/_dts/content-model/src/templates/defaults.d.ts +2 -2
  107. package/dist/_dts/core/src/appointment-booking-terms.d.ts +20 -0
  108. package/dist/_dts/core/src/booking-payment-schemas.d.ts +70 -0
  109. package/dist/_dts/core/src/branded.d.ts +0 -2
  110. package/dist/_dts/core/src/demo-claim-access.d.ts +1 -1
  111. package/dist/_dts/core/src/demo-claim-readiness.d.ts +18 -0
  112. package/dist/_dts/core/src/demo-lifecycle-status.d.ts +1 -1
  113. package/dist/_dts/core/src/demo-warm-pool-target.d.ts +1 -1
  114. package/dist/_dts/core/src/index.d.ts +4 -0
  115. package/dist/_dts/core/src/mailing-list-targeting-availability.d.ts +68 -0
  116. package/dist/_dts/core/src/mailing-list-targeting.d.ts +2 -0
  117. package/dist/_dts/core/src/ticket-quantity.d.ts +13 -0
  118. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +51 -32
  119. package/dist/_dts/editor/src/chrome/chromeLayers.d.ts +7 -0
  120. package/dist/_dts/editor/src/index.d.ts +1 -0
  121. package/dist/_dts/editor-blocks/src/widgets/link/LinkAddressInput.d.ts +8 -0
  122. package/dist/_dts/editor-blocks/src/widgets/link/LinkContentList.d.ts +12 -0
  123. package/dist/_dts/editor-blocks/src/widgets/link/LinkPicker.d.ts +5 -1
  124. package/dist/_dts/editor-blocks/src/widgets/link/LinkPickerDialog.d.ts +3 -3
  125. package/dist/_dts/editor-blocks/src/widgets/link/LinkSummary.d.ts +8 -2
  126. package/dist/_dts/editor-blocks/src/widgets/link/LinkWidget.d.ts +4 -3
  127. package/dist/_dts/editor-blocks/src/widgets/link/LinkWidgetContext.d.ts +2 -1
  128. package/dist/_dts/editor-blocks/src/widgets/link/draft.d.ts +44 -0
  129. package/dist/_dts/editor-blocks/src/widgets/link/presentation.d.ts +13 -0
  130. package/dist/_dts/editor-blocks/src/widgets/link/types.d.ts +14 -0
  131. package/dist/_dts/editor-blocks/src/widgets/link/useRoutableContent.d.ts +2 -0
  132. package/dist/_dts/editor-blocks/src/widgets/link/utils.d.ts +5 -4
  133. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/MailingListTargetingField.d.ts +1 -1
  134. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/targetingState.d.ts +13 -8
  135. package/dist/_dts/media-core/src/fileStorage.d.ts +4 -3
  136. package/dist/_dts/media-core/src/index.d.ts +1 -0
  137. package/dist/_dts/media-core/src/storageObjectKey.d.ts +12 -0
  138. package/dist/_dts/media-react/src/hooks/useSupabaseMediaUploader.d.ts +1 -1
  139. package/dist/_dts/media-react/src/internal/supabaseResumableUpload.d.ts +13 -0
  140. package/dist/_dts/preview-next/src/client/preview/previewModeRootAttribute.d.ts +11 -0
  141. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +0 -1
  142. package/dist/_dts/sdk/src/rendering/image.d.ts +10 -0
  143. package/dist/_dts/sdk/src/rendering/index.d.ts +3 -1
  144. package/dist/_dts/sdk/src/rendering/link.d.ts +9 -0
  145. package/dist/_dts/sdk/src/rendering/overrides.d.ts +1 -0
  146. package/dist/_dts/sdk/src/version.d.ts +1 -1
  147. package/dist/_dts/theme-core/src/blocks/opaquePanels.d.ts +3 -3
  148. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  149. package/dist/client/BookingMailingListNote-CBuMKN0w.mjs +386 -0
  150. package/dist/client/{CardListItem-ZDLYh6dL.mjs → CardListItem-Dc9XTXhB.mjs} +3 -4
  151. package/dist/client/CheckIcon-CpyXr-Kg.mjs +35 -0
  152. package/dist/client/{CheckboxChoice-M-3HycLw.mjs → CheckboxChoice-CIqx_o0E.mjs} +1 -1
  153. package/dist/client/{DemoBookingPortalAccess-BMtvPTWE.mjs → DemoBookingPortalAccess-D3VQ_kLj.mjs} +85 -85
  154. package/dist/client/{EventCombined.client-DUm_DOxW.mjs → EventCombined.client-BHGEKise.mjs} +8 -9
  155. package/dist/client/{EventEmbeddedCheckoutStep-DsNNzgRm.mjs → EventEmbeddedCheckoutStep-Bo1Cm23R.mjs} +11 -10
  156. package/dist/client/{EventListing.client-DjNYGUVm.mjs → EventListing.client-D5OQgVPr.mjs} +2 -2
  157. package/dist/client/{LeafletStaticMap-DuFiOHq_.mjs → LeafletStaticMap-CLL5cWrr.mjs} +1 -1
  158. package/dist/client/{ModalShell-CqkBvBIC.mjs → ModalShell-BXzucfR6.mjs} +83 -12
  159. package/dist/client/{RichText-LjPCUGGi.mjs → RichText-BoDmnopf.mjs} +6 -3
  160. package/dist/client/{ThemedButton-DZKjtaDD.mjs → ThemedButton-Ciltp0IK.mjs} +2 -2
  161. package/dist/client/{accordion-Qe--SILD.mjs → accordion-DOkRS64-.mjs} +1 -1
  162. package/dist/client/aspectTransforms-D-TnDdq4.mjs +93 -0
  163. package/dist/client/{bookingForm-3BCl4g_f.mjs → bookingForm-wlMVwo9h.mjs} +289 -149
  164. package/dist/client/bookings.mjs +12212 -10832
  165. package/dist/client/{carousel-h2YjKOS2.mjs → carousel-CGWk-Z0u.mjs} +2 -2
  166. package/dist/client/{carousel.client-BLrd4hmY.mjs → carousel.client-kX5mN1Eg.mjs} +46 -41
  167. package/dist/client/{cart-5NeiigVd.mjs → cart-OBBPlaH4.mjs} +3 -3
  168. package/dist/client/{checkout-G4UWjOEw.mjs → checkout-Bmw2WjQX.mjs} +3 -3
  169. package/dist/client/client.mjs +9541 -6039
  170. package/dist/client/{colorStyles-DTunOThj.mjs → colorStyles-ECDNPE_P.mjs} +23 -86
  171. package/dist/client/{context-GK4-AVAh.mjs → context-BI77UFAn.mjs} +275 -10
  172. package/dist/client/{eventCalendar-Prw3Yo_L.mjs → eventCalendar-qkej2Edn.mjs} +19 -17
  173. package/dist/client/{eventCombined-BUugi6__.mjs → eventCombined-DApKHvat.mjs} +4 -4
  174. package/dist/client/{eventDetails-CBHUda-R.mjs → eventDetails-BQyUDPH0.mjs} +3 -4
  175. package/dist/client/{eventListing-CQeG45Dg.mjs → eventListing-CeAnshlZ.mjs} +4 -4
  176. package/dist/client/{eventRegistration-Dif3p3oJ.mjs → eventRegistration-C3A3NyBO.mjs} +2209 -2144
  177. package/dist/client/{form-Cf0WMtfG.mjs → form-DW8rU7jO.mjs} +6 -6
  178. package/dist/client/{headerSection-Bqdr3JWp.mjs → headerSection-CkIhsoNm.mjs} +9 -9
  179. package/dist/client/hooks.mjs +1289 -380
  180. package/dist/client/{locationMap-BVvPou4O.mjs → locationMap-D4O8wbli.mjs} +4 -4
  181. package/dist/client/{media-47fcnhzD.mjs → media-C5K_0xPd.mjs} +2 -2
  182. package/dist/client/{newsletterForm-Cx-1dnic.mjs → newsletterForm-B7IxSPuz.mjs} +5 -5
  183. package/dist/client/{productDetail-DaUMaJYk.mjs → productDetail-Bqxpwy5N.mjs} +3 -3
  184. package/dist/client/{productList-BKQlWEKE.mjs → productList-u9Lz8V15.mjs} +3 -3
  185. package/dist/client/{propsDecoder-DO5iXphQ.mjs → propsDecoder-Bf1jucUp.mjs} +17333 -14489
  186. package/dist/client/rendering/client.mjs +58216 -55133
  187. package/dist/client/rendering/islands.mjs +19 -19
  188. package/dist/client/rendering.mjs +9099 -5636
  189. package/dist/client/{routeIslandApiConfig-BNm0Z3-g.mjs → routeIslandApiConfig-BgP-aPMl.mjs} +1 -1
  190. package/dist/client/{shop-D7ytcFBC.mjs → shop-B_eykR-_.mjs} +16 -14
  191. package/dist/client/{shop-commerce-D68-hHy2.mjs → shop-commerce-CT0APkFV.mjs} +9 -9
  192. package/dist/client/{shop-commerce-store-Cu7X2lyu.mjs → shop-commerce-store-DcvZxdEK.mjs} +1 -1
  193. package/dist/client/{shopShared-D12rxE69.mjs → shopShared-BVJOiUiJ.mjs} +5 -5
  194. package/dist/client/themePortalRoot-DS92SRVZ.mjs +47 -0
  195. package/dist/client/{TerminalPanel-DOTSUCO0.mjs → useDiscountCodeUi-DPmYDunz.mjs} +60 -77
  196. package/dist/client/{useEventPagination-jgKa67KV.mjs → useEventPagination-8-U55vH5.mjs} +7 -8
  197. package/dist/preview-next/before-render.mjs +7 -0
  198. package/dist/preview-next/client/runtime.mjs +3 -3
  199. package/dist/preview-next/keepAlive.mjs +7 -0
  200. package/dist/preview-next/middleware.mjs +7 -0
  201. package/dist/{sdk-runtime-4cCWO_3i.mjs → sdk-runtime-C5jPdSrk.mjs} +1 -1
  202. package/dist/server/components.mjs +3138 -1373
  203. package/dist/server/config-validation.mjs +1395 -486
  204. package/dist/server/config.mjs +1395 -486
  205. package/dist/server/data.mjs +1289 -380
  206. package/dist/server/index.mjs +8 -1
  207. package/dist/server/next.mjs +3362 -1538
  208. package/dist/server/page-converter.mjs +1357 -453
  209. package/dist/server/prebuild.mjs +1 -1
  210. package/dist/server/rendering/server.mjs +2335 -1044
  211. package/dist/server/rendering.mjs +3152 -1370
  212. package/dist/server/routing.mjs +1437 -490
  213. package/dist/server/server.mjs +1297 -381
  214. package/dist/server/theme-bridge.mjs +1135 -795
  215. package/dist/{spinner-tSdG9YvG.mjs → spinner-B-ab2rJp.mjs} +1 -1
  216. package/dist/styles/index.css +1088 -721
  217. package/package.json +1 -1
  218. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/OrderSummary.d.ts +0 -15
  219. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useWaitlistClaimRestoration.d.ts +0 -22
  220. package/dist/_dts/blocks/src/system/runtime/shared/components/SelectableOptionCard.d.ts +0 -30
  221. package/dist/client/BookingMailingListNote-DlDSs5Vm.mjs +0 -567
  222. package/dist/client/pricing-CMD0kADd.mjs +0 -314
  223. package/dist/client/result-DRW7JWXz.mjs +0 -30
  224. package/dist/client/scrollToBlock-C86BYkyV.mjs +0 -17
  225. package/dist/client/themePortalRoot-AGs4cE7t.mjs +0 -30
  226. package/dist/spinner-BL3kW9Uh.mjs +0 -803
package/CHANGELOG.md CHANGED
@@ -7,9 +7,46 @@ and then gets the version it went out in.
7
7
 
8
8
  ## Unreleased
9
9
 
10
+ - Additive: public events optionally expose nullable `scheduleSummary: { recurrenceDescription, startTime }`, using the stored series RRULE and local start time (`HH:mm`). Booking cards and bars prefer it over the date count; older payloads and irregular schedules retain the count fallback (#1581).
11
+
10
12
  - Booking payment editor helpers now model independent upfront/offline choices and one exclusive collection choice. Replace primary-option and allow-upfront setters with `setBookingPaymentTermsEditorOptionEnabled`; disabled settings drafts are retained. Wizard draft version 5 rejects the previous shape.
11
13
  - Booking editor deadline and validation helpers require `nowMs`, supplied by the UI or submit handler. `buildBookingPaymentOptionsChoiceFromEditor` now takes named `source`, `state` and required `hasPaidPricing` fields.
12
14
 
15
+ ### Breaking: confirmed event booking outcomes (#1581)
16
+
17
+ - `ConfirmationPayment.manual_due` requires the authoritative `currency`;
18
+ amount-due confirmations require a “Still to pay” row. Offline instructions
19
+ reuse the shared payment-option copy, independently of custom success copy.
20
+ - Wizard/headless `waitlistClaim` is a booking-owned invitation union, replacing
21
+ the nullable claim/token/error flags. Success carries no active invitation;
22
+ Book another starts a fresh draft without credentials or reserved selections.
23
+ Completion clears both claim URL parameters. Claim responses are decoded
24
+ strictly before restoration; unsupported subjects or inconsistent selections
25
+ are rejected at the Block API boundary. Low-level submission takes the decided
26
+ invitation availability, and `SuccessStep` requires payment presentation.
27
+
28
+ - Register `bookingComplete`, direct checkout `completed`, and checkout-return
29
+ `resolved` responses require an authoritative `EventBookingOutcome`; its
30
+ identity contains the booking reference and original submission ID. Confirmed
31
+ responses no longer include a separate reference, deferred balance or
32
+ `paymentDeferred` arm. Registration summaries contain copy and optional
33
+ remaining pass credits rather than booking/payment facts.
34
+ - `RegistrationResult` requires an outcome for confirmed bookings. Wizard and
35
+ headless success states carry their result; completion uses one transition,
36
+ and `setStep('success')` is no longer supported. Unavailable details retain
37
+ successful booking identity for recovery.
38
+
39
+ ### Breaking: event booking always opens in a panel on CMS pages (#1581)
40
+
41
+ - The page renderer's data context no longer accepts
42
+ `eventRegistrationOverlayEnabled`. The event registration block on a CMS
43
+ page now always shows a booking card in the page, a booking bar fixed to the
44
+ bottom of the screen, and the booking steps in a panel; there is no inline
45
+ form to switch back to. Pages built around booking (the system event page,
46
+ the hosted booking page) show the steps in place.
47
+ - Will accepted this on 2026-10-01. Drop the option from any renderer call
48
+ that passed it; it has no replacement.
49
+
13
50
  ### Booking payment choices (#1525)
14
51
 
15
52
  - Refundable payments with no future balance use “Pay in full” copy while
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { r as checkBrowserStripeKey, t as SpinnerNode, v as __commonJSMin } from "./spinner-BL3kW9Uh.mjs";
2
+ import { Br as SpinnerNode, Hr as checkBrowserStripeKey, n as ThemedButton, oi as __commonJSMin } from "./ThemedButton-B8ViBnLK.mjs";
3
3
  import { useEffect, useRef, useState } from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region ../../node_modules/.pnpm/@stripe+stripe-js@9.17.0/node_modules/@stripe/stripe-js/dist/pure.js
@@ -231,21 +231,21 @@ function EventEmbeddedCheckoutStepWithDeps(props) {
231
231
  const heading = useRef(null);
232
232
  const status = useStripeMount(props, container, props.load);
233
233
  useEffect(() => {
234
- heading.current?.focus();
235
- }, []);
234
+ if (props.onBack) heading.current?.focus();
235
+ }, [props.onBack]);
236
236
  return /* @__PURE__ */ jsxs("section", {
237
237
  className: "er-embedded-payment",
238
238
  children: [
239
- /* @__PURE__ */ jsx("button", {
239
+ props.onBack ? /* @__PURE__ */ jsx("button", {
240
240
  type: "button",
241
241
  className: "er-back-btn er-embedded-payment__back",
242
242
  onClick: props.onBack,
243
243
  children: "← Back"
244
- }),
244
+ }) : null,
245
245
  /* @__PURE__ */ jsx("h2", {
246
246
  ref: heading,
247
247
  tabIndex: -1,
248
- className: "er-title er-message",
248
+ className: "rb-sr-only",
249
249
  children: "Payment"
250
250
  }),
251
251
  status === "loading" && /* @__PURE__ */ jsxs("div", {
@@ -266,11 +266,12 @@ function EventEmbeddedCheckoutStepWithDeps(props) {
266
266
  children: [/* @__PURE__ */ jsx("p", {
267
267
  className: "er-text--muted er-message",
268
268
  children: "We couldn’t load the payment form."
269
- }), /* @__PURE__ */ jsx("button", {
269
+ }), /* @__PURE__ */ jsx(ThemedButton, {
270
270
  type: "button",
271
- className: "er-btn er-btn--primary",
271
+ variant: props.buttonVariant,
272
+ size: "md",
272
273
  onClick: props.onRetry,
273
- children: "Try again"
274
+ label: "Try again"
274
275
  })]
275
276
  }),
276
277
  /* @__PURE__ */ jsx("div", {
@@ -1,7 +1,8 @@
1
1
  "use client";
2
- import { $o as Smartphone, A as previewFooterLook, Aa as getHeaderStyle, B as createOptimisticActionRunner, Bo as DropdownMenu, C as markApplySaved, Co as PopoverContent, Cs as canWriteLinkedEntry, Ct as useUISelector, D as planStyleSwitch, Da as getSiteFontsStorageUrl, Do as TabsContent, E as palettePreviewProjection, Ea as generateFontFaceCss, Eo as Tabs, Et as useEntryController, F as setPaletteColors, Fa as updateButtonStyleHoverPreference, Fs as valueStatus, Go as DropdownMenuTrigger, Hn as listEntryPageContentSlots, Ho as DropdownMenuItem, I as styleConfiguratorHistoryEntryForPersistedSelection, Ia as updateButtonStyleSelectionChoice, Io as Collapsible, L as syncStyleConfiguratorState, La as buttonStyleSelectionKey, Lo as CollapsibleContent, Ls as assertNever$1, M as previewHeaderStyle, Ma as buttonStyleSelectionParameterValue, N as resetTypographyToSaved, Na as findButtonStyleRecipe, Ns as displayedValues, O as previewButtonStyle, Oa as findFooterLook, Oo as TabsList, P as restageSelectionChanges, Pa as resolveButtonStyleSelection, Ps as syncStateOf, Pt as LinkedEntryLeaseBanner, Q as reportPreviewDesignError, R as toggleRow, Ro as CollapsibleTrigger, S as markApplyFailed, So as Popover, Sr as ThemeScope, Ss as isEdited, St as ContentFieldsForm, T as openRow, Ta as buildFontPreviewUrl, To as Input, Un as listPageSurfaceContentSlots, Uo as DropdownMenuLabel, Vn as createManifestValidation, Vo as DropdownMenuContent, Wn as blocksKeys, Wo as DropdownMenuSeparator, Z as PREVIEW_DESIGN_SAVE_ERROR_MESSAGE, Zo as Tablet, _ as cancelPreview, _o as SelectTrigger, _s as Check, a as selectionSnapshotFromApplySiteStyleSelectionResponse, ai as ThemedButtonSpecimen, ar as deriveRouteMetadataPresentation, b as dismissWarnings, bo as CalloutDescription, bs as cn, co as paletteColorEntries, cr as unwrapResponse, es as SlidersHorizontal, f as buildSiteChromeSelectionModels, g as applyTypographyDraftPatch, ga as palettesForSiteStyle, go as SelectItem, gs as ChevronDown, gt as FooterComposerPanel, h as applyResolvedSelections, ha as offeredSiteStyles, hn as createStoreBackend, ho as SelectContent, hs as ChevronLeft, i as buildApplySiteStyleSelectionBody, j as previewHeaderLayout, ja as buttonStyleHoverPreferenceValue, k as previewCuratedPalette, ka as getHeaderLayout, ko as TabsTrigger, kt as useAutosaveStatus, l as usePreviewDesignCoordinator, lo as paletteColorsSchema, lr as useEditorUiStore, lt as resolvePreviewSidebarTab, m as planSiteChromeSelection, ma as getCuratedSiteStyle, mn as FormRenderer, mo as Select, ms as ChevronRight, mt as usePreviewAuth, n as useSiteChromeCustomizeOptional, o as deriveSiteStylePreviewUpdate, oo as VARIANT_ROLES, or as resolvePageRouteSlug, os as Monitor, p as cycleSiteChromeSelectionId, pn as ManifestForm, qn as getDashboardUrl, qo as X$1, r as StyleSwitchSummary, rr as isAdapterReferenceKind, s as planConfiguratorPreview, sr as resolveContentTitle, ss as Maximize2, tr as routeLifecycleContext, un as BlockEditor, ur as useEditorUiStoreInstance, v as createStyleConfiguratorState, vo as SelectValue, vs as Button, w as markApplySaving, wa as resolveSdkFooterMode, wo as PopoverTrigger, x as isPreviewingChange, xo as SearchInput, y as deriveStyleConfiguratorCapabilities, yo as Callout, yr as toEditorBlockItem, z as resolveStyleConfiguratorInitialSnapshot, zo as Surface } from "./SiteChromeCustomizeContext-D5t6joF_.mjs";
3
- import { n as Separator, t as Spinner } from "./spinner-tSdG9YvG.mjs";
4
- import { _ as usePreviewBlockCustomizeSelectionOptional, d as buildPreviewDashboardSetupUrl, f as resolvePreviewDashboardSetupHandoff, g as useBlockCustomizeControls, h as usePreviewSiteFontStorageUrl, m as resolvePreviewSidebarChromeModel, p as resolvePreviewEditorGuidanceModel, u as canInspectSiteStyle, v as PreviewFormProvider, y as previewWidgetOverrides } from "./SdkPreviewModeRuntime-CR5ypwxJ.mjs";
2
+ import { A as updateButtonStyleHoverPreference, Bn as paletteColorEntries, E as buttonStyleSelectionParameterValue, Hn as paletteColorsSchema, M as buttonStyleSelectionKey, Mr as generateFontFaceCss, Nr as getSiteFontsStorageUrl, O as findButtonStyleRecipe, Pr as VARIANT_ROLES, T as buttonStyleHoverPreferenceValue, Zn as resolveSdkFooterMode, i as ThemedButtonSpecimen, j as updateButtonStyleSelectionChoice, jr as buildFontPreviewUrl, k as resolveButtonStyleSelection } from "./ThemedButton-B8ViBnLK.mjs";
3
+ import { $a as Tabs, A as previewFooterLook, B as createOptimisticActionRunner, C as markApplySaved, Ca as getHeaderLayout, Ct as useUISelector, D as planStyleSwitch, Do as SlidersHorizontal, E as palettePreviewProjection, Eo as Smartphone, Et as useEntryController, F as setPaletteColors, Ga as SelectValue, Go as Button, Ha as SelectContent, Hn as listEntryPageContentSlots, Ho as ChevronLeft, I as styleConfiguratorHistoryEntryForPersistedSelection, Ja as SearchInput, Ka as Callout, L as syncStyleConfiguratorState, M as previewHeaderStyle, N as resetTypographyToSaved, No as Monitor, O as previewButtonStyle, P as restageSelectionChanges, Po as Maximize2, Pt as LinkedEntryLeaseBanner, Q as reportPreviewDesignError, Qa as Input, R as toggleRow, S as markApplyFailed, Sa as findFooterLook, Sr as ThemeScope, St as ContentFieldsForm, T as openRow, Ua as SelectItem, Un as listPageSurfaceContentSlots, Uo as ChevronDown, Va as Select, Vn as createManifestValidation, Vo as ChevronRight, Wa as SelectTrigger, Wn as blocksKeys, Wo as Check, Xa as PopoverContent, Xo as canWriteLinkedEntry, Ya as Popover, Yo as isEdited, Z as PREVIEW_DESIGN_SAVE_ERROR_MESSAGE, Za as PopoverTrigger, _ as cancelPreview, _o as DropdownMenuSeparator, a as selectionSnapshotFromApplySiteStyleSelectionResponse, ar as deriveRouteMetadataPresentation, b as dismissWarnings, bo as X$1, cr as unwrapResponse, cs as valueStatus, do as CollapsibleTrigger, eo as TabsContent, f as buildSiteChromeSelectionModels, fo as Surface, g as applyTypographyDraftPatch, ga as palettesForSiteStyle, go as DropdownMenuLabel, gt as FooterComposerPanel, h as applyResolvedSelections, ha as offeredSiteStyles, hn as createStoreBackend, ho as DropdownMenuItem, i as buildApplySiteStyleSelectionBody, j as previewHeaderLayout, k as previewCuratedPalette, kt as useAutosaveStatus, l as usePreviewDesignCoordinator, lo as Collapsible, lr as useEditorUiStore, lt as resolvePreviewSidebarTab, m as planSiteChromeSelection, ma as getCuratedSiteStyle, mn as FormRenderer, mo as DropdownMenuContent, mt as usePreviewAuth, n as useSiteChromeCustomizeOptional, no as TabsTrigger, o as deriveSiteStylePreviewUpdate, or as resolvePageRouteSlug, os as displayedValues, p as cycleSiteChromeSelectionId, pn as ManifestForm, po as DropdownMenu, qa as CalloutDescription, qn as getDashboardUrl, qo as cn, r as StyleSwitchSummary, rr as isAdapterReferenceKind, s as planConfiguratorPreview, sr as resolveContentTitle, ss as syncStateOf, to as TabsList, tr as routeLifecycleContext, un as BlockEditor, uo as CollapsibleContent, ur as useEditorUiStoreInstance, us as assertNever$1, v as createStyleConfiguratorState, vo as DropdownMenuTrigger, w as markApplySaving, wa as getHeaderStyle, wo as Tablet, x as isPreviewingChange, y as deriveStyleConfiguratorCapabilities, yr as toEditorBlockItem, z as resolveStyleConfiguratorInitialSnapshot } from "./SiteChromeCustomizeContext-DgBe-FlM.mjs";
4
+ import { n as Separator, t as Spinner } from "./spinner-B-ab2rJp.mjs";
5
+ import { _ as usePreviewBlockCustomizeSelectionOptional, d as buildPreviewDashboardSetupUrl, f as resolvePreviewDashboardSetupHandoff, g as useBlockCustomizeControls, h as usePreviewSiteFontStorageUrl, m as resolvePreviewSidebarChromeModel, p as resolvePreviewEditorGuidanceModel, u as canInspectSiteStyle, v as PreviewFormProvider, y as previewWidgetOverrides } from "./SdkPreviewModeRuntime-Dl4GyMc3.mjs";
5
6
  import React, { createContext, forwardRef, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore, useTransition } from "react";
6
7
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
7
8
  import { useQuery, useQueryClient } from "@tanstack/react-query";
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { Ao as Dialog, Bo as DropdownMenu, Dt as useEntryEditorController, Fo as DialogTitle, Go as DropdownMenuTrigger, Ho as DropdownMenuItem, J as usePreviewDesignHistoryOrder, K as usePreviewPageDesignEditorState, Lt as EditorWriteSurface, Mo as DialogDescription, Ot as classifyHistoryShortcut, Po as DialogHeader, Qo as Sparkles, Vo as DropdownMenuContent, X as selectPreviewDesignHistoryDomain, Xo as TriangleAlert, Y as previewDesignHistoryDomainForCommand, Yo as Undo2, as as Palette, bs as cn, cr as unwrapResponse, cs as LoaderCircle, do as Tooltip, fo as TooltipContent, fr as canDiscardDraft, fs as Eye, gs as ChevronDown, is as PenLine, jo as DialogContent, kt as useAutosaveStatus, lr as useEditorUiStore, mt as usePreviewAuth, n as useSiteChromeCustomizeOptional, ns as Redo2, po as TooltipTrigger, ps as EllipsisVertical, rs as Pencil, sn as useEditor, ur as useEditorUiStoreInstance, vs as Button, ys as cva } from "./SiteChromeCustomizeContext-D5t6joF_.mjs";
3
- import { t as Spinner } from "./spinner-tSdG9YvG.mjs";
4
- import { a as PREVIEW_CHROME_PORTAL_CLASS_NAME, b as FixedBottomSurface, c as resolvePreviewChromeSurface, l as PREVIEW_THEME_COOKIE_NAME, o as PREVIEW_CHROME_THEME_CLASS_NAME, s as applyPreviewChromeSurfaceToElement } from "./SdkPreviewModeRuntime-CR5ypwxJ.mjs";
2
+ import { Ao as Pencil, Ba as TooltipTrigger, Bo as EllipsisVertical, Co as TriangleAlert, Dt as useEntryEditorController, Fo as LoaderCircle, Go as Button, J as usePreviewDesignHistoryOrder, K as usePreviewPageDesignEditorState, Ko as cva, Lt as EditorWriteSurface, Mo as Palette, Ot as classifyHistoryShortcut, Ra as Tooltip, So as Undo2, To as Sparkles, Uo as ChevronDown, X as selectPreviewDesignHistoryDomain, Y as previewDesignHistoryDomainForCommand, ao as DialogDescription, co as DialogTitle, cr as unwrapResponse, fr as canDiscardDraft, ho as DropdownMenuItem, io as DialogContent, jo as PenLine, ko as Redo2, kt as useAutosaveStatus, lr as useEditorUiStore, mo as DropdownMenuContent, mt as usePreviewAuth, n as useSiteChromeCustomizeOptional, po as DropdownMenu, qo as cn, ro as Dialog, sn as useEditor, so as DialogHeader, ur as useEditorUiStoreInstance, vo as DropdownMenuTrigger, za as TooltipContent, zo as Eye } from "./SiteChromeCustomizeContext-DgBe-FlM.mjs";
3
+ import { t as Spinner } from "./spinner-B-ab2rJp.mjs";
4
+ import { a as PREVIEW_CHROME_PORTAL_CLASS_NAME, b as PREVIEW_CHROME_Z_INDEX, c as resolvePreviewChromeSurface, l as PREVIEW_THEME_COOKIE_NAME, o as PREVIEW_CHROME_THEME_CLASS_NAME, s as applyPreviewChromeSurfaceToElement, x as FixedBottomSurface } from "./SdkPreviewModeRuntime-Dl4GyMc3.mjs";
5
5
  import * as React$1 from "react";
6
6
  import { useCallback, useEffect, useMemo, useState, useTransition } from "react";
7
7
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -79,7 +79,8 @@ const EditingToggle = ({ placement = "floating" }) => {
79
79
  onClick: toggleEditingMode,
80
80
  disabled: isEditingPending,
81
81
  "aria-busy": isEditingPending,
82
- className: placement === "toolbar" ? "h-10 w-10 cursor-pointer rounded-full shadow-lg backdrop-blur-sm transition-all hover:scale-105" : "fixed bottom-6 right-6 z-50 h-10 w-10 cursor-pointer rounded-full shadow-lg backdrop-blur-sm transition-all hover:scale-105",
82
+ className: placement === "toolbar" ? "h-10 w-10 cursor-pointer rounded-full shadow-lg backdrop-blur-sm transition-all hover:scale-105" : "fixed bottom-6 right-6 h-10 w-10 cursor-pointer rounded-full shadow-lg backdrop-blur-sm transition-all hover:scale-105",
83
+ style: placement === "toolbar" ? void 0 : { zIndex: PREVIEW_CHROME_Z_INDEX },
83
84
  children: [isEditingPending ? /* @__PURE__ */ jsx(Spinner, { size: "sm" }) : /* @__PURE__ */ jsx(Icon, { className: "h-4 w-4" }), /* @__PURE__ */ jsx("span", {
84
85
  className: "sr-only",
85
86
  children: tooltipText
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { y as __exportAll } from "./spinner-BL3kW9Uh.mjs";
2
+ import { G as corners, H as parseThemeForPersistence, Hn as paletteColorsSchema, Sn as defaultThemeTokens, Sr as makeBoundaryId, Un as paletteModeSchema, Yt as resolveSurface, Zn as resolveSdkFooterMode, cr as asLayoutVariantKey, dr as assertNever$1, ft as isThemeV2NormalEditorRawStyleFieldName, gt as stripStaleTransitionStyleGroup, in as textColorStyle, rr as asDesignBlockId, si as __exportAll, ur as asSiteStyleId } from "./ThemedButton-B8ViBnLK.mjs";
3
3
  import { i as useOptionalPreviewLayout, t as PreviewQueryProvider } from "./PreviewQueryProvider-AR9eEn7j.mjs";
4
- import { $ as backgroundColorTokens, $a as asDesignBlockId, $i as defineFragment, $n as createRoutingHelpers, $r as resolveOfferingsPreviewGroups, $t as FileField, Ai as buildResolveImageUrlContext, An as mapOptionValueForSelect, Ao as Dialog, Ar as SITE_OVERLAY_HEADER_CLEARANCE_CSS_VAR, As as readEditorBlockVersionsFromPlacement, At as createEditorApiClientFactory, Ba as resolveLookSlotSurfaces, Bi as blogFeaturedPostFragment, Bn as createManifestFormAdapter, Br as systemCustomizeFacetLabelForValue, Bs as parseSiteId, Bt as SiteOptionPickerField, Ca as parseThemeForPersistence, Ci as coerceInlineTextWithFallback, Cn as clientComponentRegistry, Cr as containerResponsiveThemeCss, Ct as useUISelector, Di as LINKED_CONTENT_ENTRY_META_KEY, Dn as useSdkConfig, Do as TabsContent, Dr as offeringsPreviewBlockDefinition, Ds as parseFooterModuleId, Dt as useEntryEditorController, Ei as plainTextToInlineText, En as SdkConfigProvider, Eo as Tabs, Er as getBlockDefinition, Es as sameMailingListPlacementTargeting, Fi as richTextFragment, Fn as prepareBlockEditorManifest, Fo as DialogTitle, Fr as validateManifestDraft, Ft as EditLeaseDiscardedNotice, G as PreviewPageDesignEditorStateProvider, Ga as sectionTransitionFamilies, Gi as testimonialsHeadingFragment, Gn as getBlockManifestFromSdkConfig, Gr as escapeStyleContent, Gt as loadMailingListAuthoringContext, H as arrangementBlockControlsFor, Ha as composeBoundary, Hi as formEmbedFragment, Hr as buildThemeRuntime, Ht as OfferingsPreviewGroupOrderField, Ii as headingFragment, In as stripTopLevelRoutingUi, Ir as resolveArrangementKnobs, Is as unsafeAsEditorBlockId, It as EditLeaseModal, Ja as deriveSectionGround, Ji as ctaRowFragment, Jo as Upload, Jr as buildOfferingsCatalogueState, Jt as IconPickerField, K as usePreviewPageDesignEditorState, Ka as sectionTransitionFamilyForBoundaryOptionId, Ki as ctaCopyFragment, Kn as ApiRequestError, Kr as mergeContentWithBlockStyleOverrides, Kt as MailingListTargetingProvider, Li as cardFragment, Ln as evaluateVisibility, Lr as systemCustomizeFacetAppliesToLayoutVariant, Ls as assertNever$2, Lt as EditorWriteSurface, Mi as resolveImageUrlWithContext, Mn as FieldFrame, Mo as DialogDescription, Mr as visibleHeaderClearancePx, Ms as parseEditLeaseScope, Mt as useRetentionTicks, Ni as setContextResolveImageUrlContext, Nn as useField, No as DialogFooter, Nr as parseStoredVariant, Nt as VIEWING_PARTICIPATION, Oi as coerceLinkedContentEntriesPayload, On as hasEmptyOption, Oo as TabsList, Or as projectRecurringSchedule, Os as parseMailingListPlacementTargeting, Pi as SECTION_BACKGROUND_MIN_SOURCE_WIDTH, Pn as hideThemeV2RawStyleFields, Po as DialogHeader, Pr as compileManifestContentContract, Qa as stripStaleTransitionStyleGroup, Qi as bodyCopyFragment, Qn as API_ENDPOINTS, Qr as normalizeOfferingsPreviewItemLimit, Qt as ButtonWidgetProvider, Ra as arrangementSlotNames, Ri as faqAccordionFragment, Rn as getFieldIntent, Rr as systemCustomizeFacetCurrentValue, Rs as expectParsedBrandedId, Rt as createSiteOptionApiLoader, Sa as corners, Si as planSiteChromePlacement, Sn as useApiMediaUploader, Sr as ThemeScope, Ss as isEdited, Ti as isInlineTextEmpty, Tn as BlockApiProvider, Tr as makeDefaultBlockComponent, Ts as buildMailingListSignupBlockSourceRef, Tt as EntryControllerProvider, U as arrangementOwnedFieldIds, Ua as sectionFactsForContent, Ui as formCopyFragment, Ur as DEFAULT_THEME_RESPONSIVE_MODE, Ut as OfferingsPreviewWidgetProvider, V as arrangementBackgroundControlFor, Va as boundaryLayout, Vi as singleButtonFragment, Vr as systemCustomizeFacetNextValue, Vt as SiteOptionWidgetProvider, W as nextArrangementLookPin, Wa as defaultSectionTransitionVariantForFamily, Wi as testimonialsCarouselFragment, Wn as blocksKeys, Wr as getResponsiveScopeSpec, Wt as MailingListTargetingField, Xa as resolveSectionBackground, Xi as ctaButton, Xn as SURFACE_IDS, Xr as OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS, Xt as EntryPickerWidgetProvider, Ya as parseCanonicalRuntimeBackground, Yi as heroCopyFragment, Yn as SURFACE_DOCUMENT_DATA_ATTRIBUTE, Yr as buildItemDataMap, Yt as EntryPickerField, Za as isThemeV2NormalEditorRawStyleFieldName, Zi as runTransforms, Zn as resolveSurfaceDocumentAttributes, Zr as buildOfferingsPreviewRenderStates, Zt as ButtonVariantField, _a as surfaceResolutionContextFromTheme, _i as resolveEntryRouteTarget, _n as decodePublicProductCategorySelectorQuery, _o as SelectTrigger, _r as renderedFieldChanges, _t as renderSiteChromeBlock, aa as compileEditorModelRuntime, an as RichTextWidgetProvider, ao as textColorStyle, at as planBackgroundOverride, ba as getGradientPreset, bi as isObjectRecord, bn as MediaEditorContextProvider, br as unsafeAsLinkedContentEntryId, bs as cn, bt as PreviewTextEditor, c as PreviewDesignCoordinatorProvider, ca as readStoredMode, ci as Text$1, cn as LinkField, cr as unwrapResponse, ct as resolveBackgroundCapability, d as usePreviewThemeOverlay, da as resolvePublishedLook, di as siblingPath, dn as PaletteProvider, dr as useOptionalEditorUiStoreInstance, ds as GripVertical, dt as initPreviewAuth, ea as bindingSchema, ei as buildAppointmentServicesView, en as MediaField, eo as asLayoutVariantKey, er as createSnapshotFromPageRecord, es as SlidersHorizontal, et as canCycleBackgroundOverrideValue, fa as componentRuntimeRulesForTheme, fi as defaultTransforms, fn as usePalette, ft as registerPreviewRenewalFetcher, gi as isRichTextDoc, gn as MediaEditor, go as SelectItem, gr as renderSourceFor, hi as bookingConsentCarrierSchema, hn as createStoreBackend, ho as SelectContent, hr as remoteDraftValues, hs as ChevronLeft, ht as usePreviewToken, ia as applyCompiledRuntimeFieldsToContent, ii as parseGeneratedIconSetId, in as RichTextField, io as resolveSurface, ir as parseReferenceKind, it as parseBackgroundOverrideFromContent, ji as getCurrentResolveImageUrlContext, jn as unmapValueFromSelect, jo as DialogContent, jr as planSiteOverlayHeaderClearance, js as selectedContentVersionId, jt as createPageSurfaceEditorServices, ki as getLinkedContentEntryMeta, kn as mapCurrentValueForSelect, ko as TabsTrigger, kr as SITE_CHROME_VISIBLE_HEADER_SELECTOR, ks as NO_BLOCK_VERSIONS, la as resolveEffectiveArrangement, li as RichText$1, ln as LinkWidgetProvider, lo as paletteColorsSchema, lr as useEditorUiStore, ls as Info, lt as resolvePreviewSidebarTab, ma as getCuratedSiteStyle, mi as publicEventsArraySchema, mn as FormRenderer, mo as Select, mr as planLinkedSaveHandoverRetention, ms as ChevronRight, mt as usePreviewAuth, n as useSiteChromeCustomizeOptional, na as blockLookFromContent, ni as parseBlockIconValue, nn as ReferenceWidgetProvider, no as assertNever$1, nr as BUILT_IN_REFERENCE_KINDS, nt as enabledBackgroundModes, oa as formatSiteChromeBackgroundTokenLabel, oi as renderInlineText, on as EditorProvider, ot as planBackgroundTransition, pa as designRuntimeRulesForTheme, pi as calendarWindowQuerySchema, pr as activeLinkedSaveHandover, pt as renewPreviewSession, q as PreviewDesignHistoryOrderProvider, qa as sectionTransitionVariantForBoundaryOptionId, qi as heroCtaRowFragment, qo as X, qr as getDefaultComponentRegistry, qt as InlineTextField, ra as readBlockComposition, ri as parseGeneratedIconAssetId, rn as useRichTextImagePicker, ro as makeBoundaryId, rt as imagePoolForOverride, sa as arrangementManifestFromVariants, si as logger, sn as useEditor, so as defaultThemeTokens, st as rankBackgroundImagePoolItems, t as SiteChromeCustomizeProvider, ta as arrangementHooksFromContent, tn as ReferenceField, to as asSiteStyleId, ts as RotateCcw, tt as defaultBackgroundOverrideForMode, u as PreviewThemeOverlayProvider, ua as resolveModeArrangement, ui as getAtPath, uo as paletteModeSchema, ur as useEditorUiStoreInstance, us as Image, ut as createGuardedPreviewApiClient, va as gradientToCss, vi as resolvePageRouteTarget, vn as DEFAULT_LAUNCH_READINESS_INPUT, vo as SelectValue, vr as resolveRenderedValues, vs as Button, vt as PreviewRichTextEditor, wa as resolveSdkFooterMode, wi as inlineTextToPlainText, wn as ImageResolveContextProvider, wr as createCustomBlockRegistry, ws as canEditorWrite, wt as EditableBlockProvider, xa as deriveSiteStyleBlockPolicy, xi as isRecord$8, xn as useMediaEditorOptional, xr as isSupportedLoaderEndpoint, xs as baselineRevisionOf, xt as PREVIEW_EDITABLE_OUTLINE, ya as GRADIENT_PRESETS, yi as resolveRouteTarget, yn as deriveLaunchReadiness, yt as PreviewInlineTextEditor, za as resolveItemSurface, zi as faqHeadingFragment, zn as isHeaderField, zr as systemCustomizeFacetDefinitionsForBlock, zs as parseMediaAssetId, zt as createSiteOptionWidgetAdapters } from "./SiteChromeCustomizeContext-D5t6joF_.mjs";
4
+ import { $ as backgroundColorTokens, $a as Tabs, $i as defineFragment, $n as createRoutingHelpers, $o as parseFooterModuleId, $r as normalizeOfferingsPreviewItemLimit, $t as FileField, Aa as sectionFactsForContent, Ai as buildResolveImageUrlContext, An as mapOptionValueForSelect, Ar as SITE_CHROME_VISIBLE_HEADER_SELECTOR, At as createEditorApiClientFactory, Bi as blogFeaturedPostFragment, Bn as createManifestFormAdapter, Br as systemCustomizeFacetDefinitionsForBlock, Bt as SiteOptionPickerField, Ci as coerceInlineTextWithFallback, Cn as clientComponentRegistry, Cr as containerResponsiveThemeCss, Ct as useUISelector, Da as resolveLookSlotSurfaces, Di as LINKED_CONTENT_ENTRY_META_KEY, Dn as useSdkConfig, Do as SlidersHorizontal, Dr as normalizeBlockContent, Dt as useEntryEditorController, Ea as resolveItemSurface, Ei as plainTextToInlineText, En as SdkConfigProvider, Er as getBlockDefinition, Fa as deriveSectionGround, Fi as richTextFragment, Fn as prepareBlockEditorManifest, Fr as compileManifestContentContract, Ft as EditLeaseDiscardedNotice, G as PreviewPageDesignEditorStateProvider, Ga as SelectValue, Gi as testimonialsHeadingFragment, Gn as getBlockManifestFromSdkConfig, Go as Button, Gr as getResponsiveScopeSpec, Gt as loadMailingListAuthoringContext, H as arrangementBlockControlsFor, Ha as SelectContent, Hi as formEmbedFragment, Ho as ChevronLeft, Hr as systemCustomizeFacetNextValue, Ht as OfferingsPreviewGroupOrderField, Ia as parseCanonicalRuntimeBackground, Ii as headingFragment, In as stripTopLevelRoutingUi, Io as Info, Ir as validateManifestDraft, It as EditLeaseModal, Ji as ctaRowFragment, Jo as baselineRevisionOf, Jr as getDefaultComponentRegistry, Jt as IconPickerField, K as usePreviewPageDesignEditorState, Ki as ctaCopyFragment, Kn as ApiRequestError, Kr as escapeStyleContent, Kt as MailingListTargetingProvider, La as resolveSectionBackground, Li as cardFragment, Ln as evaluateVisibility, Lo as Image, Lr as resolveArrangementKnobs, Lt as EditorWriteSurface, Ma as sectionTransitionFamilies, Mi as resolveImageUrlWithContext, Mn as FieldFrame, Mr as planSiteOverlayHeaderClearance, Mt as useRetentionTicks, Na as sectionTransitionFamilyForBoundaryOptionId, Ni as setContextResolveImageUrlContext, Nn as useField, Nr as visibleHeaderClearancePx, Nt as VIEWING_PARTICIPATION, Oa as boundaryLayout, Oi as coerceLinkedContentEntriesPayload, On as hasEmptyOption, Oo as RotateCcw, Or as offeringsPreviewBlockDefinition, Pa as sectionTransitionVariantForBoundaryOptionId, Pi as SECTION_BACKGROUND_MIN_SOURCE_WIDTH, Pn as hideThemeV2RawStyleFields, Pr as parseStoredVariant, Qi as bodyCopyFragment, Qn as API_ENDPOINTS, Qo as buildMailingListSignupBlockSourceRef, Qr as buildOfferingsPreviewRenderStates, Qt as ButtonWidgetProvider, Ri as faqAccordionFragment, Rn as getFieldIntent, Ro as GripVertical, Rr as systemCustomizeFacetAppliesToLayoutVariant, Rt as createSiteOptionApiLoader, Si as planSiteChromePlacement, Sn as useApiMediaUploader, Sr as ThemeScope, Ta as arrangementSlotNames, Ti as isInlineTextEmpty, Tn as BlockApiProvider, Tr as makeDefaultBlockComponent, Tt as EntryControllerProvider, U as arrangementOwnedFieldIds, Ua as SelectItem, Ui as formCopyFragment, Ur as buildThemeRuntime, Ut as OfferingsPreviewWidgetProvider, V as arrangementBackgroundControlFor, Va as Select, Vi as singleButtonFragment, Vo as ChevronRight, Vr as systemCustomizeFacetLabelForValue, Vt as SiteOptionWidgetProvider, W as nextArrangementLookPin, Wa as SelectTrigger, Wi as testimonialsCarouselFragment, Wn as blocksKeys, Wr as DEFAULT_THEME_RESPONSIVE_MODE, Wt as MailingListTargetingField, Xi as ctaButton, Xn as SURFACE_IDS, Xr as buildItemDataMap, Xt as EntryPickerWidgetProvider, Yi as heroCopyFragment, Yn as SURFACE_DOCUMENT_DATA_ATTRIBUTE, Yo as isEdited, Yr as buildOfferingsCatalogueState, Yt as EntryPickerField, Zi as runTransforms, Zn as resolveSurfaceDocumentAttributes, Zo as canEditorWrite, Zr as OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS, Zt as ButtonVariantField, _a as surfaceResolutionContextFromTheme, _i as resolveEntryRouteTarget, _n as decodePublicProductCategorySelectorQuery, _r as renderedFieldChanges, _t as renderSiteChromeBlock, aa as compileEditorModelRuntime, ai as parseGeneratedIconSetId, an as RichTextWidgetProvider, ao as DialogDescription, as as parseEditLeaseScope, at as planBackgroundOverride, ba as getGradientPreset, bi as isObjectRecord, bn as MediaEditorContextProvider, bo as X, br as unsafeAsLinkedContentEntryId, bt as PreviewTextEditor, c as PreviewDesignCoordinatorProvider, ca as readStoredMode, ci as Text$1, cn as LinkField, co as DialogTitle, cr as unwrapResponse, ct as resolveBackgroundCapability, d as usePreviewThemeOverlay, da as resolvePublishedLook, di as siblingPath, dn as PaletteProvider, dr as useOptionalEditorUiStoreInstance, ds as expectParsedBrandedId, dt as initPreviewAuth, ea as bindingSchema, ei as resolveOfferingsPreviewGroups, en as MediaField, eo as TabsContent, er as createSnapshotFromPageRecord, es as parseMailingListPlacementTargeting, et as canCycleBackgroundOverrideValue, fa as componentRuntimeRulesForTheme, fi as defaultTransforms, fn as usePalette, fs as parseMediaAssetId, ft as registerPreviewRenewalFetcher, gi as isRichTextDoc, gn as MediaEditor, gr as renderSourceFor, hi as bookingConsentCarrierSchema, hn as createStoreBackend, hr as remoteDraftValues, ht as usePreviewToken, ia as applyCompiledRuntimeFieldsToContent, ii as parseGeneratedIconAssetId, in as RichTextField, io as DialogContent, ir as parseReferenceKind, is as selectedContentVersionId, it as parseBackgroundOverrideFromContent, ja as defaultSectionTransitionVariantForFamily, ji as getCurrentResolveImageUrlContext, jn as unmapValueFromSelect, jr as SITE_OVERLAY_HEADER_CLEARANCE_CSS_VAR, jt as createPageSurfaceEditorServices, ka as composeBoundary, ki as getLinkedContentEntryMeta, kn as mapCurrentValueForSelect, kr as projectRecurringSchedule, la as resolveEffectiveArrangement, li as RichText$1, ln as LinkWidgetProvider, lr as useEditorUiStore, ls as unsafeAsEditorBlockId, lt as resolvePreviewSidebarTab, ma as getCuratedSiteStyle, mi as publicEventsArraySchema, mn as FormRenderer, mr as planLinkedSaveHandoverRetention, mt as usePreviewAuth, n as useSiteChromeCustomizeOptional, na as blockLookFromContent, nn as ReferenceWidgetProvider, no as TabsTrigger, nr as BUILT_IN_REFERENCE_KINDS, ns as NO_BLOCK_VERSIONS, nt as enabledBackgroundModes, oa as formatSiteChromeBackgroundTokenLabel, oi as renderInlineText, on as EditorProvider, oo as DialogFooter, ot as planBackgroundTransition, pa as designRuntimeRulesForTheme, pi as calendarWindowQuerySchema, pr as activeLinkedSaveHandover, ps as parseSiteId, pt as renewPreviewSession, q as PreviewDesignHistoryOrderProvider, qi as heroCtaRowFragment, qo as cn, qr as mergeContentWithBlockStyleOverrides, qt as InlineTextField, ra as readBlockComposition, ri as parseBlockIconValue, rn as useRichTextImagePicker, ro as Dialog, rs as readEditorBlockVersionsFromPlacement, rt as imagePoolForOverride, sa as arrangementManifestFromVariants, si as logger, sn as useEditor, so as DialogHeader, st as rankBackgroundImagePoolItems, t as SiteChromeCustomizeProvider, ta as arrangementHooksFromContent, ti as buildAppointmentServicesView, tn as ReferenceField, to as TabsList, ts as sameMailingListPlacementTargeting, tt as defaultBackgroundOverrideForMode, u as PreviewThemeOverlayProvider, ua as resolveModeArrangement, ui as getAtPath, ur as useEditorUiStoreInstance, us as assertNever$2, ut as createGuardedPreviewApiClient, va as gradientToCss, vi as resolvePageRouteTarget, vn as DEFAULT_LAUNCH_READINESS_INPUT, vr as resolveRenderedValues, vt as PreviewRichTextEditor, wi as inlineTextToPlainText, wn as ImageResolveContextProvider, wr as createCustomBlockRegistry, wt as EditableBlockProvider, xa as deriveSiteStyleBlockPolicy, xi as isRecord$8, xn as useMediaEditorOptional, xo as Upload, xr as isSupportedLoaderEndpoint, xt as PREVIEW_EDITABLE_OUTLINE, ya as GRADIENT_PRESETS, yi as resolveRouteTarget, yn as deriveLaunchReadiness, yt as PreviewInlineTextEditor, zi as faqHeadingFragment, zn as isHeaderField, zr as systemCustomizeFacetCurrentValue, zt as createSiteOptionWidgetAdapters } from "./SiteChromeCustomizeContext-DgBe-FlM.mjs";
5
5
  import * as React$1 from "react";
6
6
  import React, { Children, Fragment, cloneElement, createContext, isValidElement, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useReducer, useRef, useState } from "react";
7
7
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -563,7 +563,7 @@ function pageBlockPosition(index, blockCount) {
563
563
  //#endregion
564
564
  //#region ../blocks/src/pageRendererContracts.ts
565
565
  function buildPageRendererRootRuntime(dataContext) {
566
- const { siteId = null, siteName, pageId = null, pathname = null, bookingTimeZone, previewStage = "published", apiBaseUrl = null, portalToken = null, readAuthority, bookingOfferingPresets = [], appointmentServicePathPrefix = null, mailingList = { tag: "not_configured" }, eventRegistrationOverlayEnabled = false, loaderFailures = {} } = dataContext ?? {};
566
+ const { siteId = null, siteName, pageId = null, pathname = null, bookingTimeZone, previewStage = "published", apiBaseUrl = null, portalToken = null, readAuthority, bookingOfferingPresets = [], appointmentServicePathPrefix = null, mailingList = { tag: "not_configured" }, loaderFailures = {} } = dataContext ?? {};
567
567
  return {
568
568
  siteId,
569
569
  demoEmailSuppressed: resolveDemoEmailSuppression(dataContext),
@@ -578,7 +578,6 @@ function buildPageRendererRootRuntime(dataContext) {
578
578
  bookingOfferingPresets,
579
579
  appointmentServicePathPrefix,
580
580
  mailingList,
581
- eventRegistrationOverlayEnabled,
582
581
  loaderFailures
583
582
  };
584
583
  }
@@ -1292,7 +1291,7 @@ function planNewsletterBlockSubmission(placement) {
1292
1291
  function planNewsletterPreviewSubmission(placement) {
1293
1292
  if (!placement.publishedContentId) return { tag: "unpublished-form" };
1294
1293
  if (!placement.publishedContent) return { tag: "unpublished-settings" };
1295
- const draft = parseMailingListPlacementTargeting(placement.renderedContent.targeting ?? { mode: "default" });
1294
+ const draft = parseMailingListPlacementTargeting(placement.renderedContent.targeting);
1296
1295
  const published = parseMailingListPlacementTargeting(placement.publishedContent.targeting);
1297
1296
  if (!draft.ok || !published.ok || !sameMailingListPlacementTargeting(draft.value, published.value)) return { tag: "unpublished-settings" };
1298
1297
  const sourceRef = buildMailingListSignupBlockSourceRef(placement.blockId, placement.publishedContentId);
@@ -1412,7 +1411,8 @@ function preparedBlockProps(entry, content, data, input) {
1412
1411
  block: entry.block,
1413
1412
  themeResources: input.themeResources,
1414
1413
  dataContext: input.dataContext,
1415
- imageResolveContext: input.imageResolveContext
1414
+ imageResolveContext: input.imageResolveContext,
1415
+ routeMap: input.routeMap
1416
1416
  }),
1417
1417
  bookingTimeZone: input.dataContext?.bookingTimeZone
1418
1418
  };
@@ -1432,6 +1432,12 @@ function buildBlockOverrideProps(input) {
1432
1432
  ...blockSessionProps(dataContext),
1433
1433
  ...blockSubjectProps(dataContext),
1434
1434
  imageResolveContext: input.imageResolveContext,
1435
+ linkResolveContext: {
1436
+ routes: input.routeMap ?? dataContext?.routes,
1437
+ pagesByIdentifier: dataContext?.pagesByIdentifier,
1438
+ entriesByIdentifier: dataContext?.entriesByIdentifier,
1439
+ stage: dataContext?.previewStage
1440
+ },
1435
1441
  blockId: block.id ?? null,
1436
1442
  contentVersionId: block.contentVersionId ?? null,
1437
1443
  ...newsletterBlockProps(block, input.content, dataContext?.previewStage),
@@ -1488,7 +1494,7 @@ function arrangementResolvedData(kind, content, data) {
1488
1494
  function arrangementResolvedContent(kind, content, data, context) {
1489
1495
  if (content._effectiveLook === void 0 || !data || kind !== "block.offerings-preview" && kind !== "block.appointment-services") return content;
1490
1496
  if (kind === "block.appointment-services") return appointmentArrangementContent(content, data, context);
1491
- const normalized = offeringsPreviewBlockDefinition.normalizeContent?.(content);
1497
+ const normalized = normalizeBlockContent(offeringsPreviewBlockDefinition, content);
1492
1498
  return withCardListPhotoCount(content, content.showPhotos === false ? 0 : offeringsPreviewPhotoCount({
1493
1499
  ...normalized,
1494
1500
  presets: context?.bookingOfferingPresets,
@@ -1889,13 +1895,11 @@ function renderSystemBlockElement(input) {
1889
1895
  * referential equality of all props that affect rendering. Standard React.memo
1890
1896
  * wouldn't catch all the render triggers from the editor store.
1891
1897
  */
1892
- const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeResources, entry: preparedEntry, audience, dataContext, registry, wrapBlock, imageResolveContext, previewAuthoring }) {
1893
- const entry = preparedEntry.entry;
1894
- const prepared = preparedEntry.prepared;
1898
+ const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeResources, entry: preparedEntry, routeMap, audience, dataContext, registry, wrapBlock, imageResolveContext, previewAuthoring }) {
1899
+ const { entry, prepared } = preparedEntry;
1895
1900
  const block = entry.block;
1896
1901
  const perfStart = globalThis.process?.env?.DEBUG_PERF === "1" && typeof window === "undefined" ? Date.now() : 0;
1897
- const fallbackImageResolveContext = getCurrentResolveImageUrlContext();
1898
- const resolvedImageResolveContext = imageResolveContext ?? fallbackImageResolveContext;
1902
+ const resolvedImageResolveContext = imageResolveContext ?? getCurrentResolveImageUrlContext();
1899
1903
  function finish(node, meta) {
1900
1904
  if (!perfStart) return node;
1901
1905
  const durationMs = Date.now() - perfStart;
@@ -1935,7 +1939,8 @@ const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeResources
1935
1939
  block,
1936
1940
  themeResources,
1937
1941
  dataContext,
1938
- imageResolveContext: resolvedImageResolveContext
1942
+ imageResolveContext: resolvedImageResolveContext,
1943
+ routeMap
1939
1944
  }) })), {
1940
1945
  outcome: "overrideWithoutDefinition",
1941
1946
  override: true,
@@ -3150,6 +3155,34 @@ function isNonEmptyString(value) {
3150
3155
  function hasText(value) {
3151
3156
  return isNonEmptyString(value);
3152
3157
  }
3158
+ const CONTROL_CHARACTER_PATTERN = /[\u0000-\u001f\u007f]/u;
3159
+ function containsUnsafePathSegmentCharacter(value) {
3160
+ return value.includes("/") || value.includes("\\") || CONTROL_CHARACTER_PATTERN.test(value);
3161
+ }
3162
+ function isReservedPathSegment(value) {
3163
+ return value === "." || value === "..";
3164
+ }
3165
+ function isUnsafePathSegment(segment) {
3166
+ return segment.trim().length === 0 || segment !== segment.trim() || isReservedPathSegment(segment) || containsUnsafePathSegmentCharacter(segment);
3167
+ }
3168
+ const STORAGE_OBJECT_CHARACTER = "A-Za-z0-9_!.*'() &$=@;:+,-";
3169
+ const unsupportedFilenameCharacters = new RegExp(`[^${STORAGE_OBJECT_CHARACTER}]+`, "gu");
3170
+ const supportedObjectKey = new RegExp(`^[/${STORAGE_OBJECT_CHARACTER}]+$`, "u");
3171
+ /** Validate without trimming or rewriting: supplied keys are object identities. */
3172
+ function parseWritableStoragePath(value) {
3173
+ if (typeof value !== "string" || value.split("/").some(isUnsafePathSegment)) return err("unsafe-path-segment");
3174
+ if (!supportedObjectKey.test(value)) return err("unsupported-storage-character");
3175
+ return ok(value);
3176
+ }
3177
+ /** Choose a new internal filename; never use this to rewrite an existing key. */
3178
+ function storageObjectFilename(filename, maxLength = 255) {
3179
+ const converted = filename.trim().normalize("NFKD").replace(/[\u0300-\u036f]/gu, "").replace(unsupportedFilenameCharacters, "-").trim();
3180
+ const usable = isUnsafePathSegment(converted) ? "upload" : converted;
3181
+ const extension = /\.[A-Za-z0-9]{1,16}$/u.exec(usable)?.[0] ?? "";
3182
+ const stem = extension.length > 0 ? usable.slice(0, -extension.length) : usable;
3183
+ const shortenedFilename = `${(/[A-Za-z0-9]/u.test(stem) || converted === filename.trim() ? stem : "upload").slice(0, Math.max(1, maxLength - extension.length)).trim() || "upload"}${extension}`;
3184
+ return isUnsafePathSegment(shortenedFilename) ? "upload" : shortenedFilename;
3185
+ }
3153
3186
  const FILE_STORAGE_BUCKETS = {
3154
3187
  publicSite: unsafeAsStorageBucketName("media"),
3155
3188
  privateSite: unsafeAsStorageBucketName("site-files-private"),
@@ -3280,11 +3313,6 @@ function parseRelativeStoragePath(value) {
3280
3313
  if (!validated.ok) return validated;
3281
3314
  return ok$1(brandRelativeStoragePath(validated.value));
3282
3315
  }
3283
- function assertRelativeStoragePath(value) {
3284
- const parsed = parseRelativeStoragePath(value);
3285
- if (!parsed.ok) throw new Error(`Expected RelativeStoragePath, got ${parsed.error.tag}`);
3286
- return parsed.value;
3287
- }
3288
3316
  function isRecord$6(value) {
3289
3317
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
3290
3318
  }
@@ -3614,9 +3642,10 @@ var MediaStorageError = class extends Error {
3614
3642
  const pad = (value) => value.toString().padStart(2, "0");
3615
3643
  const extractExtension = (filename) => {
3616
3644
  if (!hasText(filename)) return "";
3617
- const lastDot = filename.lastIndexOf(".");
3645
+ const internalFilename = storageObjectFilename(filename);
3646
+ const lastDot = internalFilename.lastIndexOf(".");
3618
3647
  if (lastDot === -1) return "";
3619
- return filename.slice(lastDot).toLowerCase();
3648
+ return internalFilename.slice(lastDot).toLowerCase();
3620
3649
  };
3621
3650
  const generateId = () => {
3622
3651
  const crypto = globalThis.crypto;
@@ -3636,14 +3665,28 @@ const generateId = () => {
3636
3665
  * since the site ID is prepended at runtime rather than stored in content data.
3637
3666
  */
3638
3667
  const generateStoragePath = ({ filename, folder = "originals", variantKey, now = /* @__PURE__ */ new Date() }) => {
3639
- const extension = extractExtension(filename);
3640
- const year = now.getUTCFullYear();
3641
- const month = pad(now.getUTCMonth() + 1);
3642
3668
  const id = generateId();
3643
- if (folder === "variants") return assertRelativeStoragePath(`variants/${variantKey ?? generateId()}/${id}${extension}`);
3644
- if (folder === "imports") return assertRelativeStoragePath(`imports/${variantKey ?? generateId()}${extension}`);
3645
- return assertRelativeStoragePath(`originals/${year}/${month}/${id}${extension}`);
3669
+ const nowParts = {
3670
+ year: now.getUTCFullYear(),
3671
+ month: pad(now.getUTCMonth() + 1)
3672
+ };
3673
+ const path = decideGeneratedStoragePath({
3674
+ extension: extractExtension(filename),
3675
+ folder,
3676
+ ...nowParts,
3677
+ id,
3678
+ variantKey: variantKey ?? (folder === "originals" ? id : generateId())
3679
+ });
3680
+ if (!path.ok) {
3681
+ const reason = typeof path.error === "string" ? path.error : path.error.tag;
3682
+ throw new Error(`Invalid generated storage path: ${reason}`);
3683
+ }
3684
+ return path.value;
3646
3685
  };
3686
+ function decideGeneratedStoragePath(input) {
3687
+ const writable = parseWritableStoragePath(input.folder === "variants" ? `variants/${input.variantKey}/${input.id}${input.extension}` : input.folder === "imports" ? `imports/${input.variantKey}${input.extension}` : `originals/${input.year}/${input.month}/${input.id}${input.extension}`);
3688
+ return writable.ok ? parseRelativeStoragePath(writable.value) : writable;
3689
+ }
3647
3690
  const DEFAULT_BUCKET = "media";
3648
3691
  const MAX_LIMIT = 100;
3649
3692
  const fileKindSchema = z.custom((value) => parseFileKindJson(value).ok, { message: "Invalid file kind JSON" });
@@ -4527,6 +4570,15 @@ function findPresetFromCss(css, tokens) {
4527
4570
  return null;
4528
4571
  }
4529
4572
  //#endregion
4573
+ //#region ../editor/src/chrome/chromeLayers.ts
4574
+ /**
4575
+ * Where preview and editor chrome stacks against the site it shows. Sites
4576
+ * float their own overlays (the event booking bar sits at 12000 and its
4577
+ * booking panel at 14000): the chrome stays above a site's floating bars, so
4578
+ * its controls stay clickable while viewing, and below a site's modal panel.
4579
+ */
4580
+ const PREVIEW_CHROME_Z_INDEX = 13e3;
4581
+ //#endregion
4530
4582
  //#region ../editor-blocks/src/widgets/entry-picker/loaders.ts
4531
4583
  function getStatusBadgeVariant(status) {
4532
4584
  switch (status) {
@@ -4567,7 +4619,8 @@ async function loadRoutableContentItems({ apiClient, siteId }) {
4567
4619
  endpoint: "getRoutableContent",
4568
4620
  params: { siteId }
4569
4621
  }));
4570
- return Array.isArray(payload?.items) ? payload.items : [];
4622
+ if (!Array.isArray(payload?.items)) throw new Error("Invalid routable content response");
4623
+ return payload.items;
4571
4624
  }
4572
4625
  //#endregion
4573
4626
  //#region ../editor-blocks/src/widgets/reference/dynamicAdapters.ts
@@ -4756,7 +4809,6 @@ const referenceLoaders = {
4756
4809
  };
4757
4810
  //#endregion
4758
4811
  //#region ../preview-next/src/client/widgets/widgetAdapters.ts
4759
- const routableContentCache = /* @__PURE__ */ new Map();
4760
4812
  const entryPickerCache = /* @__PURE__ */ new Map();
4761
4813
  const siteOptionItemsCache = /* @__PURE__ */ new Map();
4762
4814
  /**
@@ -4834,23 +4886,10 @@ function createCachedReferenceAdapterLoader(kind, loader, previewClient, fallbac
4834
4886
  };
4835
4887
  }
4836
4888
  function createPreviewLinkAdapters(previewClient) {
4837
- return { fetchRoutableContent: async (currentSiteId) => {
4838
- const cached = routableContentCache.get(currentSiteId);
4839
- if (cached) return cached;
4840
- const promise = (async () => {
4841
- try {
4842
- return await loadRoutableContentItems({
4843
- apiClient: previewClient,
4844
- siteId: currentSiteId
4845
- });
4846
- } catch (error) {
4847
- routableContentCache.delete(currentSiteId);
4848
- throw error;
4849
- }
4850
- })();
4851
- setBoundedCache(routableContentCache, currentSiteId, promise);
4852
- return promise;
4853
- } };
4889
+ return { fetchRoutableContent: (siteId) => loadRoutableContentItems({
4890
+ apiClient: previewClient,
4891
+ siteId
4892
+ }) };
4854
4893
  }
4855
4894
  function createPreviewEntryPickerAdapter(previewClient) {
4856
4895
  return {
@@ -6110,6 +6149,26 @@ function PreviewLeaseEditingMode() {
6110
6149
  return null;
6111
6150
  }
6112
6151
  //#endregion
6152
+ //#region ../preview-next/src/client/preview/previewModeRootAttribute.ts
6153
+ /**
6154
+ * Marks the document root with the preview's mode while the preview shell is
6155
+ * mounted: "view" or "edit". Site CSS keys off it to put floating site
6156
+ * overlays (`[data-rb-site-overlay]`) away while editing, without the site
6157
+ * knowing about the editor.
6158
+ */
6159
+ const PREVIEW_MODE_ATTRIBUTE = "data-rb-preview-mode";
6160
+ function previewModeValue(isEditingMode) {
6161
+ return isEditingMode ? "edit" : "view";
6162
+ }
6163
+ /** Follows mode changes, and leaves the root as it found it on unmount. */
6164
+ function usePreviewModeRootAttribute(isEditingMode) {
6165
+ useEffect(() => {
6166
+ const root = document.documentElement;
6167
+ root.setAttribute(PREVIEW_MODE_ATTRIBUTE, previewModeValue(isEditingMode));
6168
+ return () => root.removeAttribute(PREVIEW_MODE_ATTRIBUTE);
6169
+ }, [isEditingMode]);
6170
+ }
6171
+ //#endregion
6113
6172
  //#region ../preview-next/src/client/preview/previewSetupGuidance.ts
6114
6173
  function resolvePreviewSetupBannerState(input) {
6115
6174
  if (input.authMode === "onboardingGrant") return input.dashboardUnlocked ? "dashboard_ready" : "awaiting_confirmation";
@@ -6970,15 +7029,23 @@ function PreviewChromeLayerProvider({ children }) {
6970
7029
  portalTarget,
6971
7030
  subscribeLayout
6972
7031
  }), [portalTarget, subscribeLayout]);
7032
+ const layerHost = useBodyHost();
6973
7033
  return /* @__PURE__ */ jsxs(PreviewChromeLayerContext.Provider, {
6974
7034
  value,
6975
- children: [children, /* @__PURE__ */ jsx("div", {
7035
+ children: [children, layerHost ? createPortal(/* @__PURE__ */ jsx("div", {
6976
7036
  ref: setPortalTarget,
6977
- className: "pointer-events-none fixed inset-0 z-[70]",
7037
+ className: "pointer-events-none fixed inset-0",
7038
+ style: { zIndex: PREVIEW_CHROME_Z_INDEX },
6978
7039
  "data-preview-chrome-layer": ""
6979
- })]
7040
+ }), layerHost) : null]
6980
7041
  });
6981
7042
  }
7043
+ /** The document body once mounted; null during server rendering and hydration. */
7044
+ function useBodyHost() {
7045
+ const [host, setHost] = useState(null);
7046
+ useEffect(() => setHost(document.body), []);
7047
+ return host;
7048
+ }
6982
7049
  /** Portal style writes are consequences of measurement, not new anchor changes. */
6983
7050
  function hasPreviewAnchorMutation(records, portalTarget) {
6984
7051
  return records.some(({ target }) => !portalTarget.contains(target));
@@ -8418,10 +8485,10 @@ function resolveShellThemeRoles(props) {
8418
8485
  }
8419
8486
  const previewContainerResponsiveEnabled = process.env.NEXT_PUBLIC_ENABLE_PREVIEW_CONTAINER_RESPONSIVE !== "false";
8420
8487
  const PreviewEditorSidebar = React.lazy(async () => {
8421
- return { default: (await import("./PreviewEditorSidebar-BHplI9HE.mjs")).PreviewEditorSidebar };
8488
+ return { default: (await import("./PreviewEditorSidebar-Dr4NJi3Q.mjs")).PreviewEditorSidebar };
8422
8489
  });
8423
8490
  const PreviewEditorUI = React.lazy(async () => {
8424
- return { default: (await import("./PreviewEditorUI-DuyN8nsD.mjs")).PreviewEditorUI };
8491
+ return { default: (await import("./PreviewEditorUI-DSZXQbyh.mjs")).PreviewEditorUI };
8425
8492
  });
8426
8493
  const previewPaneContainmentStyle = {
8427
8494
  contain: "layout paint",
@@ -8504,6 +8571,7 @@ function PreviewShellLayout(props) {
8504
8571
  const siteChromeRenderModel = layout?.siteChromeRenderModel ?? null;
8505
8572
  const surfaceDocument = useMemo(() => resolvePreviewChromeSurface(surfaceId), [surfaceId]);
8506
8573
  const isOpen = usePreviewDrawerOpen();
8574
+ usePreviewModeRootAttribute(useEditor().isEditingMode);
8507
8575
  const setDrawerOpen = useEditorUiStore((s) => s.setDrawerOpen);
8508
8576
  const sidebarTab = useEditorUiStore((s) => s.previewSidebarTab);
8509
8577
  const setPreviewSidebarActiveTab = useEditorUiStore((s) => s.setPreviewSidebarTab);
@@ -11047,8 +11115,11 @@ function PhoneBlockDock({ themeSource, children }) {
11047
11115
  if (typeof document === "undefined") return null;
11048
11116
  return createPortal(/* @__PURE__ */ jsx("div", {
11049
11117
  "data-preview-block-dock": "",
11050
- style: themeSource ? readThemeCustomProperties(themeSource) : void 0,
11051
- className: "builder-dashboard-chrome-theme fixed inset-x-2 bottom-[calc(var(--builder-editor-chrome-offset,0px)+0.5rem)] z-[70] flex flex-col items-stretch gap-1.5 rounded-xl border bg-background/95 p-2 text-foreground shadow-xl",
11118
+ style: {
11119
+ ...themeSource ? readThemeCustomProperties(themeSource) : {},
11120
+ zIndex: PREVIEW_CHROME_Z_INDEX
11121
+ },
11122
+ className: "builder-dashboard-chrome-theme fixed inset-x-2 bottom-[calc(var(--builder-editor-chrome-offset,0px)+0.5rem)] flex flex-col items-stretch gap-1.5 rounded-xl border bg-background/95 p-2 text-foreground shadow-xl",
11052
11123
  children
11053
11124
  }), document.body);
11054
11125
  }
@@ -12357,4 +12428,4 @@ function deriveDashboardBaseUrlFromApiBaseUrl(apiBaseUrl) {
12357
12428
  }
12358
12429
  }
12359
12430
  //#endregion
12360
- export { usePreviewBlockCustomizeSelectionOptional as _, PREVIEW_CHROME_PORTAL_CLASS_NAME as a, FixedBottomSurface as b, resolvePreviewChromeSurface as c, buildPreviewDashboardSetupUrl as d, resolvePreviewDashboardSetupHandoff as f, useBlockCustomizeControls as g, usePreviewSiteFontStorageUrl as h, PreviewShellLayout as i, PREVIEW_THEME_COOKIE_NAME as l, resolvePreviewSidebarChromeModel as m, SdkPreviewModeRuntime_exports as n, PREVIEW_CHROME_THEME_CLASS_NAME as o, resolvePreviewEditorGuidanceModel as p, PreviewShell as r, applyPreviewChromeSurfaceToElement as s, SdkPreviewModeRuntime as t, canInspectSiteStyle as u, PreviewFormProvider as v, previewWidgetOverrides as y };
12431
+ export { usePreviewBlockCustomizeSelectionOptional as _, PREVIEW_CHROME_PORTAL_CLASS_NAME as a, PREVIEW_CHROME_Z_INDEX as b, resolvePreviewChromeSurface as c, buildPreviewDashboardSetupUrl as d, resolvePreviewDashboardSetupHandoff as f, useBlockCustomizeControls as g, usePreviewSiteFontStorageUrl as h, PreviewShellLayout as i, PREVIEW_THEME_COOKIE_NAME as l, resolvePreviewSidebarChromeModel as m, SdkPreviewModeRuntime_exports as n, PREVIEW_CHROME_THEME_CLASS_NAME as o, resolvePreviewEditorGuidanceModel as p, PreviewShell as r, applyPreviewChromeSurfaceToElement as s, SdkPreviewModeRuntime as t, canInspectSiteStyle as u, PreviewFormProvider as v, FixedBottomSurface as x, previewWidgetOverrides as y };