@riverbankcms/sdk 0.144.0 → 0.146.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/{PreviewEditorSidebar-CQZNnFiM.mjs → PreviewEditorSidebar-kg2r2Fyi.mjs} +4 -4
  3. package/dist/{PreviewEditorUI-DCNxnmI0.mjs → PreviewEditorUI-sWMLp5dT.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-BCYICImX.mjs → PreviewQueryProvider-Cg51xq1w.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-BJolUbr1.mjs → SdkPreviewModeRuntime-h2ti3Hch.mjs} +688 -519
  6. package/dist/{SiteChromeCustomizeContext-CKgEpoxi.mjs → SiteChromeCustomizeContext-DEACFH9m.mjs} +3381 -2017
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +5643 -66
  8. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +513 -6
  9. package/dist/_dts/api/src/appointmentEndpointDefinitions.d.ts +49 -0
  10. package/dist/_dts/api/src/appointmentServiceCategoryEndpoints.d.ts +75 -0
  11. package/dist/_dts/api/src/appointmentServiceContracts.d.ts +80 -0
  12. package/dist/_dts/api/src/appointmentSetup.d.ts +8 -1
  13. package/dist/_dts/api/src/bookingConfig.d.ts +8 -1
  14. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +10 -26
  15. package/dist/_dts/api/src/bookingManagementEventEndpointTypes.d.ts +45 -1
  16. package/dist/_dts/api/src/clientErrorReporting.d.ts +50 -0
  17. package/dist/_dts/api/src/communications.d.ts +32 -24
  18. package/dist/_dts/api/src/contentRuntime.d.ts +3 -5
  19. package/dist/_dts/api/src/endpoints.d.ts +316 -134
  20. package/dist/_dts/api/src/event-visibility.d.ts +20 -0
  21. package/dist/_dts/api/src/eventManagementContracts.d.ts +56 -3
  22. package/dist/_dts/api/src/eventManagementEndpointDefinitions.d.ts +24 -0
  23. package/dist/_dts/api/src/eventPageWords.d.ts +19 -0
  24. package/dist/_dts/api/src/eventSeriesRegistrationEndpointDefinitions.d.ts +14 -0
  25. package/dist/_dts/api/src/index.d.ts +7 -1
  26. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
  27. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  28. package/dist/_dts/api/src/launchReadiness.d.ts +22 -2
  29. package/dist/_dts/api/src/launchRequirementPriority.d.ts +3 -0
  30. package/dist/_dts/api/src/newsletterCampaignCommandEndpoints.d.ts +13 -0
  31. package/dist/_dts/api/src/newsletterEndpointDefinitions.d.ts +30 -11
  32. package/dist/_dts/api/src/occurrenceScheduling.d.ts +10 -0
  33. package/dist/_dts/api/src/onboarding/confirmationResend.d.ts +3 -0
  34. package/dist/_dts/api/src/pageSurfaceEndpoints.d.ts +44 -0
  35. package/dist/_dts/api/src/participantMessaging.d.ts +11 -1
  36. package/dist/_dts/api/src/publicBookingService.d.ts +35 -1
  37. package/dist/_dts/api/src/publicExperience/newsletterEndpoints.d.ts +13 -0
  38. package/dist/_dts/api/src/publicNewsletterEndpointDefinitions.d.ts +58 -0
  39. package/dist/_dts/api/src/schemas/admin-observability-logs.d.ts +3 -3
  40. package/dist/_dts/api/src/sdk-event-upsert.d.ts +40 -1
  41. package/dist/_dts/api/src/sdkContracts.d.ts +3 -42
  42. package/dist/_dts/api/src/sdkCourseBooking.d.ts +30 -0
  43. package/dist/_dts/api/src/sdkEventEndpointDefinitions.d.ts +76 -0
  44. package/dist/_dts/api/src/sdkEventLifecycle.d.ts +37 -0
  45. package/dist/_dts/api/src/sdkManagedEventContracts.d.ts +18 -0
  46. package/dist/_dts/api/src/sdkPageDesign.d.ts +388 -0
  47. package/dist/_dts/api/src/sdkPageDesignEndpointDefinitions.d.ts +22 -0
  48. package/dist/_dts/api/src/sdkPullEventContracts.d.ts +46 -0
  49. package/dist/_dts/api/src/siteAddressEndpoints.d.ts +29 -0
  50. package/dist/_dts/api/src/siteManagementEndpointDefinitions.d.ts +49 -0
  51. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +4 -38
  52. package/dist/_dts/api/src/siteOnboarding.d.ts +75 -9
  53. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +1 -1
  54. package/dist/_dts/api/src/types.d.ts +8 -1
  55. package/dist/_dts/api/src/wholeSeriesRuns.d.ts +14 -0
  56. package/dist/_dts/blocks/src/PageRenderer.d.ts +4 -4
  57. package/dist/_dts/blocks/src/bindings/index.d.ts +2 -2
  58. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +24 -0
  59. package/dist/_dts/blocks/src/index.d.ts +3 -1
  60. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +10 -0
  61. package/dist/_dts/blocks/src/pageRenderJoins.d.ts +68 -0
  62. package/dist/_dts/blocks/src/pageRenderPlan.d.ts +8 -27
  63. package/dist/_dts/blocks/src/pageRenderPreparation.d.ts +7 -4
  64. package/dist/_dts/blocks/src/pageRendererBoundaries.d.ts +40 -23
  65. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +3 -1
  66. package/dist/_dts/blocks/src/server.d.ts +1 -1
  67. package/dist/_dts/blocks/src/system/blocks/appointment-services.d.ts +2 -0
  68. package/dist/_dts/blocks/src/system/blocks/events/eventSelectionFields.d.ts +2 -2
  69. package/dist/_dts/blocks/src/system/blocks/events/shared/calendarWindow.d.ts +1 -1
  70. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +27 -5
  71. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +14 -1
  72. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +2 -2
  73. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +47 -47
  74. package/dist/_dts/blocks/src/system/icons/social.d.ts +1 -1
  75. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +29 -3
  76. package/dist/_dts/blocks/src/system/registry.d.ts +1 -1
  77. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +8 -1
  78. package/dist/_dts/blocks/src/system/runtime/nodes/appointment-services.d.ts +22 -2
  79. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +3 -1
  80. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +57 -2
  81. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.service-categories.d.ts +29 -0
  82. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.service-choices.d.ts +13 -0
  83. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +3 -3
  84. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +13 -1
  85. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.d.ts +2 -1
  86. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +23 -7
  87. package/dist/_dts/blocks/src/system/runtime/nodes/form.fields.d.ts +5 -0
  88. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.block-submission.d.ts +36 -0
  89. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.client.d.ts +1 -1
  90. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +6 -1
  91. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.parts.d.ts +46 -0
  92. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.submission.d.ts +20 -1
  93. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +2 -1
  94. package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +2 -1
  95. package/dist/_dts/blocks/src/system/runtime/shared/components/CheckboxChoice.d.ts +18 -0
  96. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +1 -0
  97. package/dist/_dts/content-editor/src/index.d.ts +1 -0
  98. package/dist/_dts/content-editor/src/primitives/previewEditableOutline.d.ts +2 -0
  99. package/dist/_dts/content-editor/src/ui/editorBlockEquality.d.ts +3 -0
  100. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +3 -3
  101. package/dist/_dts/content-model/src/content-types/schema.d.ts +1 -1
  102. package/dist/_dts/core/src/appointment-service-categories.d.ts +108 -0
  103. package/dist/_dts/core/src/block-content-identity.d.ts +5 -0
  104. package/dist/_dts/core/src/editor-state.d.ts +2 -1
  105. package/dist/_dts/core/src/index.d.ts +2 -0
  106. package/dist/_dts/core/src/mailing-list-submission.d.ts +3 -1
  107. package/dist/_dts/core/src/public-event-booking-availability.d.ts +20 -1
  108. package/dist/_dts/core/src/public-profile.d.ts +12 -1
  109. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +711 -242
  110. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +3 -0
  111. package/dist/_dts/editor-blocks/src/block-editor/EmptyState.d.ts +13 -1
  112. package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +2 -2
  113. package/dist/_dts/editor-blocks/src/index.d.ts +1 -0
  114. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/loaders.d.ts +16 -1
  115. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/types.d.ts +13 -0
  116. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/utils.d.ts +29 -0
  117. package/dist/_dts/preview-next/src/client/blocks/BoundaryControl.d.ts +7 -2
  118. package/dist/_dts/preview-next/src/client/blocks/composer/mergeDrafts.d.ts +1 -1
  119. package/dist/_dts/preview-next/src/client/blocks/composer/types.d.ts +3 -3
  120. package/dist/_dts/preview-next/src/client/blocks/previewProjection/applyPreviewProjections.d.ts +1 -3
  121. package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -2
  122. package/dist/_dts/preview-next/src/client/blocks/previewProjection/types.d.ts +2 -2
  123. package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +1 -1
  124. package/dist/_dts/sdk/src/client/runtimeCacheKeys.d.ts +8 -0
  125. package/dist/_dts/sdk/src/client/types.d.ts +1 -1
  126. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  127. package/dist/_dts/sdk/src/contracts/page.d.ts +7 -2
  128. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +5 -0
  129. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +2 -2
  130. package/dist/_dts/sdk/src/next/renderSdkContent.d.ts +0 -1
  131. package/dist/_dts/sdk/src/public-api/contracts.d.ts +6 -8
  132. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +4 -4
  133. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +4 -4
  134. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +7 -2
  135. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +5 -2
  136. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +6 -1
  137. package/dist/_dts/sdk/src/rendering/helpers/templateContent.d.ts +2 -0
  138. package/dist/_dts/sdk/src/rendering/hooks/useContent.d.ts +6 -2
  139. package/dist/_dts/sdk/src/rendering/hooks/usePage.d.ts +5 -1
  140. package/dist/_dts/sdk/src/version.d.ts +1 -1
  141. package/dist/_dts/surfaces/src/index.d.ts +10 -0
  142. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  143. package/dist/_dts/theme-core/src/inputs/checkable.d.ts +42 -0
  144. package/dist/_dts/theme-core/src/inputs/inputGroup.d.ts +19 -0
  145. package/dist/_dts/theme-core/src/layout/boundaryCss.d.ts +3 -0
  146. package/dist/_dts/theme-core/src/site-styles/compositionBudget.d.ts +8 -0
  147. package/dist/_dts/theme-core/src/site-styles/contentTemplateRuntimeCompiler.d.ts +3 -2
  148. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +1 -3
  149. package/dist/_dts/theme-core/src/site-styles/generatedDesignPipeline.d.ts +3 -0
  150. package/dist/_dts/theme-core/src/site-styles/index.d.ts +3 -0
  151. package/dist/_dts/theme-core/src/site-styles/joinTreatment.d.ts +132 -0
  152. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorBoundaries.d.ts +31 -0
  153. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +33 -29
  154. package/dist/_dts/theme-core/src/site-styles/pageDesignIntent.d.ts +4 -4
  155. package/dist/_dts/theme-core/src/site-styles/pageFlowPresets.d.ts +36 -0
  156. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +4 -10
  157. package/dist/_dts/theme-core/src/site-styles/rawStyleFields.d.ts +17 -4
  158. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +20 -74
  159. package/dist/_dts/theme-core/src/site-styles/sectionBoundaryComposition.d.ts +95 -0
  160. package/dist/_dts/theme-core/src/site-styles/sectionTransitions.d.ts +80 -518
  161. package/dist/_dts/theme-core/src/site-styles/siteStyleBlockPolicies.d.ts +9 -4
  162. package/dist/_dts/theme-core/src/site-styles/transitionCatalogue.d.ts +320 -0
  163. package/dist/_dts/theme-core/src/site-styles/types.d.ts +3 -18
  164. package/dist/_dts/ui/src/navigation-tabs.d.ts +2 -1
  165. package/dist/client/{BookingConsentAgreement-DoAILrkN.mjs → BookingConsentAgreement-BQKL045f.mjs} +2 -2
  166. package/dist/client/CheckboxChoice--W2n6yKs.mjs +24 -0
  167. package/dist/client/{DiscountCodeDisclosure-X528hUTf.mjs → DiscountCodeDisclosure-CsOtjFY7.mjs} +1 -1
  168. package/dist/client/{EventCombined.client-DSBVwq5m.mjs → EventCombined.client-BdRjVbhH.mjs} +6 -6
  169. package/dist/client/{EventListing.client-DmFAX7Vb.mjs → EventListing.client-DBxC6xOU.mjs} +2 -2
  170. package/dist/client/{LeafletStaticMap-BAqXdfhq.mjs → LeafletStaticMap-mHEJKrTs.mjs} +1 -1
  171. package/dist/client/{ThemedButton-BwNFVwi4.mjs → ThemedButton-CE5KYT6z.mjs} +1 -1
  172. package/dist/client/{accordion-DRhMdkbd.mjs → accordion-BEQNSptH.mjs} +1 -1
  173. package/dist/client/{bookingForm-iJ_nCsNF.mjs → bookingForm-AMr-s5vw.mjs} +168 -95
  174. package/dist/client/bookings.mjs +239 -110
  175. package/dist/client/{carousel-D8zuffZr.mjs → carousel-Bbt_QgJy.mjs} +1 -1
  176. package/dist/client/{cart-DeMGJViN.mjs → cart-CnWi30zJ.mjs} +3 -3
  177. package/dist/client/{checkout-DXc06Km2.mjs → checkout-f3nkWgd4.mjs} +3 -3
  178. package/dist/client/client.mjs +3222 -1612
  179. package/dist/client/{context-CDLCfDep.mjs → context-Bc8T6pCe.mjs} +1 -1
  180. package/dist/client/{dates-ClFx7Epy.mjs → dates-DUsCEzLb.mjs} +2 -3
  181. package/dist/client/{eventCalendar-BaGpnOGN.mjs → eventCalendar-CKwgXui5.mjs} +9 -9
  182. package/dist/client/{eventCombined-ywONOx2m.mjs → eventCombined-CBAOSTGR.mjs} +4 -4
  183. package/dist/client/{eventDetails-B2LlOTYY.mjs → eventDetails-Dh-_WiBD.mjs} +4 -4
  184. package/dist/client/{eventListing-CMgxWpqP.mjs → eventListing-CA3frIH5.mjs} +4 -4
  185. package/dist/client/{eventRegistration-BarLDNHR.mjs → eventRegistration-BHtsgdcg.mjs} +21 -22
  186. package/dist/client/{form-BjqKaBJ7.mjs → form-C2h3YAcg.mjs} +135 -104
  187. package/dist/client/{headerSection-CP4XDwz1.mjs → headerSection-lwMuMTH9.mjs} +3 -3
  188. package/dist/client/hooks.mjs +1023 -148
  189. package/dist/client/{locationMap-C5gW-d-w.mjs → locationMap-DJ2bLODV.mjs} +3 -3
  190. package/dist/client/{newsletterForm-afXlVSA0.mjs → newsletterForm-8Pu5K32g.mjs} +225 -102
  191. package/dist/client/{pricing-Bl1CAl28.mjs → pricing-HHx3IgBz.mjs} +1 -1
  192. package/dist/client/{productDetail-CvQ3jWQe.mjs → productDetail-C_1odnAf.mjs} +3 -3
  193. package/dist/client/{productList-U874PGO7.mjs → productList-CtCv-Nmx.mjs} +3 -3
  194. package/dist/client/{propsDecoder-DPXtCZWP.mjs → propsDecoder-Dcgsncxb.mjs} +111 -55
  195. package/dist/client/rendering/client.mjs +1389 -722
  196. package/dist/client/rendering/islands.mjs +17 -17
  197. package/dist/client/rendering.mjs +3136 -1400
  198. package/dist/client/{routeIslandApiConfig-NGYiUWXu.mjs → routeIslandApiConfig-CWLP7wu3.mjs} +1 -1
  199. package/dist/client/{scrollToBlock-0-C3DVhK.mjs → scrollToBlock-BNgaEUpo.mjs} +1 -1
  200. package/dist/client/{shop-BXjXhM9P.mjs → shop-DQXrQ8kJ.mjs} +7 -7
  201. package/dist/client/{shop-commerce-BZ6UlWJ7.mjs → shop-commerce-B88zmWWo.mjs} +6 -6
  202. package/dist/client/{shop-commerce-store-DlSBXb3D.mjs → shop-commerce-store-DtSfkKuX.mjs} +1 -1
  203. package/dist/client/{shopShared-kkEOiLPA.mjs → shopShared-cuaONpkJ.mjs} +4 -4
  204. package/dist/client/{useEventFilters-zvnnE1ro.mjs → useEventFilters-Bukew6Gb.mjs} +6 -6
  205. package/dist/preview-next/before-render.mjs +500 -165
  206. package/dist/preview-next/client/runtime.mjs +4 -4
  207. package/dist/preview-next/editor-base.css +11 -0
  208. package/dist/preview-next/keepAlive.mjs +460 -165
  209. package/dist/preview-next/middleware.mjs +461 -165
  210. package/dist/{previewAuthStore-JA6-I_sL.mjs → previewAuthStore-h5IgbSp4.mjs} +485 -165
  211. package/dist/{sdk-runtime-DFJlQt3q.mjs → sdk-runtime-DTc1uIXn.mjs} +2 -2
  212. package/dist/{separator-o8GHb1xh.mjs → separator-BpHS1KZK.mjs} +1 -1
  213. package/dist/server/components.mjs +3088 -1307
  214. package/dist/server/config-validation.mjs +927 -109
  215. package/dist/server/config.mjs +927 -109
  216. package/dist/server/data.mjs +939 -110
  217. package/dist/server/index.mjs +513 -169
  218. package/dist/server/next.mjs +2874 -1195
  219. package/dist/server/page-converter.mjs +420 -79
  220. package/dist/server/prebuild.mjs +1 -1
  221. package/dist/server/rendering/server.mjs +3071 -1289
  222. package/dist/server/rendering.mjs +3169 -1350
  223. package/dist/server/routing.mjs +1085 -159
  224. package/dist/server/server.mjs +1042 -291
  225. package/dist/server/theme-bridge.mjs +1658 -137
  226. package/dist/server/theme.mjs +6 -4
  227. package/dist/styles/index.css +186 -65
  228. package/package.json +2 -1
