@riverbankcms/sdk 0.152.0 → 0.154.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 (303) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/{EventEmbeddedCheckoutStep-DVQXWFm6.mjs → EventEmbeddedCheckoutStep-ba9npQtb.mjs} +1 -1
  3. package/dist/{PreviewEditorSidebar-Dr4NJi3Q.mjs → PreviewEditorSidebar-C7FiaxlF.mjs} +194 -22
  4. package/dist/{PreviewEditorUI-DSZXQbyh.mjs → PreviewEditorUI-DFst50q1.mjs} +20 -44
  5. package/dist/{SdkPreviewModeRuntime-Dl4GyMc3.mjs → SdkPreviewModeRuntime-BUNV_YHZ.mjs} +266 -143
  6. package/dist/{SiteChromeCustomizeContext-DgBe-FlM.mjs → SiteChromeCustomizeContext-DEj7qppF.mjs} +5340 -4329
  7. package/dist/{ThemedButton-B8ViBnLK.mjs → ThemedButton-C8kzu0hY.mjs} +610 -116
  8. package/dist/_dts/ai/src/contracts/proposals.d.ts +416 -182
  9. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +3270 -8214
  10. package/dist/_dts/api/src/billing.d.ts +2 -0
  11. package/dist/_dts/api/src/billingEndpointDefinitions.d.ts +78 -0
  12. package/dist/_dts/api/src/bookingAdjustments.d.ts +3 -2
  13. package/dist/_dts/api/src/bookingOperations.d.ts +7 -2
  14. package/dist/_dts/api/src/bookingPeople.d.ts +19 -0
  15. package/dist/_dts/api/src/bookingPeopleEndpointDefinitions.d.ts +8 -0
  16. package/dist/_dts/api/src/bookingRecords.d.ts +4 -106
  17. package/dist/_dts/api/src/bookings.d.ts +2 -3
  18. package/dist/_dts/api/src/communications.d.ts +19 -5
  19. package/dist/_dts/api/src/contentRuntime.d.ts +1 -0
  20. package/dist/_dts/api/src/endpoints.d.ts +88 -43
  21. package/dist/_dts/api/src/index.d.ts +4 -2
  22. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -0
  23. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  24. package/dist/_dts/api/src/moneyPayments.d.ts +116 -0
  25. package/dist/_dts/api/src/onboarding/surfaceData.d.ts +2 -0
  26. package/dist/_dts/api/src/sdk-event-upsert.d.ts +2 -2
  27. package/dist/_dts/api/src/sdkThemeWire.d.ts +348 -1537
  28. package/dist/_dts/api/src/shared-contracts.d.ts +10 -0
  29. package/dist/_dts/api/src/siteInfrastructure.d.ts +2 -1
  30. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +18 -0
  31. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +17 -16
  32. package/dist/_dts/api/src/siteSettings.d.ts +1 -0
  33. package/dist/_dts/api/src/stripeConnectSetup.d.ts +90 -0
  34. package/dist/_dts/api/src/teamMembers.d.ts +2 -27
  35. package/dist/_dts/api/src/types.d.ts +11 -31
  36. package/dist/_dts/api/src/wholeSeriesRuns.d.ts +2 -4
  37. package/dist/_dts/block-form/src/widgets/RepeaterField/components/layoutGridDomain.d.ts +3 -13
  38. package/dist/_dts/blocks/src/client/site-chrome.d.ts +1 -1
  39. package/dist/_dts/blocks/src/contracts/index.d.ts +1 -0
  40. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +8 -96
  41. package/dist/_dts/blocks/src/index.d.ts +1 -0
  42. package/dist/_dts/blocks/src/lib/media.d.ts +1 -0
  43. package/dist/_dts/blocks/src/lib/picsum.d.ts +2 -2
  44. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +2 -1
  45. package/dist/_dts/blocks/src/primitives/content/components/RichText.d.ts +1 -1
  46. package/dist/_dts/blocks/src/primitives/content/primitives.d.ts +4 -1
  47. package/dist/_dts/blocks/src/primitives/layout/Section.d.ts +1 -0
  48. package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +1 -1
  49. package/dist/_dts/blocks/src/system/blocks/events/eventSelectionFields.d.ts +2 -2
  50. package/dist/_dts/blocks/src/system/blocks/events/shared/fields.d.ts +0 -4
  51. package/dist/_dts/blocks/src/system/blocks/events/shared/index.d.ts +0 -1
  52. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +276 -884
  53. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +2 -2
  54. package/dist/_dts/blocks/src/system/blocks/form.d.ts +10 -0
  55. package/dist/_dts/blocks/src/system/blocks/image-gallery/fields.d.ts +1 -0
  56. package/dist/_dts/blocks/src/system/blocks/image-gallery.d.ts +6 -1
  57. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +2 -2
  58. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +92 -90
  59. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +12 -0
  60. package/dist/_dts/blocks/src/system/blocks/shared/teamMembers.d.ts +4 -7
  61. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime-layout.d.ts +23 -0
  62. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime-profile.d.ts +20 -0
  63. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime.d.ts +17 -16
  64. package/dist/_dts/blocks/src/system/blocks/site-footer.d.ts +1 -1
  65. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +2 -2
  66. package/dist/_dts/blocks/src/system/customize/backgrounds.d.ts +6 -6
  67. package/dist/_dts/blocks/src/system/customize/facets.d.ts +75 -9
  68. package/dist/_dts/blocks/src/system/fields/backgroundContent.d.ts +377 -1
  69. package/dist/_dts/blocks/src/system/helpers/backgroundMedia.d.ts +6 -2
  70. package/dist/_dts/blocks/src/system/helpers/resolveBackground.d.ts +3 -3
  71. package/dist/_dts/blocks/src/system/layout/repeaterGrid.d.ts +12 -5
  72. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +3 -3
  73. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +48 -48
  74. package/dist/_dts/blocks/src/system/manifest/validation.d.ts +2 -0
  75. package/dist/_dts/blocks/src/system/node/fragments/index.d.ts +1 -0
  76. package/dist/_dts/blocks/src/system/node/fragments/lookSlot.d.ts +1 -1
  77. package/dist/_dts/blocks/src/system/node/fragments/responsiveTwoColumn.d.ts +3 -1
  78. package/dist/_dts/blocks/src/system/node/fragments/sectionHead.d.ts +15 -0
  79. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +18 -198
  80. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +9 -99
  81. package/dist/_dts/blocks/src/system/runtime/hooks/useBookingFlowController.d.ts +1 -1
  82. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +2 -0
  83. package/dist/_dts/blocks/src/system/runtime/lookSurfaces.d.ts +18 -6
  84. package/dist/_dts/blocks/src/system/runtime/nodes/ImageResolveContext.d.ts +1 -1
  85. package/dist/_dts/blocks/src/system/runtime/nodes/appointment-services.d.ts +50 -202
  86. package/dist/_dts/blocks/src/system/runtime/nodes/basic.d.ts +2 -1
  87. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +28 -1
  88. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/lookPresentation.d.ts +12 -6
  89. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/presentation.d.ts +1 -1
  90. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/dates.d.ts +1 -1
  91. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/CardListItem.d.ts +1 -1
  92. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +289 -885
  93. package/dist/_dts/blocks/src/system/runtime/nodes/file-download.d.ts +3 -2
  94. package/dist/_dts/blocks/src/system/runtime/nodes/form.fields.d.ts +5 -2
  95. package/dist/_dts/blocks/src/system/runtime/nodes/form.interactive.d.ts +11 -79
  96. package/dist/_dts/blocks/src/system/runtime/nodes/form.parts.d.ts +7 -0
  97. package/dist/_dts/blocks/src/system/runtime/nodes/form.server.d.ts +2 -13
  98. package/dist/_dts/blocks/src/system/runtime/nodes/media.d.ts +22 -90
  99. package/dist/_dts/blocks/src/system/runtime/nodes/mediaContext.d.ts +69 -0
  100. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +8 -72
  101. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.parts.d.ts +6 -6
  102. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +3 -2
  103. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +2 -2
  104. package/dist/_dts/blocks/src/system/transforms/registry/_utils/surfaceForegroundStyles.d.ts +3 -0
  105. package/dist/_dts/blocks/src/system/transforms/registry/footerArrangement.d.ts +6 -0
  106. package/dist/_dts/blocks/src/system/transforms/registry/index.d.ts +1 -0
  107. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +0 -11
  108. package/dist/_dts/blocks/src/system/transforms/registry/links.d.ts +3 -3
  109. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +1 -10
  110. package/dist/_dts/commerce/src/purchase/orderConfirmationPlanning.d.ts +1 -0
  111. package/dist/_dts/content-editor/src/FooterComposerOverview.d.ts +5 -2
  112. package/dist/_dts/content-editor/src/FooterComposerPanel.d.ts +1 -1
  113. package/dist/_dts/content-editor/src/FooterNavigationLayoutControl.d.ts +6 -3
  114. package/dist/_dts/content-editor/src/controller/editorLeaseParticipation.d.ts +1 -1
  115. package/dist/_dts/content-editor/src/footerComposer.d.ts +2 -1
  116. package/dist/_dts/content-editor/src/footerComposerPanelTypes.d.ts +3 -1
  117. package/dist/_dts/content-editor/src/footerNavigationLayoutState.d.ts +56 -0
  118. package/dist/_dts/content-editor/src/footerPreviewRuntime.d.ts +2 -1
  119. package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +3 -4
  120. package/dist/_dts/content-editor/src/useFooterNavigationLayout.d.ts +11 -8
  121. package/dist/_dts/content-model/src/content-types/schema.d.ts +3 -3
  122. package/dist/_dts/core/src/booking-refunds.d.ts +2 -0
  123. package/dist/_dts/core/src/date-display.d.ts +85 -0
  124. package/dist/_dts/core/src/date-time-formatter.d.ts +2 -0
  125. package/dist/_dts/core/src/footer-arrangement.d.ts +8 -1
  126. package/dist/_dts/core/src/footer-composition-types.d.ts +6 -1
  127. package/dist/_dts/core/src/footer-composition.d.ts +1 -1
  128. package/dist/_dts/core/src/footer-navigation-layout.d.ts +3 -0
  129. package/dist/_dts/core/src/index.d.ts +2 -0
  130. package/dist/_dts/core/src/mailing-list-runtime.d.ts +2 -2
  131. package/dist/_dts/core/src/mailing-list-setup-parser.d.ts +9 -1
  132. package/dist/_dts/core/src/mailing-list-setup.d.ts +12 -1
  133. package/dist/_dts/core/src/mailing-list-submission.d.ts +7 -2
  134. package/dist/_dts/core/src/mailing-list-targeting.d.ts +9 -1
  135. package/dist/_dts/core/src/public-profile.d.ts +3 -1
  136. package/dist/_dts/core/src/scheduled-date-time.d.ts +69 -0
  137. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +105 -13
  138. package/dist/_dts/db/src/schemas/forms.d.ts +16 -16
  139. package/dist/_dts/editor-blocks/src/index.d.ts +1 -0
  140. package/dist/_dts/editor-blocks/src/media/MediaField.d.ts +2 -2
  141. package/dist/_dts/editor-blocks/src/media/admitEditorMediaField.d.ts +4 -0
  142. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/targetingState.d.ts +2 -2
  143. package/dist/_dts/media-core/src/assetsInUseSummary.d.ts +6 -0
  144. package/dist/_dts/media-core/src/contentMediaAudit.d.ts +3 -2
  145. package/dist/_dts/media-core/src/index.d.ts +4 -0
  146. package/dist/_dts/media-core/src/media.d.ts +406 -0
  147. package/dist/_dts/media-core/src/mediaIdentifierSchema.d.ts +3 -0
  148. package/dist/_dts/media-core/src/mediaKinds.d.ts +2 -0
  149. package/dist/_dts/media-core/src/mediaUsageProjection.d.ts +13 -1
  150. package/dist/_dts/media-core/src/mediaWriteNormalizer.d.ts +2 -6
  151. package/dist/_dts/media-core/src/portableMediaReferences.d.ts +8 -21
  152. package/dist/_dts/media-core/src/renderableMediaAsset.d.ts +28 -14
  153. package/dist/_dts/media-core/src/renderableMediaAssetAdmission.d.ts +15 -0
  154. package/dist/_dts/media-editor/src/CropDialog.d.ts +6 -3
  155. package/dist/_dts/media-editor/src/MediaEditor.d.ts +2 -1
  156. package/dist/_dts/media-editor/src/MediaPreview.d.ts +3 -3
  157. package/dist/_dts/media-editor/src/cropEditorSource.d.ts +5 -7
  158. package/dist/_dts/media-editor/src/editorMediaState.d.ts +29 -0
  159. package/dist/_dts/media-editor/src/mediaSelection.d.ts +1 -2
  160. package/dist/_dts/media-editor/src/runtimeMediaAssetState.d.ts +4 -5
  161. package/dist/_dts/media-editor/src/types.d.ts +1 -1
  162. package/dist/_dts/media-editor/src/utils.d.ts +0 -1
  163. package/dist/_dts/media-react/src/components/cropChangePolicy.d.ts +4 -1
  164. package/dist/_dts/media-react/src/components/cropGeometry.d.ts +1 -0
  165. package/dist/_dts/media-react/src/components/useImageCropperController.d.ts +1 -0
  166. package/dist/_dts/preview-next/src/client/blocks/ArrangementBlockToolbar.d.ts +2 -1
  167. package/dist/_dts/preview-next/src/client/blocks/BlockBackgroundChooser.d.ts +2 -1
  168. package/dist/_dts/preview-next/src/client/blocks/previewCustomizeSelectedMedia.d.ts +11 -12
  169. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +1 -0
  170. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +1 -0
  171. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +4 -1
  172. package/dist/_dts/preview-next/src/client/preview/siteChromeSavePlan.d.ts +27 -5
  173. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +2 -0
  174. package/dist/_dts/preview-next/src/client/preview/useConfirmedPreferenceRecord.d.ts +12 -0
  175. package/dist/_dts/preview-next/src/client/preview/usePersistedFooterPreferences.d.ts +26 -0
  176. package/dist/_dts/preview-next/src/client/preview/usePersistedHeaderPreferences.d.ts +40 -2
  177. package/dist/_dts/sdk/src/config/validation.d.ts +3 -3
  178. package/dist/_dts/sdk/src/contracts/content.d.ts +2 -45
  179. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  180. package/dist/_dts/sdk/src/contracts/rendering.d.ts +3 -3
  181. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +4 -46
  182. package/dist/_dts/sdk/src/date-time/index.d.ts +2 -68
  183. package/dist/_dts/sdk/src/index.d.ts +1 -0
  184. package/dist/_dts/sdk/src/public-api/contracts.d.ts +1 -0
  185. package/dist/_dts/sdk/src/rendering/image.d.ts +5 -5
  186. package/dist/_dts/sdk/src/rendering/index.d.ts +2 -1
  187. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +1 -1
  188. package/dist/_dts/sdk/src/rendering/link.d.ts +3 -7
  189. package/dist/_dts/sdk/src/rendering/mediaAssets.d.ts +2 -4
  190. package/dist/_dts/sdk/src/version.d.ts +1 -1
  191. package/dist/_dts/theme-core/src/accordions/types.d.ts +1 -1
  192. package/dist/_dts/theme-core/src/boxBackgroundSchema.d.ts +397 -26
  193. package/dist/_dts/theme-core/src/buttons/buttonColourContract.d.ts +2 -0
  194. package/dist/_dts/theme-core/src/buttons/resolveButtonColourStates.d.ts +2 -0
  195. package/dist/_dts/theme-core/src/buttons/styles/recipes/lanternRecipes.d.ts +60 -0
  196. package/dist/_dts/theme-core/src/buttons/styles/registry.d.ts +57 -0
  197. package/dist/_dts/theme-core/src/buttons/styles/selection.d.ts +10 -1
  198. package/dist/_dts/theme-core/src/buttons/types.d.ts +378 -66
  199. package/dist/_dts/theme-core/src/buttons/typography.d.ts +24 -0
  200. package/dist/_dts/theme-core/src/cards/types.d.ts +42 -42
  201. package/dist/_dts/theme-core/src/footer/effectiveNavLinkStyle.d.ts +1 -1
  202. package/dist/_dts/theme-core/src/footer/generateFooterCss.d.ts +4 -1
  203. package/dist/_dts/theme-core/src/footer/mode.d.ts +2 -11
  204. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  205. package/dist/_dts/theme-core/src/inputs/types.d.ts +3 -3
  206. package/dist/_dts/theme-core/src/lib/media.d.ts +2 -616
  207. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +495 -2766
  208. package/dist/_dts/theme-core/src/navigation/types.d.ts +4 -4
  209. package/dist/_dts/theme-core/src/palette/curated/types.d.ts +1 -1
  210. package/dist/_dts/theme-core/src/schema.d.ts +838 -3369
  211. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +23 -7
  212. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  213. package/dist/_dts/theme-core/src/site-styles/compilationPlan.d.ts +4 -6
  214. package/dist/_dts/theme-core/src/site-styles/compileFooterAgainstRow.d.ts +121 -0
  215. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +25 -0
  216. package/dist/_dts/theme-core/src/site-styles/footerLookDefaults.d.ts +45 -0
  217. package/dist/_dts/theme-core/src/site-styles/footerLookRecipe.d.ts +50 -0
  218. package/dist/_dts/theme-core/src/site-styles/footerLooks.d.ts +9 -35
  219. package/dist/_dts/theme-core/src/site-styles/footerPreferences.d.ts +29 -0
  220. package/dist/_dts/theme-core/src/site-styles/headerPreferencesPersistence.d.ts +2 -3
  221. package/dist/_dts/theme-core/src/site-styles/index.d.ts +4 -0
  222. package/dist/_dts/theme-core/src/site-styles/lookResolution.d.ts +2 -2
  223. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  224. package/dist/_dts/theme-core/src/site-styles/runtimeBackgroundResolution.d.ts +9 -9
  225. package/dist/_dts/theme-core/src/site-styles/siteChromeBackgrounds.d.ts +8 -0
  226. package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +1 -1
  227. package/dist/_dts/theme-core/src/site-styles/themeParity.d.ts +1 -1
  228. package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +2 -2
  229. package/dist/_dts/theme-core/src/styles/skinTokens.d.ts +2 -2
  230. package/dist/_dts/theme-core/src/typography/schema.d.ts +2 -2
  231. package/dist/_dts/ui/src/card.d.ts +1 -1
  232. package/dist/client/{BookingMailingListNote-CBuMKN0w.mjs → BookingMailingListNote-CNoSqFtf.mjs} +2 -2
  233. package/dist/client/{CardListItem-Dc9XTXhB.mjs → CardListItem-BkTkqBkh.mjs} +5 -4
  234. package/dist/client/{CheckboxChoice-CIqx_o0E.mjs → CheckboxChoice-CHJpsty4.mjs} +1 -1
  235. package/dist/client/{DemoBookingPortalAccess-D3VQ_kLj.mjs → DemoBookingPortalAccess-C7KQKFNt.mjs} +2 -2
  236. package/dist/client/{EventCombined.client-BHGEKise.mjs → EventCombined.client-BgeYMjHJ.mjs} +5 -6
  237. package/dist/client/{EventEmbeddedCheckoutStep-Bo1Cm23R.mjs → EventEmbeddedCheckoutStep-BTc_lTkM.mjs} +2 -2
  238. package/dist/client/{EventListing.client-D5OQgVPr.mjs → EventListing.client-ChRs9Hl2.mjs} +2 -2
  239. package/dist/client/{LeafletStaticMap-CLL5cWrr.mjs → LeafletStaticMap-C_dNQgd0.mjs} +1 -1
  240. package/dist/client/{RichText-BoDmnopf.mjs → RichText-BI9bzbjo.mjs} +106 -60
  241. package/dist/client/{ThemedButton-Ciltp0IK.mjs → ThemedButton-wl3Z3wkH.mjs} +1 -2
  242. package/dist/client/{accordion-DOkRS64-.mjs → accordion-6Yz8Wd83.mjs} +1 -1
  243. package/dist/client/{bookingForm-wlMVwo9h.mjs → bookingForm-i_pKIGiY.mjs} +42 -15
  244. package/dist/client/bookings.mjs +118357 -22833
  245. package/dist/client/{carousel-CGWk-Z0u.mjs → carousel-DNqd_PjC.mjs} +2 -2
  246. package/dist/client/{carousel.client-kX5mN1Eg.mjs → carousel.client-BUgjPbb6.mjs} +1 -1
  247. package/dist/client/{cart-OBBPlaH4.mjs → cart-D8OBHuF4.mjs} +3 -3
  248. package/dist/client/{checkout-Bmw2WjQX.mjs → checkout-F3-9IGLU.mjs} +3 -3
  249. package/dist/client/client.mjs +20785 -19238
  250. package/dist/client/{context-BI77UFAn.mjs → context-Dg4ZrxDD.mjs} +1 -1
  251. package/dist/client/{eventCalendar-qkej2Edn.mjs → eventCalendar-BUc7YIBM.mjs} +8 -9
  252. package/dist/client/{eventCombined-DApKHvat.mjs → eventCombined-BwfShk2a.mjs} +4 -4
  253. package/dist/client/{eventDetails-BQyUDPH0.mjs → eventDetails-BMOVC3go.mjs} +3 -3
  254. package/dist/client/{eventListing-CeAnshlZ.mjs → eventListing-BwE9PM-t.mjs} +4 -4
  255. package/dist/client/{eventRegistration-C3A3NyBO.mjs → eventRegistration-CCWPYDc7.mjs} +10 -10
  256. package/dist/client/{form-DW8rU7jO.mjs → form-CXFr0Gd5.mjs} +115 -52
  257. package/dist/client/{headerSection-CkIhsoNm.mjs → headerSection-BX8qw8kH.mjs} +3 -3
  258. package/dist/client/hooks.mjs +17908 -16797
  259. package/dist/client/{locationMap-D4O8wbli.mjs → locationMap-B3La71m0.mjs} +3 -4
  260. package/dist/client/{media-C5K_0xPd.mjs → media-B1Cbv721.mjs} +183 -362
  261. package/dist/client/mediaContext-CwbbimYB.mjs +135 -0
  262. package/dist/client/{newsletterForm-B7IxSPuz.mjs → newsletterForm-DnGyR0x7.mjs} +51 -15
  263. package/dist/client/{productDetail-Bqxpwy5N.mjs → productDetail-BVgTqvkb.mjs} +3 -3
  264. package/dist/client/{productList-u9Lz8V15.mjs → productList-CcO7kUQw.mjs} +3 -3
  265. package/dist/client/{propsDecoder-Bf1jucUp.mjs → propsDecoder-B1OeWavE.mjs} +2193 -374
  266. package/dist/client/renderableMediaAssetAdmission-CHkXYDC_.mjs +143 -0
  267. package/dist/client/rendering/client.mjs +22424 -21488
  268. package/dist/client/rendering/islands.mjs +20 -23
  269. package/dist/client/rendering.mjs +21025 -19413
  270. package/dist/client/{routeIslandApiConfig-BgP-aPMl.mjs → routeIslandApiConfig-Dl4vglJm.mjs} +1 -1
  271. package/dist/client/{shop-B_eykR-_.mjs → shop-P72nX5Fs.mjs} +7 -7
  272. package/dist/client/{shop-commerce-CT0APkFV.mjs → shop-commerce-Bt7uraDx.mjs} +8 -8
  273. package/dist/client/{shop-commerce-store-DcvZxdEK.mjs → shop-commerce-store-C1-mxSye.mjs} +1 -1
  274. package/dist/client/{shopShared-BVJOiUiJ.mjs → shopShared-Db-cRGu3.mjs} +5 -5
  275. package/dist/client/{useDiscountCodeUi-DPmYDunz.mjs → useDiscountCodeUi-jvAiUoUX.mjs} +1 -1
  276. package/dist/client/{useEventPagination-8-U55vH5.mjs → useEventPagination-BdWpCniq.mjs} +6 -7
  277. package/dist/preview-next/before-render.mjs +222 -55
  278. package/dist/preview-next/client/runtime.mjs +3 -3
  279. package/dist/preview-next/editor-chrome.css +5 -2
  280. package/dist/preview-next/keepAlive.mjs +133 -51
  281. package/dist/preview-next/middleware.mjs +133 -51
  282. package/dist/{sdk-runtime-C5jPdSrk.mjs → sdk-runtime-DLhjF2Nw.mjs} +1 -1
  283. package/dist/server/components.mjs +21541 -20118
  284. package/dist/server/config-validation.mjs +2466 -1403
  285. package/dist/server/config.mjs +2466 -1403
  286. package/dist/server/data.mjs +17842 -16759
  287. package/dist/server/date-time.mjs +258 -116
  288. package/dist/server/index.mjs +360 -53
  289. package/dist/server/next.mjs +21913 -20539
  290. package/dist/server/page-converter.mjs +8121 -7322
  291. package/dist/server/prebuild.mjs +1 -1
  292. package/dist/server/rendering/server.mjs +21196 -19760
  293. package/dist/server/rendering.mjs +21554 -20123
  294. package/dist/server/routing.mjs +19806 -18607
  295. package/dist/server/server.mjs +2907 -1845
  296. package/dist/server/theme-bridge.mjs +991 -160
  297. package/dist/server/theme.mjs +501 -100
  298. package/dist/{spinner-B-ab2rJp.mjs → spinner-MTooKfck.mjs} +1 -1
  299. package/dist/styles/index.css +254 -1
  300. package/package.json +1 -1
  301. package/dist/_dts/blocks/src/system/blocks/events/shared/layout.d.ts +0 -12
  302. package/dist/client/aspectTransforms-D-TnDdq4.mjs +0 -93
  303. package/dist/client/colorStyles-ECDNPE_P.mjs +0 -1253
