@riverbankcms/sdk 0.62.4 → 0.64.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 (315) hide show
  1. package/README.md +11 -0
  2. package/dist/_dts/api/src/accessAdmin.d.ts +64 -2
  3. package/dist/_dts/api/src/aiEndpoints.d.ts +2 -2
  4. package/dist/_dts/api/src/billing.d.ts +46 -10
  5. package/dist/_dts/api/src/bookingConfig.d.ts +2 -0
  6. package/dist/_dts/api/src/bookingRecords.d.ts +26 -0
  7. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +12 -1
  8. package/dist/_dts/api/src/contentRuntime.d.ts +1 -0
  9. package/dist/_dts/api/src/courses.d.ts +3 -0
  10. package/dist/_dts/api/src/endpoints.d.ts +23 -0
  11. package/dist/_dts/api/src/index.d.ts +8 -5
  12. package/dist/_dts/api/src/sdkConfig/contracts.d.ts +29 -0
  13. package/dist/_dts/api/src/sdkContracts.d.ts +13 -1
  14. package/dist/_dts/api/src/siteOnboarding.d.ts +4 -0
  15. package/dist/_dts/api/src/siteOperations.d.ts +10 -0
  16. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +29 -0
  17. package/dist/_dts/api/src/types.d.ts +2 -1
  18. package/dist/_dts/billing/src/plans/registry.d.ts +1 -0
  19. package/dist/_dts/billing/src/plans/types.d.ts +9 -0
  20. package/dist/_dts/block-form/src/FormRenderer.d.ts +38 -0
  21. package/dist/_dts/block-form/src/backend/adapter.d.ts +7 -0
  22. package/dist/_dts/block-form/src/backend/hooks/useRepeaterBackend.d.ts +34 -0
  23. package/dist/_dts/block-form/src/backend/hooks.d.ts +66 -0
  24. package/dist/_dts/block-form/src/backend/index.d.ts +12 -0
  25. package/dist/_dts/block-form/src/backend/rhf-backend.d.ts +34 -0
  26. package/dist/_dts/block-form/src/backend/store-backend.d.ts +60 -0
  27. package/dist/_dts/block-form/src/backend/types.d.ts +137 -0
  28. package/dist/_dts/block-form/src/backend/useBackendWatch.d.ts +22 -0
  29. package/dist/_dts/block-form/src/backend/utils/getErrorMessage.d.ts +1 -0
  30. package/dist/_dts/block-form/src/blockDraftSaveability.d.ts +70 -0
  31. package/dist/_dts/block-form/src/client/blockDraftSaveability.d.ts +1 -0
  32. package/dist/_dts/block-form/src/client/index.d.ts +30 -0
  33. package/dist/_dts/block-form/src/context/BlockContext.d.ts +29 -0
  34. package/dist/_dts/block-form/src/context/DisplayLabelResolverContext.d.ts +33 -0
  35. package/dist/_dts/block-form/src/context/FieldPreviewResolverContext.d.ts +30 -0
  36. package/dist/_dts/block-form/src/context/ImageResolveContext.d.ts +1 -0
  37. package/dist/_dts/block-form/src/context/index.d.ts +4 -0
  38. package/dist/_dts/block-form/src/fields/props.d.ts +48 -0
  39. package/dist/_dts/block-form/src/fields/types.d.ts +223 -0
  40. package/dist/_dts/block-form/src/index.d.ts +22 -0
  41. package/dist/_dts/block-form/src/manifest/ManifestForm.d.ts +37 -0
  42. package/dist/_dts/block-form/src/manifest/canonicalValidation.d.ts +5 -0
  43. package/dist/_dts/block-form/src/manifest/filterSdkTabs.d.ts +44 -0
  44. package/dist/_dts/block-form/src/manifest/manifestFormAdapter.d.ts +61 -0
  45. package/dist/_dts/block-form/src/manifest/mergeManifestWithSdkOptions.d.ts +24 -0
  46. package/dist/_dts/block-form/src/palette/PaletteContext.d.ts +11 -0
  47. package/dist/_dts/block-form/src/registry/schemas.d.ts +105 -0
  48. package/dist/_dts/block-form/src/registry/widgets.d.ts +59 -0
  49. package/dist/_dts/block-form/src/sdk-config/SdkConfigContext.d.ts +110 -0
  50. package/dist/_dts/block-form/src/sdk-config/hooks.d.ts +21 -0
  51. package/dist/_dts/block-form/src/sdk-config/index.d.ts +2 -0
  52. package/dist/_dts/block-form/src/shared/disclosure.d.ts +1 -0
  53. package/dist/_dts/block-form/src/shared/hooks/index.d.ts +2 -0
  54. package/dist/_dts/block-form/src/shared/hooks/useCoarsePointer.d.ts +5 -0
  55. package/dist/_dts/block-form/src/shared/hooks/useContainerWidth.d.ts +6 -0
  56. package/dist/_dts/block-form/src/utils/VisibilityWrapper.d.ts +25 -0
  57. package/dist/_dts/block-form/src/utils/computeWatchedPath.d.ts +18 -0
  58. package/dist/_dts/block-form/src/utils/evaluateVisibility.d.ts +9 -0
  59. package/dist/_dts/block-form/src/utils/fieldHelpers.d.ts +94 -0
  60. package/dist/_dts/block-form/src/utils/resolvePromotedFields.d.ts +22 -0
  61. package/dist/_dts/block-form/src/utils/slug.d.ts +3 -0
  62. package/dist/_dts/block-form/src/utils/typeGuards.d.ts +3 -0
  63. package/dist/_dts/block-form/src/widgets/BackgroundColorWidget/BackgroundColorField.d.ts +10 -0
  64. package/dist/_dts/block-form/src/widgets/BackgroundColorWidget/BackgroundColorWidget.d.ts +23 -0
  65. package/dist/_dts/block-form/src/widgets/BackgroundColorWidget/index.d.ts +2 -0
  66. package/dist/_dts/block-form/src/widgets/BackgroundGradientWidget/BackgroundGradientField.d.ts +13 -0
  67. package/dist/_dts/block-form/src/widgets/BackgroundGradientWidget/BackgroundGradientWidget.d.ts +17 -0
  68. package/dist/_dts/block-form/src/widgets/BackgroundGradientWidget/index.d.ts +2 -0
  69. package/dist/_dts/block-form/src/widgets/BooleanField/BooleanField.d.ts +6 -0
  70. package/dist/_dts/block-form/src/widgets/BooleanField/booleanFieldDefaults.d.ts +6 -0
  71. package/dist/_dts/block-form/src/widgets/BooleanField/booleanFieldSchema.d.ts +7 -0
  72. package/dist/_dts/block-form/src/widgets/BooleanField/index.d.ts +3 -0
  73. package/dist/_dts/block-form/src/widgets/BoxStyleWidget/BoxStyleWidget.d.ts +17 -0
  74. package/dist/_dts/block-form/src/widgets/BoxStyleWidget/index.d.ts +1 -0
  75. package/dist/_dts/block-form/src/widgets/ContentTypeSelectField/contentTypeSelectFieldDefaults.d.ts +3 -0
  76. package/dist/_dts/block-form/src/widgets/ContentTypeSelectField/contentTypeSelectFieldSchema.d.ts +4 -0
  77. package/dist/_dts/block-form/src/widgets/DateField/DateField.d.ts +23 -0
  78. package/dist/_dts/block-form/src/widgets/DateField/dateFieldDefaults.d.ts +8 -0
  79. package/dist/_dts/block-form/src/widgets/DateField/dateFieldSchema.d.ts +9 -0
  80. package/dist/_dts/block-form/src/widgets/DateField/datePickerPopover.d.ts +32 -0
  81. package/dist/_dts/block-form/src/widgets/DateField/index.d.ts +4 -0
  82. package/dist/_dts/block-form/src/widgets/DateTimeField/DateTimeField.d.ts +30 -0
  83. package/dist/_dts/block-form/src/widgets/DateTimeField/dateTimeFieldDefaults.d.ts +8 -0
  84. package/dist/_dts/block-form/src/widgets/DateTimeField/dateTimeFieldSchema.d.ts +11 -0
  85. package/dist/_dts/block-form/src/widgets/DateTimeField/index.d.ts +4 -0
  86. package/dist/_dts/block-form/src/widgets/DateTimeField/utils/dateTimeUtils.d.ts +22 -0
  87. package/dist/_dts/block-form/src/widgets/DateTimeField/utils/index.d.ts +1 -0
  88. package/dist/_dts/block-form/src/widgets/EntryPickerField/entryPickerFieldDefaults.d.ts +3 -0
  89. package/dist/_dts/block-form/src/widgets/EntryPickerField/entryPickerFieldSchema.d.ts +4 -0
  90. package/dist/_dts/block-form/src/widgets/Field.d.ts +21 -0
  91. package/dist/_dts/block-form/src/widgets/FieldFrame.d.ts +32 -0
  92. package/dist/_dts/block-form/src/widgets/FieldSettingsModal/FieldSettingsModal.d.ts +34 -0
  93. package/dist/_dts/block-form/src/widgets/FieldSettingsModal/index.d.ts +2 -0
  94. package/dist/_dts/block-form/src/widgets/GroupField/GroupField.d.ts +23 -0
  95. package/dist/_dts/block-form/src/widgets/GroupField/groupFieldDefaults.d.ts +9 -0
  96. package/dist/_dts/block-form/src/widgets/GroupField/groupFieldSchema.d.ts +10 -0
  97. package/dist/_dts/block-form/src/widgets/GroupField/index.d.ts +3 -0
  98. package/dist/_dts/block-form/src/widgets/LinkField/linkFieldDefaults.d.ts +10 -0
  99. package/dist/_dts/block-form/src/widgets/LinkField/linkFieldSchema.d.ts +3 -0
  100. package/dist/_dts/block-form/src/widgets/MediaField/mediaFieldDefaults.d.ts +6 -0
  101. package/dist/_dts/block-form/src/widgets/MediaField/mediaFieldSchema.d.ts +6 -0
  102. package/dist/_dts/block-form/src/widgets/ModalGroupField/ModalGroupField.d.ts +17 -0
  103. package/dist/_dts/block-form/src/widgets/ModalGroupField/index.d.ts +3 -0
  104. package/dist/_dts/block-form/src/widgets/ModalGroupField/modalFieldDefaults.d.ts +18 -0
  105. package/dist/_dts/block-form/src/widgets/ModalGroupField/modalFieldSchema.d.ts +14 -0
  106. package/dist/_dts/block-form/src/widgets/NumberField/NumberField.d.ts +7 -0
  107. package/dist/_dts/block-form/src/widgets/NumberField/index.d.ts +3 -0
  108. package/dist/_dts/block-form/src/widgets/NumberField/numberFieldDefaults.d.ts +6 -0
  109. package/dist/_dts/block-form/src/widgets/NumberField/numberFieldSchema.d.ts +7 -0
  110. package/dist/_dts/block-form/src/widgets/PresetOrCustomField/PresetOrCustomField.d.ts +11 -0
  111. package/dist/_dts/block-form/src/widgets/PresetOrCustomField/index.d.ts +4 -0
  112. package/dist/_dts/block-form/src/widgets/PresetOrCustomField/presetOrCustomFieldDefaults.d.ts +3 -0
  113. package/dist/_dts/block-form/src/widgets/PresetOrCustomField/presetOrCustomFieldSchema.d.ts +4 -0
  114. package/dist/_dts/block-form/src/widgets/PresetOrCustomField/types.d.ts +37 -0
  115. package/dist/_dts/block-form/src/widgets/ReferenceField/referenceFieldDefaults.d.ts +3 -0
  116. package/dist/_dts/block-form/src/widgets/ReferenceField/referenceFieldSchema.d.ts +4 -0
  117. package/dist/_dts/block-form/src/widgets/RepeaterField/RepeaterField.d.ts +26 -0
  118. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterDragHandle.d.ts +8 -0
  119. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterError.d.ts +11 -0
  120. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterHeader.d.ts +10 -0
  121. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterLayoutGrid.d.ts +27 -0
  122. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterList.d.ts +19 -0
  123. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterRow.d.ts +23 -0
  124. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterRowActions.d.ts +16 -0
  125. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterRowContent.d.ts +19 -0
  126. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterTabbedEditDialog.d.ts +16 -0
  127. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterThumbnailCard.d.ts +26 -0
  128. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterThumbnailGrid.d.ts +20 -0
  129. package/dist/_dts/block-form/src/widgets/RepeaterField/components/index.d.ts +11 -0
  130. package/dist/_dts/block-form/src/widgets/RepeaterField/components/layoutGridDomain.d.ts +34 -0
  131. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/index.d.ts +6 -0
  132. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/layoutGridCapacityDecision.d.ts +22 -0
  133. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useLayoutGridCapacity.d.ts +20 -0
  134. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useLinearRepeaterDnd.d.ts +23 -0
  135. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useRepeaterPointerDragCapability.d.ts +10 -0
  136. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useRepeaterRowErrors.d.ts +12 -0
  137. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useRepeaterVisibility.d.ts +6 -0
  138. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useResolvedItemLabel.d.ts +12 -0
  139. package/dist/_dts/block-form/src/widgets/RepeaterField/index.d.ts +3 -0
  140. package/dist/_dts/block-form/src/widgets/RepeaterField/repeaterFieldDefaults.d.ts +7 -0
  141. package/dist/_dts/block-form/src/widgets/RepeaterField/repeaterFieldSchema.d.ts +8 -0
  142. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/buildItemLabel.d.ts +7 -0
  143. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/buildSummary.d.ts +7 -0
  144. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/createDefaultItem.d.ts +6 -0
  145. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/getRepeaterItemFieldGroups.d.ts +8 -0
  146. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/getRepeaterItemFields.d.ts +22 -0
  147. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/index.d.ts +10 -0
  148. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/layoutGridCapacityContext.d.ts +2 -0
  149. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/repeaterDndDomain.d.ts +43 -0
  150. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/repeaterPresentation.d.ts +24 -0
  151. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/resolveThumbnail.d.ts +12 -0
  152. package/dist/_dts/block-form/src/widgets/RichTextField/richTextFieldDefaults.d.ts +20 -0
  153. package/dist/_dts/block-form/src/widgets/RichTextField/richTextFieldSchema.d.ts +16 -0
  154. package/dist/_dts/block-form/src/widgets/SdkSelectField/SdkSelectField.d.ts +11 -0
  155. package/dist/_dts/block-form/src/widgets/SdkSelectField/index.d.ts +1 -0
  156. package/dist/_dts/block-form/src/widgets/SelectField/SelectField.d.ts +7 -0
  157. package/dist/_dts/block-form/src/widgets/SelectField/index.d.ts +3 -0
  158. package/dist/_dts/block-form/src/widgets/SelectField/selectFieldDefaults.d.ts +6 -0
  159. package/dist/_dts/block-form/src/widgets/SelectField/selectFieldSchema.d.ts +7 -0
  160. package/dist/_dts/block-form/src/widgets/SelectWidget.d.ts +34 -0
  161. package/dist/_dts/block-form/src/widgets/SettingsModal/SettingsModal.d.ts +17 -0
  162. package/dist/_dts/block-form/src/widgets/SettingsModal/index.d.ts +2 -0
  163. package/dist/_dts/block-form/src/widgets/SliderField/SliderField.d.ts +16 -0
  164. package/dist/_dts/block-form/src/widgets/SliderField/index.d.ts +1 -0
  165. package/dist/_dts/block-form/src/widgets/SlugField/SlugField.d.ts +39 -0
  166. package/dist/_dts/block-form/src/widgets/SlugField/hooks/index.d.ts +1 -0
  167. package/dist/_dts/block-form/src/widgets/SlugField/hooks/useSlugAutoGeneration.d.ts +29 -0
  168. package/dist/_dts/block-form/src/widgets/SlugField/index.d.ts +5 -0
  169. package/dist/_dts/block-form/src/widgets/SlugField/slugFieldDefaults.d.ts +8 -0
  170. package/dist/_dts/block-form/src/widgets/SlugField/slugFieldSchema.d.ts +14 -0
  171. package/dist/_dts/block-form/src/widgets/SlugField/utils/index.d.ts +2 -0
  172. package/dist/_dts/block-form/src/widgets/SlugField/utils/pathUtils.d.ts +30 -0
  173. package/dist/_dts/block-form/src/widgets/SlugField/utils/slugUtils.d.ts +17 -0
  174. package/dist/_dts/block-form/src/widgets/TabGroupField/TabGroupField.d.ts +13 -0
  175. package/dist/_dts/block-form/src/widgets/TabGroupField/index.d.ts +3 -0
  176. package/dist/_dts/block-form/src/widgets/TabGroupField/tabGroupFieldSchema.d.ts +25 -0
  177. package/dist/_dts/block-form/src/widgets/TabGroupField/types.d.ts +46 -0
  178. package/dist/_dts/block-form/src/widgets/TextField/TextField.d.ts +7 -0
  179. package/dist/_dts/block-form/src/widgets/TextField/index.d.ts +3 -0
  180. package/dist/_dts/block-form/src/widgets/TextField/textFieldDefaults.d.ts +6 -0
  181. package/dist/_dts/block-form/src/widgets/TextField/textFieldSchema.d.ts +7 -0
  182. package/dist/_dts/block-form/src/widgets/TextInputWidget.d.ts +20 -0
  183. package/dist/_dts/block-form/src/widgets/TimeField/TimeField.d.ts +23 -0
  184. package/dist/_dts/block-form/src/widgets/TimeField/index.d.ts +3 -0
  185. package/dist/_dts/block-form/src/widgets/TimeField/timeFieldDefaults.d.ts +8 -0
  186. package/dist/_dts/block-form/src/widgets/TimeField/timeFieldSchema.d.ts +9 -0
  187. package/dist/_dts/block-form/src/widgets/ToggleWidget.d.ts +16 -0
  188. package/dist/_dts/block-form/src/widgets/UrlField/UrlField.d.ts +23 -0
  189. package/dist/_dts/block-form/src/widgets/UrlField/index.d.ts +3 -0
  190. package/dist/_dts/block-form/src/widgets/UrlField/urlFieldDefaults.d.ts +8 -0
  191. package/dist/_dts/block-form/src/widgets/UrlField/urlFieldSchema.d.ts +9 -0
  192. package/dist/_dts/block-form/src/widgets/constants.d.ts +58 -0
  193. package/dist/_dts/block-form/src/widgets/groupFieldHelpers.d.ts +61 -0
  194. package/dist/_dts/block-form/src/widgets/index.d.ts +20 -0
  195. package/dist/_dts/block-form/src/widgets/selectValueMapping.d.ts +9 -0
  196. package/dist/_dts/block-form/src/widgets/types/modalConfig.d.ts +18 -0
  197. package/dist/_dts/block-form/src/widgets/utils/readNumericUiConfig.d.ts +10 -0
  198. package/dist/_dts/blocks/src/contracts/non-block-islands.d.ts +4 -0
  199. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +2 -0
  200. package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +1 -1
  201. package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +2 -2
  202. package/dist/_dts/blocks/src/system/blocks/blog-post.d.ts +1 -1
  203. package/dist/_dts/blocks/src/system/blocks/cart.d.ts +1 -1
  204. package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +1 -1
  205. package/dist/_dts/blocks/src/system/blocks/collection.d.ts +2 -2
  206. package/dist/_dts/blocks/src/system/blocks/columns.d.ts +1 -1
  207. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +2 -2
  208. package/dist/_dts/blocks/src/system/blocks/cta-full.d.ts +1 -1
  209. package/dist/_dts/blocks/src/system/blocks/event-details.d.ts +25 -0
  210. package/dist/_dts/blocks/src/system/blocks/events/event-spotlight.d.ts +2 -2
  211. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +2 -2
  212. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +1 -1
  213. package/dist/_dts/blocks/src/system/blocks/file-download.d.ts +1 -1
  214. package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +1 -1
  215. package/dist/_dts/blocks/src/system/blocks/image-gallery.d.ts +1 -1
  216. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +2 -2
  217. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +6 -6
  218. package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +1 -1
  219. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +2 -2
  220. package/dist/_dts/blocks/src/system/blocks/products/shared.d.ts +2 -2
  221. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +1 -1
  222. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +2 -2
  223. package/dist/_dts/blocks/src/system/blocks/testimonials.d.ts +1 -1
  224. package/dist/_dts/blocks/src/system/blocks/video-grid.d.ts +1 -1
  225. package/dist/_dts/blocks/src/system/fragments/library/card.d.ts +1 -1
  226. package/dist/_dts/blocks/src/system/fragments/library/ctaRow.d.ts +1 -1
  227. package/dist/_dts/blocks/src/system/fragments/library/feedbackCallout.d.ts +1 -1
  228. package/dist/_dts/blocks/src/system/fragments/library/heroCtaRow.d.ts +1 -1
  229. package/dist/_dts/blocks/src/system/fragments/library/sectionState.d.ts +1 -1
  230. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +1 -0
  231. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/view.d.ts +4 -1
  232. package/dist/_dts/blocks/src/system/runtime/nodes/event-details.client.d.ts +4 -1
  233. package/dist/_dts/blocks/src/system/runtime/nodes/event-details.server.d.ts +4 -1
  234. package/dist/_dts/calendar/src/grid.d.ts +60 -0
  235. package/dist/_dts/calendar/src/group.d.ts +14 -0
  236. package/dist/_dts/calendar/src/index.d.ts +6 -0
  237. package/dist/_dts/calendar/src/lane-packing.d.ts +28 -0
  238. package/dist/_dts/calendar/src/timetable.d.ts +90 -0
  239. package/dist/_dts/calendar/src/timezone.d.ts +19 -0
  240. package/dist/_dts/content-editor/src/index.d.ts +1 -4
  241. package/dist/_dts/core/src/booking-date-time.d.ts +1 -0
  242. package/dist/_dts/core/src/branded.d.ts +18 -0
  243. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +750 -0
  244. package/dist/_dts/editor-blocks/src/index.d.ts +1 -1
  245. package/dist/_dts/editor-blocks/src/widgets/index.d.ts +7 -7
  246. package/dist/_dts/editor-blocks/src/widgets/link/LinkWidget.d.ts +1 -2
  247. package/dist/_dts/editor-blocks/src/widgets/link/index.d.ts +1 -0
  248. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +2 -1
  249. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +2 -1
  250. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +2 -1
  251. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeButton.d.ts +4 -0
  252. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +49 -0
  253. package/dist/_dts/preview-next/src/client/preview/SiteChromeEditableSurface.d.ts +6 -0
  254. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.d.ts +3 -1
  255. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +1 -0
  256. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorSnapshot.d.ts +18 -0
  257. package/dist/_dts/sdk/src/cli/commands/pull.d.ts +5 -0
  258. package/dist/_dts/sdk/src/cli/commands/push/options.d.ts +2 -0
  259. package/dist/_dts/sdk/src/cli/commands/push-execute.d.ts +17 -0
  260. package/dist/_dts/sdk/src/cli/content/entryPaths.d.ts +6 -0
  261. package/dist/_dts/sdk/src/cli/content/writer.d.ts +2 -0
  262. package/dist/_dts/sdk/src/cli/merge-remote/entryLocal.d.ts +3 -0
  263. package/dist/_dts/sdk/src/cli/merge-remote/entryMerge.d.ts +77 -0
  264. package/dist/_dts/sdk/src/cli/merge-remote/entryMergePlan.d.ts +45 -0
  265. package/dist/_dts/sdk/src/cli/merge-remote/entryMergePush.d.ts +21 -0
  266. package/dist/_dts/sdk/src/cli/merge-remote/entryMergeReport.d.ts +30 -0
  267. package/dist/_dts/sdk/src/cli/merge-remote/entryRemote.d.ts +9 -0
  268. package/dist/_dts/sdk/src/cli/merge-remote/entrySnapshots.d.ts +50 -0
  269. package/dist/_dts/sdk/src/cli/merge-remote/stableJson.d.ts +3 -0
  270. package/dist/_dts/sdk/src/cli/site-commands/entryCommands.d.ts +85 -0
  271. package/dist/_dts/sdk/src/cli/site-commands/index.d.ts +2 -0
  272. package/dist/_dts/sdk/src/cli/site-commands/pushExecution.d.ts +30 -0
  273. package/dist/_dts/sdk/src/cli/sync/executor.d.ts +1 -0
  274. package/dist/_dts/sdk/src/cli/sync/index.d.ts +1 -1
  275. package/dist/_dts/sdk/src/public-api/contracts.d.ts +1 -0
  276. package/dist/_dts/sdk/src/version.d.ts +1 -1
  277. package/dist/_dts/site-commands/src/adapter.d.ts +23 -0
  278. package/dist/_dts/site-commands/src/capabilityGaps.d.ts +8 -0
  279. package/dist/_dts/site-commands/src/commands.d.ts +1944 -0
  280. package/dist/_dts/site-commands/src/domain.d.ts +104 -0
  281. package/dist/_dts/site-commands/src/guards.d.ts +1 -0
  282. package/dist/_dts/site-commands/src/index.d.ts +9 -0
  283. package/dist/_dts/site-commands/src/metadata.d.ts +412 -0
  284. package/dist/_dts/site-commands/src/planner.d.ts +51 -0
  285. package/dist/_dts/site-commands/src/refContributions.d.ts +10 -0
  286. package/dist/_dts/site-commands/src/refs.d.ts +75 -0
  287. package/dist/_dts/site-commands/src/staticExecutionGaps.d.ts +10 -0
  288. package/dist/cli/index.mjs +3997 -548
  289. package/dist/cli/init-docs/content/cli-reference.md +18 -0
  290. package/dist/client/bookings.mjs +25 -25
  291. package/dist/client/client.mjs +2560 -2487
  292. package/dist/client/hooks.mjs +2288 -2194
  293. package/dist/client/rendering/client.mjs +296 -108
  294. package/dist/client/rendering/islands.mjs +18257 -13071
  295. package/dist/client/rendering.mjs +788 -713
  296. package/dist/preview-next/before-render.mjs +23 -0
  297. package/dist/preview-next/client/runtime.mjs +2219 -2076
  298. package/dist/preview-next/middleware.mjs +23 -0
  299. package/dist/server/components.mjs +410 -306
  300. package/dist/server/config-validation.mjs +2516 -2422
  301. package/dist/server/config.mjs +2516 -2422
  302. package/dist/server/data.mjs +2288 -2194
  303. package/dist/server/index.mjs +599 -537
  304. package/dist/server/next.mjs +2517 -2413
  305. package/dist/server/page-converter.mjs +42 -10
  306. package/dist/server/prebuild.mjs +1 -1
  307. package/dist/server/rendering/server.mjs +410 -306
  308. package/dist/server/rendering.mjs +410 -306
  309. package/dist/server/routing.mjs +2302 -2288
  310. package/dist/server/server.mjs +2306 -2212
  311. package/dist/server/theme-bridge.mjs +14 -4
  312. package/package.json +2 -1
  313. package/dist/_dts/content-editor/src/ai/patch/allowed.d.ts +0 -2
  314. package/dist/_dts/content-editor/src/ai/patch/diff.d.ts +0 -17
  315. package/dist/_dts/content-editor/src/ai/patch/schema.d.ts +0 -49
