@riverbankcms/sdk 0.144.0 → 0.146.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 (228) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/{PreviewEditorSidebar-CQZNnFiM.mjs → PreviewEditorSidebar-kg2r2Fyi.mjs} +4 -4
  3. package/dist/{PreviewEditorUI-DCNxnmI0.mjs → PreviewEditorUI-sWMLp5dT.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-BCYICImX.mjs → PreviewQueryProvider-Cg51xq1w.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-BJolUbr1.mjs → SdkPreviewModeRuntime-h2ti3Hch.mjs} +688 -519
  6. package/dist/{SiteChromeCustomizeContext-CKgEpoxi.mjs → SiteChromeCustomizeContext-DEACFH9m.mjs} +3381 -2017
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +5643 -66
  8. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +513 -6
  9. package/dist/_dts/api/src/appointmentEndpointDefinitions.d.ts +49 -0
  10. package/dist/_dts/api/src/appointmentServiceCategoryEndpoints.d.ts +75 -0
  11. package/dist/_dts/api/src/appointmentServiceContracts.d.ts +80 -0
  12. package/dist/_dts/api/src/appointmentSetup.d.ts +8 -1
  13. package/dist/_dts/api/src/bookingConfig.d.ts +8 -1
  14. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +10 -26
  15. package/dist/_dts/api/src/bookingManagementEventEndpointTypes.d.ts +45 -1
  16. package/dist/_dts/api/src/clientErrorReporting.d.ts +50 -0
  17. package/dist/_dts/api/src/communications.d.ts +32 -24
  18. package/dist/_dts/api/src/contentRuntime.d.ts +3 -5
  19. package/dist/_dts/api/src/endpoints.d.ts +316 -134
  20. package/dist/_dts/api/src/event-visibility.d.ts +20 -0
  21. package/dist/_dts/api/src/eventManagementContracts.d.ts +56 -3
  22. package/dist/_dts/api/src/eventManagementEndpointDefinitions.d.ts +24 -0
  23. package/dist/_dts/api/src/eventPageWords.d.ts +19 -0
  24. package/dist/_dts/api/src/eventSeriesRegistrationEndpointDefinitions.d.ts +14 -0
  25. package/dist/_dts/api/src/index.d.ts +7 -1
  26. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
  27. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  28. package/dist/_dts/api/src/launchReadiness.d.ts +22 -2
  29. package/dist/_dts/api/src/launchRequirementPriority.d.ts +3 -0
  30. package/dist/_dts/api/src/newsletterCampaignCommandEndpoints.d.ts +13 -0
  31. package/dist/_dts/api/src/newsletterEndpointDefinitions.d.ts +30 -11
  32. package/dist/_dts/api/src/occurrenceScheduling.d.ts +10 -0
  33. package/dist/_dts/api/src/onboarding/confirmationResend.d.ts +3 -0
  34. package/dist/_dts/api/src/pageSurfaceEndpoints.d.ts +44 -0
  35. package/dist/_dts/api/src/participantMessaging.d.ts +11 -1
  36. package/dist/_dts/api/src/publicBookingService.d.ts +35 -1
  37. package/dist/_dts/api/src/publicExperience/newsletterEndpoints.d.ts +13 -0
  38. package/dist/_dts/api/src/publicNewsletterEndpointDefinitions.d.ts +58 -0
  39. package/dist/_dts/api/src/schemas/admin-observability-logs.d.ts +3 -3
  40. package/dist/_dts/api/src/sdk-event-upsert.d.ts +40 -1
  41. package/dist/_dts/api/src/sdkContracts.d.ts +3 -42
  42. package/dist/_dts/api/src/sdkCourseBooking.d.ts +30 -0
  43. package/dist/_dts/api/src/sdkEventEndpointDefinitions.d.ts +76 -0
  44. package/dist/_dts/api/src/sdkEventLifecycle.d.ts +37 -0
  45. package/dist/_dts/api/src/sdkManagedEventContracts.d.ts +18 -0
  46. package/dist/_dts/api/src/sdkPageDesign.d.ts +388 -0
  47. package/dist/_dts/api/src/sdkPageDesignEndpointDefinitions.d.ts +22 -0
  48. package/dist/_dts/api/src/sdkPullEventContracts.d.ts +46 -0
  49. package/dist/_dts/api/src/siteAddressEndpoints.d.ts +29 -0
  50. package/dist/_dts/api/src/siteManagementEndpointDefinitions.d.ts +49 -0
  51. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +4 -38
  52. package/dist/_dts/api/src/siteOnboarding.d.ts +75 -9
  53. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +1 -1
  54. package/dist/_dts/api/src/types.d.ts +8 -1
  55. package/dist/_dts/api/src/wholeSeriesRuns.d.ts +14 -0
  56. package/dist/_dts/blocks/src/PageRenderer.d.ts +4 -4
  57. package/dist/_dts/blocks/src/bindings/index.d.ts +2 -2
  58. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +24 -0
  59. package/dist/_dts/blocks/src/index.d.ts +3 -1
  60. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +10 -0
  61. package/dist/_dts/blocks/src/pageRenderJoins.d.ts +68 -0
  62. package/dist/_dts/blocks/src/pageRenderPlan.d.ts +8 -27
  63. package/dist/_dts/blocks/src/pageRenderPreparation.d.ts +7 -4
  64. package/dist/_dts/blocks/src/pageRendererBoundaries.d.ts +40 -23
  65. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +3 -1
  66. package/dist/_dts/blocks/src/server.d.ts +1 -1
  67. package/dist/_dts/blocks/src/system/blocks/appointment-services.d.ts +2 -0
  68. package/dist/_dts/blocks/src/system/blocks/events/eventSelectionFields.d.ts +2 -2
  69. package/dist/_dts/blocks/src/system/blocks/events/shared/calendarWindow.d.ts +1 -1
  70. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +27 -5
  71. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +14 -1
  72. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +2 -2
  73. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +47 -47
  74. package/dist/_dts/blocks/src/system/icons/social.d.ts +1 -1
  75. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +29 -3
  76. package/dist/_dts/blocks/src/system/registry.d.ts +1 -1
  77. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +8 -1
  78. package/dist/_dts/blocks/src/system/runtime/nodes/appointment-services.d.ts +22 -2
  79. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +3 -1
  80. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +57 -2
  81. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.service-categories.d.ts +29 -0
  82. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.service-choices.d.ts +13 -0
  83. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +3 -3
  84. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +13 -1
  85. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.d.ts +2 -1
  86. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +23 -7
  87. package/dist/_dts/blocks/src/system/runtime/nodes/form.fields.d.ts +5 -0
  88. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.block-submission.d.ts +36 -0
  89. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.client.d.ts +1 -1
  90. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +6 -1
  91. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.parts.d.ts +46 -0
  92. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.submission.d.ts +20 -1
  93. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +2 -1
  94. package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +2 -1
  95. package/dist/_dts/blocks/src/system/runtime/shared/components/CheckboxChoice.d.ts +18 -0
  96. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +1 -0
  97. package/dist/_dts/content-editor/src/index.d.ts +1 -0
  98. package/dist/_dts/content-editor/src/primitives/previewEditableOutline.d.ts +2 -0
  99. package/dist/_dts/content-editor/src/ui/editorBlockEquality.d.ts +3 -0
  100. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +3 -3
  101. package/dist/_dts/content-model/src/content-types/schema.d.ts +1 -1
  102. package/dist/_dts/core/src/appointment-service-categories.d.ts +108 -0
  103. package/dist/_dts/core/src/block-content-identity.d.ts +5 -0
  104. package/dist/_dts/core/src/editor-state.d.ts +2 -1
  105. package/dist/_dts/core/src/index.d.ts +2 -0
  106. package/dist/_dts/core/src/mailing-list-submission.d.ts +3 -1
  107. package/dist/_dts/core/src/public-event-booking-availability.d.ts +20 -1
  108. package/dist/_dts/core/src/public-profile.d.ts +12 -1
  109. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +711 -242
  110. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +3 -0
  111. package/dist/_dts/editor-blocks/src/block-editor/EmptyState.d.ts +13 -1
  112. package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +2 -2
  113. package/dist/_dts/editor-blocks/src/index.d.ts +1 -0
  114. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/loaders.d.ts +16 -1
  115. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/types.d.ts +13 -0
  116. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/utils.d.ts +29 -0
  117. package/dist/_dts/preview-next/src/client/blocks/BoundaryControl.d.ts +7 -2
  118. package/dist/_dts/preview-next/src/client/blocks/composer/mergeDrafts.d.ts +1 -1
  119. package/dist/_dts/preview-next/src/client/blocks/composer/types.d.ts +3 -3
  120. package/dist/_dts/preview-next/src/client/blocks/previewProjection/applyPreviewProjections.d.ts +1 -3
  121. package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -2
  122. package/dist/_dts/preview-next/src/client/blocks/previewProjection/types.d.ts +2 -2
  123. package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +1 -1
  124. package/dist/_dts/sdk/src/client/runtimeCacheKeys.d.ts +8 -0
  125. package/dist/_dts/sdk/src/client/types.d.ts +1 -1
  126. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  127. package/dist/_dts/sdk/src/contracts/page.d.ts +7 -2
  128. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +5 -0
  129. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +2 -2
  130. package/dist/_dts/sdk/src/next/renderSdkContent.d.ts +0 -1
  131. package/dist/_dts/sdk/src/public-api/contracts.d.ts +6 -8
  132. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +4 -4
  133. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +4 -4
  134. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +7 -2
  135. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +5 -2
  136. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +6 -1
  137. package/dist/_dts/sdk/src/rendering/helpers/templateContent.d.ts +2 -0
  138. package/dist/_dts/sdk/src/rendering/hooks/useContent.d.ts +6 -2
  139. package/dist/_dts/sdk/src/rendering/hooks/usePage.d.ts +5 -1
  140. package/dist/_dts/sdk/src/version.d.ts +1 -1
  141. package/dist/_dts/surfaces/src/index.d.ts +10 -0
  142. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  143. package/dist/_dts/theme-core/src/inputs/checkable.d.ts +42 -0
  144. package/dist/_dts/theme-core/src/inputs/inputGroup.d.ts +19 -0
  145. package/dist/_dts/theme-core/src/layout/boundaryCss.d.ts +3 -0
  146. package/dist/_dts/theme-core/src/site-styles/compositionBudget.d.ts +8 -0
  147. package/dist/_dts/theme-core/src/site-styles/contentTemplateRuntimeCompiler.d.ts +3 -2
  148. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +1 -3
  149. package/dist/_dts/theme-core/src/site-styles/generatedDesignPipeline.d.ts +3 -0
  150. package/dist/_dts/theme-core/src/site-styles/index.d.ts +3 -0
  151. package/dist/_dts/theme-core/src/site-styles/joinTreatment.d.ts +132 -0
  152. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorBoundaries.d.ts +31 -0
  153. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +33 -29
  154. package/dist/_dts/theme-core/src/site-styles/pageDesignIntent.d.ts +4 -4
  155. package/dist/_dts/theme-core/src/site-styles/pageFlowPresets.d.ts +36 -0
  156. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +4 -10
  157. package/dist/_dts/theme-core/src/site-styles/rawStyleFields.d.ts +17 -4
  158. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +20 -74
  159. package/dist/_dts/theme-core/src/site-styles/sectionBoundaryComposition.d.ts +95 -0
  160. package/dist/_dts/theme-core/src/site-styles/sectionTransitions.d.ts +80 -518
  161. package/dist/_dts/theme-core/src/site-styles/siteStyleBlockPolicies.d.ts +9 -4
  162. package/dist/_dts/theme-core/src/site-styles/transitionCatalogue.d.ts +320 -0
  163. package/dist/_dts/theme-core/src/site-styles/types.d.ts +3 -18
  164. package/dist/_dts/ui/src/navigation-tabs.d.ts +2 -1
  165. package/dist/client/{BookingConsentAgreement-DoAILrkN.mjs → BookingConsentAgreement-BQKL045f.mjs} +2 -2
  166. package/dist/client/CheckboxChoice--W2n6yKs.mjs +24 -0
  167. package/dist/client/{DiscountCodeDisclosure-X528hUTf.mjs → DiscountCodeDisclosure-CsOtjFY7.mjs} +1 -1
  168. package/dist/client/{EventCombined.client-DSBVwq5m.mjs → EventCombined.client-BdRjVbhH.mjs} +6 -6
  169. package/dist/client/{EventListing.client-DmFAX7Vb.mjs → EventListing.client-DBxC6xOU.mjs} +2 -2
  170. package/dist/client/{LeafletStaticMap-BAqXdfhq.mjs → LeafletStaticMap-mHEJKrTs.mjs} +1 -1
  171. package/dist/client/{ThemedButton-BwNFVwi4.mjs → ThemedButton-CE5KYT6z.mjs} +1 -1
  172. package/dist/client/{accordion-DRhMdkbd.mjs → accordion-BEQNSptH.mjs} +1 -1
  173. package/dist/client/{bookingForm-iJ_nCsNF.mjs → bookingForm-AMr-s5vw.mjs} +168 -95
  174. package/dist/client/bookings.mjs +239 -110
  175. package/dist/client/{carousel-D8zuffZr.mjs → carousel-Bbt_QgJy.mjs} +1 -1
  176. package/dist/client/{cart-DeMGJViN.mjs → cart-CnWi30zJ.mjs} +3 -3
  177. package/dist/client/{checkout-DXc06Km2.mjs → checkout-f3nkWgd4.mjs} +3 -3
  178. package/dist/client/client.mjs +3222 -1612
  179. package/dist/client/{context-CDLCfDep.mjs → context-Bc8T6pCe.mjs} +1 -1
  180. package/dist/client/{dates-ClFx7Epy.mjs → dates-DUsCEzLb.mjs} +2 -3
  181. package/dist/client/{eventCalendar-BaGpnOGN.mjs → eventCalendar-CKwgXui5.mjs} +9 -9
  182. package/dist/client/{eventCombined-ywONOx2m.mjs → eventCombined-CBAOSTGR.mjs} +4 -4
  183. package/dist/client/{eventDetails-B2LlOTYY.mjs → eventDetails-Dh-_WiBD.mjs} +4 -4
  184. package/dist/client/{eventListing-CMgxWpqP.mjs → eventListing-CA3frIH5.mjs} +4 -4
  185. package/dist/client/{eventRegistration-BarLDNHR.mjs → eventRegistration-BHtsgdcg.mjs} +21 -22
  186. package/dist/client/{form-BjqKaBJ7.mjs → form-C2h3YAcg.mjs} +135 -104
  187. package/dist/client/{headerSection-CP4XDwz1.mjs → headerSection-lwMuMTH9.mjs} +3 -3
  188. package/dist/client/hooks.mjs +1023 -148
  189. package/dist/client/{locationMap-C5gW-d-w.mjs → locationMap-DJ2bLODV.mjs} +3 -3
  190. package/dist/client/{newsletterForm-afXlVSA0.mjs → newsletterForm-8Pu5K32g.mjs} +225 -102
  191. package/dist/client/{pricing-Bl1CAl28.mjs → pricing-HHx3IgBz.mjs} +1 -1
  192. package/dist/client/{productDetail-CvQ3jWQe.mjs → productDetail-C_1odnAf.mjs} +3 -3
  193. package/dist/client/{productList-U874PGO7.mjs → productList-CtCv-Nmx.mjs} +3 -3
  194. package/dist/client/{propsDecoder-DPXtCZWP.mjs → propsDecoder-Dcgsncxb.mjs} +111 -55
  195. package/dist/client/rendering/client.mjs +1389 -722
  196. package/dist/client/rendering/islands.mjs +17 -17
  197. package/dist/client/rendering.mjs +3136 -1400
  198. package/dist/client/{routeIslandApiConfig-NGYiUWXu.mjs → routeIslandApiConfig-CWLP7wu3.mjs} +1 -1
  199. package/dist/client/{scrollToBlock-0-C3DVhK.mjs → scrollToBlock-BNgaEUpo.mjs} +1 -1
  200. package/dist/client/{shop-BXjXhM9P.mjs → shop-DQXrQ8kJ.mjs} +7 -7
  201. package/dist/client/{shop-commerce-BZ6UlWJ7.mjs → shop-commerce-B88zmWWo.mjs} +6 -6
  202. package/dist/client/{shop-commerce-store-DlSBXb3D.mjs → shop-commerce-store-DtSfkKuX.mjs} +1 -1
  203. package/dist/client/{shopShared-kkEOiLPA.mjs → shopShared-cuaONpkJ.mjs} +4 -4
  204. package/dist/client/{useEventFilters-zvnnE1ro.mjs → useEventFilters-Bukew6Gb.mjs} +6 -6
  205. package/dist/preview-next/before-render.mjs +500 -165
  206. package/dist/preview-next/client/runtime.mjs +4 -4
  207. package/dist/preview-next/editor-base.css +11 -0
  208. package/dist/preview-next/keepAlive.mjs +460 -165
  209. package/dist/preview-next/middleware.mjs +461 -165
  210. package/dist/{previewAuthStore-JA6-I_sL.mjs → previewAuthStore-h5IgbSp4.mjs} +485 -165
  211. package/dist/{sdk-runtime-DFJlQt3q.mjs → sdk-runtime-DTc1uIXn.mjs} +2 -2
  212. package/dist/{separator-o8GHb1xh.mjs → separator-BpHS1KZK.mjs} +1 -1
  213. package/dist/server/components.mjs +3088 -1307
  214. package/dist/server/config-validation.mjs +927 -109
  215. package/dist/server/config.mjs +927 -109
  216. package/dist/server/data.mjs +939 -110
  217. package/dist/server/index.mjs +513 -169
  218. package/dist/server/next.mjs +2874 -1195
  219. package/dist/server/page-converter.mjs +420 -79
  220. package/dist/server/prebuild.mjs +1 -1
  221. package/dist/server/rendering/server.mjs +3071 -1289
  222. package/dist/server/rendering.mjs +3169 -1350
  223. package/dist/server/routing.mjs +1085 -159
  224. package/dist/server/server.mjs +1042 -291
  225. package/dist/server/theme-bridge.mjs +1658 -137
  226. package/dist/server/theme.mjs +6 -4
  227. package/dist/styles/index.css +186 -65
  228. package/package.json +2 -1