@@ -1,8 +1,7 @@
1
- import { r as textColorStyle } from "./colorStyles-ECDNPE_P.mjs";
2
- import { t as defineIslandPropsDecoder } from "./propsDecoder-Bf1jucUp.mjs";
3
- import { n as ThemedButtonLink } from "./ThemedButton-Ciltp0IK.mjs";
1
+ import { Xr as textColorStyle, t as defineIslandPropsDecoder } from "./propsDecoder-B1OeWavE.mjs";
2
+ import { n as ThemedButtonLink } from "./ThemedButton-wl3Z3wkH.mjs";
4
3
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
5
- import { t as LeafletStaticMap } from "./LeafletStaticMap-CLL5cWrr.mjs";
4
+ import { t as LeafletStaticMap } from "./LeafletStaticMap-C_dNQgd0.mjs";
6
5
  import "react";
7
6
  import { jsx, jsxs } from "react/jsx-runtime";
8
7
  //#region ../core/src/location.ts
@@ -1,5 +1,6 @@
1
- import { F as clsx, N as err, P as ok$1, n as mergeStyles, r as textColorStyle, t as backgroundColorStyle } from "./colorStyles-ECDNPE_P.mjs";
2
- import { d as unsafeAsMediaAssetId, m as unsafeAsStoragePath, n as parseAspectRatioValue, p as unsafeAsStorageBucketName, r as resolveMediaTransformForAspect, t as isExplicitRectCrop } from "./aspectTransforms-D-TnDdq4.mjs";
1
+ import { _ as err, g as unsafeAsStoragePath, h as unsafeAsStorageBucketName, p as unsafeAsMediaAssetId, r as resolveManagedMediaReference, v as ok$1 } from "./renderableMediaAssetAdmission-CHkXYDC_.mjs";
2
+ import { Jr as backgroundColorStyle, Xr as textColorStyle, Yr as mergeStyles, ci as isExplicitRectCrop, li as parseAspectRatioValue, ri as clsx, ui as resolveMediaTransformForAspect } from "./propsDecoder-B1OeWavE.mjs";
3
+ import { a as getSupabaseUrl, i as getSiteId, n as getCurrentResolveImageUrlContext, r as getMediaAssetIndex } from "./mediaContext-CwbbimYB.mjs";
3
4
  import "react";
