@riverbankcms/sdk 0.144.0 → 0.145.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 (162) hide show
  1. package/dist/{PreviewEditorSidebar-CQZNnFiM.mjs → PreviewEditorSidebar-O-V6Pl5a.mjs} +4 -4
  2. package/dist/{PreviewEditorUI-DCNxnmI0.mjs → PreviewEditorUI-1UlX_9cw.mjs} +3 -3
  3. package/dist/{PreviewQueryProvider-BCYICImX.mjs → PreviewQueryProvider-BxGwdOCV.mjs} +1 -1
  4. package/dist/{SdkPreviewModeRuntime-BJolUbr1.mjs → SdkPreviewModeRuntime-DYbA_4iv.mjs} +419 -348
  5. package/dist/{SiteChromeCustomizeContext-CKgEpoxi.mjs → SiteChromeCustomizeContext-CNTKQ9nx.mjs} +2081 -1313
  6. package/dist/_dts/ai/src/contracts/proposals.d.ts +4719 -66
  7. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +429 -6
  8. package/dist/_dts/api/src/appointmentEndpointDefinitions.d.ts +49 -0
  9. package/dist/_dts/api/src/appointmentServiceCategoryEndpoints.d.ts +75 -0
  10. package/dist/_dts/api/src/appointmentServiceContracts.d.ts +80 -0
  11. package/dist/_dts/api/src/appointmentSetup.d.ts +8 -1
  12. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +2 -12
  13. package/dist/_dts/api/src/communications.d.ts +14 -22
  14. package/dist/_dts/api/src/contentRuntime.d.ts +2 -0
  15. package/dist/_dts/api/src/endpoints.d.ts +105 -58
  16. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  17. package/dist/_dts/api/src/launchReadiness.d.ts +2 -0
  18. package/dist/_dts/api/src/newsletterEndpointDefinitions.d.ts +0 -23
  19. package/dist/_dts/api/src/onboarding/confirmationResend.d.ts +3 -0
  20. package/dist/_dts/api/src/publicBookingService.d.ts +35 -1
  21. package/dist/_dts/api/src/publicExperience/newsletterEndpoints.d.ts +13 -0
  22. package/dist/_dts/api/src/publicNewsletterEndpointDefinitions.d.ts +58 -0
  23. package/dist/_dts/api/src/schemas/admin-observability-logs.d.ts +3 -3
  24. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +2 -6
  25. package/dist/_dts/api/src/types.d.ts +2 -1
  26. package/dist/_dts/blocks/src/PageRenderer.d.ts +4 -4
  27. package/dist/_dts/blocks/src/bindings/index.d.ts +2 -2
  28. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +24 -0
  29. package/dist/_dts/blocks/src/index.d.ts +1 -1
  30. package/dist/_dts/blocks/src/pageRenderJoins.d.ts +68 -0
  31. package/dist/_dts/blocks/src/pageRenderPlan.d.ts +8 -27
  32. package/dist/_dts/blocks/src/pageRenderPreparation.d.ts +7 -4
  33. package/dist/_dts/blocks/src/pageRendererBoundaries.d.ts +40 -23
  34. package/dist/_dts/blocks/src/server.d.ts +1 -1
  35. package/dist/_dts/blocks/src/system/blocks/appointment-services.d.ts +2 -0
  36. package/dist/_dts/blocks/src/system/blocks/events/eventSelectionFields.d.ts +2 -2
  37. package/dist/_dts/blocks/src/system/blocks/events/shared/calendarWindow.d.ts +1 -1
  38. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +2 -2
  39. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +47 -47
  40. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +29 -3
  41. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +8 -1
  42. package/dist/_dts/blocks/src/system/runtime/nodes/appointment-services.d.ts +22 -2
  43. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +3 -1
  44. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +57 -2
  45. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.service-categories.d.ts +29 -0
  46. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.service-choices.d.ts +13 -0
  47. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +3 -3
  48. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +13 -1
  49. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.d.ts +1 -1
  50. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +3 -3
  51. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.submission.d.ts +20 -1
  52. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +2 -0
  53. package/dist/_dts/content-model/src/content-types/schema.d.ts +1 -1
  54. package/dist/_dts/core/src/appointment-service-categories.d.ts +108 -0
  55. package/dist/_dts/core/src/editor-state.d.ts +6 -0
  56. package/dist/_dts/core/src/index.d.ts +1 -0
  57. package/dist/_dts/core/src/public-profile.d.ts +9 -0
  58. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +663 -241
  59. package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +6 -0
  60. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/loaders.d.ts +16 -1
  61. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/types.d.ts +13 -0
  62. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/utils.d.ts +29 -0
  63. package/dist/_dts/preview-next/src/client/blocks/BoundaryControl.d.ts +7 -2
  64. package/dist/_dts/preview-next/src/client/blocks/composer/mergeDrafts.d.ts +1 -1
  65. package/dist/_dts/preview-next/src/client/blocks/composer/types.d.ts +1 -0
  66. package/dist/_dts/preview-next/src/client/blocks/previewProjection/applyPreviewProjections.d.ts +1 -3
  67. package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -2
  68. package/dist/_dts/preview-next/src/client/blocks/previewProjection/types.d.ts +2 -2
  69. package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +1 -0
  70. package/dist/_dts/sdk/src/client/runtimeCacheKeys.d.ts +8 -0
  71. package/dist/_dts/sdk/src/client/types.d.ts +1 -1
  72. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  73. package/dist/_dts/sdk/src/contracts/page.d.ts +7 -2
  74. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +5 -0
  75. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +2 -2
  76. package/dist/_dts/sdk/src/public-api/contracts.d.ts +6 -8
  77. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +2 -2
  78. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +2 -2
  79. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +1 -1
  80. package/dist/_dts/sdk/src/rendering/hooks/useContent.d.ts +1 -1
  81. package/dist/_dts/sdk/src/version.d.ts +1 -1
  82. package/dist/_dts/surfaces/src/index.d.ts +1 -0
  83. package/dist/_dts/theme-core/src/layout/boundaryCss.d.ts +3 -0
  84. package/dist/_dts/theme-core/src/site-styles/compositionBudget.d.ts +8 -0
  85. package/dist/_dts/theme-core/src/site-styles/contentTemplateRuntimeCompiler.d.ts +3 -2
  86. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +1 -3
  87. package/dist/_dts/theme-core/src/site-styles/generatedDesignPipeline.d.ts +3 -0
  88. package/dist/_dts/theme-core/src/site-styles/index.d.ts +3 -0
  89. package/dist/_dts/theme-core/src/site-styles/joinTreatment.d.ts +132 -0
  90. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorBoundaries.d.ts +31 -0
  91. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +33 -29
  92. package/dist/_dts/theme-core/src/site-styles/pageDesignIntent.d.ts +4 -4
  93. package/dist/_dts/theme-core/src/site-styles/pageFlowPresets.d.ts +36 -0
  94. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +4 -10
  95. package/dist/_dts/theme-core/src/site-styles/rawStyleFields.d.ts +17 -4
  96. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +20 -74
  97. package/dist/_dts/theme-core/src/site-styles/sectionBoundaryComposition.d.ts +95 -0
  98. package/dist/_dts/theme-core/src/site-styles/sectionTransitions.d.ts +80 -518
  99. package/dist/_dts/theme-core/src/site-styles/siteStyleBlockPolicies.d.ts +9 -4
  100. package/dist/_dts/theme-core/src/site-styles/transitionCatalogue.d.ts +320 -0
  101. package/dist/_dts/theme-core/src/site-styles/types.d.ts +3 -18
  102. package/dist/client/{BookingConsentAgreement-DoAILrkN.mjs → BookingConsentAgreement-DlVOmpW4.mjs} +2 -2
  103. package/dist/client/{DiscountCodeDisclosure-X528hUTf.mjs → DiscountCodeDisclosure-T9q623PQ.mjs} +1 -1
  104. package/dist/client/{EventCombined.client-DSBVwq5m.mjs → EventCombined.client-DnsUeONl.mjs} +6 -6
  105. package/dist/client/{EventListing.client-DmFAX7Vb.mjs → EventListing.client-CNBFqJS4.mjs} +2 -2
  106. package/dist/client/{LeafletStaticMap-BAqXdfhq.mjs → LeafletStaticMap-C7higg52.mjs} +1 -1
  107. package/dist/client/{ThemedButton-BwNFVwi4.mjs → ThemedButton-LAJTNrS8.mjs} +1 -1
  108. package/dist/client/{accordion-DRhMdkbd.mjs → accordion-BcNF9TjX.mjs} +1 -1
  109. package/dist/client/{bookingForm-iJ_nCsNF.mjs → bookingForm-BUaQ3S03.mjs} +142 -50
  110. package/dist/client/bookings.mjs +191 -64
  111. package/dist/client/{carousel-D8zuffZr.mjs → carousel-CTdF6e0V.mjs} +1 -1
  112. package/dist/client/{cart-DeMGJViN.mjs → cart-pGtyf_XU.mjs} +3 -3
  113. package/dist/client/{checkout-DXc06Km2.mjs → checkout-Da9WSn7Y.mjs} +3 -3
  114. package/dist/client/client.mjs +1630 -816
  115. package/dist/client/{context-CDLCfDep.mjs → context-BFeY_Wbm.mjs} +1 -1
  116. package/dist/client/{dates-ClFx7Epy.mjs → dates-BhwVSxDg.mjs} +2 -2
  117. package/dist/client/{eventCalendar-BaGpnOGN.mjs → eventCalendar-BAtdnR4s.mjs} +9 -9
  118. package/dist/client/{eventCombined-ywONOx2m.mjs → eventCombined-RksA3tRC.mjs} +4 -4
  119. package/dist/client/{eventDetails-B2LlOTYY.mjs → eventDetails-BB9hB4wR.mjs} +4 -4
  120. package/dist/client/{eventListing-CMgxWpqP.mjs → eventListing-BpJBkviM.mjs} +4 -4
  121. package/dist/client/{eventRegistration-BarLDNHR.mjs → eventRegistration-B18jFq_o.mjs} +8 -8
  122. package/dist/client/{form-BjqKaBJ7.mjs → form-Dodt8Y8t.mjs} +3 -3
  123. package/dist/client/{headerSection-CP4XDwz1.mjs → headerSection-B0qj9ttg.mjs} +3 -3
  124. package/dist/client/hooks.mjs +550 -99
  125. package/dist/client/{locationMap-C5gW-d-w.mjs → locationMap-gn-iMk7a.mjs} +3 -3
  126. package/dist/client/{newsletterForm-afXlVSA0.mjs → newsletterForm-oByLdFkr.mjs} +26 -5
  127. package/dist/client/{pricing-Bl1CAl28.mjs → pricing-BOU0_Hai.mjs} +1 -1
  128. package/dist/client/{productDetail-CvQ3jWQe.mjs → productDetail-D9v1zH2j.mjs} +3 -3
  129. package/dist/client/{productList-U874PGO7.mjs → productList-D-mItx1n.mjs} +3 -3
  130. package/dist/client/{propsDecoder-DPXtCZWP.mjs → propsDecoder-C3TP_z4x.mjs} +72 -33
  131. package/dist/client/rendering/client.mjs +900 -266
  132. package/dist/client/rendering/islands.mjs +17 -17
  133. package/dist/client/rendering.mjs +1637 -788
  134. package/dist/client/{routeIslandApiConfig-NGYiUWXu.mjs → routeIslandApiConfig-DzN1W0sq.mjs} +1 -1
  135. package/dist/client/{scrollToBlock-0-C3DVhK.mjs → scrollToBlock-CWs8EIdo.mjs} +1 -1
  136. package/dist/client/{shop-BXjXhM9P.mjs → shop-Dufw7N7o.mjs} +7 -7
  137. package/dist/client/{shop-commerce-BZ6UlWJ7.mjs → shop-commerce-gklw_hLF.mjs} +6 -6
  138. package/dist/client/{shop-commerce-store-DlSBXb3D.mjs → shop-commerce-store-Sf1eyTaZ.mjs} +1 -1
  139. package/dist/client/{shopShared-kkEOiLPA.mjs → shopShared-B5nyA41S.mjs} +4 -4
  140. package/dist/client/{useEventFilters-zvnnE1ro.mjs → useEventFilters-CLL829vy.mjs} +6 -6
  141. package/dist/preview-next/before-render.mjs +147 -77
  142. package/dist/preview-next/client/runtime.mjs +4 -4
  143. package/dist/preview-next/keepAlive.mjs +147 -77
  144. package/dist/preview-next/middleware.mjs +147 -77
  145. package/dist/{previewAuthStore-JA6-I_sL.mjs → previewAuthStore-BxAFlu-j.mjs} +147 -77
  146. package/dist/{sdk-runtime-DFJlQt3q.mjs → sdk-runtime-D0uZFev7.mjs} +2 -2
  147. package/dist/{separator-o8GHb1xh.mjs → separator-EvdCAn4V.mjs} +1 -1
  148. package/dist/server/components.mjs +1727 -991
  149. package/dist/server/config-validation.mjs +537 -97
  150. package/dist/server/config.mjs +537 -97
  151. package/dist/server/data.mjs +549 -98
  152. package/dist/server/index.mjs +159 -81
  153. package/dist/server/next.mjs +1460 -748
  154. package/dist/server/page-converter.mjs +384 -54
  155. package/dist/server/prebuild.mjs +1 -1
  156. package/dist/server/rendering/server.mjs +1712 -973
  157. package/dist/server/rendering.mjs +1748 -1001
  158. package/dist/server/routing.mjs +624 -131
  159. package/dist/server/server.mjs +554 -138
  160. package/dist/server/theme-bridge.mjs +1192 -27
  161. package/dist/server/theme.mjs +6 -4
  162. package/package.json +2 -1