@@ -10,7 +10,7 @@ export type DisplayMediaKind = (typeof DISPLAY_MEDIA_KINDS)[number];
10
10
  export declare const DEFAULT_MEDIA_FIELD_KINDS: readonly ["image"];
11
11
  export declare const PUBLIC_FILE_FIELD_KINDS: readonly ["document", "spreadsheet", "archive", "audio"];
12
12
  export type FileFieldKind = (typeof PUBLIC_FILE_FIELD_KINDS)[number];
13
- export declare const siteOptionSources: readonly ["eventCategories", "eventSeries", "venues", "staffMembers"];
13
+ export declare const siteOptionSources: readonly ["eventCategories", "eventSeries", "venues", "staffMembers", "appointmentServiceCategories"];
14
14
  export type SiteOptionSource = (typeof siteOptionSources)[number];
15
15
  declare const selectOptionSchema: z.ZodObject<{
16
16
  value: z.ZodString;
@@ -27,6 +27,7 @@ declare const selectSourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
27
27
  eventCategories: "eventCategories";
28
28
  venues: "venues";
29
29
  staffMembers: "staffMembers";
30
+ appointmentServiceCategories: "appointmentServiceCategories";
30
31
  }>;
31
32
  }, z.core.$strip>, z.ZodObject<{
32
33
  kind: z.ZodLiteral<"sdk">;
@@ -210,6 +211,7 @@ declare const uiSchema: z.ZodObject<{
210
211
  eventCategories: "eventCategories";
211
212
  venues: "venues";
212
213
  staffMembers: "staffMembers";
214
+ appointmentServiceCategories: "appointmentServiceCategories";
213
215
  }>>>;
214
216
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
215
217
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -399,6 +401,7 @@ declare const baseFieldSchema: z.ZodObject<{
399
401
  eventCategories: "eventCategories";
400
402
  venues: "venues";
401
403
  staffMembers: "staffMembers";
404
+ appointmentServiceCategories: "appointmentServiceCategories";
402
405
  }>>>;
403
406
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
404
407
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -589,6 +592,7 @@ declare const textFieldSchema: z.ZodObject<{
589
592
  eventCategories: "eventCategories";
590
593
  venues: "venues";
591
594
  staffMembers: "staffMembers";
595
+ appointmentServiceCategories: "appointmentServiceCategories";
592
596
  }>>>;
593
597
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
594
598
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -782,6 +786,7 @@ declare const richTextFieldSchema: z.ZodObject<{
782
786
  eventCategories: "eventCategories";
783
787
  venues: "venues";
784
788
  staffMembers: "staffMembers";
789
+ appointmentServiceCategories: "appointmentServiceCategories";
785
790
  }>>>;
786
791
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
787
792
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -973,6 +978,7 @@ declare const inlineTextFieldSchema: z.ZodObject<{
973
978
  eventCategories: "eventCategories";
974
979
  venues: "venues";
975
980
  staffMembers: "staffMembers";
981
+ appointmentServiceCategories: "appointmentServiceCategories";
976
982
  }>>>;
977
983
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
978
984
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -1166,6 +1172,7 @@ declare const mediaFieldSchema: z.ZodObject<{
1166
1172
  eventCategories: "eventCategories";
1167
1173
  venues: "venues";
1168
1174
  staffMembers: "staffMembers";
1175
+ appointmentServiceCategories: "appointmentServiceCategories";
1169
1176
  }>>>;
1170
1177
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
1171
1178
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -1366,6 +1373,7 @@ declare const fileFieldSchema: z.ZodObject<{
1366
1373
  eventCategories: "eventCategories";
1367
1374
  venues: "venues";
1368
1375
  staffMembers: "staffMembers";
1376
+ appointmentServiceCategories: "appointmentServiceCategories";
1369
1377
  }>>>;
1370
1378
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
1371
1379
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -1563,6 +1571,7 @@ declare const booleanFieldSchema: z.ZodObject<{
1563
1571
  eventCategories: "eventCategories";
1564
1572
  venues: "venues";
1565
1573
  staffMembers: "staffMembers";
1574
+ appointmentServiceCategories: "appointmentServiceCategories";
1566
1575
  }>>>;
1567
1576
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
1568
1577
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -1754,6 +1763,7 @@ declare const dateFieldSchema: z.ZodObject<{
1754
1763
  eventCategories: "eventCategories";
1755
1764
  venues: "venues";
1756
1765
  staffMembers: "staffMembers";
1766
+ appointmentServiceCategories: "appointmentServiceCategories";
1757
1767
  }>>>;
1758
1768
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
1759
1769
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -1945,6 +1955,7 @@ declare const timeFieldSchema: z.ZodObject<{
1945
1955
  eventCategories: "eventCategories";
1946
1956
  venues: "venues";
1947
1957
  staffMembers: "staffMembers";
1958
+ appointmentServiceCategories: "appointmentServiceCategories";
1948
1959
  }>>>;
1949
1960
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
1950
1961
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -2136,6 +2147,7 @@ declare const dateTimeFieldSchema: z.ZodObject<{
2136
2147
  eventCategories: "eventCategories";
2137
2148
  venues: "venues";
2138
2149
  staffMembers: "staffMembers";
2150
+ appointmentServiceCategories: "appointmentServiceCategories";
2139
2151
  }>>>;
2140
2152
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
2141
2153
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -2327,6 +2339,7 @@ declare const slugFieldSchema: z.ZodObject<{
2327
2339
  eventCategories: "eventCategories";
2328
2340
  venues: "venues";
2329
2341
  staffMembers: "staffMembers";
2342
+ appointmentServiceCategories: "appointmentServiceCategories";
2330
2343
  }>>>;
2331
2344
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
2332
2345
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -2521,6 +2534,7 @@ declare const urlFieldSchema: z.ZodObject<{
2521
2534
  eventCategories: "eventCategories";
2522
2535
  venues: "venues";
2523
2536
  staffMembers: "staffMembers";
2537
+ appointmentServiceCategories: "appointmentServiceCategories";
2524
2538
  }>>>;
2525
2539
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
2526
2540
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -2713,6 +2727,7 @@ declare const linkFieldSchema: z.ZodObject<{
2713
2727
  eventCategories: "eventCategories";
2714
2728
  venues: "venues";
2715
2729
  staffMembers: "staffMembers";
2730
+ appointmentServiceCategories: "appointmentServiceCategories";
2716
2731
  }>>>;
2717
2732
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
2718
2733
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -2904,6 +2919,7 @@ declare const selectFieldSchema: z.ZodObject<{
2904
2919
  eventCategories: "eventCategories";
2905
2920
  venues: "venues";
2906
2921
  staffMembers: "staffMembers";
2922
+ appointmentServiceCategories: "appointmentServiceCategories";
2907
2923
  }>>>;
2908
2924
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
2909
2925
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -2934,6 +2950,7 @@ declare const selectFieldSchema: z.ZodObject<{
2934
2950
  eventCategories: "eventCategories";
2935
2951
  venues: "venues";
2936
2952
  staffMembers: "staffMembers";
2953
+ appointmentServiceCategories: "appointmentServiceCategories";
2937
2954
  }>;
2938
2955
  }, z.core.$strip>, z.ZodObject<{
2939
2956
  kind: z.ZodLiteral<"sdk">;
@@ -3115,6 +3132,7 @@ declare const referenceFieldSchema: z.ZodObject<{
3115
3132
  eventCategories: "eventCategories";
3116
3133
  venues: "venues";
3117
3134
  staffMembers: "staffMembers";
3135
+ appointmentServiceCategories: "appointmentServiceCategories";
3118
3136
  }>>>;
3119
3137
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
3120
3138
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -3318,6 +3336,7 @@ declare const repeaterFieldSchema: z.ZodObject<{
3318
3336
  eventCategories: "eventCategories";
3319
3337
  venues: "venues";
3320
3338
  staffMembers: "staffMembers";
3339
+ appointmentServiceCategories: "appointmentServiceCategories";
3321
3340
  }>>>;
3322
3341
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
3323
3342
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -3526,6 +3545,7 @@ declare const groupFieldSchema: z.ZodObject<{
3526
3545
  eventCategories: "eventCategories";
3527
3546
  venues: "venues";
3528
3547
  staffMembers: "staffMembers";
3548
+ appointmentServiceCategories: "appointmentServiceCategories";
3529
3549
  }>>>;
3530
3550
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
3531
3551
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -3720,6 +3740,7 @@ declare const modalFieldSchema: z.ZodObject<{
3720
3740
  eventCategories: "eventCategories";
3721
3741
  venues: "venues";
3722
3742
  staffMembers: "staffMembers";
3743
+ appointmentServiceCategories: "appointmentServiceCategories";
3723
3744
  }>>>;
3724
3745
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
3725
3746
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -3914,6 +3935,7 @@ declare const numberFieldSchema: z.ZodObject<{
3914
3935
  eventCategories: "eventCategories";
3915
3936
  venues: "venues";
3916
3937
  staffMembers: "staffMembers";
3938
+ appointmentServiceCategories: "appointmentServiceCategories";
3917
3939
  }>>>;
3918
3940
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
3919
3941
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -4108,6 +4130,7 @@ declare const tabGroupFieldSchema: z.ZodObject<{
4108
4130
  eventCategories: "eventCategories";
4109
4131
  venues: "venues";
4110
4132
  staffMembers: "staffMembers";
4133
+ appointmentServiceCategories: "appointmentServiceCategories";
4111
4134
  }>>>;
4112
4135
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
4113
4136
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -4312,6 +4335,7 @@ declare const presetOrCustomFieldSchema: z.ZodObject<{
4312
4335
  eventCategories: "eventCategories";
4313
4336
  venues: "venues";
4314
4337
  staffMembers: "staffMembers";
4338
+ appointmentServiceCategories: "appointmentServiceCategories";
4315
4339
  }>>>;
4316
4340
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
4317
4341
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -4512,6 +4536,7 @@ declare const contentTypeSelectFieldSchema: z.ZodObject<{
4512
4536
  eventCategories: "eventCategories";
4513
4537
  venues: "venues";
4514
4538
  staffMembers: "staffMembers";
4539
+ appointmentServiceCategories: "appointmentServiceCategories";
4515
4540
  }>>>;
4516
4541
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
4517
4542
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -4708,6 +4733,7 @@ declare const entryPickerFieldSchema: z.ZodObject<{
4708
4733
  eventCategories: "eventCategories";
4709
4734
  venues: "venues";
4710
4735
  staffMembers: "staffMembers";
4736
+ appointmentServiceCategories: "appointmentServiceCategories";
4711
4737
  }>>>;
4712
4738
  searchThreshold: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
4713
4739
  renderInHeader: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
@@ -4933,8 +4959,8 @@ export declare const previewCustomizeManifestCurationSchema: z.ZodObject<{
4933
4959
  export type PreviewCustomizeManifestCuration = z.infer<typeof previewCustomizeManifestCurationSchema>;
4934
4960
  export declare const blockCategoryEnum: z.ZodEnum<{
4935
4961
  content: "content";
4936
- media: "media";
4937
4962
  layout: "layout";
4963
+ media: "media";
4938
4964
  marketing: "marketing";
4939
4965
  blog: "blog";
4940
4966
  interactive: "interactive";
@@ -5050,8 +5076,8 @@ export declare const manifestSchema: z.ZodObject<{
5050
5076
  }, z.core.$strip>>>>;
5051
5077
  category: z.ZodOptional<z.ZodEnum<{
5052
5078
  content: "content";
5053
- media: "media";
5054
5079
  layout: "layout";
5080
+ media: "media";
5055
5081
  marketing: "marketing";
5056
5082
  blog: "blog";
5057
5083
  interactive: "interactive";
@@ -25,7 +25,7 @@ export type SystemBlockComponentProps<TContent = Record<string, unknown>> = {
25
25
  data?: Record<string, unknown>;
26
26
  pathBase?: string;
27
27
  blockId?: string | null;
28
- contentVersionId?: string | null;
28
+ newsletterBlockSubmission?: ResolverContext['newsletterBlockSubmission'];
29
29
  blockKind?: string;
30
30
  blockBindings?: Record<string, unknown>;
31
31
  editableRouteMetadataFieldIds?: ResolverContext['editableRouteMetadataFieldIds'];
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  import { type BlockApiConfig } from "../api";
3
3
  import type { AutoAppliedDiscountPreview } from "../api/types";
4
- import type { BookingFormConfig, BookingFormData, BookingFormService, BookingSelectedCollectionOptionKind } from "../nodes/booking-form.state";
4
+ import type { BookingFormConfig, BookingFormData, BookingFormService, BookingFormServiceCategory, BookingSelectedCollectionOptionKind } from "../nodes/booking-form.state";
5
5
  import { type BookingPaymentSelectionViewModel } from "../shared/bookingPaymentOptions";
6
6
  import { createBookingBlockApiConfig, type BookingAppointmentPackagesModel, type BookingFieldValue, type BookingFieldView, type BookingFlowActionResult, type BookingFlowFeedback, type BookingFlowStatus, type BookingFlowView, type BookingResourceView, type BookingFlowStep, type BookingFlowStepId, type BookingSlotSelection, type BookingSlotView, type BookingSubmitActionResult, type BookingSubmitOptions, getBookingServiceSlidingScale, type LoadState } from "./useHeadlessBookingFlow.state";
7
7
  export type { BlockApiConfig };
@@ -12,6 +12,11 @@ export type HeadlessBookingFlowOptions = Readonly<{
12
12
  formId: string;
13
13
  form: BookingFormConfig | null;
14
14
  services: readonly BookingFormService[];
15
+ /**
16
+ * The site's ordered service categories (issue 1403), used to group the
17
+ * service choice. Omitted or empty means a site without categories.
18
+ */
19
+ serviceCategories?: readonly BookingFormServiceCategory[];
15
20
  initialServiceId?: string;
16
21
  initialResourceId?: string;
17
22
  initialData?: Partial<BookingFormData>;
@@ -27,6 +32,8 @@ export type HeadlessBookingFlowOptions = Readonly<{
27
32
  }>;
28
33
  export type BookingServicesModel = Readonly<{
29
34
  items: readonly BookingFormService[];
35
+ /** Ordered service categories for grouping `items`; empty when the site has none. */
36
+ categories: readonly BookingFormServiceCategory[];
30
37
  selected: BookingFormService | null;
31
38
  defaultServiceId?: string;
32
39
  requiresSelection: boolean;
@@ -57,6 +57,7 @@ declare const publicAppointmentServiceSchema: z.ZodObject<{
57
57
  area: z.ZodNullable<z.ZodString>;
58
58
  }, z.core.$strip>>;
59
59
  }, z.core.$strip>], "mode">;
60
+ categoryId: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | null, string | null | undefined>>;
60
61
  }, z.core.$strip>;
61
62
  type PublicAppointmentService = z.infer<typeof publicAppointmentServiceSchema>;
62
63
  export type AppointmentServiceRow = Readonly<{
@@ -69,9 +70,25 @@ export type AppointmentServiceRow = Readonly<{
69
70
  href: string;
70
71
  detailsHref: string | null;
71
72
  }>;
73
+ /** One category (or the trailing "Other") with its heading, intro and rows. */
74
+ export type AppointmentServiceGroup = Readonly<{
75
+ key: string;
76
+ heading: string;
77
+ intro: string | null;
78
+ rows: readonly AppointmentServiceRow[];
79
+ }>;
80
+ /**
81
+ * `items` is the flat list of a site with no categories, unchanged from before
82
+ * categories existed. `groups` is a categorised site: every non-empty
83
+ * category in order and then "Other", or the one category a block is
84
+ * filtered to.
85
+ */
72
86
  export type AppointmentServicesView = Readonly<{
73
87
  kind: 'items';
74
88
  rows: readonly AppointmentServiceRow[];
89
+ }> | Readonly<{
90
+ kind: 'groups';
91
+ groups: readonly AppointmentServiceGroup[];
75
92
  }> | Readonly<{
76
93
  kind: 'empty';
77
94
  message: string;
@@ -81,18 +98,21 @@ export type AppointmentServicesView = Readonly<{
81
98
  }>;
82
99
  export type AppointmentServicesNodeProps = Readonly<{
83
100
  sectionHeading?: unknown;
101
+ categoryId?: unknown;
84
102
  services?: unknown;
85
103
  pathname?: unknown;
86
104
  servicePathPrefix?: unknown;
105
+ blockId?: string | null;
87
106
  className?: string | null;
88
107
  }>;
89
108
  export declare function formatAppointmentDuration(durationMinutes: number): string;
90
109
  export declare function formatAppointmentLocation(location: PublicAppointmentLocation): string | null;
91
- export declare function formatAppointmentPrice(service: PublicAppointmentService): string | null;
110
+ export declare function formatAppointmentPrice(service: Pick<PublicAppointmentService, 'pricing' | 'priceAmount' | 'priceCurrency'>): string | null;
92
111
  export declare function buildAppointmentServicesView(input: Readonly<{
93
112
  services: unknown;
113
+ categoryId?: unknown;
94
114
  pathname: string | undefined;
95
115
  servicePathPrefix?: string | null;
96
116
  }>): AppointmentServicesView;
97
- export declare function AppointmentServicesNode({ sectionHeading, services, pathname, servicePathPrefix, className, }: AppointmentServicesNodeProps): React.ReactElement;
117
+ export declare function AppointmentServicesNode({ sectionHeading, categoryId, services, pathname, servicePathPrefix, blockId, className, }: AppointmentServicesNodeProps): React.ReactElement;
98
118
  export default AppointmentServicesNode;
@@ -1,7 +1,7 @@
1
1
  import type { AppointmentResourceId, AppointmentServiceId, Brand, CustomerPassId, FormId, PassId, SiteId } from "../../../../../core/src/index";
2
2
  import type { BlockApiConfig, EligibleAppointmentPackage } from "../api/types";
3
3
  import type { TimeSlot } from "../api/types";
4
- import type { BookingFormConfig, BookingFormData, BookingFormField, BookingPaymentStepResolution, BookingFormServicesSource, BookingFormService, BookingSelectedCollectionOptionKind, BookingSubmissionData } from "./booking-form.state";
4
+ import type { BookingFormConfig, BookingFormData, BookingFormField, BookingPaymentStepResolution, BookingFormServicesSource, BookingFormService, BookingFormServiceCategory, BookingSelectedCollectionOptionKind, BookingSubmissionData } from "./booking-form.state";
5
5
  import type { BookingValidationErrors } from "./booking-form.validationErrors";
6
6
  import { type BookingFieldValue } from "./booking-form.field-values";
7
7
  export type { BookingFieldValue } from "./booking-form.field-values";
@@ -416,6 +416,8 @@ export type AppointmentBookingOverrideInput = Readonly<{
416
416
  formId: FormId;
417
417
  form: BookingFormConfig;
418
418
  services: readonly BookingFormService[];
419
+ /** Ordered service categories (issue 1403); empty when the site has none. */
420
+ serviceCategories: readonly BookingFormServiceCategory[];
419
421
  initialServiceId?: AppointmentServiceId;
420
422
  initialResourceId?: AppointmentResourceId;
421
423
  requiresServiceSelection: boolean;
@@ -1,7 +1,7 @@
1
1
  import { type InteractiveIslandProps } from "../../../contracts/islands";
2
- import { type BookingFormService, type BookingFormConfig, type BookingFormServicesSource } from "./booking-form.state";
2
+ import { type BookingFormService, type BookingFormServiceCategory, type BookingFormConfig, type BookingFormServicesSource } from "./booking-form.state";
3
3
  import { type BookingFormRebookContext, type BookingFormSourceProps } from "./booking-runtime-sources";
4
- export type { BookingFormConfig, BookingFormService };
4
+ export type { BookingFormConfig, BookingFormService, BookingFormServiceCategory };
5
5
  export type { BookingFormRebookContext, BookingFormSourceProps };
6
6
  export type BookingFormDisplay = Readonly<{
7
7
  kind: "booking-form";
@@ -23,6 +23,11 @@ export type BookingFormHydration = Readonly<{
23
23
  rebookContext?: BookingFormRebookContext | null;
24
24
  form: BookingFormConfig | null;
25
25
  services: readonly BookingFormService[];
26
+ /**
27
+ * The site's ordered service categories (issue 1403). Optional so a page
28
+ * rendered before categories existed still hydrates, as a site without any.
29
+ */
30
+ serviceCategories?: readonly BookingFormServiceCategory[];
26
31
  spamProtectionEnabled?: boolean;
27
32
  }>;
28
33
  type BookingFormIslandMeta = Readonly<{
@@ -143,6 +148,16 @@ export declare const bookingFormBlockRuntime: Readonly<{
143
148
  agreement: import("../../../../../core/src/index").RichTextDoc;
144
149
  checkboxLabel: string;
145
150
  }>;
151
+ categoryId?: string | null;
152
+ }>[];
153
+ /**
154
+ * The site's ordered service categories (issue 1403). Optional so a page
155
+ * rendered before categories existed still hydrates, as a site without any.
156
+ */
157
+ serviceCategories?: readonly Readonly<{
158
+ id: string;
159
+ name: string;
160
+ description: string | null;
146
161
  }>[];
147
162
  spamProtectionEnabled?: boolean;
148
163
  }>;
@@ -302,6 +317,16 @@ export declare const bookingFormBlockRuntime: Readonly<{
302
317
  agreement: import("../../../../../core/src/index").RichTextDoc;
303
318
  checkboxLabel: string;
304
319
  }>;
320
+ categoryId?: string | null;
321
+ }>[];
322
+ /**
323
+ * The site's ordered service categories (issue 1403). Optional so a page
324
+ * rendered before categories existed still hydrates, as a site without any.
325
+ */
326
+ serviceCategories?: readonly Readonly<{
327
+ id: string;
328
+ name: string;
329
+ description: string | null;
305
330
  }>[];
306
331
  spamProtectionEnabled?: boolean;
307
332
  }>;
@@ -375,6 +400,16 @@ export declare const bookingFormBlockRuntime: Readonly<{
375
400
  agreement: import("../../../../../core/src/index").RichTextDoc;
376
401
  checkboxLabel: string;
377
402
  }>;
403
+ categoryId?: string | null;
404
+ }>[];
405
+ /**
406
+ * The site's ordered service categories (issue 1403). Optional so a page
407
+ * rendered before categories existed still hydrates, as a site without any.
408
+ */
409
+ serviceCategories?: readonly Readonly<{
410
+ id: string;
411
+ name: string;
412
+ description: string | null;
378
413
  }>[];
379
414
  spamProtectionEnabled?: boolean;
380
415
  }>;
@@ -460,6 +495,16 @@ export declare const bookingFormInteractiveIslandPropsCodec: Readonly<{
460
495
  agreement: import("../../../../../core/src/index").RichTextDoc;
461
496
  checkboxLabel: string;
462
497
  }>;
498
+ categoryId?: string | null;
499
+ }>[];
500
+ /**
501
+ * The site's ordered service categories (issue 1403). Optional so a page
502
+ * rendered before categories existed still hydrates, as a site without any.
503
+ */
504
+ serviceCategories?: readonly Readonly<{
505
+ id: string;
506
+ name: string;
507
+ description: string | null;
463
508
  }>[];
464
509
  spamProtectionEnabled?: boolean;
465
510
  }>;
@@ -542,6 +587,16 @@ export declare const bookingFormInteractiveIslandPropsCodec: Readonly<{
542
587
  agreement: import("../../../../../core/src/index").RichTextDoc;
543
588
  checkboxLabel: string;
544
589
  }>;
590
+ categoryId?: string | null;
591
+ }>[];
592
+ /**
593
+ * The site's ordered service categories (issue 1403). Optional so a page
594
+ * rendered before categories existed still hydrates, as a site without any.
595
+ */
596
+ serviceCategories?: readonly Readonly<{
597
+ id: string;
598
+ name: string;
599
+ description: string | null;
545
600
  }>[];