4
5
  import { jsx } from "react/jsx-runtime";
5
6
  //#region ../media-core/src/fileSafety.ts
@@ -201,45 +202,6 @@ function rotateNormalizedPoint(point, rotation) {
201
202
  }
202
203
  }
203
204
  //#endregion
204
- //#region ../media-core/src/renderableMediaAsset.ts
205
- function buildRenderableMediaAssetIndex(assets) {
206
- if (!assets || assets.length === 0) return void 0;
207
- const byId = /* @__PURE__ */ new Map();
208
- const byIdentifier = /* @__PURE__ */ new Map();
209
- for (const asset of assets) {
210
- if (!asset?.id) continue;
211
- byId.set(asset.id, asset);
212
- const identifier = typeof asset.identifier === "string" ? asset.identifier.trim() : "";
213
- if (identifier) byIdentifier.set(identifier, asset);
214
- }
215
- return {
216
- byId,
217
- byIdentifier
218
- };
219
- }
220
- function attachRenderableMediaAssetFields(media, asset) {
221
- return {
222
- ...media,
223
- assetId: asset.id,
224
- id: asset.id,
225
- identifier: mediaIdentifierOrFallback(media.identifier, asset.identifier),
226
- storageBucket: asset.storageBucket ?? media.storageBucket,
227
- storagePath: asset.storagePath ?? media.storagePath,
228
- width: asset.width ?? media.width,
229
- height: asset.height ?? media.height,
230
- mimeType: asset.mimeType ?? media.mimeType
231
- };
232
- }
233
- /**
234
- * Preserve an explicit per-usage identifier when one exists. Otherwise prefer
235
- * the canonical asset identifier, while keeping intentionally blank legacy
236
- * string values from becoming null.
237
- */
238
- function mediaIdentifierOrFallback(current, fallback) {
239
- if (typeof current === "string" && current.trim().length > 0) return current;
240
- return fallback ?? (typeof current === "string" ? current : void 0);
241
- }
242
- //#endregion
243
205
  //#region ../blocks/src/system/media/slotContracts.ts