@@ -898,15 +898,6 @@ function parseMailingListContentVersionId(value) {
898
898
  const parsed = parseContentVersionId(value);
899
899
  return parsed.ok ? parsed.value : null;
900
900
  }
901
- function buildMailingListSignupBlockSourceRef(blockId, contentVersionId) {
902
- const parsedBlockId = parseMailingListBlockId(blockId);
903
- const parsedContentVersionId = parseMailingListContentVersionId(contentVersionId);
904
- return parsedBlockId !== null && parsedContentVersionId !== null ? {
905
- tag: "block_ref",
906
- blockId: parsedBlockId,
907
- contentVersionId: parsedContentVersionId
908
- } : null;
909
- }
910
901
  //#endregion
911
902
  //#region ../core/src/secret.ts
912
903
  /**
@@ -6669,6 +6660,15 @@ function asSiteStyleId(value) {
6669
6660
  function asDesignSystemTemplateId(value) {
6670
6661
  return brandNonEmptyString(value, "DesignSystemTemplateId");
6671
6662
  }
6663
+ function toNonEmptyReadonlyArray(values) {
6664
+ const [first, ...rest] = values;
6665
+ return first === void 0 ? null : [first, ...rest];
6666
+ }
6667
+ function requireNonEmptyReadonlyArray(values, message = "Expected a non-empty array.") {
6668
+ const result = toNonEmptyReadonlyArray(values);
6669
+ if (!result) throw new Error(message);
6670
+ return result;
6671
+ }
6672
6672
  function makeBoundaryId(previousBlockId, nextBlockId) {
6673
6673
  return asDesignBoundaryId(`boundary:${encodeURIComponent(previousBlockId)}:${encodeURIComponent(nextBlockId)}`);
6674
6674
  }
@@ -6871,16 +6871,18 @@ const themeV2RuntimeStyleFieldNames = [
6871
6871
  "_frameStyles",
6872
6872
  "_sectionStyles",
6873
6873
  "_containerStyles",
6874
- "_cardStyles",
6875
- "_transitionStyles",
6876
- "styleGroup"
6874
+ "_cardStyles"
6877
6875
  ];
6878
6876
  const themeV2BlockSpecificRawStyleFieldNames = [
6879
6877
  "_contentCardStyles",
6880
6878
  "_heroLayoutStyles",
6881
6879
  "_textCardStyles"
6882
6880
  ];
6883
- const themeV2NormalEditorRawStyleFieldNames = [...themeV2RuntimeStyleFieldNames, ...themeV2BlockSpecificRawStyleFieldNames];
6881
+ const themeV2NormalEditorRawStyleFieldNames = [
6882
+ ...themeV2RuntimeStyleFieldNames,
6883
+ ...themeV2BlockSpecificRawStyleFieldNames,
6884
+ "styleGroup"
6885
+ ];
6884
6886
  new Set(themeV2NormalEditorRawStyleFieldNames);
6885
6887
  [...themeV2RuntimeStyleFieldNames, ...themeV2BlockSpecificRawStyleFieldNames];
6886
6888
  const pageDesignEditorBackgroundOverrideOwner = "page-design-editor";
@@ -8005,6 +8007,7 @@ const publicEventLoaderQuerySchemaShape = {
8005
8007
  seriesSlug: z.string().optional(),
8006
8008
  includeOccurrenceId: z.string().optional(),
8007
8009
  readIntent: z.string().optional(),
8010
+ detailAdmission: z.string().optional(),
8008
8011
  detailLevel: z.string().optional(),
8009
8012
  readProfile: z.string().optional()
8010
8013
  };
@@ -8171,11 +8174,11 @@ const publicEventBookingAvailabilitySchema = z.discriminatedUnion("kind", [z.obj
8171
8174
  "series_archived",
8172
8175
  "parent_archived",
8173
8176
  "parent_inconsistent",
8174
- "not_public",
8175
8177
  "already_started",
8176
8178
  "enrollment_closed"
8177
8179
  ])
8178
8180
  })]);
8181
+ const publicEventBookingClosedDetailSchema = z.discriminatedUnion("kind", [z.object({ kind: z.literal("opensSoon") }), z.object({ kind: z.literal("paused") })]);
8179
8182
  const publicRunSessionSchema = z.object({
8180
8183
  occurrenceId: z.string(),
8181
8184
  startsAt: z.string(),
@@ -8220,6 +8223,7 @@ const publicEventBaseSchema = z.object({
8220
8223
  destination: publicEventDestinationSchema,
8221
8224
  requiresRegistration: z.boolean(),
8222
8225
  bookingAvailability: publicEventBookingAvailabilitySchema,
8226
+ bookingClosedDetail: publicEventBookingClosedDetailSchema.optional(),
8223
8227
  deliveryMode: z.enum([
8224
8228
  "in_person",
8225
8229
  "online",
@@ -8504,6 +8508,75 @@ const calendarWindowPageSchema = z.discriminatedUnion("kind", [z.object({
8504
8508
  nextCursor: calendarSourceCursorSchema
8505
8509
  })]);
8506
8510
  //#endregion
8511
+ //#region ../api/src/defineEndpointDefinitions.ts
8512
+ /**
8513
+ * Validates extracted endpoint descriptors while preserving each literal path,
8514
+ * method, and parameter contract for the typed URL builders.
8515
+ */
8516
+ function defineEndpointDefinitions(definitions) {
8517
+ return definitions;
8518
+ }
8519
+ //#endregion
8520
+ //#region ../api/src/publicNewsletterEndpointDefinitions.ts
8521
+ const PUBLIC_NEWSLETTER_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
8522
+ subscribeNewsletter: {
8523
+ path: "/public/sites/{siteId}/newsletter/subscribe",
8524
+ method: "POST",
8525
+ tags: ["public-newsletter-{siteId}"],
8526
+ auth: "public",
8527
+ responseKind: "json"
8528
+ },
8529
+ confirmNewsletter: {
8530
+ path: "/public/sites/{siteId}/newsletter/confirm/{token}",
8531
+ method: "GET",
8532
+ tags: ["public-newsletter-{siteId}"],
8533
+ auth: "public",
8534
+ responseKind: "text"
8535
+ },
8536
+ unsubscribeNewsletter: {
8537
+ path: "/public/sites/{siteId}/newsletter/unsubscribe/{token}",
8538
+ method: "GET",
8539
+ tags: ["public-newsletter-{siteId}"],
8540
+ auth: "public",
8541
+ responseKind: "text"
8542
+ },
8543
+ unsubscribeNewsletterPost: {
8544
+ path: "/public/sites/{siteId}/newsletter/unsubscribe/{token}",
8545
+ method: "POST",
8546
+ tags: ["public-newsletter-{siteId}"],
8547
+ auth: "public",
8548
+ responseKind: "text"
8549
+ },
8550
+ confirmNewsletterPost: {
8551
+ path: "/public/sites/{siteId}/newsletter/confirm/{token}",
8552
+ method: "POST",
8553
+ tags: ["public-newsletter-{siteId}"],
8554
+ auth: "public",
8555
+ responseKind: "text"
8556
+ },
8557
+ getNewsletterPreferences: {
8558
+ path: "/public/sites/{siteId}/newsletter/preferences/{token}",
8559
+ method: "GET",
8560
+ tags: ["public-newsletter-{siteId}"],
8561
+ auth: "public",
8562
+ responseKind: "text"
8563
+ },
8564
+ saveNewsletterPreferences: {
8565
+ path: "/public/sites/{siteId}/newsletter/preferences/{token}",
8566
+ method: "POST",
8567
+ tags: ["public-newsletter-{siteId}"],
8568
+ auth: "public",
8569
+ responseKind: "text"
8570
+ },
8571
+ getNewsletterArchive: {
8572
+ path: "/public/sites/{siteId}/newsletter/archive/{token}",
8573
+ method: "GET",
8574
+ tags: ["public-newsletter-{siteId}"],
8575
+ auth: "public",
8576
+ responseKind: "text"
8577
+ }
8578
+ });
8579
+ //#endregion
8507
8580
  //#region ../api/src/apiEndpointTypes.ts
