@riverbankcms/sdk 0.107.0 → 0.109.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 (256) hide show
  1. package/README.md +21 -1
  2. package/dist/{PreviewEditorSidebar-DpAbAl08.mjs → PreviewEditorSidebar-DWqwfy3_.mjs} +48 -28
  3. package/dist/{PreviewEditorUI-O7cn6Xxv.mjs → PreviewEditorUI-B7OL4sfR.mjs} +10 -9
  4. package/dist/{PreviewQueryProvider-D0tnKl0t.mjs → PreviewQueryProvider-D0y2l8JN.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-CVB7urtl.mjs → SdkPreviewModeRuntime-D8Gt9Gbe.mjs} +633 -220
  6. package/dist/{SiteChromeCustomizeContext-C_sizso-.mjs → SiteChromeCustomizeContext-DUpalEdL.mjs} +5764 -1556
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +15383 -11388
  8. package/dist/_dts/api/src/blocks.d.ts +41 -7
  9. package/dist/_dts/api/src/bookingAdjustments.d.ts +5 -0
  10. package/dist/_dts/api/src/bookingOperations.d.ts +4 -0
  11. package/dist/_dts/api/src/bookingRecords.d.ts +177 -127
  12. package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +6 -6
  13. package/dist/_dts/api/src/cache-tags.d.ts +3 -0
  14. package/dist/_dts/api/src/common/envelope.d.ts +7 -0
  15. package/dist/_dts/api/src/contentRuntime.d.ts +19 -1
  16. package/dist/_dts/api/src/courses.d.ts +1 -0
  17. package/dist/_dts/api/src/customerMembershipOutcomes.d.ts +5 -5
  18. package/dist/_dts/api/src/endpoints.d.ts +134 -0
  19. package/dist/_dts/api/src/footer-settings.d.ts +1 -0
  20. package/dist/_dts/api/src/footerSettings.d.ts +8 -0
  21. package/dist/_dts/api/src/index.d.ts +7 -4
  22. package/dist/_dts/api/src/navigation/contracts.d.ts +3 -3
  23. package/dist/_dts/api/src/participantMessaging.d.ts +18 -12
  24. package/dist/_dts/api/src/previewContentContract.d.ts +4 -0
  25. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +1 -0
  26. package/dist/_dts/api/src/sdkContracts.d.ts +309 -1
  27. package/dist/_dts/api/src/siteBanner.d.ts +2 -2
  28. package/dist/_dts/api/src/siteInfrastructure.d.ts +13 -0
  29. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +144 -60
  30. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +35 -1
  31. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +74 -28
  32. package/dist/_dts/block-form/src/widgets/BackgroundGradientWidget/BackgroundGradientField.d.ts +9 -0
  33. package/dist/_dts/block-form/src/widgets/BackgroundGradientWidget/BackgroundGradientWidget.d.ts +3 -4
  34. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +4 -4
  35. package/dist/_dts/blocks/src/index.d.ts +1 -1
  36. package/dist/_dts/blocks/src/primitives/layout/Section.d.ts +0 -1
  37. package/dist/_dts/blocks/src/rendering/server.d.ts +1 -0
  38. package/dist/_dts/blocks/src/system/blocks/audio-player.d.ts +3 -0
  39. package/dist/_dts/blocks/src/system/blocks/body-text.d.ts +3 -0
  40. package/dist/_dts/blocks/src/system/blocks/contact-newsletter.d.ts +3 -0
  41. package/dist/_dts/blocks/src/system/blocks/course-registration.d.ts +1 -22
  42. package/dist/_dts/blocks/src/system/blocks/cta-full.d.ts +3 -0
  43. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +1 -22
  44. package/dist/_dts/blocks/src/system/blocks/file-download.d.ts +3 -0
  45. package/dist/_dts/blocks/src/system/blocks/form.d.ts +3 -0
  46. package/dist/_dts/blocks/src/system/blocks/image-gallery.d.ts +3 -0
  47. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +3 -0
  48. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +3 -0
  49. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime.d.ts +50 -0
  50. package/dist/_dts/blocks/src/system/blocks/site-footer.d.ts +9 -48
  51. package/dist/_dts/blocks/src/system/blocks/site-header.d.ts +3 -0
  52. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +3 -0
  53. package/dist/_dts/blocks/src/system/blocks/testimonials.d.ts +3 -0
  54. package/dist/_dts/blocks/src/system/blocks/video-grid.d.ts +3 -0
  55. package/dist/_dts/blocks/src/system/constants/background.d.ts +1 -1
  56. package/dist/_dts/blocks/src/system/customize/backgrounds.d.ts +16 -6
  57. package/dist/_dts/blocks/src/system/defineBlock.d.ts +9 -1
  58. package/dist/_dts/blocks/src/system/fields/ctas.d.ts +8 -0
  59. package/dist/_dts/blocks/src/system/icons/registry.d.ts +2 -1
  60. package/dist/_dts/blocks/src/system/icons/social.d.ts +5 -0
  61. package/dist/_dts/blocks/src/system/icons/svg.d.ts +1 -0
  62. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +33 -2
  63. package/dist/_dts/blocks/src/system/node/fragments/backgroundLayer.d.ts +13 -0
  64. package/dist/_dts/blocks/src/system/node/fragments/footerNav.d.ts +2 -0
  65. package/dist/_dts/blocks/src/system/node/fragments/styledContainer.d.ts +4 -4
  66. package/dist/_dts/blocks/src/system/node/fragments/styledSection.d.ts +3 -12
  67. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
  68. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +6 -6
  69. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +3 -3
  70. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +2 -2
  71. package/dist/_dts/blocks/src/system/types/link.d.ts +3 -3
  72. package/dist/_dts/content-editor/src/FooterComposerPanel.d.ts +14 -0
  73. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +27 -8
  74. package/dist/_dts/content-editor/src/footerComposer.d.ts +56 -0
  75. package/dist/_dts/content-editor/src/hooks/useEntryActions.d.ts +1 -1
  76. package/dist/_dts/content-editor/src/hooks/useEntryMutations.d.ts +5 -5
  77. package/dist/_dts/content-editor/src/index.d.ts +2 -0
  78. package/dist/_dts/content-editor/src/primitives/PreviewRichTextEditor.d.ts +3 -1
  79. package/dist/_dts/content-editor/src/services/contentEntryServices.d.ts +20 -36
  80. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +5 -1
  81. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +11 -0
  82. package/dist/_dts/content-model/src/content-types/entryValidation.d.ts +31 -0
  83. package/dist/_dts/content-model/src/content-types/scaffold.d.ts +58 -0
  84. package/dist/_dts/content-model/src/content-types/schema.d.ts +1 -1
  85. package/dist/_dts/content-model/src/content-types/sentinels.d.ts +36 -0
  86. package/dist/_dts/content-model/src/definitions/shared.d.ts +3 -0
  87. package/dist/_dts/content-model/src/index.d.ts +3 -0
  88. package/dist/_dts/core/src/booking-date-time.d.ts +8 -0
  89. package/dist/_dts/core/src/branded.d.ts +3 -0
  90. package/dist/_dts/core/src/editor-state.d.ts +4 -0
  91. package/dist/_dts/core/src/footer-composition.d.ts +143 -0
  92. package/dist/_dts/core/src/index.d.ts +2 -0
  93. package/dist/_dts/core/src/public-profile.d.ts +73 -0
  94. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +221 -205
  95. package/dist/_dts/db/src/schemas/forms.d.ts +10 -10
  96. package/dist/_dts/editor/src/primitives/rich-text/RichTextEditorSurface.d.ts +5 -0
  97. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +1 -0
  98. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockCreation.d.ts +2 -1
  99. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockDuplication.d.ts +2 -1
  100. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockReorder.d.ts +2 -1
  101. package/dist/_dts/editor-blocks/src/block-editor/owner.d.ts +10 -0
  102. package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +1 -0
  103. package/dist/_dts/media-core/src/fileMimeDetection.d.ts +16 -0
  104. package/dist/_dts/media-core/src/fileStorage.d.ts +8 -0
  105. package/dist/_dts/media-core/src/storagePathDomain.d.ts +2 -0
  106. package/dist/_dts/media-core/src/uploadVerificationContract.d.ts +3 -0
  107. package/dist/_dts/path-utils/src/index.d.ts +5 -0
  108. package/dist/_dts/preview-next/src/client/blocks/BlockToolbar.d.ts +2 -0
  109. package/dist/_dts/preview-next/src/client/preview/PreviewChromeLayer.d.ts +5 -0
  110. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +2 -1
  111. package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +1 -0
  112. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +2 -1
  113. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +2 -1
  114. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +1 -0
  115. package/dist/_dts/preview-next/src/client/preview/previewErrorMessages.d.ts +4 -0
  116. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorApplyPayload.d.ts +1 -1
  117. package/dist/_dts/sdk/src/cli/commands/audit.d.ts +1 -1
  118. package/dist/_dts/sdk/src/cli/commands/compare.d.ts +1 -1
  119. package/dist/_dts/sdk/src/cli/commands/deploy.d.ts +1 -1
  120. package/dist/_dts/sdk/src/cli/commands/drafts.d.ts +18 -0
  121. package/dist/_dts/sdk/src/cli/commands/entry.d.ts +15 -0
  122. package/dist/_dts/sdk/src/cli/commands/init-docs.d.ts +2 -2
  123. package/dist/_dts/sdk/src/cli/commands/publish-all.d.ts +1 -1
  124. package/dist/_dts/sdk/src/cli/commands/pull.d.ts +1 -0
  125. package/dist/_dts/sdk/src/cli/commands/push/execute/diff.d.ts +1 -1
  126. package/dist/_dts/sdk/src/cli/commands/push/options.d.ts +3 -0
  127. package/dist/_dts/sdk/src/cli/commands/push-execute.d.ts +12 -1
  128. package/dist/_dts/sdk/src/cli/commands/setup.d.ts +1 -0
  129. package/dist/_dts/sdk/src/cli/commands/verify.d.ts +1 -0
  130. package/dist/_dts/sdk/src/cli/content/reader.d.ts +1 -0
  131. package/dist/_dts/sdk/src/cli/helpers.d.ts +22 -1
  132. package/dist/_dts/sdk/src/cli/index.d.ts +4 -0
  133. package/dist/_dts/sdk/src/cli/output.d.ts +88 -0
  134. package/dist/_dts/sdk/src/cli/program.d.ts +29 -0
  135. package/dist/_dts/sdk/src/cli/push-config.d.ts +1 -1
  136. package/dist/_dts/sdk/src/client/management/blocks.d.ts +14 -1
  137. package/dist/_dts/sdk/src/client/management/catalog.d.ts +10 -0
  138. package/dist/_dts/sdk/src/client/management/http.d.ts +7 -1
  139. package/dist/_dts/sdk/src/client/management/index.d.ts +2 -1
  140. package/dist/_dts/sdk/src/client/management/types.d.ts +58 -20
  141. package/dist/_dts/sdk/src/config/content-types.d.ts +2 -0
  142. package/dist/_dts/sdk/src/config/content-validation.d.ts +4 -0
  143. package/dist/_dts/sdk/src/date-time/index.d.ts +68 -0
  144. package/dist/_dts/sdk/src/navigation/index.d.ts +2 -0
  145. package/dist/_dts/sdk/src/public-api/contracts.d.ts +5 -2
  146. package/dist/_dts/sdk/src/rendering/components/Layout.d.ts +2 -1
  147. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +1 -1
  148. package/dist/_dts/sdk/src/version.d.ts +1 -1
  149. package/dist/_dts/site-commands/src/commands.d.ts +900 -827
  150. package/dist/_dts/theme-core/src/accordions/types.d.ts +2 -2
  151. package/dist/_dts/theme-core/src/buttons/core.d.ts +15 -46
  152. package/dist/_dts/theme-core/src/buttons/effectClassification.d.ts +147 -0
  153. package/dist/_dts/theme-core/src/buttons/effects/types.d.ts +2 -3
  154. package/dist/_dts/theme-core/src/buttons/generateDefaultButtonSystem.d.ts +1 -1
  155. package/dist/_dts/theme-core/src/buttons/index.d.ts +1 -0
  156. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  157. package/dist/_dts/theme-core/src/buttons/personalities/two-tone-pill.d.ts +17 -0
  158. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +45 -33
  159. package/dist/_dts/theme-core/src/buttons/presets.d.ts +4 -25
  160. package/dist/_dts/theme-core/src/buttons/resolveButtonColourStates.d.ts +100 -0
  161. package/dist/_dts/theme-core/src/buttons/resolvedButtonCss.d.ts +16 -0
  162. package/dist/_dts/theme-core/src/buttons/types.d.ts +104 -86
  163. package/dist/_dts/theme-core/src/cards/types.d.ts +16 -16
  164. package/dist/_dts/theme-core/src/footer/mode.d.ts +15 -0
  165. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  166. package/dist/_dts/theme-core/src/gradients/presets.d.ts +200 -8
  167. package/dist/_dts/theme-core/src/gradients/utils.d.ts +6 -2
  168. package/dist/_dts/theme-core/src/interactive/baseSchema.d.ts +1 -1
  169. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +117 -150
  170. package/dist/_dts/theme-core/src/mock-themes/modern-minimal.d.ts +1 -1
  171. package/dist/_dts/theme-core/src/navigation/types.d.ts +3 -3
  172. package/dist/_dts/theme-core/src/palette/curated/index.d.ts +2 -2
  173. package/dist/_dts/theme-core/src/palette/curated/types.d.ts +5 -8
  174. package/dist/_dts/theme-core/src/palette/index.d.ts +0 -1
  175. package/dist/_dts/theme-core/src/schema.d.ts +1264 -138
  176. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  177. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +10 -10
  178. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +12 -1
  179. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +3 -2
  180. package/dist/_dts/theme-core/src/site-styles/pageDesignIntent.d.ts +13 -6
  181. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +29 -8
  182. package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +15 -0
  183. package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +2 -2
  184. package/dist/cli/index.mjs +68552 -66955
  185. package/dist/cli/init-docs/content/cli-reference.md +50 -7
  186. package/dist/cli/init-docs/content/content-management.md +7 -4
  187. package/dist/cli/init-docs/content/workflow-publish.md +5 -1
  188. package/dist/client/{DiscountCodeDisclosure-BwGkvmVH.mjs → DiscountCodeDisclosure-DU1ygxU2.mjs} +1 -1
  189. package/dist/client/{EventCombined.client-JnWE6Hzc.mjs → EventCombined.client-DB5zagCo.mjs} +3 -3
  190. package/dist/client/{EventListing.client-DQewc_kg.mjs → EventListing.client-CTX9JHBL.mjs} +2 -2
  191. package/dist/client/{LeafletStaticMap-DPAU3SFt.mjs → LeafletStaticMap-BYImhgiB.mjs} +1 -1
  192. package/dist/client/{MagicLinkForm-D4kpWCbW.mjs → MagicLinkForm-CRkw_M3l.mjs} +2 -2
  193. package/dist/client/{StepIndicator-CBlkb4rA.mjs → StepIndicator-BnmVBJJh.mjs} +2 -2
  194. package/dist/client/{accordion-DAIBVpTS.mjs → accordion-CeGreumd.mjs} +1 -1
  195. package/dist/client/{bookingForm-DZ-4l5_1.mjs → bookingForm-CSzFNrpN.mjs} +6 -6
  196. package/dist/client/bookings.mjs +637 -328
  197. package/dist/client/{buttons-DJgynGHQ.mjs → buttons-DoFV7KDL.mjs} +618 -306
  198. package/dist/client/{carousel-D-SLfX8r.mjs → carousel-B2jDtogf.mjs} +1 -1
  199. package/dist/client/{cart-CEgbgJhX.mjs → cart-D-jZ-vaY.mjs} +3 -3
  200. package/dist/client/{checkout-CXWrCRAA.mjs → checkout-Dza-LA7N.mjs} +3 -3
  201. package/dist/client/client.mjs +2497 -1216
  202. package/dist/client/{colorStyles-jZS6KfkP.mjs → colorStyles-CrgzoXsm.mjs} +1 -30
  203. package/dist/client/{courseRegistration-DVmLrRVz.mjs → courseRegistration-TYkNychb.mjs} +7 -7
  204. package/dist/client/{eventCalendar-DCuyPY_c.mjs → eventCalendar-BI_90SsT.mjs} +5 -5
  205. package/dist/client/{eventCombined-kP2CA2D4.mjs → eventCombined-mNrpryE9.mjs} +2 -2
  206. package/dist/client/{eventDetails-DU0LeF5e.mjs → eventDetails-D4GVlCIY.mjs} +3 -3
  207. package/dist/client/{eventListing-CcHF87BI.mjs → eventListing-YhKN018y.mjs} +2 -2
  208. package/dist/client/{eventRegistration-DJnR0yFH.mjs → eventRegistration-CdHGtilr.mjs} +7 -7
  209. package/dist/client/foregroundContract-xICPq59x.mjs +31 -0
  210. package/dist/client/{form-CH1lCusH.mjs → form-AcAL45rA.mjs} +2 -2
  211. package/dist/client/{headerSection-CBPFZoku.mjs → headerSection-uEC52ueD.mjs} +3 -3
  212. package/dist/client/hooks.mjs +1249 -841
  213. package/dist/client/{locationMap-Cx1hBg5n.mjs → locationMap-_wJDSUYe.mjs} +3 -3
  214. package/dist/client/{media-DHtSxS5V.mjs → media-BK0O3b-U.mjs} +3 -2
  215. package/dist/client/{newsletterForm-1ZL_ti9u.mjs → newsletterForm-DrArsb2B.mjs} +2 -2
  216. package/dist/client/{pricing-BIbzmV0G.mjs → pricing-BSYVghwo.mjs} +1 -1
  217. package/dist/client/{productDetail-BTh5gHBV.mjs → productDetail-Dyk90sMs.mjs} +3 -3
  218. package/dist/client/{productList-Cc7OMrqN.mjs → productList-BCKThwAI.mjs} +3 -3
  219. package/dist/client/{propsDecoder-oR-M-ISN.mjs → propsDecoder-CkXxkdSR.mjs} +96 -33
  220. package/dist/client/rendering/client.mjs +1278 -523
  221. package/dist/client/rendering/islands.mjs +19 -19
  222. package/dist/client/rendering.mjs +2308 -1028
  223. package/dist/client/{shop-CQ_YbCnn.mjs → shop-DeltVH10.mjs} +6 -6
  224. package/dist/client/{shop-commerce-BM-AoD3M.mjs → shop-commerce-BD9Jsm2Z.mjs} +6 -6
  225. package/dist/client/{shop-commerce-store-DFMQhU5p.mjs → shop-commerce-store-CmXD6FDS.mjs} +1 -1
  226. package/dist/client/{shopShared-D0SKO2Cu.mjs → shopShared-B8v-lH_F.mjs} +2 -2
  227. package/dist/client/{useDiscountCodeUi-CrG4_ARt.mjs → useDiscountCodeUi-DbWJN8ld.mjs} +1 -1
  228. package/dist/client/{useEventFilters-CxK8Fekl.mjs → useEventFilters-EJIMUnqT.mjs} +46 -69
  229. package/dist/client/{usePolling-jcVryNgZ.mjs → usePolling-Cmh14fc7.mjs} +2 -2
  230. package/dist/preview-next/before-render.mjs +213 -0
  231. package/dist/preview-next/client/runtime.mjs +4 -4
  232. package/dist/preview-next/middleware.mjs +213 -0
  233. package/dist/{previewAuthStore-BPcJPzdz.mjs → previewAuthStore-CTO7CRPk.mjs} +213 -0
  234. package/dist/{sdk-runtime-C39Rsk-x.mjs → sdk-runtime-Dou0GAav.mjs} +2 -2
  235. package/dist/{separator-BoMSQnsP.mjs → separator-CI5wZNXT.mjs} +1 -1
  236. package/dist/server/components.mjs +2370 -1132
  237. package/dist/server/config-validation.mjs +1256 -842
  238. package/dist/server/config.mjs +1256 -843
  239. package/dist/server/data.mjs +1249 -841
  240. package/dist/server/date-time.mjs +386 -0
  241. package/dist/server/index.mjs +214 -1
  242. package/dist/server/navigation.mjs +9 -3
  243. package/dist/server/next.mjs +3421 -1949
  244. package/dist/server/page-converter.mjs +1236 -659
  245. package/dist/server/prebuild.mjs +1 -1
  246. package/dist/server/rendering/server.mjs +2074 -1060
  247. package/dist/server/rendering.mjs +2370 -1132
  248. package/dist/server/routing.mjs +1543 -1062
  249. package/dist/server/server.mjs +1464 -843
  250. package/dist/server/theme-bridge.mjs +1581 -474
  251. package/dist/server/theme.mjs +614 -305
  252. package/dist/styles/index.css +12 -1
  253. package/package.json +7 -1
  254. package/dist/_dts/theme-core/src/buttons/presets/types.d.ts +0 -88
  255. package/dist/_dts/theme-core/src/buttons/utils/contrast.d.ts +0 -38
  256. package/dist/_dts/theme-core/src/palette/themePaletteCompatibility.d.ts +0 -57