@@ -1,8 +1,8 @@
1
1
  import { i as textColorStyle } from "./colorStyles-CuJBiS-1.mjs";
2
- import { t as defineIslandPropsDecoder } from "./propsDecoder-DPXtCZWP.mjs";
3
- import { n as ThemedButtonLink } from "./ThemedButton-BwNFVwi4.mjs";
2
+ import { t as defineIslandPropsDecoder } from "./propsDecoder-C3TP_z4x.mjs";
3
+ import { n as ThemedButtonLink } from "./ThemedButton-LAJTNrS8.mjs";
4
4
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
5
- import { t as LeafletStaticMap } from "./LeafletStaticMap-BAqXdfhq.mjs";
5
+ import { t as LeafletStaticMap } from "./LeafletStaticMap-C7higg52.mjs";
6
6
  import "react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
8
  //#region ../core/src/location.ts
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import { O as clsx } from "./colorStyles-CuJBiS-1.mjs";
3
- import { Jt as parseMailingListVisitorSelection, t as defineIslandPropsDecoder, yn as assertNever$1, zt as assertNever } from "./propsDecoder-DPXtCZWP.mjs";
4
- import { n as useBlockApi, r as BlockApiError, t as BlockApiProvider } from "./context-CDLCfDep.mjs";
3
+ import { Jt as parseMailingListVisitorSelection, t as defineIslandPropsDecoder, yn as assertNever$1, zt as assertNever } from "./propsDecoder-C3TP_z4x.mjs";
4
+ import { n as useBlockApi, r as BlockApiError, t as BlockApiProvider } from "./context-BFeY_Wbm.mjs";
5
5
  import { n as isSpamProtectionEnabled, r as AltchaWidget, t as getChallengeUrl } from "./src-B833rYRr.mjs";