8508
8581
  function allowedDemoMutationPolicy() {
8509
8582
  return {
@@ -8595,17 +8668,85 @@ const SDK_ENTRY_READ_ENDPOINTS = {
8595
8668
  }
8596
8669
  };
8597
8670
  //#endregion
8598
- //#region ../api/src/defineEndpointDefinitions.ts
8599
- /**
8600
- * Validates extracted endpoint descriptors while preserving each literal path,
8601
- * method, and parameter contract for the typed URL builders.
8602
- */
8603
- function defineEndpointDefinitions(definitions) {
8604
- return definitions;
8605
- }
8606
- //#endregion
8607
8671
  //#region ../api/src/appointmentEndpointDefinitions.ts
8608
8672
  const APPOINTMENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
8673
+ ...defineEndpointDefinitions({
8674
+ listGroupedAppointmentServices: {
8675
+ path: "/sites/{siteId}/bookings/services/grouped",
8676
+ method: "GET",
8677
+ auth: "user",
8678
+ responseKind: "json",
8679
+ errors: ["server:internal_error"]
8680
+ },
8681
+ reorderAppointmentServices: {
8682
+ path: "/sites/{siteId}/bookings/services/order",
8683
+ method: "PUT",
8684
+ auth: "user",
8685
+ responseKind: "json",
8686
+ errors: [
8687
+ "validation:invalid_input",
8688
+ "auth:forbidden",
8689
+ "resource:not_found",
8690
+ "resource:conflict",
8691
+ "server:internal_error"
8692
+ ]
8693
+ },
8694
+ listAppointmentServiceCategories: {
8695
+ path: "/sites/{siteId}/bookings/service-categories",
8696
+ method: "GET",
8697
+ auth: "user",
8698
+ responseKind: "json",
8699
+ errors: ["server:internal_error"]
8700
+ },
8701
+ createAppointmentServiceCategory: {
8702
+ path: "/sites/{siteId}/bookings/service-categories",
8703
+ method: "POST",
8704
+ auth: "user",
8705
+ responseKind: "json",
8706
+ errors: [
8707
+ "validation:invalid_input",
8708
+ "auth:forbidden",
8709
+ "resource:conflict",
8710
+ "server:internal_error"
8711
+ ]
8712
+ },
8713
+ updateAppointmentServiceCategory: {
8714
+ path: "/sites/{siteId}/bookings/service-categories/{categoryId}",
8715
+ method: "PUT",
8716
+ auth: "user",
8717
+ responseKind: "json",
8718
+ errors: [
8719
+ "validation:invalid_input",
8720
+ "auth:forbidden",
8721
+ "resource:not_found",
8722
+ "resource:conflict",
8723
+ "server:internal_error"
8724
+ ]
8725
+ },
8726
+ deleteAppointmentServiceCategory: {
8727
+ path: "/sites/{siteId}/bookings/service-categories/{categoryId}",
8728
+ method: "DELETE",
8729
+ auth: "user",
8730
+ responseKind: "json",
8731
+ errors: [
8732
+ "auth:forbidden",
8733
+ "resource:not_found",
8734
+ "server:internal_error"
8735
+ ]
8736
+ },
8737
+ reorderAppointmentServiceCategories: {
8738
+ path: "/sites/{siteId}/bookings/service-categories/order",
8739
+ method: "PUT",
8740
+ auth: "user",
8741
+ responseKind: "json",
8742
+ errors: [
8743
+ "validation:invalid_input",
8744
+ "auth:forbidden",
8745
+ "resource:conflict",
8746
+ "server:internal_error"
8747
+ ]
8748
+ }
8749
+ }),
8609
8750
  listAppointmentResources: {
8610
8751
  path: "/sites/{siteId}/bookings/resources",
8611
8752
  method: "GET",
@@ -9316,6 +9457,13 @@ const EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS = defineEndpointDefinitions
9316
9457
  errors: [],
9317
9458
  responseKind: "blob"
9318
9459
  },
9460
+ exportEventOfferingRegistrationsCsv: {
9461
+ path: "/sites/{siteId}/bookings/event-offerings/{eventOfferingId}/registrations/export.csv",
9462
+ method: "GET",
9463
+ auth: "user",
9464
+ errors: [],
9465
+ responseKind: "blob"
9466
+ },
9319
9467
  updateEventSeriesRegistration: {
9320
9468
  path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/{registrationId}",
9321
9469
  method: "PATCH",
@@ -9326,6 +9474,19 @@ const EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS = defineEndpointDefinitions
9326
9474
  "resource:not_found",
9327
9475
  "server:internal_error"
9328
9476
  ]
9477
+ },
9478
+ saveEventSeriesRegistrationAnswers: {
9479
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/{registrationId}/answers",
9480
+ method: "PUT",
9481
+ auth: "user",
9482
+ responseKind: "json",
9483
+ errors: [
9484
+ "validation:invalid_input",
9485
+ "auth:forbidden",
9486
+ "resource:not_found",
9487
+ "resource:conflict",
9488
+ "server:internal_error"
9489
+ ]
9329
9490
  }
9330
9491
  });
9331
9492
  //#endregion
@@ -9746,46 +9907,185 @@ const NEWSLETTER_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
9746
9907
  responseKind: "json",
9747
9908
  demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
9748
9909
  },