@@ -246,6 +246,8 @@ export declare const SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH = 500;
246
246
  export declare const SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH = 120;
247
247
  export declare const SDK_WORKFLOW_ENDPOINT_MAX_LENGTH = 500;
248
248
  export declare const SDK_WORKFLOW_TRIGGER_MAX_COUNT = 5;
249
+ export declare const SDK_WORKFLOW_TRIGGER_FIELD_MAX_LENGTH = 120;
250
+ export declare const SDK_WORKFLOW_TRIGGER_CONDITION_MAX_COUNT = 10;
249
251
  export declare const SDK_WORKFLOW_MAX_COUNT = 50;
250
252
  export declare const SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH = 120;
251
253
  export declare const SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH = 500;
@@ -253,6 +255,15 @@ export declare const SDK_WORKFLOW_ID_PATTERN: RegExp;
253
255
  export declare const SDK_WORKFLOW_ENDPOINT_PATTERN: RegExp;
254
256
  export declare const sdkWorkflowTriggerSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
255
257
  type: z.ZodLiteral<"manual">;
258
+ }, z.core.$strict>, z.ZodObject<{
259
+ type: z.ZodLiteral<"entry.draft.updated">;
260
+ when: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
261
+ field: z.ZodString;
262
+ changed: z.ZodLiteral<true>;
263
+ }, z.core.$strict>, z.ZodObject<{
264
+ field: z.ZodString;
265
+ isEmpty: z.ZodBoolean;
266
+ }, z.core.$strict>]>>;
256
267
  }, z.core.$strict>], "type">;