244
206
  const DEFAULT_MIN_SOURCE_WIDTH = 1200;
245
207
  const LARGE_MIN_SOURCE_WIDTH = 1400;
@@ -645,22 +607,9 @@ function resolveMediaSlotContract({ blockKind, fieldPath, values, fieldAspectRat
645
607
  }
646
608
  //#endregion
647
609
  //#region ../blocks/src/system/runtime/nodes/media.tsx
648
- function buildMediaAssetIndex(assets) {
649
- return buildRenderableMediaAssetIndex(assets);
650
- }
651
610
  const MAX_RENDER_DIMENSION = 4096;
652
611
  const MAX_SRCSET_WIDTH = 2560;
653
612
  const RELATIVE_IMG_PROXY_BASE_PATH = "/api/img";
654
- function normalizeSupabaseUrl(value) {
655
- return value?.replace(/\/$/, "");
656
- }
657
- function buildResolveImageUrlContext(input) {
658
- return {
659
- supabaseUrl: normalizeSupabaseUrl(input?.supabaseUrl),
660
- siteId: input?.siteId,
661
- mediaAssetIndex: input?.mediaAssetIndex ?? buildMediaAssetIndex(input?.mediaAssets)
662
- };
663
- }
664
613
  function getValidSourceDimension(value) {
665
614
  return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : void 0;
666
615
  }
@@ -785,52 +734,55 @@ function warnForMediaUrlResolution(result) {
785
734
  }
786
735
  }