9749
- testSendNewsletterCampaign: {
9750
- path: "/sites/{siteId}/newsletter/campaigns/{campaignId}/test-send",
9910
+ scheduleNewsletterCampaign: {
9911
+ path: "/sites/{siteId}/newsletter/campaigns/{campaignId}/schedule",
9751
9912
  method: "POST",
9752
9913
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
9753
9914
  auth: "user",
9754
9915
  responseKind: "json",
9755
9916
  demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
9756
9917
  },
9757
- listNewsletterSendJobs: {
9758
- path: "/sites/{siteId}/newsletter/jobs",
9759
- method: "GET",
9918
+ unscheduleNewsletterCampaign: {
9919
+ path: "/sites/{siteId}/newsletter/campaigns/{campaignId}/unschedule",
9920
+ method: "POST",
9760
9921
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
9761
9922
  auth: "user",
9923
+ responseKind: "json",
9924
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
9925
+ },
9926
+ stopNewsletterCampaign: {
9927
+ path: "/sites/{siteId}/newsletter/campaigns/{campaignId}/stop",
9928
+ method: "POST",
9929
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
9930
+ auth: "user",
9931
+ responseKind: "json",
9932
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
9933
+ },
9934
+ testSendNewsletterCampaign: {
9935
+ path: "/sites/{siteId}/newsletter/campaigns/{campaignId}/test-send",
9936
+ method: "POST",
9937
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
9938
+ auth: "user",
9939
+ responseKind: "json",
9940
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
9941
+ }
9942
+ });
9943
+ //#endregion
9944
+ //#region ../api/src/sdkEventEndpointDefinitions.ts
9945
+ /**
9946
+ * The SDK's Event graph: the Events themselves and the occurrences of one run.
9947
+ * Extracted from `endpoints.ts` so this family can be read, and added to, on
9948
+ * its own. New entries here must declare `errors`; the
9949
+ * require-api-endpoint-errors lint enforces that here as in endpoints.ts.
9950
+ */
9951
+ const SDK_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
9952
+ sdkListEvents: {
9953
+ path: "/sdk/{siteId}/events",
9954
+ method: "GET",
9955
+ auth: "service",
9762
9956
  responseKind: "json"
9763
9957
  },
9764
- retryNewsletterSendJob: {
9765
- path: "/sites/{siteId}/newsletter/jobs/{jobId}/retry",
9958
+ sdkUpsertEvent: {
9959
+ path: "/sdk/{siteId}/events",
9766
9960
  method: "POST",
9961
+ auth: "service",
9962
+ responseKind: "json",
9767
9963
  errors: [
9768
9964
  "validation:invalid_input",
9769
9965
  "resource:not_found",
9770
- "auth:forbidden",
9966
+ "resource:conflict",
9967
+ "billing:plan_limit_exceeded",
9771
9968
  "server:internal_error"
9772
- ],
9773
- tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
9774
- auth: "user",
9969
+ ]
9970
+ },
9971
+ sdkGetEvent: {
9972
+ path: "/sdk/{siteId}/events/{identifier}",
9973
+ method: "GET",
9974
+ auth: "service",
9775
9975
  responseKind: "json"
9776
9976
  },
9777
- cancelNewsletterSendJob: {
9778
- path: "/sites/{siteId}/newsletter/jobs/{jobId}/cancel",
9977
+ sdkDeleteEvent: {
9978
+ path: "/sdk/{siteId}/events/{identifier}",
9979
+ method: "DELETE",
9980
+ auth: "service",
9981
+ responseKind: "json",
9982
+ errors: [
9983
+ "resource:not_found",
9984
+ "resource:conflict",
9985
+ "server:internal_error"
9986
+ ]
9987
+ },
9988
+ sdkTakeEventOffline: {
9989
+ path: "/sdk/{siteId}/events/{identifier}/lifecycle",
9779
9990
  method: "POST",
9991
+ auth: "service",
9992
+ responseKind: "json",
9780
9993
  errors: [
9994
+ "resource:not_found",
9781
9995
  "validation:invalid_input",
9996
+ "resource:conflict",
9997
+ "server:internal_error"
9998
+ ]
9999
+ },
10000
+ sdkListEventOccurrences: {
10001
+ path: "/sdk/{siteId}/events/{identifier}/runs/{runIdentifier}/occurrences",
10002
+ method: "GET",
10003
+ auth: "service",
10004
+ responseKind: "json",
10005
+ errors: [
9782
10006
  "resource:not_found",
9783
- "auth:forbidden",
10007
+ "validation:invalid_input",
9784
10008
  "server:internal_error"
9785
- ],
9786
- tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
9787
- auth: "user",
9788
- responseKind: "json"
10009
+ ]
10010
+ },
10011
+ sdkAddEventOccurrence: {
10012
+ path: "/sdk/{siteId}/events/{identifier}/runs/{runIdentifier}/occurrences",
10013
+ method: "POST",
10014
+ auth: "service",
10015
+ responseKind: "json",
10016
+ errors: [
10017
+ "resource:not_found",
10018
+ "validation:invalid_input",
10019
+ "resource:conflict",
10020
+ "server:internal_error"
10021
+ ]
10022
+ },
10023
+ sdkUpdateEventOccurrence: {
10024
+ path: "/sdk/{siteId}/events/{identifier}/runs/{runIdentifier}/occurrences/{occurrenceId}",
10025
+ method: "PATCH",
10026
+ auth: "service",
10027
+ responseKind: "json",
10028
+ errors: [
10029
+ "resource:not_found",
10030
+ "validation:invalid_input",
10031
+ "resource:conflict",
10032
+ "server:internal_error"
10033
+ ]
10034
+ },
10035
+ sdkCancelEventOccurrence: {
10036
+ path: "/sdk/{siteId}/events/{identifier}/runs/{runIdentifier}/occurrences/{occurrenceId}/cancel",
10037
+ method: "POST",
10038
+ auth: "service",
10039
+ responseKind: "json",
10040
+ errors: [
10041
+ "resource:not_found",
10042
+ "resource:conflict",
10043
+ "server:internal_error"
10044
+ ]
10045
+ },
10046
+ sdkDeleteEventOccurrence: {
10047
+ path: "/sdk/{siteId}/events/{identifier}/runs/{runIdentifier}/occurrences/{occurrenceId}",
10048
+ method: "DELETE",
10049
+ auth: "service",
10050
+ responseKind: "json",
10051
+ errors: [
10052
+ "resource:not_found",
10053
+ "resource:conflict",
10054
+ "server:internal_error"
10055
+ ]
10056
+ }
10057
+ });
10058
+ //#endregion
10059
+ //#region ../api/src/sdkPageDesignEndpointDefinitions.ts
10060
+ /**
10061
+ * SDK management endpoints for a page's draft design (issue 1497), spread into
10062
+ * `ENDPOINT_DEFINITIONS` like the other endpoint-definition modules. New
10063
+ * entries here must declare `errors`, which the require-api-endpoint-errors
10064
+ * lint enforces.
10065
+ */
10066
+ const SDK_PAGE_DESIGN_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
10067
+ sdkGetPageDesign: {
10068
+ path: "/sdk/{siteId}/pages/{identifier}/design",
10069
+ method: "GET",
10070
+ auth: "service",
10071
+ responseKind: "json",
10072
+ errors: [
10073
+ "resource:not_found",
10074
+ "validation:invalid_input",
10075
+ "server:internal_error"
10076
+ ]
10077
+ },
10078
+ sdkSavePageDesign: {
10079
+ path: "/sdk/{siteId}/pages/{identifier}/design",
10080
+ method: "POST",
10081
+ auth: "service",
10082
+ responseKind: "json",
10083
+ errors: [
10084
+ "resource:not_found",
10085
+ "validation:invalid_input",
10086
+ "resource:conflict",
10087
+ "server:internal_error"
10088
+ ]
9789
10089
  }
9790
10090
  });
9791
10091
  //#endregion
@@ -10033,6 +10333,45 @@ const SITE_API_KEY_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
10033
10333
  }
10034
10334
  });
10035
10335
  //#endregion
10336
+ //#region ../api/src/siteManagementEndpointDefinitions.ts
10337
+ const SITE_MANAGEMENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
10338
+ createSite: {
10339
+ path: "/sites/manage",
10340
+ method: "POST",
10341
+ tags: ["site"],
10342
+ auth: "user",
10343
+ responseKind: "json"
10344
+ },
10345
+ updateSite: {
10346
+ path: "/sites/manage",
10347
+ method: "PUT",
10348
+ tags: ["site"],
10349
+ auth: "user",
10350
+ responseKind: "json"
10351
+ },
10352
+ changeSiteAddress: {
10353
+ path: "/sites/{siteId}/address",
10354
+ method: "PUT",
10355
+ auth: "user",
10356
+ responseKind: "json",
10357
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED
10358
+ },
10359
+ getSiteAddressAvailability: {
10360
+ path: "/sites/{siteId}/address/availability",
10361
+ method: "GET",
10362
+ auth: "user",
10363
+ responseKind: "json"
10364
+ },
10365
+ deleteSite: {
10366
+ path: "/sites/{siteId}",
10367
+ method: "DELETE",
10368
+ tags: ["site", "site-{siteId}"],
10369
+ auth: "user",
10370
+ responseKind: "json",
10371
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
10372
+ }
10373
+ });
10374
+ //#endregion
10036
10375
  //#region ../api/src/eventManagementEndpointDefinitions.ts
10037
10376
  const EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
10038
10377
  listEvents: {
@@ -10080,6 +10419,28 @@ const EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
10080
10419
  "server:internal_error"
10081
10420
  ]
10082
10421
  },
10422
+ /**
10423
+ * The web address of an event's own page. A course page belongs to the
10424
+ * event itself, so its address is written here rather than through a run.
10425
+ */
10426
+ updateEventAddress: {
10427
+ path: "/sites/{siteId}/bookings/events/{eventId}/address",
10428
+ method: "PATCH",
10429
+ tags: [
10430
+ "site-{siteId}",
10431
+ "event-series-{siteId}",
10432
+ TAG_TEMPLATES.siteRoutableContent,
10433
+ TAG_TEMPLATES.siteRedirects
10434
+ ],
10435
+ auth: "user",
10436
+ responseKind: "json",
10437
+ errors: [
10438
+ "validation:invalid_input",
10439
+ "resource:not_found",
10440
+ "resource:conflict",
10441
+ "server:internal_error"
10442
+ ]
10443
+ },
10083
10444
  createWholeSeriesRun: {
10084
10445
  path: "/sites/{siteId}/bookings/events/{eventId}/runs",
10085
10446
  method: "POST",
@@ -10106,6 +10467,20 @@ const EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
10106
10467
  "server:internal_error"
10107
10468
  ]
