@riverbankcms/sdk 0.152.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 (178) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/{EventEmbeddedCheckoutStep-DVQXWFm6.mjs → EventEmbeddedCheckoutStep-veN-QiAE.mjs} +1 -1
  3. package/dist/{PreviewEditorSidebar-Dr4NJi3Q.mjs → PreviewEditorSidebar-jI_4DTZY.mjs} +4 -4
  4. package/dist/{PreviewEditorUI-DSZXQbyh.mjs → PreviewEditorUI-ORkVZhfu.mjs} +3 -3
  5. package/dist/{SdkPreviewModeRuntime-Dl4GyMc3.mjs → SdkPreviewModeRuntime-DaNqevI1.mjs} +221 -115
  6. package/dist/{SiteChromeCustomizeContext-DgBe-FlM.mjs → SiteChromeCustomizeContext-CgNuBHC0.mjs} +1798 -2024
  7. package/dist/{ThemedButton-B8ViBnLK.mjs → ThemedButton-X2UxhW6F.mjs} +213 -38
  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/communications.d.ts +19 -5
  11. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  12. package/dist/_dts/api/src/sdkThemeWire.d.ts +186 -1434
  13. package/dist/_dts/api/src/shared-contracts.d.ts +10 -0
  14. package/dist/_dts/api/src/siteInfrastructure.d.ts +2 -1
  15. package/dist/_dts/api/src/teamMembers.d.ts +2 -27
  16. package/dist/_dts/block-form/src/widgets/RepeaterField/components/layoutGridDomain.d.ts +3 -13
  17. package/dist/_dts/blocks/src/contracts/index.d.ts +1 -0
  18. package/dist/_dts/blocks/src/index.d.ts +1 -0
  19. package/dist/_dts/blocks/src/lib/media.d.ts +1 -0
  20. package/dist/_dts/blocks/src/lib/picsum.d.ts +2 -2
  21. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +2 -1
  22. package/dist/_dts/blocks/src/system/blocks/events/eventSelectionFields.d.ts +1 -1
  23. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +196 -804
  24. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +2 -2
  25. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +1 -1
  26. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +45 -45
  27. package/dist/_dts/blocks/src/system/blocks/shared/teamMembers.d.ts +4 -7
  28. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +2 -2
  29. package/dist/_dts/blocks/src/system/customize/backgrounds.d.ts +6 -6
  30. package/dist/_dts/blocks/src/system/fields/backgroundContent.d.ts +377 -1
  31. package/dist/_dts/blocks/src/system/helpers/backgroundMedia.d.ts +6 -2
  32. package/dist/_dts/blocks/src/system/helpers/resolveBackground.d.ts +3 -3
  33. package/dist/_dts/blocks/src/system/layout/repeaterGrid.d.ts +12 -5
  34. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +3 -3
  35. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +24 -24
  36. package/dist/_dts/blocks/src/system/manifest/validation.d.ts +2 -0
  37. package/dist/_dts/blocks/src/system/node/fragments/lookSlot.d.ts +1 -1
  38. package/dist/_dts/blocks/src/system/runtime/hooks/useBookingFlowController.d.ts +1 -1
  39. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +2 -0
  40. package/dist/_dts/blocks/src/system/runtime/lookSurfaces.d.ts +2 -2
  41. package/dist/_dts/blocks/src/system/runtime/nodes/ImageResolveContext.d.ts +1 -1
  42. package/dist/_dts/blocks/src/system/runtime/nodes/appointment-services.d.ts +50 -202
  43. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +28 -1
  44. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/lookPresentation.d.ts +2 -2
  45. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/presentation.d.ts +1 -1
  46. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/CardListItem.d.ts +1 -1
  47. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +276 -884
  48. package/dist/_dts/blocks/src/system/runtime/nodes/file-download.d.ts +3 -2
  49. package/dist/_dts/blocks/src/system/runtime/nodes/media.d.ts +22 -90
  50. package/dist/_dts/blocks/src/system/runtime/nodes/mediaContext.d.ts +69 -0
  51. package/dist/_dts/blocks/src/system/transforms/registry/index.d.ts +1 -0
  52. package/dist/_dts/blocks/src/system/transforms/registry/links.d.ts +3 -3
  53. package/dist/_dts/content-model/src/content-types/schema.d.ts +3 -3
  54. package/dist/_dts/core/src/mailing-list-runtime.d.ts +2 -2
  55. package/dist/_dts/core/src/mailing-list-setup-parser.d.ts +9 -1
  56. package/dist/_dts/core/src/mailing-list-setup.d.ts +9 -1
  57. package/dist/_dts/core/src/mailing-list-submission.d.ts +1 -1
  58. package/dist/_dts/core/src/mailing-list-targeting.d.ts +9 -1
  59. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +55 -4
  60. package/dist/_dts/editor-blocks/src/index.d.ts +1 -0
  61. package/dist/_dts/editor-blocks/src/media/MediaField.d.ts +2 -2
  62. package/dist/_dts/editor-blocks/src/media/admitEditorMediaField.d.ts +4 -0
  63. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/targetingState.d.ts +2 -2
  64. package/dist/_dts/media-core/src/assetsInUseSummary.d.ts +6 -0
  65. package/dist/_dts/media-core/src/contentMediaAudit.d.ts +3 -2
  66. package/dist/_dts/media-core/src/index.d.ts +4 -0
  67. package/dist/_dts/media-core/src/media.d.ts +406 -0
  68. package/dist/_dts/media-core/src/mediaIdentifierSchema.d.ts +3 -0
  69. package/dist/_dts/media-core/src/mediaKinds.d.ts +2 -0
  70. package/dist/_dts/media-core/src/mediaUsageProjection.d.ts +13 -1
  71. package/dist/_dts/media-core/src/mediaWriteNormalizer.d.ts +2 -6
  72. package/dist/_dts/media-core/src/portableMediaReferences.d.ts +8 -21
  73. package/dist/_dts/media-core/src/renderableMediaAsset.d.ts +28 -14
  74. package/dist/_dts/media-core/src/renderableMediaAssetAdmission.d.ts +15 -0
  75. package/dist/_dts/media-editor/src/CropDialog.d.ts +6 -3
  76. package/dist/_dts/media-editor/src/MediaEditor.d.ts +2 -1
  77. package/dist/_dts/media-editor/src/MediaPreview.d.ts +3 -3
  78. package/dist/_dts/media-editor/src/cropEditorSource.d.ts +5 -7
  79. package/dist/_dts/media-editor/src/editorMediaState.d.ts +29 -0
  80. package/dist/_dts/media-editor/src/mediaSelection.d.ts +1 -2
  81. package/dist/_dts/media-editor/src/runtimeMediaAssetState.d.ts +4 -5
  82. package/dist/_dts/media-editor/src/types.d.ts +1 -1
  83. package/dist/_dts/media-editor/src/utils.d.ts +0 -1
  84. package/dist/_dts/media-react/src/components/cropChangePolicy.d.ts +4 -1
  85. package/dist/_dts/media-react/src/components/cropGeometry.d.ts +1 -0
  86. package/dist/_dts/media-react/src/components/useImageCropperController.d.ts +1 -0
  87. package/dist/_dts/preview-next/src/client/blocks/BlockBackgroundChooser.d.ts +2 -1
  88. package/dist/_dts/preview-next/src/client/blocks/previewCustomizeSelectedMedia.d.ts +11 -12
  89. package/dist/_dts/sdk/src/contracts/content.d.ts +2 -45
  90. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  91. package/dist/_dts/sdk/src/contracts/rendering.d.ts +3 -3
  92. package/dist/_dts/sdk/src/index.d.ts +1 -0
  93. package/dist/_dts/sdk/src/rendering/image.d.ts +5 -5
  94. package/dist/_dts/sdk/src/rendering/index.d.ts +2 -1
  95. package/dist/_dts/sdk/src/rendering/link.d.ts +3 -7
  96. package/dist/_dts/sdk/src/rendering/mediaAssets.d.ts +2 -4
  97. package/dist/_dts/sdk/src/version.d.ts +1 -1
  98. package/dist/_dts/theme-core/src/accordions/types.d.ts +1 -1
  99. package/dist/_dts/theme-core/src/boxBackgroundSchema.d.ts +397 -26
  100. package/dist/_dts/theme-core/src/buttons/types.d.ts +21 -21
  101. package/dist/_dts/theme-core/src/cards/types.d.ts +34 -34
  102. package/dist/_dts/theme-core/src/inputs/types.d.ts +3 -3
  103. package/dist/_dts/theme-core/src/lib/media.d.ts +2 -616
  104. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +261 -2619
  105. package/dist/_dts/theme-core/src/palette/curated/types.d.ts +1 -1
  106. package/dist/_dts/theme-core/src/schema.d.ts +548 -3187
  107. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  108. package/dist/_dts/theme-core/src/site-styles/runtimeBackgroundResolution.d.ts +9 -9
  109. package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +1 -1
  110. package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +1 -1
  111. package/dist/_dts/theme-core/src/styles/skinTokens.d.ts +2 -2
  112. package/dist/_dts/theme-core/src/typography/schema.d.ts +2 -2
  113. package/dist/client/{BookingMailingListNote-CBuMKN0w.mjs → BookingMailingListNote-DrchYW1m.mjs} +2 -2
  114. package/dist/client/{CardListItem-Dc9XTXhB.mjs → CardListItem-CC_GVmF6.mjs} +5 -4
  115. package/dist/client/{CheckboxChoice-CIqx_o0E.mjs → CheckboxChoice-Dq30m3DO.mjs} +1 -1
  116. package/dist/client/{DemoBookingPortalAccess-D3VQ_kLj.mjs → DemoBookingPortalAccess-ojwbVUmx.mjs} +2 -2
  117. package/dist/client/{EventCombined.client-BHGEKise.mjs → EventCombined.client-DyN0v0Xk.mjs} +5 -6
  118. package/dist/client/{EventEmbeddedCheckoutStep-Bo1Cm23R.mjs → EventEmbeddedCheckoutStep-CgfpKc3n.mjs} +2 -2
  119. package/dist/client/{EventListing.client-D5OQgVPr.mjs → EventListing.client-CuOuvYMz.mjs} +2 -2
  120. package/dist/client/{LeafletStaticMap-CLL5cWrr.mjs → LeafletStaticMap-B0WhRr3j.mjs} +1 -1
  121. package/dist/client/{RichText-BoDmnopf.mjs → RichText-C1fIXBzA.mjs} +45 -32
  122. package/dist/client/{ThemedButton-Ciltp0IK.mjs → ThemedButton-B7HFqFBg.mjs} +1 -2
  123. package/dist/client/{accordion-DOkRS64-.mjs → accordion-DCDVWSye.mjs} +1 -1
  124. package/dist/client/{bookingForm-wlMVwo9h.mjs → bookingForm-BJ3C4GlM.mjs} +42 -15
  125. package/dist/client/bookings.mjs +116989 -22191
  126. package/dist/client/{carousel-CGWk-Z0u.mjs → carousel-BSCBhfHY.mjs} +2 -2
  127. package/dist/client/{carousel.client-kX5mN1Eg.mjs → carousel.client-GEtOGsxo.mjs} +1 -1
  128. package/dist/client/{cart-OBBPlaH4.mjs → cart-Yv-aAtck.mjs} +3 -3
  129. package/dist/client/{checkout-Bmw2WjQX.mjs → checkout-B9xDkl30.mjs} +3 -3
  130. package/dist/client/client.mjs +17577 -17361
  131. package/dist/client/{context-BI77UFAn.mjs → context-BOGe3rIA.mjs} +1 -1
  132. package/dist/client/{eventCalendar-qkej2Edn.mjs → eventCalendar-D6M0T9hs.mjs} +8 -9
  133. package/dist/client/{eventCombined-DApKHvat.mjs → eventCombined-NM4UFBq8.mjs} +4 -4
  134. package/dist/client/{eventDetails-BQyUDPH0.mjs → eventDetails-f_FhV4O8.mjs} +3 -3
  135. package/dist/client/{eventListing-CeAnshlZ.mjs → eventListing-WLkfAROh.mjs} +4 -4
  136. package/dist/client/{eventRegistration-C3A3NyBO.mjs → eventRegistration-D3ejfLvW.mjs} +10 -10
  137. package/dist/client/{form-DW8rU7jO.mjs → form-D5Or2Jyu.mjs} +4 -5
  138. package/dist/client/{headerSection-CkIhsoNm.mjs → headerSection-hWgnv27V.mjs} +3 -3
  139. package/dist/client/hooks.mjs +16014 -15751
  140. package/dist/client/{locationMap-D4O8wbli.mjs → locationMap-Di1K0O2S.mjs} +3 -4
  141. package/dist/client/{media-C5K_0xPd.mjs → media-D29-F1u_.mjs} +183 -362
  142. package/dist/client/mediaContext-CwbbimYB.mjs +135 -0
  143. package/dist/client/{newsletterForm-B7IxSPuz.mjs → newsletterForm-CwxcwTNO.mjs} +4 -4
  144. package/dist/client/{productDetail-Bqxpwy5N.mjs → productDetail-BLSnhPdA.mjs} +3 -3
  145. package/dist/client/{productList-u9Lz8V15.mjs → productList-oGytONOX.mjs} +3 -3
  146. package/dist/client/{propsDecoder-Bf1jucUp.mjs → propsDecoder-lf_dTeZS.mjs} +1467 -125
  147. package/dist/client/renderableMediaAssetAdmission-CHkXYDC_.mjs +143 -0
  148. package/dist/client/rendering/client.mjs +10855 -10689
  149. package/dist/client/rendering/islands.mjs +20 -23
  150. package/dist/client/rendering.mjs +18411 -18181
  151. package/dist/client/{routeIslandApiConfig-BgP-aPMl.mjs → routeIslandApiConfig-Bc_WVPS8.mjs} +1 -1
  152. package/dist/client/{shop-B_eykR-_.mjs → shop-BQ3bR7fA.mjs} +7 -7
  153. package/dist/client/{shop-commerce-CT0APkFV.mjs → shop-commerce-DDPll6ZC.mjs} +8 -8
  154. package/dist/client/{shop-commerce-store-DcvZxdEK.mjs → shop-commerce-store-DO-e1pTe.mjs} +1 -1
  155. package/dist/client/{shopShared-BVJOiUiJ.mjs → shopShared-BylM9jh1.mjs} +5 -5
  156. package/dist/client/{useDiscountCodeUi-DPmYDunz.mjs → useDiscountCodeUi-B1Puub2v.mjs} +1 -1
  157. package/dist/client/{useEventPagination-8-U55vH5.mjs → useEventPagination-BBhkmQaT.mjs} +6 -7
  158. package/dist/preview-next/before-render.mjs +89 -4
  159. package/dist/preview-next/client/runtime.mjs +3 -3
  160. package/dist/{sdk-runtime-C5jPdSrk.mjs → sdk-runtime-DWCvhJGu.mjs} +1 -1
  161. package/dist/server/components.mjs +18663 -18510
  162. package/dist/server/config-validation.mjs +450 -215
  163. package/dist/server/config.mjs +450 -215
  164. package/dist/server/data.mjs +15940 -15705
  165. package/dist/server/index.mjs +227 -2
  166. package/dist/server/next.mjs +18643 -18490
  167. package/dist/server/page-converter.mjs +12588 -12477
  168. package/dist/server/prebuild.mjs +1 -1
  169. package/dist/server/rendering/server.mjs +18007 -17855
  170. package/dist/server/rendering.mjs +18677 -18516
  171. package/dist/server/routing.mjs +17747 -17469
  172. package/dist/server/server.mjs +539 -276
  173. package/dist/server/theme-bridge.mjs +154 -37
  174. package/dist/server/theme.mjs +154 -37
  175. package/dist/{spinner-B-ab2rJp.mjs → spinner-BYM-Y81w.mjs} +1 -1
  176. package/package.json +1 -1
  177. package/dist/client/aspectTransforms-D-TnDdq4.mjs +0 -93
  178. package/dist/client/colorStyles-ECDNPE_P.mjs +0 -1253