787
736
  function resolveMediaStorageUrlResult(value, context, transformOptions) {
788
- const canonical = resolveMediaWithCanonicalAsset(value, context ?? void 0);
789
- if (!canonical.storagePath || canonical.storagePath.length === 0) return {
737
+ const canonical = resolveRuntimeMedia(value, context ?? void 0);
738
+ if (!canonical) return {
739
+ kind: "missing-storage-path",
740
+ identifier: value.identifier
741
+ };
742
+ return resolveResolvedMediaStorageUrlResult(canonical, context, transformOptions);
743
+ }
744
+ function resolveDirectStoragePathUrl(asset, supabaseUrl, siteId, transformOptions) {
745
+ const bucket = asset.storageBucket ?? "media";
746
+ if (isSiteScopedDirectImageStoragePath(asset.storagePath)) return {
747
+ kind: "resolved",
748
+ url: getDirectImageUrlForSiteScopedPath(supabaseUrl, asset.storagePath, bucket, transformOptions)
749
+ };
750
+ const relativePath = parseRelativeStoragePath(asset.storagePath);
751
+ if (!relativePath.ok) return {
752
+ kind: "invalid-storage-path",
753
+ storagePath: asset.storagePath
754
+ };
755
+ if (!siteId) return {
756
+ kind: "missing-site-context",
757
+ storagePath: asset.storagePath
758
+ };
759
+ return {
760
+ kind: "resolved",
761
+ url: getDirectImageUrlForRelativePath(supabaseUrl, relativePath.value, siteId, bucket, transformOptions)
762
+ };
763
+ }
764
+ function resolveResolvedMediaStorageUrlResult(canonical, context, transformOptions) {
765
+ const storagePath = canonical.storagePath;
766
+ if (!storagePath) return {
790
767
  kind: "missing-storage-path",
791
768
  assetId: canonical.assetId,
792
769
  identifier: canonical.identifier
793
770
  };
794
- const siteId = context?.siteId ?? getSiteId();
795
- const bucket = canonical.storageBucket ?? "media";
796
- const siteScopedPath = isSiteScopedDirectImageStoragePath(canonical.storagePath) ? canonical.storagePath : null;
797
- let supabaseUrl;
798
771
  try {
799
- supabaseUrl = context?.supabaseUrl?.replace(/\/$/, "") ?? getSupabaseUrl();
772
+ const supabaseUrl = context?.supabaseUrl?.replace(/\/$/, "") ?? getSupabaseUrl();
773
+ return resolveDirectStoragePathUrl({
774
+ ...canonical,
775
+ storagePath
776
+ }, supabaseUrl, context?.siteId ?? getSiteId(), transformOptions);
800
777
  } catch (error) {
801
778
  return {
802
779
  kind: "missing-supabase-url",
803
780
  message: error instanceof Error ? error.message : "Supabase URL is not configured."
804
781
  };
805
782
  }
806
- let directUrl;
807
- if (siteScopedPath) directUrl = getDirectImageUrlForSiteScopedPath(supabaseUrl, siteScopedPath, bucket, transformOptions);
808
- else {
809
- const relativePath = parseRelativeStoragePath(canonical.storagePath);
810
- if (!relativePath.ok) return {
811
- kind: "invalid-storage-path",
812
- storagePath: canonical.storagePath
813
- };
814
- if (!siteId) return {
815
- kind: "missing-site-context",
816
- storagePath: canonical.storagePath
817
- };
818
- directUrl = getDirectImageUrlForRelativePath(supabaseUrl, relativePath.value, siteId, bucket, transformOptions);
819
- }
820
- debugMediaNodeLog("resolve:direct-supabase", {
821
- storagePath: canonical.storagePath,
822
- siteId,
823
- bucket,
824
- directUrl,
825
- transformOptions
826
- });
827
- return {
828
- kind: "resolved",
829
- url: directUrl
830
- };
831
783
  }
832
784
  function getDirectImageUrlForValue(value, options, context) {
833
- const result = resolveMediaStorageUrlResult(value, context, buildDirectTransformOptions(options));
785
+ const result = resolveResolvedMediaStorageUrlResult(value, context, buildDirectTransformOptions(options));
834
786
  return result.kind === "resolved" ? result.url : void 0;
835
787
  }
836
788
  function resolveStorageImageUrl(value, options, context, transformAspectRatio, resolved) {
@@ -869,133 +821,6 @@ const ImagePresets = {
869
821
  resize: "contain"
870
822
  }
871
823
  };
872
- /**
873
- * Server-side: AsyncLocalStorage for request isolation.
874
- * Prevents race conditions when multiple requests are processed concurrently.
875
- *
876
- * Lazy initialization to avoid issues in environments that don't support async_hooks.
877
- */
878
- let _serverStorage = null;
879
- let _serverStorageChecked = false;
880
- function getServerStorage() {
881
- if (typeof window !== "undefined") return null;
882
- if (_serverStorageChecked) return _serverStorage;
883
- _serverStorageChecked = true;
884
- try {
885
- const globalWithNonWebpackRequire = globalThis;
886
- const AsyncLocalStorage = (typeof globalWithNonWebpackRequire.__non_webpack_require__ === "function" ? globalWithNonWebpackRequire.__non_webpack_require__ : new Function("id", "return require(id)"))("async_hooks").AsyncLocalStorage;
887
- if (AsyncLocalStorage) {
888
- _serverStorage = new AsyncLocalStorage();
889
- return _serverStorage;
890
- }
891
- return null;
892
- } catch {
893
- console.warn("[blocks] AsyncLocalStorage not available - using module-level state");
894
- return null;
895
- }
896
- }
897
- /**
898
- * Client-side context storage.
899
- * Safe because browsers are single-threaded per tab.
900
- *
901
- * IMPORTANT: This must be shared across bundles.
902
- * SDK preview mode can load multiple independently-bundled entrypoints
903
- * (e.g. `@riverbankcms/sdk/rendering` + `@riverbankcms/sdk/preview-next/client`),
904
- * which can otherwise each get their own module-scoped singleton.
905
- */
906
- const RB_MEDIA_CONTEXT_KEY = Symbol.for("riverbankcms.blocks.mediaContext");
907
- function getClientContextStore() {
908
- const g = globalThis;
909
- const existing = g[RB_MEDIA_CONTEXT_KEY];
910
- if (existing && typeof existing === "object") return existing;
911
- const next = {};
912
- g[RB_MEDIA_CONTEXT_KEY] = next;
913
- return next;
914
- }
915
- /**
916
- * Get the current media context.
917
- * Server-side: Uses AsyncLocalStorage for request isolation.
918
- * Client-side: Uses module-level state (safe in single-threaded browser).
919
- */
920
- function getMediaContext() {
921
- const storage = getServerStorage();
922
- if (storage) return storage.getStore() ?? {};
923
- return getClientContextStore();
924
- }
925
- /**
926
- * Set the Supabase URL in the current context.
927
- * @deprecated Use runWithMediaContext instead for request isolation.
928
- */
929
- function setContextSupabaseUrl(url) {
930
- const normalizedUrl = normalizeSupabaseUrl(url);
931
- const storage = getServerStorage();
932
- if (storage) {
933
- const current = storage.getStore();
934
- if (current) current.supabaseUrl = normalizedUrl;
935
- else if (storage.enterWith) {
936
- const next = { supabaseUrl: normalizedUrl };
937
- storage.enterWith(next);
938
- } else getClientContextStore().supabaseUrl = normalizedUrl;
939
- } else getClientContextStore().supabaseUrl = normalizedUrl;
940
- }
941
- /**
942
- * Set the site ID in the current context.
943
- * @deprecated Use runWithMediaContext instead for request isolation.
944
- */
945
- function setContextSiteId(siteId) {
946
- const storage = getServerStorage();
947
- if (storage) {
948
- const current = storage.getStore();
949
- if (current) current.siteId = siteId;
950
- else if (storage.enterWith) {
951
- const next = { siteId };
952
- storage.enterWith(next);
953
- } else getClientContextStore().siteId = siteId;
954
- } else getClientContextStore().siteId = siteId;
955
- }
956
- function setContextMediaAssetIndex(index) {
957
- const storage = getServerStorage();
958
- if (storage) {
959
- const current = storage.getStore();
960
- if (current) current.mediaAssetIndex = index;
961
- else if (storage.enterWith) {
962
- const next = { mediaAssetIndex: index };
963
- storage.enterWith(next);
964
- } else getClientContextStore().mediaAssetIndex = index;
965
- } else getClientContextStore().mediaAssetIndex = index;
966
- }
967
- function setContextResolveImageUrlContext(context) {
968
- setContextSupabaseUrl(context?.supabaseUrl);
969
- setContextSiteId(context?.siteId);
970
- setContextMediaAssetIndex(context?.mediaAssetIndex);
971
- }
972
- function getCurrentResolveImageUrlContext() {
973
- const context = getMediaContext();
974
- if (!context.supabaseUrl && !context.siteId && !context.mediaAssetIndex) return;
975
- return {
976
- supabaseUrl: context.supabaseUrl,
977
- siteId: context.siteId,
978
- mediaAssetIndex: context.mediaAssetIndex
979
- };
980
- }
981
- /**
982
- * Get the Supabase URL for constructing direct storage URLs.
983
- * Used for serving images directly from Supabase storage CDN.
984
- *
985
- * Resolution order:
986
- * 1. Context URL (set via runWithMediaContext or setContextSupabaseUrl)
987
- * 2. Environment variable NEXT_PUBLIC_SUPABASE_URL
988
- *
989
- * SDK sites receive the URL from the API, so they don't need the env var.
990
- * Dashboard and frontend apps use the env var.
991
- */
992
- function getSupabaseUrl() {
993
- const context = getMediaContext();
994
- if (context.supabaseUrl) return context.supabaseUrl;
995
- const url = process.env.NEXT_PUBLIC_SUPABASE_URL;
996
- if (!url) throw new Error("NEXT_PUBLIC_SUPABASE_URL is not configured. Set it to your Supabase project URL (e.g., https://xxx.supabase.co)");
997
- return url.replace(/\/$/, "");
998
- }
999
824
  function resolveDashboardOrigin(raw) {
1000
825
  if (!raw) return void 0;
1001
826
  const trimmed = raw.trim();
@@ -1013,47 +838,41 @@ function getImageProxyBasePath() {
1013
838
  if (!dashboardOrigin) return RELATIVE_IMG_PROXY_BASE_PATH;
1014
839
  return `${dashboardOrigin}${RELATIVE_IMG_PROXY_BASE_PATH}`;
1015
840
  }
1016
- /**
1017
- * Get the site ID for constructing storage paths.
1018
- * Required for relative path resolution.
1019
- */
1020
- function getSiteId() {
1021
- return getMediaContext().siteId;
1022
- }
1023
- function getMediaAssetIndex(context) {
1024
- return context?.mediaAssetIndex ?? getMediaContext().mediaAssetIndex;
1025
- }
1026
- function resolveCanonicalMediaAsset(value, context) {
1027
- const index = getMediaAssetIndex(context);
1028
- if (!index) return void 0;
1029
- if (value.assetId) {
1030
- const hit = index.byId.get(value.assetId);
1031
- if (hit) return hit;
1032
- }
1033
- const identifier = typeof value.identifier === "string" ? value.identifier.trim() : "";
1034
- if (identifier) {
1035
- const hit = index.byIdentifier.get(identifier);
1036
- if (hit) return hit;
1037
- }
841
+ /** Resolve portable content without exposing runtime metadata as saved values. */
842
+ function resolveMediaWithContext(reference, context) {
843
+ return resolveManagedMediaReference(reference, getMediaAssetIndex(context ?? void 0));
1038
844
  }
1039
- function resolveMediaWithCanonicalAsset(value, context) {
1040
- const asset = resolveCanonicalMediaAsset(value, context);
1041
- if (!asset) return value;
1042
- return attachRenderableMediaAssetFields(value, asset);
845
+ function sourceFromAsset(value, asset) {
846
+ return {
847
+ type: value.type,
848
+ alt: value.alt,
849
+ filename: value.filename,
850
+ purpose: value.purpose,
851
+ placeholder: value.placeholder,
852
+ transform: value.transform,
853
+ poster: value.poster,
854
+ identifier: asset.identifier,
855
+ assetId: asset.id,
856
+ storageBucket: asset.storageBucket,
857
+ storagePath: asset.storagePath,
858
+ mimeType: asset.mimeType,
859
+ width: asset.width,
860
+ height: asset.height
861
+ };
862
+ }
863
+ function resolveRuntimeMedia(value, context) {
864
+ if ("asset" in value && value.asset) return sourceFromAsset(value, value.asset);
865
+ if ("src" in value && value.src) return value;
866
+ if (!value.identifier) return void 0;
867
+ const resolved = resolveMediaWithContext(value, context);
868
+ return resolved.kind === "resolved" ? sourceFromAsset(resolved.reference, resolved.asset) : void 0;
1043
869
  }
1044
870
  function resolveVideoPosterUrl(value, context) {
1045
- if (value.type !== "video") return void 0;
1046
- const poster = value.poster;
1047
- if (!poster) return void 0;
1048
- switch (poster.tag) {
1049
- case "external-src": return poster.src;
1050
- case "storage": return resolveMediaStorageUrl({
1051
- type: "image",
1052
- assetId: poster.assetId,
1053
- storageBucket: poster.storageBucket,
1054
- storagePath: poster.storagePath
1055
- }, context);
1056
- }
871
+ if (value.type !== "video" || !value.poster) return void 0;
872
+ return value.poster.tag === "external-src" ? value.poster.src : resolveMediaStorageUrl({
873
+ type: "image",
874
+ identifier: value.poster.identifier
875
+ }, context);
1057
876
  }
1058
877
  const debugMediaNodeLog = (...args) => {
1059
878
  if (typeof window === "undefined") return;
@@ -1130,7 +949,7 @@ function renderVideo(value, className, style, context, options = {}) {
1130
949
  });
1131
950
  }
1132
951
  function resolvePublicMediaUrl(value, context) {
1133
- return resolveMediaStorageUrl(value, context) ?? value.src;
952
+ return resolveMediaStorageUrl(value, context) ?? ("src" in value ? value.src : void 0);
1134
953
  }
1135
954
  function renderAudio(value, className, style, context) {
1136
955
  if (value.type !== "audio") return null;
@@ -1145,41 +964,43 @@ function renderAudio(value, className, style, context) {
1145
964
  "aria-label": value.alt ?? "Audio"
1146
965
  });
1147
966
  }
1148
- function computeMediaTransformStyle(value, style, targetAspectRatio, options) {
967
+ function usesProxyFraming(source, transform) {
968
+ if (!source?.assetId || !isExplicitCropProxyEnabled()) return false;
969
+ return Boolean(transform.rotation) || isExplicitRectCrop(transform.rect, getValidSourceDimension(source.width), getValidSourceDimension(source.height));
970
+ }
971
+ function rectFramingPatch(source, rect, proxy, style) {
972
+ if (!source || !rect || proxy) return {};
973
+ const patch = buildCssRectStylePatch(source, rect);
974
+ return patch ? applyRectTransform(style, patch) : {};
975
+ }
976
+ function hotspotFramingPatch(transform, proxy, rectPatch, style) {
977
+ if (!transform.hotspot || rectPatch.objectPosition !== void 0) return {};
978
+ const fit = style?.objectFit;
979
+ if (fit && fit !== "cover" && fit !== "contain") return {};
980
+ const point = proxy && transform.rotation ? rotateNormalizedPoint(transform.hotspot, transform.rotation) : transform.hotspot;
981
+ return { objectPosition: `${point.x * 100}% ${point.y * 100}%` };
982
+ }
983
+ function rotationFramingPatch(rotation, proxy, rectPatch, style) {
984
+ if (!rotation || proxy) return {};
985
+ return {
986
+ transform: appendTransform(rectPatch.transform ?? style?.transform, `rotate(${rotation}deg)`),
987
+ transformOrigin: rectPatch.transformOrigin ?? "center"
988
+ };
989
+ }
990
+ /** CSS framing is a pure projection of the resolved source and per-use transform. */
991
+ function deriveMediaFramingStyle(source, transform, proxy, style) {
992
+ if (!transform.rect && !transform.hotspot && !transform.rotation) return style;
993
+ const rectPatch = rectFramingPatch(source, transform.rect, proxy, style);
994
+ return mergeStyles(style, {
995
+ ...rectPatch,
996
+ ...hotspotFramingPatch(transform, proxy, rectPatch, style),
997
+ ...rotationFramingPatch(transform.rotation, proxy, rectPatch, style)
998
+ });
999
+ }
1000
+ function computeMediaTransformStyle(value, style, targetAspectRatio, options, context) {
1001
+ const source = resolveRuntimeMedia(value, context ?? getCurrentResolveImageUrlContext());
1149
1002
  const transform = options?.resolvedTransform ?? resolveMediaTransformForAspect(value.transform, targetAspectRatio);
1150
- const rect = transform.rect;
1151
- const hotspot = transform.hotspot;
1152
- const rotation = transform.rotation;
1153
- if (!rect && !hotspot && !rotation) return style;
1154
- const stylePatch = {};
1155
- const heuristicSuppressCss = Boolean(isExplicitCropProxyEnabled() && value.assetId && (typeof rotation === "number" && rotation !== 0 || isExplicitRectCrop(rect, getValidSourceDimension(value.width), getValidSourceDimension(value.height))));
1156
- const shouldSuppressCss = options?.isProxy ?? heuristicSuppressCss;
1157
- if (rect && !shouldSuppressCss) {
1158
- const rectPatch = buildCssRectStylePatch(value, rect);
1159
- if (rectPatch) {
1160
- const mergedRect = applyRectTransform(style, rectPatch);
1161
- Object.assign(stylePatch, mergedRect);
1162
- }
1163
- }
1164
- if (hotspot) {
1165
- const effectiveObjectFit = stylePatch.objectFit ?? style?.objectFit;
1166
- if ((!effectiveObjectFit || effectiveObjectFit === "cover" || effectiveObjectFit === "contain") && stylePatch.objectPosition === void 0) {
1167
- const resolved = shouldSuppressCss && rotation ? rotateNormalizedPoint({
1168
- x: hotspot.x,
1169
- y: hotspot.y
1170
- }, rotation) : {
1171
- x: hotspot.x,
1172
- y: hotspot.y
1173
- };
1174
- stylePatch.objectPosition = `${resolved.x * 100}% ${resolved.y * 100}%`;
1175
- }
1176
- }
1177
- if (rotation && !shouldSuppressCss) {
1178
- const existingTransform = stylePatch.transform ?? style?.transform;
1179
- stylePatch.transform = existingTransform ? `${existingTransform} rotate(${rotation}deg)` : `rotate(${rotation}deg)`;
1180
- if (!stylePatch.transformOrigin) stylePatch.transformOrigin = "center";
1181
- }
1182
- return mergeStyles(style, stylePatch);
1003
+ return deriveMediaFramingStyle(source, transform, options?.isProxy ?? usesProxyFraming(source, transform), style);
1183
1004
  }
1184
1005
  function resolveTargetAspectRatio(size) {
1185
1006
  if ("original" in size) return void 0;
@@ -1212,8 +1033,12 @@ function resolveImageUrlWithContextResult(value, options, context, transformAspe
1212
1033
  kind: "resolved",
1213
1034
  url
1214
1035
  };
1215
- const canonical = resolveMediaWithCanonicalAsset(value, context ?? void 0);
1216
- if (canonical.storagePath && canonical.storagePath.length > 0) return resolveMediaStorageUrlResult(canonical, context, buildDirectTransformOptions(options));
1036
+ const canonical = resolveRuntimeMedia(value, context ?? void 0);
1037
+ if (!canonical) return {
1038
+ kind: "missing-image-url",
1039
+ identifier: value.identifier
1040
+ };
1041
+ if (canonical.storagePath) return resolveResolvedMediaStorageUrlResult(canonical, context, buildDirectTransformOptions(options));
1217
1042
  return {
1218
1043
  kind: "missing-image-url",
1219
1044
  assetId: canonical.assetId,
@@ -1222,7 +1047,11 @@ function resolveImageUrlWithContextResult(value, options, context, transformAspe
1222
1047
  }
1223
1048
  function resolveImageUrlWithContextInternal(value, options, context, transformAspectRatio, resolved) {
1224
1049
  if (value.type !== "image") return void 0;
1225
- const canonical = resolveMediaWithCanonicalAsset(value, context);
1050
+ const canonical = resolveRuntimeMedia(value, context);
1051
+ if (!canonical) return void 0;
1052
+ return resolveImageUrlForSource(canonical, options, context, transformAspectRatio, resolved);
1053
+ }
1054
+ function resolveImageUrlForSource(canonical, options, context, transformAspectRatio, resolved) {
1226
1055
  debugMediaNodeLog("resolveImageUrl input", {
1227
1056
  assetId: canonical.assetId,
1228
1057
  storagePath: canonical.storagePath,
@@ -1238,86 +1067,78 @@ function resolveImageUrlWithContextInternal(value, options, context, transformAs
1238
1067
  debugMediaNodeLog("resolve:explicit-src", { src: canonical.src });
1239
1068
  return canonical.src;
1240
1069
  }
1241
- const legacyUrl = typeof canonical === "object" && canonical !== null ? Reflect.get(canonical, "url") : void 0;
1242
- debugMediaNodeLog("resolve:fallback-url", { fallbackUrl: typeof legacyUrl === "string" ? legacyUrl : null });
1243
- return typeof legacyUrl === "string" ? legacyUrl : void 0;
1244
1070
  }
1245
- function resolveImageSourceSetWithContext(value, options, context) {
1246
- const normalizedContext = context ?? void 0;
1247
- if (value.type !== "image") return void 0;
1248
- const canonical = resolveMediaWithCanonicalAsset(value, normalizedContext);
1249
- const widthCandidates = normalizeWidthCandidates(options.widthCandidates, MAX_SRCSET_WIDTH);
1250
- if (widthCandidates.length === 0) return void 0;
1071
+ function deriveResponsiveMediaPlan(source, options) {
1251
1072
  const targetAspectRatio = getPositiveAspectRatio(options.targetAspectRatio);
1252
- const quality = options.quality;
1253
- const resize = options.resize;
1254
- const resolvedTransform = resolveMediaTransformForAspect(canonical.transform, targetAspectRatio);
1255
- const sourceWidth = getValidSourceDimension(canonical.width);
1256
- const sourceHeight = getValidSourceDimension(canonical.height);
1257
- const hasExplicitRectCrop = isExplicitRectCrop(resolvedTransform.rect, sourceWidth, sourceHeight);
1073
+ const transform = resolveTransformResolution(source, targetAspectRatio);
1074
+ const explicitRect = isExplicitRectCrop(transform.resolvedTransform.rect, transform.sourceWidth, transform.sourceHeight);
1258
1075
  const coverFactor = resolveCoverFactor({
1259
- resize,
1076
+ resize: options.resize,
1260
1077
  targetAspectRatio,
1261
- hasExplicitRectCrop,
1262
- sourceWidth,
1263
- sourceHeight
1078
+ hasExplicitRectCrop: explicitRect,
1079
+ sourceWidth: transform.sourceWidth,
1080
+ sourceHeight: transform.sourceHeight
1264
1081
  });
1265
- const shouldProxy = Boolean(isExplicitCropProxyEnabled() && canonical.assetId && (hasExplicitRectCrop || typeof resolvedTransform.rotation === "number" && resolvedTransform.rotation !== 0));
1266
- const effectiveSizes = coverFactor > 1 && typeof options.sizes === "string" && options.sizes.length > 0 ? scaleSizesAttribute(options.sizes, coverFactor) : options.sizes;
1267
- const srcSetParts = widthCandidates.map((width) => {
1268
- const height = shouldProxy && hasExplicitRectCrop ? getHeightForAspect(width, targetAspectRatio) : void 0;
1269
- const effectiveResize = height ? resize : "contain";
1270
- const url = resolveImageUrlWithContextInternal(canonical, height ? {
1271
- width,
1272
- height,
1273
- resize: effectiveResize,
1274
- quality
1275
- } : {
1276
- width,
1277
- resize: effectiveResize,
1278
- quality
1279
- }, normalizedContext, targetAspectRatio, {
1280
- resolvedTransform,
1281
- sourceWidth,
1282
- sourceHeight
1283
- });
1284
- if (!url) return null;
1285
- return `${url} ${width}w`;
1286
- }).filter((entry) => entry !== null);
1287
- if (srcSetParts.length === 0) return void 0;
1288
- const fallbackWidth = widthCandidates[Math.min(2, widthCandidates.length - 1)];
1289
- if (fallbackWidth === void 0) return void 0;
1290
- const defaultWidth = options.defaultWidth ?? fallbackWidth;
1291
- const scaledDefaultWidth = coverFactor > 1 ? Math.round(defaultWidth * coverFactor) : defaultWidth;
1292
- const nearestWidth = widthCandidates.find((candidate) => candidate >= scaledDefaultWidth) ?? widthCandidates[widthCandidates.length - 1];
1293
- if (nearestWidth === void 0) return void 0;
1294
- const defaultHeight = shouldProxy && hasExplicitRectCrop ? getHeightForAspect(nearestWidth, targetAspectRatio) : void 0;
1295
- const effectiveDefaultResize = defaultHeight ? resize : "contain";
1296
- const src = resolveImageUrlWithContextInternal(canonical, defaultHeight ? {
1297
- width: nearestWidth,
1298
- height: defaultHeight,
1299
- resize: effectiveDefaultResize,
1300
- quality
1082
+ return {
1083
+ widthCandidates: normalizeWidthCandidates(options.widthCandidates, MAX_SRCSET_WIDTH),
1084
+ sizes: scaledResponsiveSizes(options.sizes, coverFactor),
1085
+ targetAspectRatio,
1086
+ quality: options.quality,
1087
+ resize: options.resize,
1088
+ transform,
1089
+ proxy: usesProxyFraming(source, transform.resolvedTransform),
1090
+ explicitRect,
1091
+ coverFactor
1092
+ };
1093
+ }
1094
+ function scaledResponsiveSizes(sizes, factor) {
1095
+ return sizes && factor > 1 ? scaleSizesAttribute(sizes, factor) : sizes;
1096
+ }
1097
+ function responsiveMediaOptions(width, plan) {
1098
+ const height = plan.proxy && plan.explicitRect ? getHeightForAspect(width, plan.targetAspectRatio) : void 0;
1099
+ return height ? {
1100
+ width,
1101
+ height,
1102
+ resize: plan.resize,
1103
+ quality: plan.quality
1301
1104
  } : {
1302
- width: nearestWidth,
1303
- resize: effectiveDefaultResize,
1304
- quality
1305
- }, normalizedContext, targetAspectRatio, {
1306
- resolvedTransform,
1307
- sourceWidth,
1308
- sourceHeight
1309
- });
1310
- if (!src) return void 0;
1311
- const fallbackSrc = shouldProxy ? getDirectImageUrlForValue(canonical, {
1312
- width: nearestWidth,
1105
+ width,
1313
1106
  resize: "contain",
1314
- quality
1315
- }, normalizedContext) : void 0;
1107
+ quality: plan.quality
1108
+ };
1109
+ }
1110
+ function defaultResponsiveWidth(plan, requested) {
1111
+ const fallback = plan.widthCandidates[Math.min(2, plan.widthCandidates.length - 1)];
1112
+ if (fallback === void 0) return void 0;
1113
+ const target = Math.round((requested ?? fallback) * plan.coverFactor);
1114
+ return plan.widthCandidates.find((candidate) => candidate >= target) ?? plan.widthCandidates.at(-1);
1115
+ }
1116
+ function responsiveSourceSet(source, plan, context) {
1117
+ return plan.widthCandidates.flatMap((width) => {
1118
+ const url = resolveImageUrlForSource(source, responsiveMediaOptions(width, plan), context, plan.targetAspectRatio, plan.transform);
1119
+ return url ? [`${url} ${width}w`] : [];
1120
+ }).join(", ");
1121
+ }
1122
+ function resolveImageSourceSetWithContext(value, options, context) {
1123
+ if (value.type !== "image") return void 0;
1124
+ const source = resolveRuntimeMedia(value, context ?? void 0);
1125
+ if (!source) return void 0;
1126
+ const plan = deriveResponsiveMediaPlan(source, options);
1127
+ const width = defaultResponsiveWidth(plan, options.defaultWidth);
1128
+ if (width === void 0) return void 0;
1129
+ const srcSet = responsiveSourceSet(source, plan, context ?? void 0);
1130
+ if (!srcSet) return void 0;
1131
+ const src = resolveImageUrlForSource(source, responsiveMediaOptions(width, plan), context ?? void 0, plan.targetAspectRatio, plan.transform);
1132
+ if (!src) return void 0;
1316
1133
  return {
1317
1134
  src,
1318
- srcSet: srcSetParts.join(", "),
1319
- sizes: effectiveSizes,
1320
- fallbackSrc
1135
+ srcSet,
1136
+ sizes: plan.sizes,
1137
+ fallbackSrc: plan.proxy ? getDirectImageUrlForValue(source, {
1138
+ width,
1139
+ resize: "contain",
1140
+ quality: plan.quality
1141
+ }, context ?? void 0) : void 0
1321
1142
  };
1322
1143
  }
1323
1144
  function resolveCoverFactor(input) {
@@ -1420,4 +1241,4 @@ function mediaImageHostProps(props, style) {
1420
1241
  };
1421
1242
  }
1422
1243
  //#endregion
1423
- export { getCurrentResolveImageUrlContext as a, renderVideo as c, setContextResolveImageUrlContext as d, computeMediaTransformStyle as i, resolveImageUrlWithContext as l, MediaPlaceholder as n, mediaImageHostProps as o, buildResolveImageUrlContext as r, renderAudio as s, ImagePresets as t, resolveMediaNodeResponsiveImage as u };
1244
+ export { renderAudio as a, resolveMediaNodeResponsiveImage as c, mediaImageHostProps as i, MediaPlaceholder as n, renderVideo as o, computeMediaTransformStyle as r, resolveImageUrlWithContext as s, ImagePresets as t };