10108
10469
  },
10470
+ updateCourseBookingSettings: {
10471
+ path: "/sites/{siteId}/bookings/events/{eventId}/booking-settings",
10472
+ method: "PATCH",
10473
+ tags: ["site-{siteId}", "event-series-{siteId}"],
10474
+ auth: "user",
10475
+ responseKind: "json",
10476
+ errors: [
10477
+ "validation:invalid_input",
10478
+ "auth:forbidden",
10479
+ "resource:not_found",
10480
+ "resource:conflict",
10481
+ "server:internal_error"
10482
+ ]
10483
+ },
10109
10484
  cancelWholeSeriesRun: {
10110
10485
  path: "/sites/{siteId}/bookings/events/{eventId}/runs/{runId}/cancellation",
10111
10486
  method: "POST",
@@ -10118,6 +10493,28 @@ const EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
10118
10493
  "resource:conflict",
10119
10494
  "server:internal_error"
10120
10495
  ]
10496
+ },
10497
+ /**
10498
+ * The Content tab's one write: the short introduction, image and
10499
+ * description of an event's page, published without its layout.
10500
+ */
10501
+ saveEventPageWords: {
10502
+ path: "/sites/{siteId}/page-surfaces/{pageSurfaceId}/words",
10503
+ method: "PUT",
10504
+ tags: [
10505
+ TAG_TEMPLATES.siteCollection,
10506
+ TAG_TEMPLATES.siteRoutableContent,
10507
+ TAG_TEMPLATES.pageSurfaceById
10508
+ ],
10509
+ auth: "user",
10510
+ responseKind: "json",
10511
+ errors: [
10512
+ "auth:forbidden",
10513
+ "validation:invalid_input",
10514
+ "resource:not_found",
10515
+ "resource:conflict",
10516
+ "server:internal_error"
10517
+ ]
10121
10518
  }
10122
10519
  });
10123
10520
  //#endregion
@@ -10550,18 +10947,56 @@ const BILLING_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
10550
10947
  responseKind: "json"
10551
10948
  }
10552
10949
  });
