@riverbankcms/sdk 0.151.0 → 0.153.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 (316) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/dist/{EventEmbeddedCheckoutStep-BBHbM22D.mjs → EventEmbeddedCheckoutStep-veN-QiAE.mjs} +10 -9
  3. package/dist/{PreviewEditorSidebar-BHplI9HE.mjs → PreviewEditorSidebar-jI_4DTZY.mjs} +4 -3
  4. package/dist/{PreviewEditorUI-DuyN8nsD.mjs → PreviewEditorUI-ORkVZhfu.mjs} +5 -4
  5. package/dist/{SdkPreviewModeRuntime-CR5ypwxJ.mjs → SdkPreviewModeRuntime-DaNqevI1.mjs} +341 -164
  6. package/dist/{SiteChromeCustomizeContext-D5t6joF_.mjs → SiteChromeCustomizeContext-CgNuBHC0.mjs} +27124 -39230
  7. package/dist/ThemedButton-X2UxhW6F.mjs +16525 -0
  8. package/dist/_dts/ai/src/contracts/proposals.d.ts +52 -52
  9. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +2357 -7859
  10. package/dist/_dts/api/src/bookingOperations.d.ts +5 -3
  11. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +4 -0
  12. package/dist/_dts/api/src/communications.d.ts +19 -5
  13. package/dist/_dts/api/src/endpoints.d.ts +7 -0
  14. package/dist/_dts/api/src/index.d.ts +1 -1
  15. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  16. package/dist/_dts/api/src/navigation/types.d.ts +7 -0
  17. package/dist/_dts/api/src/navigation.d.ts +1 -1
  18. package/dist/_dts/api/src/publicAppointmentBookingContracts.d.ts +10 -1
  19. package/dist/_dts/api/src/sdkThemeWire.d.ts +186 -1434
  20. package/dist/_dts/api/src/shared-contracts.d.ts +10 -0
  21. package/dist/_dts/api/src/siteAssets.d.ts +1 -0
  22. package/dist/_dts/api/src/siteInfrastructure.d.ts +2 -1
  23. package/dist/_dts/api/src/teamMembers.d.ts +2 -27
  24. package/dist/_dts/block-form/src/widgets/RepeaterField/components/layoutGridDomain.d.ts +3 -13
  25. package/dist/_dts/blocks/src/contracts/index.d.ts +1 -0
  26. package/dist/_dts/blocks/src/definitions.d.ts +1 -1
  27. package/dist/_dts/blocks/src/index.d.ts +2 -0
  28. package/dist/_dts/blocks/src/lib/media.d.ts +1 -0
  29. package/dist/_dts/blocks/src/lib/picsum.d.ts +2 -2
  30. package/dist/_dts/blocks/src/pageRenderPreparation.d.ts +1 -0
  31. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +2 -1
  32. package/dist/_dts/blocks/src/primitives/content/utils/sanitizeHref.d.ts +1 -1
  33. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +4 -4
  34. package/dist/_dts/blocks/src/system/blocks/events/eventSelectionFields.d.ts +1 -1
  35. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +212 -804
  36. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +7 -2
  37. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +1 -1
  38. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +45 -45
  39. package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +2 -0
  40. package/dist/_dts/blocks/src/system/blocks/shared/teamMembers.d.ts +4 -7
  41. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +2 -2
  42. package/dist/_dts/blocks/src/system/customize/backgrounds.d.ts +6 -6
  43. package/dist/_dts/blocks/src/system/fields/backgroundContent.d.ts +377 -1
  44. package/dist/_dts/blocks/src/system/helpers/backgroundMedia.d.ts +6 -2
  45. package/dist/_dts/blocks/src/system/helpers/normalizeMailingListBlockContent.d.ts +2 -0
  46. package/dist/_dts/blocks/src/system/helpers/resolveBackground.d.ts +3 -3
  47. package/dist/_dts/blocks/src/system/layout/repeaterGrid.d.ts +12 -5
  48. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +3 -3
  49. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +24 -24
  50. package/dist/_dts/blocks/src/system/manifest/validation.d.ts +2 -0
  51. package/dist/_dts/blocks/src/system/node/fragments/lookSlot.d.ts +1 -1
  52. package/dist/_dts/blocks/src/system/registry.d.ts +14 -2
  53. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +0 -5
  54. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +2 -0
  55. package/dist/_dts/blocks/src/system/runtime/api/schemas/events.d.ts +971 -0
  56. package/dist/_dts/blocks/src/system/runtime/api/schemas/waitlist-claims.d.ts +42 -0
  57. package/dist/_dts/blocks/src/system/runtime/api/types/appointments.d.ts +10 -2
  58. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +10 -136
  59. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +48 -6
  60. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +24 -3
  61. package/dist/_dts/blocks/src/system/runtime/hooks/useBookingFlowController.d.ts +1 -1
  62. package/dist/_dts/blocks/src/system/runtime/hooks/useBookingSubmission.state.d.ts +2 -0
  63. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +5 -1
  64. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.state.d.ts +1 -1
  65. package/dist/_dts/blocks/src/system/runtime/lookSurfaces.d.ts +2 -2
  66. package/dist/_dts/blocks/src/system/runtime/nodes/ImageResolveContext.d.ts +1 -1
  67. package/dist/_dts/blocks/src/system/runtime/nodes/appointment-services.d.ts +50 -202
  68. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +51 -1
  69. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +6 -2
  70. package/dist/_dts/blocks/src/system/runtime/nodes/carousel.client.hooks.d.ts +6 -0
  71. package/dist/_dts/blocks/src/system/runtime/nodes/carousel.client.state.d.ts +7 -0
  72. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/lookPresentation.d.ts +2 -2
  73. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/presentation.d.ts +1 -1
  74. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/BookingEntryViews.d.ts +42 -0
  75. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventEmbeddedCheckoutStep.d.ts +4 -1
  76. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationBookingLayer.d.ts +19 -9
  77. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationPayment.d.ts +4 -2
  78. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationSurface.d.ts +24 -9
  79. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizardContent.d.ts +4 -2
  80. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventSelectionStep.d.ts +5 -4
  81. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/GuestDetailsSection.d.ts +1 -1
  82. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/PaymentStatusStep.d.ts +2 -0
  83. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/SingleTicketEntitlementNote.d.ts +11 -0
  84. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/SuccessStep.d.ts +4 -0
  85. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/TicketSelectionStep.d.ts +5 -0
  86. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/VerifyingTimeoutStep.d.ts +2 -0
  87. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/bookingCardDisplay.d.ts +31 -0
  88. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/bookingEntry.d.ts +154 -0
  89. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/bookingFocus.d.ts +12 -0
  90. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +2 -2
  91. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.planning.d.ts +2 -2
  92. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.d.ts +9 -0
  93. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/finishedBooking.d.ts +77 -0
  94. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/index.d.ts +0 -1
  95. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/offeringNoun.d.ts +12 -0
  96. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/paymentResponse.d.ts +2 -1
  97. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationCompletion.d.ts +33 -1
  98. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationDerivations.d.ts +11 -0
  99. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationDisplay.d.ts +31 -0
  100. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationDraft.state.d.ts +60 -0
  101. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationErrorRecovery.d.ts +1 -1
  102. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationEventAdapter.d.ts +3 -0
  103. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationStateMachine.d.ts +58 -10
  104. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationSurface.d.ts +17 -0
  105. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +23 -7
  106. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useBookingBarFacts.d.ts +12 -0
  107. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationRecoveryRequest.d.ts +3 -0
  108. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationStripeReturn.d.ts +4 -0
  109. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +4 -11
  110. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +1563 -31
  111. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventSourceRecovery.d.ts +2 -12
  112. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/usePaymentStatusRecovery.d.ts +147 -4
  113. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/utils.d.ts +50 -2
  114. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/waitlistClaimRestoration.d.ts +6 -5
  115. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/wizardSteps.d.ts +85 -15
  116. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +53 -8
  117. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/CardListItem.d.ts +1 -1
  118. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/MonthLookView.d.ts +10 -3
  119. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +290 -882
  120. package/dist/_dts/blocks/src/system/runtime/nodes/file-download.d.ts +3 -2
  121. package/dist/_dts/blocks/src/system/runtime/nodes/media.d.ts +22 -90
  122. package/dist/_dts/blocks/src/system/runtime/nodes/mediaContext.d.ts +69 -0
  123. package/dist/_dts/blocks/src/system/runtime/shared/bookingPaymentOptionCopy.d.ts +5 -1
  124. package/dist/_dts/blocks/src/system/runtime/shared/bookingPaymentOptions.d.ts +37 -1
  125. package/dist/_dts/blocks/src/system/runtime/shared/components/ModalShell.d.ts +9 -2
  126. package/dist/_dts/blocks/src/system/runtime/shared/components/PaymentChoiceRows.d.ts +28 -0
  127. package/dist/_dts/blocks/src/system/runtime/shared/components/StepIndicator.d.ts +6 -8
  128. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +2 -2
  129. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +2 -2
  130. package/dist/_dts/blocks/src/system/runtime/shared/useWaitlistClaim.d.ts +9 -12
  131. package/dist/_dts/blocks/src/system/runtime/shared/useWaitlistClaim.state.d.ts +15 -0
  132. package/dist/_dts/blocks/src/system/runtime/shared/utils/themePortalRoot.d.ts +10 -15
  133. package/dist/_dts/blocks/src/system/transforms/registry/index.d.ts +2 -0
  134. package/dist/_dts/blocks/src/system/transforms/registry/links.d.ts +2 -0
  135. package/dist/_dts/commerce/src/purchase/bookingInstalmentSchedule.d.ts +2 -0
  136. package/dist/_dts/commerce/src/purchase/bookingPaymentSelection.d.ts +6 -0
  137. package/dist/_dts/commerce/src/purchase/confirmationEmailPayment.d.ts +14 -14
  138. package/dist/_dts/commerce/src/purchase/confirmationPayment.d.ts +65 -0
  139. package/dist/_dts/commerce/src/purchase/confirmationPaymentSchema.d.ts +66 -0
  140. package/dist/_dts/commerce/src/purchase/index.d.ts +2 -0
  141. package/dist/_dts/commerce/src/purchase/orderPaymentState.d.ts +8 -0
  142. package/dist/_dts/content-model/src/content-types/schema.d.ts +3 -3
  143. package/dist/_dts/content-model/src/templates/defaults.d.ts +2 -2
  144. package/dist/_dts/core/src/appointment-booking-terms.d.ts +20 -0
  145. package/dist/_dts/core/src/booking-payment-schemas.d.ts +70 -0
  146. package/dist/_dts/core/src/branded.d.ts +0 -2
  147. package/dist/_dts/core/src/demo-claim-access.d.ts +1 -1
  148. package/dist/_dts/core/src/demo-claim-readiness.d.ts +18 -0
  149. package/dist/_dts/core/src/demo-lifecycle-status.d.ts +1 -1
  150. package/dist/_dts/core/src/demo-warm-pool-target.d.ts +1 -1
  151. package/dist/_dts/core/src/index.d.ts +4 -0
  152. package/dist/_dts/core/src/mailing-list-runtime.d.ts +2 -2
  153. package/dist/_dts/core/src/mailing-list-setup-parser.d.ts +9 -1
  154. package/dist/_dts/core/src/mailing-list-setup.d.ts +9 -1
  155. package/dist/_dts/core/src/mailing-list-submission.d.ts +1 -1
  156. package/dist/_dts/core/src/mailing-list-targeting-availability.d.ts +68 -0
  157. package/dist/_dts/core/src/mailing-list-targeting.d.ts +11 -1
  158. package/dist/_dts/core/src/ticket-quantity.d.ts +13 -0
  159. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +106 -36
  160. package/dist/_dts/editor/src/chrome/chromeLayers.d.ts +7 -0
  161. package/dist/_dts/editor/src/index.d.ts +1 -0
  162. package/dist/_dts/editor-blocks/src/index.d.ts +1 -0
  163. package/dist/_dts/editor-blocks/src/media/MediaField.d.ts +2 -2
  164. package/dist/_dts/editor-blocks/src/media/admitEditorMediaField.d.ts +4 -0
  165. package/dist/_dts/editor-blocks/src/widgets/link/LinkAddressInput.d.ts +8 -0
  166. package/dist/_dts/editor-blocks/src/widgets/link/LinkContentList.d.ts +12 -0
  167. package/dist/_dts/editor-blocks/src/widgets/link/LinkPicker.d.ts +5 -1
  168. package/dist/_dts/editor-blocks/src/widgets/link/LinkPickerDialog.d.ts +3 -3
  169. package/dist/_dts/editor-blocks/src/widgets/link/LinkSummary.d.ts +8 -2
  170. package/dist/_dts/editor-blocks/src/widgets/link/LinkWidget.d.ts +4 -3
  171. package/dist/_dts/editor-blocks/src/widgets/link/LinkWidgetContext.d.ts +2 -1
  172. package/dist/_dts/editor-blocks/src/widgets/link/draft.d.ts +44 -0
  173. package/dist/_dts/editor-blocks/src/widgets/link/presentation.d.ts +13 -0
  174. package/dist/_dts/editor-blocks/src/widgets/link/types.d.ts +14 -0
  175. package/dist/_dts/editor-blocks/src/widgets/link/useRoutableContent.d.ts +2 -0
  176. package/dist/_dts/editor-blocks/src/widgets/link/utils.d.ts +5 -4
  177. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/MailingListTargetingField.d.ts +1 -1
  178. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/targetingState.d.ts +13 -8
  179. package/dist/_dts/media-core/src/assetsInUseSummary.d.ts +6 -0
  180. package/dist/_dts/media-core/src/contentMediaAudit.d.ts +3 -2
  181. package/dist/_dts/media-core/src/fileStorage.d.ts +4 -3
  182. package/dist/_dts/media-core/src/index.d.ts +5 -0
  183. package/dist/_dts/media-core/src/media.d.ts +406 -0
  184. package/dist/_dts/media-core/src/mediaIdentifierSchema.d.ts +3 -0
  185. package/dist/_dts/media-core/src/mediaKinds.d.ts +2 -0
  186. package/dist/_dts/media-core/src/mediaUsageProjection.d.ts +13 -1
  187. package/dist/_dts/media-core/src/mediaWriteNormalizer.d.ts +2 -6
  188. package/dist/_dts/media-core/src/portableMediaReferences.d.ts +8 -21
  189. package/dist/_dts/media-core/src/renderableMediaAsset.d.ts +28 -14
  190. package/dist/_dts/media-core/src/renderableMediaAssetAdmission.d.ts +15 -0
  191. package/dist/_dts/media-core/src/storageObjectKey.d.ts +12 -0
  192. package/dist/_dts/media-editor/src/CropDialog.d.ts +6 -3
  193. package/dist/_dts/media-editor/src/MediaEditor.d.ts +2 -1
  194. package/dist/_dts/media-editor/src/MediaPreview.d.ts +3 -3
  195. package/dist/_dts/media-editor/src/cropEditorSource.d.ts +5 -7
  196. package/dist/_dts/media-editor/src/editorMediaState.d.ts +29 -0
  197. package/dist/_dts/media-editor/src/mediaSelection.d.ts +1 -2
  198. package/dist/_dts/media-editor/src/runtimeMediaAssetState.d.ts +4 -5
  199. package/dist/_dts/media-editor/src/types.d.ts +1 -1
  200. package/dist/_dts/media-editor/src/utils.d.ts +0 -1
  201. package/dist/_dts/media-react/src/components/cropChangePolicy.d.ts +4 -1
  202. package/dist/_dts/media-react/src/components/cropGeometry.d.ts +1 -0
  203. package/dist/_dts/media-react/src/components/useImageCropperController.d.ts +1 -0
  204. package/dist/_dts/media-react/src/hooks/useSupabaseMediaUploader.d.ts +1 -1
  205. package/dist/_dts/media-react/src/internal/supabaseResumableUpload.d.ts +13 -0
  206. package/dist/_dts/preview-next/src/client/blocks/BlockBackgroundChooser.d.ts +2 -1
  207. package/dist/_dts/preview-next/src/client/blocks/previewCustomizeSelectedMedia.d.ts +11 -12
  208. package/dist/_dts/preview-next/src/client/preview/previewModeRootAttribute.d.ts +11 -0
  209. package/dist/_dts/sdk/src/contracts/content.d.ts +2 -45
  210. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  211. package/dist/_dts/sdk/src/contracts/rendering.d.ts +3 -3
  212. package/dist/_dts/sdk/src/index.d.ts +1 -0
  213. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +0 -1
  214. package/dist/_dts/sdk/src/rendering/image.d.ts +14 -4
  215. package/dist/_dts/sdk/src/rendering/index.d.ts +5 -2
  216. package/dist/_dts/sdk/src/rendering/link.d.ts +5 -0
  217. package/dist/_dts/sdk/src/rendering/mediaAssets.d.ts +2 -4
  218. package/dist/_dts/sdk/src/rendering/overrides.d.ts +1 -0
  219. package/dist/_dts/sdk/src/version.d.ts +1 -1
  220. package/dist/_dts/theme-core/src/accordions/types.d.ts +1 -1
  221. package/dist/_dts/theme-core/src/blocks/opaquePanels.d.ts +3 -3
  222. package/dist/_dts/theme-core/src/boxBackgroundSchema.d.ts +397 -26
  223. package/dist/_dts/theme-core/src/buttons/types.d.ts +21 -21
  224. package/dist/_dts/theme-core/src/cards/types.d.ts +34 -34
  225. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  226. package/dist/_dts/theme-core/src/inputs/types.d.ts +3 -3
  227. package/dist/_dts/theme-core/src/lib/media.d.ts +2 -616
  228. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +261 -2619
  229. package/dist/_dts/theme-core/src/palette/curated/types.d.ts +1 -1
  230. package/dist/_dts/theme-core/src/schema.d.ts +548 -3187
  231. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  232. package/dist/_dts/theme-core/src/site-styles/runtimeBackgroundResolution.d.ts +9 -9
  233. package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +1 -1
  234. package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +1 -1
  235. package/dist/_dts/theme-core/src/styles/skinTokens.d.ts +2 -2
  236. package/dist/_dts/theme-core/src/typography/schema.d.ts +2 -2
  237. package/dist/client/BookingMailingListNote-DrchYW1m.mjs +386 -0
  238. package/dist/client/{CardListItem-ZDLYh6dL.mjs → CardListItem-CC_GVmF6.mjs} +5 -5
  239. package/dist/client/CheckIcon-CpyXr-Kg.mjs +35 -0
  240. package/dist/client/{CheckboxChoice-M-3HycLw.mjs → CheckboxChoice-Dq30m3DO.mjs} +1 -1
  241. package/dist/client/{DemoBookingPortalAccess-BMtvPTWE.mjs → DemoBookingPortalAccess-ojwbVUmx.mjs} +85 -85
  242. package/dist/client/{EventCombined.client-DUm_DOxW.mjs → EventCombined.client-DyN0v0Xk.mjs} +7 -9
  243. package/dist/client/{EventEmbeddedCheckoutStep-DsNNzgRm.mjs → EventEmbeddedCheckoutStep-CgfpKc3n.mjs} +11 -10
  244. package/dist/client/{EventListing.client-DjNYGUVm.mjs → EventListing.client-CuOuvYMz.mjs} +2 -2
  245. package/dist/client/{LeafletStaticMap-DuFiOHq_.mjs → LeafletStaticMap-B0WhRr3j.mjs} +1 -1
  246. package/dist/client/{ModalShell-CqkBvBIC.mjs → ModalShell-BXzucfR6.mjs} +83 -12
  247. package/dist/client/{RichText-LjPCUGGi.mjs → RichText-C1fIXBzA.mjs} +50 -34
  248. package/dist/client/{ThemedButton-DZKjtaDD.mjs → ThemedButton-B7HFqFBg.mjs} +1 -2
  249. package/dist/client/{accordion-Qe--SILD.mjs → accordion-DCDVWSye.mjs} +1 -1
  250. package/dist/client/{bookingForm-3BCl4g_f.mjs → bookingForm-BJ3C4GlM.mjs} +321 -154
  251. package/dist/client/bookings.mjs +118607 -22429
  252. package/dist/client/{carousel-h2YjKOS2.mjs → carousel-BSCBhfHY.mjs} +2 -2
  253. package/dist/client/{carousel.client-BLrd4hmY.mjs → carousel.client-GEtOGsxo.mjs} +46 -41
  254. package/dist/client/{cart-5NeiigVd.mjs → cart-Yv-aAtck.mjs} +3 -3
  255. package/dist/client/{checkout-G4UWjOEw.mjs → checkout-B9xDkl30.mjs} +3 -3
  256. package/dist/client/client.mjs +37511 -33793
  257. package/dist/client/{context-GK4-AVAh.mjs → context-BOGe3rIA.mjs} +275 -10
  258. package/dist/client/{eventCalendar-Prw3Yo_L.mjs → eventCalendar-D6M0T9hs.mjs} +18 -17
  259. package/dist/client/{eventCombined-BUugi6__.mjs → eventCombined-NM4UFBq8.mjs} +4 -4
  260. package/dist/client/{eventDetails-CBHUda-R.mjs → eventDetails-f_FhV4O8.mjs} +3 -4
  261. package/dist/client/{eventListing-CQeG45Dg.mjs → eventListing-WLkfAROh.mjs} +4 -4
  262. package/dist/client/{eventRegistration-Dif3p3oJ.mjs → eventRegistration-D3ejfLvW.mjs} +2209 -2144
  263. package/dist/client/{form-Cf0WMtfG.mjs → form-D5Or2Jyu.mjs} +5 -6
  264. package/dist/client/{headerSection-Bqdr3JWp.mjs → headerSection-hWgnv27V.mjs} +9 -9
  265. package/dist/client/hooks.mjs +17278 -16106
  266. package/dist/client/{locationMap-BVvPou4O.mjs → locationMap-Di1K0O2S.mjs} +3 -4
  267. package/dist/client/{media-47fcnhzD.mjs → media-D29-F1u_.mjs} +183 -362
  268. package/dist/client/mediaContext-CwbbimYB.mjs +135 -0
  269. package/dist/client/{newsletterForm-Cx-1dnic.mjs → newsletterForm-CwxcwTNO.mjs} +5 -5
  270. package/dist/client/{productDetail-DaUMaJYk.mjs → productDetail-BLSnhPdA.mjs} +3 -3
  271. package/dist/client/{productList-BKQlWEKE.mjs → productList-oGytONOX.mjs} +3 -3
  272. package/dist/client/{propsDecoder-DO5iXphQ.mjs → propsDecoder-lf_dTeZS.mjs} +18659 -14473
  273. package/dist/client/renderableMediaAssetAdmission-CHkXYDC_.mjs +143 -0
  274. package/dist/client/rendering/client.mjs +58971 -55722
  275. package/dist/client/rendering/islands.mjs +20 -23
  276. package/dist/client/rendering.mjs +41610 -37917
  277. package/dist/client/{routeIslandApiConfig-BNm0Z3-g.mjs → routeIslandApiConfig-Bc_WVPS8.mjs} +1 -1
  278. package/dist/client/{shop-D7ytcFBC.mjs → shop-BQ3bR7fA.mjs} +16 -14
  279. package/dist/client/{shop-commerce-D68-hHy2.mjs → shop-commerce-DDPll6ZC.mjs} +9 -9
  280. package/dist/client/{shop-commerce-store-Cu7X2lyu.mjs → shop-commerce-store-DO-e1pTe.mjs} +1 -1
  281. package/dist/client/{shopShared-D12rxE69.mjs → shopShared-BylM9jh1.mjs} +5 -5
  282. package/dist/client/themePortalRoot-DS92SRVZ.mjs +47 -0
  283. package/dist/client/{TerminalPanel-DOTSUCO0.mjs → useDiscountCodeUi-B1Puub2v.mjs} +60 -77
  284. package/dist/client/{useEventPagination-jgKa67KV.mjs → useEventPagination-BBhkmQaT.mjs} +6 -8
  285. package/dist/preview-next/before-render.mjs +96 -4
  286. package/dist/preview-next/client/runtime.mjs +3 -3
  287. package/dist/preview-next/keepAlive.mjs +7 -0
  288. package/dist/preview-next/middleware.mjs +7 -0
  289. package/dist/{sdk-runtime-4cCWO_3i.mjs → sdk-runtime-DWCvhJGu.mjs} +1 -1
  290. package/dist/server/components.mjs +21820 -19902
  291. package/dist/server/config-validation.mjs +1786 -642
  292. package/dist/server/config.mjs +1786 -642
  293. package/dist/server/data.mjs +17220 -16076
  294. package/dist/server/index.mjs +234 -2
  295. package/dist/server/next.mjs +22505 -20528
  296. package/dist/server/page-converter.mjs +7587 -6572
  297. package/dist/server/prebuild.mjs +1 -1
  298. package/dist/server/rendering/server.mjs +20487 -19044
  299. package/dist/server/rendering.mjs +21844 -19901
  300. package/dist/server/routing.mjs +19186 -17961
  301. package/dist/server/server.mjs +1874 -695
  302. package/dist/server/theme-bridge.mjs +1371 -914
  303. package/dist/server/theme.mjs +154 -37
  304. package/dist/{spinner-tSdG9YvG.mjs → spinner-BYM-Y81w.mjs} +1 -1
  305. package/dist/styles/index.css +1088 -721
  306. package/package.json +1 -1
  307. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/OrderSummary.d.ts +0 -15
  308. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useWaitlistClaimRestoration.d.ts +0 -22
  309. package/dist/_dts/blocks/src/system/runtime/shared/components/SelectableOptionCard.d.ts +0 -30
  310. package/dist/client/BookingMailingListNote-DlDSs5Vm.mjs +0 -567
  311. package/dist/client/colorStyles-DTunOThj.mjs +0 -1316
  312. package/dist/client/pricing-CMD0kADd.mjs +0 -314
  313. package/dist/client/result-DRW7JWXz.mjs +0 -30
  314. package/dist/client/scrollToBlock-C86BYkyV.mjs +0 -17
  315. package/dist/client/themePortalRoot-AGs4cE7t.mjs +0 -30
  316. package/dist/spinner-BL3kW9Uh.mjs +0 -803
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { y as __exportAll } from "./spinner-BL3kW9Uh.mjs";
2
+ import { $n as renderableMediaAssetSchema$1, Ar as makeBoundaryId, Cn as defaultThemeTokens, G as corners, H as parseThemeForPersistence, Qn as buildRenderableMediaAssetIndex, Ri as __exportAll, Si as parseSiteId, Un as paletteColorsSchema, Wn as paletteModeSchema, Xt as resolveSurface, _t as stripStaleTransitionStyleGroup, an as textColorStyle, ar as resolveSdkFooterMode, dr as asDesignBlockId, er as indexRenderableMediaAssets, fi as expectParsedBrandedId, gr as asLayoutVariantKey, nr as mediaIdentifierSchema$2, pt as isThemeV2NormalEditorRawStyleFieldName, tr as resolveManagedMediaReference, vr as asSiteStyleId, yr as assertNever$1 } from "./ThemedButton-X2UxhW6F.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 resolveImageUrlWithContext, 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 buildResolveImageUrlContext, Mn as FieldFrame, Mr as planSiteOverlayHeaderClearance, Mt as useRetentionTicks, Na as sectionTransitionFamilyForBoundaryOptionId, Ni as getCurrentResolveImageUrlContext, 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 setContextResolveImageUrlContext, 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, 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, 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 SECTION_BACKGROUND_MIN_SOURCE_WIDTH, 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, 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-CgNuBHC0.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,
@@ -3121,12 +3126,22 @@ function err(error) {
3121
3126
  error
3122
3127
  };