@@ -1,8 +1,9 @@
1
1
  import React from 'react';
2
- import { type Media, type PublicDownloadMediaType } from '../../../lib/media';
2
+ import { type PublicDownloadMediaType } from '../../../lib/media';
3
+ import { type RuntimeMedia } from './media';
3
4
  import { type BlockButtonRole } from '../../constants/buttonRoles';
4
5
  export type FileDownloadNodeProps = Readonly<{
5
- value?: Media | null;
6
+ value?: RuntimeMedia | null;
6
7
  title?: string | null;
7
8
  description?: string | null;
8
9
  buttonLabel?: string | null;
@@ -1,6 +1,10 @@
1
1
  import React from 'react';
2
- import { type ResolvedMediaTransform, type DirectImageUrlOptions, type RenderableMediaAsset, type RenderableMediaAssetIndex } from '../../../../../media-core/src/index';
2
+ import { type RuntimeMedia, type ManagedMediaResolution, type ResolvedMediaTransform, type DirectImageUrlOptions } from '../../../../../media-core/src/index';
3
3
  import type { Media } from '../../../lib/media';
4
+ import { type ResolveImageUrlContext } from './mediaContext';
5
+ export { buildMediaAssetIndex, buildResolveImageUrlContext, getCurrentResolveImageUrlContext, getSiteId, getSupabaseUrl, runWithMediaContext, setContextSupabaseUrl, setContextSiteId, setContextMediaAssetIndex, setContextMediaAssets, setContextResolveImageUrlContext, } from './mediaContext';
6
+ export type { MediaAssetIndex, MediaAssetIndexItem, ResolveImageUrlContext, ResolveImageUrlContextInput } from './mediaContext';
7
+ export type { RuntimeMedia } from '../../../../../media-core/src/index';
4
8
  /**
5
9
  * Options for image URL resolution.
6
10
  * Requires either dimensions or explicit original request.
@@ -18,24 +22,6 @@ export type ImageOptions = {
18
22
  } | {
19
23
  original: true;
20
24
  };
21
- export type ResolveImageUrlContext = {
22
- supabaseUrl?: string;
23
- siteId?: string;
24
- /**
25
- * Optional per-call media asset index for resolving identifier-only media values
26
- * without mutating persisted content shapes.
27
- */
28
- mediaAssetIndex?: MediaAssetIndex;
29
- };
30
- export type ResolveImageUrlContextInput = Readonly<{
31
- supabaseUrl?: string;
32
- siteId?: string;
33
- mediaAssetIndex?: MediaAssetIndex;
34
- mediaAssets?: readonly MediaAssetIndexItem[];
35
- }>;
36
- export type MediaAssetIndexItem = RenderableMediaAsset;
37
- export type MediaAssetIndex = RenderableMediaAssetIndex;
38
- export declare function buildMediaAssetIndex(assets: readonly MediaAssetIndexItem[] | undefined): MediaAssetIndex | undefined;
39
25
  export type ResolveImageSourceSetOptions = {
40
26
  widthCandidates?: readonly number[];
41
27
  sizes?: string;
@@ -78,9 +64,8 @@ export type MediaUrlResolution = Readonly<{
78
64
  assetId?: string;
79
65
  identifier?: string | null;
80
66
  }>;
81
- export declare function buildResolveImageUrlContext(input: ResolveImageUrlContextInput | undefined): ResolveImageUrlContext;
82
- export declare function resolveMediaStorageUrl(value: Media, context?: ResolveImageUrlContext | null, transformOptions?: DirectImageUrlOptions): string | undefined;
83
- export declare function resolveMediaStorageUrlResult(value: Media, context?: ResolveImageUrlContext | null, transformOptions?: DirectImageUrlOptions): MediaUrlResolution;
67
+ export declare function resolveMediaStorageUrl(value: RuntimeMedia, context?: ResolveImageUrlContext | null, transformOptions?: DirectImageUrlOptions): string | undefined;
68
+ export declare function resolveMediaStorageUrlResult(value: RuntimeMedia, context?: ResolveImageUrlContext | null, transformOptions?: DirectImageUrlOptions): MediaUrlResolution;
84
69
  /**
85
70
  * Common image size presets.
86
71
  * Use these for consistent sizing across the application.
@@ -111,68 +96,15 @@ export declare const ImagePresets: {
111
96
  readonly resize: "contain";
112
97
  };
113
98
  };
114
- /**
115
- * Media context for URL resolution.
116
- * Contains site-specific values needed to build storage URLs.
117
- */
118
- type MediaContext = {
119
- supabaseUrl?: string;
120
- siteId?: string;
121
- mediaAssetIndex?: MediaAssetIndex;
122
- };
123
- /**
124
- * Run a function with the given media context.
125
- * On server: Uses AsyncLocalStorage to isolate context per request.
126
- * On client: Temporarily sets module-level context for the duration of the call.
127
- *
128
- * @example
129
- * ```tsx
130
- * runWithMediaContext(
131
- * { supabaseUrl: 'https://...', siteId: 'abc-123' },
132
- * () => renderPage(page)
133
- * )
134
- * ```
135
- */
136
- export declare function runWithMediaContext<T>(context: MediaContext, fn: () => T): T;
137
- /**
138
- * Set the Supabase URL in the current context.
139
- * @deprecated Use runWithMediaContext instead for request isolation.
140
- */
141
- export declare function setContextSupabaseUrl(url: string | undefined): void;
142
- /**
143
- * Set the site ID in the current context.
144
- * @deprecated Use runWithMediaContext instead for request isolation.
145
- */
146
- export declare function setContextSiteId(siteId: string | undefined): void;
147
- export declare function setContextMediaAssetIndex(index: MediaAssetIndex | undefined): void;
148
- export declare function setContextResolveImageUrlContext(context: ResolveImageUrlContext | undefined): void;
149
- export declare function getCurrentResolveImageUrlContext(): ResolveImageUrlContext | undefined;
150
- export declare function setContextMediaAssets(assets: readonly MediaAssetIndexItem[] | undefined): void;
151
- /**
152
- * Get the Supabase URL for constructing direct storage URLs.
153
- * Used for serving images directly from Supabase storage CDN.
154
- *
155
- * Resolution order:
156
- * 1. Context URL (set via runWithMediaContext or setContextSupabaseUrl)
157
- * 2. Environment variable NEXT_PUBLIC_SUPABASE_URL
158
- *
159
- * SDK sites receive the URL from the API, so they don't need the env var.
160
- * Dashboard and frontend apps use the env var.
161
- */
162
- export declare function getSupabaseUrl(): string;
163
- /**
164
- * Get the site ID for constructing storage paths.
165
- * Required for relative path resolution.
166
- */
167
- export declare function getSiteId(): string | undefined;
168
- export declare function resolveVideoPosterUrl(value: Media, context?: ResolveImageUrlContext | null): string | undefined;
169
- export declare function resolveMediaWithContext<TMedia extends Media>(value: TMedia, context?: ResolveImageUrlContext | null): TMedia;
99
+ /** Resolve portable content without exposing runtime metadata as saved values. */
100
+ export declare function resolveMediaWithContext<TReference extends Media>(reference: TReference, context?: ResolveImageUrlContext | null): ManagedMediaResolution<TReference>;
101
+ export declare function resolveVideoPosterUrl(value: RuntimeMedia, context?: ResolveImageUrlContext | null): string | undefined;
170
102
  export type MediaImageLoading = NonNullable<React.ImgHTMLAttributes<HTMLImageElement>['loading']>;
171
103
  export type MediaImageFetchPriority = NonNullable<React.ImgHTMLAttributes<HTMLImageElement>['fetchPriority']>;
172
104
  export type MediaNodeProps = {
173
105
  "data-slot"?: string;
174
106
  "data-surface"?: string;
175
- value?: Media | null;
107
+ value?: RuntimeMedia | null;
176
108
  className?: string;
177
109
  style?: React.CSSProperties;
178
110
  children?: React.ReactNode;
@@ -196,7 +128,7 @@ export type MediaNodeProps = {
196
128
  imageResolveContext?: ResolveImageUrlContext | null;
197
129
  };
198
130
  export type VideoPlaybackMode = 'inline' | 'background';
199
- export declare function resolveMediaNodeResponsiveImage(value: Media, size: ImageOptions, style: React.CSSProperties | undefined, slot: {
131
+ export declare function resolveMediaNodeResponsiveImage(value: RuntimeMedia, size: ImageOptions, style: React.CSSProperties | undefined, slot: {
200
132
  fieldPath?: string;
201
133
  blockKind?: string | null;
202
134
  blockContent?: unknown;
@@ -207,14 +139,15 @@ export declare function resolveMediaNodeResponsiveImage(value: Media, size: Imag
207
139
  resolvedTransform?: ResolvedMediaTransform;
208
140
  isProxy?: boolean;
209
141
  };
210
- export declare function renderVideo(value: Media, className?: string, style?: React.CSSProperties, context?: ResolveImageUrlContext | null, options?: {
142
+ export declare function renderVideo(value: RuntimeMedia, className?: string, style?: React.CSSProperties, context?: ResolveImageUrlContext | null, options?: {
211
143
  playback?: VideoPlaybackMode;
212
144
  }): React.ReactElement | null;
213
- export declare function renderAudio(value: Media, className?: string, style?: React.CSSProperties, context?: ResolveImageUrlContext | null): React.ReactElement | null;
214
- export declare function computeMediaTransformStyle(value: Media, style?: React.CSSProperties, targetAspectRatio?: number | string, options?: {
145
+ export declare function resolvePublicMediaUrl(value: RuntimeMedia, context?: ResolveImageUrlContext | null): string | undefined;
146
+ export declare function renderAudio(value: RuntimeMedia, className?: string, style?: React.CSSProperties, context?: ResolveImageUrlContext | null): React.ReactElement | null;
147
+ export declare function computeMediaTransformStyle(value: RuntimeMedia, style?: React.CSSProperties, targetAspectRatio?: number | string, options?: {
215
148
  resolvedTransform?: ResolvedMediaTransform;
216
149
  isProxy?: boolean;
217
- }): React.CSSProperties | undefined;
150
+ }, context?: ResolveImageUrlContext | null): React.CSSProperties | undefined;
218
151
  export declare const computeHotspotStyle: typeof computeMediaTransformStyle;
219
152
  export declare function resolveTargetAspectRatio(size: ImageOptions): number | undefined;
220
153
  export declare function MediaPlaceholder({ className, style, fieldPath, authoring, }: {
@@ -246,10 +179,9 @@ export declare const MediaNode: React.FC<MediaNodeProps>;
246
179
  * resolveImageUrl(media, { original: true })
247
180
  * ```
248
181
  */
249
- export declare function resolveImageUrl(value: Media, options: ImageOptions, context?: ResolveImageUrlContext | null): string | undefined;
250
- export declare function resolveImageUrlResult(value: Media, options: ImageOptions, context?: ResolveImageUrlContext | null): MediaUrlResolution;
251
- export declare function resolveImageUrlWithContext(value: Media, options: ImageOptions, context?: ResolveImageUrlContext | null, transformAspectRatio?: number | string): string | undefined;
252
- export declare function resolveImageUrlWithContextResult(value: Media, options: ImageOptions, context?: ResolveImageUrlContext | null, transformAspectRatio?: number | string): MediaUrlResolution;
253
- export declare function resolveImageSourceSetWithContext(value: Media, options: ResolveImageSourceSetOptions, context?: ResolveImageUrlContext | null): ResolvedImageSourceSet | undefined;
182
+ export declare function resolveImageUrl(value: RuntimeMedia, options: ImageOptions, context?: ResolveImageUrlContext | null): string | undefined;
183
+ export declare function resolveImageUrlResult(value: RuntimeMedia, options: ImageOptions, context?: ResolveImageUrlContext | null): MediaUrlResolution;
184
+ export declare function resolveImageUrlWithContext(value: RuntimeMedia, options: ImageOptions, context?: ResolveImageUrlContext | null, transformAspectRatio?: number | string): string | undefined;
185
+ export declare function resolveImageUrlWithContextResult(value: RuntimeMedia, options: ImageOptions, context?: ResolveImageUrlContext | null, transformAspectRatio?: number | string): MediaUrlResolution;
186
+ export declare function resolveImageSourceSetWithContext(value: RuntimeMedia, options: ResolveImageSourceSetOptions, context?: ResolveImageUrlContext | null): ResolvedImageSourceSet | undefined;
254
187
  export declare function mediaImageHostProps(props: Pick<MediaNodeProps, 'value' | 'className' | 'loading' | 'fetchPriority' | 'data-slot' | 'data-surface'>, style: React.CSSProperties | undefined): React.ImgHTMLAttributes<HTMLImageElement> & Pick<MediaNodeProps, 'data-slot' | 'data-surface'>;
255
- export {};
@@ -0,0 +1,69 @@
1
+ import { type RenderableMediaAsset, type RenderableMediaAssetIndex } from '../../../../../media-core/src/index';
2
+ export type ResolveImageUrlContext = {
3
+ supabaseUrl?: string;
4
+ siteId?: string;
5
+ /**
6
+ * Optional per-call media asset index for resolving identifier-only media values
7
+ * without mutating persisted content shapes.
8
+ */
9
+ mediaAssetIndex?: MediaAssetIndex;
10
+ };
11
+ export type ResolveImageUrlContextInput = Readonly<{
12
+ supabaseUrl?: string;
13
+ siteId?: string;
14
+ mediaAssetIndex?: MediaAssetIndex;
15
+ mediaAssets?: readonly MediaAssetIndexItem[];
16
+ }>;
17
+ export type MediaAssetIndexItem = RenderableMediaAsset;
18
+ export type MediaAssetIndex = RenderableMediaAssetIndex;
19
+ export declare function buildMediaAssetIndex(assets: readonly MediaAssetIndexItem[] | undefined): MediaAssetIndex | undefined;
20
+ export declare function buildResolveImageUrlContext(input: ResolveImageUrlContextInput | undefined): ResolveImageUrlContext;
21
+ /**
22
+ * Media context for URL resolution.
23
+ * Contains site-specific values needed to build storage URLs.
24
+ */
25
+ type MediaContext = {
26
+ supabaseUrl?: string;
27
+ siteId?: string;
28
+ mediaAssetIndex?: MediaAssetIndex;
29
+ };
30
+ /**
31
+ * Run a function with the given media context.
32
+ * On server: Uses AsyncLocalStorage to isolate context per request.
33
+ * On client: Temporarily sets module-level context for the duration of the call.
34
+ *
35
+ * @example
36
+ * ```tsx
37
+ * runWithMediaContext(
38
+ * { supabaseUrl: 'https://...', siteId: 'abc-123' },
39
+ * () => renderPage(page)
40
+ * )
41
+ * ```
42
+ */
43
+ export declare function runWithMediaContext<T>(context: MediaContext, fn: () => T): T;
44
+ export declare function setContextSupabaseUrl(url: string | undefined): void;
45
+ /** @deprecated Use runWithMediaContext for request isolation. */
46
+ export declare function setContextSiteId(siteId: string | undefined): void;
47
+ export declare function setContextMediaAssetIndex(index: MediaAssetIndex | undefined): void;
48
+ export declare function setContextResolveImageUrlContext(context: ResolveImageUrlContext | undefined): void;
49
+ export declare function getCurrentResolveImageUrlContext(): ResolveImageUrlContext | undefined;
50
+ export declare function setContextMediaAssets(assets: readonly MediaAssetIndexItem[] | undefined): void;
51
+ /**
52
+ * Get the Supabase URL for constructing direct storage URLs.
53
+ * Used for serving images directly from Supabase storage CDN.
54
+ *
55
+ * Resolution order:
56
+ * 1. Context URL (set via runWithMediaContext or setContextSupabaseUrl)
57
+ * 2. Environment variable NEXT_PUBLIC_SUPABASE_URL
58
+ *
59
+ * SDK sites receive the URL from the API, so they don't need the env var.
60
+ * Dashboard and frontend apps use the env var.
61
+ */
62
+ export declare function getSupabaseUrl(): string;
63
+ /**
64
+ * Get the site ID for constructing storage paths.
65
+ * Required for relative path resolution.
66
+ */
67
+ export declare function getSiteId(): string | undefined;
68
+ export declare function getMediaAssetIndex(context?: ResolveImageUrlContext): MediaAssetIndex | undefined;
69
+ export {};
@@ -13,3 +13,4 @@ export declare const defaultTransforms: import("./core").TransformRegistry;
13
13
  export { boxStyleClassNames } from "./_utils/boxStyleClassNames";
14
14
  export { formattingTransforms, layoutTransforms, chromeLogoTransforms, uiTransforms, mediaTransforms, backgroundTransforms, linksTransforms, boxStylesTransforms, contentTransforms, headerRuntimeTransforms, };
15
15
  export { resolveAuthoredLinkHref } from './links';
16
+ export type { LinkResolverContext } from '../../links/resolve';
@@ -1,6 +1,6 @@
1
- import type { TransformContext, TransformDefinition } from "./core";
2
- export type LinkResolutionContext = Pick<TransformContext, 'routes' | 'pagesByIdentifier' | 'entriesByIdentifier' | 'stage'>;
1
+ import type { TransformDefinition } from "./core";
2
+ import { type LinkResolverContext } from "../../links/resolve";
3
3
  export declare const resolveLinkTransform: TransformDefinition;
4
4
  export declare const linkLabelTransform: TransformDefinition;
5
5
  export declare const linksTransforms: TransformDefinition[];
6
- export declare function resolveAuthoredLinkHref(value: unknown, context?: LinkResolutionContext): string | null;
6
+ export declare function resolveAuthoredLinkHref(value: unknown, context?: LinkResolverContext): string | null;
@@ -12,14 +12,14 @@ declare const BaseContentFieldSchema: z.ZodObject<{
12
12
  text: "text";
13
13
  group: "group";
14
14
  url: "url";
15
+ file: "file";
16
+ datetime: "datetime";
15
17
  textarea: "textarea";
16
18
  select: "select";
17
19
  media: "media";
18
20
  reference: "reference";
19
- repeater: "repeater";
20
- file: "file";
21
- datetime: "datetime";
22
21
  button: "button";
22
+ repeater: "repeater";
23
23
  richText: "richText";
24
24
  }>;
25
25
  label: z.ZodOptional<z.ZodString>;
@@ -1,6 +1,6 @@
1
1
  import type { BrevoListId, MailchimpAudienceId, MailchimpInterestId } from './mailing-list-identifiers';
2
2
  import { type Result } from './result';
3
- import type { MailingListGlobalForm, MailingListSetupRevision, NativeMailingListTopicId } from './mailing-list-setup';
3
+ import type { MailingListGlobalForm, MailingListSetupRevision, NativeMailingListTopicId, NewsletterAudience } from './mailing-list-setup';
4
4
  export type MailingListRuntimeContext = Readonly<{
5
5
  tag: 'not_configured';
6
6
  }> | Readonly<{
@@ -12,7 +12,7 @@ export type MailingListRuntimeContext = Readonly<{
12
12
  }>;
13
13
  export type MailingListRuntimeProvider = Readonly<{
14
14
  provider: 'native';
15
- defaultTopicId: NativeMailingListTopicId;
15
+ defaultAudience: NewsletterAudience;
16
16
  topics: readonly Readonly<{
17
17
  id: NativeMailingListTopicId;
18
18
  name: string;
@@ -1,5 +1,12 @@
1
- import type { ConfiguredMailingListProvider, MailingListGlobalForm, MailingListSetupRevision, MailingListSiteSetup } from './mailing-list-setup';
1
+ import type { ConfiguredMailingListProvider, MailingListGlobalForm, MailingListSetupRevision, MailingListSiteSetup, NewsletterAudience } from './mailing-list-setup';
2
2
  import { type Result } from './result';
3
+ import { z } from 'zod';
4
+ export declare const newsletterAudienceSchema: z.ZodPipe<z.ZodUnknown, z.ZodTransform<Readonly<{
5
+ kind: "general";
6
+ }> | Readonly<{
7
+ kind: "topic";
8
+ topicId: import("./mailing-list-setup").NativeMailingListTopicId;
9
+ }>, unknown>>;
3
10
  export type MailingListSetupParseError = Readonly<{
4
11
  tag: 'invalid_mailing_list_setup';
5
12
  field: 'shape' | 'tag' | 'siteId' | 'revision' | 'form' | 'provider' | 'connectionId' | 'accountId' | 'defaultTargetId' | 'confirmation';
@@ -11,4 +18,5 @@ export type MailingListGlobalFormParseError = Readonly<{
11
18
  export declare function parseMailingListGlobalForm(value: unknown): Result<MailingListGlobalForm, MailingListGlobalFormParseError>;
12
19
  export declare function parseMailingListSiteSetup(value: unknown): Result<MailingListSiteSetup, MailingListSetupParseError>;
13
20
  export declare function parseConfiguredMailingListProvider(value: unknown): Result<ConfiguredMailingListProvider, MailingListSetupParseError>;
21
+ export declare function parseNewsletterAudience(value: unknown): Result<NewsletterAudience, 'invalid_newsletter_audience'>;
14
22
  export declare function parseMailingListSetupRevision(value: unknown): MailingListSetupRevision | null;
@@ -5,6 +5,14 @@ export type MailingListProvider = 'native' | 'mailchimp' | 'brevo';
5
5
  /** The name shown to people for each provider; the native one is the product brand. */
6
6
  export declare function mailingListProviderName(provider: MailingListProvider): string;
7
7
  export type NativeMailingListTopicId = NewsletterListId;
8
+ /** An explicit subscription scope; absence of a topic never grants general consent. */
9
+ export type NewsletterAudience = Readonly<{
10
+ kind: 'general';
11
+ }> | Readonly<{
12
+ kind: 'topic';
13
+ topicId: NativeMailingListTopicId;
14
+ }>;
15
+ export declare function sameNewsletterAudience(left: NewsletterAudience, right: NewsletterAudience): boolean;
8
16
  export type MailingListSetupRevision = Brand<number, 'MailingListSetupRevision'>;
9
17
  export type MailingListProfileField = 'name' | 'first_name' | 'last_name' | 'company' | 'phone';
10
18
  export type MailingListGlobalFields = Readonly<{
@@ -48,7 +56,7 @@ export type BrevoConfirmation = Readonly<{
48
56
  }>;
49
57
  export type NativeMailingListSetup = Readonly<{
50
58
  provider: 'native';
51
- defaultTopicId: NativeMailingListTopicId;
59
+ defaultAudience: NewsletterAudience;
52
60
  confirmation: ToggleConfirmation;
53
61
  }>;
54
62
  export type MailchimpMailingListSetup = Readonly<{
@@ -185,7 +185,7 @@ export type MailingListPublicSignupResponse = Readonly<{
185
185
  reason: 'profile_rejected';
186
186
  }> | Readonly<{
187
187
  tag: 'unavailable';
188
- reason: 'configuration_unavailable' | 'stale_configuration' | 'authentication_failed' | 'target_unavailable' | 'rate_limited' | 'temporarily_unavailable';
188
+ reason: 'confirmation_email_failed' | 'configuration_unavailable' | 'stale_configuration' | 'authentication_failed' | 'target_unavailable' | 'rate_limited' | 'temporarily_unavailable';
189
189
  }> | Readonly<{
190
190
  tag: 'uncertain';
191
191
  reason: 'deadline_exceeded' | 'network_interrupted';
@@ -5,11 +5,19 @@ import { type Result } from './result';
5
5
  export type MailingListDefaultTargeting = Readonly<{
6
6
  mode: 'default';
7
7
  }>;
8
+ export type NativeMailingListAudience = Readonly<{
9
+ kind: 'general';
10
+ }> | Readonly<{
11
+ kind: 'topics';
12
+ topicIds: ReadonlyNonEmptyArray<NativeMailingListTopicId>;
13
+ }>;
8
14
  export declare const DEFAULT_MAILING_LIST_TARGETING: MailingListDefaultTargeting;
9
15
  export type NativeMailingListCustomTargeting = Readonly<{
10
16
  mode: 'custom';
11
17
  provider: 'native';
12
18
  selection: Readonly<{
19
+ tag: 'general';
20
+ }> | Readonly<{
13
21
  tag: 'fixed';
14
22
  topicIds: ReadonlyNonEmptyArray<NativeMailingListTopicId>;
15
23
  }> | Readonly<{
@@ -55,7 +63,7 @@ export type MailingListVisitorSelection = Readonly<{
55
63
  }>;
56
64
  export type ResolvedMailingListTarget = Readonly<{
57
65
  provider: 'native';
58
- topicIds: ReadonlyNonEmptyArray<NativeMailingListTopicId>;
66
+ audience: NativeMailingListAudience;
59
67
  }> | Readonly<{
60
68
  provider: 'brevo';
61
69
  listIds: ReadonlyNonEmptyArray<BrevoListId>;
@@ -11258,7 +11258,7 @@ export type Database = {
11258
11258
  };
11259
11259
  newsletter_campaigns: {
11260
11260
  Row: {
11261
- audience_list_ids: string[];
11261
+ audience_json: Json | null;
11262
11262
  audience_tags: string[];
11263
11263
  captured_at: string | null;
11264
11264
  created_at: string;
@@ -11282,7 +11282,7 @@ export type Database = {
11282
11282
  updated_by: string | null;
11283
11283
  };
11284
11284
  Insert: {
11285
- audience_list_ids?: string[];
11285
+ audience_json?: Json | null;
11286
11286
  audience_tags?: string[];
11287
11287
  captured_at?: string | null;
11288
11288
  created_at?: string;
@@ -11306,7 +11306,7 @@ export type Database = {
11306
11306
  updated_by?: string | null;
11307
11307
  };
11308
11308
  Update: {
11309
- audience_list_ids?: string[];
11309
+ audience_json?: Json | null;
11310
11310
  audience_tags?: string[];
11311
11311
  captured_at?: string | null;
11312
11312
  created_at?: string;
@@ -11555,6 +11555,8 @@ export type Database = {
11555
11555
  anonymized_by: string | null;
11556
11556
  confirm_token_expires_at: string | null;
11557
11557
  confirm_token_hash: string | null;
11558
+ confirmation_consent_json: Json | null;
11559
+ confirmation_general_subscription: boolean;
11558
11560
  confirmation_list_ids: string[] | null;
11559
11561
  confirmation_revision: number | null;
11560
11562
  confirmed_at: string | null;
@@ -11571,6 +11573,7 @@ export type Database = {
11571
11573
  email_lower: string | null;
11572
11574
  first_name: string | null;
11573
11575
  full_name: string | null;
11576
+ general_subscribed_at: string | null;
11574
11577
  id: string;
11575
11578
  last_name: string | null;
11576
11579
  phone: string | null;
@@ -11590,6 +11593,8 @@ export type Database = {
11590
11593
  anonymized_by?: string | null;
11591
11594
  confirm_token_expires_at?: string | null;
11592
11595
  confirm_token_hash?: string | null;
11596
+ confirmation_consent_json?: Json | null;
11597
+ confirmation_general_subscription?: boolean;
11593
11598
  confirmation_list_ids?: string[] | null;
11594
11599
  confirmation_revision?: number | null;
11595
11600
  confirmed_at?: string | null;
@@ -11606,6 +11611,7 @@ export type Database = {
11606
11611
  email_lower?: string | null;
11607
11612
  first_name?: string | null;
11608
11613
  full_name?: string | null;
11614
+ general_subscribed_at?: string | null;
11609
11615
  id?: string;
11610
11616
  last_name?: string | null;
11611
11617
  phone?: string | null;
@@ -11625,6 +11631,8 @@ export type Database = {
11625
11631
  anonymized_by?: string | null;
11626
11632
  confirm_token_expires_at?: string | null;
11627
11633
  confirm_token_hash?: string | null;
11634
+ confirmation_consent_json?: Json | null;
11635
+ confirmation_general_subscription?: boolean;
11628
11636
  confirmation_list_ids?: string[] | null;
11629
11637
  confirmation_revision?: number | null;
11630
11638
  confirmed_at?: string | null;
@@ -11641,6 +11649,7 @@ export type Database = {
11641
11649
  email_lower?: string | null;
11642
11650
  first_name?: string | null;
11643
11651
  full_name?: string | null;
11652
+ general_subscribed_at?: string | null;
11644
11653
  id?: string;
11645
11654
  last_name?: string | null;
11646
11655
  phone?: string | null;
@@ -20674,6 +20683,40 @@ export type Database = {
20674
20683
  };
20675
20684
  Returns: undefined;
20676
20685
  };
20686
+ newsletter_admin_import_atomic: {
20687
+ Args: {
20688
+ p_audience: Json;
20689
+ p_rows: Json;
20690
+ p_site_id: string;
20691
+ };
20692
+ Returns: {
20693
+ created: boolean;
20694
+ error_code: string;
20695
+ row_number: number;
20696
+ subscriber_row: Database["public"]["Tables"]["newsletter_subscribers"]["Row"];
20697
+ }[];
20698
+ };
20699
+ newsletter_admin_subscribe_atomic: {
20700
+ Args: {
20701
+ p_audience: Json;
20702
+ p_consent_source: string;
20703
+ p_email: string;
20704
+ p_profile: Json;
20705
+ p_site_id: string;
20706
+ };
20707
+ Returns: {
20708
+ created: boolean;
20709
+ subscriber_row: Database["public"]["Tables"]["newsletter_subscribers"]["Row"];
20710
+ }[];
20711
+ };
20712
+ newsletter_audience_eligible: {
20713
+ Args: {
20714
+ p_audience: Json;
20715
+ p_site_id: string;
20716
+ p_subscriber: Database["public"]["Tables"]["newsletter_subscribers"]["Row"];
20717
+ };
20718
+ Returns: boolean;
20719
+ };
20677
20720
  newsletter_begin_attempt_atomic: {
20678
20721
  Args: {
20679
20722
  p_claim_token: string;
@@ -20747,7 +20790,7 @@ export type Database = {
20747
20790
  };
20748
20791
  newsletter_count_recipients: {
20749
20792
  Args: {
20750
- p_list_ids: string[];
20793
+ p_audience: Json;
20751
20794
  p_site_id: string;
20752
20795
  p_tags: string[];
20753
20796
  };
@@ -20783,6 +20826,7 @@ export type Database = {
20783
20826
  newsletter_preferences_atomic: {
20784
20827
  Args: {
20785
20828
  p_campaign_id?: string;
20829
+ p_general_subscription: boolean;
20786
20830
  p_list_ids: string[];
20787
20831
  p_nonce: string;
20788
20832
  p_site_id: string;
@@ -20818,6 +20862,7 @@ export type Database = {
20818
20862
  p_consent: Json;
20819
20863
  p_double_opt_in: boolean;
20820
20864
  p_email: string;
20865
+ p_general_subscription: boolean;
20821
20866
  p_list_ids: string[];
20822
20867
  p_profile: Json;
20823
20868
  p_site_id: string;
@@ -20845,6 +20890,12 @@ export type Database = {
20845
20890
  removed_count: number;
20846
20891
  }[];
20847
20892
  };
20893
+ newsletter_valid_audience: {
20894
+ Args: {
20895
+ p_audience: Json;
20896
+ };
20897
+ Returns: boolean;
20898
+ };
20848
20899
  next_order_number: {
20849
20900
  Args: {
20850
20901
  p_site_id: string;
@@ -28,3 +28,4 @@ export * from './widgets/index';
28
28
  export { createBlockFormLogger, setBlockFormLoggerFactory, setBlockFormAppLogger, } from './block-form/debug';
29
29
  export type { BlockFormLogger } from './block-form/debug';
30
30
  export { ColourFieldOptionsProvider } from './block-editor/ColourFieldOptionsProvider';
31
+ export { admitEditorMediaField } from './media/admitEditorMediaField';
@@ -7,5 +7,5 @@ import type { VideoPrepIntentResolver } from '../../../media-react/src/index';
7
7
  export declare function uploadIntentForFileField(): UploadIntentContract;
8
8
  export declare function videoPrepIntentForMediaField(fieldPath: string, mediaKinds: readonly NonNullable<MediaFieldConfig['mediaKinds']>[number][] | undefined): VideoPrepIntentResolver | undefined;
9
9
  export declare function videoSelectionIntentForMediaField(fieldPath: string, mediaKinds: readonly NonNullable<MediaFieldConfig['mediaKinds']>[number][] | undefined): VideoPrepIntent | undefined;
10
- export declare function MediaField({ path, backend, config, }: FieldWidgetProps<MediaValue, MediaFieldConfig>): import("react").JSX.Element;
11
- export declare function FileField({ path, backend, config, }: FieldWidgetProps<MediaValue, FileFieldConfig>): import("react").JSX.Element;
10
+ export declare function MediaField(props: FieldWidgetProps<MediaValue | undefined, MediaFieldConfig>): import("react").JSX.Element;
11
+ export declare function FileField(props: FieldWidgetProps<MediaValue | undefined, FileFieldConfig>): import("react").JSX.Element;
@@ -0,0 +1,4 @@
1
+ import { type Media, type RenderableMediaAssetIndex } from '../../../media-core/src/index';
2
+ import type { MediaFieldValidationPlan } from '../../../blocks/src/system/manifest/fieldValidation/index';
3
+ /** The field descriptor supplies the omitted stored kind at the editor boundary. */
4
+ export declare function admitEditorMediaField(value: unknown, plan: MediaFieldValidationPlan, index: RenderableMediaAssetIndex | undefined): Media | undefined;
@@ -16,9 +16,9 @@ export type TargetingTransition = Readonly<{
16
16
  targeting: CustomTargeting;
17
17
  }> | Readonly<{
18
18
  tag: 'refused';
19
- reason: 'last_choice' | 'invalid_choice' | 'no_interests' | 'audience_missing';
19
+ reason: 'last_choice' | 'invalid_choice' | 'no_interests' | 'audience_missing' | 'no_topics';
20
20
  }>;
21
21
  type EditableTargeting = MailingListResolvedCustomTargeting | MailingListMissingAudienceTargeting;
22
- export declare function changeSelectionMode(matched: EditableTargeting, mode: 'fixed' | 'visitor_choice'): TargetingTransition;
22
+ export declare function changeSelectionMode(matched: EditableTargeting, mode: 'general' | 'fixed' | 'visitor_choice'): TargetingTransition;
23
23
  export declare function toggleTargetingChoice(targeting: CustomTargeting, rawId: string): TargetingTransition;
24
24
  export {};
@@ -30,6 +30,12 @@ export type AssetsInUseLocationLike = Readonly<{
30
30
  }> | Readonly<{
31
31
  kind: 'productFileDownload';
32
32
  productTitle: string;
33
+ }> | Readonly<{
34
+ kind: 'newsletterTemplate';
35
+ templateName: string;
36
+ }> | Readonly<{
37
+ kind: 'newsletterCampaign';
38
+ campaignName: string;
33
39
  }>;
34
40
  export type AssetsInUseItemLike = Readonly<{
35
41
  usedCount: number;
@@ -1,8 +1,9 @@
1
1
  import type { SiteId } from '../../core/src/index';
2
- import type { MediaIdentifier } from './identifiers';
2
+ import { type MediaIdentifier } from './identifiers';
3
+ import { type MediaTypeDiscriminant } from './media';
3
4
  export type ContentFieldPathSegment = string | number;
4
5
  export type ContentFieldPath = readonly ContentFieldPathSegment[];
5
- export type ContentMediaType = 'image' | 'video' | 'audio' | 'document' | 'spreadsheet' | 'archive';
6
+ export type ContentMediaType = MediaTypeDiscriminant;
6
7
  export type AllowedContentMediaTypes = readonly [
7
8
  ContentMediaType,
8
9
  ...ContentMediaType[]
@@ -29,6 +29,9 @@ export * from './classifyAllPlanning';
29
29
  export * from './mediaSettingsState';
30
30
  export * from './videoSlotPolicy';
31
31
  export * from './identifiers';
32
+ export * from './mediaIdentifierSchema';
33
+ export * from './mediaKinds';
34
+ export * from './media';
32
35
  export { getImageUrl, getDirectImageUrl, getDirectImageUrlForRelativePath, getDirectImageUrlForSiteScopedPath, getDirectImageUrlForBucketPath, getDirectImageUrlForMediaAsset, isSiteScopedDirectImageStoragePath, type DirectImageMediaAsset, type DirectImageUrlOptions, type DirectImageUrlPathTarget, type ImageProxyFit, type ImageProxyParams, } from './url';
33
36
  export { isSameTransformRect, isSameHotspot, type HotspotLike } from './compare';
34
37
  export { asRecord, isRecord } from './typeGuards';
@@ -46,6 +49,7 @@ export * from './richTextImageWriteNormalizer';
46
49
  export * from './mediaUsageProjection';
47
50
  export * from './portableMediaReferences';
48
51
  export * from './renderableMediaAsset';
52
+ export * from './renderableMediaAssetAdmission';
49
53
  export * from './contentMediaAudit';
50
54
  export * from './contentMediaAuditFieldAdapter';
51
55
  export * from './contentMediaSnapshotAudit';