@@ -30,15 +30,15 @@ export type StyledContainerConfig = {
30
30
  * Base CSS classes always applied to the container element.
31
31
  *
32
32
  * This element is the containing block for absolute-positioned background layers.
33
- * We default to `rb-overflow-hidden` so background layers clip correctly
34
- * (especially with rounded corners + scaled images).
33
+ * Decorative background layers clip in their own absolute frame so this
34
+ * foreground root can leave focus rings and editor chrome visible.
35
35
  *
36
- * @default 'rb-relative rb-isolate rb-overflow-hidden'
36
+ * @default 'rb-relative rb-isolate rb-overflow-visible'
37
37
  */
38
38
  baseClassName?: string;
39
39
  /**
40
40
  * CSS class to apply to background image layer.
41
- * @default 'rb-absolute rb-z-neg-10'
41
+ * @default 'rb-absolute rb-z-0'
42
42
  */
43
43
  imageClassName?: string;
44
44
  /**
@@ -37,13 +37,13 @@ export type StyledSectionConfig = {
37
37
  background?: string;
38
38
  /**
39
39
  * Path to the section styles data in the content (e.g., '_sectionStyles').
40
- * This path is used for binding className, allowOverflow, and background layers.
40
+ * This path is used for binding className and background layers.
41
41
  * @default '_sectionStyles'
42
42
  */
43
43
  bindFrom?: string;
44
44
  /**
45
45
  * CSS class to apply to background image layer.
46
- * @default 'rb-absolute rb-z-neg-10'
46
+ * @default 'rb-absolute rb-z-0'
47
47
  */
48
48
  imageClassName?: string;
49
49
  /**
@@ -63,15 +63,6 @@ export type StyledSectionConfig = {
63
63
  * Browser fetch priority hint for the automatic background image layer.
64
64
  */
65
65
  backgroundImageFetchPriority?: MediaImageFetchPriority;
66
- /**
67
- * Force section overflow visible instead of deriving it from the background.
68
- *
69
- * Useful for layouts with animated foreground elements where no clipped
70
- * section background image is being rendered.
71
- *
72
- * @default false
73
- */
74
- allowOverflow?: boolean;
75
66
  /**
76
67
  * Optional path to a boolean flag in block content that should trigger
77
68
  * full-width section behavior (removing horizontal `rb-px-*` classes).
@@ -88,7 +79,7 @@ export type StyledSectionConfig = {
88
79
  * - Creating a section wrapper with background theme
89
80
  * - Adding background color/gradient/image layers
90
81
  * - Binding className to section styles with transform
91
- * - Binding allowOverflow for background positioning
82
+ * - Keeping foreground overflow visible while decorative backgrounds clip independently
92
83
  * - Wrapping content children
93
84
  *
94
85
  * Use this helper to eliminate 25+ lines of boilerplate section setup code.
@@ -20,7 +20,7 @@ export type AllowedNodeType = (typeof ALLOWED_NODE_TYPES)[number];
20
20
  * $bind.transforms within custom block layouts. Transform IDs
21
21
  * not in this list will be rejected during validation.
22
22
  */
23
- export declare const ALLOWED_TRANSFORM_IDS: readonly ["string.uppercase", "value.fallback", "date.formatShort", "array.length", "value.jsonArray", "value.csv", "array.marqueeLoop", "value.mapToken", "layout.maxWidthClass", "layout.headerRootClass", "layout.footerRootClass", "layout.headerRootStyle", "layout.headerSectionBackground", "layout.classicNavMode", "layout.footerRootStyle", "ui.headerNavLinkClass", "ui.headingClassFromAlignment", "ui.bodyClassFromAlignment", "ui.stackAlignFromAlignment", "ui.sectionStateTone", "ui.heroContentWrapperClass", "ui.heroCtaJustify", "ui.heroStackJustifyFromVerticalAlignment", "ui.heroGridClassFromVerticalAlignment", "ui.conditionalClass", "ui.twoColumnContainerClass", "ui.twoColumnFlexBasis", "ui.imageGalleryFilterClass", "ui.imageGalleryTileClass", "ui.imageGalleryTileStyle", "ui.imageGalleryMarqueeTileStyle", "ui.imageGalleryMarqueeDuration", "ui.imageGalleryMarqueeDirection", "ui.imageFragmentClass", "ui.imageFragmentSize", "media.fromUrl", "background.resolveStyle", "background.resolveColorsStyle", "background.resolveAllowOverflow", "background.resolveImageStyle", "background.resolveImageClassName", "background.resolveOverlayStyle", "links.resolve", "links.label", "content.interpolateRichTextTokens", "boxStyles.spacing", "boxStyles.resolveRootClass", "boxStyles.resolveRootStyle", "boxStyles.semanticGap", "boxStyles.semanticGapValue", "boxStyles.cardVariantClass", "containerStyles.resolveBoxClassName"];
23
+ export declare const ALLOWED_TRANSFORM_IDS: readonly ["string.uppercase", "value.fallback", "date.formatShort", "array.length", "value.jsonArray", "value.csv", "array.marqueeLoop", "value.mapToken", "layout.maxWidthClass", "layout.headerRootClass", "layout.footerRootClass", "layout.headerRootStyle", "layout.headerSectionBackground", "layout.classicNavMode", "layout.footerRootStyle", "ui.headerNavLinkClass", "ui.headingClassFromAlignment", "ui.bodyClassFromAlignment", "ui.stackAlignFromAlignment", "ui.sectionStateTone", "ui.heroContentWrapperClass", "ui.heroCtaJustify", "ui.heroStackJustifyFromVerticalAlignment", "ui.heroGridClassFromVerticalAlignment", "ui.conditionalClass", "ui.twoColumnContainerClass", "ui.twoColumnFlexBasis", "ui.imageGalleryFilterClass", "ui.imageGalleryTileClass", "ui.imageGalleryTileStyle", "ui.imageGalleryMarqueeTileStyle", "ui.imageGalleryMarqueeDuration", "ui.imageGalleryMarqueeDirection", "ui.imageFragmentClass", "ui.imageFragmentSize", "media.fromUrl", "background.resolveStyle", "background.resolveColorsStyle", "background.resolveFrameClassName", "background.resolveImageStyle", "background.resolveImageClassName", "background.resolveOverlayStyle", "links.resolve", "links.label", "content.interpolateRichTextTokens", "boxStyles.spacing", "boxStyles.resolveRootClass", "boxStyles.resolveRootStyle", "boxStyles.semanticGap", "boxStyles.semanticGapValue", "boxStyles.cardVariantClass", "containerStyles.resolveBoxClassName"];
24
24
  export type AllowedTransformId = (typeof ALLOWED_TRANSFORM_IDS)[number];
25
25
  /**
26
26
  * Set for O(1) lookup of allowed node types.
@@ -2463,7 +2463,7 @@ export declare const runtimeBackedBlockClientEntries: {
2463
2463
  className: string | null;
2464
2464
  titleText: string;
2465
2465
  bodyText: string;
2466
- stepLabels: readonly ("Details" | "Date" | "Event" | "Tickets" | "Payment")[];
2466
+ stepLabels: readonly ("Date" | "Event" | "Tickets" | "Details" | "Payment")[];
2467
2467
  summaryButtonText: string;
2468
2468
  }>;
2469
2469
  hydration: Readonly<Omit<import("../nodes/event-registration").EventRegistrationClientProps, "siteId" | "stage" | "className" | "buttonText" | "registrationEndpoint" | "eligibilityEndpoint" | "checkoutEndpoint">>;
@@ -2543,7 +2543,7 @@ export declare const runtimeBackedBlockClientEntries: {
2543
2543
  className: string | null;
2544
2544
  titleText: string;
2545
2545
  bodyText: string;
2546
- stepLabels: readonly ("Details" | "Date" | "Event" | "Tickets" | "Payment")[];
2546
+ stepLabels: readonly ("Date" | "Event" | "Tickets" | "Details" | "Payment")[];
2547
2547
  summaryButtonText: string;
2548
2548
  }>;
2549
2549
  hydration: Readonly<Omit<import("../nodes/event-registration").EventRegistrationClientProps, "siteId" | "stage" | "className" | "buttonText" | "registrationEndpoint" | "eligibilityEndpoint" | "checkoutEndpoint">>;
@@ -2555,7 +2555,7 @@ export declare const runtimeBackedBlockClientEntries: {
2555
2555
  className: string | null;
2556
2556
  titleText: string;
2557
2557
  bodyText: string;
2558
- stepLabels: readonly ("Details" | "Date" | "Event" | "Tickets" | "Payment")[];
2558
+ stepLabels: readonly ("Date" | "Event" | "Tickets" | "Details" | "Payment")[];
2559
2559
  summaryButtonText: string;
2560
2560
  }>;
2561
2561
  hydration: Readonly<Omit<import("../nodes/event-registration").EventRegistrationClientProps, "siteId" | "stage" | "className" | "buttonText" | "registrationEndpoint" | "eligibilityEndpoint" | "checkoutEndpoint">>;
@@ -2606,7 +2606,7 @@ export declare const runtimeBackedBlockClientEntries: {
2606
2606
  className: string | null;
2607
2607
  titleText: string;
2608
2608
  bodyText: string;
2609
- stepLabels: readonly ("Details" | "Date" | "Event" | "Tickets" | "Payment")[];
2609
+ stepLabels: readonly ("Date" | "Event" | "Tickets" | "Details" | "Payment")[];
2610
2610
  summaryButtonText: string;
2611
2611
  }>;
2612
2612
  hydration: Readonly<Omit<import("../nodes/event-registration").EventRegistrationClientProps, "siteId" | "stage" | "className" | "buttonText" | "registrationEndpoint" | "eligibilityEndpoint" | "checkoutEndpoint">>;
@@ -2686,7 +2686,7 @@ export declare const runtimeBackedBlockClientEntries: {
2686
2686
  className: string | null;
2687
2687
  titleText: string;
2688
2688
  bodyText: string;
2689
- stepLabels: readonly ("Details" | "Date" | "Event" | "Tickets" | "Payment")[];
2689
+ stepLabels: readonly ("Date" | "Event" | "Tickets" | "Details" | "Payment")[];
2690
2690
  summaryButtonText: string;
2691
2691
  }>;
2692
2692
  hydration: Readonly<Omit<import("../nodes/event-registration").EventRegistrationClientProps, "siteId" | "stage" | "className" | "buttonText" | "registrationEndpoint" | "eligibilityEndpoint" | "checkoutEndpoint">>;
@@ -2698,7 +2698,7 @@ export declare const runtimeBackedBlockClientEntries: {
2698
2698
  className: string | null;
2699
2699
  titleText: string;
2700
2700
  bodyText: string;
2701
- stepLabels: readonly ("Details" | "Date" | "Event" | "Tickets" | "Payment")[];
2701
+ stepLabels: readonly ("Date" | "Event" | "Tickets" | "Details" | "Payment")[];
2702
2702
  summaryButtonText: string;
2703
2703
  }>;
2704
2704
  hydration: Readonly<Omit<import("../nodes/event-registration").EventRegistrationClientProps, "siteId" | "stage" | "className" | "buttonText" | "registrationEndpoint" | "eligibilityEndpoint" | "checkoutEndpoint">>;
@@ -1250,7 +1250,7 @@ export declare const runtimeBackedBlockServerEntries: {
1250
1250
  className: string | null;
1251
1251
  titleText: string;
1252
1252
  bodyText: string;
1253
- stepLabels: readonly ("Details" | "Date" | "Event" | "Tickets" | "Payment")[];
1253
+ stepLabels: readonly ("Date" | "Event" | "Tickets" | "Details" | "Payment")[];
1254
1254
  summaryButtonText: string;
1255
1255
  }>;
1256
1256
  hydration: Readonly<Omit<import("../nodes/event-registration").EventRegistrationClientProps, "siteId" | "stage" | "className" | "buttonText" | "registrationEndpoint" | "eligibilityEndpoint" | "checkoutEndpoint">>;
@@ -1330,7 +1330,7 @@ export declare const runtimeBackedBlockServerEntries: {
1330
1330
  className: string | null;
1331
1331
  titleText: string;
1332
1332
  bodyText: string;
1333
- stepLabels: readonly ("Details" | "Date" | "Event" | "Tickets" | "Payment")[];
1333
+ stepLabels: readonly ("Date" | "Event" | "Tickets" | "Details" | "Payment")[];
1334
1334
  summaryButtonText: string;
1335
1335
  }>;
1336
1336
  hydration: Readonly<Omit<import("../nodes/event-registration").EventRegistrationClientProps, "siteId" | "stage" | "className" | "buttonText" | "registrationEndpoint" | "eligibilityEndpoint" | "checkoutEndpoint">>;
@@ -1342,7 +1342,7 @@ export declare const runtimeBackedBlockServerEntries: {
1342
1342
  className: string | null;
1343
1343
  titleText: string;
1344
1344
  bodyText: string;
1345
- stepLabels: readonly ("Details" | "Date" | "Event" | "Tickets" | "Payment")[];
1345
+ stepLabels: readonly ("Date" | "Event" | "Tickets" | "Details" | "Payment")[];
1346
1346
  summaryButtonText: string;
1347
1347
  }>;
1348
1348
  hydration: Readonly<Omit<import("../nodes/event-registration").EventRegistrationClientProps, "siteId" | "stage" | "className" | "buttonText" | "registrationEndpoint" | "eligibilityEndpoint" | "checkoutEndpoint">>;
@@ -20,8 +20,8 @@ export declare const eventLayoutSchema: z.ZodEnum<{
20
20
  compact: "compact";
21
21
  }>;
22
22
  export declare const eventCalendarDisplayModeSchema: z.ZodEnum<{
23
- list: "list";
24
23
  calendar: "calendar";
24
+ list: "list";
25
25
  combined: "combined";
26
26
  timetable: "timetable";
27
27
  "week-board": "week-board";
@@ -36,8 +36,8 @@ export declare const columnOptionSchema: z.ZodEnum<{
36
36
  4: "4";
37
37
  }>;
38
38
  export declare const weekStartSchema: z.ZodEnum<{
39
- sunday: "sunday";
40
39
  monday: "monday";
40
+ sunday: "sunday";
41
41
  }>;
42
42
  export declare const filterAutoShowSchema: z.ZodEnum<{
43
43
  auto: "auto";
@@ -68,8 +68,8 @@ export declare const internalResolvedLinkSchema: z.ZodObject<{
68
68
  routeId: z.ZodString;
69
69
  entityId: z.ZodString;
70
70
  entityType: z.ZodEnum<{
71
- page: "page";
72
71
  content: "content";
72
+ page: "page";
73
73
  }>;
74
74
  href: z.ZodString;
75
75
  title: z.ZodString;
@@ -83,8 +83,8 @@ export declare const internalLinkSchema: z.ZodUnion<readonly [z.ZodObject<{
83
83
  routeId: z.ZodString;
84
84
  entityId: z.ZodString;
85
85
  entityType: z.ZodEnum<{
86
- page: "page";
87
86
  content: "content";
87
+ page: "page";
88
88
  }>;
89
89
  href: z.ZodString;
90
90
  title: z.ZodString;
@@ -118,8 +118,8 @@ export declare const linkSchema: z.ZodUnion<readonly [z.ZodUnion<readonly [z.Zod
118
118
  routeId: z.ZodString;
119
119
  entityId: z.ZodString;
120
120
  entityType: z.ZodEnum<{
121
- page: "page";
122
121
  content: "content";
122
+ page: "page";
123
123
  }>;
124
124
  href: z.ZodString;
125
125
  title: z.ZodString;
@@ -0,0 +1,14 @@
1
+ import type { ApiClient } from '../../api/src/request';
2
+ import { type FooterEditorTarget } from './footerComposer';
3
+ export declare function FooterComposerPanel({ apiClient, siteId: rawSiteId, customFooterMode, manageLinksHref, manageSettingsHref, legalRegion, initialTarget, variant, canEdit, onSaved, }: {
4
+ apiClient: ApiClient;
5
+ siteId: string;
6
+ customFooterMode: 'default' | 'blocks' | 'default+blocks' | 'none';
7
+ manageLinksHref: string;
8
+ manageSettingsHref: string;
9
+ legalRegion?: 'integrated' | 'separate';
10
+ initialTarget?: FooterEditorTarget;
11
+ variant?: 'full' | 'sidebar';
12
+ canEdit?: boolean;
13
+ onSaved?: () => void;
14
+ }): import("react").JSX.Element;
@@ -3,7 +3,7 @@ import type { EditorBlockId } from '../../../core/src/index';
3
3
  import type { BlockItem } from '../../../editor-blocks/src/block-editor/types';
4
4
  import { type ReactNode } from 'react';
5
5
  import { type PublishOptions } from '../hooks/useEntryActions';
6
- import { type ApiClient } from '../services';
6
+ import { type ApiClient, type ContentEditorServices } from '../services';
7
7
  import type { DraftWorkflowStatus } from '../types';
8
8
  import { type EditorUiState } from '../ui/editorUiStore';
9
9
  import type { ResolveBlockManifest } from '../ui/blockValidationView';
@@ -47,12 +47,16 @@ export type EntryRecoveryConflictState = Readonly<{
47
47
  discardRecoveredChanges: () => void;
48
48
  }>;
49
49
  /** Actions returned by useEntryActions */
50
- export type EntryActions = {
50
+ export type EntryActions = Readonly<{
51
+ kind: 'entryLifecycle';
51
52
  saveDraft: () => Promise<void>;
52
53
  publish: (options?: PublishOptions) => Promise<void>;
53
54
  discardDraft: () => Promise<void>;
54
55
  deleteEntry: () => Promise<void>;
55
- };
56
+ }> | Readonly<{
57
+ kind: 'pageSurfaceDraft';
58
+ saveDraft: () => Promise<void>;
59
+ }>;
56
60
  export type EntryControllerContextValue = {
57
61
  entry: ContentEntrySnapshot;
58
62
  baseline: Record<string, unknown>;
@@ -68,7 +72,6 @@ type BaseInternalProps = {
68
72
  children: ReactNode;
69
73
  apiClient: ApiClient;
70
74
  siteId: string;
71
- entryId: string;
72
75
  routeId?: string;
73
76
  type: string;
74
77
  schema: ContentTypeSchema;
@@ -84,17 +87,33 @@ type BaseInternalProps = {
84
87
  historyShortcutsEnabled?: boolean;
85
88
  resolveBlockManifest?: ResolveBlockManifest;
86
89
  };
87
- type PageInternalProps = BaseInternalProps & {
90
+ type EditorOwnerServiceProps = Readonly<{
91
+ owner: {
92
+ kind: 'contentEntry';
93
+ contentEntryId: string;
94
+ };
95
+ services?: Extract<ContentEditorServices, {
96
+ kind: 'entryLifecycle';
97
+ }>;
98
+ }> | Readonly<{
99
+ owner: {
100
+ kind: 'pageSurface';
101
+ pageSurfaceId: string;
102
+ };
103
+ services: Extract<ContentEditorServices, {
104
+ kind: 'pageSurfaceDraft';
105
+ }>;
106
+ }>;
107
+ type PageInternalProps = {
88
108
  kind: 'page';
89
109
  initialStatus?: 'draft' | 'scheduled' | 'published';
90
- } & {
91
110
  initialBlocks?: BlockItem[];
92
111
  };
93
- type ContentInternalProps = BaseInternalProps & {
112
+ type ContentInternalProps = {
94
113
  kind: 'content';
95
114
  initialBlocks?: BlockItem[];
96
115
  };
97
- type EntryControllerProviderProps = PageInternalProps | ContentInternalProps;
116
+ type EntryControllerProviderProps = BaseInternalProps & EditorOwnerServiceProps & (PageInternalProps | ContentInternalProps);
98
117
  /**
99
118
  * Entry Controller Provider
100
119
  *
@@ -0,0 +1,56 @@
1
+ import { type FooterArrangementPlan, type FooterCompositionV1, type FooterModuleId, type FooterNavigationRole, type FooterSection, type PublicProfile } from '../../core/src/index';
2
+ export type FooterEditorTarget = Readonly<{
3
+ kind: 'overview';
4
+ }> | Readonly<{
5
+ kind: 'module';
6
+ moduleId: FooterModuleId;
7
+ }> | Readonly<{
8
+ kind: 'shared-profile';
9
+ section: 'contact' | 'opening-hours' | 'social-links';
10
+ }>;
11
+ export type FooterEditorSource = Readonly<{
12
+ kind: 'footer-local';
13
+ description: string;
14
+ }> | Readonly<{
15
+ kind: 'site-identity';
16
+ description: string;
17
+ }> | Readonly<{
18
+ kind: 'footer-menu';
19
+ role: FooterNavigationRole;
20
+ description: string;
21
+ }> | Readonly<{
22
+ kind: 'business-address';
23
+ description: string;
24
+ }> | Readonly<{
25
+ kind: 'public-profile';
26
+ section: 'contact' | 'opening-hours' | 'social-links';
27
+ description: string;
28
+ }>;
29
+ export type FooterEditorSectionPlan = Readonly<{
30
+ section: FooterSection;
31
+ label: string;
32
+ selected: boolean;
33
+ source: FooterEditorSource;
34
+ availability: 'ready' | 'missing-source';
35
+ status: string | null;
36
+ actions: readonly ('edit' | 'hide' | 'show' | 'manage-links' | 'repair')[];
37
+ }>;
38
+ export type FooterEditorViewPlan = Readonly<{
39
+ scopeLabel: 'All pages';
40
+ shown: readonly FooterEditorSectionPlan[];
41
+ available: readonly FooterEditorSectionPlan[];
42
+ arrangement: FooterArrangementPlan;
43
+ }>;
44
+ type FooterEditorViewPlanInput = Readonly<{
45
+ composition: FooterCompositionV1;
46
+ publicProfile: PublicProfile;
47
+ hasBusinessAddress: boolean;
48
+ hasLogo?: boolean;
49
+ hasMainNavigation?: boolean;
50
+ hasLegalPolicyNavigation?: boolean;
51
+ canEdit: boolean;
52
+ legalRegion?: 'integrated' | 'separate';
53
+ }>;
54
+ export declare function footerModuleLabel(section: FooterSection): string;
55
+ export declare function planFooterEditorView(input: FooterEditorViewPlanInput): FooterEditorViewPlan;
56
+ export {};
@@ -3,7 +3,7 @@ import type { EditorUiStoreInstance } from '../ui/editorUiStore';
3
3
  import type { PublishEntryResult } from '../services/contentEntryServices';
4
4
  /** Services interface for entry operations */
5
5
  export type EntryServices = {
6
- deleteEntry: () => Promise<void>;
6
+ deleteEntry?: () => Promise<void>;
7
7
  };
8
8
  export type PublishOptions = {
9
9
  mode?: 'default' | 'now';
@@ -1,11 +1,11 @@
1
- import type { ContentEntrySnapshot } from "../../../content-model/src/index";
2
- import type { EditorUiState } from "../ui/editorUiStore";
3
- import type { PublishEntryResult } from "../services/contentEntryServices";
1
+ import type { ContentEntrySnapshot } from '../../../content-model/src/index';
2
+ import type { EditorUiState } from '../ui/editorUiStore';
3
+ import type { PublishEntryResult } from '../services/contentEntryServices';
4
4
  type StoreApi<T> = {
5
5
  getState: () => T;
6
6
  };
7
7
  export declare function usePublishEntryMutation<TEntry extends ContentEntrySnapshot = ContentEntrySnapshot, TPublishPayload = unknown>({ publishFn, siteId, type, entryId, isPage, pageId, uiStore, }: {
8
- publishFn: (payload: TPublishPayload | undefined) => Promise<PublishEntryResult<TEntry>>;
8
+ publishFn?: (payload: TPublishPayload | undefined) => Promise<PublishEntryResult<TEntry>>;
9
9
  siteId: string;
10
10
  type: string;
11
11
  entryId: string;
@@ -18,7 +18,7 @@ export declare function usePublishEntryMutation<TEntry extends ContentEntrySnaps
18
18
  publishedBlocks?: readonly import("../../../api/src/index").PublishedBlockBaseline[];
19
19
  }>, Error, TPublishPayload | undefined, unknown>;
20
20
  export declare function useDiscardDraftMutation<TEntry = unknown>({ discardFn, siteId, type, entryId, isPage, pageId, }: {
21
- discardFn: () => Promise<TEntry>;
21
+ discardFn?: () => Promise<TEntry>;
22
22
  siteId: string;
23
23
  type: string;
24
24
  entryId: string;
@@ -23,6 +23,8 @@ export { PreviewTextEditor } from './primitives/PreviewTextEditor';
23
23
  export { PreviewInlineTextEditor } from './primitives/PreviewInlineTextEditor';
24
24
  export { PreviewRichTextEditor } from './primitives/PreviewRichTextEditor';
25
25
  export { recordsEqual as editorValuesEqual } from './ui/stores/utils';
26
+ export { footerModuleLabel, planFooterEditorView, type FooterEditorSectionPlan, type FooterEditorSource, type FooterEditorTarget, type FooterEditorViewPlan, } from './footerComposer';
27
+ export { FooterComposerPanel } from './FooterComposerPanel';
26
28
  export { useStoreBinding, parseEditorPath } from './primitives/shared';
27
29
  export type { PathInfo } from './primitives/shared';
28
30
  export * from './ai/overlayHelpers';
@@ -1,12 +1,14 @@
1
1
  import type { RichTextPrimitiveProps } from "../../../blocks/src/index";
2
2
  import type { PreviewLinkedEntryFieldBinding } from '../../../blocks/src/system/data/index';
3
+ import { type ReactNode } from 'react';
3
4
  type PreviewRichTextEditorProps = RichTextPrimitiveProps & {
4
5
  onLinkedEntryFieldFocus?: (binding: PreviewLinkedEntryFieldBinding) => void;
5
6
  onBlockFieldFocus?: (path: string) => void;
7
+ renderToolbarHost?: (toolbar: ReactNode) => ReactNode;
6
8
  };
7
9
  /**
8
10
  * Memoized version to prevent unnecessary re-renders.
9
11
  * Only re-renders when path, doc, variant, or className props actually change.
10
12
  */
11
- export declare const PreviewRichTextEditor: import("react").MemoExoticComponent<({ path, linkedEntryField, onLinkedEntryFieldFocus, onBlockFieldFocus, className, doc, variant, placeholder, ariaLabel, }: PreviewRichTextEditorProps) => import("react").JSX.Element>;
13
+ export declare const PreviewRichTextEditor: import("react").MemoExoticComponent<({ path, linkedEntryField, onLinkedEntryFieldFocus, onBlockFieldFocus, className, doc, as: Comp, variant, placeholder, ariaLabel, renderToolbarHost, }: PreviewRichTextEditorProps) => import("react").JSX.Element>;
12
14
  export {};
@@ -1,7 +1,7 @@
1
- import { type ContentTypeKey, type ApiClient, type PublishedBlockBaseline } from "../../../api/src/content-editor";
2
- import type { ContentEntrySnapshot } from "../../../content-model/src/index";
1
+ import { type ContentTypeKey, type ApiClient, type PublishedBlockBaseline, type RouteMetadataPayload } from '../../../api/src/content-editor';
2
+ import type { ContentEntrySnapshot } from '../../../content-model/src/index';
3
3
  export type { ApiClient };
4
- export type ContentEntryServiceConfig<TResponse, TSnapshot extends ContentEntrySnapshot> = {
4
+ export type ContentEntryServiceConfig<TResponse extends object, TSnapshot extends ContentEntrySnapshot> = {
5
5
  type: ContentTypeKey;
6
6
  siteId: string;
7
7
  entryId: string;
@@ -15,36 +15,20 @@ export type PublishEntryResult<TSnapshot extends ContentEntrySnapshot> = Readonl
15
15
  publishedContent?: Record<string, unknown> | null;
16
16
  publishedBlocks?: readonly PublishedBlockBaseline[];
17
17
  }>;
18
- export declare function createContentEntryServices<TResponse, TMetadataPayload extends Record<string, unknown>, TPublishPayload, TSnapshot extends ContentEntrySnapshot>(apiClient: ApiClient, config: ContentEntryServiceConfig<TResponse, TSnapshot>): {
19
- saveContent(content: Record<string, unknown>): Promise<TResponse>;
20
- saveMetadata(payload: TMetadataPayload): Promise<{
21
- id: string;
22
- siteId: string;
23
- nodeId: string | null;
24
- nodeType: "page" | "content_entry" | null;
25
- draftTitle: string | null;
26
- draftPath: string | null;
27
- draftStatus: string | null;
28
- publishedTitle: string | null;
29
- publishedPath: string | null;
30
- status: string | null;
31
- publishedAt: string | null;
32
- scheduledPublishAt: string | null;
33
- draftMetaTitle: string | null;
34
- draftMetaDescription: string | null;
35
- canonicalUrl: string | null;
36
- publishedMetaTitle: string | null;
37
- publishedMetaDescription: string | null;
38
- ogImageId: string | null;
39
- draftUpdatedAt: string | null;
40
- updatedBy: string | null;
41
- }>;
42
- publishDetailed: (payload: TPublishPayload | undefined) => Promise<{
43
- snapshot: TSnapshot;
44
- publishedContent: Record<string, unknown> | undefined;
45
- publishedBlocks: PublishedBlockBaseline[] | undefined;
46
- }>;
47
- publish(payload: TPublishPayload | undefined): Promise<TSnapshot>;
48
- discardDraft(): Promise<TSnapshot>;
49
- deleteEntry(): Promise<void>;
50
- };
18
+ type ContentEditorDraftServices<TSnapshot extends ContentEntrySnapshot = ContentEntrySnapshot, TMetadataPayload extends Record<string, unknown> = RouteMetadataPayload> = Readonly<{
19
+ saveContent: (content: Record<string, unknown>) => Promise<Record<string, unknown>>;
20
+ saveMetadata: (payload: TMetadataPayload) => Promise<Record<string, unknown>>;
21
+ }>;
22
+ export type ContentEditorServices<TSnapshot extends ContentEntrySnapshot = ContentEntrySnapshot, TMetadataPayload extends Record<string, unknown> = RouteMetadataPayload> = ContentEditorDraftServices<TSnapshot, TMetadataPayload> & (Readonly<{
23
+ kind: 'entryLifecycle';
24
+ publishDetailed: (payload: unknown) => Promise<PublishEntryResult<TSnapshot>>;
25
+ publish: (payload: unknown) => Promise<TSnapshot>;
26
+ discardDraft: () => Promise<TSnapshot>;
27
+ deleteEntry: () => Promise<void>;
28
+ }> | Readonly<{
29
+ kind: 'pageSurfaceDraft';
30
+ }>);
31
+ export type EntryLifecycleContentEditorServices<TSnapshot extends ContentEntrySnapshot = ContentEntrySnapshot, TMetadataPayload extends Record<string, unknown> = RouteMetadataPayload> = Extract<ContentEditorServices<TSnapshot, TMetadataPayload>, {
32
+ kind: 'entryLifecycle';
33
+ }>;
34
+ export declare function createContentEntryServices<TResponse extends object, TMetadataPayload extends Record<string, unknown>, TPublishPayload, TSnapshot extends ContentEntrySnapshot>(apiClient: ApiClient, config: ContentEntryServiceConfig<TResponse, TSnapshot>): EntryLifecycleContentEditorServices<TSnapshot, TMetadataPayload>;
@@ -112,6 +112,7 @@ export type EditorBlockMeta = Readonly<{
112
112
  purpose: string | null;
113
113
  orderIndex: number | null;
114
114
  publishedContent: EditorBlockValues | null;
115
+ optimisticHash: string | null;
115
116
  }>;
116
117
  export type EditorDraftSnapshot = EditorStructuralDraftSnapshot;
117
118
  export type DraftBlockInitMetaInput = EditorDraftBlockInitMetaInput;
@@ -127,6 +128,7 @@ export type EditorBlockItem = Readonly<{
127
128
  publishedContent?: EditorValueRecord | null;
128
129
  bindings?: EditorValueRecord | null;
129
130
  purpose?: string | null;
131
+ optimisticHash?: string | null;
130
132
  }>;
131
133
  type NormalizedEditorBlockBase = Readonly<{
132
134
  kind: string;
@@ -136,6 +138,7 @@ type NormalizedEditorBlockBase = Readonly<{
136
138
  publishedContent: EditorBlockValues | null;
137
139
  bindings: EditorBlockValues | null;
138
140
  purpose: string | null;
141
+ optimisticHash: string | null;
139
142
  }>;
140
143
  export type PersistedEditorBlockItem = EditorPersistedBlock;
141
144
  export type PendingEditorBlockItem = NormalizedEditorBlockBase & Readonly<{
@@ -226,6 +229,7 @@ export type EditorSystemOperation = {
226
229
  blockId: EditorBlockId;
227
230
  savedValues: EditorBlockValues | null;
228
231
  acknowledgedVersion: number;
232
+ optimisticHash: string | null;
229
233
  } | {
230
234
  type: 'autosave-draft-failed';
231
235
  blockId: EditorBlockId;
@@ -293,7 +297,7 @@ export declare function initNewDraftBlock(snapshot: EditorHistorySnapshot, block
293
297
  export declare function updateDraftBlockBaseline(snapshot: EditorHistorySnapshot, blockId: EditorBlockId, baseline: DraftBlockBaselineInput, meta?: DraftBlockBaselineUpdateMetaInput): EditorHistorySnapshot;
294
298
  export declare function removeDraftBlock(snapshot: EditorHistorySnapshot, blockId: EditorBlockId): EditorHistorySnapshot;
295
299
  export declare function setDraftPublishedBaselines(snapshot: EditorHistorySnapshot, blocks: readonly BlockPublishedBaselineInput[]): EditorHistorySnapshot;
296
- export declare function autosaveDraftSucceeded(snapshot: EditorHistorySnapshot, blockId: EditorBlockId, savedValues: EditorBlockValues | null, acknowledgedVersion: number): EditorHistorySnapshot;
300
+ export declare function autosaveDraftSucceeded(snapshot: EditorHistorySnapshot, blockId: EditorBlockId, savedValues: EditorBlockValues | null, acknowledgedVersion: number, optimisticHash: string | null): EditorHistorySnapshot;
297
301
  export declare function autosaveDraftFailed(snapshot: EditorHistorySnapshot, blockId: EditorBlockId, message?: string): EditorHistorySnapshot;
298
302
  export declare function clearDraftError(snapshot: EditorHistorySnapshot, blockId: EditorBlockId): EditorHistorySnapshot;
299
303
  export declare function setDraftPending(snapshot: EditorHistorySnapshot, blockId: EditorBlockId): EditorHistorySnapshot;
@@ -1,3 +1,4 @@
1
+ import type { FooterModuleId } from '../../../core/src/index';
1
2
  import { type EditorUnpublishedState } from '../controller/deriveEditorUnpublishedState';
2
3
  import { type AutosaveState } from './stores/autosaveStore';
3
4
  import { type GeneratedIconAssetsState } from './stores/generatedIconAssetsStore';
@@ -33,6 +34,7 @@ export type ActivePreviewField = (Readonly<{
33
34
  */
34
35
  export type AutosaveAcknowledgement = Readonly<{
35
36
  acknowledgedVersion: number;
37
+ optimisticHash?: string | null;
36
38
  }>;
37
39
  /**
38
40
  * Form-facing metadata facade. Consumers pass plain records for ergonomics;
@@ -65,6 +67,13 @@ export type PreviewInspection = Readonly<{
65
67
  kind: 'linked-entry';
66
68
  entryId: LinkedContentEntryId;
67
69
  requestId: number;
70
+ }> | Readonly<{
71
+ kind: 'footer-module';
72
+ moduleId: FooterModuleId;
73
+ requestId: number;
74
+ }> | Readonly<{
75
+ kind: 'footer';
76
+ requestId: number;
68
77
  }>;
69
78
  export type LinkedEntryState = {
70
79
  getSelectedEntryId: () => LinkedContentEntryId | null;
@@ -184,6 +193,8 @@ export type EditorUiState = {
184
193
  setPreviewSidebarTab: (tab: PreviewSidebarTab) => void;
185
194
  inspectBlock: (blockId: EditorBlockId) => void;
186
195
  inspectLinkedEntry: (entryId: string) => void;
196
+ inspectFooterModule: (moduleId: FooterModuleId) => void;
197
+ inspectFooter: () => void;
187
198
  clearPreviewInspection: () => void;
188
199
  setActivePreviewField: (field: ActivePreviewField) => void;
189
200
  requestFocus: (payload: Omit<NonNullable<FocusRequest>, 'requestId'>) => void;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Entry-instance validator, compiled from the content-type field DSL.
3
+ *
4
+ * `ContentTypeSchemaZ` validates schema DOCUMENTS; this validates entry DATA
5
+ * against a schema: required-field presence, rejection of unfilled placeholder
6
+ * sentinels (shared vocabulary in `sentinels.ts`), and basic per-type shape
7
+ * checks. It is intentionally lightweight — enough to power scaffold diagnostics
8
+ * and a CLI pre-flight — not a replacement for server-side write validation.
9
+ */
10
+ import type { ContentTypeSchema } from './schema';
11
+ export type EntryValidationCode = 'missing_required' | 'unfilled_placeholder' | 'wrong_type' | 'invalid_option';
12
+ export interface EntryValidationError {
13
+ /** Dotted path to the offending value (e.g. `hero.cta.link`, `items[0].label`). */
14
+ path: string;
15
+ /** The field's DSL type. */
16
+ fieldType: string;
17
+ code: EntryValidationCode;
18
+ message: string;
19
+ }
20
+ export interface EntryValidationResult {
21
+ valid: boolean;
22
+ errors: EntryValidationError[];
23
+ }
24
+ /**
25
+ * Validate entry data against a content-type schema. Returns all errors so
26
+ * callers can list everything an agent must fix in one pass.
27
+ */
28
+ export declare function validateEntryInstance(input: {
29
+ schema: ContentTypeSchema;
30
+ data: Record<string, unknown>;
31
+ }): EntryValidationResult;