@riverbankcms/sdk 0.78.0 → 0.79.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 (222) hide show
  1. package/README.md +125 -43
  2. package/dist/{PreviewEditorSidebar-RIKFQ72L.mjs → PreviewEditorSidebar-56NMJMIK.mjs} +750 -65
  3. package/dist/{PreviewEditorUI-XO7TUWKK.mjs → PreviewEditorUI-27KJVEET.mjs} +4 -4
  4. package/dist/SdkPreviewModeRuntime-H4BSP6E7.mjs +8 -0
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +72 -0
  6. package/dist/_dts/api/src/contentRuntime.d.ts +1 -0
  7. package/dist/_dts/api/src/endpoints.d.ts +64 -0
  8. package/dist/_dts/api/src/index.d.ts +8 -6
  9. package/dist/_dts/api/src/media.d.ts +8 -1
  10. package/dist/_dts/api/src/navigation/dashboardSettingsNav.d.ts +1 -1
  11. package/dist/_dts/api/src/navigation/dashboardSiteNav.d.ts +8 -8
  12. package/dist/_dts/api/src/navigation/identity.d.ts +59 -0
  13. package/dist/_dts/api/src/navigation.d.ts +2 -0
  14. package/dist/_dts/api/src/public/types.d.ts +1 -1
  15. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +4 -0
  16. package/dist/_dts/api/src/request.d.ts +3 -11
  17. package/dist/_dts/api/src/sdkConfig/contracts.d.ts +1 -0
  18. package/dist/_dts/api/src/sdkContracts.d.ts +8 -1
  19. package/dist/_dts/api/src/siteIcons.d.ts +128 -0
  20. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +26 -0
  21. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +8 -0
  22. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +21 -20
  23. package/dist/_dts/api/src/types.d.ts +12 -27
  24. package/dist/_dts/api/src/webhooks.d.ts +239 -0
  25. package/dist/_dts/block-form/src/fields/types.d.ts +6 -0
  26. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterList.d.ts +3 -2
  27. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterRow.d.ts +6 -3
  28. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterRowActions.d.ts +8 -3
  29. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/index.d.ts +1 -1
  30. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useLinearRepeaterDnd.d.ts +1 -0
  31. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useRepeaterPointerDragCapability.d.ts +1 -0
  32. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useResolvedItemLabel.d.ts +7 -0
  33. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/buildSummary.d.ts +1 -0
  34. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/index.d.ts +3 -1
  35. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/repeaterDndDomain.d.ts +1 -1
  36. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/repeaterLabelSource.d.ts +15 -0
  37. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/repeaterRowActionsDomain.d.ts +50 -0
  38. package/dist/_dts/blocks/src/index.d.ts +4 -0
  39. package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +879 -288
  40. package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +879 -288
  41. package/dist/_dts/blocks/src/system/blocks/cart.d.ts +879 -288
  42. package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +879 -288
  43. package/dist/_dts/blocks/src/system/blocks/collection.d.ts +879 -288
  44. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +885 -289
  45. package/dist/_dts/blocks/src/system/blocks/feature-card-icons.d.ts +57 -0
  46. package/dist/_dts/blocks/src/system/blocks/feature-cards.d.ts +4 -0
  47. package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +879 -288
  48. package/dist/_dts/blocks/src/system/blocks/index.d.ts +1 -0
  49. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +3 -1
  50. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +69 -22
  51. package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +879 -288
  52. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +879 -288
  53. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +879 -288
  54. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +3 -0
  55. package/dist/_dts/blocks/src/system/blocks/testimonials.d.ts +7 -1
  56. package/dist/_dts/blocks/src/system/customize/backgrounds.d.ts +170 -0
  57. package/dist/_dts/blocks/src/system/fragments/library/testimonialsCarousel.d.ts +5 -0
  58. package/dist/_dts/blocks/src/system/helpers/resolveBackground.d.ts +3 -1
  59. package/dist/_dts/blocks/src/system/icons/ids.d.ts +13 -0
  60. package/dist/_dts/blocks/src/system/icons/index.d.ts +6 -0
  61. package/dist/_dts/blocks/src/system/icons/presets.d.ts +4 -0
  62. package/dist/_dts/blocks/src/system/icons/registry.d.ts +18 -0
  63. package/dist/_dts/blocks/src/system/icons/semantic.d.ts +239 -0
  64. package/dist/_dts/blocks/src/system/icons/value.d.ts +94 -0
  65. package/dist/_dts/blocks/src/system/index.d.ts +1 -0
  66. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +4 -1
  67. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +187 -0
  68. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.state.d.ts +1 -1
  69. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +1 -1
  70. package/dist/_dts/blocks/src/system/runtime/nodes/feature-card-icon.d.ts +13 -0
  71. package/dist/_dts/content-editor/src/index.d.ts +1 -1
  72. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +2 -2
  73. package/dist/_dts/content-model/src/content-types/schema.d.ts +14 -0
  74. package/dist/_dts/content-model/src/contentManifest.d.ts +3 -1
  75. package/dist/_dts/content-model/src/templates/bindingTypeCompatibility.d.ts +3 -1
  76. package/dist/_dts/content-model/src/templates/bindingValidation.d.ts +10 -4
  77. package/dist/_dts/content-model/src/templates/fieldPaths.d.ts +20 -0
  78. package/dist/_dts/content-model/src/templates/manifestAdapter.d.ts +5 -2
  79. package/dist/_dts/core/src/branded.d.ts +114 -85
  80. package/dist/_dts/core/src/csv-types.d.ts +2 -2
  81. package/dist/_dts/core/src/editor-state.d.ts +7 -7
  82. package/dist/_dts/core/src/participants.d.ts +2 -2
  83. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +202 -0
  84. package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +12 -1
  85. package/dist/_dts/editor-blocks/src/block-editor/BlockCardBody.d.ts +12 -1
  86. package/dist/_dts/editor-blocks/src/block-editor/BlockCardHeader.d.ts +12 -2
  87. package/dist/_dts/editor-blocks/src/block-editor/FeatureCardIconsPanel.d.ts +21 -0
  88. package/dist/_dts/editor-blocks/src/block-editor/GeneratedIconSetDialog.d.ts +40 -0
  89. package/dist/_dts/editor-blocks/src/block-editor/SortableBlockItem.d.ts +11 -1
  90. package/dist/_dts/editor-blocks/src/block-editor/featureCardIconActions.d.ts +82 -0
  91. package/dist/_dts/editor-blocks/src/blockPayload.d.ts +1 -1
  92. package/dist/_dts/editor-blocks/src/widgets/icon-picker/IconPickerField.d.ts +1 -1
  93. package/dist/_dts/media-core/src/fileDomain.d.ts +8 -1
  94. package/dist/_dts/media-editor/src/MediaEditor.d.ts +5 -2
  95. package/dist/_dts/media-editor/src/MediaPreview.d.ts +3 -1
  96. package/dist/_dts/media-editor/src/fieldUi.d.ts +5 -0
  97. package/dist/_dts/media-editor/src/index.d.ts +1 -1
  98. package/dist/_dts/media-react/src/components/MediaLibrary.d.ts +2 -1
  99. package/dist/_dts/media-react/src/components/MediaPickerMini.d.ts +2 -1
  100. package/dist/_dts/preview-next/src/client/blocks/previewCustomizeActions.d.ts +17 -0
  101. package/dist/_dts/preview-next/src/client/preview/PageDesignEditorStateContext.d.ts +4 -0
  102. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +3 -2
  103. package/dist/_dts/preview-next/src/client/preview/previewCustomizeHistory.d.ts +6 -0
  104. package/dist/_dts/sdk/src/cli/commands/push/consts.d.ts +1 -1
  105. package/dist/_dts/sdk/src/cli/commands/push/metadata.d.ts +2 -0
  106. package/dist/_dts/sdk/src/cli/commands/push/stale.d.ts +3 -3
  107. package/dist/_dts/sdk/src/cli/commands/push-execute.d.ts +7 -0
  108. package/dist/_dts/sdk/src/cli/commands/push.d.ts +2 -0
  109. package/dist/_dts/sdk/src/cli/content/reader.d.ts +13 -0
  110. package/dist/_dts/sdk/src/cli/content/writer.d.ts +2 -1
  111. package/dist/_dts/sdk/src/cli/helpers.d.ts +2 -0
  112. package/dist/_dts/sdk/src/cli/navigationIdentity.d.ts +11 -0
  113. package/dist/_dts/sdk/src/cli/site-commands/commandKeys.d.ts +6 -6
  114. package/dist/_dts/sdk/src/cli/site-commands/commandRuntime.d.ts +5 -0
  115. package/dist/_dts/sdk/src/cli/site-commands/commandSurfaceDispatch.d.ts +4 -0
  116. package/dist/_dts/sdk/src/cli/site-commands/navigationCommands.d.ts +4 -0
  117. package/dist/_dts/sdk/src/cli/site-commands/oneOffCommands.d.ts +1 -0
  118. package/dist/_dts/sdk/src/cli/site-commands/pageCommands.d.ts +5 -2
  119. package/dist/_dts/sdk/src/cli/site-commands/pushExecution.d.ts +10 -1
  120. package/dist/_dts/sdk/src/cli/site-commands/pushExecutionTypes.d.ts +1 -1
  121. package/dist/_dts/sdk/src/cli/sync/diff.d.ts +9 -0
  122. package/dist/_dts/sdk/src/client/management/types.d.ts +8 -0
  123. package/dist/_dts/sdk/src/client/types.d.ts +2 -2
  124. package/dist/_dts/sdk/src/config/content-types.d.ts +7 -0
  125. package/dist/_dts/sdk/src/config/field-definitions.d.ts +5 -1
  126. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  127. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +19 -2
  128. package/dist/_dts/sdk/src/next/index.d.ts +1 -1
  129. package/dist/_dts/sdk/src/next/revalidate.d.ts +26 -5
  130. package/dist/_dts/sdk/src/next/static-params.d.ts +28 -3
  131. package/dist/_dts/sdk/src/public-api/contracts.d.ts +5 -1
  132. package/dist/_dts/sdk/src/public-api/runtime.d.ts +1 -1
  133. package/dist/_dts/sdk/src/version.d.ts +1 -1
  134. package/dist/_dts/sdk/src/webhooks/index.d.ts +1 -1
  135. package/dist/_dts/sdk/src/webhooks/verify.d.ts +6 -102
  136. package/dist/_dts/site-commands/src/commands.d.ts +6 -0
  137. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  138. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +3 -3
  139. package/dist/_dts/theme-core/src/schema.d.ts +5 -5
  140. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +25 -2
  141. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +5 -5
  142. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -2
  143. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +4 -4
  144. package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +2 -0
  145. package/dist/_dts/ui/src/combobox.d.ts +1 -0
  146. package/dist/{altcha-B5XGSXP5.mjs → altcha-EKUEQ4RP.mjs} +1 -1
  147. package/dist/{chunk-F7RTCZYN.mjs → chunk-4HCW7FHJ.mjs} +504 -63
  148. package/dist/{chunk-SXOLGNMX.mjs → chunk-A3HHFKVT.mjs} +1 -1
  149. package/dist/{chunk-TXDES5P2.mjs → chunk-GP555I66.mjs} +180 -10
  150. package/dist/{chunk-SVMMM2NA.mjs → chunk-K2IIF34C.mjs} +79 -5
  151. package/dist/{chunk-NIDXI46P.mjs → chunk-LCY32PXF.mjs} +1 -1
  152. package/dist/{chunk-XGB3TDIC.mjs → chunk-R7POPVJR.mjs} +2 -8
  153. package/dist/{chunk-OECWLDHN.mjs → chunk-V47ZU33I.mjs} +2762 -732
  154. package/dist/cli/index.mjs +1799 -345
  155. package/dist/cli/init-docs/content/cli-reference.md +3 -2
  156. package/dist/cli/init-docs/content/content-management.md +2 -2
  157. package/dist/cli/init-docs/content/workflow-editor-workflows.md +2 -0
  158. package/dist/cli/init-docs/content/workflow-isr-revalidation.md +138 -0
  159. package/dist/cli/init-docs/content/workflow-preview-mode.md +68 -2
  160. package/dist/client/{accordion-EVDEOUPR.mjs → accordion-QLA7KBYO.mjs} +2 -2
  161. package/dist/client/analytics.mjs +1 -1
  162. package/dist/client/{bookingForm-DIHBLC64.mjs → bookingForm-PYZIPA5G.mjs} +55 -48
  163. package/dist/client/bookings.mjs +172 -57
  164. package/dist/client/{carousel-FEBQHIWI.mjs → carousel-5EIULWBI.mjs} +3 -3
  165. package/dist/client/{cart-7CKSXAE4.mjs → cart-DOP3FNI4.mjs} +7 -7
  166. package/dist/client/{checkout-WKYCANLV.mjs → checkout-BVMF6FBV.mjs} +7 -7
  167. package/dist/client/{chunk-GUK2FPXQ.mjs → chunk-44K2U3QI.mjs} +37 -15
  168. package/dist/client/{chunk-IVNCUVAV.mjs → chunk-AUJ5DBZJ.mjs} +18 -18
  169. package/dist/client/{chunk-VPPMNXCF.mjs → chunk-CCNTDRCF.mjs} +2 -2
  170. package/dist/client/{chunk-36WJCERQ.mjs → chunk-CE7IBGVW.mjs} +3 -1
  171. package/dist/client/{chunk-2SAVKN2M.mjs → chunk-GG4M2NP6.mjs} +2 -2
  172. package/dist/client/{chunk-65F47D7Y.mjs → chunk-R5ESWNKX.mjs} +49 -39
  173. package/dist/client/{chunk-RZDWX7QW.mjs → chunk-TYONZMST.mjs} +1 -1
  174. package/dist/client/{chunk-OFMSCGNY.mjs → chunk-UDS3NTWA.mjs} +2 -2
  175. package/dist/client/{chunk-YDSEG6GZ.mjs → chunk-V6M5FCR5.mjs} +2 -2
  176. package/dist/client/{chunk-F7LHOKEH.mjs → chunk-XSV6KW4D.mjs} +1 -1
  177. package/dist/client/{chunk-RV6FX7UH.mjs → chunk-YLDYVRZL.mjs} +9 -9
  178. package/dist/client/{chunk-PD6NBCEY.mjs → chunk-ZFHRN6W2.mjs} +1 -1
  179. package/dist/client/client.mjs +21501 -19812
  180. package/dist/client/{courseRegistration-5QF2PHKM.mjs → courseRegistration-E6EAA6NL.mjs} +10 -10
  181. package/dist/client/{eventCalendar-4ZOSETDU.mjs → eventCalendar-HBG3HAK6.mjs} +9 -9
  182. package/dist/client/{eventCombined-WQGU7JUX.mjs → eventCombined-6K5ZZWAK.mjs} +9 -9
  183. package/dist/client/{eventDetails-AYWVUJ5Y.mjs → eventDetails-Q75ICXLT.mjs} +9 -9
  184. package/dist/client/{eventListing-NT7C6UT5.mjs → eventListing-27P5F7DZ.mjs} +9 -9
  185. package/dist/client/{eventRegistration-OH24F4ZJ.mjs → eventRegistration-IQ7AMASR.mjs} +9 -9
  186. package/dist/client/{form-7L42SRBB.mjs → form-JRTD65FN.mjs} +6 -3
  187. package/dist/client/{headerSection-OZRZNZ52.mjs → headerSection-7FPSSZHS.mjs} +3 -3
  188. package/dist/client/hooks.mjs +428 -83
  189. package/dist/client/{locationMap-ZBXRPQ7C.mjs → locationMap-7NGFNYBH.mjs} +3 -3
  190. package/dist/client/{newsletterForm-SNAGFF2I.mjs → newsletterForm-F3BADCI2.mjs} +2 -2
  191. package/dist/client/{productDetail-I46BOFGV.mjs → productDetail-V3HP7ITJ.mjs} +7 -7
  192. package/dist/client/{productList-BOYHTYI6.mjs → productList-L3EGJUF2.mjs} +7 -7
  193. package/dist/client/rendering/client.mjs +2886 -1513
  194. package/dist/client/rendering/islands.mjs +19 -19
  195. package/dist/client/rendering.mjs +2244 -564
  196. package/dist/client/{shop-XTXPZTKR.mjs → shop-DQUB5E2C.mjs} +7 -7
  197. package/dist/preview-next/before-render.mjs +65 -1
  198. package/dist/preview-next/client/runtime.mjs +6 -6
  199. package/dist/preview-next/middleware.mjs +65 -1
  200. package/dist/preview-next/tailwind-sources.css +1 -0
  201. package/dist/sdk-runtime-AF6KXJU4.mjs +8 -0
  202. package/dist/server/components.mjs +2270 -835
  203. package/dist/server/config-template-validation.mjs +221 -15
  204. package/dist/server/config-validation.mjs +426 -77
  205. package/dist/server/config.mjs +426 -77
  206. package/dist/server/data.mjs +427 -82
  207. package/dist/server/index.mjs +94 -10
  208. package/dist/server/next/revalidate.mjs +229 -34
  209. package/dist/server/next.mjs +2439 -888
  210. package/dist/server/page-converter.mjs +335 -74
  211. package/dist/server/prebuild.mjs +1 -1
  212. package/dist/server/rendering/server.mjs +2281 -846
  213. package/dist/server/rendering.mjs +2298 -860
  214. package/dist/server/routing.mjs +860 -113
  215. package/dist/server/server.mjs +452 -92
  216. package/dist/server/theme-bridge.mjs +164 -2
  217. package/dist/server/theme.mjs +2 -2
  218. package/dist/server/webhooks.mjs +129 -25
  219. package/dist/styles/index.css +55 -0
  220. package/package.json +2 -1
  221. package/dist/SdkPreviewModeRuntime-LAGYMPNF.mjs +0 -8
  222. package/dist/sdk-runtime-ZJLKC6DR.mjs +0 -8