257
268
  export declare const sdkWorkflowConfirmationSchema: z.ZodObject<{
258
269
  title: z.ZodString;
@@ -266,6 +277,15 @@ export declare const sdkWorkflowConfigSchema: z.ZodObject<{
266
277
  endpoint: z.ZodString;
267
278
  triggers: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
268
279
  type: z.ZodLiteral<"manual">;
280
+ }, z.core.$strict>, z.ZodObject<{
281
+ type: z.ZodLiteral<"entry.draft.updated">;
282
+ when: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
283
+ field: z.ZodString;
284
+ changed: z.ZodLiteral<true>;
285
+ }, z.core.$strict>, z.ZodObject<{
286
+ field: z.ZodString;
287
+ isEmpty: z.ZodBoolean;
288
+ }, z.core.$strict>]>>;
269
289
  }, z.core.$strict>], "type">>;
270
290
  confirmation: z.ZodOptional<z.ZodObject<{
271
291
  title: z.ZodString;
@@ -280,6 +300,15 @@ export declare const sdkWorkflowsSchema: z.ZodOptional<z.ZodArray<z.ZodObject<{
280
300
  endpoint: z.ZodString;
281
301
  triggers: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
282
302
  type: z.ZodLiteral<"manual">;
303
+ }, z.core.$strict>, z.ZodObject<{
304
+ type: z.ZodLiteral<"entry.draft.updated">;
305
+ when: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
306
+ field: z.ZodString;
307
+ changed: z.ZodLiteral<true>;
308
+ }, z.core.$strict>, z.ZodObject<{
309
+ field: z.ZodString;
310
+ isEmpty: z.ZodBoolean;
311
+ }, z.core.$strict>]>>;
283
312
  }, z.core.$strict>], "type">>;