546
601
  spamProtectionEnabled?: boolean;
547
602
  }>;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Appointment-service categories in the booking block (issue 1403): the
3
+ * headings the service step groups its choices under.
4
+ */
5
+ import type { ServiceCategorySummary } from "../../../../../core/src/index";
6
+ import type { BookingFormService } from "./booking-form.state";
7
+ /**
8
+ * The services a booking block was given. Only the catalogue shape
9
+ * `{ services, categories }` carries categories; the other shapes read as a
10
+ * site without categories.
11
+ */
12
+ export type BookingFormServicesSource = readonly BookingFormService[] | Readonly<{
13
+ services?: readonly BookingFormService[];
14
+ categories?: readonly BookingFormServiceCategory[];
15
+ }> | Readonly<Record<string, BookingFormService>>;
16
+ /** A category heading in the service step: the shared category summary. */
17
+ export type BookingFormServiceCategory = ServiceCategorySummary;
18
+ /**
19
+ * The ordered service categories carried by a catalogue-shaped services
20
+ * source (`{ services, categories }`). Every other shape has none, which
21
+ * reads as a site without categories. Order is preserved: the database owns
22
+ * it.
23
+ */
24
+ export declare function normalizeBookingServiceCategories(services: unknown): readonly BookingFormServiceCategory[];
25
+ /**
26
+ * The ordered service categories a headless booking override was given in
27
+ * its loader data (`data.services`).
28
+ */
29
+ export declare function readOverrideServiceCategories(data: unknown): readonly BookingFormServiceCategory[];
@@ -0,0 +1,13 @@
1
+ import React from "react";
2
+ import type { HeadlessBookingFlow } from "../hooks/useHeadlessBookingFlow";
3
+ export declare function optionCardClassName(isSelected: boolean): string;
4
+ export declare function SelectedCheck(): React.ReactElement;
5
+ /**
6
+ * The service buttons. A site with no categories keeps its single grid; a
7
+ * categorised site gets a heading per category, then "Other", above the same
8
+ * grid (issue 1403). Empty categories are skipped, and there are no intros
9
+ * here, to keep the step compact.
10
+ */
11
+ export declare function DefaultServiceChoices({ booking, }: Readonly<{
12
+ booking: HeadlessBookingFlow;
13
+ }>): React.ReactElement;
@@ -3,6 +3,7 @@ import { type BlockBookingConsent } from "../../blocks/shared/bookingConsent";
3
3
  import type { AppointmentBookingStatusResponse } from "../api/types";