3123
3128
  }
3129
+ const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
3130
+ function parseUuidBrand(value, unsafeConstructor) {
3131
+ if (typeof value !== "string") return err({ kind: "not_string" });
3132
+ const normalized = value.trim().toLowerCase();
3133
+ if (normalized.length === 0) return err({ kind: "empty_string" });
3134
+ if (!UUID_PATTERN.test(normalized)) return err({ kind: "invalid_uuid" });
3135
+ return ok(unsafeConstructor(normalized));
3136
+ }
3124
3137
  const unsafeAsSiteId = (id) => id;
3138
+ const unsafeAsMediaAssetId = (id) => id;
3125
3139
  const unsafeAsStorageBucketName = (value) => value;
3126
3140
  const unsafeAsBookingSessionId = (id) => id;
3127
3141
  const unsafeAsEntitlementId = (id) => id;
3128
3142
  const unsafeAsSiteFontId = (id) => id;
3129
3143
  const unsafeAsBookingRequirementId = (id) => id;
3144
+ const parseMediaAssetId = (value) => parseUuidBrand(value, unsafeAsMediaAssetId);
3130
3145
  function fromArray(items) {
3131
3146
  const [first, ...rest] = items;
3132
3147
  if (first === void 0) return err("empty_array");
@@ -3150,6 +3165,34 @@ function isNonEmptyString(value) {
3150
3165
  function hasText(value) {
3151
3166
  return isNonEmptyString(value);
3152
3167
  }
3168
+ const CONTROL_CHARACTER_PATTERN = /[\u0000-\u001f\u007f]/u;
3169
+ function containsUnsafePathSegmentCharacter(value) {
3170
+ return value.includes("/") || value.includes("\\") || CONTROL_CHARACTER_PATTERN.test(value);
3171
+ }
3172
+ function isReservedPathSegment(value) {
3173
+ return value === "." || value === "..";
3174
+ }
3175
+ function isUnsafePathSegment(segment) {
3176
+ return segment.trim().length === 0 || segment !== segment.trim() || isReservedPathSegment(segment) || containsUnsafePathSegmentCharacter(segment);
3177
+ }
3178
+ const STORAGE_OBJECT_CHARACTER = "A-Za-z0-9_!.*'() &$=@;:+,-";
3179
+ const unsupportedFilenameCharacters = new RegExp(`[^${STORAGE_OBJECT_CHARACTER}]+`, "gu");
3180
+ const supportedObjectKey = new RegExp(`^[/${STORAGE_OBJECT_CHARACTER}]+$`, "u");
3181
+ /** Validate without trimming or rewriting: supplied keys are object identities. */
3182
+ function parseWritableStoragePath(value) {
3183
+ if (typeof value !== "string" || value.split("/").some(isUnsafePathSegment)) return err("unsafe-path-segment");
3184
+ if (!supportedObjectKey.test(value)) return err("unsupported-storage-character");
3185
+ return ok(value);
3186
+ }
3187
+ /** Choose a new internal filename; never use this to rewrite an existing key. */
3188
+ function storageObjectFilename(filename, maxLength = 255) {
3189
+ const converted = filename.trim().normalize("NFKD").replace(/[\u0300-\u036f]/gu, "").replace(unsupportedFilenameCharacters, "-").trim();
3190
+ const usable = isUnsafePathSegment(converted) ? "upload" : converted;
3191
+ const extension = /\.[A-Za-z0-9]{1,16}$/u.exec(usable)?.[0] ?? "";
3192
+ const stem = extension.length > 0 ? usable.slice(0, -extension.length) : usable;
3193
+ 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}`;
3194
+ return isUnsafePathSegment(shortenedFilename) ? "upload" : shortenedFilename;
3195
+ }
3153
3196
  const FILE_STORAGE_BUCKETS = {
3154
3197
  publicSite: unsafeAsStorageBucketName("media"),
3155
3198
  privateSite: unsafeAsStorageBucketName("site-files-private"),
@@ -3280,11 +3323,6 @@ function parseRelativeStoragePath(value) {
3280
3323
  if (!validated.ok) return validated;
3281
3324
  return ok$1(brandRelativeStoragePath(validated.value));
3282
3325
  }
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
3326
  function isRecord$6(value) {
3289
3327
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
3290
3328
  }
@@ -3584,6 +3622,129 @@ function parseCanonicalMediaIdentifier(value) {
3584
3622
  });
3585
3623
  return parsed;
3586
3624
  }
3625
+ /** Strict stored-reference admission delegates the canonical identifier decision. */
3626
+ const mediaIdentifierSchema$1 = z.string().transform((value, context) => {
3627
+ const parsed = parseCanonicalMediaIdentifier(value);
3628
+ if (parsed.ok) return parsed.value;
3629
+ context.addIssue({
3630
+ code: "custom",
3631
+ message: "Expected a canonical media identifier"
3632
+ });
3633
+ return z.NEVER;
3634
+ });
3635
+ const mediaTypeDiscriminants = [
3636
+ "image",
3637
+ "video",
3638
+ "audio",
3639
+ "document",
3640
+ "spreadsheet",
3641
+ "archive"
3642
+ ];
3643
+ const mediaAssetIdSchema = z.string().transform((value, context) => {
3644
+ const parsed = parseMediaAssetId(value);
3645
+ if (parsed.ok) return parsed.value;
3646
+ context.addIssue({
3647
+ code: "custom",
3648
+ message: "Expected a media asset ID"
3649
+ });
3650
+ return z.NEVER;
3651
+ });
3652
+ const nonemptyStorageValue = z.string().refine((value) => value.trim().length > 0);
3653
+ const renderableMediaAssetSchema = z.object({
3654
+ id: mediaAssetIdSchema,
3655
+ identifier: mediaIdentifierSchema$1,
3656
+ storageBucket: nonemptyStorageValue,
3657
+ storagePath: nonemptyStorageValue,
3658
+ mimeType: nonemptyStorageValue,
3659
+ filename: z.string().optional(),
3660
+ width: z.number().positive().nullable(),
3661
+ height: z.number().positive().nullable()
3662
+ });
3663
+ const hotspotSchema = z.object({
3664
+ x: z.number().min(0).max(1),
3665
+ y: z.number().min(0).max(1),
3666
+ radius: z.number().optional()
3667
+ });
3668
+ const rotationSchema = z.union([
3669
+ z.literal(0),
3670
+ z.literal(90),
3671
+ z.literal(180),
3672
+ z.literal(270)
3673
+ ]);
3674
+ const rectSchema = z.tuple([
3675
+ z.number(),
3676
+ z.number(),
3677
+ z.number(),
3678
+ z.number()
3679
+ ]);
3680
+ const aspectCropSchema = z.object({
3681
+ aspect: z.preprocess((value) => value == null ? void 0 : value, z.string().optional()),
3682
+ rect: z.preprocess((value) => value == null ? void 0 : value, rectSchema.optional()),
3683
+ hotspot: z.preprocess((value) => value == null ? void 0 : value, hotspotSchema.optional()),
3684
+ rotation: z.preprocess((value) => value == null ? void 0 : value, rotationSchema.optional())
3685
+ });
3686
+ const transformSchema = z.object({
3687
+ aspectCrops: z.preprocess((value) => {
3688
+ if (!value || typeof value !== "object" || Array.isArray(value)) return;
3689
+ return value;
3690
+ }, z.record(z.string(), aspectCropSchema.catch({}))).optional(),
3691
+ rect: rectSchema.optional(),
3692
+ hotspot: hotspotSchema.optional(),
3693
+ rotation: rotationSchema.optional()
3694
+ });
3695
+ const mediaPosterSchema = z.discriminatedUnion("tag", [z.object({
3696
+ tag: z.literal("media"),
3697
+ identifier: mediaIdentifierSchema$1
3698
+ }).strict(), z.object({
3699
+ tag: z.literal("external-src"),
3700
+ src: z.string().url()
3701
+ }).strict()]);
3702
+ const mediaUsageShape = {
3703
+ purpose: z.string().optional(),
3704
+ placeholder: z.boolean().default(true).optional(),
3705
+ alt: z.string().optional(),
3706
+ filename: z.string().optional(),
3707
+ width: z.number().optional(),
3708
+ height: z.number().optional(),
3709
+ poster: mediaPosterSchema.optional(),
3710
+ transform: transformSchema.optional()
3711
+ };
3712
+ const environmentExclusions = {
3713
+ assetId: z.never().optional(),
3714
+ id: z.never().optional(),
3715
+ src: z.never().optional(),
3716
+ storageBucket: z.never().optional(),
3717
+ storagePath: z.never().optional(),
3718
+ mimeType: z.never().optional()
3719
+ };
3720
+ const mediaBaseSchema = z.object({
3721
+ ...mediaUsageShape,
3722
+ ...environmentExclusions,
3723
+ identifier: mediaIdentifierSchema$1
3724
+ }).strict();
3725
+ mediaBaseSchema.extend({ type: z.literal("image") });
3726
+ mediaBaseSchema.extend({ type: z.literal("video") });
3727
+ const mediaSchema = mediaBaseSchema.extend({ type: z.enum(mediaTypeDiscriminants) });
3728
+ const externalMediaSchema = z.object({
3729
+ ...mediaUsageShape,
3730
+ ...environmentExclusions,
3731
+ type: z.enum(mediaTypeDiscriminants),
3732
+ src: z.string().min(1),
3733
+ identifier: z.never().optional()
3734
+ }).strict();
3735
+ const assetMediaSchema = z.object({
3736
+ ...mediaUsageShape,
3737
+ ...environmentExclusions,
3738
+ type: z.enum(mediaTypeDiscriminants),
3739
+ asset: renderableMediaAssetSchema,
3740
+ identifier: z.never().optional()
3741
+ }).strict();
3742
+ z.union([
3743
+ mediaSchema,
3744
+ externalMediaSchema,
3745
+ assetMediaSchema
3746
+ ]);
3747
+ new Set(mediaTypeDiscriminants);
3587
3748
  const MEDIA_KINDS = [
3588
3749
  "image",
3589
3750
  "video",
@@ -3614,9 +3775,10 @@ var MediaStorageError = class extends Error {
3614
3775
  const pad = (value) => value.toString().padStart(2, "0");
3615
3776
  const extractExtension = (filename) => {
3616
3777
  if (!hasText(filename)) return "";
3617
- const lastDot = filename.lastIndexOf(".");
3778
+ const internalFilename = storageObjectFilename(filename);
3779
+ const lastDot = internalFilename.lastIndexOf(".");
3618
3780
  if (lastDot === -1) return "";
3619
- return filename.slice(lastDot).toLowerCase();
3781
+ return internalFilename.slice(lastDot).toLowerCase();
3620
3782
  };
3621
3783
  const generateId = () => {
3622
3784
  const crypto = globalThis.crypto;
@@ -3636,14 +3798,28 @@ const generateId = () => {
3636
3798
  * since the site ID is prepended at runtime rather than stored in content data.
3637
3799
  */
3638
3800
  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
3801
  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}`);
3802
+ const nowParts = {
3803
+ year: now.getUTCFullYear(),
3804
+ month: pad(now.getUTCMonth() + 1)
3805
+ };
3806
+ const path = decideGeneratedStoragePath({
3807
+ extension: extractExtension(filename),
3808
+ folder,
3809
+ ...nowParts,
3810
+ id,
3811
+ variantKey: variantKey ?? (folder === "originals" ? id : generateId())
3812
+ });
3813
+ if (!path.ok) {
3814
+ const reason = typeof path.error === "string" ? path.error : path.error.tag;
3815
+ throw new Error(`Invalid generated storage path: ${reason}`);
3816
+ }
3817
+ return path.value;
3646
3818
  };