10950
+ //#endregion
10951
+ //#region ../api/src/clientErrorReporting.ts
10952
+ const CLIENT_ERROR_REPORT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({ reportClientError: {
10953
+ path: "/client/error-report",
10954
+ method: "POST",
10955
+ auth: "user",
10956
+ errors: [],
10957
+ responseKind: "json"
10958
+ } });
10959
+ const CLIENT_ERROR_REPORT_LIMITS = {
10960
+ pathname: 1024,
10961
+ name: 120,
10962
+ message: 2e3,
10963
+ stack: 8e3,
10964
+ digest: 128,
10965
+ componentStack: 8e3,
10966
+ sourceLocation: 1024
10967
+ };
10968
+ const clientErrorEventSchema = z.enum([
10969
+ "dashboard:route-error",
10970
+ "dashboard:app-error",
10971
+ "client:error-boundary",
10972
+ "client:window-error",
10973
+ "client:unhandled-rejection"
10974
+ ]);
10975
+ z.object({
10976
+ event: clientErrorEventSchema,
10977
+ pathname: z.string().startsWith("/").max(CLIENT_ERROR_REPORT_LIMITS.pathname),
10978
+ name: z.string().max(CLIENT_ERROR_REPORT_LIMITS.name),
10979
+ message: z.string().max(CLIENT_ERROR_REPORT_LIMITS.message),
10980
+ stack: z.string().max(CLIENT_ERROR_REPORT_LIMITS.stack).nullable(),
10981
+ digest: z.string().max(CLIENT_ERROR_REPORT_LIMITS.digest).nullable(),
10982
+ componentStack: z.string().max(CLIENT_ERROR_REPORT_LIMITS.componentStack).nullable(),
10983
+ sourceLocation: z.string().max(CLIENT_ERROR_REPORT_LIMITS.sourceLocation).nullable()
10984
+ }).strict();
10553
10985
  ({
10986
+ ...CLIENT_ERROR_REPORT_ENDPOINT_DEFINITIONS,
10987
+ ...PUBLIC_NEWSLETTER_ENDPOINT_DEFINITIONS,
10554
10988
  ...ACCOUNT_ENDPOINT_DEFINITIONS,
10555
10989
  ...PUBLIC_ONBOARDING_ATTEMPT_ENDPOINT_DEFINITIONS,
10556
10990
  ...PUBLIC_EVENT_ENDPOINT_DEFINITIONS,
10557
10991
  ...GIFTING_ENDPOINT_DEFINITIONS,
10558
10992
  ...PUBLIC_READ_ENDPOINT_DEFINITIONS,
10559
- ...BILLING_ENDPOINT_DEFINITIONS
10993
+ ...BILLING_ENDPOINT_DEFINITIONS,
10994
+ ...SITE_MANAGEMENT_ENDPOINT_DEFINITIONS
10560
10995
  }), TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, { ...SITE_API_KEY_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, {
10561
10996
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
10562
10997
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
10563
10998
  ...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS
10564
- }, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.workflowRunById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.routeById, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicBookingServices, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, { ...PUBLIC_BOOKING_AVAILABILITY_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicEventFilters, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicShop, TAG_TEMPLATES.publicCheckout, TAG_TEMPLATES.siteRoutableContent, { ...PUBLIC_EVENT_CHECKOUT_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, { ...EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS }, { ...SDK_MEDIA_ENDPOINT_DEFINITIONS }, { ...SDK_ENDPOINT_DEFINITIONS }, { ...SDK_ENTRY_READ_ENDPOINTS };
10999
+ }, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.workflowRunById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.routeById, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicBookingServices, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, { ...PUBLIC_BOOKING_AVAILABILITY_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicEventFilters, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicShop, TAG_TEMPLATES.publicCheckout, TAG_TEMPLATES.siteRoutableContent, { ...PUBLIC_EVENT_CHECKOUT_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, { ...EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS }, { ...SDK_MEDIA_ENDPOINT_DEFINITIONS }, { ...SDK_ENDPOINT_DEFINITIONS }, { ...SDK_PAGE_DESIGN_ENDPOINT_DEFINITIONS }, { ...SDK_EVENT_ENDPOINT_DEFINITIONS }, { ...SDK_ENTRY_READ_ENDPOINTS };
10565
11000
  z.object({ refreshToken: z.string().min(1).max(4096) }).strict();
10566
11001
  z.object({
10567
11002
  accessToken: z.string().min(1).max(4096),
@@ -12911,11 +13346,260 @@ function cardRoleFromLegacyVocabulary(value) {
12911
13346
  */
12912
13347
  const cardRoleWithLegacyAliasSchema = z.preprocess((value) => cardRoleFromLegacyVocabulary(value) ?? value, cardRoleSchema);
12913
13348
  //#endregion
12914
- //#region ../theme-core/src/site-styles/compilationPlan.ts
12915
- const defaultHeaderBrandPreferences = {
12916
- brandDisplay: "auto",
12917
- logoSize: "auto"
12918
- };
13349
+ //#region ../theme-core/src/site-styles/transitionCatalogue.ts
13350
+ /**
13351
+ * Family order for pickers. Entries below are listed family by family in this
13352
+ * same order, so the flat option list and the grouped families agree.
13353
+ */
13354
+ const transitionCatalogueFamilies = [
13355
+ {
13356
+ id: "gradient",
13357
+ label: "Gradient"
13358
+ },
13359
+ {
13360
+ id: "wave",
13361
+ label: "Wave"
13362
+ },
13363
+ {
13364
+ id: "angle",
13365
+ label: "Angle"
13366
+ }
13367
+ ];
13368
+ const mediumHeight = "6rem + 2px";
13369
+ const compactHeight = "4.5rem + 2px";
13370
+ const largeHeight = "7rem + 2px";
13371
+ /**
13372
+ * The single source of transition vocabulary. Order is significant: it is the
13373
+ * order of `boundaryOptions` (after `none`) and of each family's variants,
13374
+ * which persisted pins, page-flow presets and the editor picker all rely on.
13375
+ *
13376
+ * Shapes match what `generateLayoutCss` draws today. Structured
13377
+ * amplitude/frequency treatments (issue 826) extend this list later.
13378
+ */
13379
+ const transitionCatalogueEntries = defineExactCatalog()([
13380
+ {
13381
+ intent: "soft-fade-short",
13382
+ optionId: asBoundaryOptionId("break:soft"),
13383
+ family: "gradient",
13384
+ variantId: "soft",
13385
+ label: "Soft",
13386
+ variantLabel: "Soft",
13387
+ treatment: {
13388
+ kind: "soft-fade",
13389
+ height: "medium",
13390
+ curve: "soft"
13391
+ },
13392
+ size: "medium",
13393
+ heightExpression: mediumHeight,
13394
+ shape: { kind: "fade" }
13395
+ },
13396
+ {
13397
+ intent: "soft-fade-long",
13398
+ optionId: asBoundaryOptionId("break:spacious"),
13399
+ family: "gradient",
13400
+ variantId: "spacious",
13401
+ label: "Spacious",
13402
+ variantLabel: "Spacious",
13403
+ treatment: {
13404
+ kind: "soft-fade",
13405
+ height: "large",
13406
+ curve: "spacious"
13407
+ },
13408
+ size: "spacious",
13409
+ heightExpression: "10rem",
13410
+ shape: { kind: "fade" }
13411
+ },
13412
+ {
13413
+ intent: "soft-fade-expansive",
13414
+ optionId: asBoundaryOptionId("break:expansive"),
13415
+ family: "gradient",
13416
+ variantId: "expansive",
13417
+ label: "Expansive",
13418
+ variantLabel: "Expansive",
13419
+ treatment: {
13420
+ kind: "soft-fade",
13421
+ height: "expansive",
13422
+ curve: "expansive"
13423
+ },
13424
+ size: "expansive",
13425
+ heightExpression: "14rem",
13426
+ shape: { kind: "fade" }
13427
+ },
13428
+ {
13429
+ intent: "wave-edge-balanced",
13430
+ optionId: asBoundaryOptionId("break:wave-balanced"),
13431
+ family: "wave",
13432
+ variantId: "balanced",
13433
+ label: "Balanced wave",
13434
+ variantLabel: "Balanced",
13435
+ treatment: {
13436
+ kind: "wave-edge",
13437
+ height: "medium",
13438
+ amplitude: "balanced",
13439
+ rhythm: "double",
13440
+ symmetry: "symmetrical"
13441
+ },
13442
+ size: "medium",
13443
+ heightExpression: mediumHeight,
13444
+ shape: {
13445
+ kind: "wave",
13446
+ mask: "balanced"
13447
+ }
13448
+ },
13449
+ {
13450
+ intent: "wave-edge",
13451
+ optionId: asBoundaryOptionId("break:wave"),
13452
+ family: "wave",
13453
+ variantId: "classic",
13454
+ label: "Classic wave",
13455
+ variantLabel: "Classic",
13456
+ treatment: {
13457
+ kind: "wave-edge",
13458
+ height: "medium",
13459
+ amplitude: "balanced",
13460
+ rhythm: "double",
13461
+ symmetry: "asymmetrical"
13462
+ },
13463
+ size: "medium",
13464
+ heightExpression: mediumHeight,
13465
+ shape: {
13466
+ kind: "wave",
13467
+ mask: "classic"
13468
+ }
13469
+ },
13470
+ {
13471
+ intent: "wave-edge-gentle",
13472
+ optionId: asBoundaryOptionId("break:wave-gentle"),
13473
+ family: "wave",
13474
+ variantId: "gentle",
13475
+ label: "Gentle wave",
13476
+ variantLabel: "Gentle",
13477
+ treatment: {
13478
+ kind: "wave-edge",
13479
+ height: "compact",
13480
+ amplitude: "subtle",
13481
+ rhythm: "single",
13482
+ symmetry: "symmetrical"
13483
+ },
13484
+ size: "compact",
13485
+ heightExpression: compactHeight,
13486
+ shape: {
13487
+ kind: "wave",
13488
+ mask: "gentle"
13489
+ }
13490
+ },
13491
+ {
13492
+ intent: "wave-edge-bold",
13493
+ optionId: asBoundaryOptionId("break:wave-bold"),
13494
+ family: "wave",
13495
+ variantId: "bold",
13496
+ label: "Bold wave",
13497
+ variantLabel: "Bold",
13498
+ treatment: {
13499
+ kind: "wave-edge",
13500
+ height: "large",
13501
+ amplitude: "bold",
13502
+ rhythm: "double",
13503
+ symmetry: "symmetrical"
13504
+ },
13505
+ size: "large",
13506
+ heightExpression: largeHeight,
13507
+ shape: {
13508
+ kind: "wave",
13509
+ mask: "bold"
13510
+ }
13511
+ },
13512
+ {
13513
+ intent: "wave-edge-drift",
13514
+ optionId: asBoundaryOptionId("break:wave-drift"),
13515
+ family: "wave",
13516
+ variantId: "drift",
13517
+ label: "Drift wave",
13518
+ variantLabel: "Drift",
13519
+ treatment: {
13520
+ kind: "wave-edge",
13521
+ height: "medium",
13522
+ amplitude: "balanced",
13523
+ rhythm: "double",
13524
+ symmetry: "drift"
13525
+ },
13526
+ size: "medium",
13527
+ heightExpression: mediumHeight,
13528
+ shape: {
13529
+ kind: "wave",
13530
+ mask: "drift"
13531
+ }
13532
+ },
13533
+ {
13534
+ intent: "angle-edge-subtle",
13535
+ optionId: asBoundaryOptionId("break:angle-subtle"),
13536
+ family: "angle",
13537
+ variantId: "subtle",
13538
+ label: "Subtle angle",
13539
+ variantLabel: "Subtle",
13540
+ treatment: {
13541
+ kind: "angle-edge",
13542
+ height: "compact",
13543
+ slope: "subtle",
13544
+ direction: "forward"
13545
+ },
13546
+ size: "compact",
13547
+ heightExpression: compactHeight,
13548
+ shape: {
13549
+ kind: "angle",
13550
+ polygon: {
13551
+ startTopPercent: 34,
13552
+ endTopPercent: 18
13553
+ }
13554
+ }
13555
+ },
13556
+ {
13557
+ intent: "angle-edge",
13558
+ optionId: asBoundaryOptionId("break:angle-balanced"),
13559
+ family: "angle",
13560
+ variantId: "balanced",
13561
+ label: "Balanced angle",
13562
+ variantLabel: "Balanced",
13563
+ treatment: {
13564
+ kind: "angle-edge",
13565
+ height: "medium",
13566
+ slope: "balanced",
13567
+ direction: "forward"
13568
+ },
13569
+ size: "medium",
13570
+ heightExpression: mediumHeight,
13571
+ shape: {
13572
+ kind: "angle",
13573
+ polygon: {
13574
+ startTopPercent: 42,
13575
+ endTopPercent: 8
13576
+ }
13577
+ }
13578
+ },
13579
+ {
13580
+ intent: "angle-edge-steep",
13581
+ optionId: asBoundaryOptionId("break:angle-steep"),
13582
+ family: "angle",
13583
+ variantId: "steep",
13584
+ label: "Steep angle",
13585
+ variantLabel: "Steep",
13586
+ treatment: {
13587
+ kind: "angle-edge",
13588
+ height: "large",
13589
+ slope: "steep",
13590
+ direction: "forward"
13591
+ },
13592
+ size: "large",
13593
+ heightExpression: largeHeight,
13594
+ shape: {
13595
+ kind: "angle",
13596
+ polygon: {
13597
+ startTopPercent: 54,
13598
+ endTopPercent: 0
13599
+ }
13600
+ }
13601
+ }
13602
+ ]);
12919
13603
  //#endregion
12920
13604
  //#region ../theme-core/src/site-styles/sectionTransitions.ts
12921
13605
  function boundaryRuntimeMetrics(family, size, heightExpression) {
@@ -12926,42 +13610,106 @@ function boundaryRuntimeMetrics(family, size, heightExpression) {
12926
13610
  reserveCss: `calc((${heightExpression}) / 2)`
12927
13611
  };
12928
13612
  }
12929
- boundaryRuntimeMetrics("gradient", "medium", "6rem + 2px"), boundaryRuntimeMetrics("gradient", "spacious", "10rem"), boundaryRuntimeMetrics("gradient", "expansive", "14rem"), boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"), boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"), boundaryRuntimeMetrics("wave", "compact", "4.5rem + 2px"), boundaryRuntimeMetrics("wave", "large", "7rem + 2px"), boundaryRuntimeMetrics("wave", "medium", "6rem + 2px"), boundaryRuntimeMetrics("angle", "medium", "6rem + 2px"), boundaryRuntimeMetrics("angle", "compact", "4.5rem + 2px"), boundaryRuntimeMetrics("angle", "large", "7rem + 2px");
13613
+ new Map(transitionCatalogueEntries.map((entry) => [entry.intent, entry]));
13614
+ new Map(transitionCatalogueEntries.map((entry) => [entry.intent, boundaryRuntimeMetrics(entry.family, entry.size, entry.heightExpression)]));
13615
+ /**
13616
+ * The catalogue's compile-time coverage check guarantees an entry per
13617
+ * decorative intent, so a miss here is a broken invariant, not bad input.
13618
+ */
13619
+ function requireCatalogueValue(values, intent) {
13620
+ const value = values.get(intent);
13621
+ if (value === void 0) throw new Error(`Transition catalogue has no entry for ${intent}`);
13622
+ return value;
13623
+ }
12930
13624
  const noneBoundaryOption = {
12931
13625
  id: asBoundaryOptionId("break:none"),
12932
13626
  label: "None",
12933
13627
  transitionAfter: "none",
12934
13628
  treatment: { kind: "none" }
12935
13629
  };
12936
- const softBoundaryOption = {
12937
- id: asBoundaryOptionId("break:soft"),
12938
- label: "Soft",
12939
- transitionAfter: "soft-fade-short",
12940
- treatment: {
12941
- kind: "soft-fade",
12942
- height: "medium",
12943
- curve: "soft"
12944
- }
13630
+ const boundaryOptionByIntent = new Map(transitionCatalogueEntries.map((entry) => [entry.intent, {
13631
+ id: entry.optionId,
13632
+ label: entry.label,
13633
+ transitionAfter: entry.intent,
13634
+ treatment: entry.treatment
13635
+ }]));
13636
+ function boundaryOptionForTransitionIntent(intent) {
13637
+ return requireCatalogueValue(boundaryOptionByIntent, intent);
13638
+ }
13639
+ const softBoundaryOption = boundaryOptionForTransitionIntent("soft-fade-short");
13640
+ const spaciousBoundaryOption = boundaryOptionForTransitionIntent("soft-fade-long");
13641
+ boundaryOptionForTransitionIntent("soft-fade-expansive");
13642
+ boundaryOptionForTransitionIntent("wave-edge");
13643
+ boundaryOptionForTransitionIntent("wave-edge-balanced");
13644
+ boundaryOptionForTransitionIntent("wave-edge-gentle");
13645
+ boundaryOptionForTransitionIntent("wave-edge-bold");
13646
+ boundaryOptionForTransitionIntent("wave-edge-drift");
13647
+ boundaryOptionForTransitionIntent("angle-edge-subtle");
13648
+ boundaryOptionForTransitionIntent("angle-edge");
13649
+ boundaryOptionForTransitionIntent("angle-edge-steep");
13650
+ /**
13651
+ * Must remain non-empty; downstream code indexes `[0]` as the documented default.
13652
+ */
13653
+ const boundaryOptions = [noneBoundaryOption, ...transitionCatalogueEntries.map((entry) => boundaryOptionForTransitionIntent(entry.intent))];
13654
+ const noneTransitionVariant = {
13655
+ familyId: "none",
13656
+ variantId: "none",
13657
+ label: "None",
13658
+ boundaryOption: noneBoundaryOption
12945
13659
  };
12946
- const spaciousBoundaryOption = {
12947
- id: asBoundaryOptionId("break:spacious"),
12948
- label: "Spacious",
12949
- transitionAfter: "soft-fade-long",
12950
- treatment: {
12951
- kind: "soft-fade",
12952
- height: "large",
12953
- curve: "spacious"
12954
- }
13660
+ function transitionVariantForEntry(entry) {
13661
+ return {
13662
+ familyId: entry.family,
13663
+ variantId: entry.variantId,
13664
+ label: entry.variantLabel,
13665
+ boundaryOption: boundaryOptionForTransitionIntent(entry.intent)
13666
+ };
13667
+ }
13668
+ const sectionTransitionFamilies = [{
13669
+ id: "none",
13670
+ label: "None",
13671
+ variants: [noneTransitionVariant]
13672
+ }, ...transitionCatalogueFamilies.map((family) => ({
13673
+ id: family.id,
13674
+ label: family.label,
13675
+ variants: requireNonEmptyReadonlyArray(transitionCatalogueEntries.filter((entry) => entry.family === family.id).map(transitionVariantForEntry), `Transition family ${family.id} has no catalogue entries.`)
13676
+ }))];
13677
+ new Map(boundaryOptions.map((option) => [option.id, option]));
13678
+ new Map(boundaryOptions.map((option) => [stableTreatmentKey(option.treatment), option]));
13679
+ new Map(sectionTransitionFamilies.flatMap((family) => family.variants.map((variant) => [variant.boundaryOption.id, variant])));
13680
+ new Map(sectionTransitionFamilies.map((family) => [family.id, family]));
13681
+ function stableTreatmentKey(treatment) {
13682
+ switch (treatment.kind) {
13683
+ case "none": return "none";
13684
+ case "soft-fade": return `${treatment.kind}:${treatment.height}:${treatment.curve}`;
13685
+ case "wave-edge": return [
13686
+ treatment.kind,
13687
+ treatment.height,
13688
+ treatment.amplitude,
13689
+ treatment.rhythm,
13690
+ treatment.symmetry
13691
+ ].join(":");
13692
+ case "angle-edge": return [
13693
+ treatment.kind,
13694
+ treatment.height,
13695
+ treatment.slope,
13696
+ treatment.direction
13697
+ ].join(":");
13698
+ case "legacy-unsupported": return `${treatment.kind}:${treatment.boundaryOptionId}`;
13699
+ }
13700
+ }
13701
+ requireThemeColorToken$1("background");
13702
+ function requireThemeColorToken$1(value) {
13703
+ const token = parseThemeColorToken(value);
13704
+ if (!token) throw new Error(`Expected a theme color token. Received: ${value}`);
13705
+ return token;
13706
+ }
13707
+ //#endregion
13708
+ //#region ../theme-core/src/site-styles/compilationPlan.ts
13709
+ const defaultHeaderBrandPreferences = {
13710
+ brandDisplay: "auto",
13711
+ logoSize: "auto"
12955
13712
  };
12956
- asBoundaryOptionId("break:expansive");
12957
- asBoundaryOptionId("break:wave");
12958
- asBoundaryOptionId("break:wave-balanced");
12959
- asBoundaryOptionId("break:wave-gentle");
12960
- asBoundaryOptionId("break:wave-bold");
12961
- asBoundaryOptionId("break:wave-drift");
12962
- asBoundaryOptionId("break:angle-subtle");
12963
- asBoundaryOptionId("break:angle-balanced");
12964
- asBoundaryOptionId("break:angle-steep");
12965
13713
  asBoundaryOptionId("break:unknown");
12966
13714
  const pageDesignUserPinnedAppearanceChoiceSchema = z.object({
12967
13715
  kind: z.literal("user-pinned"),
@@ -13088,14 +13836,11 @@ function validateUniquePageDesignPins(intent, ctx) {
13088
13836
  label: "block Look pin"
13089
13837
  });
13090
13838
  addDuplicateStringIssues(ctx, {
13091
- values: intent.boundaryPins.map((pin) => boundaryKey(pin.previousBlockId, pin.nextBlockId)),
13839
+ values: intent.boundaryPins.map((pin) => makeBoundaryId(pin.previousBlockId, pin.nextBlockId)),
13092
13840
  path: ["boundaryPins"],
13093
13841
  label: "boundary pin"
13094
13842
  });
13095
13843
  }
13096
- function boundaryKey(previousBlockId, nextBlockId) {
13097
- return makeBoundaryId(previousBlockId, nextBlockId);
13098
- }
13099
13844
  //#endregion
13100
13845
  //#region ../theme-core/src/accordions/siteStyleDefaults.ts
13101
13846
  /**
@@ -14723,6 +15468,13 @@ z.object({
14723
15468
  fields: nonEmptyRuntimeStyleFieldNamesSchema,
14724
15469
  authority: styleAuthoritySchema
14725
15470
  }).strict();
15471
+ asPageFlowPresetId("flow:quiet"), noneBoundaryOption.id, asPageFlowPresetId("flow:balanced"), softBoundaryOption.id, asPageFlowPresetId("flow:expressive"), spaciousBoundaryOption.id;
15472
+ asPageFlowPresetId("generated-default");
15473
+ asSiteStyleId("site-style:south-west-twerk-school");
15474
+ asAppearancePresetId("hero-brand-scrim-fixed-frame");
15475
+ asLayoutVariantKey("classic");
15476
+ asLayoutVariantKey("micro");
15477
+ asBoundaryOptionId("break:wave");
14726
15478
  //#endregion
14727
15479
  //#region ../theme-core/src/site-styles/runtimeCompiler.ts
14728
15480
  function defineSectionForegroundRuntimeTokens(input) {
@@ -14746,7 +15498,7 @@ function defineComponentRuntimeRules(rules) {
14746
15498
  }
14747
15499
  /**
14748
15500
  * Default design rules translate semantic page-level choices into the current
14749
- * runtime's section background and transition style-group vocabulary.
15501
+ * runtime's section background vocabulary.
14750
15502
  */
14751
15503
  const defaultDesignRuntimeRules = defineDesignRuntimeRules({
14752
15504
  sectionSurfaces: {
@@ -14781,8 +15533,7 @@ const defaultDesignRuntimeRules = defineDesignRuntimeRules({
14781
15533
  color: "surface",
14782
15534
  opacity: .88
14783
15535
  }
14784
- },
14785
- transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
15536
+ }
14786
15537
  });
14787
15538
  /**
14788
15539
  * Default component rules translate frame and item-surface semantics into the
@@ -16517,19 +17268,11 @@ const curatedSiteStyles = [
16517
17268
  })
16518
17269
  ];
16519
17270
  new Map(curatedSiteStyles.map((style) => [style.id, style]));
16520
- asPageFlowPresetId("generated-default");
16521
- asSiteStyleId("site-style:south-west-twerk-school");
16522
- asAppearancePresetId("hero-brand-scrim-fixed-frame");
16523
- asLayoutVariantKey("classic");
16524
- asLayoutVariantKey("micro");
16525
- asBoundaryOptionId("break:wave");
16526
- asPageFlowPresetId("flow:quiet"), noneBoundaryOption.id, asPageFlowPresetId("flow:balanced"), softBoundaryOption.id, asPageFlowPresetId("flow:expressive"), spaciousBoundaryOption.id;
16527
17271
  //#endregion
16528
17272
  //#region ../theme-core/src/site-styles/resolver.ts
16529
17273
  const blockDesignFallback = {
16530
17274
  sectionSurface: "base",
16531
17275
  contentFrame: plainFrame,
16532
- transitionAfter: "none",
16533
17276
  sectionHeight: "default",
16534
17277
  heroLegibility: "none",
16535
17278
  imageSurfaceTreatment: { kind: "none" },
@@ -16540,7 +17283,7 @@ const blockDesignFallback = {
16540
17283
  accordionIconTreatment: null,
16541
17284
  composition: null
16542
17285
  };
16543
- blockDesignFallback.sectionSurface, blockDesignFallback.contentFrame, blockDesignFallback.transitionAfter, blockDesignFallback.sectionHeight, blockDesignFallback.heroLegibility, blockDesignFallback.imageSurfaceTreatment, blockDesignFallback.imageSurfaceMotion, blockDesignFallback.tileTreatment, blockDesignFallback.eventListTreatment, blockDesignFallback.eyebrowTreatment, blockDesignFallback.accordionIconTreatment, blockDesignFallback.composition;
17286
+ blockDesignFallback.sectionSurface, blockDesignFallback.contentFrame, blockDesignFallback.sectionHeight, blockDesignFallback.heroLegibility, blockDesignFallback.imageSurfaceTreatment, blockDesignFallback.imageSurfaceMotion, blockDesignFallback.tileTreatment, blockDesignFallback.eventListTreatment, blockDesignFallback.eyebrowTreatment, blockDesignFallback.accordionIconTreatment, blockDesignFallback.composition;
16544
17287
  //#endregion
16545
17288
  //#region ../theme-core/src/site-styles/siteChromeBackgrounds.ts
16546
17289
  const siteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceColorTokenNames);
@@ -17143,7 +17886,8 @@ const siteOptionSources = [
17143
17886
  "eventCategories",
17144
17887
  "eventSeries",
17145
17888
  "venues",
17146
- "staffMembers"
17889
+ "staffMembers",
17890
+ "appointmentServiceCategories"
17147
17891
  ];
17148
17892
  const mediaDeliverySchema = z.object({
17149
17893
  sizes: z.string().optional(),
@@ -26365,13 +27109,13 @@ const hours = stack({
26365
27109
  as: "p",
26366
27110
  className: "rb-caption rb-opacity-70"
26367
27111
  }, bind("module.timeZone"), when("module.timeZone"))], when("module.kind", { equals: "opening-hours" }));
26368
- const socials = inline({ className: "rb-flex rb-flex-wrap rb-gap-x-5 rb-gap-y-3" }, [link({
27112
+ const socials = inline({ className: "rb-footer-socials" }, [link({
26369
27113
  href: { $bind: { from: "social.href" } },
26370
27114
  target: "_blank",
26371
27115
  rel: "noreferrer noopener",
26372
27116
  "aria-label": { $bind: { from: "social.label" } },
26373
- className: "rb-nav-text transition-theme-standard"
26374
- }, [icon({ className: "rb-h-5 rb-w-5" }, bind("social.icon"), when("social.icon")), text({ as: "span" }, bind("social.label"), when("social.icon", { equals: null }))], repeat("module.socialLinks", "social"))], when("module.kind", { equals: "social-links" }));
27117
+ className: "rb-footer-social-link rb-nav-text transition-theme-standard"
27118
+ }, [icon({ className: "rb-footer-social-icon" }, bind("social.icon"), when("social.icon")), text({ as: "span" }, bind("social.label"), when("social.icon", { equals: null }))], repeat("module.socialLinks", "social"))], when("module.kind", { equals: "social-links" }));
26375
27119
  const authoredCopy = richText({
26376
27120
  className: "rb-prose rb-prose-sm rb-max-w-none",
26377
27121
  style: textColorStyle("text/80")
@@ -28012,6 +28756,15 @@ const appointmentServicesBlockDefinition = {
28012
28756
  required: false,
28013
28757
  ui: { intent: "content" }
28014
28758
  },
28759
+ createSiteOptionSelectField({
28760
+ id: "categoryId",
28761
+ label: "Category",
28762
+ description: "Show one category (with its heading and intro), or leave it on All categories to show everything grouped.",
28763
+ required: false,
28764
+ multiple: false,
28765
+ optionSource: "appointmentServiceCategories",
28766
+ ui: { intent: "content" }
28767
+ }),
28015
28768
  sectionStylesField({
28016
28769
  id: "_sectionStyles",
28017
28770
  label: "Section styles",
@@ -28046,6 +28799,7 @@ const appointmentServicesBlockDefinition = {
28046
28799
  richText({ className: "rb-prose rb-max-w-none" }, bind("content.description"), when("content.description")),
28047
28800
  el("appointment-services", {
28048
28801
  sectionHeading: { $bind: { from: "content.heading" } },
28802
+ categoryId: { $bind: { from: "content.categoryId" } },
28049
28803
  services: { $bind: { from: "data.services" } },
28050
28804
  pathname: { $bind: { from: "$root.pathname" } },
28051
28805
  servicePathPrefix: { $bind: { from: "$root.appointmentServicePathPrefix" } }
@@ -35873,6 +36627,11 @@ const mailingListContentVersionIdSchema = z.string().transform((value, ctx) => {
35873
36627
  });
35874
36628
  return z.NEVER;
35875
36629
  });
36630
+ const mailingListSignupBlockSourceRefSchema = z.object({
36631
+ tag: z.literal("block_ref"),
36632
+ blockId: mailingListSignupBlockIdSchema,
36633
+ contentVersionId: mailingListContentVersionIdSchema
36634
+ });
35876
36635
  const signedMailingListSourceTokenSchema = z.string().trim().min(1).transform(parseRequiredMailingListSignedSourceToken);
35877
36636
  const newsletterSourceCommonSchema = z.object({
35878
36637
  siteId: z.string().optional(),
@@ -35887,7 +36646,15 @@ const newsletterSourceSchema = z.discriminatedUnion("source", [
35887
36646
  newsletterSourceCommonSchema.extend({
35888
36647
  source: z.literal("block"),
35889
36648
  blockId: z.string().nullable().optional(),
35890
- contentVersionId: z.string().nullable().optional()
36649
+ newsletterBlockSubmission: z.discriminatedUnion("tag", [
36650
+ z.object({
36651
+ tag: z.literal("ready"),
36652
+ sourceRef: mailingListSignupBlockSourceRefSchema
36653
+ }),
36654
+ z.object({ tag: z.literal("unpublished-form") }),
36655
+ z.object({ tag: z.literal("unpublished-settings") }),
36656
+ z.object({ tag: z.literal("unavailable") })
36657
+ ])
35891
36658
  }),
35892
36659
  newsletterSourceCommonSchema.extend({
35893
36660
  source: z.literal("signed-footer"),
@@ -35916,11 +36683,7 @@ const newsletterHydrationSchema = z.object({
35916
36683
  target: z.discriminatedUnion("tag", [
35917
36684
  z.object({
35918
36685
  tag: z.literal("block-source"),
35919
- sourceRef: z.object({
35920
- tag: z.literal("block_ref"),
35921
- blockId: mailingListSignupBlockIdSchema,
35922
- contentVersionId: mailingListContentVersionIdSchema
35923
- }).nullable()
36686
+ sourceRef: mailingListSignupBlockSourceRefSchema.nullable()
35924
36687
  }),
35925
36688
  z.object({
35926
36689
  tag: z.literal("signed-footer-source"),
@@ -35929,7 +36692,11 @@ const newsletterHydrationSchema = z.object({
35929
36692
  token: signedMailingListSourceTokenSchema
35930
36693
  })
35931
36694
  }),
35932
- z.object({ tag: z.literal("preview") })
36695
+ z.object({ tag: z.literal("preview") }),
36696
+ z.object({
36697
+ tag: z.literal("unpublished-preview"),
36698
+ reason: z.enum(["unpublished-form", "unpublished-settings"])
36699
+ })
35933
36700
  ]),
35934
36701
  setupRevision: z.number().int().positive().nullable(),
35935
36702
  choiceProvider: z.enum([
@@ -35998,16 +36765,21 @@ const newsletterFormBlockRuntime = defineProgressiveBlockRuntime({
35998
36765
  });
35999
36766
  function projectNewsletterFormHydrationTarget(source) {
36000
36767
  switch (source.source) {
36001
- case "block": {
36002
- const sourceRef = buildMailingListSignupBlockSourceRef(source.blockId, source.contentVersionId);
36003
- if (sourceRef?.tag === "block_ref") return {
36768
+ case "block": switch (source.newsletterBlockSubmission.tag) {
36769
+ case "unpublished-form":
36770
+ case "unpublished-settings": return {
36771
+ tag: "unpublished-preview",
36772
+ reason: source.newsletterBlockSubmission.tag
36773
+ };
36774
+ case "ready": return {
36004
36775
  tag: "block-source",
36005
- sourceRef
36776
+ sourceRef: source.newsletterBlockSubmission.sourceRef
36006
36777
  };
36007
- return {
36778
+ case "unavailable": return {
36008
36779
  tag: "block-source",
36009
36780
  sourceRef: null
36010
36781
  };
36782
+ default: return assertNever$3(source.newsletterBlockSubmission);
36011
36783
  }
36012
36784
  case "signed-footer": return {
36013
36785
  tag: "signed-footer-source",
@@ -38504,6 +39276,17 @@ function coerceToString(value) {
38504
39276
  return "";
38505
39277
  }
38506
39278
  /**
39279
+ * The appointment-services catalogue (issue 1403) pairs the services with the
39280
+ * site's ordered categories. Both are needed to group them, so that response
39281
+ * is passed through whole; any other `{ services }` wrapper is unwrapped.
39282
+ */
39283
+ function coerceServicesPayload(record) {
39284
+ return Array.isArray(record.services) && Array.isArray(record.categories) ? {
39285
+ services: record.services,
39286
+ categories: record.categories
39287
+ } : record.services;
39288
+ }
39289
+ /**
38507
39290
  * Extract data from API response.
38508
39291
  * Unwraps common response wrappers: { data }, { form }, { entries }, { services }, { teamMembers }
38509
39292
  *
@@ -38518,7 +39301,7 @@ function coercePayload(payload) {
38518
39301
  if ("data" in record && typeof record.data !== "function") return record.data;
38519
39302
  if ("form" in record && typeof record.form !== "function") return record.form;
38520
39303
  if ("entries" in record && typeof record.entries !== "function") return record.entries;
38521
- if ("services" in record && typeof record.services !== "function") return record.services;
39304
+ if ("services" in record && typeof record.services !== "function") return coerceServicesPayload(record);
38522
39305
  if ("teamMembers" in record && typeof record.teamMembers !== "function") return record.teamMembers;
38523
39306
  }
38524
39307
  return payload;
@@ -39038,6 +39821,46 @@ z.object({ acceptExtraSiteCharge: z.boolean().optional() });
39038
39821
  //#region ../surfaces/src/index.ts
39039
39822
  const SURFACE_IDS = ["core", "macadamia"];
39040
39823
  const DEFAULT_SURFACE_ID = "core";
39824
+ /**
39825
+ * Root hosts for each surface, keyed by deployment tier. The tier-keyed shape
39826
+ * makes it impossible to mis-order entries: callers like
39827
+ * `buildSurfaceAwareDashboardOriginForSurfaceId` look up by tier directly
39828
+ * rather than relying on positional alignment between arrays.
39829
+ */
39830
+ const SURFACE_ROOT_HOSTS = {
39831
+ core: {
39832
+ local: "localhost",
39833
+ prod: "riverbankcms.com"
39834
+ },
39835
+ macadamia: {
39836
+ local: "macadamia.localhost",
39837
+ prod: "macadamia.studio"
39838
+ }
39839
+ };
39840
+ const SURFACE_SITE_ROOT_HOSTS = {
39841
+ core: {
39842
+ local: "localhost",
39843
+ prod: "riverbanksites.com"
39844
+ },
39845
+ macadamia: {
39846
+ local: "macadamia.localhost",
39847
+ prod: "macadamia.studio"
39848
+ }
39849
+ };
39850
+ const SURFACE_SITE_ROOT_HOST_ALIASES = { core: { prod: ["preview.riverbanksites.com"] } };
39851
+ function surfaceHostTableValues(table) {
39852
+ return Object.values(table).flatMap((byTier) => Object.values(byTier).flat());
39853
+ }
39854
+ function siteSlugLabelUnderRoot(host, siteRootHost) {
39855
+ if (!host.endsWith(`.${siteRootHost}`)) return [];
39856
+ return host.slice(0, host.length - siteRootHost.length - 1).split(".").slice(-1);
39857
+ }
39858
+ function deriveSurfaceOwnedSiteSlugs() {
39859
+ const siteRootHosts = [...surfaceHostTableValues(SURFACE_SITE_ROOT_HOSTS), ...surfaceHostTableValues(SURFACE_SITE_ROOT_HOST_ALIASES)];
39860
+ const labels = [...surfaceHostTableValues(SURFACE_ROOT_HOSTS), ...siteRootHosts].flatMap((host) => siteRootHosts.flatMap((root) => siteSlugLabelUnderRoot(host, root)));
39861
+ return [...new Set(labels)].sort();
39862
+ }
39863
+ deriveSurfaceOwnedSiteSlugs();
39041
39864
  [...SURFACE_IDS.filter((surfaceId) => surfaceId !== DEFAULT_SURFACE_ID)];
39042
39865
  //#endregion
39043
39866
  //#region ../api/src/accountApi.ts
@@ -39420,7 +40243,12 @@ const appointmentSetupServiceDraftSchema = z.object({
39420
40243
  venue: appointmentSetupVenueChoiceSchema,
39421
40244
  timezone: z.string().trim().min(1).nullable(),
39422
40245
  payment: appointmentSetupPaymentDraftSchema,
39423
- assignment: appointmentSetupServiceAssignmentDraftSchema
40246
+ assignment: appointmentSetupServiceAssignmentDraftSchema,
40247
+ /**
40248
+ * The service's category, or null for "Other" (issue 1403). Omitted leaves
40249
+ * an existing service's category alone and puts a new one in "Other".
40250
+ */
40251
+ categoryId: z.string().uuid().nullable().optional()
39424
40252
  }).superRefine((service, ctx) => {
39425
40253
  if (service.payment.kind !== "free" && (service.priceAmount === null || service.priceAmount <= 0)) ctx.addIssue({
39426
40254
  code: "custom",
@@ -39661,6 +40489,7 @@ function parsePublicProductCategorySelector(value) {
39661
40489
  productCategoryEntryId: record.productCategoryEntryId
39662
40490
  };
39663
40491
  }
40492
+ z.enum(["public", "unlisted"], { error: "visibility must be 'public' or 'unlisted'" });
39664
40493
  //#endregion
39665
40494
  //#region ../api/src/bookingPaymentTermSchemas.ts
39666
40495
  const bookingDepositRefundPolicySchema = z.enum(["refundable", "non_refundable"]);