4
4
  import type { BookingFormDataReservedKey } from "./booking-form.reserved-fields";
5
5
  import type { BookingFormField } from "./booking-form.fields";
6
+ export type { BookingFormServiceCategory, BookingFormServicesSource, } from "./booking-form.service-categories";
6
7
  export type { BookingFormField, BookingFormFieldOption, StandardBookingFormField, } from "./booking-form.fields";
7
8
  export { APPOINTMENT_BOOKING_BLOCK_ID, BOOKING_FORM_DATA_RESERVED_KEYS, BOOKING_FORM_DATA_RESERVED_KEY_VALUES, collectBookingReservedFieldCollisions, findBookingFormDataReservedFieldCollisions, formatBookingReservedFieldCollisionMessages, formatBookingFormDataReservedFieldMessage, isBookingFormDataReservedKey, type BookingFormDataReservedKey, type BookingReservedFieldCollision, } from "./booking-form.reserved-fields";
8
9
  export type BookingFormSettings = Readonly<{
@@ -65,11 +66,10 @@ export type BookingFormService = Readonly<{
65
66
  paymentTerms?: BlockBookingPaymentTerms;
66
67
  paymentTermsAvailability?: BlockBookingPaymentTermsAvailability;
67
68
  consent?: BlockBookingConsent;
69
+ /** The service's category (issue 1403); null or absent is "Other". */
70
+ categoryId?: string | null;
68
71
  }>;
69
72
  export { projectSelectedAppointmentConsentIntoForm, resolveSelectedAppointmentConsent, type SelectedAppointmentConsent, } from "./booking-form.consent";
70
- export type BookingFormServicesSource = readonly BookingFormService[] | Readonly<{
71
- services?: readonly BookingFormService[];
72
- }> | Readonly<Record<string, BookingFormService>>;
73
73
  export type BookingSelectedCollectionOptionKind = "upfront" | "deferred_manual" | "instalment_plan" | "flexible_balance";
74
74
  type BookingCustomFieldData<TCustomFieldId extends string> = Readonly<{
75
75
  [K in TCustomFieldId as K extends BookingFormDataReservedKey ? never : K]?: unknown;
@@ -1,6 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import type { PublicEvent } from "../../blocks/events/shared/types";
3
- import type { StandardBookingFormField, BookingFormService, BookingFormServicesSource, BookingFormSettings, BookingFormSourceRecord } from "./booking-form.state";
3
+ import type { StandardBookingFormField, BookingFormService, BookingFormServiceCategory, BookingFormServicesSource, BookingFormSettings, BookingFormSourceRecord } from "./booking-form.state";
4
4
  import type { EventRegistrationSourceProps } from "./event-registration.interactive";
5
5
  export declare const APPOINTMENT_BOOKING_RUNTIME_FORM_ID = "booking-form";
6
6
  export type BookingFormRebookContext = Readonly<{
@@ -97,12 +97,18 @@ export type AppointmentBookingServiceSourceInput = Readonly<{
97
97
  paymentTerms?: BookingFormService["paymentTerms"];
98
98
  paymentTermsAvailability?: BookingFormService["paymentTermsAvailability"];
99
99
  consent?: BookingFormService["consent"];
100
+ categoryId?: string | null;
100
101
  }>;
101
102
  export type AppointmentBookingSourceProps = BookingFormSourceProps & Readonly<{
102
103
  siteId: string;
103
104
  formId: string;
104
105
  form: BookingFormSourceRecord;
105
106
  services: BookingFormService[];
107
+ /**
108
+ * The site's ordered service categories (issue 1403). The booking island
109
+ * receives them beside the services as `{ services, categories }`.
110
+ */
111
+ serviceCategories: readonly BookingFormServiceCategory[];
106
112
  serviceId: string | null;
107
113
  resourceId: string | null;
108
114
  initialData: Readonly<Record<string, unknown>> | null;
@@ -137,6 +143,12 @@ export declare function buildAppointmentBookingSourceProps(input: Readonly<{
137
143
  previewToken?: string | null;
138
144
  form: AppointmentBookingFormSourceInput;
139
145
  services: readonly AppointmentBookingServiceSourceInput[];
146
+ /**
147
+ * Optional because the frontend and dashboard deploy separately: a
148
+ * services response from before categories (issue 1403) has none, and
149
+ * that must render the flat list rather than fail.
150
+ */
151
+ serviceCategories?: readonly BookingFormServiceCategory[];
140
152
  serviceId: string | null;
141
153
  resourceId: string | null;
142
154
  initialData: Readonly<Record<string, unknown>> | null;
@@ -4,8 +4,8 @@ import type { PublicEventsRequest } from '../../api/types/events';
4
4
  export declare const eventRecoveryRequestSchema: z.ZodObject<{
5
5
  limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
6
6
  eventSurface: z.ZodOptional<z.ZodEnum<{
7
- custom: "custom";
8
7
  all: "all";
8
+ custom: "custom";
9
9
  regularClassSchedule: "regularClassSchedule";
10
10
  specialDatedEvents: "specialDatedEvents";
11
11
  }>>;
@@ -36,6 +36,7 @@ export declare const eventRecoveryRequestSchema: z.ZodObject<{
36
36
  seriesSlug: z.ZodOptional<z.ZodString>;
37
37
  includeOccurrenceId: z.ZodOptional<z.ZodString>;
38
38
  readIntent: z.ZodOptional<z.ZodString>;
39
+ detailAdmission: z.ZodOptional<z.ZodString>;
39
40
  readProfile: z.ZodOptional<z.ZodString>;
40
41
  }, z.core.$strip>;
41
42
  export type EventRecoveryRequest = Omit<PublicEventsRequest, 'siteId'>;