@riverbankcms/sdk 0.132.0 → 0.134.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 (159) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/{PreviewEditorSidebar-DKQ5eFK9.mjs → PreviewEditorSidebar-DfRhJPFQ.mjs} +3 -3
  3. package/dist/{PreviewEditorUI-CNTcOjCC.mjs → PreviewEditorUI-Dppxcr_g.mjs} +2 -2
  4. package/dist/{SdkPreviewModeRuntime-DJu3qu33.mjs → SdkPreviewModeRuntime-8CyGCXir.mjs} +46 -15
  5. package/dist/{SiteChromeCustomizeContext-2TzT3vbj.mjs → SiteChromeCustomizeContext-DVMTMvqA.mjs} +497 -169
  6. package/dist/_dts/ai/src/contracts/proposals.d.ts +384 -384
  7. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +219 -219
  8. package/dist/_dts/api/src/accountApi.d.ts +5 -5
  9. package/dist/_dts/api/src/appointmentEndpointDefinitions.d.ts +1 -1
  10. package/dist/_dts/api/src/bookingOperations.d.ts +2 -14
  11. package/dist/_dts/api/src/bookings.d.ts +2 -2
  12. package/dist/_dts/api/src/contentRuntime.d.ts +1 -1
  13. package/dist/_dts/api/src/courseEndpointDefinitions.d.ts +2 -2
  14. package/dist/_dts/api/src/endpoints.d.ts +3 -3
  15. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
  16. package/dist/_dts/api/src/navigation/contracts.d.ts +9 -6
  17. package/dist/_dts/api/src/navigation/linkResolver.d.ts +6 -2
  18. package/dist/_dts/api/src/navigation/types.d.ts +23 -6
  19. package/dist/_dts/api/src/navigation.d.ts +1 -1
  20. package/dist/_dts/api/src/publicBookingService.d.ts +15 -0
  21. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +3 -1
  22. package/dist/_dts/api/src/publicExperience/wholeSeriesEndpoints.d.ts +2 -0
  23. package/dist/_dts/api/src/sdk-event-upsert.d.ts +1 -1
  24. package/dist/_dts/api/src/sdkThemeWire.d.ts +50 -50
  25. package/dist/_dts/api/src/siteBanner.d.ts +4 -2
  26. package/dist/_dts/api/src/types.d.ts +1 -1
  27. package/dist/_dts/api/src/webhooks.d.ts +12 -12
  28. package/dist/_dts/blocks/src/client.d.ts +1 -1
  29. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +28 -72
  30. package/dist/_dts/blocks/src/index.d.ts +3 -2
  31. package/dist/_dts/blocks/src/primitives/content/components/RichText.d.ts +2 -2
  32. package/dist/_dts/blocks/src/primitives/content/primitives.d.ts +1 -0
  33. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +36 -14
  34. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +3 -0
  35. package/dist/_dts/blocks/src/system/blocks/events/whole-series/schemas.d.ts +3 -3
  36. package/dist/_dts/blocks/src/system/blocks/events/whole-series/types.d.ts +3 -0
  37. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +4 -4
  38. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +148 -148
  39. package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +2 -1
  40. package/dist/_dts/blocks/src/system/blocks/shared/bookingConsent.d.ts +36 -0
  41. package/dist/_dts/blocks/src/system/manifest/hydrateLinks.d.ts +9 -2
  42. package/dist/_dts/blocks/src/system/manifest/resolveBlockData.d.ts +8 -0
  43. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +79 -79
  44. package/dist/_dts/blocks/src/system/runtime/api/types/appointments.d.ts +2 -11
  45. package/dist/_dts/blocks/src/system/runtime/api/types/courses.d.ts +2 -0
  46. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +1 -0
  47. package/dist/_dts/blocks/src/system/runtime/components/multi-step/DynamicFormFields.d.ts +3 -19
  48. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +1 -1
  49. package/dist/_dts/blocks/src/system/runtime/hooks/useSelectedAppointmentConsentForm.d.ts +2 -0
  50. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.consent.d.ts +10 -0
  51. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.field-values.d.ts +4 -0
  52. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.fields.d.ts +21 -0
  53. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +2 -1
  54. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +38 -144
  55. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +5 -19
  56. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +3 -2
  57. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/AttendeeDetailsStep.d.ts +2 -0
  58. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationSurface.d.ts +18 -1
  59. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +4 -4
  60. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/validation.d.ts +2 -1
  61. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/components.d.ts +2 -1
  62. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/whole-series-registration.headless.contract.d.ts +2 -0
  63. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +34 -12
  64. package/dist/_dts/blocks/src/system/runtime/shared/components/BookingConsentAgreement.d.ts +7 -0
  65. package/dist/_dts/blocks/src/system/runtime/shared/types.d.ts +1 -0
  66. package/dist/_dts/blocks/src/system/types/link.d.ts +7 -1
  67. package/dist/_dts/content-model/src/content-types/schema.d.ts +4 -4
  68. package/dist/_dts/core/src/booking-consent.d.ts +8 -0
  69. package/dist/_dts/core/src/index.d.ts +1 -0
  70. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +9 -3
  71. package/dist/_dts/db/src/schemas/forms.d.ts +21 -21
  72. package/dist/_dts/db/src/types/jsonb.d.ts +1 -1
  73. package/dist/_dts/editor/src/primitives/rich-text/RichTextEditorSurface.d.ts +2 -1
  74. package/dist/_dts/editor/src/primitives/rich-text/config.d.ts +2 -1
  75. package/dist/_dts/editor/src/primitives/rich-text/toolbar/linkPopoverUtils.d.ts +3 -2
  76. package/dist/_dts/editor/src/primitives/rich-text/useRichTextEditor.d.ts +3 -4
  77. package/dist/_dts/media-core/src/usageScanner.d.ts +1 -1
  78. package/dist/_dts/sdk/src/bookings/types.d.ts +7 -89
  79. package/dist/_dts/sdk/src/config/validation.d.ts +30 -30
  80. package/dist/_dts/sdk/src/contracts/content.d.ts +10 -36
  81. package/dist/_dts/sdk/src/contracts/rendering.d.ts +1 -1
  82. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +9 -9
  83. package/dist/_dts/sdk/src/public-api/contracts.d.ts +6 -19
  84. package/dist/_dts/sdk/src/version.d.ts +1 -1
  85. package/dist/_dts/theme-core/src/accordions/types.d.ts +2 -2
  86. package/dist/_dts/theme-core/src/buttons/types.d.ts +12 -12
  87. package/dist/_dts/theme-core/src/cards/types.d.ts +5 -5
  88. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +72 -72
  89. package/dist/_dts/theme-core/src/navigation/types.d.ts +4 -4
  90. package/dist/_dts/theme-core/src/palette/colors.d.ts +1 -1
  91. package/dist/_dts/theme-core/src/palette/curated/types.d.ts +2 -2
  92. package/dist/_dts/theme-core/src/schema.d.ts +82 -82
  93. package/dist/_dts/theme-core/src/site-styles/cardRoleVocabulary.d.ts +1 -1
  94. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +2 -2
  95. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -4
  96. package/dist/_dts/theme-core/src/site-styles/logoBranding.d.ts +4 -4
  97. package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +1 -1
  98. package/dist/_dts/ui/src/badge.d.ts +1 -1
  99. package/dist/_dts/ui/src/button.d.ts +1 -1
  100. package/dist/_dts/ui/src/callout.d.ts +1 -1
  101. package/dist/_dts/ui/src/card.d.ts +1 -1
  102. package/dist/client/{StepIndicator-CGixP_LW.mjs → BookingConsentAgreement-BxgpGEFD.mjs} +26 -4
  103. package/dist/client/{DiscountCodeDisclosure-DO7llLxm.mjs → DiscountCodeDisclosure-CfuPOHD0.mjs} +1 -1
  104. package/dist/client/{EventCombined.client-xID7zN__.mjs → EventCombined.client-DB8Qfzi-.mjs} +3 -3
  105. package/dist/client/{EventListing.client-CriBslp0.mjs → EventListing.client-DD4X8hp4.mjs} +2 -2
  106. package/dist/client/{LeafletStaticMap-DYmHnM8g.mjs → LeafletStaticMap-QhgIBQbv.mjs} +1 -1
  107. package/dist/client/{WholeSeriesRegistrationWizard-BEjzSiOA.mjs → WholeSeriesRegistrationWizard-DwtC7bCs.mjs} +72 -22
  108. package/dist/client/{accordion-CgFbnnnQ.mjs → accordion-DFXpLvwg.mjs} +1 -1
  109. package/dist/client/{bookingForm-dUyGpbxc.mjs → bookingForm-sI05d3lk.mjs} +73 -47
  110. package/dist/client/bookings.mjs +989 -140
  111. package/dist/client/{carousel-BvBwkUzx.mjs → carousel-wjyWTZCh.mjs} +1 -1
  112. package/dist/client/{cart-DiZENT2E.mjs → cart-DCwdpA4i.mjs} +3 -3
  113. package/dist/client/{checkout-Dq13KIgR.mjs → checkout-DTDW3l0R.mjs} +3 -3
  114. package/dist/client/checkoutUrls-DQYC_Br-.mjs +187 -0
  115. package/dist/client/client.mjs +556 -237
  116. package/dist/client/{context-B83PiNzm.mjs → context-TSK1CGx8.mjs} +1 -14
  117. package/dist/client/{courseRegistration-CKC5NmyH.mjs → courseRegistration-A-Tg7qw_.mjs} +3 -3
  118. package/dist/client/{eventCalendar-BF0Jatfw.mjs → eventCalendar-B0Zg-i_w.mjs} +5 -5
  119. package/dist/client/{eventCombined-BuoCF8je.mjs → eventCombined-B8Y2wizd.mjs} +3 -3
  120. package/dist/client/{eventDetails-CKwh0S9s.mjs → eventDetails-DPDOwURJ.mjs} +3 -3
  121. package/dist/client/{eventListing-eUxaWFaB.mjs → eventListing-CjBcmSLn.mjs} +3 -3
  122. package/dist/client/{eventRegistration-CfkNOkPb.mjs → eventRegistration-CK30HsAq.mjs} +111 -64
  123. package/dist/client/{form-C17H1c_H.mjs → form-CUXfsABE.mjs} +2 -2
  124. package/dist/client/{headerSection-DEwUmrtt.mjs → headerSection-N-mN3rjr.mjs} +2 -2
  125. package/dist/client/hooks.mjs +106 -3
  126. package/dist/client/{locationMap-Pf2QwuvW.mjs → locationMap-oiIDQMBt.mjs} +2 -2
  127. package/dist/client/{newsletterForm-BWQAH5Sv.mjs → newsletterForm-CkQ2tTrM.mjs} +2 -2
  128. package/dist/client/{pricing-CVdvbopJ.mjs → pricing-Caa0QWzh.mjs} +1 -1
  129. package/dist/client/{productDetail-BZi1Fa_G.mjs → productDetail-CnidyrsN.mjs} +3 -3
  130. package/dist/client/{productList-qq-55DNk.mjs → productList-CttYcS_S.mjs} +3 -3
  131. package/dist/client/{propsDecoder-BxmqPKdP.mjs → propsDecoder-CeUMxI9a.mjs} +211 -100
  132. package/dist/client/rendering/client.mjs +428 -151
  133. package/dist/client/rendering/islands.mjs +18 -18
  134. package/dist/client/rendering.mjs +643 -324
  135. package/dist/client/{scrollToBlock-B3CcKdtG.mjs → scrollToBlock-lPr1oqxB.mjs} +1 -1
  136. package/dist/client/{shop-DNWJPut5.mjs → shop-DXQtMo2O.mjs} +6 -6
  137. package/dist/client/{shop-commerce-BhvQCosS.mjs → shop-commerce-quDL411J.mjs} +7 -164
  138. package/dist/client/{shop-commerce-store-B04sCNnW.mjs → shop-commerce-store-Dnu-8Iub.mjs} +1 -1
  139. package/dist/client/{shopShared-DNNgZlmW.mjs → shopShared-BWPUURvG.mjs} +3 -3
  140. package/dist/client/{useEventFilters-CUmhE24_.mjs → useEventFilters-DRhWp2_5.mjs} +3 -3
  141. package/dist/client/{usePolling-M5jG675x.mjs → usePolling-UN4WKnaM.mjs} +2 -2
  142. package/dist/preview-next/client/runtime.mjs +3 -3
  143. package/dist/{sdk-runtime-BEXb1wqo.mjs → sdk-runtime-Ca5RD78X.mjs} +1 -1
  144. package/dist/{separator-DGMuip1D.mjs → separator-CMhj6BTi.mjs} +1 -1
  145. package/dist/server/components.mjs +117 -37
  146. package/dist/server/config-validation.mjs +106 -3
  147. package/dist/server/config.mjs +106 -3
  148. package/dist/server/data.mjs +106 -3
  149. package/dist/server/index.mjs +1 -1
  150. package/dist/server/next.mjs +186 -106
  151. package/dist/server/page-converter.mjs +105 -2
  152. package/dist/server/prebuild.mjs +1 -1
  153. package/dist/server/rendering/server.mjs +119 -37
  154. package/dist/server/rendering.mjs +117 -37
  155. package/dist/server/routing.mjs +132 -73
  156. package/dist/server/server.mjs +107 -4
  157. package/dist/server/theme-bridge.mjs +4 -4
  158. package/package.json +2 -2
  159. package/dist/client/checkoutUrls-Ct8Mxna3.mjs +0 -26
