@riverbankcms/sdk 0.145.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.
- package/CHANGELOG.md +17 -0
- package/dist/{PreviewEditorSidebar-O-V6Pl5a.mjs → PreviewEditorSidebar-kg2r2Fyi.mjs} +4 -4
- package/dist/{PreviewEditorUI-1UlX_9cw.mjs → PreviewEditorUI-sWMLp5dT.mjs} +3 -3
- package/dist/{PreviewQueryProvider-BxGwdOCV.mjs → PreviewQueryProvider-Cg51xq1w.mjs} +1 -1
- package/dist/{SdkPreviewModeRuntime-DYbA_4iv.mjs → SdkPreviewModeRuntime-h2ti3Hch.mjs} +280 -182
- package/dist/{SiteChromeCustomizeContext-CNTKQ9nx.mjs → SiteChromeCustomizeContext-DEACFH9m.mjs} +1330 -734
- package/dist/_dts/ai/src/contracts/proposals.d.ts +924 -0
- package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +84 -0
- package/dist/_dts/api/src/bookingConfig.d.ts +8 -1
- package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +8 -14
- package/dist/_dts/api/src/bookingManagementEventEndpointTypes.d.ts +45 -1
- package/dist/_dts/api/src/clientErrorReporting.d.ts +50 -0
- package/dist/_dts/api/src/communications.d.ts +20 -4
- package/dist/_dts/api/src/contentRuntime.d.ts +3 -7
- package/dist/_dts/api/src/endpoints.d.ts +223 -88
- package/dist/_dts/api/src/event-visibility.d.ts +20 -0
- package/dist/_dts/api/src/eventManagementContracts.d.ts +56 -3
- package/dist/_dts/api/src/eventManagementEndpointDefinitions.d.ts +24 -0
- package/dist/_dts/api/src/eventPageWords.d.ts +19 -0
- package/dist/_dts/api/src/eventSeriesRegistrationEndpointDefinitions.d.ts +14 -0
- package/dist/_dts/api/src/index.d.ts +7 -1
- package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
- package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
- package/dist/_dts/api/src/launchReadiness.d.ts +20 -2
- package/dist/_dts/api/src/launchRequirementPriority.d.ts +3 -0
- package/dist/_dts/api/src/newsletterCampaignCommandEndpoints.d.ts +13 -0
- package/dist/_dts/api/src/newsletterEndpointDefinitions.d.ts +42 -0
- package/dist/_dts/api/src/occurrenceScheduling.d.ts +10 -0
- package/dist/_dts/api/src/pageSurfaceEndpoints.d.ts +44 -0
- package/dist/_dts/api/src/participantMessaging.d.ts +11 -1
- package/dist/_dts/api/src/sdk-event-upsert.d.ts +40 -1
- package/dist/_dts/api/src/sdkContracts.d.ts +3 -42
- package/dist/_dts/api/src/sdkCourseBooking.d.ts +30 -0
- package/dist/_dts/api/src/sdkEventEndpointDefinitions.d.ts +76 -0
- package/dist/_dts/api/src/sdkEventLifecycle.d.ts +37 -0
- package/dist/_dts/api/src/sdkManagedEventContracts.d.ts +18 -0
- package/dist/_dts/api/src/sdkPageDesign.d.ts +388 -0
- package/dist/_dts/api/src/sdkPageDesignEndpointDefinitions.d.ts +22 -0
- package/dist/_dts/api/src/sdkPullEventContracts.d.ts +46 -0
- package/dist/_dts/api/src/siteAddressEndpoints.d.ts +29 -0
- package/dist/_dts/api/src/siteManagementEndpointDefinitions.d.ts +49 -0
- package/dist/_dts/api/src/siteManagementEndpoints.d.ts +2 -32
- package/dist/_dts/api/src/siteOnboarding.d.ts +75 -9
- package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +1 -1
- package/dist/_dts/api/src/types.d.ts +7 -1
- package/dist/_dts/api/src/wholeSeriesRuns.d.ts +14 -0
- package/dist/_dts/blocks/src/index.d.ts +2 -0
- package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +10 -0
- package/dist/_dts/blocks/src/pageRendererContracts.d.ts +3 -1
- package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +27 -5
- package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +14 -1
- package/dist/_dts/blocks/src/system/icons/social.d.ts +1 -1
- package/dist/_dts/blocks/src/system/registry.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.d.ts +1 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +20 -4
- package/dist/_dts/blocks/src/system/runtime/nodes/form.fields.d.ts +5 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.block-submission.d.ts +36 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.client.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +6 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.parts.d.ts +46 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +2 -1
- package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +2 -1
- package/dist/_dts/blocks/src/system/runtime/shared/components/CheckboxChoice.d.ts +18 -0
- package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +1 -0
- package/dist/_dts/content-editor/src/index.d.ts +1 -0
- package/dist/_dts/content-editor/src/primitives/previewEditableOutline.d.ts +2 -0
- package/dist/_dts/content-editor/src/ui/editorBlockEquality.d.ts +3 -0
- package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +3 -5
- package/dist/_dts/core/src/block-content-identity.d.ts +5 -0
- package/dist/_dts/core/src/editor-state.d.ts +2 -7
- package/dist/_dts/core/src/index.d.ts +1 -0
- package/dist/_dts/core/src/mailing-list-submission.d.ts +3 -1
- package/dist/_dts/core/src/public-event-booking-availability.d.ts +20 -1
- package/dist/_dts/core/src/public-profile.d.ts +3 -1
- package/dist/_dts/db/src/generated/supabase/database.types.d.ts +49 -2
- package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +3 -0
- package/dist/_dts/editor-blocks/src/block-editor/EmptyState.d.ts +13 -1
- package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +2 -8
- package/dist/_dts/editor-blocks/src/index.d.ts +1 -0
- package/dist/_dts/preview-next/src/client/blocks/composer/types.d.ts +3 -4
- package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +1 -2
- package/dist/_dts/sdk/src/next/renderSdkContent.d.ts +0 -1
- package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +2 -2
- package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +2 -2
- package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +6 -1
- package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +5 -2
- package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +6 -1
- package/dist/_dts/sdk/src/rendering/helpers/templateContent.d.ts +2 -0
- package/dist/_dts/sdk/src/rendering/hooks/useContent.d.ts +5 -1
- package/dist/_dts/sdk/src/rendering/hooks/usePage.d.ts +5 -1
- package/dist/_dts/sdk/src/version.d.ts +1 -1
- package/dist/_dts/surfaces/src/index.d.ts +9 -0
- package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
- package/dist/_dts/theme-core/src/inputs/checkable.d.ts +42 -0
- package/dist/_dts/theme-core/src/inputs/inputGroup.d.ts +19 -0
- package/dist/_dts/ui/src/navigation-tabs.d.ts +2 -1
- package/dist/client/{BookingConsentAgreement-DlVOmpW4.mjs → BookingConsentAgreement-BQKL045f.mjs} +2 -2
- package/dist/client/CheckboxChoice--W2n6yKs.mjs +24 -0
- package/dist/client/{DiscountCodeDisclosure-T9q623PQ.mjs → DiscountCodeDisclosure-CsOtjFY7.mjs} +1 -1
- package/dist/client/{EventCombined.client-DnsUeONl.mjs → EventCombined.client-BdRjVbhH.mjs} +6 -6
- package/dist/client/{EventListing.client-CNBFqJS4.mjs → EventListing.client-DBxC6xOU.mjs} +2 -2
- package/dist/client/{LeafletStaticMap-C7higg52.mjs → LeafletStaticMap-mHEJKrTs.mjs} +1 -1
- package/dist/client/{ThemedButton-LAJTNrS8.mjs → ThemedButton-CE5KYT6z.mjs} +1 -1
- package/dist/client/{accordion-BcNF9TjX.mjs → accordion-BEQNSptH.mjs} +1 -1
- package/dist/client/{bookingForm-BUaQ3S03.mjs → bookingForm-AMr-s5vw.mjs} +33 -52
- package/dist/client/bookings.mjs +48 -46
- package/dist/client/{carousel-CTdF6e0V.mjs → carousel-Bbt_QgJy.mjs} +1 -1
- package/dist/client/{cart-pGtyf_XU.mjs → cart-CnWi30zJ.mjs} +3 -3
- package/dist/client/{checkout-Da9WSn7Y.mjs → checkout-f3nkWgd4.mjs} +3 -3
- package/dist/client/client.mjs +1611 -815
- package/dist/client/{context-BFeY_Wbm.mjs → context-Bc8T6pCe.mjs} +1 -1
- package/dist/client/{dates-BhwVSxDg.mjs → dates-DUsCEzLb.mjs} +2 -3
- package/dist/client/{eventCalendar-BAtdnR4s.mjs → eventCalendar-CKwgXui5.mjs} +9 -9
- package/dist/client/{eventCombined-RksA3tRC.mjs → eventCombined-CBAOSTGR.mjs} +4 -4
- package/dist/client/{eventDetails-BB9hB4wR.mjs → eventDetails-Dh-_WiBD.mjs} +4 -4
- package/dist/client/{eventListing-BpJBkviM.mjs → eventListing-CA3frIH5.mjs} +4 -4
- package/dist/client/{eventRegistration-B18jFq_o.mjs → eventRegistration-BHtsgdcg.mjs} +21 -22
- package/dist/client/{form-Dodt8Y8t.mjs → form-C2h3YAcg.mjs} +135 -104
- package/dist/client/{headerSection-B0qj9ttg.mjs → headerSection-lwMuMTH9.mjs} +3 -3
- package/dist/client/hooks.mjs +489 -65
- package/dist/client/{locationMap-gn-iMk7a.mjs → locationMap-DJ2bLODV.mjs} +3 -3
- package/dist/client/{newsletterForm-oByLdFkr.mjs → newsletterForm-8Pu5K32g.mjs} +203 -101
- package/dist/client/{pricing-BOU0_Hai.mjs → pricing-HHx3IgBz.mjs} +1 -1
- package/dist/client/{productDetail-D9v1zH2j.mjs → productDetail-C_1odnAf.mjs} +3 -3
- package/dist/client/{productList-D-mItx1n.mjs → productList-CtCv-Nmx.mjs} +3 -3
- package/dist/client/{propsDecoder-C3TP_z4x.mjs → propsDecoder-Dcgsncxb.mjs} +40 -23
- package/dist/client/rendering/client.mjs +490 -457
- package/dist/client/rendering/islands.mjs +17 -17
- package/dist/client/rendering.mjs +1515 -628
- package/dist/client/{routeIslandApiConfig-DzN1W0sq.mjs → routeIslandApiConfig-CWLP7wu3.mjs} +1 -1
- package/dist/client/{scrollToBlock-CWs8EIdo.mjs → scrollToBlock-BNgaEUpo.mjs} +1 -1
- package/dist/client/{shop-Dufw7N7o.mjs → shop-DQXrQ8kJ.mjs} +7 -7
- package/dist/client/{shop-commerce-gklw_hLF.mjs → shop-commerce-B88zmWWo.mjs} +6 -6
- package/dist/client/{shop-commerce-store-Sf1eyTaZ.mjs → shop-commerce-store-DtSfkKuX.mjs} +1 -1
- package/dist/client/{shopShared-B5nyA41S.mjs → shopShared-cuaONpkJ.mjs} +4 -4
- package/dist/client/{useEventFilters-CLL829vy.mjs → useEventFilters-Bukew6Gb.mjs} +6 -6
- package/dist/preview-next/before-render.mjs +368 -103
- package/dist/preview-next/client/runtime.mjs +4 -4
- package/dist/preview-next/editor-base.css +11 -0
- package/dist/preview-next/keepAlive.mjs +328 -103
- package/dist/preview-next/middleware.mjs +329 -103
- package/dist/{previewAuthStore-BxAFlu-j.mjs → previewAuthStore-h5IgbSp4.mjs} +353 -103
- package/dist/{sdk-runtime-D0uZFev7.mjs → sdk-runtime-DTc1uIXn.mjs} +2 -2
- package/dist/{separator-EvdCAn4V.mjs → separator-BpHS1KZK.mjs} +1 -1
- package/dist/server/components.mjs +1376 -331
- package/dist/server/config-validation.mjs +405 -27
- package/dist/server/config.mjs +405 -27
- package/dist/server/data.mjs +405 -27
- package/dist/server/index.mjs +370 -104
- package/dist/server/next.mjs +1430 -463
- package/dist/server/page-converter.mjs +36 -25
- package/dist/server/prebuild.mjs +1 -1
- package/dist/server/rendering/server.mjs +1374 -331
- package/dist/server/rendering.mjs +1436 -364
- package/dist/server/routing.mjs +476 -43
- package/dist/server/server.mjs +504 -169
- package/dist/server/theme-bridge.mjs +467 -111
- package/dist/styles/index.css +186 -65
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@ import type { Theme } from '../../blocks/src/index';
|
|
|
2
2
|
import type { SiteVerticalBookingConfig } from '../../core/src/index';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import type { AiGenerateSiteEntityType, AiGenerateSitePrimaryCta, AiGenerateSiteRequest } from './siteGeneration';
|
|
5
|
-
import type { AppointmentSetupTargetStep } from './appointmentSetup';
|
|
5
|
+
import type { AppointmentSetupReadiness, AppointmentSetupTargetStep } from './appointmentSetup';
|
|
6
6
|
import type { MacadamiaOnboardingLogoAnalysis, MacadamiaOnboardingSurfaceData, PublicOnboardingSurfaceId } from './onboarding/surfaceData';
|
|
7
7
|
export type * from './onboarding/surfaceData';
|
|
8
8
|
/**
|
|
@@ -89,8 +89,8 @@ export type AiBrandGuidelinesGenerateResponse = {
|
|
|
89
89
|
stats: SiteContentSamplingStats;
|
|
90
90
|
};
|
|
91
91
|
};
|
|
92
|
-
export type LaunchRequirementId = 'confirm_email' | 'review_generated_site' | 'configure_appointments' | 'configure_events' | 'configure_courses' | 'connect_payments' | 'connect_custom_domain';
|
|
93
|
-
export type LaunchRequirementPackId = 'core' | 'bookings_appointments' | 'bookings_events' | 'bookings_courses' | 'payments' | 'domain';
|
|
92
|
+
export type LaunchRequirementId = 'confirm_email' | 'review_generated_site' | 'configure_appointments' | 'configure_events' | 'configure_courses' | 'connect_payments' | 'connect_custom_domain' | 'add_first_offering' | 'add_cover_image' | 'add_public_contact';
|
|
93
|
+
export type LaunchRequirementPackId = 'core' | 'bookings_appointments' | 'bookings_events' | 'bookings_courses' | 'payments' | 'domain' | 'offerings' | 'presence';
|
|
94
94
|
export type LaunchRequirementPriority = 'required' | 'recommended' | 'optional';
|
|
95
95
|
export type LaunchRequirementState = 'complete' | 'pending';
|
|
96
96
|
export type LaunchRequirementOwner = 'admin' | 'editor' | 'either';
|
|
@@ -162,23 +162,36 @@ export type LaunchAppointmentsPackState = {
|
|
|
162
162
|
kind: 'disabled';
|
|
163
163
|
} | {
|
|
164
164
|
kind: 'ready';
|
|
165
|
-
}
|
|
165
|
+
}
|
|
166
|
+
/** `missing` is the first gap in setup, so copy can name it. */
|
|
167
|
+
| {
|
|
166
168
|
kind: 'pending_setup';
|
|
169
|
+
missing: LaunchAppointmentsSetupGap;
|
|
167
170
|
targetStep: AppointmentSetupTargetStep;
|
|
168
171
|
};
|
|
172
|
+
export type LaunchAppointmentsSetupGap = Exclude<AppointmentSetupReadiness['kind'], 'not_applicable' | 'bookable'>;
|
|
173
|
+
/** The event offering kinds a launch item can name (courses have their own item). */
|
|
174
|
+
export declare const LAUNCH_EVENT_OFFERING_KINDS: readonly ["classes", "workshops", "retreats", "performances"];
|
|
175
|
+
export type LaunchEventOfferingKind = (typeof LAUNCH_EVENT_OFFERING_KINDS)[number];
|
|
169
176
|
export type LaunchEventsPackState = {
|
|
170
177
|
kind: 'disabled';
|
|
171
178
|
} | {
|
|
172
179
|
kind: 'ready';
|
|
173
|
-
}
|
|
180
|
+
}
|
|
181
|
+
/** `offeredKinds`: event kinds recorded at onboarding, in wizard order; empty when none. */
|
|
182
|
+
| {
|
|
174
183
|
kind: 'pending_setup';
|
|
184
|
+
offeredKinds: readonly LaunchEventOfferingKind[];
|
|
175
185
|
};
|
|
186
|
+
/** Keyed on whether a Stripe account exists: `connected_pending` has one that can't take payments yet. */
|
|
176
187
|
export type LaunchPaymentsPackState = {
|
|
177
188
|
kind: 'not_applicable';
|
|
178
189
|
} | {
|
|
179
190
|
kind: 'ready';
|
|
180
191
|
} | {
|
|
181
|
-
kind: '
|
|
192
|
+
kind: 'not_connected';
|
|
193
|
+
} | {
|
|
194
|
+
kind: 'connected_pending';
|
|
182
195
|
};
|
|
183
196
|
export type LaunchCoursesPackState = {
|
|
184
197
|
kind: 'not_applicable';
|
|
@@ -187,6 +200,24 @@ export type LaunchCoursesPackState = {
|
|
|
187
200
|
} | {
|
|
188
201
|
kind: 'pending_setup';
|
|
189
202
|
};
|
|
203
|
+
/** Booking pages only: whether the site has anything people could book. */
|
|
204
|
+
export type LaunchOfferingsPackState = {
|
|
205
|
+
kind: 'has_offerings';
|
|
206
|
+
} | {
|
|
207
|
+
kind: 'none';
|
|
208
|
+
};
|
|
209
|
+
/** Booking pages only. */
|
|
210
|
+
export type LaunchCoverImagePackState = {
|
|
211
|
+
kind: 'set';
|
|
212
|
+
} | {
|
|
213
|
+
kind: 'missing';
|
|
214
|
+
};
|
|
215
|
+
/** Booking pages only: whether any contact method is published. */
|
|
216
|
+
export type LaunchPublicContactPackState = {
|
|
217
|
+
kind: 'published';
|
|
218
|
+
} | {
|
|
219
|
+
kind: 'missing';
|
|
220
|
+
};
|
|
190
221
|
export type LaunchCustomDomainPackState = {
|
|
191
222
|
kind: 'connected';
|
|
192
223
|
domainIds: readonly string[];
|
|
@@ -196,11 +227,28 @@ export type LaunchCustomDomainPackState = {
|
|
|
196
227
|
} | {
|
|
197
228
|
kind: 'pending_setup';
|
|
198
229
|
};
|
|
199
|
-
|
|
200
|
-
|
|
230
|
+
/**
|
|
231
|
+
* The exact gap behind a pending requirement, so a presentation can name it
|
|
232
|
+
* ("Set your hours", "Finish setting up Stripe") without re-deriving facts.
|
|
233
|
+
*/
|
|
234
|
+
export type LaunchAppointmentsGapDetail = {
|
|
235
|
+
kind: 'appointments_gap';
|
|
236
|
+
missing: LaunchAppointmentsSetupGap;
|
|
237
|
+
};
|
|
238
|
+
export type LaunchPaymentsGapDetail = {
|
|
239
|
+
kind: 'payments_gap';
|
|
240
|
+
stage: 'not_connected' | 'connected_pending';
|
|
241
|
+
};
|
|
242
|
+
export type LaunchEventKindsDetail = {
|
|
243
|
+
kind: 'event_kinds';
|
|
244
|
+
offeredKinds: readonly LaunchEventOfferingKind[];
|
|
245
|
+
};
|
|
246
|
+
export type LaunchRequirementDetail = LaunchAppointmentsGapDetail | LaunchPaymentsGapDetail | LaunchEventKindsDetail;
|
|
247
|
+
/** Requirements that always carry a `detail` while pending. */
|
|
248
|
+
export type LaunchDetailedRequirementId = Extract<LaunchRequirementId, 'configure_appointments' | 'connect_payments' | 'configure_events'>;
|
|
249
|
+
type LaunchRequirementFields = {
|
|
201
250
|
packId: LaunchRequirementPackId;
|
|
202
251
|
priority: LaunchRequirementPriority;
|
|
203
|
-
state: LaunchRequirementState;
|
|
204
252
|
owner: LaunchRequirementOwner;
|
|
205
253
|
title: string;
|
|
206
254
|
description: string;
|
|
@@ -208,6 +256,24 @@ export type LaunchRequirement = {
|
|
|
208
256
|
secondaryAction?: LaunchRequirementAction | null;
|
|
209
257
|
evidence: LaunchRequirementEvidence;
|
|
210
258
|
};
|
|
259
|
+
type LaunchPendingWithDetail<Id extends LaunchDetailedRequirementId, Detail> = LaunchRequirementFields & {
|
|
260
|
+
id: Id;
|
|
261
|
+
state: 'pending';
|
|
262
|
+
detail: Detail;
|
|
263
|
+
};
|
|
264
|
+
/**
|
|
265
|
+
* One launch requirement. The three detailed items must carry their gap
|
|
266
|
+
* while pending, so a presentation never has to guess it.
|
|
267
|
+
*/
|
|
268
|
+
export type LaunchRequirement = LaunchPendingWithDetail<'configure_appointments', LaunchAppointmentsGapDetail> | LaunchPendingWithDetail<'connect_payments', LaunchPaymentsGapDetail> | LaunchPendingWithDetail<'configure_events', LaunchEventKindsDetail> | (LaunchRequirementFields & {
|
|
269
|
+
id: LaunchDetailedRequirementId;
|
|
270
|
+
state: 'complete';
|
|
271
|
+
detail?: never;
|
|
272
|
+
}) | (LaunchRequirementFields & {
|
|
273
|
+
id: Exclude<LaunchRequirementId, LaunchDetailedRequirementId>;
|
|
274
|
+
state: LaunchRequirementState;
|
|
275
|
+
detail?: never;
|
|
276
|
+
});
|
|
211
277
|
export type GoLiveDecision = {
|
|
212
278
|
kind: 'allowed';
|
|
213
279
|
overriddenRequirementIds: LaunchRequirementId[];
|
|
@@ -23,7 +23,7 @@ export type SdkUpsertNavigationItemInput = Readonly<{
|
|
|
23
23
|
* Site platform endpoints cover admin/configuration surfaces: redirects, webhooks,
|
|
24
24
|
* keys, SDK management, content-type CRUD, backup flows, and site-level admin tools.
|
|
25
25
|
*/
|
|
26
|
-
export type SitePlatformAPIEndpoints = {
|
|
26
|
+
export type SitePlatformAPIEndpoints = import('./sdkEventLifecycle').SdkEventLifecycleAPIEndpoints & {
|
|
27
27
|
listGscPropertiesAdmin: APIEndpoint<never, never, ListGscPropertiesAdminResponse>;
|
|
28
28
|
getPublicChallenge: APIEndpoint<never, never, string>;
|
|
29
29
|
checkRedirect: APIEndpoint<never, CheckRedirectQuery, CheckRedirectResponse>;
|
|
@@ -12,6 +12,7 @@ export type * from './bookingAdjustments';
|
|
|
12
12
|
export type * from './bookingConfig';
|
|
13
13
|
export type * from './event-listing-destination';
|
|
14
14
|
export type * from './bookingManagementEndpoints';
|
|
15
|
+
export type * from './newsletterCampaignCommandEndpoints';
|
|
15
16
|
export type * from './bookingOperations';
|
|
16
17
|
export { APPOINTMENT_HISTORY_STATUS_VALUES } from './bookingOperations';
|
|
17
18
|
export type * from './bookingRecords';
|
|
@@ -28,6 +29,7 @@ export type * from './sdk-event-payment-terms';
|
|
|
28
29
|
export type * from './siteInfrastructure';
|
|
29
30
|
export type * from './siteGeneration';
|
|
30
31
|
export type * from './siteManagementEndpoints';
|
|
32
|
+
export type * from './siteAddressEndpoints';
|
|
31
33
|
export type * from './siteOnboarding';
|
|
32
34
|
export type * from './siteOperations';
|
|
33
35
|
export type * from './siteAssets';
|
|
@@ -61,17 +63,21 @@ export type * from './accountEndpoints';
|
|
|
61
63
|
import type { AiAndLaunchReadinessAPIEndpointDefinitions, AiAPIEndpointName, AiAPIEndpoints, LaunchReadinessAPIEndpointName, LaunchReadinessAPIEndpoints } from './aiEndpoints';
|
|
62
64
|
import type { AppointmentServiceCategoryAPIEndpoints } from './appointmentServiceCategoryEndpoints';
|
|
63
65
|
import type { BookingManagementAPIEndpoints } from './bookingManagementEndpoints';
|
|
66
|
+
import type { NewsletterCampaignCommandAPIEndpoints } from './newsletterCampaignCommandEndpoints';
|
|
64
67
|
import type { CommercePortalAPIEndpoints } from './commercePortalEndpoints';
|
|
65
68
|
import type { MailchimpIntegrationAPIEndpoints } from './mailchimpIntegration';
|
|
66
69
|
import type { MailingListIntegrationAPIEndpoints } from './mailingListIntegration';
|
|
67
70
|
import type { PublicExperienceAPIEndpoints } from './publicExperienceEndpoints';
|
|
68
71
|
import type { SeoEndpointDefinitions } from './seoEndpoints';
|
|
69
72
|
import type { SiteManagementAPIEndpoints } from './siteManagementEndpoints';
|
|
73
|
+
import type { SiteAddressAPIEndpoints } from './siteAddressEndpoints';
|
|
70
74
|
import type { SitePlatformAPIEndpoints } from './sitePlatformEndpoints';
|
|
75
|
+
import type { SdkPageDesignAPIEndpoints } from './sdkPageDesign';
|
|
71
76
|
import type { SiteRuntimeAPIEndpoints } from './siteRuntimeEndpoints';
|
|
77
|
+
import type { ClientErrorReportingAPIEndpoints } from './clientErrorReporting';
|
|
72
78
|
type TableName = keyof DbDatabase['public']['Tables'];
|
|
73
79
|
export type DTOType<K extends TableName> = Partial<CamelizeKeys<DbRow<K>>>;
|
|
74
|
-
type APIEndpointsMonolith = AiAndLaunchReadinessAPIEndpointDefinitions & AccountAPIEndpoints & SeoEndpointDefinitions & SiteManagementAPIEndpoints & PublicExperienceAPIEndpoints & SiteRuntimeAPIEndpoints & SitePlatformAPIEndpoints & BookingManagementAPIEndpoints & AppointmentServiceCategoryAPIEndpoints & CommercePortalAPIEndpoints & MailchimpIntegrationAPIEndpoints & MailingListIntegrationAPIEndpoints;
|
|
80
|
+
type APIEndpointsMonolith = AiAndLaunchReadinessAPIEndpointDefinitions & AccountAPIEndpoints & SeoEndpointDefinitions & SiteManagementAPIEndpoints & SiteAddressAPIEndpoints & PublicExperienceAPIEndpoints & SiteRuntimeAPIEndpoints & SitePlatformAPIEndpoints & SdkPageDesignAPIEndpoints & BookingManagementAPIEndpoints & NewsletterCampaignCommandAPIEndpoints & AppointmentServiceCategoryAPIEndpoints & CommercePortalAPIEndpoints & MailchimpIntegrationAPIEndpoints & MailingListIntegrationAPIEndpoints & ClientErrorReportingAPIEndpoints;
|
|
75
81
|
type ComposeEndpointMaps<Maps extends readonly object[], Acc extends object = {}> = Maps extends readonly [
|
|
76
82
|
infer Head extends object,
|
|
77
83
|
...infer Tail extends readonly object[]
|
|
@@ -147,3 +147,17 @@ export type UpdateEventSeriesRegistrationRequest = {
|
|
|
147
147
|
export type UpdateEventSeriesRegistrationResponse = {
|
|
148
148
|
enrollment: EventSeriesRegistrationRecord;
|
|
149
149
|
};
|
|
150
|
+
/**
|
|
151
|
+
* Somebody on the team filling in or editing the answers of one person on a
|
|
152
|
+
* booking. A booking can hold several places and each person is asked the
|
|
153
|
+
* questions separately, so the person is named rather than assumed.
|
|
154
|
+
*/
|
|
155
|
+
export type SaveEventSeriesRegistrationAnswersRequest = {
|
|
156
|
+
requirementId: string;
|
|
157
|
+
participantParticipationId: string;
|
|
158
|
+
answers: Record<string, unknown>;
|
|
159
|
+
};
|
|
160
|
+
export type SaveEventSeriesRegistrationAnswersResponse = {
|
|
161
|
+
savedAt: string;
|
|
162
|
+
filledInByName: string;
|
|
163
|
+
};
|
|
@@ -4,6 +4,8 @@ export { createCustomBlockRegistry, mergeBlockDescriptorsWithRegistry, planCusto
|
|
|
4
4
|
export type { CustomBlockConflictReason, CustomBlockManifestSource, CustomBlockRegistry, CustomBlockRegistryConflict, CustomBlockRegistryEntry, CustomBlockRegistryResolutionPlan, CustomBlockSourcePolicy, ResolvedCustomBlockManifest, SdkConfigForBlockPicker, } from './customBlockRegistry';
|
|
5
5
|
export type { BlockOverrideComponent, BlockOverrideProps, BlockOverrides, EntrySubrouteContextData, EditorPageRendererProps, PageBlockRenderAdmissionError, PageRendererProps, RenderablePageBlock, RenderablePageOutline, OccurrenceContextData, PageBlockPosition, PageJoinRenderer, PageJoinSlot, PageRuntimeJoin, RenderedJoin, SdkConfigForRenderer, } from './PageRenderer';
|
|
6
6
|
export { MissingBlockOverrideError } from './pageRenderingMode';
|
|
7
|
+
export { readPublishedBlockPlacement } from './pageRenderAdmission';
|
|
8
|
+
export type { PublishedBlockPlacement } from './pageRenderAdmission';
|
|
7
9
|
export * from './subroutes';
|
|
8
10
|
export * from './structure/schema';
|
|
9
11
|
export { BLOCK_BUTTON_ROLES, BLOCK_BUTTON_ROLE_OPTIONS, blockButtonRoleSchema, isBlockButtonRole, type BlockButtonRole, } from './system/constants/buttonRoles';
|
|
@@ -6,12 +6,20 @@ export type PageBlockRenderAdmissionError = Readonly<{
|
|
|
6
6
|
}> | Readonly<{
|
|
7
7
|
kind: 'manifest_unavailable';
|
|
8
8
|
}>;
|
|
9
|
+
export type PublishedBlockPlacement = Readonly<{
|
|
10
|
+
id: string;
|
|
11
|
+
content: Record<string, unknown>;
|
|
12
|
+
}>;
|
|
13
|
+
/** Pair a published version with the content it authorises at the render boundary. */
|
|
14
|
+
export declare function readPublishedBlockPlacement(id: string | null | undefined, content: Record<string, unknown> | null | undefined): PublishedBlockPlacement | null;
|
|
9
15
|
export type RenderablePageBlock = Readonly<{
|
|
10
16
|
id: Block['id'];
|
|
11
17
|
kind: Block['kind'];
|
|
12
18
|
purpose: Block['purpose'];
|
|
13
19
|
bindings?: Block['bindings'];
|
|
14
20
|
contentVersionId?: string | null;
|
|
21
|
+
draftContentId?: string | null;
|
|
22
|
+
publishedPlacement?: PublishedBlockPlacement | null;
|
|
15
23
|
admission: Readonly<{
|
|
16
24
|
kind: 'renderable';
|
|
17
25
|
content: RenderableManifestContent;
|
|
@@ -34,6 +42,8 @@ export type PresentationAdmission = Readonly<{
|
|
|
34
42
|
export type PresentationBlock = Block & Readonly<{
|
|
35
43
|
presentationAdmission: PresentationAdmission;
|
|
36
44
|
contentVersionId?: string | null;
|
|
45
|
+
draftContentId?: string | null;
|
|
46
|
+
publishedPlacement?: PublishedBlockPlacement | null;
|
|
37
47
|
}>;
|
|
38
48
|
export type PresentationPageOutline = Omit<PageOutline, 'blocks'> & Readonly<{
|
|
39
49
|
blocks: readonly PresentationBlock[];
|
|
@@ -7,6 +7,7 @@ import type { RouteMap } from './system/transforms';
|
|
|
7
7
|
import type { BookingOfferingPresetSummary } from './system/blocks/offerings-preview/model';
|
|
8
8
|
import type { BlockLoaderFailures } from './system/data/types';
|
|
9
9
|
import type { BrowserReadAuthority } from './system/runtime/api/types';
|
|
10
|
+
import type { NewsletterBlockSubmission } from './system/runtime/nodes/newsletter-form.block-submission';
|
|
10
11
|
/**
|
|
11
12
|
* Occurrence context for event pages.
|
|
12
13
|
* Passed through to blocks that need occurrence information (e.g., event-registration).
|
|
@@ -76,6 +77,7 @@ export type BlockOverrideProps<TContent = Record<string, unknown>> = {
|
|
|
76
77
|
blockId: string | null;
|
|
77
78
|
/** Exact content snapshot rendered for this block. */
|
|
78
79
|
contentVersionId?: string | null;
|
|
80
|
+
newsletterBlockSubmission?: NewsletterBlockSubmission;
|
|
79
81
|
/** Block kind identifier (e.g., "block.hero" or "custom.my-block") */
|
|
80
82
|
blockKind: string;
|
|
81
83
|
};
|
|
@@ -141,7 +143,7 @@ export type PageRendererDataContext = {
|
|
|
141
143
|
resolvedData?: Record<string, Record<string, unknown>>;
|
|
142
144
|
/** Failed server loader requests, kept separate from successful data. */
|
|
143
145
|
loaderFailures?: BlockLoaderFailures;
|
|
144
|
-
previewStage
|
|
146
|
+
previewStage: 'published' | 'preview';
|
|
145
147
|
previewToken?: string | null;
|
|
146
148
|
readAuthority?: BrowserReadAuthority;
|
|
147
149
|
routes?: RouteMap;
|
|
@@ -18,6 +18,7 @@ export declare const publicEventLoaderQuerySchemaShape: {
|
|
|
18
18
|
readonly seriesSlug: z.ZodOptional<z.ZodString>;
|
|
19
19
|
readonly includeOccurrenceId: z.ZodOptional<z.ZodString>;
|
|
20
20
|
readonly readIntent: z.ZodOptional<z.ZodString>;
|
|
21
|
+
readonly detailAdmission: z.ZodOptional<z.ZodString>;
|
|
21
22
|
readonly detailLevel: z.ZodOptional<z.ZodString>;
|
|
22
23
|
readonly readProfile: z.ZodOptional<z.ZodString>;
|
|
23
24
|
};
|
|
@@ -39,6 +40,7 @@ export declare const publicEventLoaderQuerySchema: z.ZodObject<{
|
|
|
39
40
|
seriesSlug: z.ZodOptional<z.ZodString>;
|
|
40
41
|
includeOccurrenceId: z.ZodOptional<z.ZodString>;
|
|
41
42
|
readIntent: z.ZodOptional<z.ZodString>;
|
|
43
|
+
detailAdmission: z.ZodOptional<z.ZodString>;
|
|
42
44
|
detailLevel: z.ZodOptional<z.ZodString>;
|
|
43
45
|
readProfile: z.ZodOptional<z.ZodString>;
|
|
44
46
|
}, z.core.$strip>;
|
|
@@ -164,11 +166,15 @@ export declare const publicEventBookingAvailabilitySchema: z.ZodDiscriminatedUni
|
|
|
164
166
|
series_archived: "series_archived";
|
|
165
167
|
parent_archived: "parent_archived";
|
|
166
168
|
parent_inconsistent: "parent_inconsistent";
|
|
167
|
-
not_public: "not_public";
|
|
168
169
|
already_started: "already_started";
|
|
169
170
|
enrollment_closed: "enrollment_closed";
|
|
170
171
|
}>;
|
|
171
172
|
}, z.core.$strip>], "kind">;
|
|
173
|
+
export declare const publicEventBookingClosedDetailSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
174
|
+
kind: z.ZodLiteral<"opensSoon">;
|
|
175
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
176
|
+
kind: z.ZodLiteral<"paused">;
|
|
177
|
+
}, z.core.$strip>], "kind">;
|
|
172
178
|
export declare const publicRunSessionSchema: z.ZodObject<{
|
|
173
179
|
occurrenceId: z.ZodString;
|
|
174
180
|
startsAt: z.ZodString;
|
|
@@ -536,11 +542,15 @@ export declare const publicEventSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
536
542
|
series_archived: "series_archived";
|
|
537
543
|
parent_archived: "parent_archived";
|
|
538
544
|
parent_inconsistent: "parent_inconsistent";
|
|
539
|
-
not_public: "not_public";
|
|
540
545
|
already_started: "already_started";
|
|
541
546
|
enrollment_closed: "enrollment_closed";
|
|
542
547
|
}>;
|
|
543
548
|
}, z.core.$strip>], "kind">;
|
|
549
|
+
bookingClosedDetail: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
550
|
+
kind: z.ZodLiteral<"opensSoon">;
|
|
551
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
552
|
+
kind: z.ZodLiteral<"paused">;
|
|
553
|
+
}, z.core.$strip>], "kind">>;
|
|
544
554
|
deliveryMode: z.ZodEnum<{
|
|
545
555
|
in_person: "in_person";
|
|
546
556
|
online: "online";
|
|
@@ -1021,11 +1031,15 @@ export declare const publicEventSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
1021
1031
|
series_archived: "series_archived";
|
|
1022
1032
|
parent_archived: "parent_archived";
|
|
1023
1033
|
parent_inconsistent: "parent_inconsistent";
|
|
1024
|
-
not_public: "not_public";
|
|
1025
1034
|
already_started: "already_started";
|
|
1026
1035
|
enrollment_closed: "enrollment_closed";
|
|
1027
1036
|
}>;
|
|
1028
1037
|
}, z.core.$strip>], "kind">;
|
|
1038
|
+
bookingClosedDetail: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
1039
|
+
kind: z.ZodLiteral<"opensSoon">;
|
|
1040
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
1041
|
+
kind: z.ZodLiteral<"paused">;
|
|
1042
|
+
}, z.core.$strip>], "kind">>;
|
|
1029
1043
|
deliveryMode: z.ZodEnum<{
|
|
1030
1044
|
in_person: "in_person";
|
|
1031
1045
|
online: "online";
|
|
@@ -1531,11 +1545,15 @@ export declare const publicEventsArraySchema: z.ZodArray<z.ZodUnion<readonly [z.
|
|
|
1531
1545
|
series_archived: "series_archived";
|
|
1532
1546
|
parent_archived: "parent_archived";
|
|
1533
1547
|
parent_inconsistent: "parent_inconsistent";
|
|
1534
|
-
not_public: "not_public";
|
|
1535
1548
|
already_started: "already_started";
|
|
1536
1549
|
enrollment_closed: "enrollment_closed";
|
|
1537
1550
|
}>;
|
|
1538
1551
|
}, z.core.$strip>], "kind">;
|
|
1552
|
+
bookingClosedDetail: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
1553
|
+
kind: z.ZodLiteral<"opensSoon">;
|
|
1554
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
1555
|
+
kind: z.ZodLiteral<"paused">;
|
|
1556
|
+
}, z.core.$strip>], "kind">>;
|
|
1539
1557
|
deliveryMode: z.ZodEnum<{
|
|
1540
1558
|
in_person: "in_person";
|
|
1541
1559
|
online: "online";
|
|
@@ -2016,11 +2034,15 @@ export declare const publicEventsArraySchema: z.ZodArray<z.ZodUnion<readonly [z.
|
|
|
2016
2034
|
series_archived: "series_archived";
|
|
2017
2035
|
parent_archived: "parent_archived";
|
|
2018
2036
|
parent_inconsistent: "parent_inconsistent";
|
|
2019
|
-
not_public: "not_public";
|
|
2020
2037
|
already_started: "already_started";
|
|
2021
2038
|
enrollment_closed: "enrollment_closed";
|
|
2022
2039
|
}>;
|
|
2023
2040
|
}, z.core.$strip>], "kind">;
|
|
2041
|
+
bookingClosedDetail: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
2042
|
+
kind: z.ZodLiteral<"opensSoon">;
|
|
2043
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
2044
|
+
kind: z.ZodLiteral<"paused">;
|
|
2045
|
+
}, z.core.$strip>], "kind">>;
|
|
2024
2046
|
deliveryMode: z.ZodEnum<{
|
|
2025
2047
|
in_person: "in_person";
|
|
2026
2048
|
online: "online";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared types for event display blocks
|
|
3
3
|
*/
|
|
4
|
-
import type { LocationCoordinates, PublicEventPricing, PublicEventBookingAvailability, PublicEventPricingOption, PublicEventPricingOptionAvailability } from '../../../../../../core/src/index';
|
|
4
|
+
import type { LocationCoordinates, PublicEventPricing, PublicEventBookingAvailability, PublicEventBookingClosedDetail, PublicEventPricingOption, PublicEventPricingOptionAvailability } from '../../../../../../core/src/index';
|
|
5
5
|
import type { Media } from '../../../../lib/media';
|
|
6
6
|
import type { RichTextDoc } from '../../../manifest/richTextSchema';
|
|
7
7
|
import type { BlockBookingPaymentTerms } from '../../shared/bookingPaymentTerms';
|
|
@@ -140,6 +140,19 @@ export type PublicEventBase = {
|
|
|
140
140
|
requiresRegistration: boolean;
|
|
141
141
|
/** Canonical lifecycle admission; display remains independent from booking. */
|
|
142
142
|
bookingAvailability: PublicEventBookingAvailability;
|
|
143
|
+
/**
|
|
144
|
+
* Why an online page is not taking bookings, when that has two readings.
|
|
145
|
+
*
|
|
146
|
+
* Only ever present alongside a closed `bookingAvailability`, and only on a
|
|
147
|
+
* read that named this event and said it was rendering the event's own page.
|
|
148
|
+
* Every listing, calendar, filter, feed and unscoped read is absent it,
|
|
149
|
+
* because a unit that is not live never appears in those at all.
|
|
150
|
+
*
|
|
151
|
+
* The page also has to be online for this unit in particular: an ordinary
|
|
152
|
+
* event or a run with its own page speaks for itself, while a run that uses
|
|
153
|
+
* the course page is only spoken for when no run of that course is live.
|
|
154
|
+
*/
|
|
155
|
+
bookingClosedDetail?: PublicEventBookingClosedDetail;
|
|
143
156
|
/** How people can attend this event. */
|
|
144
157
|
deliveryMode: 'in_person' | 'online' | 'hybrid';
|
|
145
158
|
/** Per-mode availability used by registration flows. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type IconComponent } from './svg';
|
|
2
|
-
export declare const SOCIAL_ICON_NAMES: readonly ["SocialFacebook", "SocialInstagram", "SocialLinkedIn", "SocialTikTok", "SocialX", "SocialYouTube"];
|
|
2
|
+
export declare const SOCIAL_ICON_NAMES: readonly ["SocialFacebook", "SocialInstagram", "SocialLinkedIn", "SocialTikTok", "SocialWhatsApp", "SocialX", "SocialYouTube"];
|
|
3
3
|
export type SocialIconName = (typeof SOCIAL_ICON_NAMES)[number];
|
|
4
4
|
export declare function isSocialIconName(value: unknown): value is SocialIconName;
|
|
5
5
|
export declare function getSocialIconComponent(value: unknown): IconComponent | null;
|
|
@@ -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
|
-
|
|
28
|
+
newsletterBlockSubmission?: ResolverContext['newsletterBlockSubmission'];
|
|
29
29
|
blockKind?: string;
|
|
30
30
|
blockBindings?: Record<string, unknown>;
|
|
31
31
|
editableRouteMetadataFieldIds?: ResolverContext['editableRouteMetadataFieldIds'];
|
package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.d.ts
CHANGED
|
@@ -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'>;
|
package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts
CHANGED
|
@@ -488,11 +488,15 @@ export declare const eventCollectionSourceSchemaShape: {
|
|
|
488
488
|
series_archived: "series_archived";
|
|
489
489
|
parent_archived: "parent_archived";
|
|
490
490
|
parent_inconsistent: "parent_inconsistent";
|
|
491
|
-
not_public: "not_public";
|
|
492
491
|
already_started: "already_started";
|
|
493
492
|
enrollment_closed: "enrollment_closed";
|
|
494
493
|
}>;
|
|
495
494
|
}, z.core.$strip>], "kind">;
|
|
495
|
+
bookingClosedDetail: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
496
|
+
kind: z.ZodLiteral<"opensSoon">;
|
|
497
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
498
|
+
kind: z.ZodLiteral<"paused">;
|
|
499
|
+
}, z.core.$strip>], "kind">>;
|
|
496
500
|
deliveryMode: z.ZodEnum<{
|
|
497
501
|
in_person: "in_person";
|
|
498
502
|
online: "online";
|
|
@@ -973,11 +977,15 @@ export declare const eventCollectionSourceSchemaShape: {
|
|
|
973
977
|
series_archived: "series_archived";
|
|
974
978
|
parent_archived: "parent_archived";
|
|
975
979
|
parent_inconsistent: "parent_inconsistent";
|
|
976
|
-
not_public: "not_public";
|
|
977
980
|
already_started: "already_started";
|
|
978
981
|
enrollment_closed: "enrollment_closed";
|
|
979
982
|
}>;
|
|
980
983
|
}, z.core.$strip>], "kind">;
|
|
984
|
+
bookingClosedDetail: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
985
|
+
kind: z.ZodLiteral<"opensSoon">;
|
|
986
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
987
|
+
kind: z.ZodLiteral<"paused">;
|
|
988
|
+
}, z.core.$strip>], "kind">>;
|
|
981
989
|
deliveryMode: z.ZodEnum<{
|
|
982
990
|
in_person: "in_person";
|
|
983
991
|
online: "online";
|
|
@@ -1519,11 +1527,15 @@ export declare const eventCollectionDisplaySchemaShape: {
|
|
|
1519
1527
|
series_archived: "series_archived";
|
|
1520
1528
|
parent_archived: "parent_archived";
|
|
1521
1529
|
parent_inconsistent: "parent_inconsistent";
|
|
1522
|
-
not_public: "not_public";
|
|
1523
1530
|
already_started: "already_started";
|
|
1524
1531
|
enrollment_closed: "enrollment_closed";
|
|
1525
1532
|
}>;
|
|
1526
1533
|
}, z.core.$strip>], "kind">;
|
|
1534
|
+
bookingClosedDetail: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
1535
|
+
kind: z.ZodLiteral<"opensSoon">;
|
|
1536
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
1537
|
+
kind: z.ZodLiteral<"paused">;
|
|
1538
|
+
}, z.core.$strip>], "kind">>;
|
|
1527
1539
|
deliveryMode: z.ZodEnum<{
|
|
1528
1540
|
in_person: "in_person";
|
|
1529
1541
|
online: "online";
|
|
@@ -2004,11 +2016,15 @@ export declare const eventCollectionDisplaySchemaShape: {
|
|
|
2004
2016
|
series_archived: "series_archived";
|
|
2005
2017
|
parent_archived: "parent_archived";
|
|
2006
2018
|
parent_inconsistent: "parent_inconsistent";
|
|
2007
|
-
not_public: "not_public";
|
|
2008
2019
|
already_started: "already_started";
|
|
2009
2020
|
enrollment_closed: "enrollment_closed";
|
|
2010
2021
|
}>;
|
|
2011
2022
|
}, z.core.$strip>], "kind">;
|
|
2023
|
+
bookingClosedDetail: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
2024
|
+
kind: z.ZodLiteral<"opensSoon">;
|
|
2025
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
2026
|
+
kind: z.ZodLiteral<"paused">;
|
|
2027
|
+
}, z.core.$strip>], "kind">>;
|
|
2012
2028
|
deliveryMode: z.ZodEnum<{
|
|
2013
2029
|
in_person: "in_person";
|
|
2014
2030
|
online: "online";
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type MailingListSignupSourceRef } from '../../../../../core/src/index';
|
|
2
|
+
export type NewsletterBlockSubmission = Readonly<{
|
|
3
|
+
tag: 'ready';
|
|
4
|
+
sourceRef: Extract<MailingListSignupSourceRef, {
|
|
5
|
+
tag: 'block_ref';
|
|
6
|
+
}>;
|
|
7
|
+
}> | Readonly<{
|
|
8
|
+
tag: 'unpublished-form';
|
|
9
|
+
}> | Readonly<{
|
|
10
|
+
tag: 'unpublished-settings';
|
|
11
|
+
}> | Readonly<{
|
|
12
|
+
tag: 'unavailable';
|
|
13
|
+
}>;
|
|
14
|
+
type BlockPlacement = Readonly<{
|
|
15
|
+
blockId: string | null;
|
|
16
|
+
selectedContentVersionId: string | null;
|
|
17
|
+
publishedPlacement: Readonly<{
|
|
18
|
+
id: string;
|
|
19
|
+
content: Record<string, unknown>;
|
|
20
|
+
}> | null;
|
|
21
|
+
renderedContent: Record<string, unknown>;
|
|
22
|
+
stage: 'published' | 'preview' | undefined;
|
|
23
|
+
}>;
|
|
24
|
+
/** Authorise one block source for both public and preview rendering. */
|
|
25
|
+
export declare function planNewsletterBlockSubmission(placement: BlockPlacement): NewsletterBlockSubmission;
|
|
26
|
+
type PreviewPlacement = Readonly<{
|
|
27
|
+
blockId: string | null;
|
|
28
|
+
publishedContentId: string | null;
|
|
29
|
+
renderedContent: Record<string, unknown>;
|
|
30
|
+
publishedContent: Record<string, unknown> | null;
|
|
31
|
+
}>;
|
|
32
|
+
/** Decide whether the visible draft can safely cite the published placement. */
|
|
33
|
+
export declare function planNewsletterPreviewSubmission(placement: PreviewPlacement): Exclude<NewsletterBlockSubmission, {
|
|
34
|
+
tag: 'unavailable';
|
|
35
|
+
}>;
|
|
36
|
+
export {};
|
|
@@ -31,7 +31,12 @@ export type NewsletterFormHydrationTarget = Readonly<{
|
|
|
31
31
|
sourceRef: MailingListSignupSignedSourceRef;
|
|
32
32
|
}> | Readonly<{
|
|
33
33
|
tag: 'preview';
|
|
34
|
+
}> | Readonly<{
|
|
35
|
+
tag: 'unpublished-preview';
|
|
36
|
+
reason: 'unpublished-form' | 'unpublished-settings';
|
|
34
37
|
}>;
|
|
38
|
+
export declare const NEWSLETTER_SIGNUPS_PAUSED_MESSAGE = "We can\u2019t accept signups right now. Please try again later.";
|
|
39
|
+
export declare function newsletterBlockSubmissionMessage(target: NewsletterFormHydrationTarget): string | null;
|
|
35
40
|
type MailingListSignupBlockSourceRef = Extract<MailingListSignupSourceRef, {
|
|
36
41
|
tag: 'block_ref';
|
|
37
42
|
}>;
|
|
@@ -42,7 +47,7 @@ type NewsletterIslandMeta = Readonly<{
|
|
|
42
47
|
siteId?: string;
|
|
43
48
|
apiBaseUrl?: string;
|
|
44
49
|
}>;
|
|
45
|
-
export declare function buildNewsletterDisplay(source: NewsletterFormSourceProps): NewsletterFormDisplay;
|
|
50
|
+
export declare function buildNewsletterDisplay(source: Pick<NewsletterFormSourceProps, 'source' | 'mailingList' | 'targeting' | 'buttonVariant' | 'className'>): NewsletterFormDisplay;
|
|
46
51
|
export type NewsletterFormInteractiveIslandProps = InteractiveIslandProps<NewsletterIslandMeta, 'newsletter-form', typeof newsletterFormBlockRuntime>;
|
|
47
52
|
export declare const newsletterFormBlockRuntime: Readonly<{
|
|
48
53
|
kind: "progressive";
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { NewsletterButtonVariant, NewsletterFieldDef } from './newsletter-form.types';
|
|
3
|
+
/**
|
|
4
|
+
* Newsletter form pieces shared by the SSR render and the hydrated island, so
|
|
5
|
+
* both produce the same markup.
|
|
6
|
+
*
|
|
7
|
+
* Labels are visually hidden: every field has a placeholder, and a visible
|
|
8
|
+
* "Email *" label over a single field reads like a generic form. Screen
|
|
9
|
+
* readers still get the label.
|
|
10
|
+
*/
|
|
11
|
+
export declare const TOPIC_CHOICE_FIELD_ID = "mailingListChoice";
|
|
12
|
+
type FieldState = Readonly<{
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
error?: string | null;
|
|
15
|
+
}>;
|
|
16
|
+
/** Splits the preset's fields into the email (joined with the button) and the rest. */
|
|
17
|
+
export declare function partitionNewsletterFields(fields: readonly NewsletterFieldDef[]): Readonly<{
|
|
18
|
+
email: NewsletterFieldDef | null;
|
|
19
|
+
extra: readonly NewsletterFieldDef[];
|
|
20
|
+
}>;
|
|
21
|
+
export declare function NewsletterExtraField({ field, disabled, error, }: Readonly<{
|
|
22
|
+
field: NewsletterFieldDef;
|
|
23
|
+
}> & FieldState): React.ReactElement;
|
|
24
|
+
/** The email field and submit button sharing one input-styled shell. */
|
|
25
|
+
export declare function NewsletterEmailEntry({ field, buttonVariant, buttonLabel, disabled, error, }: Readonly<{
|
|
26
|
+
field: NewsletterFieldDef;
|
|
27
|
+
buttonVariant: NewsletterButtonVariant;
|
|
28
|
+
buttonLabel: string;
|
|
29
|
+
}> & FieldState): React.ReactElement;
|
|
30
|
+
/**
|
|
31
|
+
* The submit action: joined to the email field when the preset has one
|
|
32
|
+
* (every current preset does), otherwise a plain themed button.
|
|
33
|
+
*/
|
|
34
|
+
export declare function NewsletterSubmitRow({ emailField, buttonVariant, buttonLabel, disabled, error, }: Readonly<{
|
|
35
|
+
emailField: NewsletterFieldDef | null;
|
|
36
|
+
buttonVariant: NewsletterButtonVariant;
|
|
37
|
+
buttonLabel: string;
|
|
38
|
+
}> & FieldState): React.ReactElement;
|
|
39
|
+
/** Visitor-chosen topics as toggle chips. Real checkboxes underneath. */
|
|
40
|
+
export declare function NewsletterTopicChips({ choices, disabled, error, }: Readonly<{
|
|
41
|
+
choices: readonly Readonly<{
|
|
42
|
+
id: string;
|
|
43
|
+
label: string;
|
|
44
|
+
}>[];
|
|
45
|
+
}> & FieldState): React.ReactElement;
|
|
46
|
+
export {};
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { MailingListGlobalForm, MailingListPlacementTargeting, MailingListRuntimeContext, MailingListSignupSourceRef } from '../../../../../core/src/index';
|
|
7
7
|
import type { BlockButtonRole } from '../../constants/buttonRoles';
|
|
8
|
+
import type { NewsletterBlockSubmission } from './newsletter-form.block-submission';
|
|
8
9
|
export type NewsletterPreset = MailingListGlobalForm['fields']['preset'];
|
|
9
10
|
export type NewsletterFieldDef = {
|
|
10
11
|
id: string;
|
|
@@ -33,7 +34,7 @@ type NewsletterFormCommonProps = {
|
|
|
33
34
|
type BlockNewsletterFormSource = Readonly<{
|
|
34
35
|
source: 'block';
|
|
35
36
|
blockId?: string | null;
|
|
36
|
-
|
|
37
|
+
newsletterBlockSubmission: NewsletterBlockSubmission;
|
|
37
38
|
}>;
|
|
38
39
|
type SignedFooterNewsletterFormSource = Readonly<{
|
|
39
40
|
source: 'signed-footer';
|