3819
+ function decideGeneratedStoragePath(input) {
3820
+ 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}`);
3821
+ return writable.ok ? parseRelativeStoragePath(writable.value) : writable;
3822
+ }
3647
3823
  const DEFAULT_BUCKET = "media";
3648
3824
  const MAX_LIMIT = 100;
3649
3825
  const fileKindSchema = z.custom((value) => parseFileKindJson(value).ok, { message: "Invalid file kind JSON" });
@@ -4020,22 +4196,25 @@ function upsertById(assets, asset) {
4020
4196
  return next;
4021
4197
  }
4022
4198
  function createRuntimeMediaAssetState(siteId, baseAssets) {
4199
+ const mediaAssetIndex = buildRenderableMediaAssetIndex(baseAssets);
4023
4200
  return {
4024
4201
  siteId,
4025
- baseAssets: dedupeById(baseAssets),
4026
- registeredAssets: []
4202
+ baseAssets: mediaAssetIndex?.assets ?? [],
4203
+ registeredAssets: [],
4204
+ mediaAssetIndex
4027
4205
  };
4028
4206
  }
4029
4207
  function reduceRuntimeMediaAssetState(state, action) {
4030
4208
  switch (action.type) {
4031
4209
  case "siteSnapshotReplaced": {
4032
- if (action.siteId !== state.siteId) return createRuntimeMediaAssetState(action.siteId, action.baseAssets);
4033
- const nextBaseAssets = dedupeById(action.baseAssets);
4210
+ const { snapshot } = action;
4211
+ if (snapshot.siteId !== state.siteId) return snapshot;
4212
+ const nextBaseAssets = snapshot.baseAssets;
4034
4213
  if (areEqualAssetLists(nextBaseAssets, state.baseAssets)) return state;
4035
4214
  return {
4036
- siteId: action.siteId,
4215
+ ...state,
4037
4216
  baseAssets: nextBaseAssets,
4038
- registeredAssets: state.registeredAssets
4217
+ mediaAssetIndex: state.registeredAssets.length ? indexRenderableMediaAssets(dedupeById([...nextBaseAssets, ...state.registeredAssets])) : snapshot.mediaAssetIndex
4039
4218
  };
4040
4219
  }
4041
4220
  case "assetRegistered":
@@ -4044,31 +4223,11 @@ function reduceRuntimeMediaAssetState(state, action) {
4044
4223
  if (nextRegisteredAssets === state.registeredAssets) return state;
4045
4224
  return {
4046
4225
  ...state,
4047
- registeredAssets: nextRegisteredAssets
4226
+ registeredAssets: nextRegisteredAssets,
4227
+ mediaAssetIndex: indexRenderableMediaAssets(dedupeById([...state.baseAssets, ...nextRegisteredAssets]))
4048
4228
  };
4049
4229
  }
4050
4230
  }
4051
- /**
4052
- * Returns a freshly deduped merge of base and runtime assets.
4053
- * Callers should memoize the result if referential stability matters downstream.
4054
- */
4055
- function selectRuntimeMediaAssets(state) {
4056
- return dedupeById([...state.baseAssets, ...state.registeredAssets]);
4057
- }
4058
- function createRuntimeMediaAssetSnapshotKey(siteId, assets) {
4059
- return JSON.stringify({
4060
- siteId,
4061
- assets: dedupeById(assets).map((asset) => ({
4062
- id: asset.id,
4063
- identifier: asset.identifier ?? null,
4064
- storageBucket: asset.storageBucket ?? null,
4065
- storagePath: asset.storagePath ?? null,
4066
- width: asset.width ?? null,
4067
- height: asset.height ?? null,
4068
- mimeType: asset.mimeType ?? null
4069
- }))
4070
- });
4071
- }
4072
4231
  //#endregion
4073
4232
  //#region ../media-editor/src/provider.tsx
4074
4233
  const DEFAULT_MEDIA_BUCKET = process.env.NEXT_PUBLIC_MEDIA_BUCKET ?? "media";
@@ -4085,15 +4244,14 @@ function toRuntimeMediaAssetIndexItem(asset) {
4085
4244
  };
4086
4245
  }
4087
4246
  function MediaEditorProvider({ siteId, apiClient, children, bucket = DEFAULT_MEDIA_BUCKET, getPublicUrl, augmentRequest, uploaderOptions, bearerToken, supabaseUrl, mediaAssets }) {
4088
- const baseAssetsSnapshotKey = useMemo(() => createRuntimeMediaAssetSnapshotKey(siteId, mediaAssets ?? []), [mediaAssets, siteId]);
4089
- const [runtimeMediaAssetState, dispatchRuntimeMediaAssetAction] = useReducer(reduceRuntimeMediaAssetState, createRuntimeMediaAssetState(siteId, mediaAssets ?? []));
4247
+ const snapshot = useMemo(() => createRuntimeMediaAssetState(siteId, mediaAssets ?? []), [mediaAssets, siteId]);
4248
+ const [runtimeMediaAssetState, dispatchRuntimeMediaAssetAction] = useReducer(reduceRuntimeMediaAssetState, snapshot);
4090
4249
  useEffect(() => {
4091
4250
  dispatchRuntimeMediaAssetAction({
4092
4251
  type: "siteSnapshotReplaced",
4093
- siteId,
4094
- baseAssets: mediaAssets ?? []
4252
+ snapshot
4095
4253
  });
4096
- }, [baseAssetsSnapshotKey, siteId]);
4254
+ }, [snapshot]);
4097
4255
  const repo = useMemo(() => {
4098
4256
  const clientFn = (request) => {
4099
4257
  return apiClient(augmentRequest ? augmentRequest(request, { siteId }) : request);
@@ -4112,11 +4270,12 @@ function MediaEditorProvider({ siteId, apiClient, children, bucket = DEFAULT_MED
4112
4270
  const imageResolveContext = useMemo(() => buildResolveImageUrlContext({
4113
4271
  siteId,
4114
4272
  supabaseUrl: supabaseUrl ?? (DEFAULT_SUPABASE_URL || void 0),
4115
- mediaAssets: selectRuntimeMediaAssets(runtimeMediaAssetState)
4273
+ mediaAssetIndex: runtimeMediaAssetState.siteId === siteId ? runtimeMediaAssetState.mediaAssetIndex : snapshot.mediaAssetIndex
4116
4274
  }), [
4117
4275
  runtimeMediaAssetState,
4118
4276
  siteId,
4119
- supabaseUrl
4277
+ supabaseUrl,
4278
+ snapshot
4120
4279
  ]);
4121
4280
  const resolvedSupabaseUrl = imageResolveContext.supabaseUrl;
4122
4281
  const registerMediaAsset = useCallback((asset) => {
@@ -4124,7 +4283,7 @@ function MediaEditorProvider({ siteId, apiClient, children, bucket = DEFAULT_MED
4124
4283
  dispatchRuntimeMediaAssetAction({
4125
4284
  type: "assetRegistered",
4126
4285
  siteId,
4127
- asset: toRuntimeMediaAssetIndexItem(asset)
4286
+ asset: renderableMediaAssetSchema$1.parse(toRuntimeMediaAssetIndexItem(asset))
4128
4287
  });
4129
4288
  }, [siteId]);
4130
4289
  const computePublicUrl = useCallback((asset) => {
@@ -4527,6 +4686,15 @@ function findPresetFromCss(css, tokens) {
4527
4686
  return null;
4528
4687
  }
4529
4688
  //#endregion
4689
+ //#region ../editor/src/chrome/chromeLayers.ts
4690
+ /**
4691
+ * Where preview and editor chrome stacks against the site it shows. Sites
4692
+ * float their own overlays (the event booking bar sits at 12000 and its
4693
+ * booking panel at 14000): the chrome stays above a site's floating bars, so
4694
+ * its controls stay clickable while viewing, and below a site's modal panel.
4695
+ */
4696
+ const PREVIEW_CHROME_Z_INDEX = 13e3;
4697
+ //#endregion
4530
4698
  //#region ../editor-blocks/src/widgets/entry-picker/loaders.ts
4531
4699
  function getStatusBadgeVariant(status) {
4532
4700
  switch (status) {
@@ -4567,7 +4735,8 @@ async function loadRoutableContentItems({ apiClient, siteId }) {
4567
4735
  endpoint: "getRoutableContent",
4568
4736
  params: { siteId }
4569
4737
  }));
4570
- return Array.isArray(payload?.items) ? payload.items : [];
4738
+ if (!Array.isArray(payload?.items)) throw new Error("Invalid routable content response");
4739
+ return payload.items;
4571
4740
  }
4572
4741
  //#endregion
4573
4742
  //#region ../editor-blocks/src/widgets/reference/dynamicAdapters.ts
@@ -4756,7 +4925,6 @@ const referenceLoaders = {
4756
4925
  };
4757
4926
  //#endregion
4758
4927
  //#region ../preview-next/src/client/widgets/widgetAdapters.ts
4759
- const routableContentCache = /* @__PURE__ */ new Map();
4760
4928
  const entryPickerCache = /* @__PURE__ */ new Map();
4761
4929
  const siteOptionItemsCache = /* @__PURE__ */ new Map();
4762
4930
  /**
@@ -4834,23 +5002,10 @@ function createCachedReferenceAdapterLoader(kind, loader, previewClient, fallbac
4834
5002
  };
4835
5003
  }
4836
5004
  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
- } };
5005
+ return { fetchRoutableContent: (siteId) => loadRoutableContentItems({
5006
+ apiClient: previewClient,
5007
+ siteId
5008
+ }) };
4854
5009
  }
4855
5010
  function createPreviewEntryPickerAdapter(previewClient) {
4856
5011
  return {
@@ -6110,6 +6265,26 @@ function PreviewLeaseEditingMode() {
6110
6265
  return null;
6111
6266
  }
6112
6267
  //#endregion
6268
+ //#region ../preview-next/src/client/preview/previewModeRootAttribute.ts
6269
+ /**
6270
+ * Marks the document root with the preview's mode while the preview shell is
6271
+ * mounted: "view" or "edit". Site CSS keys off it to put floating site
6272
+ * overlays (`[data-rb-site-overlay]`) away while editing, without the site
6273
+ * knowing about the editor.
6274
+ */
6275
+ const PREVIEW_MODE_ATTRIBUTE = "data-rb-preview-mode";
6276
+ function previewModeValue(isEditingMode) {
6277
+ return isEditingMode ? "edit" : "view";
6278
+ }
6279
+ /** Follows mode changes, and leaves the root as it found it on unmount. */
6280
+ function usePreviewModeRootAttribute(isEditingMode) {
6281
+ useEffect(() => {
6282
+ const root = document.documentElement;
6283
+ root.setAttribute(PREVIEW_MODE_ATTRIBUTE, previewModeValue(isEditingMode));
6284
+ return () => root.removeAttribute(PREVIEW_MODE_ATTRIBUTE);
6285
+ }, [isEditingMode]);
6286
+ }
6287
+ //#endregion
6113
6288
  //#region ../preview-next/src/client/preview/previewSetupGuidance.ts
6114
6289
  function resolvePreviewSetupBannerState(input) {
6115
6290
  if (input.authMode === "onboardingGrant") return input.dashboardUnlocked ? "dashboard_ready" : "awaiting_confirmation";
@@ -6970,15 +7145,23 @@ function PreviewChromeLayerProvider({ children }) {
6970
7145
  portalTarget,
6971
7146
  subscribeLayout
6972
7147
  }), [portalTarget, subscribeLayout]);
7148
+ const layerHost = useBodyHost();
6973
7149
  return /* @__PURE__ */ jsxs(PreviewChromeLayerContext.Provider, {
6974
7150
  value,
6975
- children: [children, /* @__PURE__ */ jsx("div", {
7151
+ children: [children, layerHost ? createPortal(/* @__PURE__ */ jsx("div", {
6976
7152
  ref: setPortalTarget,
6977
- className: "pointer-events-none fixed inset-0 z-[70]",
7153
+ className: "pointer-events-none fixed inset-0",
7154
+ style: { zIndex: PREVIEW_CHROME_Z_INDEX },
6978
7155
  "data-preview-chrome-layer": ""
6979
- })]
7156
+ }), layerHost) : null]
6980
7157
  });
6981
7158
  }
7159
+ /** The document body once mounted; null during server rendering and hydration. */
7160
+ function useBodyHost() {
7161
+ const [host, setHost] = useState(null);
7162
+ useEffect(() => setHost(document.body), []);
7163
+ return host;
7164
+ }
6982
7165
  /** Portal style writes are consequences of measurement, not new anchor changes. */
6983
7166
  function hasPreviewAnchorMutation(records, portalTarget) {
6984
7167
  return records.some(({ target }) => !portalTarget.contains(target));
@@ -8418,10 +8601,10 @@ function resolveShellThemeRoles(props) {
8418
8601
  }
8419
8602
  const previewContainerResponsiveEnabled = process.env.NEXT_PUBLIC_ENABLE_PREVIEW_CONTAINER_RESPONSIVE !== "false";
8420
8603
  const PreviewEditorSidebar = React.lazy(async () => {
8421
- return { default: (await import("./PreviewEditorSidebar-BHplI9HE.mjs")).PreviewEditorSidebar };
8604
+ return { default: (await import("./PreviewEditorSidebar-jI_4DTZY.mjs")).PreviewEditorSidebar };
8422
8605
  });
8423
8606
  const PreviewEditorUI = React.lazy(async () => {
8424
- return { default: (await import("./PreviewEditorUI-DuyN8nsD.mjs")).PreviewEditorUI };
8607
+ return { default: (await import("./PreviewEditorUI-ORkVZhfu.mjs")).PreviewEditorUI };
8425
8608
  });
8426
8609
  const previewPaneContainmentStyle = {
8427
8610
  contain: "layout paint",
@@ -8504,6 +8687,7 @@ function PreviewShellLayout(props) {
8504
8687
  const siteChromeRenderModel = layout?.siteChromeRenderModel ?? null;
8505
8688
  const surfaceDocument = useMemo(() => resolvePreviewChromeSurface(surfaceId), [surfaceId]);
8506
8689
  const isOpen = usePreviewDrawerOpen();
8690
+ usePreviewModeRootAttribute(useEditor().isEditingMode);
8507
8691
  const setDrawerOpen = useEditorUiStore((s) => s.setDrawerOpen);
8508
8692
  const sidebarTab = useEditorUiStore((s) => s.previewSidebarTab);
8509
8693
  const setPreviewSidebarActiveTab = useEditorUiStore((s) => s.setPreviewSidebarTab);
@@ -9704,48 +9888,40 @@ function isRecord(value) {
9704
9888
  }
9705
9889
  //#endregion
9706
9890
  //#region ../preview-next/src/client/blocks/previewCustomizeSelectedMedia.ts
9707
- function selectedImageFromMediaValue(value) {
9708
- if (value?.type !== "image" || !value.assetId) return null;
9709
- const parsed = parseMediaAssetId(value.assetId);
9710
- if (!parsed.ok) return null;
9711
- return selectedImageFromRenderableAsset({
9712
- id: parsed.value,
9713
- storageBucket: value.storageBucket,
9714
- storagePath: value.storagePath,
9715
- width: value.width,
9716
- height: value.height,
9717
- mimeType: value.mimeType
9718
- });
9719
- }
9720
- function selectedImageFromRenderableAsset(asset) {
9891
+ function selectedImageFromMediaValue(value, index) {
9892
+ if (value?.type !== "image") return null;
9893
+ const resolved = resolveManagedMediaReference(value, index);
9894
+ return resolved.kind === "resolved" ? {
9895
+ reference: value,
9896
+ imageAsset: resolved.asset
9897
+ } : null;
9898
+ }
9899
+ function selectedImageFromRenderableAsset(source) {
9900
+ const asset = renderableMediaAssetSchema$1.parse({
9901
+ ...source,
9902
+ width: source.width ?? null,
9903
+ height: source.height ?? null
9904
+ });
9721
9905
  return {
9722
- mediaId: asset.id,
9723
- imageAsset: renderableImageAssetFromSource(asset)
9906
+ reference: {
9907
+ type: "image",
9908
+ identifier: mediaIdentifierSchema$2.parse(asset.identifier)
9909
+ },
9910
+ imageAsset: asset
9724
9911
  };
9725
9912
  }
9726
9913
  function imagePoolWithSelectedImage(input) {
9727
- if (input.override.kind !== "image" || input.selectedImage?.mediaId !== input.override.mediaId) return input.imagePool;
9728
- const mediaId = input.override.mediaId;
9914
+ const selection = input.selectedImage;
9915
+ if (input.override.kind !== "image" || selection?.reference.identifier !== input.override.reference.identifier) return input.imagePool;
9729
9916
  return [{
9730
- mediaId,
9917
+ reference: input.override.reference,
9731
9918
  source: "general-media",
9732
- mediaAsset: input.selectedImage.imageAsset
9733
- }, ...input.imagePool.filter((item) => item.mediaId !== mediaId)];
9919
+ mediaAsset: selection.imageAsset
9920
+ }, ...input.imagePool.filter((item) => item.reference.identifier !== selection.reference.identifier)];
9734
9921
  }
9735
- function selectedOrPooledImageAssetForMediaId(input) {
9736
- if (input.selectedImage?.mediaId === input.mediaId) return input.selectedImage.imageAsset;
9737
- return input.imagePool?.find((item) => item.mediaId === input.mediaId)?.mediaAsset;
9738
- }
9739
- function renderableImageAssetFromSource(asset) {
9740
- return {
9741
- id: asset.id,
9742
- ...typeof asset.identifier === "string" ? { identifier: asset.identifier } : {},
9743
- ...typeof asset.storageBucket === "string" ? { storageBucket: asset.storageBucket } : {},
9744
- ...typeof asset.storagePath === "string" ? { storagePath: asset.storagePath } : {},
9745
- ...typeof asset.width === "number" ? { width: asset.width } : {},
9746
- ...typeof asset.height === "number" ? { height: asset.height } : {},
9747
- ...typeof asset.mimeType === "string" ? { mimeType: asset.mimeType } : {}
9748
- };
9922
+ function selectedOrPooledImageAssetForReference(input) {
9923
+ if (input.selectedImage?.reference.identifier === input.reference.identifier) return input.selectedImage.imageAsset;
9924
+ return input.imagePool?.find((item) => item.reference.identifier === input.reference.identifier)?.mediaAsset;
9749
9925
  }
9750
9926
  //#endregion
9751
9927
  //#region ../preview-next/src/client/blocks/previewCustomizeActions.ts
@@ -9805,9 +9981,9 @@ function setPageDesignBlockBackground(input) {
9805
9981
  imagePool
9806
9982
  }), input.override);
9807
9983
  if (plan.kind !== "apply") return null;
9808
- const imageAsset = plan.override.kind === "image" ? selectedOrPooledImageAssetForMediaId({
9984
+ const imageAsset = plan.override.kind === "image" ? selectedOrPooledImageAssetForReference({
9809
9985
  imagePool: input.imagePool,
9810
- mediaId: plan.override.mediaId,
9986
+ reference: plan.override.reference,
9811
9987
  selectedImage: input.selectedImage
9812
9988
  }) : void 0;
9813
9989
  return {
@@ -10343,7 +10519,7 @@ function useMediaQuery(query) {
10343
10519
  }
10344
10520
  //#endregion
10345
10521
  //#region ../preview-next/src/client/blocks/BlockBackgroundChooser.tsx
10346
- function BackgroundChooser({ capability, current, imagePoolStatus, onChoose }) {
10522
+ function BackgroundChooser({ editingSlot, capability, current, imagePoolStatus, onChoose }) {
10347
10523
  const chooseFromClick = (override) => (event) => {
10348
10524
  event.preventDefault();
10349
10525
  event.stopPropagation();
@@ -10363,6 +10539,7 @@ function BackgroundChooser({ capability, current, imagePoolStatus, onChoose }) {
10363
10539
  chooseFromClick
10364
10540
  }) : null,
10365
10541
  current.kind === "image" ? /* @__PURE__ */ jsx(BackgroundImageOptions, {
10542
+ editingSlot,
10366
10543
  capability,
10367
10544
  current,
10368
10545
  imagePoolStatus,
@@ -10478,7 +10655,7 @@ function SelectedGradient({ gradientId, onReset }) {
10478
10655
  }) : null]
10479
10656
  });
10480
10657
  }
10481
- function BackgroundImageOptions({ capability, current, imagePoolStatus, onChoose, chooseFromClick }) {
10658
+ function BackgroundImageOptions({ editingSlot, capability, current, imagePoolStatus, onChoose, chooseFromClick }) {
10482
10659
  const mediaEditorContext = useMediaEditorOptional();
10483
10660
  const [mediaPickerOpenKey, setMediaPickerOpenKey] = useState(0);
10484
10661
  if (!capability.modes.includes("image")) return null;
@@ -10493,18 +10670,19 @@ function BackgroundImageOptions({ capability, current, imagePoolStatus, onChoose
10493
10670
  className: "space-y-1",
10494
10671
  children: images.map((item) => /* @__PURE__ */ jsx(ImagePoolButton, {
10495
10672
  item,
10496
- selected: current.mediaId === item.mediaId,
10673
+ selected: current.reference.identifier === item.reference.identifier,
10497
10674
  thumbnailUrl: backgroundImagePreviewUrl(item, mediaEditorContext),
10498
10675
  onClick: chooseFromClick({
10499
10676
  kind: "image",
10500
- mediaId: item.mediaId
10677
+ reference: item.reference
10501
10678
  })
10502
- }, `${item.source}:${item.mediaId}`))
10679
+ }, `${item.source}:${item.reference.identifier}`))
10503
10680
  }) : /* @__PURE__ */ jsx("p", {
10504
10681
  className: "text-xs text-muted-foreground",
10505
10682
  children: imagePoolStatus === "loading" ? "Loading images..." : "No background-ready images yet."
10506
10683
  }),
10507
10684
  mediaPickerOpenKey > 0 && mediaEditorContext ? /* @__PURE__ */ jsx(BackgroundMediaPicker, {
10685
+ editingSlot,
10508
10686
  openKey: mediaPickerOpenKey,
10509
10687
  onChoose,
10510
10688
  onDone: () => setMediaPickerOpenKey(0)
@@ -10550,19 +10728,21 @@ function ImagePoolButton({ item, selected, thumbnailUrl, onClick }) {
10550
10728
  })
10551
10729
  });
10552
10730
  }
10553
- function BackgroundMediaPicker({ openKey, onChoose, onDone }) {
10731
+ function BackgroundMediaPicker({ editingSlot, openKey, onChoose, onDone }) {
10732
+ const mediaEditorContext = useMediaEditorOptional();
10554
10733
  const chooseMediaValue = (value) => {
10555
- const selectedImage = selectedImageFromMediaValue(value);
10734
+ const selectedImage = selectedImageFromMediaValue(value, mediaEditorContext?.imageResolveContext.mediaAssetIndex);
10556
10735
  if (!selectedImage) return;
10557
10736
  onChoose({
10558
10737
  kind: "image",
10559
- mediaId: selectedImage.mediaId
10738
+ reference: selectedImage.reference
10560
10739
  }, { selectedImage });
10561
10740
  onDone();
10562
10741
  };
10563
10742
  return /* @__PURE__ */ jsx("div", {
10564
10743
  onClick: (event) => event.stopPropagation(),
10565
10744
  children: /* @__PURE__ */ jsx(MediaEditor, {
10745
+ editingSlot,
10566
10746
  value: void 0,
10567
10747
  onChange: chooseMediaValue,
10568
10748
  allowedKinds: ["image"],
@@ -10576,10 +10756,11 @@ function BackgroundMediaPicker({ openKey, onChoose, onDone }) {
10576
10756
  },
10577
10757
  onUploadComplete: (asset) => {
10578
10758
  if (backgroundMediaPickerAssetSelection(asset).tag === "disabled") return;
10759
+ const selectedImage = selectedImageFromRenderableAsset(asset);
10579
10760
  onChoose({
10580
10761
  kind: "image",
10581
- mediaId: asset.id
10582
- }, { selectedImage: selectedImageFromRenderableAsset(asset) });
10762
+ reference: selectedImage.reference
10763
+ }, { selectedImage });
10583
10764
  onDone();
10584
10765
  }
10585
10766
  }, openKey)
@@ -10605,7 +10786,7 @@ function BackgroundPreviewSwatch({ override, imagePool }) {
10605
10786
  style: { backgroundImage: gradientPreviewCss(override.gradientId) }
10606
10787
  });
10607
10788
  case "image":
10608
- const imageItem = imagePool.find((item) => item.mediaId === override.mediaId);
10789
+ const imageItem = imagePool.find((item) => item.reference.identifier === override.reference.identifier);
10609
10790
  const thumbnailUrl = imageItem ? backgroundImagePreviewUrl(imageItem, mediaEditorContext) : void 0;
10610
10791
  return /* @__PURE__ */ jsx("span", {
10611
10792
  className: `${baseClassName} bg-muted`,
@@ -10622,13 +10803,7 @@ function backgroundImagePreviewUrl(item, mediaEditorContext) {
10622
10803
  if (!asset) return void 0;
10623
10804
  return resolveImageUrlWithContext({
10624
10805
  type: "image",
10625
- assetId: asset.id,
10626
- ...asset.identifier ? { identifier: asset.identifier } : {},
10627
- storageBucket: asset.storageBucket,
10628
- storagePath: asset.storagePath,
10629
- ...asset.width != null ? { width: asset.width } : {},
10630
- ...asset.height != null ? { height: asset.height } : {},
10631
- mimeType: asset.mimeType
10806
+ asset
10632
10807
  }, {
10633
10808
  width: 72,
10634
10809
  height: 48,
@@ -10722,7 +10897,7 @@ function BlockToolbar({ blockId, blockKind, content, bookingOfferingPresets, the
10722
10897
  const backgroundCycleImagePool = useMemo(() => {
10723
10898
  if (currentBackground.kind === "supported" && currentBackground.override.kind === "image") {
10724
10899
  const currentOverride = currentBackground.override;
10725
- if (!backgroundImagePool.some((item) => item.mediaId === currentOverride.mediaId)) return rankBackgroundImagePoolItems(dedupeBackgroundImagePool([...imagePoolForOverride(currentOverride), ...backgroundImagePool]));
10900
+ if (!backgroundImagePool.some((item) => item.reference.identifier === currentOverride.reference.identifier)) return rankBackgroundImagePoolItems(dedupeBackgroundImagePool([...imagePoolForOverride(currentOverride), ...backgroundImagePool]));
10726
10901
  }
10727
10902
  return rankBackgroundImagePoolItems(backgroundImagePool);
10728
10903
  }, [backgroundImagePool, currentBackground]);
@@ -10930,6 +11105,7 @@ function BlockToolbar({ blockId, blockKind, content, bookingOfferingPresets, the
10930
11105
  enabledBackgroundModeList,
10931
11106
  handleBackgroundCycle,
10932
11107
  imagePoolStatus: backgroundImagePoolStatus,
11108
+ editingSlot: `${blockId}:_sectionStyles.background.image`,
10933
11109
  mergedBackgroundImagePool,
10934
11110
  onChooseBackgroundOverride: chooseBackgroundOverride,
10935
11111
  onToggleBackgroundChooser: () => setBackgroundChooserOpen((open) => !open)
@@ -11047,8 +11223,11 @@ function PhoneBlockDock({ themeSource, children }) {
11047
11223
  if (typeof document === "undefined") return null;
11048
11224
  return createPortal(/* @__PURE__ */ jsx("div", {
11049
11225
  "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",
11226
+ style: {
11227
+ ...themeSource ? readThemeCustomProperties(themeSource) : {},
11228
+ zIndex: PREVIEW_CHROME_Z_INDEX
11229
+ },
11230
+ 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
11231
  children
11053
11232
  }), document.body);
11054
11233
  }
@@ -11136,6 +11315,7 @@ function renderBlockCustomizeBuiltinRow(row, context) {
11136
11315
  context.onToggleBackgroundChooser();
11137
11316
  },
11138
11317
  chooser: /* @__PURE__ */ jsx(BackgroundChooser, {
11318
+ editingSlot: context.editingSlot,
11139
11319
  capability: context.backgroundCapability,
11140
11320
  current: context.currentBackground.override,
11141
11321
  imagePoolStatus: context.imagePoolStatus,
@@ -11229,7 +11409,7 @@ function backgroundOverrideValueLabel(override, imagePool) {
11229
11409
  case "default": return "No colour chosen";
11230
11410
  case "color": return formatTokenLabel(override.token);
11231
11411
  case "gradient": return gradientLabel(override.gradientId);
11232
- case "image": return imagePool.find((item) => item.mediaId === override.mediaId)?.label ?? "Image";
11412
+ case "image": return imagePool.find((item) => item.reference.identifier === override.reference.identifier)?.label ?? "Image";
11233
11413
  }
11234
11414
  }
11235
11415
  function backgroundModeLabel(mode) {
@@ -11251,24 +11431,21 @@ function readBackgroundColorPaletteSnapshot() {
11251
11431
  return entries.length > 0 ? Object.fromEntries(entries) : null;
11252
11432
  }
11253
11433
  function dedupeBackgroundImagePool(items) {
11254
- const seen = /* @__PURE__ */ new Set();
11255
- const deduped = [];
11256
- for (const item of items) {
11257
- if (seen.has(item.mediaId)) {
11258
- const existingIndex = deduped.findIndex((candidate) => candidate.mediaId === item.mediaId);
11259
- const existing = deduped[existingIndex];
11260
- if (existing && !existing.mediaAsset && item.mediaAsset) deduped[existingIndex] = {
11261
- ...existing,
11262
- mediaAsset: item.mediaAsset,
11263
- label: existing.label ?? item.label,
11264
- rank: existing.rank ?? item.rank
11265
- };
11266
- continue;
11267
- }
11268
- seen.add(item.mediaId);
11269
- deduped.push(item);
11270
- }
11271
- return deduped;
11434
+ return Array.from(items.reduce((pool, item) => {
11435
+ const key = item.reference.identifier;
11436
+ const existing = pool.get(key);
11437
+ const decided = existing ? existing.source === "current" ? {
11438
+ ...existing,
11439
+ mediaAsset: existing.mediaAsset ?? item.mediaAsset,
11440
+ label: existing.label ?? item.label,
11441
+ rank: existing.rank ?? item.rank
11442
+ } : {
11443
+ ...existing,
11444
+ label: existing.label ?? item.label,
11445
+ rank: existing.rank ?? item.rank
11446
+ } : item;
11447
+ return new Map([...pool, [key, decided]]);
11448
+ }, /* @__PURE__ */ new Map()).values());
11272
11449
  }
11273
11450
  //#endregion
11274
11451
  //#region ../preview-next/src/client/blocks/BoundaryControl.tsx
@@ -12357,4 +12534,4 @@ function deriveDashboardBaseUrlFromApiBaseUrl(apiBaseUrl) {
12357
12534
  }
12358
12535
  }
12359
12536
  //#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 };
12537
+ 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 };