@@ -12,6 +12,7 @@ import type { LinkPayload, RoutableContentItem, SitemapRouteItem } from "./navig
12
12
  import type { RouteMetadataPayload, RouteMetadataResponse } from "./routes";
13
13
  import type { SiteAnalyticsSettingsPayload, SiteAnalyticsSettingsResponse } from "./siteAnalytics";
14
14
  import type { SiteBannerSettingsPayload, SiteBannerSettingsResponse } from "./siteBanner";
15
+ import type { GeneratedIconSetApplyRequest, GeneratedIconSetApplyResponse, GeneratedIconSetGenerateRequest, GeneratedIconSetGenerateResponse, SiteIconStyleGuideResponse, SiteIconStyleGuideUpdateRequest } from "./siteIcons";
15
16
  import type { AiBrandGuidelinesGenerateRequest, AiBrandGuidelinesGenerateResponse, AiBrandGuidelinesGenerationContextResponse, SiteAiBrandGuidelinesPayload, SiteAiBrandGuidelinesResponse, SiteAiProfilePayload, SiteAiProfileResponse, SiteGenerationIntakePayload, SiteGenerationIntakeResponse } from "./siteOnboarding";
16
17
  import type { SitePrivacySettingsPayload, SitePrivacySettingsResponse } from "./privacyPolicy";