6
- import { t as ThemedButton } from "./ThemedButton-BwNFVwi4.mjs";
6
+ import { t as ThemedButton } from "./ThemedButton-LAJTNrS8.mjs";
7
7
  import { t as FeedbackMessage } from "./FeedbackMessage-CtLvvS_d.mjs";
8
8
  import { n as getFieldValidationControlProps, t as FieldValidationMessage } from "./FieldValidationMessage-AYanWFb-.mjs";
9
9
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
@@ -65,6 +65,16 @@ function getNewsletterSubmissionFormError(state) {
65
65
  }
66
66
  //#endregion
67
67
  //#region ../blocks/src/system/runtime/nodes/newsletter-form.submission.ts
68
+ /**
69
+ * Logs a refusal with its reason so a QA session can tell the cases apart in
70
+ * the console, since the visitor-facing copy deliberately does not.
71
+ */
72
+ function reportNewsletterSignupRefusal(reason, detail = {}) {
73
+ console.warn("[newsletter-form] Signup refused before sending", {
74
+ reason,
75
+ ...detail
76
+ });
77
+ }
68
78
  function mapNewsletterFormFieldsToSubscriberInput(fields) {
69
79
  return {
70
80
  email: readSubmittedText(fields.email),
@@ -85,7 +95,7 @@ function resolveNewsletterSubmitTarget(input) {
85
95
  case "signed-footer-source": return publishedSourceTarget(input.sourceRef);
86
96
  case "preview": return {
87
97
  tag: "unavailable",
88
- reason: "missing_block_source"
98
+ reason: "preview_only_source"
89
99
  };
90
100
  default: return assertNever$1(input);
91
101
  }
@@ -144,13 +154,23 @@ function NewsletterFormClient({ render }) {
144
154
  }
145
155
  const submitTarget = resolveNewsletterSubmitTarget(render.hydration.target);
146
156
  if (submitTarget.tag === "unavailable") {
157
+ reportNewsletterSignupRefusal(submitTarget.reason, { target: render.hydration.target });
158
+ dispatchSubmission({
159
+ type: "failed",
160
+ error: newsletterFormError(SIGNUPS_PAUSED_MESSAGE)
161
+ });
162
+ return;
163
+ }
164
+ if (render.hydration.setupRevision === null) {
165
+ reportNewsletterSignupRefusal("setup_not_configured");
147
166
  dispatchSubmission({
148
167
  type: "failed",
149
168
  error: newsletterFormError(SIGNUPS_PAUSED_MESSAGE)
150
169
  });
151
170
  return;
152
171
  }
153
- if (render.hydration.setupRevision === null || render.display.availability === "unavailable") {
172
+ if (render.display.availability === "unavailable") {
173
+ reportNewsletterSignupRefusal("destination_unavailable", { setupRevision: render.hydration.setupRevision });
154
174
  dispatchSubmission({
155
175
  type: "failed",
156
176
  error: newsletterFormError(SIGNUPS_PAUSED_MESSAGE)
@@ -160,6 +180,7 @@ function NewsletterFormClient({ render }) {
160
180
  const selection = readVisitorSelection(formData, render.hydration);
161
181
  const selectionError = visitorSelectionError(selection);
162
182
  if (selectionError) {
183
+ if (selection.tag === "unusable") reportNewsletterSignupRefusal("choices_unusable", { choiceProvider: render.hydration.choiceProvider });
163
184
  dispatchSubmission({
164
185
  type: "failed",
165
186
  error: selectionError
@@ -1,4 +1,4 @@
1
- import { ln as formatBookingPriceDisplay, pn as publicEventPricingDisplay, un as formatEventPricing } from "./propsDecoder-DPXtCZWP.mjs";
1
+ import { ln as formatBookingPriceDisplay, pn as publicEventPricingDisplay, un as formatEventPricing } from "./propsDecoder-C3TP_z4x.mjs";
2
2
  //#region ../blocks/src/system/runtime/nodes/events/domain/capacity.ts
3
3
  /**
4
4
  * Compute remaining spots for an event from `availableSpots` with a fallback
@@ -1,6 +1,6 @@
1
- import { t as defineIslandPropsDecoder } from "./propsDecoder-DPXtCZWP.mjs";
2
- import { r as ProductDetailController } from "./shop-commerce-BZ6UlWJ7.mjs";
3
- import { t as mountShopBlockIsland } from "./shopShared-kkEOiLPA.mjs";
1
+ import { t as defineIslandPropsDecoder } from "./propsDecoder-C3TP_z4x.mjs";
2
+ import { r as ProductDetailController } from "./shop-commerce-gklw_hLF.mjs";
3
+ import { t as mountShopBlockIsland } from "./shopShared-B5nyA41S.mjs";
4
4
  import "react";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  //#region ../blocks/src/system/runtime/nodes/product-detail.client.tsx
@@ -1,6 +1,6 @@
1
- import { t as defineIslandPropsDecoder } from "./propsDecoder-DPXtCZWP.mjs";
2
- import { i as ProductListController } from "./shop-commerce-BZ6UlWJ7.mjs";
3
- import { t as mountShopBlockIsland } from "./shopShared-kkEOiLPA.mjs";
1
+ import { t as defineIslandPropsDecoder } from "./propsDecoder-C3TP_z4x.mjs";
2
+ import { i as ProductListController } from "./shop-commerce-gklw_hLF.mjs";
3
+ import { t as mountShopBlockIsland } from "./shopShared-B5nyA41S.mjs";
4
4
  import "react";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  //#region ../blocks/src/system/runtime/nodes/product-list.client.tsx
@@ -282,7 +282,7 @@ function parseEventPageSurfaceDestinationMode(value) {
282
282
  return value === "cms-managed" || value === "system-managed" ? value : void 0;
283
283
  }
284
284
  function parseEventPageSurfaceSubject(value) {
285
- if (!isRecord$8(value)) return err$1({ kind: "notObject" });
285
+ if (!isRecord$9(value)) return err$1({ kind: "notObject" });
286
286
  switch (value.kind) {
287
287
  case "eventSeries": {
288
288
  const eventSeriesId = parseEventSeriesId(value.eventSeriesId);
@@ -337,7 +337,7 @@ function parseEventSeriesIdList(values) {
337
337
  }
338
338
  return ok$1(parsed);
339
339
  }
340
- function isRecord$8(value) {
340
+ function isRecord$9(value) {
341
341
  return typeof value === "object" && value !== null && !Array.isArray(value);
342
342
  }
343
343
  //#endregion
@@ -715,7 +715,7 @@ const DEFAULT_MAILING_LIST_SUCCESS_MESSAGE = "Thanks — you're on the list.";
715
715
  //#endregion
716
716
  //#region ../core/src/mailing-list-setup-parser.ts
717
717
  function parseMailingListGlobalForm(value) {
718
- if (!isRecord$7(value)) return formError("shape");
718
+ if (!isRecord$8(value)) return formError("shape");
719
719
  const fields = parseGlobalFields(value.fields);
720
720
  if (fields === null) return formError("fields");
721
721
  if (typeof value.includeOptionalPhone !== "boolean") return formError("includeOptionalPhone");
@@ -734,7 +734,7 @@ function parseMailingListGlobalForm(value) {
734
734
  });
735
735
  }
736
736
  function parseGlobalFields(value) {
737
- if (!isRecord$7(value) || typeof value.preset !== "string") return null;
737
+ if (!isRecord$8(value) || typeof value.preset !== "string") return null;
738
738
  switch (value.preset) {
739
739
  case "emailOnly": return { preset: "emailOnly" };
740
740
  case "emailName": return isRequirement(value.name) ? {
@@ -771,7 +771,7 @@ function parseOptionalString(value) {
771
771
  function isRequirement(value) {
772
772
  return value === "required" || value === "optional";
773
773
  }
774
- function isRecord$7(value) {
774
+ function isRecord$8(value) {
775
775
  return typeof value === "object" && value !== null && !Array.isArray(value);
776
776
  }
777
777
  function formError(field) {
@@ -823,7 +823,7 @@ function planMailingListChoicePresentation(targeting) {
823
823
  //#endregion
824
824
  //#region ../core/src/mailing-list-runtime.ts
825
825
  function parseMailingListRuntimeContext(value) {
826
- if (!isRecord$6(value)) return invalidRuntimeContext();
826
+ if (!isRecord$7(value)) return invalidRuntimeContext();
827
827
  if (value.tag === "not_configured") return ok$1({ tag: "not_configured" });
828
828
  if (value.tag !== "configured") return invalidRuntimeContext();
829
829
  const revision = parseMailingListSetupRevision(value.revision);
@@ -838,7 +838,7 @@ function parseMailingListRuntimeContext(value) {
838
838
  });
839
839
  }
840
840
  function parseRuntimeProvider(value) {
841
- if (!isRecord$6(value)) return null;
841
+ if (!isRecord$7(value)) return null;
842
842
  switch (value.provider) {
843
843
  case "native": return parseNativeRuntimeProvider(value);
844
844
  case "brevo": return parseBrevoRuntimeProvider(value);
@@ -870,7 +870,7 @@ function parseMailchimpRuntimeProvider(value) {
870
870
  if (defaultAudienceId === null) return null;
871
871
  const audiences = [];
872
872
  for (const audience of value.audiences) {
873
- if (!isRecord$6(audience)) return null;
873
+ if (!isRecord$7(audience)) return null;
874
874
  const id = parseMailchimpAudienceId(audience.id);
875
875
  const name = parseName(audience.name);
876
876
  if (id === null || name === null || !Array.isArray(audience.interests)) return null;
@@ -891,7 +891,7 @@ function parseMailchimpRuntimeProvider(value) {
891
891
  function parseMailchimpInterests(value) {
892
892
  const interests = [];
893
893
  for (const interest of value) {
894
- if (!isRecord$6(interest)) return null;
894
+ if (!isRecord$7(interest)) return null;
895
895
  const id = parseMailchimpInterestId(interest.id);
896
896
  const name = parseName(interest.name);
897
897
  const categoryName = parseName(interest.categoryName);
@@ -908,7 +908,7 @@ function parseNamedItems(value, parseId) {
908
908
  if (!Array.isArray(value)) return null;
909
909
  const items = [];
910
910
  for (const item of value) {
911
- if (!isRecord$6(item)) return null;
911
+ if (!isRecord$7(item)) return null;
912
912
  const id = parseId(item.id);
913
913
  const name = parseName(item.name);
914
914
  if (id === null || name === null) return null;
@@ -924,7 +924,7 @@ function parseName(value) {
924
924
  const name = value.trim();
925
925
  return name.length > 0 ? name : null;
926
926
  }
927
- function isRecord$6(value) {
927
+ function isRecord$7(value) {
928
928
  return typeof value === "object" && value !== null && !Array.isArray(value);
929
929
  }
930
930
  function invalidRuntimeContext() {
@@ -933,10 +933,10 @@ function invalidRuntimeContext() {
933
933
  //#endregion
934
934
  //#region ../core/src/mailing-list-targeting-parser.ts
935
935
  function parseMailingListPlacementTargeting(value) {
936
- if (!isRecord$5(value)) return targetingError("shape");
936
+ if (!isRecord$6(value)) return targetingError("shape");
937
937
  if (value.mode === "default") return ok$1({ mode: "default" });
938
938
  if (value.mode !== "custom") return targetingError("mode");
939
- if (!isRecord$5(value.selection)) return targetingError("selection");
939
+ if (!isRecord$6(value.selection)) return targetingError("selection");
940
940
  switch (value.provider) {
941
941
  case "native": return parseNativeTargeting(value.selection);
942
942
  case "brevo": return parseBrevoTargeting(value.selection);
@@ -945,7 +945,7 @@ function parseMailingListPlacementTargeting(value) {
945
945
  }
946
946
  }
947
947
  function parseMailingListVisitorSelection(value) {
948
- if (!isRecord$5(value)) return visitorSelectionError("shape");
948
+ if (!isRecord$6(value)) return visitorSelectionError("shape");
949
949
  switch (value.provider) {
950
950
  case "native": {
951
951
  const topicIds = parseVisitorIds(value.topicIds, parseNewsletterListId);
@@ -1078,7 +1078,7 @@ function parseVisitorIds(value, parseId) {
1078
1078
  }
1079
1079
  return parsed;
1080
1080
  }
1081
- function isRecord$5(value) {
1081
+ function isRecord$6(value) {
1082
1082
  return typeof value === "object" && value !== null && !Array.isArray(value);
1083
1083
  }
1084
1084
  function targetingError(field) {
@@ -1375,7 +1375,7 @@ function assertNever$1(value, message) {
1375
1375
  /**
1376
1376
  * Strict record guard: excludes null, primitives, and arrays.
1377
1377
  */
1378
- function isRecord$4(value) {
1378
+ function isRecord$5(value) {
1379
1379
  return typeof value === "object" && value !== null && !Array.isArray(value);
1380
1380
  }
1381
1381
  //#endregion
@@ -1630,12 +1630,12 @@ function resolveBookingSiteId(siteId, form) {
1630
1630
  return siteId || form?.siteId || "";
1631
1631
  }
1632
1632
  function normalizeBookingFormConfig(form) {
1633
- if (!isRecord$3(form)) return null;
1633
+ if (!isRecord$4(form)) return null;
1634
1634
  const id = readNonEmptyString(form.id);
1635
1635
  const name = readNonEmptyString(form.name);
1636
1636
  if (!id || !name) return null;
1637
- const schemaSource = isRecord$3(form.schema) ? form.schema : isRecord$3(form.schemaJson) ? form.schemaJson : null;
1638
- const settingsSource = isRecord$3(form.settings) ? form.settings : isRecord$3(form.settingsJson) ? form.settingsJson : null;
1637
+ const schemaSource = isRecord$4(form.schema) ? form.schema : isRecord$4(form.schemaJson) ? form.schemaJson : null;
1638
+ const settingsSource = isRecord$4(form.settings) ? form.settings : isRecord$4(form.settingsJson) ? form.settingsJson : null;
1639
1639
  return {
1640
1640
  id,
1641
1641
  name,
@@ -1655,8 +1655,8 @@ function normalizeBookingServices(services) {
1655
1655
  };
1656
1656
  if (!services) return [];
1657
1657
  if (Array.isArray(services)) return services.filter(isBookingFormService).map(normalizeService);
1658
- if (isRecord$3(services) && "services" in services) return Array.isArray(services.services) ? services.services.filter(isBookingFormService).map(normalizeService) : [];
1659
- return isRecord$3(services) ? Object.values(services).filter(isBookingFormService).map(normalizeService) : [];
1658
+ if (isRecord$4(services) && "services" in services) return Array.isArray(services.services) ? services.services.filter(isBookingFormService).map(normalizeService) : [];
1659
+ return isRecord$4(services) ? Object.values(services).filter(isBookingFormService).map(normalizeService) : [];
1660
1660
  }
1661
1661
  function normalizeBookingSchema(value) {
1662
1662
  if (!value) return void 0;
@@ -1667,7 +1667,7 @@ function normalizeBookingSchema(value) {
1667
1667
  };
1668
1668
  }
1669
1669
  function readBookingFormField(value) {
1670
- if (!isRecord$3(value)) return null;
1670
+ if (!isRecord$4(value)) return null;
1671
1671
  const id = readNonEmptyString(value.id);
1672
1672
  const label = readNonEmptyString(value.label);
1673
1673
  const type = readBookingFieldType(value.type);
@@ -1710,7 +1710,7 @@ function readBookingFieldOptions(value) {
1710
1710
  return options.length > 0 ? options : void 0;
1711
1711
  }
1712
1712
  function readBookingFieldOption(value) {
1713
- if (!isRecord$3(value)) return null;
1713
+ if (!isRecord$4(value)) return null;
1714
1714
  const optionValue = readNonEmptyString(value.value);
1715
1715
  const label = readNonEmptyString(value.label);
1716
1716
  return optionValue && label ? {
@@ -1730,7 +1730,7 @@ function normalizeBookingSettings(value) {
1730
1730
  };
1731
1731
  }
1732
1732
  function isBookingFormService(value) {
1733
- return isRecord$3(value) && typeof value.id === "string" && typeof value.siteId === "string" && typeof value.title === "string" && (value.consent === void 0 || blockBookingConsentSchema.safeParse(value.consent).success);
1733
+ return isRecord$4(value) && typeof value.id === "string" && typeof value.siteId === "string" && typeof value.title === "string" && (value.consent === void 0 || blockBookingConsentSchema.safeParse(value.consent).success);
1734
1734
  }
1735
1735
  function collectBookingCustomFields(data) {
1736
1736
  const customFields = {};
@@ -1780,7 +1780,7 @@ function readStringArray(value) {
1780
1780
  const strings = value.filter((item) => typeof item === "string");
1781
1781
  return strings.length > 0 ? strings : void 0;
1782
1782
  }
1783
- function isRecord$3(value) {
1783
+ function isRecord$4(value) {
1784
1784
  return typeof value === "object" && value !== null;
1785
1785
  }
1786
1786
  function getBookingServicePaymentSelectionMode(service) {
@@ -1974,6 +1974,31 @@ function getBookingSuccessMessage(successMessage) {
1974
1974
  return successMessage?.trim() || "Your appointment has been booked! Check your email for confirmation.";
1975
1975
  }
1976
1976
  //#endregion
1977
+ //#region ../blocks/src/system/runtime/nodes/booking-form.service-categories.ts
1978
+ function isRecord$3(value) {
1979
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1980
+ }
1981
+ function readCategory(value) {
1982
+ if (!isRecord$3(value)) return [];
1983
+ const { id, name, description } = value;
1984
+ if (typeof id !== "string" || id.trim() === "" || typeof name !== "string") return [];
1985
+ return [{
1986
+ id,
1987
+ name,
1988
+ description: typeof description === "string" ? description : null
1989
+ }];
1990
+ }
1991
+ /**
1992
+ * The ordered service categories carried by a catalogue-shaped services
1993
+ * source (`{ services, categories }`). Every other shape has none, which
1994
+ * reads as a site without categories. Order is preserved: the database owns
1995
+ * it.
1996
+ */
1997
+ function normalizeBookingServiceCategories(services) {
1998
+ if (!isRecord$3(services) || !Array.isArray(services.categories)) return [];
1999
+ return services.categories.flatMap(readCategory);
2000
+ }
2001
+ //#endregion
1977
2002
  //#region ../logger/src/noop.ts
1978
2003
  const noop = () => {};
1979
2004
  const logger = {
@@ -2124,11 +2149,20 @@ const bookingServiceSchema = z.object({
2124
2149
  priceCurrency: z.string().nullable().optional(),
2125
2150
  paymentTerms: blockBookingPaymentTermsSchema.optional(),
2126
2151
  paymentTermsAvailability: blockBookingPaymentTermsAvailabilitySchema.optional(),
2127
- consent: blockBookingConsentSchema.optional()
2152
+ consent: blockBookingConsentSchema.optional(),
2153
+ categoryId: z.string().nullable().optional()
2154
+ });
2155
+ const bookingServiceCategorySchema = z.object({
2156
+ id: z.string(),
2157
+ name: z.string(),
2158
+ description: z.string().nullable()
2128
2159
  });
2129
2160
  const bookingServicesSourceSchema = z.union([
2130
2161
  z.array(bookingServiceSchema),
2131
- z.object({ services: z.array(bookingServiceSchema).optional() }),
2162
+ z.object({
2163
+ services: z.array(bookingServiceSchema).optional(),
2164
+ categories: z.array(bookingServiceCategorySchema).optional()
2165
+ }),
2132
2166
  z.record(z.string(), bookingServiceSchema)
2133
2167
  ]);
2134
2168
  const bookingConfigSchema = z.object({
@@ -2181,6 +2215,7 @@ const bookingHydrationSchema = z.object({
2181
2215
  rebookContext: z.object({ kind: z.literal("portal_rebook") }).nullable().optional(),
2182
2216
  form: bookingConfigSchema.nullable(),
2183
2217
  services: z.array(bookingServiceSchema),
2218
+ serviceCategories: z.array(bookingServiceCategorySchema).optional(),
2184
2219
  spamProtectionEnabled: z.boolean().optional()
2185
2220
  });
2186
2221
  const bookingRenderSchema = z.object({
@@ -2227,6 +2262,7 @@ const bookingFormInteractiveIslandPropsCodec = createInteractiveIslandCodec({
2227
2262
  rebookContext: source.rebookContext ?? null,
2228
2263
  form,
2229
2264
  services,
2265
+ serviceCategories: normalizeBookingServiceCategories(source.services),
2230
2266
  spamProtectionEnabled: source.spamProtectionEnabled
2231
2267
  }
2232
2268
  };
@@ -5725,16 +5761,18 @@ const themeV2RuntimeStyleFieldNames = [
5725
5761
  "_frameStyles",
5726
5762
  "_sectionStyles",
5727
5763
  "_containerStyles",
5728
- "_cardStyles",
5729
- "_transitionStyles",
5730
- "styleGroup"
5764
+ "_cardStyles"
5731
5765
  ];
5732
5766
  const themeV2BlockSpecificRawStyleFieldNames = [
5733
5767
  "_contentCardStyles",
5734
5768
  "_heroLayoutStyles",
5735
5769
  "_textCardStyles"
5736
5770
  ];
5737
- const themeV2NormalEditorRawStyleFieldNames = [...themeV2RuntimeStyleFieldNames, ...themeV2BlockSpecificRawStyleFieldNames];
5771
+ const themeV2NormalEditorRawStyleFieldNames = [
5772
+ ...themeV2RuntimeStyleFieldNames,
5773
+ ...themeV2BlockSpecificRawStyleFieldNames,
5774
+ "styleGroup"
5775
+ ];
5738
5776
  new Set(themeV2NormalEditorRawStyleFieldNames);
5739
5777
  [...themeV2RuntimeStyleFieldNames, ...themeV2BlockSpecificRawStyleFieldNames];
5740
5778
  const pageDesignEditorBackgroundOverrideOwner = "page-design-editor";
@@ -8628,7 +8666,8 @@ const siteOptionSources = [
8628
8666
  "eventCategories",
8629
8667
  "eventSeries",
8630
8668
  "venues",
8631
- "staffMembers"
8669
+ "staffMembers",
8670
+ "appointmentServiceCategories"
8632
8671
  ];
8633
8672
  const mediaDeliverySchema = z.object({
8634
8673
  sizes: z.string().optional(),
@@ -12733,4 +12772,4 @@ function defineIslandPropsDecoder(kind) {
12733
12772
  };
12734
12773
  }
12735
12774
  //#endregion
12736
- export { addDays as $, formatBookingInstant as $t, resolveEventRegistrationScopedEvents as A, resolveBookingSiteId as At, calendarWindowPageSchema as B, clearWorkflowFeedback as Bt, resolveRegistrationTarget as C, getBookingServiceSlidingScale as Ct, getWizardStepsForContext as D, prepareBookingSubmission as Dt, getStepNumber as E, parseBookingCurrencyInputToCents as Et, calendarMonthKey as F, BOOKING_FORM_DATA_RESERVED_KEYS as Ft, buildEventRuntimeFilters as G, reportWorkflowSuccess as Gt, resolveCalendarReadProfile as H, ok as Ht, calendarPageResponseError as I, isBookingRequirementConsentFieldId as It, normalizeCsvString as J, parseMailingListVisitorSelection as Jt, getEventRuntimeFiltersKey as K, CANCELLED_SESSION_STATUS as Kt, calendarQueryKey as L, RichTextDocSchema as Lt, isSemanticSpacing as M, toSelectedCollectionOptionKind as Mt, resolveSpacing as N, projectSelectedAppointmentConsentIntoForm as Nt, buildEventCalendarListingRender as O, resolveAppointmentCheckoutVerificationState as Ot, calendarMonthDate as P, resolveSelectedAppointmentConsent as Pt, MONTH_NAMES as Q, formatBookingDateTime as Qt, calendarWindowBounds as R, isRecord$4 as Rt, resolveEventRequiresPayment as S, getBookingRedirectStateFromLocation as St, WIZARD_STEPS as T, isBookingServiceSlidingAmountInRange as Tt, createHostedBlockApiConfig as U, okWith as Ut, planCalendarMonthRanges as V, err as Vt, getBlockApiReadStage as W, reportWorkflowError as Wt, getCardOrientation as X, formatBookingDate as Xt, normalizeOptionalId as Y, addLocalScheduleDays as Yt, getContainerClass as Z, formatBookingDateParts as Zt, toRegistrationEvents as _, formatCurrencyAmount as _n, normalizeCardRole as _t, buildProductDetailDisplay as a, resolveBookingTimeZoneId as an, getWeekCalendarDays as at, findPreSelectedEvent as b, formatBookingCentsAsCurrencyInput as bt, EMPTY_COMMERCE_CART_STATE as c, toScheduledBookingDateTime as cn, shiftCalendarAnchorDate as ct, deriveCommerceCheckoutState as d, isPublicEventPricingOptionDisplayable as dn, boxBackgroundSchema as dt, formatBookingTime as en, addMonths as et, parseStoredCommerceCartState as f, publicEventPricingCurrency as fn, isCssColorLiteral as ft, getRegistrationStartAt as g, publicEventPricingType as gn, themeButtonVariantClassNames as gt, buildEventRegistrationDisplayFromScopedEvents as h, publicEventPricingStrategy as hn, themeButtonSizeClassName as ht, buildProductCardDisplay as i, parseBookingLocalDate as in, getOrderedDayNames as it, SEMANTIC_SPACING_VALUES as j, resolveDefaultBookingServiceId as jt, staticHeaderChromeRuntime as k, resolveBookingPaymentStep as kt, buildPassCartItem as l, formatBookingPriceDisplay as ln, resolveRuntimeEventDestination as lt, reduceCommerceCart as m, publicEventPricingOptions as mn, resolveTokenOrCssColorValue as mt, getShopDisplayForItems as n, getBookingLocalDateKey as nn, formatDateKey as nt, formatCommercePrice as o, toBookingTimeZone as on, isSameCalendarDay as ot, productItemKey as p, publicEventPricingDisplay as pn, resolveOnColorForThemeToken as pt, normalizeCsvIds as q, resolveWholeSeriesBookingPhase as qt, buildCartDisplay as r, getLocalScheduleDate as rn, getDayOfWeek as rt, formatInterval as s, toScheduledBookingDateRange as sn, isToday as st, defineIslandPropsDecoder as t, formatLocalScheduleDate as tn, buildCalendarViewport as tt, buildProductCartItem as u, formatEventPricing as un, groupPublicEventsByRun as ut, toWholeSeriesRegistrationEvents as v, parseCurrencyCode as vn, logger as vt, toRegistrationRequestSubject as w, getBookingSuccessMessage as wt, resolveDiscountContext as x, formatBookingSubmissionPreparationError as xt, findEventByOccurrenceId as y, assertNever$2 as yn, deriveBookingFormViewState as yt, calendarWindowMonths as z, assertNever$1 as zt };
12775
+ export { addDays as $, formatBookingInstant as $t, resolveEventRegistrationScopedEvents as A, resolveBookingSiteId as At, calendarWindowPageSchema as B, clearWorkflowFeedback as Bt, resolveRegistrationTarget as C, getBookingServiceSlidingScale as Ct, getWizardStepsForContext as D, prepareBookingSubmission as Dt, getStepNumber as E, parseBookingCurrencyInputToCents as Et, calendarMonthKey as F, BOOKING_FORM_DATA_RESERVED_KEYS as Ft, buildEventRuntimeFilters as G, reportWorkflowSuccess as Gt, resolveCalendarReadProfile as H, ok as Ht, calendarPageResponseError as I, isBookingRequirementConsentFieldId as It, normalizeCsvString as J, parseMailingListVisitorSelection as Jt, getEventRuntimeFiltersKey as K, CANCELLED_SESSION_STATUS as Kt, calendarQueryKey as L, RichTextDocSchema as Lt, isSemanticSpacing as M, toSelectedCollectionOptionKind as Mt, resolveSpacing as N, projectSelectedAppointmentConsentIntoForm as Nt, buildEventCalendarListingRender as O, resolveAppointmentCheckoutVerificationState as Ot, calendarMonthDate as P, resolveSelectedAppointmentConsent as Pt, MONTH_NAMES as Q, formatBookingDateTime as Qt, calendarWindowBounds as R, isRecord$5 as Rt, resolveEventRequiresPayment as S, getBookingRedirectStateFromLocation as St, WIZARD_STEPS as T, isBookingServiceSlidingAmountInRange as Tt, createHostedBlockApiConfig as U, okWith as Ut, planCalendarMonthRanges as V, err as Vt, getBlockApiReadStage as W, reportWorkflowError as Wt, getCardOrientation as X, formatBookingDate as Xt, normalizeOptionalId as Y, addLocalScheduleDays as Yt, getContainerClass as Z, formatBookingDateParts as Zt, toRegistrationEvents as _, formatCurrencyAmount as _n, normalizeCardRole as _t, buildProductDetailDisplay as a, resolveBookingTimeZoneId as an, getWeekCalendarDays as at, findPreSelectedEvent as b, formatBookingCentsAsCurrencyInput as bt, EMPTY_COMMERCE_CART_STATE as c, toScheduledBookingDateTime as cn, shiftCalendarAnchorDate as ct, deriveCommerceCheckoutState as d, isPublicEventPricingOptionDisplayable as dn, boxBackgroundSchema as dt, formatBookingTime as en, addMonths as et, parseStoredCommerceCartState as f, publicEventPricingCurrency as fn, isCssColorLiteral as ft, getRegistrationStartAt as g, publicEventPricingType as gn, themeButtonVariantClassNames as gt, buildEventRegistrationDisplayFromScopedEvents as h, publicEventPricingStrategy as hn, themeButtonSizeClassName as ht, buildProductCardDisplay as i, parseBookingLocalDate as in, getOrderedDayNames as it, SEMANTIC_SPACING_VALUES as j, resolveDefaultBookingServiceId as jt, staticHeaderChromeRuntime as k, resolveBookingPaymentStep as kt, buildPassCartItem as l, formatBookingPriceDisplay as ln, resolveRuntimeEventDestination as lt, reduceCommerceCart as m, publicEventPricingOptions as mn, resolveTokenOrCssColorValue as mt, getShopDisplayForItems as n, getBookingLocalDateKey as nn, formatDateKey as nt, formatCommercePrice as o, toBookingTimeZone as on, isSameCalendarDay as ot, productItemKey as p, publicEventPricingDisplay as pn, resolveOnColorForThemeToken as pt, normalizeCsvIds as q, resolveWholeSeriesBookingPhase as qt, buildCartDisplay as r, getLocalScheduleDate as rn, getDayOfWeek as rt, formatInterval as s, toScheduledBookingDateRange as sn, isToday as st, defineIslandPropsDecoder as t, formatLocalScheduleDate as tn, buildCalendarViewport as tt, buildProductCartItem as u, formatEventPricing as un, groupPublicEventsByRun as ut, toWholeSeriesRegistrationEvents as v, parseCurrencyCode as vn, logger as vt, toRegistrationRequestSubject as w, getBookingSuccessMessage as wt, resolveDiscountContext as x, formatBookingSubmissionPreparationError as xt, findEventByOccurrenceId as y, assertNever$2 as yn, deriveBookingFormViewState as yt, calendarWindowMonths as z, assertNever$1 as zt };