284
313
  confirmation: z.ZodOptional<z.ZodObject<{
285
314
  title: z.ZodString;
@@ -84,9 +84,21 @@ export interface SdkContentConfig {
84
84
  navigationMenus?: unknown[];
85
85
  settings?: unknown;
86
86
  }
87
- export type SdkWorkflowTrigger = {
87
+ export type SdkWorkflowManualTrigger = {
88
88
  type: "manual";
89
89
  };
90
+ export type SdkWorkflowEntryDraftUpdatedCondition = Readonly<{
91
+ field: string;
92
+ changed: true;
93
+ }> | Readonly<{
94
+ field: string;
95
+ isEmpty: boolean;
96
+ }>;
97
+ export type SdkWorkflowEntryDraftUpdatedTrigger = {
98
+ type: "entry.draft.updated";
99
+ when: SdkWorkflowEntryDraftUpdatedCondition[];
100
+ };
101
+ export type SdkWorkflowTrigger = SdkWorkflowManualTrigger | SdkWorkflowEntryDraftUpdatedTrigger;
90
102
  export type SdkWorkflowConfirmation = {
91
103
  title: string;
92
104
  body?: string;
@@ -242,6 +242,10 @@ export type AcknowledgeLaunchRequirementResponse = {
242
242
  acknowledged: true;
243
243
  requirementId: Extract<LaunchRequirementId, "review_generated_site" | "configure_appointments">;
244
244
  };
245
+ export declare const goLiveSiteRequestSchema: z.ZodObject<{
246
+ acceptExtraSiteCharge: z.ZodOptional<z.ZodBoolean>;
247
+ }, z.core.$strip>;
248
+ export type GoLiveSiteRequest = z.infer<typeof goLiveSiteRequestSchema>;
245
249
  export type GoLiveSiteResponse = {
246
250
  redirectPath: string;
247
251
  };
@@ -110,6 +110,16 @@ export type AdminSiteCostUpdateSyncResult = {
110
110
  export type AdminUpdateSiteCostResponse = AdminSiteCostResponse & {
111
111
  subscriptionSync: AdminSiteCostUpdateSyncResult;
112
112
  };
113
+ export type AdminScheduleBillingComponentEndRequest = {
114
+ reason?: string;
115
+ };
116
+ export type AdminScheduleBillingComponentEndResponse = {
117
+ component: {
118
+ id: string;
119
+ status: "ending" | "ended";
120
+ endsAt: string;
121
+ };
122
+ };
113
123
  export type ListGscPropertiesAdminResponse = {
114
124
  properties: Array<{
115
125
  id: string;
@@ -26,6 +26,31 @@ export type SiteThemeSelectionsPayload = {
26
26
  headerLookId?: HeaderLookId | null;
27
27
  footerLookId?: FooterLookId | null;
28
28
  };
29
+ export type SaveSiteChromeLookSelectionBody = Readonly<{
30
+ surface: 'header';
31
+ lookId: HeaderLookId | null;
32
+ theme: Theme;
33
+ themeId?: string | null;
34
+ selectionId?: string | null;
35
+ baseSelectionUpdatedAt?: string | null;
36
+ }> | Readonly<{
37
+ surface: 'footer';
38
+ lookId: FooterLookId | null;
39
+ theme: Theme;
40
+ themeId?: string | null;
41
+ selectionId?: string | null;
42
+ baseSelectionUpdatedAt?: string | null;
43
+ }>;
44
+ export type SaveSiteChromeLookSelectionResponse = Readonly<{
45
+ success: boolean;
46
+ themeId: string;
47
+ selectionId: string;
48
+ selectionUpdatedAt: string | null;
49
+ savedAt: string;
50
+ theme: Theme;
51
+ headerLookId: HeaderLookId | null;
52
+ footerLookId: FooterLookId | null;
53
+ }>;
29
54
  export type PageDesignRevisionToken = {
30
55
  kind: 'absent';
31
56
  } | {
@@ -154,6 +179,7 @@ export type SiteRuntimeAPIEndpoints = {
154
179
  success: boolean;
155
180
  themeId: string;
156
181
  selectionId: string;
182
+ selectionUpdatedAt: string | null;
157
183
  savedAt: string;
158
184
  overrides: Record<string, unknown> | null;
159
185
  theme: Theme;
@@ -171,6 +197,9 @@ export type SiteRuntimeAPIEndpoints = {
171
197
  headerLookId: HeaderLookId | null;
172
198
  footerLookId: FooterLookId | null;
173
199
  }>;
200
+ saveSiteChromeLookSelection: APIEndpoint<SaveSiteChromeLookSelectionBody, {
201
+ siteId: string;
202
+ }, SaveSiteChromeLookSelectionResponse>;
174
203
  uploadSiteLogo: APIEndpoint<UploadSiteLogoRequest, never, {
175
204
  path: string;
176
205
  publicUrl: string | null;
@@ -3,6 +3,7 @@ export type { AccessPolicyContract, AccessPolicyTag, CreateMediaAssetBody, Entit
3
3
  export type { AnalyticsPreset, AnalyticsReferrer, AnalyticsReportFilters, AnalyticsReportQuery, AnalyticsReportResponse, AnalyticsSeriesPoint, AnalyticsTopPage, AnalyticsTotals, } from "./analytics";
4
4
  export type { AIChatMessage, AiBriefTurn, JsonPrimitive, JsonValue, MediaUsageCheckItem, MediaUsageCheckResponse, MediaUsageLocation, } from "./shared-contracts";
5
5
  export type * from "./accessAdmin";
6
+ export { STAFF_OPERATIONAL_CAPABILITIES } from "./accessAdmin";
6
7
  export type * from "./aiEndpoints";
7
8
  export type * from "./apiEndpointTypes";
8
9
  export type * from "./bookingAdjustments";
@@ -42,7 +43,7 @@ export type { SitePageBlock, SitePagePayload } from "./sitePages";
42
43
  export type { SiteAnalyticsCookieBannerCopyOverrides, SiteAnalyticsSettingsPayload, SiteAnalyticsSettingsResponse, } from "./siteAnalytics";
43
44
  export type { SiteLegalJurisdiction, SiteLegalProfilePayload, SensitiveClientRecordsConfirmationKey, SensitiveClientRecordsMode, SensitiveClientRecordsRetentionProfile, SensitiveClientRecordsSettings, SensitiveClientRecordsUpdatePayload, SitePrivacyPolicyCapabilities, SitePrivacyPolicyDocument, SitePrivacySettings, SitePrivacySettingsPayload, SitePrivacySettingsResponse, SiteRuntimePrivacyPolicy, SitePrivacyPolicySection, } from "./privacyPolicy";
44
45
  export type { MaintenanceSettingsPayload, MaintenanceSettingsResponse, SiteBusinessAddressPayload, SiteBusinessAddressResponse, SiteDeploymentMode, SiteFooterBlocksEditorBlock, SiteFooterBlocksEditorResponse, SiteGeneralSettingsPayload, SiteGeneralSettingsResponse, SiteLayoutResolvedPayload, SiteLayoutSettingsPayload, SiteLayoutSettingsResponse, UpdateSiteDeploymentModePayload, UpdateSiteDeploymentModeResponse, UpdateSiteFooterBlocksPayload, UpdateSiteFooterBlocksResponse, } from "./siteSettings";
45
- export type { BillingCheckoutRequest, BillingCheckoutResponse, BillingStatusResponse, BillingSummaryResponse, SiteBillingCheckoutResponse, SiteBillingCostResponse, StripeAutomaticTaxIssue, StripeAutomaticTaxReadiness, StripeAutomaticTaxStatus, StripeConnectDisconnectResponse, StripeConnectRestrictions, StripeConnectStartResponse, StripeConnectStatusResponse, UpdateStripeAutomaticTaxRequest, } from "./billing";
46
+ export type { BillingCheckoutRequest, BillingCheckoutResponse, BillingStatusResponse, BillingSummaryComponent, BillingSummaryComponentKind, BillingSummaryComponentSource, BillingSummaryBasePlanComponent, BillingSummarySiteComponent, BillingSummaryAddOnComponent, BillingSummaryResponse, SiteBillingCheckoutResponse, SiteBillingCostResponse, StripeAutomaticTaxIssue, StripeAutomaticTaxReadiness, StripeAutomaticTaxStatus, StripeConnectDisconnectResponse, StripeConnectRestrictions, StripeConnectStartResponse, StripeConnectStatusResponse, UpdateStripeAutomaticTaxRequest, } from "./billing";
46
47
  export type { AiGenerateSiteEntityType, AiGenerateSitePrimaryCta, AiGenerateSiteRequest, AiGenerateSiteResponse, } from "./siteGeneration";
47
48
  export { SITE_ROLE_DISPLAY_ORDER, SITE_ROLE_PERMISSION_LEVEL } from "./siteMembers";
48
49
  export type { SiteRole } from "./siteMembers";
@@ -5,6 +5,7 @@ export declare function ensureBillingPlanId(planId: string): BillingPlanId;
5
5
  export declare function getPlanById(planId: string): PlanDefinition | undefined;
6
6
  export declare function ensurePlan(planId: string): PlanDefinition;
7
7
  export declare function getPlanEntitlements(planId: string): PlanDefinition['entitlements'];
8
+ export declare function getMacadamiaSiteAllowance(planId: string): PlanDefinition['entitlements']['macadamiaSiteAllowance'];
8
9
  /**
9
10
  * @deprecated Use database pricing with resolveUserPrice() instead.
10
11
  * This function fetches pre-created Stripe Price IDs which is being replaced
@@ -55,6 +55,15 @@ export interface PlanEntitlements {
55
55
  planId: BillingPlanId;
56
56
  monthlyPricePence: number | null;
57
57
  availableIntervals: readonly BillingInterval[];
58
+ macadamiaSiteAllowance: Readonly<{
59
+ includedLiveSiteCount: number;
60
+ extraSite: Readonly<{
61
+ tag: 'not_supported';
62
+ }> | Readonly<{
63
+ tag: 'priced';
64
+ monthlyPricePence: number;
65
+ }>;
66
+ }>;
58
67
  monthlyBookingLimit: number | null;
59
68
  durableStorageQuota: StorageQuota;
60
69
  stripeBookingCommission: StripeBookingCommission;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * FormRenderer - Generic form rendering component
3
+ *
4
+ * Completely manifest-agnostic. Renders any FieldConfig[] with any FormBackend.
5
+ * Provides renderChild recursively for container widgets (GroupField, RepeaterField).
6
+ */
7
+ import type { ReactNode } from 'react';
8
+ import type { FieldConfig } from './fields/types';
9
+ import type { FormBackend } from './backend/types';
10
+ import type { FieldWidgetComponent } from './fields/props';
11
+ export interface FormRendererProps {
12
+ /** Field configurations to render */
13
+ fields: FieldConfig[];
14
+ /** Form backend (RHF or Store) */
15
+ backend: FormBackend;
16
+ /** Optional className for container */
17
+ className?: string;
18
+ /** Optional wrapper component for each field */
19
+ fieldWrapper?: (children: ReactNode, field: FieldConfig) => ReactNode;
20
+ /** Optional widget overrides - allows replacing widgets at runtime */
21
+ widgetOverrides?: Partial<Record<string, FieldWidgetComponent>>;
22
+ /** Optional block kind for SDK field options lookup (e.g., 'block.embed', 'custom.hero') */
23
+ blockKind?: string;
24
+ /** Show inline settings trigger for non-content intents (default: true) */
25
+ showSettingsTrigger?: boolean;
26
+ /**
27
+ * Optional list of nested field paths to surface in the main form body as shortcuts.
28
+ * These paths should refer to existing data within the form values (no duplication).
29
+ */
30
+ promotedFields?: string[];
31
+ }
32
+ /**
33
+ * FormRenderer - Renders a list of fields using the widget registry
34
+ *
35
+ * Works with any field source (manifests, custom configs, etc.)
36
+ * Works with any backend (RHF, Zustand store, etc.)
37
+ */
38
+ export declare function FormRenderer({ fields, backend, className, fieldWrapper, widgetOverrides, blockKind, showSettingsTrigger, promotedFields, }: FormRendererProps): ReactNode;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @deprecated Import from './types', './rhf-backend', or './store-backend' instead.
3
+ * This file is kept for backward compatibility only.
4
+ */
5
+ export type { FormBackend, SetValueOptions, FieldError, FieldState, FormState, StoreBackendOptions, } from './types';
6
+ export { createRHFBackend } from './rhf-backend';
7
+ export { createStoreBackend } from './store-backend';
@@ -0,0 +1,34 @@
1
+ import type { FormBackend } from '../adapter';
2
+ /**
3
+ * Item with stable React key for repeater rendering
4
+ */
5
+ export type RepeaterItem = {
6
+ /** Stable ID for React keys and drag-drop */
7
+ id: string;
8
+ /** Item data */
9
+ data: unknown;
10
+ };
11
+ /**
12
+ * Array operations interface for repeater widgets
13
+ */
14
+ export type RepeaterBackendOps = {
15
+ /** Array items with stable keys */
16
+ items: RepeaterItem[];
17
+ /** Append item to array */
18
+ append: (value: unknown) => void;
19
+ /** Remove item at index */
20
+ remove: (index: number) => void;
21
+ /** Move item from one index to another */
22
+ move: (from: number, to: number) => void;
23
+ /** Insert item at index */
24
+ insert: (index: number, value: unknown) => void;
25
+ };
26
+ /**
27
+ * Hook to get repeater operations from a backend.
28
+ * Provides stable keys for React rendering and drag-drop.
29
+ *
30
+ * Uses backend's unified interface throughout - no branching on backend.type.
31
+ * For RHF backends, uses react-hook-form's optimized useFieldArray hook.
32
+ * For other backends, uses useSyncExternalStore with the backend's subscribe/getValue.
33
+ */
34
+ export declare function useRepeaterBackend(backend: FormBackend, path: string): RepeaterBackendOps;
@@ -0,0 +1,66 @@
1
+ import type { FormBackend, SetValueOptions } from './types';
2
+ /**
3
+ * useArrayField - Hook for array field operations (append, remove, move, insert)
4
+ *
5
+ * @param path - Field path
6
+ * @param backend - Form backend
7
+ * @returns Object with array manipulation functions
8
+ */
9
+ export declare function useArrayField(path: string, backend: FormBackend): {
10
+ append: (value: unknown) => void;
11
+ remove: (index: number) => void;
12
+ move: (from: number, to: number) => void;
13
+ insert: (index: number, value: unknown) => void;
14
+ };
15
+ /**
16
+ * useField - Combined hook for field value, state, and setter
17
+ *
18
+ * This is the recommended hook for form widgets. It provides everything needed
19
+ * for a field in one call, using the unified backend.subscribe API.
20
+ *
21
+ * No branching on backend.type - the backend hides implementation details.
22
+ *
23
+ * @example
24
+ * ```tsx
25
+ * function TextField({ path, backend, field }: FormFieldProps<string>) {
26
+ * const { value, error, isDirty, setValue } = useField<string>(path, backend)
27
+ *
28
+ * return (
29
+ * <input
30
+ * value={value ?? ''}
31
+ * onChange={(e) => setValue(e.target.value)}
32
+ * />
33
+ * )
34
+ * }
35
+ * ```
36
+ */
37
+ export declare function useField<T = unknown>(path: string, backend: FormBackend): {
38
+ value: T | undefined;
39
+ error: import("./types").FieldError | undefined;
40
+ isDirty: boolean | undefined;
41
+ isTouched: boolean | undefined;
42
+ invalid: boolean | undefined;
43
+ setValue: (newValue: T, options?: SetValueOptions) => void;
44
+ };
45
+ /**
46
+ * useFieldError - Hook to get only the error state of a field
47
+ *
48
+ * Use this for container widgets (GroupField, RepeaterField) that need to display
49
+ * group-level errors but don't interact with the field value.
50
+ *
51
+ * More efficient than useField when you only need error state.
52
+ *
53
+ * @example
54
+ * ```tsx
55
+ * function GroupField({ path, backend, field, renderChild }: FormFieldProps) {
56
+ * const error = useFieldError(path, backend)
57
+ *
58
+ * return (
59
+ * <FieldFrame error={error?.message}>
60
+ * {field.fields.map(child => renderChild(child, `${path}.${child.id}`))}
61
+ * </FieldFrame>
62
+ * )
63
+ * }
64
+ * ```
65
+ */
66
+ export declare function useFieldError(path: string, backend: FormBackend): import("./types").FieldError | undefined;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Backend abstraction layer for form operations
3
+ *
4
+ * This module provides a unified API that works with either:
5
+ * - React Hook Form (RHF) for traditional form handling
6
+ * - Zustand Store for inline editing with autosave
7
+ */
8
+ export * from './types';
9
+ export * from './hooks';
10
+ export * from './adapter';
11
+ export { useRepeaterBackend } from './hooks/useRepeaterBackend';
12
+ export type { RepeaterBackendOps, RepeaterItem } from './hooks/useRepeaterBackend';
@@ -0,0 +1,34 @@
1
+ /**
2
+ * React Hook Form (RHF) backend implementation
3
+ *
4
+ * Wraps a react-hook-form instance to provide the unified FormBackend interface.
5
+ * Validation is handled by the resolver passed to useForm (e.g., zodResolver).
6
+ *
7
+ * ## Why `as never` casts are used
8
+ *
9
+ * React Hook Form is heavily typed around its generic parameter, so methods like
10
+ * `setValue<TFieldName>(path: TFieldName, value: TFieldValues[TFieldName])` require
11
+ * compile-time knowledge of the exact form schema.
12
+ *
13
+ * Our FormBackend interface is library-agnostic and uses dynamic string paths
14
+ * (e.g., `"author.name"`, `"items.0.title"`) that can't be statically typed.
15
+ * TypeScript's `keyof T` doesn't work with nested dot-notation paths.
16
+ *
17
+ * The `as never` cast is the safest way to bypass this:
18
+ * - `never` is the bottom type, so casting TO `never` is always allowed
19
+ * - It makes the intent explicit: "we're deliberately bypassing type checking here"
20
+ * - It's more honest than using `any`, which could mask real errors
21
+ *
22
+ * Type safety is maintained at the widget layer, where components know their
23
+ * specific field types and cast immediately after reading values.
24
+ */
25
+ import type { FieldValues, UseFormReturn } from 'react-hook-form';
26
+ import type { FormBackend } from './types';
27
+ /**
28
+ * Create RHF backend from react-hook-form instance
29
+ *
30
+ * Note: RHF handles validation through its resolver (passed to useForm).
31
+ * The schema is integrated at form creation time, so we don't need it here.
32
+ */
33
+ export declare function createRHFBackend<TFieldValues extends FieldValues>(form: UseFormReturn<TFieldValues>): FormBackend;
34
+ export declare function createRHFBackend(form: UseFormReturn<FieldValues>): FormBackend;
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Zustand Store backend implementation
3
+ *
4
+ * Integrates with EditorUiStore for autosave-enabled form management.
5
+ * Supports three scopes: blocks (per-block data), metadata (page/entry metadata), and content (content entry data).
6
+ */
7
+ import type { EditorBlockId, EditorSyncState } from '@riverbankcms/core';
8
+ import type { FormBackend, StoreBackendOptions } from './types';
9
+ type StoreSnapshot = {
10
+ current: Record<string, unknown> | null;
11
+ baseline: Record<string, unknown> | null;
12
+ syncState: EditorSyncState;
13
+ version?: number;
14
+ };
15
+ interface BlocksSlice {
16
+ getAtPath: (blockId: EditorBlockId, path: string) => unknown;
17
+ setAtPath: (blockId: EditorBlockId, path: string, value: unknown) => void;
18
+ getCurrentValues: (blockId: EditorBlockId) => Record<string, unknown> | null;
19
+ getBlockSnapshot?: (blockId: EditorBlockId) => StoreSnapshot | null;
20
+ clearError?: (blockId: EditorBlockId) => void;
21
+ updateBlockBaseline?: (blockId: EditorBlockId, data: Record<string, unknown> | null) => void;
22
+ }
23
+ interface RootSlice {
24
+ getAtPath: (path: string) => unknown;
25
+ setAtPath: (path: string, value: unknown) => void;
26
+ getCurrentValues: () => Record<string, unknown> | null;
27
+ getSnapshot?: () => StoreSnapshot | null;
28
+ clearError?: () => void;
29
+ hydrate?: (baseline: Record<string, unknown> | null, current: Record<string, unknown> | null) => void;
30
+ }
31
+ interface ArrayKeysManager {
32
+ get: (scope: string, path: string) => string[] | undefined;
33
+ set: (scope: string, path: string, keys: string[]) => void;
34
+ append: (scope: string, path: string, key: string) => void;
35
+ remove: (scope: string, path: string, index: number) => void;
36
+ move: (scope: string, path: string, from: number, to: number) => void;
37
+ insert: (scope: string, path: string, index: number, key: string) => void;
38
+ }
39
+ interface EditorStoreState {
40
+ drafts?: BlocksSlice;
41
+ metadata?: RootSlice;
42
+ content?: RootSlice;
43
+ blockValidation?: {
44
+ markPathEdited: (blockId: EditorBlockId, path: string) => void;
45
+ isPathEdited: (blockId: EditorBlockId, path: string) => boolean;
46
+ showAllValidation: (blockId: EditorBlockId) => boolean;
47
+ };
48
+ arrayKeys: ArrayKeysManager;
49
+ requestFocus?: (payload: {
50
+ blockId: EditorBlockId;
51
+ fieldPath?: string | null;
52
+ }) => void;
53
+ }
54
+ /**
55
+ * Create Store backend from Zustand store
56
+ *
57
+ * Integrates with editorUiStore for autosave and validation
58
+ */
59
+ export declare function createStoreBackend(options: StoreBackendOptions<EditorStoreState>): FormBackend;
60
+ export {};
@@ -0,0 +1,137 @@
1
+ /**
2
+ * FormBackend - Unified backend interface for form operations
3
+ *
4
+ * This module provides types for a unified interface that works with either:
5
+ * - React Hook Form (RHF) for settings forms
6
+ * - Zustand Store for content editing with autosave
7
+ *
8
+ * Validation Flow:
9
+ * - RHF backends: Validation handled by resolver passed to useForm (zodResolver, etc.)
10
+ * - Store backends: Validation handled by validateFn option
11
+ * Example: createStoreBackend({ validateFn: (values) => schema.safeParse(values).error?.issues ?? [] })
12
+ */
13
+ import type { ZodIssue } from 'zod';
14
+ import type { FieldValues, UseFormReturn } from 'react-hook-form';
15
+ import type { EditorBlockId } from '@riverbankcms/core';
16
+ /**
17
+ * Zustand-like store interface for store backend.
18
+ * We use a minimal contract here to avoid circular dependencies with content-editor.
19
+ * The actual EditorUiStoreInstance has more methods, but we only require
20
+ * the core zustand contract at the type level.
21
+ */
22
+ export interface ZustandLikeStore<TState = unknown> {
23
+ getState: () => TState;
24
+ subscribe: (callback: () => void) => () => void;
25
+ }
26
+ export type SetValueOptions = {
27
+ shouldDirty?: boolean;
28
+ shouldTouch?: boolean;
29
+ shouldValidate?: boolean;
30
+ };
31
+ export type FieldError = {
32
+ message: string;
33
+ type?: string;
34
+ };
35
+ export type FieldState = {
36
+ error?: FieldError;
37
+ isDirty?: boolean;
38
+ isTouched?: boolean;
39
+ invalid?: boolean;
40
+ };
41
+ export type FormState = {
42
+ isDirty: boolean;
43
+ isValid: boolean;
44
+ isSubmitting?: boolean;
45
+ errors: Record<string, FieldError>;
46
+ };
47
+ /**
48
+ * Unified form backend interface.
49
+ * Factory functions (createRHFBackend, createStoreBackend) return this interface.
50
+ *
51
+ * Internal properties (form, store, scope, blockId) are available for hooks that need
52
+ * direct access to underlying implementations (e.g., for reactivity).
53
+ */
54
+ export interface FormBackend {
55
+ /** Backend type identifier */
56
+ type: 'rhf' | 'store';
57
+ /** RHF form instance (RHF backend only) */
58
+ form?: UseFormReturn<FieldValues>;
59
+ /** Zustand store instance (Store backend only) */
60
+ store?: ZustandLikeStore;
61
+ /** Store scope (Store backend only) */
62
+ scope?: 'blocks' | 'metadata' | 'content';
63
+ /** Block ID for blocks scope (Store backend only) */
64
+ blockId?: EditorBlockId;
65
+ /** Get value at field path */
66
+ getValue: (path: string) => unknown;
67
+ /** Set value at field path with options */
68
+ setValue: (path: string, value: unknown, options?: SetValueOptions) => void;
69
+ /** Get all form values */
70
+ getValues: () => Record<string, unknown>;
71
+ /** Get field-level state (error, dirty, touched) */
72
+ getFieldState: (path: string) => FieldState;
73
+ /** Set custom error on field (for async/server validation) */
74
+ setError: (path: string, error: FieldError) => void;
75
+ /** Clear errors (specific field or all) */
76
+ clearErrors: (path?: string) => void;
77
+ /** Get all form errors */
78
+ getErrors: () => Record<string, FieldError>;
79
+ /** Manually mark field as dirty */
80
+ setDirty: (path: string, isDirty: boolean) => void;
81
+ /** Manually mark field as touched */
82
+ setTouched: (path: string, isTouched: boolean) => void;
83
+ /** Reset field to default value */
84
+ resetField: (path: string) => void;
85
+ /** Request focus on field */
86
+ setFocus: (path: string) => void;
87
+ /** Array field operations for repeater widgets */
88
+ arrayField: {
89
+ /** Append item to array */
90
+ append: (path: string, value: unknown) => void;
91
+ /** Remove item at index */
92
+ remove: (path: string, index: number) => void;
93
+ /** Move item from one index to another */
94
+ move: (path: string, from: number, to: number) => void;
95
+ /** Insert item at index */
96
+ insert: (path: string, index: number, value: unknown) => void;
97
+ };
98
+ /** Get form-level state */
99
+ formState: FormState;
100
+ /** Reset entire form (optionally with new values) */
101
+ reset: (values?: unknown) => void;
102
+ /** Trigger validation */
103
+ validate: () => Promise<boolean>;
104
+ /**
105
+ * Subscribe to form changes. Callback fires whenever any value changes.
106
+ * Returns unsubscribe function.
107
+ *
108
+ * This is the unified subscription API - consumers should never branch on backend.type.
109
+ */
110
+ subscribe: (callback: () => void) => () => void;
111
+ }
112
+ /**
113
+ * Options for creating a store backend
114
+ */
115
+ export type StoreBackendOptions<TState = unknown> = {
116
+ scope: 'blocks' | 'metadata' | 'content';
117
+ store: ZustandLikeStore<TState>;
118
+ blockId?: EditorBlockId;
119
+ validateFn?: (values: Record<string, unknown>) => ZodIssue[];
120
+ };
121
+ /**
122
+ * Type guards for discriminating backend types
123
+ */
124
+ export declare function isRhfBackend(backend: FormBackend): backend is FormBackend & {
125
+ type: 'rhf';
126
+ form: UseFormReturn<FieldValues>;
127
+ };
128
+ export declare function isStoreBackend(backend: FormBackend): backend is FormBackend & {
129
+ type: 'store';
130
+ store: ZustandLikeStore;
131
+ scope: 'blocks' | 'metadata' | 'content';
132
+ blockId?: EditorBlockId;
133
+ };
134
+ export type { FieldDefinition } from '@riverbankcms/blocks';
135
+ export { createRHFBackend } from './rhf-backend';
136
+ export { createStoreBackend } from './store-backend';
137
+ export { useBackendWatch } from './useBackendWatch';
@@ -0,0 +1,22 @@
1
+ /**
2
+ * useBackendWatch - Hook for watching field values reactively
3
+ *
4
+ * Works with all backends through the unified interface.
5
+ * For RHF backends, uses react-hook-form's optimized useWatch hook.
6
+ * For other backends, uses useSyncExternalStore with backend.subscribe/getValue.
7
+ */
8
+ import type { FormBackend } from './adapter';
9
+ /**
10
+ * Watch a field path and return its current value.
11
+ * The value updates reactively when the field changes.
12
+ *
13
+ * Uses backend's unified interface - no branching on backend.type.
14
+ * Detects RHF backend by presence of backend.form property.
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * const titleValue = useBackendWatch(backend, 'title')
19
+ * const statusValue = useBackendWatch(backend, 'status')
20
+ * ```
21
+ */
22
+ export declare function useBackendWatch(backend: FormBackend, path: string): unknown;
@@ -0,0 +1 @@
1
+ export declare function getErrorMessage(error: unknown): string | undefined;