@@ -14,6 +14,7 @@ export interface WholeSeriesRegistrationRequest {
14
14
  name: string;
15
15
  phone?: string;
16
16
  formData?: Record<string, unknown>;
17
+ consentAccepted?: boolean;
17
18
  altchaSolution?: string | null;
18
19
  paymentMethod?: Exclude<CoursePaymentMethod, "stripe">;
19
20
  customerMembershipId?: string;
@@ -73,6 +74,7 @@ export interface WholeSeriesCheckoutRequest {
73
74
  name: string;
74
75
  phone?: string;
75
76
  formData?: Record<string, unknown>;
77
+ consentAccepted?: boolean;
76
78
  altchaSolution?: string | null;
77
79
  /** Optional booking discount code (applies only to Stripe/card flows) */
78
80
  discountCode?: string;
@@ -116,6 +116,7 @@ export interface EventRegisterRequest {
116
116
  name: string;
117
117
  phone?: string;
118
118
  notes?: string;
119
+ consentAccepted?: boolean;
119
120
  altchaSolution?: string | null;
120
121
  paymentMethod?: PaymentMethod;
121
122
  customerPassId?: string;
@@ -1,29 +1,13 @@
1
1
  import React from 'react';
2
+ import type { BookingFormField, BookingFormFieldOption } from '../../nodes/booking-form.state';
2
3
  /**
3
4
  * Form field option
4
5
  */
5
- export interface FormFieldOption {
6
- value: string;
7
- label: string;
8
- }
6
+ export type FormFieldOption = BookingFormFieldOption;
9
7
  /**
10
8
  * Form field definition (matches packages/db/src/schemas/forms.ts)
11
9
  */
12
- export interface FormField {
13
- id: string;
14
- label: string;
15
- type: 'text' | 'email' | 'textarea' | 'select' | 'radio' | 'checkbox' | 'booking_requirement_consent' | 'tel' | 'url' | 'number' | 'date' | 'time';
16
- required?: boolean;
17
- placeholder?: string;
18
- helpText?: string;
19
- options?: readonly FormFieldOption[];
20
- multiple?: boolean;
21
- minLength?: number;
22
- maxLength?: number;
23
- pattern?: string;
24
- min?: number;
25
- max?: number;
26
- }
10
+ export type FormField = BookingFormField;
27
11
  /**
28
12
  * DynamicFormFields Component Props
29
13
  */
@@ -1196,7 +1196,7 @@ export declare const runtimeBackedBlockModes: {
1196
1196
  readonly shop: "passes-memberships";
1197
1197
  };
1198
1198
  export type RuntimeBackedBlockMode<TKind extends RuntimeBackedBlockKind> = typeof runtimeBackedBlockModes[TKind];
1199
- export declare const runtimeBackedBlockKinds: readonly ("form" | "cart" | "event-registration" | "event-listing" | "event-calendar" | "shop" | "product-list" | "product-detail" | "checkout" | "gifting" | "course-registration" | "newsletter-form")[];
1199
+ export declare const runtimeBackedBlockKinds: readonly ("form" | "event-registration" | "event-listing" | "event-calendar" | "shop" | "product-list" | "product-detail" | "cart" | "checkout" | "gifting" | "course-registration" | "newsletter-form")[];
1200
1200
  export declare const runtimeBackedBlockServerRegistry: Readonly<{
1201
1201
  readonly form: React.ElementType<any, keyof React.JSX.IntrinsicElements>;
1202
1202
  readonly 'event-listing': React.ElementType<any, keyof React.JSX.IntrinsicElements>;
@@ -0,0 +1,2 @@
1
+ import type { BookingFormConfig, BookingFormService } from "../nodes/booking-form.state";
2
+ export declare function useSelectedAppointmentConsentForm(form: BookingFormConfig | null, selectedService: BookingFormService | null): BookingFormConfig | null;
@@ -0,0 +1,10 @@
1
+ import { type BookingRequirementConsentField } from "../../blocks/shared/bookingConsent";
2
+ import type { BookingFormConfig, BookingFormService } from "./booking-form.state";
3
+ export type SelectedAppointmentConsent = Readonly<{
4
+ kind: "not-applicable";
5
+ }> | Readonly<{
6
+ kind: "required-for-selected-service";
7
+ field: BookingRequirementConsentField;
8
+ }>;
9
+ export declare function resolveSelectedAppointmentConsent(service: BookingFormService | null | undefined): SelectedAppointmentConsent;
10
+ export declare function projectSelectedAppointmentConsentIntoForm(form: BookingFormConfig | null, selectedConsent: SelectedAppointmentConsent): BookingFormConfig | null;
@@ -0,0 +1,4 @@
1
+ import type { BookingFormData } from "./booking-form.state";
2
+ export type BookingFieldValue = string | number | boolean | readonly string[] | null;
3
+ export declare function collectInitialBookingFieldValues(initialData: Partial<BookingFormData>): Record<string, BookingFieldValue>;
4
+ export declare function omitBookingConsentEntries<T>(record: Readonly<Record<string, T>>): Record<string, T>;
@@ -0,0 +1,21 @@
1
+ import type { BookingRequirementConsentField } from '../../blocks/shared/bookingConsent';
2
+ export type BookingFormFieldOption = Readonly<{
3
+ value: string;
4
+ label: string;
5
+ }>;
6
+ export type StandardBookingFormField = Readonly<{
7
+ id: string;
8
+ label: string;
9
+ type: 'text' | 'email' | 'textarea' | 'select' | 'radio' | 'checkbox' | 'tel' | 'url' | 'number' | 'date' | 'time';
10
+ required?: boolean;
11
+ placeholder?: string;
12
+ helpText?: string;
13
+ options?: readonly BookingFormFieldOption[];
14
+ multiple?: boolean;
15
+ minLength?: number;
16
+ maxLength?: number;
17
+ pattern?: string;
18
+ min?: number;
19
+ max?: number;
20
+ }>;
21
+ export type BookingFormField = StandardBookingFormField | BookingRequirementConsentField;
@@ -3,6 +3,8 @@ import type { BlockApiConfig, EligibleAppointmentPackage } from "../api/types";
3
3
  import type { TimeSlot } from "../api/types";
4
4
  import type { BookingFormConfig, BookingFormData, BookingFormField, BookingPaymentStepResolution, BookingFormServicesSource, BookingFormService, BookingSelectedCollectionOptionKind, BookingSubmissionData } from "./booking-form.state";
5
5
  import type { BookingValidationErrors } from "./booking-form.validationErrors";
6
+ import { type BookingFieldValue } from "./booking-form.field-values";
7
+ export type { BookingFieldValue } from "./booking-form.field-values";
6
8
  export type LoadState<T> = Readonly<{
7
9
  tag: "idle";
8
10
  }> | Readonly<{
@@ -28,7 +30,6 @@ export type BookingFlowStep = Readonly<{
28
30
  }>;
29
31
  export type BookingFieldId = Brand<string, "BookingFieldId">;
30
32
  export declare const unsafeAsBookingFieldId: (id: string) => BookingFieldId;
31
- export type BookingFieldValue = string | number | boolean | readonly string[] | null;
32
33
  export type BookingSlotView = Readonly<{
33
34
  key: string;
34
35
  startAt: string;
@@ -58,24 +58,7 @@ export declare const bookingFormBlockRuntime: Readonly<{
58
58
  name: string;
59
59
  schemaJson?: Readonly<{
60
60
  version?: string;
61
- fields?: readonly Readonly<{
62
- id: string;
63
- label: string;
64
- type: "text" | "email" | "textarea" | "select" | "radio" | "checkbox" | "booking_requirement_consent" | "tel" | "url" | "number" | "date" | "time";
65
- required?: boolean;
66
- placeholder?: string;
67
- helpText?: string;
68
- options?: readonly Readonly<{
69
- value: string;
70
- label: string;
71
- }>[];
72
- multiple?: boolean;
73
- minLength?: number;
74
- maxLength?: number;
75
- pattern?: string;
76
- min?: number;
77
- max?: number;
78
- }>[];
61
+ fields?: readonly import("./booking-form.fields").BookingFormField[];
79
62
  }>;
80
63
  settingsJson?: Readonly<{
81
64
  type: "booking";
@@ -126,24 +109,7 @@ export declare const bookingFormBlockRuntime: Readonly<{
126
109
  }>;
127
110
  schema?: Readonly<{
128
111
  version?: string;
129
- fields: readonly Readonly<{
130
- id: string;
131
- label: string;
132
- type: "text" | "email" | "textarea" | "select" | "radio" | "checkbox" | "booking_requirement_consent" | "tel" | "url" | "number" | "date" | "time";
133
- required?: boolean;
134
- placeholder?: string;
135
- helpText?: string;
136
- options?: readonly Readonly<{
137
- value: string;
138
- label: string;
139
- }>[];
140
- multiple?: boolean;
141
- minLength?: number;
142
- maxLength?: number;
143
- pattern?: string;
144
- min?: number;
145
- max?: number;
146
- }>[];
112
+ fields: readonly import("./booking-form.fields").BookingFormField[];
147
113
  }>;
148
114
  }> | null;
149
115
  services: readonly Readonly<{
@@ -171,6 +137,12 @@ export declare const bookingFormBlockRuntime: Readonly<{
171
137
  paymentTerms: import("../../blocks/shared/bookingPaymentTerms").BlockBookingPaymentTerms;
172
138
  reason: "online_payment_configured_before_launch";
173
139
  }>;
140
+ consent?: Readonly<{
141
+ requirementId: string;
142
+ title: string;
143
+ agreement: import("../../../../../core/src/index").RichTextDoc;
144
+ checkboxLabel: string;
145
+ }>;
174
146
  }>[];
175
147
  spamProtectionEnabled?: boolean;
176
148
  }>;
@@ -201,24 +173,7 @@ export declare const bookingFormBlockRuntime: Readonly<{
201
173
  name: string;
202
174
  schemaJson?: Readonly<{
203
175
  version?: string;
204
- fields?: readonly Readonly<{
205
- id: string;
206
- label: string;
207
- type: "text" | "email" | "textarea" | "select" | "radio" | "checkbox" | "booking_requirement_consent" | "tel" | "url" | "number" | "date" | "time";
208
- required?: boolean;
209
- placeholder?: string;
210
- helpText?: string;
211
- options?: readonly Readonly<{
212
- value: string;
213
- label: string;
214
- }>[];
215
- multiple?: boolean;
216
- minLength?: number;
217
- maxLength?: number;
218
- pattern?: string;
219
- min?: number;
220
- max?: number;
221
- }>[];
176
+ fields?: readonly import("./booking-form.fields").BookingFormField[];
222
177
  }>;
223
178
  settingsJson?: Readonly<{
224
179
  type: "booking";
@@ -259,24 +214,7 @@ export declare const bookingFormBlockRuntime: Readonly<{
259
214
  name: string;
260
215
  schemaJson?: Readonly<{
261
216
  version?: string;
262
- fields?: readonly Readonly<{
263
- id: string;
264
- label: string;
265
- type: "text" | "email" | "textarea" | "select" | "radio" | "checkbox" | "booking_requirement_consent" | "tel" | "url" | "number" | "date" | "time";
266
- required?: boolean;
267
- placeholder?: string;
268
- helpText?: string;
269
- options?: readonly Readonly<{
270
- value: string;
271
- label: string;
272
- }>[];
273
- multiple?: boolean;
274
- minLength?: number;
275
- maxLength?: number;
276
- pattern?: string;
277
- min?: number;
278
- max?: number;
279
- }>[];
217
+ fields?: readonly import("./booking-form.fields").BookingFormField[];
280
218
  }>;
281
219
  settingsJson?: Readonly<{
282
220
  type: "booking";
@@ -330,24 +268,7 @@ export declare const bookingFormBlockRuntime: Readonly<{
330
268
  }>;
331
269
  schema?: Readonly<{
332
270
  version?: string;
333
- fields: readonly Readonly<{
334
- id: string;
335
- label: string;
336
- type: "text" | "email" | "textarea" | "select" | "radio" | "checkbox" | "booking_requirement_consent" | "tel" | "url" | "number" | "date" | "time";
337
- required?: boolean;
338
- placeholder?: string;
339
- helpText?: string;
340
- options?: readonly Readonly<{
341
- value: string;
342
- label: string;
343
- }>[];
344
- multiple?: boolean;
345
- minLength?: number;
346
- maxLength?: number;
347
- pattern?: string;
348
- min?: number;
349
- max?: number;
350
- }>[];
271
+ fields: readonly import("./booking-form.fields").BookingFormField[];
351
272
  }>;
352
273
  }> | null;
353
274
  services: readonly Readonly<{
@@ -375,6 +296,12 @@ export declare const bookingFormBlockRuntime: Readonly<{
375
296
  paymentTerms: import("../../blocks/shared/bookingPaymentTerms").BlockBookingPaymentTerms;
376
297
  reason: "online_payment_configured_before_launch";
377
298
  }>;
299
+ consent?: Readonly<{
300
+ requirementId: string;
301
+ title: string;
302
+ agreement: import("../../../../../core/src/index").RichTextDoc;
303
+ checkboxLabel: string;
304
+ }>;
378
305
  }>[];
379
306
  spamProtectionEnabled?: boolean;
380
307
  }>;
@@ -414,24 +341,7 @@ export declare const bookingFormBlockRuntime: Readonly<{
414
341
  }>;
415
342
  schema?: Readonly<{
416
343
  version?: string;
417
- fields: readonly Readonly<{
418
- id: string;
419
- label: string;
420
- type: "text" | "email" | "textarea" | "select" | "radio" | "checkbox" | "booking_requirement_consent" | "tel" | "url" | "number" | "date" | "time";
421
- required?: boolean;
422
- placeholder?: string;
423
- helpText?: string;
424
- options?: readonly Readonly<{
425
- value: string;
426
- label: string;
427
- }>[];
428
- multiple?: boolean;
429
- minLength?: number;
430
- maxLength?: number;
431
- pattern?: string;
432
- min?: number;
433
- max?: number;
434
- }>[];
344
+ fields: readonly import("./booking-form.fields").BookingFormField[];
435
345
  }>;
436
346
  }> | null;
437
347
  services: readonly Readonly<{
@@ -459,6 +369,12 @@ export declare const bookingFormBlockRuntime: Readonly<{
459
369
  paymentTerms: import("../../blocks/shared/bookingPaymentTerms").BlockBookingPaymentTerms;
460
370
  reason: "online_payment_configured_before_launch";
461
371
  }>;
372
+ consent?: Readonly<{
373
+ requirementId: string;
374
+ title: string;
375
+ agreement: import("../../../../../core/src/index").RichTextDoc;
376
+ checkboxLabel: string;
377
+ }>;
462
378
  }>[];
463
379
  spamProtectionEnabled?: boolean;
464
380
  }>;
@@ -510,24 +426,7 @@ export declare const bookingFormInteractiveIslandPropsCodec: Readonly<{
510
426
  }>;
511
427
  schema?: Readonly<{
512
428
  version?: string;
513
- fields: readonly Readonly<{
514
- id: string;
515
- label: string;
516
- type: "text" | "email" | "textarea" | "select" | "radio" | "checkbox" | "booking_requirement_consent" | "tel" | "url" | "number" | "date" | "time";
517
- required?: boolean;
518
- placeholder?: string;
519
- helpText?: string;
520
- options?: readonly Readonly<{
521
- value: string;
522
- label: string;
523
- }>[];
524
- multiple?: boolean;
525
- minLength?: number;
526
- maxLength?: number;
527
- pattern?: string;
528
- min?: number;
529
- max?: number;
530
- }>[];
429
+ fields: readonly import("./booking-form.fields").BookingFormField[];
531
430
  }>;
532
431
  }> | null;
533
432
  services: readonly Readonly<{
@@ -555,6 +454,12 @@ export declare const bookingFormInteractiveIslandPropsCodec: Readonly<{
555
454
  paymentTerms: import("../../blocks/shared/bookingPaymentTerms").BlockBookingPaymentTerms;
556
455
  reason: "online_payment_configured_before_launch";
557
456
  }>;
457
+ consent?: Readonly<{
458
+ requirementId: string;
459
+ title: string;
460
+ agreement: import("../../../../../core/src/index").RichTextDoc;
461
+ checkboxLabel: string;
462
+ }>;
558
463
  }>[];
559
464
  spamProtectionEnabled?: boolean;
560
465
  }>;
@@ -603,24 +508,7 @@ export declare const bookingFormInteractiveIslandPropsCodec: Readonly<{
603
508
  }>;
604
509
  schema?: Readonly<{
605
510
  version?: string;
606
- fields: readonly Readonly<{
607
- id: string;
608
- label: string;
609
- type: "text" | "email" | "textarea" | "select" | "radio" | "checkbox" | "booking_requirement_consent" | "tel" | "url" | "number" | "date" | "time";
610
- required?: boolean;
611
- placeholder?: string;
612
- helpText?: string;
613
- options?: readonly Readonly<{
614
- value: string;
615
- label: string;
616
- }>[];
617
- multiple?: boolean;
618
- minLength?: number;
619
- maxLength?: number;
620
- pattern?: string;
621
- min?: number;
622
- max?: number;
623
- }>[];
511
+ fields: readonly import("./booking-form.fields").BookingFormField[];
624
512
  }>;
625
513
  }> | null;
626
514
  services: readonly Readonly<{
@@ -648,6 +536,12 @@ export declare const bookingFormInteractiveIslandPropsCodec: Readonly<{
648
536
  paymentTerms: import("../../blocks/shared/bookingPaymentTerms").BlockBookingPaymentTerms;
649
537
  reason: "online_payment_configured_before_launch";
650
538
  }>;
539
+ consent?: Readonly<{
540
+ requirementId: string;
541
+ title: string;
542
+ agreement: import("../../../../../core/src/index").RichTextDoc;
543
+ checkboxLabel: string;
544
+ }>;
651
545
  }>[];
652
546
  spamProtectionEnabled?: boolean;
653
547
  }>;
@@ -1,26 +1,10 @@
1
1
  import type { BlockBookingPaymentTerms } from "../../blocks/shared/bookingPaymentTerms";
2
+ import { type BlockBookingConsent } from "../../blocks/shared/bookingConsent";
2
3
  import type { AppointmentBookingStatusResponse } from "../api/types";
3
4
  import type { BookingFormDataReservedKey } from "./booking-form.reserved-fields";
5
+ import type { BookingFormField } from "./booking-form.fields";
6
+ export type { BookingFormField, BookingFormFieldOption, StandardBookingFormField, } from "./booking-form.fields";
4
7
  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";
5
- export type BookingFormFieldOption = Readonly<{
6
- value: string;
7
- label: string;
8
- }>;
9
- export type BookingFormField = Readonly<{
10
- id: string;
11
- label: string;
12
- type: "text" | "email" | "textarea" | "select" | "radio" | "checkbox" | "booking_requirement_consent" | "tel" | "url" | "number" | "date" | "time";
13
- required?: boolean;
14
- placeholder?: string;
15
- helpText?: string;
16
- options?: readonly BookingFormFieldOption[];
17
- multiple?: boolean;
18
- minLength?: number;
19
- maxLength?: number;
20
- pattern?: string;
21
- min?: number;
22
- max?: number;
23
- }>;
24
8
  export type BookingFormSettings = Readonly<{
25
9
  type: "booking";
26
10
  serviceId?: string;
@@ -80,7 +64,9 @@ export type BookingFormService = Readonly<{
80
64
  priceCurrency?: string | null;
81
65
  paymentTerms?: BlockBookingPaymentTerms;
82
66
  paymentTermsAvailability?: BlockBookingPaymentTermsAvailability;
67
+ consent?: BlockBookingConsent;
83
68
  }>;
69
+ export { projectSelectedAppointmentConsentIntoForm, resolveSelectedAppointmentConsent, type SelectedAppointmentConsent, } from "./booking-form.consent";
84
70
  export type BookingFormServicesSource = readonly BookingFormService[] | Readonly<{
85
71
  services?: readonly BookingFormService[];
86
72
  }> | Readonly<Record<string, BookingFormService>>;
@@ -1,6 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import type { PublicEvent } from "../../blocks/events/shared/types";
3
- import type { BookingFormField, BookingFormService, BookingFormServicesSource, BookingFormSettings, BookingFormSourceRecord } from "./booking-form.state";
3
+ import type { StandardBookingFormField, BookingFormService, 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<{
@@ -26,7 +26,7 @@ export type BookingFormSourceProps = Readonly<{
26
26
  spamProtectionEnabled?: boolean;
27
27
  className?: string | null;
28
28
  }>;
29
- export declare const bookingFieldSchema: z.ZodType<BookingFormField>;
29
+ export declare const bookingFieldSchema: z.ZodType<StandardBookingFormField>;
30
30
  export declare const bookingSettingsSchema: z.ZodType<BookingFormSettings>;
31
31
  export declare const bookingSourceFormSchema: z.ZodType<BookingFormSourceRecord>;
32
32
  export type AppointmentBookingRuntimeTarget = Readonly<{
@@ -96,6 +96,7 @@ export type AppointmentBookingServiceSourceInput = Readonly<{
96
96
  priceCurrency?: string | null;
97
97
  paymentTerms?: BookingFormService["paymentTerms"];
98
98
  paymentTermsAvailability?: BookingFormService["paymentTermsAvailability"];
99
+ consent?: BookingFormService["consent"];
99
100
  }>;
100
101
  export type AppointmentBookingSourceProps = BookingFormSourceProps & Readonly<{
101
102
  siteId: string;
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import type { FormData, Guest, GuestErrors } from './types';
3
+ import type { BlockBookingConsent } from '../../../blocks/shared/bookingConsent';
3
4
  type AttendeeDetailsStepProps = {
4
5
  formData: FormData;
5
6
  onChange: (data: FormData) => void;
@@ -22,6 +23,7 @@ type AttendeeDetailsStepProps = {
22
23
  guestSectionShake?: boolean;
23
24
  /** Callback when guest section shake animation ends */
24
25
  onGuestShakeEnd?: () => void;
26
+ consent: BlockBookingConsent | null;
25
27
  };
26
28
  /**
27
29
  * Attendee Details Step
@@ -1,6 +1,6 @@
1
1
  import type { PublicWholeSeriesOffering } from '../../../blocks/events/whole-series';
2
2
  import type { PublicEvent } from '../../../blocks/events/shared/types';
3
- import { type EventRegistrationPageSurfaceSubject } from './eventScope';
3
+ import { type EventRegistrationScopeContext, type EventRegistrationScopeableEvent, type EventRegistrationPageSurfaceSubject } from './eventScope';
4
4
  export type EventRegistrationSurfacePlan = Readonly<{
5
5
  kind: 'occurrence';
6
6
  events: readonly PublicEvent[];
@@ -12,9 +12,25 @@ export type EventRegistrationSurfacePlan = Readonly<{
12
12
  }> | Readonly<{
13
13
  kind: 'mixedBookingScopes';
14
14
  }>;
15
+ type EventRegistrationSurfaceScopeInput<TEvent extends EventRegistrationScopeableEvent> = EventRegistrationScopeContext & Readonly<{
16
+ events: readonly TEvent[];
17
+ wholeSeriesOffering?: PublicWholeSeriesOffering | null;
18
+ }>;
19
+ export type EventRegistrationSurfaceScopePlan<TEvent extends EventRegistrationScopeableEvent> = Readonly<{
20
+ kind: 'selectedRun';
21
+ events: readonly TEvent[];
22
+ offering: PublicWholeSeriesOffering;
23
+ }> | Readonly<{
24
+ kind: 'context';
25
+ events: readonly TEvent[];
26
+ }> | Readonly<{
27
+ kind: 'invalidSelectedRun';
28
+ }>;
29
+ export declare function planEventRegistrationScope<TEvent extends EventRegistrationScopeableEvent>(input: EventRegistrationSurfaceScopeInput<TEvent>): EventRegistrationSurfaceScopePlan<TEvent>;
15
30
  export declare function planEventRegistrationSurface(input: Readonly<{
16
31
  events: readonly PublicEvent[];
17
32
  wholeSeriesOfferings: readonly PublicWholeSeriesOffering[];
33
+ wholeSeriesOffering?: PublicWholeSeriesOffering | null;
18
34
  occurrenceContext?: Readonly<{
19
35
  id: string;
20
36
  seriesId: string;
@@ -24,3 +40,4 @@ export declare function planEventRegistrationSurface(input: Readonly<{
24
40
  }> | null;
25
41
  subject?: EventRegistrationPageSurfaceSubject | null;
26
42
  }>): EventRegistrationSurfacePlan;
43
+ export {};
@@ -57,8 +57,8 @@ export declare function useEventRegistrationWizard(options: UseEventRegistration
57
57
  setSelectedEvent: import("react").Dispatch<import("react").SetStateAction<RegistrationEvent | null>>;
58
58
  ticketsCount: number;
59
59
  setTicketsCount: (nextTicketsCount: number) => void;
60
- selectedAttendanceMode: "in_person" | "online" | null;
61
- setSelectedAttendanceMode: import("react").Dispatch<import("react").SetStateAction<"in_person" | "online" | null>>;
60
+ selectedAttendanceMode: "online" | "in_person" | null;
61
+ setSelectedAttendanceMode: import("react").Dispatch<import("react").SetStateAction<"online" | "in_person" | null>>;
62
62
  ticketSelections: Readonly<{
63
63
  ticketTypeId: string | null;
64
64
  quantity: number;
@@ -170,8 +170,8 @@ export declare function useEventRegistrationWizardWithDeps(options: UseEventRegi
170
170
  setSelectedEvent: import("react").Dispatch<import("react").SetStateAction<RegistrationEvent | null>>;
171
171
  ticketsCount: number;
172
172
  setTicketsCount: (nextTicketsCount: number) => void;
173
- selectedAttendanceMode: "in_person" | "online" | null;
174
- setSelectedAttendanceMode: import("react").Dispatch<import("react").SetStateAction<"in_person" | "online" | null>>;
173
+ selectedAttendanceMode: "online" | "in_person" | null;
174
+ setSelectedAttendanceMode: import("react").Dispatch<import("react").SetStateAction<"online" | "in_person" | null>>;
175
175
  ticketSelections: Readonly<{
176
176
  ticketTypeId: string | null;
177
177
  quantity: number;
@@ -1,2 +1,3 @@
1
1
  import type { FormData } from './types';
2
- export declare function validateFormData(formData: FormData): Partial<Record<keyof FormData, string>>;
2
+ export declare function createInitialRegistrationFormData(): FormData;
3
+ export declare function validateFormData(formData: FormData, requiresConsent?: boolean): Partial<Record<keyof FormData, string>>;
@@ -40,6 +40,7 @@ interface EnrollmentFormProps {
40
40
  isEmailLocked: boolean;
41
41
  isLoading: boolean;
42
42
  onLogout?: () => void;
43
+ consent: PublicWholeSeriesOffering['consent'];
43
44
  }
44
- export declare function EnrollmentForm({ formData, errors, onChange, isEmailLocked, isLoading, onLogout, }: EnrollmentFormProps): React.JSX.Element;
45
+ export declare function EnrollmentForm({ formData, errors, onChange, isEmailLocked, isLoading, onLogout, consent, }: EnrollmentFormProps): React.JSX.Element;
45
46
  export {};
@@ -1,6 +1,7 @@
1
1
  import type { BlockBookingPaymentTerms } from '../../../../blocks/shared/bookingPaymentTerms';
2
2
  import type { PublicTeamMemberSummary } from '../../../../blocks/shared/teamMembers';
3
3
  import type { WholeSeriesRegistrationClientProps, EnrollmentResult, FormData } from './types';
4
+ import type { BlockBookingConsent } from '../../../../blocks/shared/bookingConsent';
4
5
  export type WholeSeriesRegistrationPricingOptionInput = Readonly<{
5
6
  id: string;
6
7
  name: string;
@@ -43,6 +44,7 @@ export type WholeSeriesRegistrationRunInput = Readonly<{
43
44
  slug: string;
44
45
  description: unknown;
45
46
  teamMembers?: readonly PublicTeamMemberSummary[];
47
+ consent: BlockBookingConsent | null;
46
48
  registrationOpen: boolean;
47
49
  pricing: WholeSeriesRegistrationPricingInput;
48
50
  capacity: number | null;