17
18
  import type { MaintenanceSettingsPayload, MaintenanceSettingsResponse, SiteBusinessAddressPayload, SiteBusinessAddressResponse, SiteFooterBlocksEditorResponse, SiteGeneralSettingsPayload, SiteGeneralSettingsResponse, SiteLayoutSettingsPayload, SiteLayoutSettingsResponse, UpdateSiteDeploymentModePayload, UpdateSiteDeploymentModeResponse, UpdateSiteFooterBlocksPayload, UpdateSiteFooterBlocksResponse } from "./siteSettings";
@@ -134,6 +135,16 @@ export type SiteManagementAPIEndpoints = {
134
135
  entries: ContentEntrySummary[];
135
136
  contentType: SerializedContentTypeSummary;
136
137
  }>;
138
+ reorderContentEntries: APIEndpoint<{
139
+ orderedEntryIds: string[];
140
+ orderToken: string;
141
+ }, {
142
+ siteId: string;
143
+ type: string;
144
+ }, {
145
+ entries: ContentEntrySummary[];
146
+ orderToken: string;
147
+ }>;
137
148
  getContentTemplate: APIEndpoint<never, {
138
149
  siteId: string;
139
150
  type: string;
@@ -482,6 +493,21 @@ export type SiteManagementAPIEndpoints = {
482
493
  updateSiteAiBrandGuidelines: APIEndpoint<SiteAiBrandGuidelinesPayload, {
483
494
  siteId: string;
484
495
  }, SiteAiBrandGuidelinesResponse>;
496
+ getSiteIconStyleGuide: APIEndpoint<never, {
497
+ siteId: string;
498
+ }, SiteIconStyleGuideResponse>;
499
+ updateSiteIconStyleGuide: APIEndpoint<SiteIconStyleGuideUpdateRequest, {
500
+ siteId: string;
501
+ }, SiteIconStyleGuideResponse>;
502
+ regenerateSiteIconStyleGuide: APIEndpoint<never, {
503
+ siteId: string;
504
+ }, SiteIconStyleGuideResponse>;
505
+ generateGeneratedIconSet: APIEndpoint<GeneratedIconSetGenerateRequest, {
506
+ siteId: string;
507
+ }, GeneratedIconSetGenerateResponse>;
508
+ applyGeneratedIconSet: APIEndpoint<GeneratedIconSetApplyRequest, {
509
+ siteId: string;
510
+ }, GeneratedIconSetApplyResponse>;
485
511
  getSiteAiProfile: APIEndpoint<never, {
486
512
  siteId: string;
487
513
  }, SiteAiProfileResponse>;
@@ -258,6 +258,7 @@ export type SitePlatformAPIEndpoints = {
258
258
  reordered: true;
259
259
  }>;
260
260
  sdkUpsertNavigationMenu: APIEndpoint<{
261
+ identifier?: string;
261
262
  name: string;
262
263
  isPrimary?: boolean;
263
264
  isFooter?: boolean;
@@ -270,6 +271,12 @@ export type SitePlatformAPIEndpoints = {
270
271
  }, {
271
272
  siteId: string;
272
273
  }, SdkUpsertNavigationMenuResponse>;
274
+ sdkDeleteNavigationMenu: APIEndpoint<never, {
275
+ siteId: string;
276
+ menuId: string;
277
+ }, {
278
+ deleted: true;
279
+ }>;
273
280
  sdkUpsertTheme: APIEndpoint<{
274
281
  theme: Theme;
275
282
  themeId?: string;
@@ -423,6 +430,7 @@ export type SitePlatformAPIEndpoints = {
423
430
  contentType: string;
424
431
  data: Record<string, unknown>;
425
432
  slug?: string;
433
+ manualOrder?: number;
426
434
  }, {
427
435
  siteId: string;
428
436
  }, SdkUpsertEntryResponse>;
@@ -1,11 +1,11 @@
1
- import type { SystemCustomizeFacetSelection, Theme } from '../../blocks/src/index';
1
+ import type { BackgroundOverride, SystemCustomizeFacetSelection, Theme } from '../../blocks/src/index';
2
2
  import type { ListMediaAssetsResult, MediaAssetWithLabels } from '@riverbankcms/media-storage-supabase';
3
3
  import type { DbJson } from '../../db/src/index';
4
4
  import type { PageDesignEditorReadModel, PageDesignIntent, AppearancePresetId, BoundaryOptionId, DesignBlockId, FooterLookId, HeaderLayoutId, HeaderLookId, HeaderStyleId, LayoutVariantKey, SiteStyleId, TypographyPresetId } from '../../theme-core/src/site-styles/index';
5
5
  import type { ButtonPersonalityId } from '../../theme-core/src/buttons/index';
6
6
  import type { PaletteOverrides, PaletteVariantId } from '../../theme-core/src/palette/index';
7
7
  import type { APIEndpoint } from './apiEndpointTypes';
8
- import type { AnalyticsReportFilters, AnalyticsReportResponse } from './analytics';
8
+ import type { AnalyticsReportQuery, AnalyticsReportResponse } from './analytics';
9
9
  import type { CreateMediaAssetBody, MediaAssetResponse, MediaAssetFileFilterContract, MediaBulkDeleteResponse, MediaClassifyJobResponse, MediaJobSummaryResponse, MediaLabelSummary, MediaSettingsResponse } from './media';
10
10
  import type { MediaUsageCheckResponse } from './shared-contracts';
11
11
  import type { BlockWithContentResponse, BlockListItem, ContentEntryListStage, ListPublishedEntriesResponse, PageDraftRecord, PublishedBlockBaseline, PublishedContentEntryPreviewResponse, PublishedPostPreviewResponse, SdkBlockContent, SdkRuntimeContentByPathResponse, SdkTemplate, SiteBySlugResponse, ThemeGenerationTurn, ThemePreferencesRecord, ThemeRow } from './contentRuntime';
@@ -117,6 +117,11 @@ export type PageDesignEditorAction = {
117
117
  blockId: DesignBlockId;
118
118
  baseContentId: string | null;
119
119
  } & SystemCustomizeFacetSelection) | {
120
+ kind: 'set-background';
121
+ blockId: DesignBlockId;
122
+ baseContentId: string | null;
123
+ override: BackgroundOverride;
124
+ } | {
120
125
  kind: 'set-look';
121
126
  blockId: DesignBlockId;
122
127
  appearancePresetId: AppearancePresetId | null;
@@ -181,7 +186,7 @@ export type SiteRuntimeAPIEndpoints = {
181
186
  type: string;
182
187
  limit?: string;
183
188
  offset?: string;
184
- order?: 'published_at.asc' | 'published_at.desc' | 'title.asc' | 'title.desc' | 'updated_at.asc' | 'updated_at.desc';
189
+ order?: 'published_at.asc' | 'published_at.desc' | 'title.asc' | 'title.desc' | 'manual.asc' | 'updated_at.asc' | 'updated_at.desc';
185
190
  stage?: ContentEntryListStage;
186
191
  meta?: string;
187
192
  mode?: 'manual';
@@ -337,26 +342,24 @@ export type SiteRuntimeAPIEndpoints = {
337
342
  }>;
338
343
  }>;
339
344
  createInstagramZipUploadUrl: APIEndpoint<CreateInstagramZipUploadUrlRequest, never, CreateInstagramZipUploadUrlResponse>;
340
- getAnalyticsReport: APIEndpoint<AnalyticsReportFilters, {
341
- siteId: string;
342
- } & AnalyticsReportFilters, AnalyticsReportResponse>;
345
+ getAnalyticsReport: APIEndpoint<never, AnalyticsReportQuery, AnalyticsReportResponse>;
343
346
  createMediaAsset: APIEndpoint<CreateMediaAssetBody, undefined, MediaAssetResponse>;
344
- mediaList: APIEndpoint<{
347
+ mediaList: APIEndpoint<never, {
345
348
  siteId: string;
346
349
  q?: string;
347
350
  limit?: number;
348
351
  offset?: number;
349
352
  labels?: string;
350
353
  fileFilter?: MediaAssetFileFilterContract;
351
- }, never, ListMediaAssetsResult>;
352
- mediaProductFileList: APIEndpoint<{
354
+ }, ListMediaAssetsResult>;
355
+ mediaProductFileList: APIEndpoint<never, {
353
356
  siteId: string;
354
357
  q?: string;
355
358
  limit?: number;
356
359
  offset?: number;
357
360
  labels?: string;
358
361
  fileFilter?: MediaAssetFileFilterContract;
359
- }, never, ListMediaAssetsResult>;
362
+ }, ListMediaAssetsResult>;
360
363
  mediaGet: APIEndpoint<never, {
361
364
  assetId: string;
362
365
  }, MediaAssetWithLabels>;
@@ -544,17 +547,15 @@ export type SiteRuntimeAPIEndpoints = {
544
547
  siteId: string;
545
548
  pageId: string;
546
549
  }, ApplyPageDesignEditorActionResponse>;
547
- getContentByPath: APIEndpoint<{
550
+ getContentByPath: APIEndpoint<never, {
551
+ siteId: string;
548
552
  path: string;
549
553
  preview?: boolean;
550
- }, {
551
- siteId: string;
552
554
  }, SdkRuntimeContentByPathResponse>;
553
- getPageByPath: APIEndpoint<{
555
+ getPageByPath: APIEndpoint<never, {
556
+ siteId: string;
554
557
  path: string;
555
558
  preview?: boolean;
556
- }, {
557
- siteId: string;
558
559
  }, SdkRuntimeContentByPathResponse>;
559
560
  initSiteContent: APIEndpoint<{}, {
560
561
  siteId: string;
@@ -563,9 +564,9 @@ export type SiteRuntimeAPIEndpoints = {
563
564
  created: number;
564
565
  totalBlocks: number;
565
566
  }>;
566
- getMediaLabels: APIEndpoint<{
567
+ getMediaLabels: APIEndpoint<never, {
567
568
  siteId: string;
568
- }, never, {
569
+ }, {
569
570
  items: MediaLabelSummary[];
570
571
  }>;
571
572
  getMediaSettings: APIEndpoint<never, {
@@ -643,11 +644,11 @@ export type SiteRuntimeAPIEndpoints = {
643
644
  summary?: MediaJobSummaryResponse;
644
645
  }>;
645
646
  }>;
646
- mediaJobsStatus: APIEndpoint<{
647
+ mediaJobsStatus: APIEndpoint<never, {
647
648
  siteId: string;
648
649
  limit?: number;
649
650
  statuses?: string;
650
- }, never, {
651
+ }, {
651
652
  jobs: MediaClassifyJobResponse[];
652
653
  }>;
653
654
  devToolsImpersonateAdmin: APIEndpoint<undefined, never, DevToolsImpersonationResponse>;
@@ -1,5 +1,6 @@
1
1
  import type { CamelizeKeys, DbDatabase, DbRow } from "../../db/src/index";
2
- export type { AccessPolicyContract, AccessPolicyTag, CreateMediaAssetBody, EntitledCustomerAccessScopeContract, FileKindContract, FileKindTag, FileUseContract, FileUseTag, ImageFileFormat, MediaAssetResponse, MediaAssetFileFilterContract, MediaBulkDeleteAssetFailure, MediaBulkDeleteResponse, MediaClassifyJobResponse, MediaJobSummaryResponse, MediaLabelSummary, MediaSettingsResponse, RenderableFileKindTag, StorageClass, UploadIntentContract, UploadIntentTag, } from "./media";
2
+ import type { APIEndpoint } from "./apiEndpointTypes";
3
+ export type { AccessPolicyContract, AccessPolicyTag, AmbientBackgroundRole, CreateMediaAssetBody, EntitledCustomerAccessScopeContract, FileKindContract, FileKindTag, FileUseContract, FileUseTag, ImageFileFormat, MediaAssetResponse, MediaAssetFileFilterContract, MediaBulkDeleteAssetFailure, MediaBulkDeleteResponse, MediaClassifyJobResponse, MediaJobSummaryResponse, MediaLabelSummary, MediaSettingsResponse, RenderableFileKindTag, SiteBackgroundAssetUse, StorageClass, UploadIntentContract, UploadIntentTag, } from "./media";
3
4
  export type { AnalyticsPreset, AnalyticsReferrer, AnalyticsReportFilters, AnalyticsReportQuery, AnalyticsReportResponse, AnalyticsSeriesPoint, AnalyticsTopPage, AnalyticsTotals, } from "./analytics";
4
5
  export type { AIChatMessage, AiBriefTurn, JsonPrimitive, JsonValue, MediaUsageCheckItem, MediaUsageCheckResponse, MediaUsageLocation, } from "./shared-contracts";
5
6
  export type * from "./accessAdmin";
@@ -121,48 +122,32 @@ type EndpointPath<E extends keyof APIEndpoints> = E extends keyof typeof API_END
121
122
  type PathParams<E extends keyof APIEndpoints> = ExtractPathParamNames<EndpointPath<E>> extends infer TParam ? [TParam] extends [never] ? {} : {
122
123
  [K in Extract<TParam, string>]: string;
123
124
  } : {};
124
- type QueryParams<E extends keyof APIEndpoints> = IsNonEmptyQuery<APIEndpoints[E]["query"]> extends false ? {} : QueryToStringParams<APIEndpoints[E]["query"]>;
125
+ type EndpointQuery<E extends keyof APIEndpoints> = APIEndpoints[E] extends APIEndpoint<unknown, infer TQuery, unknown> ? TQuery : never;
126
+ type QueryParams<E extends keyof APIEndpoints> = IsNonEmptyQuery<EndpointQuery<E>> extends false ? {} : QueryToStringParams<EndpointQuery<E>>;
125
127
  type HasPathParams<E extends keyof APIEndpoints> = keyof PathParams<E> extends never ? false : true;
126
128
  type ParamsPart<E extends keyof APIEndpoints> = HasPathParams<E> extends true ? {
127
129
  params: PathParams<E> & QueryParams<E>;
128
- } : IsNonEmptyQuery<APIEndpoints[E]["query"]> extends false ? {
130
+ } : IsNonEmptyQuery<EndpointQuery<E>> extends false ? {
129
131
  params?: Record<string, string>;
130
- } : HasRequiredKeys<APIEndpoints[E]["query"]> extends true ? {
132
+ } : HasRequiredKeys<EndpointQuery<E>> extends true ? {
131
133
  params: QueryParams<E>;
132
134
  } : {
133
135
  params?: QueryParams<E>;
134
136
  };
135
- export type APICallParams<E extends keyof APIEndpoints> = APIEndpoints[E] extends {
136
- method: "GET";
137
- } ? {
138
- endpoint: E;
139
- body?: APIEndpoints[E]["body"];
140
- options?: RequestInit;
141
- } & ParamsPart<E> : APIEndpoints[E] extends {
142
- method: "POST" | "PUT" | "PATCH";
143
- } ? {
144
- endpoint: E;
145
- body: APIEndpoints[E]["body"];
146
- options?: RequestInit;
147
- } & ParamsPart<E> : {
148
- endpoint: E;
149
- body?: APIEndpoints[E]["body"];
150
- options?: RequestInit;
151
- } & ParamsPart<E>;
152
137
  type EndpointMethod<E extends keyof APIEndpoints> = E extends keyof typeof API_ENDPOINTS ? (typeof API_ENDPOINTS)[E]["method"] : HTTPMethod;
153
- type EndpointBody<E extends keyof APIEndpoints> = APIEndpoints[E]["body"];
138
+ type EndpointBody<E extends keyof APIEndpoints> = APIEndpoints[E] extends APIEndpoint<infer TBody, unknown, unknown> ? TBody : never;
154
139
  type StrictBodyPart<E extends keyof APIEndpoints> = EndpointMethod<E> extends "GET" ? {
155
140
  body?: never;
156
141
  } : [EndpointBody<E>] extends [never | undefined] ? {
157
142
  body?: never;
143
+ } : undefined extends EndpointBody<E> ? {
144
+ body?: Exclude<EndpointBody<E>, undefined>;
158
145
  } : {
159
- body: NonNullable<EndpointBody<E>>;
146
+ body: EndpointBody<E>;
160
147
  };
161
148
  /**
162
- * Strict variant of APICallParams that uses endpoint metadata (method + body type)
163
- * to enforce whether `body` is required/forbidden.
164
- *
165
- * Intended for new code. Existing code can continue using APICallParams until migrated.
149
+ * API call parameters derived from endpoint metadata.
150
+ * Enforces whether `body` is required, optional, or forbidden for each endpoint.
166
151
  */
167
152
  export type APICallParamsStrict<E extends keyof APIEndpoints> = {
168
153
  endpoint: E;
@@ -0,0 +1,239 @@
1
+ import { z } from 'zod';
2
+ export declare const RIVERBANK_SIGNATURE_PREFIX = "sha256=";
3
+ export declare const SUPPORTED_WEBHOOK_EVENTS: readonly ["page.published", "page.unpublished", "page.deleted", "page.path_changed", "entry.published", "entry.unpublished", "entry.deleted", "entry.path_changed", "navigation.updated", "theme.updated", "site.settings_updated"];
4
+ export type WebhookEvent = (typeof SUPPORTED_WEBHOOK_EVENTS)[number];
5
+ export declare const WebhookEventSchema: z.ZodEnum<{
6
+ "page.published": "page.published";
7
+ "page.unpublished": "page.unpublished";
8
+ "page.deleted": "page.deleted";
9
+ "page.path_changed": "page.path_changed";
10
+ "entry.published": "entry.published";
11
+ "entry.unpublished": "entry.unpublished";
12
+ "entry.deleted": "entry.deleted";
13
+ "entry.path_changed": "entry.path_changed";
14
+ "navigation.updated": "navigation.updated";
15
+ "theme.updated": "theme.updated";
16
+ "site.settings_updated": "site.settings_updated";
17
+ }>;
18
+ declare const revalidationPathBrand: unique symbol;
19
+ export type RevalidationPath = string & {
20
+ readonly [revalidationPathBrand]: 'RevalidationPath';
21
+ };
22
+ export type RevalidationPathParseError = Readonly<{
23
+ tag: 'EMPTY_PATH';
24
+ input: string;
25
+ }> | Readonly<{
26
+ tag: 'ABSOLUTE_OR_PROTOCOL_PATH';
27
+ input: string;
28
+ }> | Readonly<{
29
+ tag: 'MALFORMED_PATH';
30
+ input: string;
31
+ }>;
32
+ export type RevalidationPathParseResult = Readonly<{
33
+ success: true;
34
+ path: RevalidationPath;
35
+ }> | Readonly<{
36
+ success: false;
37
+ error: RevalidationPathParseError;
38
+ }>;
39
+ export declare function parseRevalidationPath(input: string): RevalidationPathParseResult;
40
+ export declare function normalizeRevalidationPath(input: string): RevalidationPath | null;
41
+ export declare function unwrapRevalidationPath(path: RevalidationPath): string;
42
+ export declare const PagePublishedDataSchema: z.ZodObject<{
43
+ pageId: z.ZodString;
44
+ path: z.ZodString;
45
+ slug: z.ZodOptional<z.ZodString>;
46
+ }, z.core.$strict>;
47
+ export declare const PageRemovedDataSchema: z.ZodObject<{
48
+ pageId: z.ZodString;
49
+ path: z.ZodString;
50
+ slug: z.ZodOptional<z.ZodString>;
51
+ }, z.core.$strict>;
52
+ export declare const PagePathChangedDataSchema: z.ZodObject<{
53
+ pageId: z.ZodString;
54
+ previousPath: z.ZodString;
55
+ path: z.ZodString;
56
+ slug: z.ZodOptional<z.ZodString>;
57
+ }, z.core.$strict>;
58
+ export declare const EntryPublishedDataSchema: z.ZodObject<{
59
+ entryId: z.ZodString;
60
+ path: z.ZodString;
61
+ contentType: z.ZodString;
62
+ }, z.core.$strict>;
63
+ export declare const EntryRemovedDataSchema: z.ZodObject<{
64
+ entryId: z.ZodString;
65
+ path: z.ZodString;
66
+ contentType: z.ZodString;
67
+ }, z.core.$strict>;
68
+ export declare const EntryPathChangedDataSchema: z.ZodObject<{
69
+ entryId: z.ZodString;
70
+ previousPath: z.ZodString;
71
+ path: z.ZodString;
72
+ contentType: z.ZodString;
73
+ }, z.core.$strict>;
74
+ export declare const NavigationUpdatedDataSchema: z.ZodObject<{
75
+ menuId: z.ZodOptional<z.ZodString>;
76
+ }, z.core.$strict>;
77
+ export declare const EmptyWebhookDataSchema: z.ZodObject<{}, z.core.$strict>;
78
+ export type PagePublishedData = z.infer<typeof PagePublishedDataSchema>;
79
+ export type PageRemovedData = z.infer<typeof PageRemovedDataSchema>;
80
+ export type PagePathChangedData = z.infer<typeof PagePathChangedDataSchema>;
81
+ export type EntryPublishedData = z.infer<typeof EntryPublishedDataSchema>;
82
+ export type EntryRemovedData = z.infer<typeof EntryRemovedDataSchema>;
83
+ export type EntryPathChangedData = z.infer<typeof EntryPathChangedDataSchema>;
84
+ export type NavigationUpdatedData = z.infer<typeof NavigationUpdatedDataSchema>;
85
+ export type EmptyWebhookData = z.infer<typeof EmptyWebhookDataSchema>;
86
+ export type WebhookDataByEvent = Readonly<{
87
+ 'page.published': PagePublishedData;
88
+ 'page.unpublished': PageRemovedData;
89
+ 'page.deleted': PageRemovedData;
90
+ 'page.path_changed': PagePathChangedData;
91
+ 'entry.published': EntryPublishedData;
92
+ 'entry.unpublished': EntryRemovedData;
93
+ 'entry.deleted': EntryRemovedData;
94
+ 'entry.path_changed': EntryPathChangedData;
95
+ 'navigation.updated': NavigationUpdatedData;
96
+ 'theme.updated': EmptyWebhookData;
97
+ 'site.settings_updated': EmptyWebhookData;
98
+ }>;
99
+ export type WebhookDataForEvent<E extends WebhookEvent> = WebhookDataByEvent[E];
100
+ export declare const WebhookPayloadSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
101
+ timestamp: z.ZodString;
102
+ dispatchId: z.ZodOptional<z.ZodString>;
103
+ siteId: z.ZodString;
104
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
105
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
106
+ event: z.ZodLiteral<"page.published">;
107
+ data: z.ZodObject<{
108
+ pageId: z.ZodString;
109
+ path: z.ZodString;
110
+ slug: z.ZodOptional<z.ZodString>;
111
+ }, z.core.$strict>;
112
+ }, z.core.$strip>, z.ZodObject<{
113
+ timestamp: z.ZodString;
114
+ dispatchId: z.ZodOptional<z.ZodString>;
115
+ siteId: z.ZodString;
116
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
117
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
118
+ event: z.ZodLiteral<"page.unpublished">;
119
+ data: z.ZodObject<{
120
+ pageId: z.ZodString;
121
+ path: z.ZodString;
122
+ slug: z.ZodOptional<z.ZodString>;
123
+ }, z.core.$strict>;
124
+ }, z.core.$strip>, z.ZodObject<{
125
+ timestamp: z.ZodString;
126
+ dispatchId: z.ZodOptional<z.ZodString>;
127
+ siteId: z.ZodString;
128
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
129
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
130
+ event: z.ZodLiteral<"page.deleted">;
131
+ data: z.ZodObject<{
132
+ pageId: z.ZodString;
133
+ path: z.ZodString;
134
+ slug: z.ZodOptional<z.ZodString>;
135
+ }, z.core.$strict>;
136
+ }, z.core.$strip>, z.ZodObject<{
137
+ timestamp: z.ZodString;
138
+ dispatchId: z.ZodOptional<z.ZodString>;
139
+ siteId: z.ZodString;
140
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
141
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
142
+ event: z.ZodLiteral<"page.path_changed">;
143
+ data: z.ZodObject<{
144
+ pageId: z.ZodString;
145
+ previousPath: z.ZodString;
146
+ path: z.ZodString;
147
+ slug: z.ZodOptional<z.ZodString>;
148
+ }, z.core.$strict>;
149
+ }, z.core.$strip>, z.ZodObject<{
150
+ timestamp: z.ZodString;
151
+ dispatchId: z.ZodOptional<z.ZodString>;
152
+ siteId: z.ZodString;
153
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
154
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
155
+ event: z.ZodLiteral<"entry.published">;
156
+ data: z.ZodObject<{
157
+ entryId: z.ZodString;
158
+ path: z.ZodString;
159
+ contentType: z.ZodString;
160
+ }, z.core.$strict>;
161
+ }, z.core.$strip>, z.ZodObject<{
162
+ timestamp: z.ZodString;
163
+ dispatchId: z.ZodOptional<z.ZodString>;
164
+ siteId: z.ZodString;
165
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
166
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
167
+ event: z.ZodLiteral<"entry.unpublished">;
168
+ data: z.ZodObject<{
169
+ entryId: z.ZodString;
170
+ path: z.ZodString;
171
+ contentType: z.ZodString;
172
+ }, z.core.$strict>;
173
+ }, z.core.$strip>, z.ZodObject<{
174
+ timestamp: z.ZodString;
175
+ dispatchId: z.ZodOptional<z.ZodString>;
176
+ siteId: z.ZodString;
177
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
178
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
179
+ event: z.ZodLiteral<"entry.deleted">;
180
+ data: z.ZodObject<{
181
+ entryId: z.ZodString;
182
+ path: z.ZodString;
183
+ contentType: z.ZodString;
184
+ }, z.core.$strict>;
185
+ }, z.core.$strip>, z.ZodObject<{
186
+ timestamp: z.ZodString;
187
+ dispatchId: z.ZodOptional<z.ZodString>;
188
+ siteId: z.ZodString;
189
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
190
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
191
+ event: z.ZodLiteral<"entry.path_changed">;
192
+ data: z.ZodObject<{
193
+ entryId: z.ZodString;
194
+ previousPath: z.ZodString;
195
+ path: z.ZodString;
196
+ contentType: z.ZodString;
197
+ }, z.core.$strict>;
198
+ }, z.core.$strip>, z.ZodObject<{
199
+ timestamp: z.ZodString;
200
+ dispatchId: z.ZodOptional<z.ZodString>;
201
+ siteId: z.ZodString;
202
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
203
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
204
+ event: z.ZodLiteral<"navigation.updated">;
205
+ data: z.ZodObject<{
206
+ menuId: z.ZodOptional<z.ZodString>;
207
+ }, z.core.$strict>;
208
+ }, z.core.$strip>, z.ZodObject<{
209
+ timestamp: z.ZodString;
210
+ dispatchId: z.ZodOptional<z.ZodString>;
211
+ siteId: z.ZodString;
212
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
213
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
214
+ event: z.ZodLiteral<"theme.updated">;
215
+ data: z.ZodObject<{}, z.core.$strict>;
216
+ }, z.core.$strip>, z.ZodObject<{
217
+ timestamp: z.ZodString;
218
+ dispatchId: z.ZodOptional<z.ZodString>;
219
+ siteId: z.ZodString;
220
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
221
+ paths: z.ZodOptional<z.ZodArray<z.ZodString>>;
222
+ event: z.ZodLiteral<"site.settings_updated">;
223
+ data: z.ZodObject<{}, z.core.$strict>;
224
+ }, z.core.$strip>], "event">;
225
+ export type WebhookPayload = z.infer<typeof WebhookPayloadSchema>;
226
+ export type WebhookPayloadForEvent<E extends WebhookEvent> = Extract<WebhookPayload, {
227
+ event: E;
228
+ }>;
229
+ export type WebhookDispatchInputForEvent<E extends WebhookEvent> = Readonly<{
230
+ siteId: string;
231
+ event: E;
232
+ data: WebhookDataForEvent<E>;
233
+ tags: readonly string[];
234
+ paths?: readonly RevalidationPath[];
235
+ }>;
236
+ export type WebhookDispatchInput = {
237
+ [E in WebhookEvent]: WebhookDispatchInputForEvent<E>;
238
+ }[WebhookEvent];
239
+ export {};
@@ -170,6 +170,12 @@ export type RepeaterFieldConfig = BaseFieldConfig & ({
170
170
  * Useful for complex constraints that aren't expressible via field-level config.
171
171
  */
172
172
  validation?: ZodTypeAny;
173
+ /** Whether compact row summaries should be rendered. Defaults to true. */
174
+ showSummary?: boolean;
175
+ /** Optional ordered field IDs to use for compact row summaries. */
176
+ summaryFields?: string[];
177
+ /** Optional positive max character count for compact row summaries. */
178
+ summaryMaxChars?: number;
173
179
  } & ({
174
180
  type: 'repeater';
175
181
  itemLabel?: string;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Repeater list - DnD context wrapper for sortable items
3
3
  */
4
- import type { ReactNode } from 'react';
4
+ import { type ReactNode, type RefObject } from 'react';
5
5
  import type { RepeaterFieldConfig, FieldConfig } from '../../../fields/types';
6
6
  import type { FormBackend } from '../../../backend/types';
7
7
  export interface RepeaterListProps {
@@ -15,5 +15,6 @@ export interface RepeaterListProps {
15
15
  onMove: (from: number, to: number) => void;
16
16
  onRemove: (index: number) => void;
17
17
  renderChild: (field: FieldConfig, path: string) => ReactNode;
18
+ focusFallbackRef?: RefObject<HTMLButtonElement | null>;
18
19
  }
19
- export declare function RepeaterList({ config, backend, basePath, items, minItems, onMove, onRemove, renderChild, }: RepeaterListProps): ReactNode;
20
+ export declare function RepeaterList({ config, backend, basePath, items, minItems, onMove, onRemove, renderChild, focusFallbackRef, }: RepeaterListProps): ReactNode;
@@ -4,9 +4,10 @@
4
4
  *
5
5
  * Routes non-content item fields into a settings modal in the row header.
6
6
  */
7
- import type { ReactNode } from 'react';
7
+ import type { ReactNode, Ref } from 'react';
8
8
  import type { RepeaterFieldConfig, FieldConfig } from '../../../fields/types';
9
9
  import type { FormBackend } from '../../../backend/types';
10
+ import type { RepeaterRowActionFocusTarget } from './RepeaterRowActions';
10
11
  export interface RepeaterRowProps {
11
12
  id: string;
12
13
  index: number;
@@ -15,9 +16,11 @@ export interface RepeaterRowProps {
15
16
  basePath: string;
16
17
  itemsLength: number;
17
18
  minItems: number;
18
- onMove: (from: number, to: number) => void;
19
+ containerWidth: number;
20
+ onMove: (from: number, to: number, focusTarget: RepeaterRowActionFocusTarget) => void;
19
21
  onRemove: (index: number) => void;
20
22
  renderChild: (field: FieldConfig, path: string) => ReactNode;
21
23
  canDrag: boolean;
24
+ actionControlRefs?: Partial<Record<RepeaterRowActionFocusTarget, Ref<HTMLButtonElement>>>;
22
25
  }
23
- export declare function RepeaterRow({ id, index, config, backend, basePath, itemsLength, minItems, onMove, onRemove, renderChild, canDrag, }: RepeaterRowProps): ReactNode;
26
+ export declare function RepeaterRow({ id, index, config, backend, basePath, itemsLength, minItems, containerWidth, onMove, onRemove, renderChild, canDrag, actionControlRefs, }: RepeaterRowProps): ReactNode;
@@ -1,16 +1,21 @@
1
1
  /**
2
- * Repeater row action buttons - move up/down, delete
2
+ * Repeater row action controls - direct reorder buttons plus compact menu.
3
3
  */
4
- import type { ReactNode } from 'react';
4
+ import type { ReactNode, Ref } from 'react';
5
5
  export interface RepeaterRowActionsProps {
6
6
  index: number;
7
7
  itemsLength: number;
8
8
  minItems: number;
9
+ containerWidth?: number;
10
+ actionPresentation?: 'auto' | 'wide' | 'compact';
11
+ itemLabel: string;
9
12
  onMoveUp: () => void;
10
13
  onMoveDown: () => void;
11
14
  onRemove: () => void;
15
+ actionControlRefs?: Partial<Record<RepeaterRowActionFocusTarget, Ref<HTMLButtonElement>>>;
12
16
  showReorderActions?: boolean;
13
17
  disableMoveUp?: boolean;
14
18
  disableMoveDown?: boolean;
15
19
  }
16
- export declare function RepeaterRowActions({ index, itemsLength, minItems, onMoveUp, onMoveDown, onRemove, showReorderActions, disableMoveUp, disableMoveDown, }: RepeaterRowActionsProps): ReactNode;
20
+ export type RepeaterRowActionFocusTarget = 'moveEarlier' | 'moveLater' | 'menu';
21
+ export declare function RepeaterRowActions({ index, itemsLength, minItems, containerWidth, actionPresentation, itemLabel, onMoveUp, onMoveDown, onRemove, actionControlRefs, showReorderActions, disableMoveUp, disableMoveDown, }: RepeaterRowActionsProps): ReactNode;
@@ -1,6 +1,6 @@
1
1
  export { useRepeaterVisibility } from './useRepeaterVisibility';
2
2
  export { useRepeaterRowErrors, type RowFieldError } from './useRepeaterRowErrors';
3
- export { useResolvedItemLabel } from './useResolvedItemLabel';
3
+ export { useResolvedItemLabel, useResolvedRepeaterItemLabel, type ResolvedRepeaterItemLabel, } from './useResolvedItemLabel';
4
4
  export { useLayoutGridCapacity } from './useLayoutGridCapacity';
5
5
  export { useLinearRepeaterDnd, type LinearRepeaterSortingStrategyKind } from './useLinearRepeaterDnd';
6
6
  export { useRepeaterPointerDragCapability } from './useRepeaterPointerDragCapability';
@@ -10,6 +10,7 @@ interface UseLinearRepeaterDndInput {
10
10
  }
11
11
  export interface UseLinearRepeaterDndResult {
12
12
  containerRef: ReturnType<typeof useRepeaterPointerDragCapability>['containerRef'];
13
+ containerWidth: ReturnType<typeof useRepeaterPointerDragCapability>['containerWidth'];
13
14
  breakpoint: ReturnType<typeof useRepeaterPointerDragCapability>['breakpoint'];
14
15
  pointerDragCapability: ReturnType<typeof useRepeaterPointerDragCapability>['pointerDragCapability'];
15
16
  canUsePointerDrag: boolean;
@@ -3,6 +3,7 @@ import { resolveRepeaterGridBreakpointForWidth } from '../../../../../blocks/src
3
3
  import { type RepeaterPointerDragCapability } from '../utils';
4
4
  export interface UseRepeaterPointerDragCapabilityResult {
5
5
  containerRef: RefObject<HTMLDivElement | null>;
6
+ containerWidth: number;
6
7
  breakpoint: ReturnType<typeof resolveRepeaterGridBreakpointForWidth>;
7
8
  pointerDragCapability: RepeaterPointerDragCapability;
8
9
  canUsePointerDrag: boolean;
@@ -1,5 +1,11 @@
1
1
  import type { RepeaterFieldConfig } from '../../../fields/types';
2
2
  import type { FormBackend } from '../../../backend/types';
3
+ import { type RepeaterLabelSource } from '../utils';
4
+ export type ResolvedRepeaterItemLabel = {
5
+ label: string;
6
+ sourceFieldId?: string;
7
+ labelSource: RepeaterLabelSource;
8
+ };
3
9
  /**
4
10
  * Resolves a display label for a repeater item.
5
11
  *
@@ -10,3 +16,4 @@ import type { FormBackend } from '../../../backend/types';
10
16
  * is returned.
11
17
  */
12
18
  export declare function useResolvedItemLabel(config: RepeaterFieldConfig, index: number, backend: FormBackend, basePath: string): string;
19
+ export declare function useResolvedRepeaterItemLabel(config: RepeaterFieldConfig, index: number, backend: FormBackend, basePath: string): ResolvedRepeaterItemLabel;
@@ -4,4 +4,5 @@
4
4
  */
5
5
  import type { RepeaterFieldConfig } from '../../../fields/types';
6
6
  import type { FormBackend } from '../../../backend/types';
7
+ export declare const DEFAULT_REPEATER_SUMMARY_MAX_CHARS = 96;
7
8
  export declare function buildSummary(field: RepeaterFieldConfig, index: number, backend: FormBackend, basePath: string): string;
@@ -1,8 +1,10 @@
1
1
  export { createDefaultItem } from './createDefaultItem';
2
2
  export { buildItemLabel } from './buildItemLabel';
3
- export { buildSummary } from './buildSummary';
3
+ export { buildSummary, DEFAULT_REPEATER_SUMMARY_MAX_CHARS, } from './buildSummary';
4
4
  export { getRepeaterItemFields } from './getRepeaterItemFields';
5
5
  export { getRepeaterItemFieldGroups } from './getRepeaterItemFieldGroups';
6
+ export { resolveRepeaterLabelSource, type RepeaterLabelSource, } from './repeaterLabelSource';
7
+ export { REPEATER_ROW_COMPACT_ACTIONS_WIDTH, isRepeaterRowActionDisabled, resolveRepeaterRowActionRenderPlan, type RepeaterRowActionAvailability, type RepeaterRowActionId, type RepeaterRowActionMenu, type RepeaterRowMenuAction, type RepeaterRowActionPresentation, type RepeaterRowActionRenderPlan, } from './repeaterRowActionsDomain';
6
8
  export { areLayoutGridCapacityContextsEqual } from './layoutGridCapacityContext';
7
9
  export { handleLinearRepeaterDragEnd, resolveLinearRepeaterMoveIntent, resolveRepeaterPointerDragCapability, type LinearRepeaterDragEndEvent, type LinearRepeaterMoveIntent, type RepeaterPointerDragCapability, } from './repeaterDndDomain';
8
10
  export { resolveRepeaterPresentation } from './repeaterPresentation';
@@ -5,7 +5,7 @@ export type RepeaterPointerDragCapability = {
5
5
  } | {
6
6
  kind: 'disabled';
7
7
  breakpoint: RepeaterGridBreakpoint;
8
- reason: 'insufficient-items' | 'small-breakpoint' | 'coarse-pointer';
8
+ reason: 'insufficient-items' | 'coarse-pointer';
9
9
  };
10
10
  export type LinearRepeaterMoveIntent = {
11
11
  kind: 'none';