@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
@@ -1095,6 +1095,9 @@ var init_booking_date_time = __esmMin((() => {
1095
1095
  //#region ../core/src/booking-consent.ts
1096
1096
  var init_booking_consent = __esmMin((() => {}));
1097
1097
  //#endregion
1098
+ //#region ../core/src/appointment-service-categories.ts
1099
+ var init_appointment_service_categories = __esmMin((() => {}));
1100
+ //#endregion
1098
1101
  //#region ../core/src/dated-offering-settlement.ts
1099
1102
  var init_dated_offering_settlement = __esmMin((() => {}));
1100
1103
  //#endregion
@@ -2125,6 +2128,7 @@ var init_src$4 = __esmMin((() => {
2125
2128
  init_booking_instalments();
2126
2129
  init_booking_date_time();
2127
2130
  init_booking_consent();
2131
+ init_appointment_service_categories();
2128
2132
  init_dated_offering_settlement();
2129
2133
  init_person_records();
2130
2134
  init_rectification();
@@ -7922,6 +7926,15 @@ function asSiteStyleId(value) {
7922
7926
  function asDesignSystemTemplateId(value) {
7923
7927
  return brandNonEmptyString(value, "DesignSystemTemplateId");
7924
7928
  }
7929
+ function toNonEmptyReadonlyArray(values) {
7930
+ const [first, ...rest] = values;
7931
+ return first === void 0 ? null : [first, ...rest];
7932
+ }
7933
+ function requireNonEmptyReadonlyArray(values, message = "Expected a non-empty array.") {
7934
+ const result = toNonEmptyReadonlyArray(values);
7935
+ if (!result) throw new Error(message);
7936
+ return result;
7937
+ }
7925
7938
  function makeBoundaryId(previousBlockId, nextBlockId) {
7926
7939
  return asDesignBoundaryId(`boundary:${encodeURIComponent(previousBlockId)}:${encodeURIComponent(nextBlockId)}`);
7927
7940
  }
@@ -8122,16 +8135,18 @@ var init_rawStyleFields = __esmMin((() => {
8122
8135
  "_frameStyles",
8123
8136
  "_sectionStyles",
8124
8137
  "_containerStyles",
8125
- "_cardStyles",
8126
- "_transitionStyles",
8127
- "styleGroup"
8138
+ "_cardStyles"
8128
8139
  ];
8129
8140
  themeV2BlockSpecificRawStyleFieldNames = [
8130
8141
  "_contentCardStyles",
8131
8142
  "_heroLayoutStyles",
8132
8143
  "_textCardStyles"
8133
8144
  ];
8134
- themeV2NormalEditorRawStyleFieldNames = [...themeV2RuntimeStyleFieldNames, ...themeV2BlockSpecificRawStyleFieldNames];
8145
+ themeV2NormalEditorRawStyleFieldNames = [
8146
+ ...themeV2RuntimeStyleFieldNames,
8147
+ ...themeV2BlockSpecificRawStyleFieldNames,
8148
+ "styleGroup"
8149
+ ];
8135
8150
  new Set(themeV2NormalEditorRawStyleFieldNames);
8136
8151
  [...themeV2RuntimeStyleFieldNames, ...themeV2BlockSpecificRawStyleFieldNames];
8137
8152
  pageDesignEditorBackgroundOverrideOwner = "page-design-editor";
@@ -9735,6 +9750,80 @@ var init_contracts$2 = __esmMin((() => {
9735
9750
  init_calendarWindow();
9736
9751
  }));
9737
9752
  //#endregion
9753
+ //#region ../api/src/defineEndpointDefinitions.ts
9754
+ /**
9755
+ * Validates extracted endpoint descriptors while preserving each literal path,
9756
+ * method, and parameter contract for the typed URL builders.
9757
+ */
9758
+ function defineEndpointDefinitions(definitions) {
9759
+ return definitions;
9760
+ }
9761
+ var init_defineEndpointDefinitions = __esmMin((() => {}));
9762
+ //#endregion
9763
+ //#region ../api/src/publicNewsletterEndpointDefinitions.ts
9764
+ var PUBLIC_NEWSLETTER_ENDPOINT_DEFINITIONS;
9765
+ var init_publicNewsletterEndpointDefinitions = __esmMin((() => {
9766
+ init_defineEndpointDefinitions();
9767
+ PUBLIC_NEWSLETTER_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
9768
+ subscribeNewsletter: {
9769
+ path: "/public/sites/{siteId}/newsletter/subscribe",
9770
+ method: "POST",
9771
+ tags: ["public-newsletter-{siteId}"],
9772
+ auth: "public",
9773
+ responseKind: "json"
9774
+ },
9775
+ confirmNewsletter: {
9776
+ path: "/public/sites/{siteId}/newsletter/confirm/{token}",
9777
+ method: "GET",
9778
+ tags: ["public-newsletter-{siteId}"],
9779
+ auth: "public",
9780
+ responseKind: "text"
9781
+ },
9782
+ unsubscribeNewsletter: {
9783
+ path: "/public/sites/{siteId}/newsletter/unsubscribe/{token}",
9784
+ method: "GET",
9785
+ tags: ["public-newsletter-{siteId}"],
9786
+ auth: "public",
9787
+ responseKind: "text"
9788
+ },
9789
+ unsubscribeNewsletterPost: {
9790
+ path: "/public/sites/{siteId}/newsletter/unsubscribe/{token}",
9791
+ method: "POST",
9792
+ tags: ["public-newsletter-{siteId}"],
9793
+ auth: "public",
9794
+ responseKind: "text"
9795
+ },
9796
+ confirmNewsletterPost: {
9797
+ path: "/public/sites/{siteId}/newsletter/confirm/{token}",
9798
+ method: "POST",
9799
+ tags: ["public-newsletter-{siteId}"],
9800
+ auth: "public",
9801
+ responseKind: "text"
9802
+ },
9803
+ getNewsletterPreferences: {
9804
+ path: "/public/sites/{siteId}/newsletter/preferences/{token}",
9805
+ method: "GET",
9806
+ tags: ["public-newsletter-{siteId}"],
9807
+ auth: "public",
9808
+ responseKind: "text"
9809
+ },
9810
+ saveNewsletterPreferences: {
9811
+ path: "/public/sites/{siteId}/newsletter/preferences/{token}",
9812
+ method: "POST",
9813
+ tags: ["public-newsletter-{siteId}"],
9814
+ auth: "public",
9815
+ responseKind: "text"
9816
+ },
9817
+ getNewsletterArchive: {
9818
+ path: "/public/sites/{siteId}/newsletter/archive/{token}",
9819
+ method: "GET",
9820
+ tags: ["public-newsletter-{siteId}"],
9821
+ auth: "public",
9822
+ responseKind: "text"
9823
+ }
9824
+ });
9825
+ }));
9826
+ //#endregion
9738
9827
  //#region ../api/src/apiEndpointTypes.ts
9739
9828
  function allowedDemoMutationPolicy() {
9740
9829
  return {
@@ -9831,22 +9920,97 @@ var init_sdkEntryReadEndpoints = __esmMin((() => {
9831
9920
  };
9832
9921
  }));
9833
9922
  //#endregion
9834
- //#region ../api/src/defineEndpointDefinitions.ts
9835
- /**
9836
- * Validates extracted endpoint descriptors while preserving each literal path,
9837
- * method, and parameter contract for the typed URL builders.
9838
- */
9839
- function defineEndpointDefinitions(definitions) {
9840
- return definitions;
9841
- }
9842
- var init_defineEndpointDefinitions = __esmMin((() => {}));
9923
+ //#region ../api/src/appointmentServiceCategoryEndpoints.ts
9924
+ var APPOINTMENT_SERVICE_CATEGORY_ENDPOINT_DEFINITIONS;
9925
+ var init_appointmentServiceCategoryEndpoints = __esmMin((() => {
9926
+ init_defineEndpointDefinitions();
9927
+ APPOINTMENT_SERVICE_CATEGORY_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
9928
+ listGroupedAppointmentServices: {
9929
+ path: "/sites/{siteId}/bookings/services/grouped",
9930
+ method: "GET",
9931
+ auth: "user",
9932
+ responseKind: "json",
9933
+ errors: ["server:internal_error"]
9934
+ },
9935
+ reorderAppointmentServices: {
9936
+ path: "/sites/{siteId}/bookings/services/order",
9937
+ method: "PUT",
9938
+ auth: "user",
9939
+ responseKind: "json",
9940
+ errors: [
9941
+ "validation:invalid_input",
9942
+ "auth:forbidden",
9943
+ "resource:not_found",
9944
+ "resource:conflict",
9945
+ "server:internal_error"
9946
+ ]
9947
+ },
9948
+ listAppointmentServiceCategories: {
9949
+ path: "/sites/{siteId}/bookings/service-categories",
9950
+ method: "GET",
9951
+ auth: "user",
9952
+ responseKind: "json",
9953
+ errors: ["server:internal_error"]
9954
+ },
9955
+ createAppointmentServiceCategory: {
9956
+ path: "/sites/{siteId}/bookings/service-categories",
9957
+ method: "POST",
9958
+ auth: "user",
9959
+ responseKind: "json",
9960
+ errors: [
9961
+ "validation:invalid_input",
9962
+ "auth:forbidden",
9963
+ "resource:conflict",
9964
+ "server:internal_error"
9965
+ ]
9966
+ },
9967
+ updateAppointmentServiceCategory: {
9968
+ path: "/sites/{siteId}/bookings/service-categories/{categoryId}",
9969
+ method: "PUT",
9970
+ auth: "user",
9971
+ responseKind: "json",
9972
+ errors: [
9973
+ "validation:invalid_input",
9974
+ "auth:forbidden",
9975
+ "resource:not_found",
9976
+ "resource:conflict",
9977
+ "server:internal_error"
9978
+ ]
9979
+ },
9980
+ deleteAppointmentServiceCategory: {
9981
+ path: "/sites/{siteId}/bookings/service-categories/{categoryId}",
9982
+ method: "DELETE",
9983
+ auth: "user",
9984
+ responseKind: "json",
9985
+ errors: [
9986
+ "auth:forbidden",
9987
+ "resource:not_found",
9988
+ "server:internal_error"
9989
+ ]
9990
+ },
9991
+ reorderAppointmentServiceCategories: {
9992
+ path: "/sites/{siteId}/bookings/service-categories/order",
9993
+ method: "PUT",
9994
+ auth: "user",
9995
+ responseKind: "json",
9996
+ errors: [
9997
+ "validation:invalid_input",
9998
+ "auth:forbidden",
9999
+ "resource:conflict",
10000
+ "server:internal_error"
10001
+ ]
10002
+ }
10003
+ });
10004
+ }));
9843
10005
  //#endregion
9844
10006
  //#region ../api/src/appointmentEndpointDefinitions.ts
9845
10007
  var APPOINTMENT_ENDPOINT_DEFINITIONS;
9846
10008
  var init_appointmentEndpointDefinitions = __esmMin((() => {
9847
10009
  init_cache_tags();
9848
10010
  init_defineEndpointDefinitions();
10011
+ init_appointmentServiceCategoryEndpoints();
9849
10012
  APPOINTMENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
10013
+ ...APPOINTMENT_SERVICE_CATEGORY_ENDPOINT_DEFINITIONS,
9850
10014
  listAppointmentResources: {
9851
10015
  path: "/sites/{siteId}/bookings/resources",
9852
10016
  method: "GET",
@@ -11008,39 +11172,6 @@ var init_newsletterEndpointDefinitions = __esmMin((() => {
11008
11172
  auth: "user",
11009
11173
  responseKind: "json",
11010
11174
  demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
11011
- },
11012
- listNewsletterSendJobs: {
11013
- path: "/sites/{siteId}/newsletter/jobs",
11014
- method: "GET",
11015
- tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
11016
- auth: "user",
11017
- responseKind: "json"
11018
- },
11019
- retryNewsletterSendJob: {
11020
- path: "/sites/{siteId}/newsletter/jobs/{jobId}/retry",
11021
- method: "POST",
11022
- errors: [
11023
- "validation:invalid_input",
11024
- "resource:not_found",
11025
- "auth:forbidden",
11026
- "server:internal_error"
11027
- ],
11028
- tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
11029
- auth: "user",
11030
- responseKind: "json"
11031
- },
11032
- cancelNewsletterSendJob: {
11033
- path: "/sites/{siteId}/newsletter/jobs/{jobId}/cancel",
11034
- method: "POST",
11035
- errors: [
11036
- "validation:invalid_input",
11037
- "resource:not_found",
11038
- "auth:forbidden",
11039
- "server:internal_error"
11040
- ],
11041
- tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
11042
- auth: "user",
11043
- responseKind: "json"
11044
11175
  }
11045
11176
  });
11046
11177
  }));
@@ -11820,6 +11951,7 @@ var init_billingEndpointDefinitions = __esmMin((() => {
11820
11951
  });
11821
11952
  }));
11822
11953
  var init_endpoints = __esmMin((() => {
11954
+ init_publicNewsletterEndpointDefinitions();
11823
11955
  init_demoMutationPolicies();
11824
11956
  init_cache_tags();
11825
11957
  init_sdkEntryReadEndpoints();
@@ -11839,6 +11971,7 @@ var init_endpoints = __esmMin((() => {
11839
11971
  init_publicOnboardingAttemptEndpointDefinitions();
11840
11972
  init_billingEndpointDefinitions();
11841
11973
  ({
11974
+ ...PUBLIC_NEWSLETTER_ENDPOINT_DEFINITIONS,
11842
11975
  ...ACCOUNT_ENDPOINT_DEFINITIONS,
11843
11976
  ...PUBLIC_ONBOARDING_ATTEMPT_ENDPOINT_DEFINITIONS,
11844
11977
  ...PUBLIC_EVENT_ENDPOINT_DEFINITIONS,
@@ -15563,16 +15696,258 @@ var init_cardRoleVocabulary = __esmMin((() => {
15563
15696
  cardRoleWithLegacyAliasSchema = z.preprocess((value) => cardRoleFromLegacyVocabulary(value) ?? value, cardRoleSchema);
15564
15697
  }));
15565
15698
  //#endregion
15566
- //#region ../theme-core/src/site-styles/compositionBudget.ts
15567
- var init_compositionBudget = __esmMin((() => {}));
15699
+ //#region ../theme-core/src/site-styles/runtimeBackgroundResolution.ts
15700
+ var init_runtimeBackgroundResolution = __esmMin((() => {
15701
+ init_boxBackgroundSchema();
15702
+ init_surfaces();
15703
+ init_rawStyleFields();
15704
+ }));
15568
15705
  //#endregion
15569
- //#region ../theme-core/src/site-styles/compilationPlan.ts
15570
- var defaultHeaderBrandPreferences;
15571
- var init_compilationPlan = __esmMin((() => {
15572
- defaultHeaderBrandPreferences = {
15573
- brandDisplay: "auto",
15574
- logoSize: "auto"
15575
- };
15706
+ //#region ../theme-core/src/site-styles/transitionCatalogue.ts
15707
+ var transitionCatalogueFamilies, mediumHeight, compactHeight, largeHeight, transitionCatalogueEntries;
15708
+ var init_transitionCatalogue = __esmMin((() => {
15709
+ init_types$7();
15710
+ transitionCatalogueFamilies = [
15711
+ {
15712
+ id: "gradient",
15713
+ label: "Gradient"
15714
+ },
15715
+ {
15716
+ id: "wave",
15717
+ label: "Wave"
15718
+ },
15719
+ {
15720
+ id: "angle",
15721
+ label: "Angle"
15722
+ }
15723
+ ];
15724
+ mediumHeight = "6rem + 2px";
15725
+ compactHeight = "4.5rem + 2px";
15726
+ largeHeight = "7rem + 2px";
15727
+ transitionCatalogueEntries = defineExactCatalog()([
15728
+ {
15729
+ intent: "soft-fade-short",
15730
+ optionId: asBoundaryOptionId("break:soft"),
15731
+ family: "gradient",
15732
+ variantId: "soft",
15733
+ label: "Soft",
15734
+ variantLabel: "Soft",
15735
+ treatment: {
15736
+ kind: "soft-fade",
15737
+ height: "medium",
15738
+ curve: "soft"
15739
+ },
15740
+ size: "medium",
15741
+ heightExpression: mediumHeight,
15742
+ shape: { kind: "fade" }
15743
+ },
15744
+ {
15745
+ intent: "soft-fade-long",
15746
+ optionId: asBoundaryOptionId("break:spacious"),
15747
+ family: "gradient",
15748
+ variantId: "spacious",
15749
+ label: "Spacious",
15750
+ variantLabel: "Spacious",
15751
+ treatment: {
15752
+ kind: "soft-fade",
15753
+ height: "large",
15754
+ curve: "spacious"
15755
+ },
15756
+ size: "spacious",
15757
+ heightExpression: "10rem",
15758
+ shape: { kind: "fade" }
15759
+ },
15760
+ {
15761
+ intent: "soft-fade-expansive",
15762
+ optionId: asBoundaryOptionId("break:expansive"),
15763
+ family: "gradient",
15764
+ variantId: "expansive",
15765
+ label: "Expansive",
15766
+ variantLabel: "Expansive",
15767
+ treatment: {
15768
+ kind: "soft-fade",
15769
+ height: "expansive",
15770
+ curve: "expansive"
15771
+ },
15772
+ size: "expansive",
15773
+ heightExpression: "14rem",
15774
+ shape: { kind: "fade" }
15775
+ },
15776
+ {
15777
+ intent: "wave-edge-balanced",
15778
+ optionId: asBoundaryOptionId("break:wave-balanced"),
15779
+ family: "wave",
15780
+ variantId: "balanced",
15781
+ label: "Balanced wave",
15782
+ variantLabel: "Balanced",
15783
+ treatment: {
15784
+ kind: "wave-edge",
15785
+ height: "medium",
15786
+ amplitude: "balanced",
15787
+ rhythm: "double",
15788
+ symmetry: "symmetrical"
15789
+ },
15790
+ size: "medium",
15791
+ heightExpression: mediumHeight,
15792
+ shape: {
15793
+ kind: "wave",
15794
+ mask: "balanced"
15795
+ }
15796
+ },
15797
+ {
15798
+ intent: "wave-edge",
15799
+ optionId: asBoundaryOptionId("break:wave"),
15800
+ family: "wave",
15801
+ variantId: "classic",
15802
+ label: "Classic wave",
15803
+ variantLabel: "Classic",
15804
+ treatment: {
15805
+ kind: "wave-edge",
15806
+ height: "medium",
15807
+ amplitude: "balanced",
15808
+ rhythm: "double",
15809
+ symmetry: "asymmetrical"
15810
+ },
15811
+ size: "medium",
15812
+ heightExpression: mediumHeight,
15813
+ shape: {
15814
+ kind: "wave",
15815
+ mask: "classic"
15816
+ }
15817
+ },
15818
+ {
15819
+ intent: "wave-edge-gentle",
15820
+ optionId: asBoundaryOptionId("break:wave-gentle"),
15821
+ family: "wave",
15822
+ variantId: "gentle",
15823
+ label: "Gentle wave",
15824
+ variantLabel: "Gentle",
15825
+ treatment: {
15826
+ kind: "wave-edge",
15827
+ height: "compact",
15828
+ amplitude: "subtle",
15829
+ rhythm: "single",
15830
+ symmetry: "symmetrical"
15831
+ },
15832
+ size: "compact",
15833
+ heightExpression: compactHeight,
15834
+ shape: {
15835
+ kind: "wave",
15836
+ mask: "gentle"
15837
+ }
15838
+ },
15839
+ {
15840
+ intent: "wave-edge-bold",
15841
+ optionId: asBoundaryOptionId("break:wave-bold"),
15842
+ family: "wave",
15843
+ variantId: "bold",
15844
+ label: "Bold wave",
15845
+ variantLabel: "Bold",
15846
+ treatment: {
15847
+ kind: "wave-edge",
15848
+ height: "large",
15849
+ amplitude: "bold",
15850
+ rhythm: "double",
15851
+ symmetry: "symmetrical"
15852
+ },
15853
+ size: "large",
15854
+ heightExpression: largeHeight,
15855
+ shape: {
15856
+ kind: "wave",
15857
+ mask: "bold"
15858
+ }
15859
+ },
15860
+ {
15861
+ intent: "wave-edge-drift",
15862
+ optionId: asBoundaryOptionId("break:wave-drift"),
15863
+ family: "wave",
15864
+ variantId: "drift",
15865
+ label: "Drift wave",
15866
+ variantLabel: "Drift",
15867
+ treatment: {
15868
+ kind: "wave-edge",
15869
+ height: "medium",
15870
+ amplitude: "balanced",
15871
+ rhythm: "double",
15872
+ symmetry: "drift"
15873
+ },
15874
+ size: "medium",
15875
+ heightExpression: mediumHeight,
15876
+ shape: {
15877
+ kind: "wave",
15878
+ mask: "drift"
15879
+ }
15880
+ },
15881
+ {
15882
+ intent: "angle-edge-subtle",
15883
+ optionId: asBoundaryOptionId("break:angle-subtle"),
15884
+ family: "angle",
15885
+ variantId: "subtle",
15886
+ label: "Subtle angle",
15887
+ variantLabel: "Subtle",
15888
+ treatment: {
15889
+ kind: "angle-edge",
15890
+ height: "compact",
15891
+ slope: "subtle",
15892
+ direction: "forward"
15893
+ },
15894
+ size: "compact",
15895
+ heightExpression: compactHeight,
15896
+ shape: {
15897
+ kind: "angle",
15898
+ polygon: {
15899
+ startTopPercent: 34,
15900
+ endTopPercent: 18
15901
+ }
15902
+ }
15903
+ },
15904
+ {
15905
+ intent: "angle-edge",
15906
+ optionId: asBoundaryOptionId("break:angle-balanced"),
15907
+ family: "angle",
15908
+ variantId: "balanced",
15909
+ label: "Balanced angle",
15910
+ variantLabel: "Balanced",
15911
+ treatment: {
15912
+ kind: "angle-edge",
15913
+ height: "medium",
15914
+ slope: "balanced",
15915
+ direction: "forward"
15916
+ },
15917
+ size: "medium",
15918
+ heightExpression: mediumHeight,
15919
+ shape: {
15920
+ kind: "angle",
15921
+ polygon: {
15922
+ startTopPercent: 42,
15923
+ endTopPercent: 8
15924
+ }
15925
+ }
15926
+ },
15927
+ {
15928
+ intent: "angle-edge-steep",
15929
+ optionId: asBoundaryOptionId("break:angle-steep"),
15930
+ family: "angle",
15931
+ variantId: "steep",
15932
+ label: "Steep angle",
15933
+ variantLabel: "Steep",
15934
+ treatment: {
15935
+ kind: "angle-edge",
15936
+ height: "large",
15937
+ slope: "steep",
15938
+ direction: "forward"
15939
+ },
15940
+ size: "large",
15941
+ heightExpression: largeHeight,
15942
+ shape: {
15943
+ kind: "angle",
15944
+ polygon: {
15945
+ startTopPercent: 54,
15946
+ endTopPercent: 0
15947
+ }
15948
+ }
15949
+ }
15950
+ ]);
15576
15951
  }));
15577
15952
  //#endregion
15578
15953
  //#region ../theme-core/src/site-styles/sectionTransitions.ts
@@ -15584,45 +15959,122 @@ function boundaryRuntimeMetrics(family, size, heightExpression) {
15584
15959
  reserveCss: `calc((${heightExpression}) / 2)`
15585
15960
  };
15586
15961
  }
15587
- var noneBoundaryOption, softBoundaryOption, spaciousBoundaryOption;
15962
+ /**
15963
+ * The catalogue's compile-time coverage check guarantees an entry per
15964
+ * decorative intent, so a miss here is a broken invariant, not bad input.
15965
+ */
15966
+ function requireCatalogueValue(values, intent) {
15967
+ const value = values.get(intent);
15968
+ if (value === void 0) throw new Error(`Transition catalogue has no entry for ${intent}`);
15969
+ return value;
15970
+ }
15971
+ function boundaryOptionForTransitionIntent(intent) {
15972
+ return requireCatalogueValue(boundaryOptionByIntent, intent);
15973
+ }
15974
+ function transitionVariantForEntry(entry) {
15975
+ return {
15976
+ familyId: entry.family,
15977
+ variantId: entry.variantId,
15978
+ label: entry.variantLabel,
15979
+ boundaryOption: boundaryOptionForTransitionIntent(entry.intent)
15980
+ };
15981
+ }
15982
+ function stableTreatmentKey(treatment) {
15983
+ switch (treatment.kind) {
15984
+ case "none": return "none";
15985
+ case "soft-fade": return `${treatment.kind}:${treatment.height}:${treatment.curve}`;
15986
+ case "wave-edge": return [
15987
+ treatment.kind,
15988
+ treatment.height,
15989
+ treatment.amplitude,
15990
+ treatment.rhythm,
15991
+ treatment.symmetry
15992
+ ].join(":");
15993
+ case "angle-edge": return [
15994
+ treatment.kind,
15995
+ treatment.height,
15996
+ treatment.slope,
15997
+ treatment.direction
15998
+ ].join(":");
15999
+ case "legacy-unsupported": return `${treatment.kind}:${treatment.boundaryOptionId}`;
16000
+ }
16001
+ }
16002
+ var noneBoundaryOption, boundaryOptionByIntent, softBoundaryOption, spaciousBoundaryOption, boundaryOptions, noneTransitionVariant, sectionTransitionFamilies;
15588
16003
  var init_sectionTransitions = __esmMin((() => {
15589
16004
  init_types$7();
15590
- 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");
16005
+ init_transitionCatalogue();
16006
+ new Map(transitionCatalogueEntries.map((entry) => [entry.intent, entry]));
16007
+ new Map(transitionCatalogueEntries.map((entry) => [entry.intent, boundaryRuntimeMetrics(entry.family, entry.size, entry.heightExpression)]));
15591
16008
  noneBoundaryOption = {
15592
16009
  id: asBoundaryOptionId("break:none"),
15593
16010
  label: "None",
15594
16011
  transitionAfter: "none",
15595
16012
  treatment: { kind: "none" }
15596
16013
  };
15597
- softBoundaryOption = {
15598
- id: asBoundaryOptionId("break:soft"),
15599
- label: "Soft",
15600
- transitionAfter: "soft-fade-short",
15601
- treatment: {
15602
- kind: "soft-fade",
15603
- height: "medium",
15604
- curve: "soft"
15605
- }
16014
+ boundaryOptionByIntent = new Map(transitionCatalogueEntries.map((entry) => [entry.intent, {
16015
+ id: entry.optionId,
16016
+ label: entry.label,
16017
+ transitionAfter: entry.intent,
16018
+ treatment: entry.treatment
16019
+ }]));
16020
+ softBoundaryOption = boundaryOptionForTransitionIntent("soft-fade-short");
16021
+ spaciousBoundaryOption = boundaryOptionForTransitionIntent("soft-fade-long");
16022
+ boundaryOptionForTransitionIntent("soft-fade-expansive");
16023
+ boundaryOptionForTransitionIntent("wave-edge");
16024
+ boundaryOptionForTransitionIntent("wave-edge-balanced");
16025
+ boundaryOptionForTransitionIntent("wave-edge-gentle");
16026
+ boundaryOptionForTransitionIntent("wave-edge-bold");
16027
+ boundaryOptionForTransitionIntent("wave-edge-drift");
16028
+ boundaryOptionForTransitionIntent("angle-edge-subtle");
16029
+ boundaryOptionForTransitionIntent("angle-edge");
16030
+ boundaryOptionForTransitionIntent("angle-edge-steep");
16031
+ boundaryOptions = [noneBoundaryOption, ...transitionCatalogueEntries.map((entry) => boundaryOptionForTransitionIntent(entry.intent))];
16032
+ noneTransitionVariant = {
16033
+ familyId: "none",
16034
+ variantId: "none",
16035
+ label: "None",
16036
+ boundaryOption: noneBoundaryOption
15606
16037
  };
15607
- spaciousBoundaryOption = {
15608
- id: asBoundaryOptionId("break:spacious"),
15609
- label: "Spacious",
15610
- transitionAfter: "soft-fade-long",
15611
- treatment: {
15612
- kind: "soft-fade",
15613
- height: "large",
15614
- curve: "spacious"
15615
- }
16038
+ sectionTransitionFamilies = [{
16039
+ id: "none",
16040
+ label: "None",
16041
+ variants: [noneTransitionVariant]
16042
+ }, ...transitionCatalogueFamilies.map((family) => ({
16043
+ id: family.id,
16044
+ label: family.label,
16045
+ variants: requireNonEmptyReadonlyArray(transitionCatalogueEntries.filter((entry) => entry.family === family.id).map(transitionVariantForEntry), `Transition family ${family.id} has no catalogue entries.`)
16046
+ }))];
16047
+ new Map(boundaryOptions.map((option) => [option.id, option]));
16048
+ new Map(boundaryOptions.map((option) => [stableTreatmentKey(option.treatment), option]));
16049
+ new Map(sectionTransitionFamilies.flatMap((family) => family.variants.map((variant) => [variant.boundaryOption.id, variant])));
16050
+ new Map(sectionTransitionFamilies.map((family) => [family.id, family]));
16051
+ }));
16052
+ //#endregion
16053
+ //#region ../theme-core/src/site-styles/sectionBoundaryComposition.ts
16054
+ function requireThemeColorToken$1(value) {
16055
+ const token = parseThemeColorToken(value);
16056
+ if (!token) throw new Error(`Expected a theme color token. Received: ${value}`);
16057
+ return token;
16058
+ }
16059
+ var init_sectionBoundaryComposition = __esmMin((() => {
16060
+ init_themeColorTokens();
16061
+ init_runtimeBackgroundResolution();
16062
+ init_sectionTransitions();
16063
+ requireThemeColorToken$1("background");
16064
+ }));
16065
+ //#endregion
16066
+ //#region ../theme-core/src/site-styles/compositionBudget.ts
16067
+ var init_compositionBudget = __esmMin((() => {
16068
+ init_sectionBoundaryComposition();
16069
+ }));
16070
+ //#endregion
16071
+ //#region ../theme-core/src/site-styles/compilationPlan.ts
16072
+ var defaultHeaderBrandPreferences;
16073
+ var init_compilationPlan = __esmMin((() => {
16074
+ defaultHeaderBrandPreferences = {
16075
+ brandDisplay: "auto",
16076
+ logoSize: "auto"
15616
16077
  };
15617
- asBoundaryOptionId("break:expansive");
15618
- asBoundaryOptionId("break:wave");
15619
- asBoundaryOptionId("break:wave-balanced");
15620
- asBoundaryOptionId("break:wave-gentle");
15621
- asBoundaryOptionId("break:wave-bold");
15622
- asBoundaryOptionId("break:wave-drift");
15623
- asBoundaryOptionId("break:angle-subtle");
15624
- asBoundaryOptionId("break:angle-balanced");
15625
- asBoundaryOptionId("break:angle-steep");
15626
16078
  }));
15627
16079
  //#endregion
15628
16080
  //#region ../theme-core/src/site-styles/pageDesignIntent.ts
@@ -15654,14 +16106,11 @@ function validateUniquePageDesignPins(intent, ctx) {
15654
16106
  label: "block Look pin"
15655
16107
  });
15656
16108
  addDuplicateStringIssues(ctx, {
15657
- values: intent.boundaryPins.map((pin) => boundaryKey(pin.previousBlockId, pin.nextBlockId)),
16109
+ values: intent.boundaryPins.map((pin) => makeBoundaryId(pin.previousBlockId, pin.nextBlockId)),
15658
16110
  path: ["boundaryPins"],
15659
16111
  label: "boundary pin"
15660
16112
  });
15661
16113
  }
15662
- function boundaryKey(previousBlockId, nextBlockId) {
15663
- return makeBoundaryId(previousBlockId, nextBlockId);
15664
- }
15665
16114
  var pageDesignUserPinnedAppearanceChoiceSchema, pageDesignUserPinnedBoundaryChoiceSchema, pageDesignBoundaryTreatmentSchema, pageDesignUserPinnedBoundaryTreatmentChoiceSchema, pageDesignBlockLookPinSchema, pageDesignBoundaryPinSchema, legacyPageDesignBoundaryPinSchema;
15666
16115
  var init_pageDesignIntent = __esmMin((() => {
15667
16116
  init_types$7();
@@ -17354,6 +17803,36 @@ var init_designState = __esmMin((() => {
17354
17803
  authority: styleAuthoritySchema
17355
17804
  }).strict();
17356
17805
  }));
17806
+ var init_pageFlowPresets = __esmMin((() => {
17807
+ init_sectionTransitions();
17808
+ init_types$7();
17809
+ asPageFlowPresetId("flow:quiet"), noneBoundaryOption.id, asPageFlowPresetId("flow:balanced"), softBoundaryOption.id, asPageFlowPresetId("flow:expressive"), spaciousBoundaryOption.id;
17810
+ }));
17811
+ //#endregion
17812
+ //#region ../theme-core/src/site-styles/lookResolution.ts
17813
+ var init_lookResolution = __esmMin((() => {
17814
+ init_appearancePresets();
17815
+ }));
17816
+ var init_siteStyleBlockPolicies = __esmMin((() => {
17817
+ init_lookResolution();
17818
+ init_appearancePresets();
17819
+ init_pageDesignIntent();
17820
+ init_types$7();
17821
+ asPageFlowPresetId("generated-default");
17822
+ asSiteStyleId("site-style:south-west-twerk-school");
17823
+ asAppearancePresetId("hero-brand-scrim-fixed-frame");
17824
+ asLayoutVariantKey("classic");
17825
+ asLayoutVariantKey("micro");
17826
+ asBoundaryOptionId("break:wave");
17827
+ }));
17828
+ //#endregion
17829
+ //#region ../theme-core/src/site-styles/joinTreatment.ts
17830
+ var init_joinTreatment = __esmMin((() => {
17831
+ init_pageFlowPresets();
17832
+ init_pageDesignIntent();
17833
+ init_sectionTransitions();
17834
+ init_siteStyleBlockPolicies();
17835
+ }));
17357
17836
  //#endregion
17358
17837
  //#region ../theme-core/src/site-styles/runtimeCompiler.ts
17359
17838
  function defineSectionForegroundRuntimeTokens(input) {
@@ -17388,7 +17867,8 @@ var init_runtimeCompiler = __esmMin((() => {
17388
17867
  init_schema$3();
17389
17868
  init_styles();
17390
17869
  init_designState();
17391
- init_sectionTransitions();
17870
+ init_joinTreatment();
17871
+ init_rawStyleFields();
17392
17872
  init_tokens();
17393
17873
  init_gradients();
17394
17874
  defaultDesignRuntimeRules = defineDesignRuntimeRules({
@@ -17424,8 +17904,7 @@ var init_runtimeCompiler = __esmMin((() => {
17424
17904
  color: "surface",
17425
17905
  opacity: .88
17426
17906
  }
17427
- },
17428
- transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
17907
+ }
17429
17908
  });
17430
17909
  defaultComponentRuntimeRules = defineComponentRuntimeRules({
17431
17910
  panelFrames: {
@@ -19164,38 +19643,28 @@ var init_curatedSiteStyles = __esmMin((() => {
19164
19643
  //#region ../theme-core/src/site-styles/pageDesignEditorCapabilities.ts
19165
19644
  var init_pageDesignEditorCapabilities = __esmMin((() => {}));
19166
19645
  //#endregion
19167
- //#region ../theme-core/src/site-styles/lookResolution.ts
19168
- var init_lookResolution = __esmMin((() => {
19169
- init_appearancePresets();
19170
- }));
19171
- var init_siteStyleBlockPolicies = __esmMin((() => {
19172
- init_lookResolution();
19173
- init_appearancePresets();
19646
+ //#region ../theme-core/src/site-styles/pageDesignEditorBoundaries.ts
19647
+ var init_pageDesignEditorBoundaries = __esmMin((() => {
19174
19648
  init_pageDesignIntent();
19175
- init_types$7();
19649
+ init_joinTreatment();
19176
19650
  init_sectionTransitions();
19177
- asPageFlowPresetId("generated-default");
19178
- asSiteStyleId("site-style:south-west-twerk-school");
19179
- asAppearancePresetId("hero-brand-scrim-fixed-frame");
19180
- asLayoutVariantKey("classic");
19181
- asLayoutVariantKey("micro");
19182
- asBoundaryOptionId("break:wave");
19183
19651
  }));
19652
+ //#endregion
19653
+ //#region ../theme-core/src/site-styles/pageDesignEditorModel.ts
19184
19654
  var init_pageDesignEditorModel = __esmMin((() => {
19185
19655
  init_curatedSiteStyles();
19186
19656
  init_lookResolution();
19187
19657
  init_siteStyleBlockPolicies();
19188
19658
  init_pageDesignIntent();
19189
- init_types$7();
19659
+ init_pageFlowPresets();
19660
+ init_pageDesignEditorBoundaries();
19190
19661
  init_sectionTransitions();
19191
- asPageFlowPresetId("flow:quiet"), noneBoundaryOption.id, asPageFlowPresetId("flow:balanced"), softBoundaryOption.id, asPageFlowPresetId("flow:expressive"), spaciousBoundaryOption.id;
19192
19662
  })), blockDesignFallback;
19193
19663
  var init_resolver$1 = __esmMin((() => {
19194
19664
  init_types$7();
19195
19665
  blockDesignFallback = {
19196
19666
  sectionSurface: "base",
19197
19667
  contentFrame: plainFrame,
19198
- transitionAfter: "none",
19199
19668
  sectionHeight: "default",
19200
19669
  heroLegibility: "none",
19201
19670
  imageSurfaceTreatment: { kind: "none" },
@@ -19206,7 +19675,7 @@ var init_resolver$1 = __esmMin((() => {
19206
19675
  accordionIconTreatment: null,
19207
19676
  composition: null
19208
19677
  };
19209
- blockDesignFallback.sectionSurface, blockDesignFallback.contentFrame, blockDesignFallback.transitionAfter, blockDesignFallback.sectionHeight, blockDesignFallback.heroLegibility, blockDesignFallback.imageSurfaceTreatment, blockDesignFallback.imageSurfaceMotion, blockDesignFallback.tileTreatment, blockDesignFallback.eventListTreatment, blockDesignFallback.eyebrowTreatment, blockDesignFallback.accordionIconTreatment, blockDesignFallback.composition;
19678
+ blockDesignFallback.sectionSurface, blockDesignFallback.contentFrame, blockDesignFallback.sectionHeight, blockDesignFallback.heroLegibility, blockDesignFallback.imageSurfaceTreatment, blockDesignFallback.imageSurfaceMotion, blockDesignFallback.tileTreatment, blockDesignFallback.eventListTreatment, blockDesignFallback.eyebrowTreatment, blockDesignFallback.accordionIconTreatment, blockDesignFallback.composition;
19210
19679
  }));
19211
19680
  //#endregion
19212
19681
  //#region ../theme-core/src/site-styles/siteChromeBackgrounds.ts
@@ -19275,13 +19744,6 @@ var init_headerRecompile = __esmMin((() => {
19275
19744
  init_siteChromeNavPreferences();
19276
19745
  }));
19277
19746
  //#endregion
19278
- //#region ../theme-core/src/site-styles/runtimeBackgroundResolution.ts
19279
- var init_runtimeBackgroundResolution = __esmMin((() => {
19280
- init_boxBackgroundSchema();
19281
- init_surfaces();
19282
- init_rawStyleFields();
19283
- }));
19284
- //#endregion
19285
19747
  //#region ../theme-core/src/site-styles/siteStyleThemeCompiler.ts
19286
19748
  var init_siteStyleThemeCompiler = __esmMin((() => {
19287
19749
  init_schema$3();
@@ -19303,8 +19765,8 @@ var init_previewCustomization = __esmMin((() => {}));
19303
19765
  //#endregion
19304
19766
  //#region ../theme-core/src/site-styles/previewCompiler.ts
19305
19767
  var init_previewCompiler = __esmMin((() => {
19768
+ init_sectionTransitions();
19306
19769
  init_schema$3();
19307
- init_tokens();
19308
19770
  init_curated();
19309
19771
  init_concretePalette();
19310
19772
  init_curatedSiteStyles();
@@ -19313,7 +19775,6 @@ var init_previewCompiler = __esmMin((() => {
19313
19775
  init_headerRecompile();
19314
19776
  init_siteChromeNavPreferences();
19315
19777
  init_runtimeCompiler();
19316
- init_rawStyleFields();
19317
19778
  init_runtimeBackgroundResolution();
19318
19779
  init_siteStyleThemeCompiler();
19319
19780
  init_buttonSelectionCompiler();
@@ -19321,6 +19782,7 @@ var init_previewCompiler = __esmMin((() => {
19321
19782
  init_pageDesignEditorModel();
19322
19783
  init_pageDesignIntent();
19323
19784
  init_previewCustomization();
19785
+ init_joinTreatment();
19324
19786
  init_types$7();
19325
19787
  }));
19326
19788
  //#endregion
@@ -19424,11 +19886,13 @@ var init_generatedDesignPipelineHelpers = __esmMin((() => {
19424
19886
  //#endregion
19425
19887
  //#region ../theme-core/src/site-styles/generatedDesignPipeline.ts
19426
19888
  var init_generatedDesignPipeline = __esmMin((() => {
19889
+ init_compositionBudget();
19427
19890
  init_generatedSchemas();
19428
19891
  init_siteStyleBlockPolicies();
19429
19892
  init_curatedSiteStyles();
19430
19893
  init_lookResolution();
19431
19894
  init_headerOpeningSection();
19895
+ init_joinTreatment();
19432
19896
  init_resolver$1();
19433
19897
  init_runtimeCompiler();
19434
19898
  init_generatedDesignPipelineHelpers();
@@ -19702,6 +20166,7 @@ var init_site_styles = __esmMin((() => {
19702
20166
  init_headerRecompile();
19703
20167
  init_headerOpeningForeground();
19704
20168
  init_headerOpeningSection();
20169
+ init_joinTreatment();
19705
20170
  init_lookResolution();
19706
20171
  init_lookOptionGroups();
19707
20172
  init_logoBranding();
@@ -19721,6 +20186,7 @@ var init_site_styles = __esmMin((() => {
19721
20186
  init_runtimeCompiler();
19722
20187
  init_runtimeBackgroundResolution();
19723
20188
  init_sectionTransitions();
20189
+ init_sectionBoundaryComposition();
19724
20190
  init_siteChromeBackgrounds();
19725
20191
  init_siteChromeNavPreferences();
19726
20192
  init_siteStyleThemeCompiler();
@@ -19728,6 +20194,7 @@ var init_site_styles = __esmMin((() => {
19728
20194
  init_sourceCatalogs();
19729
20195
  init_styleTags();
19730
20196
  init_tokenRecipes();
20197
+ init_transitionCatalogue();
19731
20198
  init_siteStyleTypography();
19732
20199
  init_themeParity();
19733
20200
  init_types$7();
@@ -19959,18 +20426,16 @@ var init_footer = __esmMin((() => {
19959
20426
  init_generateFooterCss();
19960
20427
  }));
19961
20428
  //#endregion
20429
+ //#region ../theme-core/src/layout/boundaryCss.ts
20430
+ var init_boundaryCss = __esmMin((() => {
20431
+ init_sectionTransitions();
20432
+ init_transitionCatalogue();
20433
+ }));
20434
+ //#endregion
19962
20435
  //#region ../theme-core/src/layout/generateLayoutCss.ts
19963
- function svgDataUrl(svg) {
19964
- return `data:image/svg+xml,${encodeURIComponent(svg)}`;
19965
- }
19966
20436
  var init_generateLayoutCss = __esmMin((() => {
19967
20437
  init_breakpoints();
19968
- init_sectionTransitions();
19969
- svgDataUrl("<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V46C130 55 260 24 420 30C590 36 690 62 860 42C1035 21 1160 47 1305 36C1365 31 1415 33 1440 38V72H0Z' fill='white'/></svg>");
19970
- svgDataUrl("<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V42C120 24 240 24 360 42C480 60 600 60 720 42C840 24 960 24 1080 42C1200 60 1320 60 1440 42V72H0Z' fill='white'/></svg>");
19971
- svgDataUrl("<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V43C180 32 300 32 480 43C660 54 780 54 960 43C1140 32 1260 32 1440 43V72H0Z' fill='white'/></svg>");
19972
- svgDataUrl("<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V44C90 14 270 14 360 44C450 74 630 74 720 44C810 14 990 14 1080 44C1170 74 1350 74 1440 44V72H0Z' fill='white'/></svg>");
19973
- svgDataUrl("<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V39C115 31 205 54 340 48C505 41 610 16 760 33C920 51 1015 64 1160 44C1280 27 1375 35 1440 50V72H0Z' fill='white'/></svg>");
20438
+ init_boundaryCss();
19974
20439
  }));
19975
20440
  //#endregion
19976
20441
  //#region ../theme-core/src/layout/index.ts
@@ -21211,7 +21676,8 @@ var init_schema = __esmMin((() => {
21211
21676
  "eventCategories",
21212
21677
  "eventSeries",
21213
21678
  "venues",
21214
- "staffMembers"
21679
+ "staffMembers",
21680
+ "appointmentServiceCategories"
21215
21681
  ];
21216
21682
  mediaDeliverySchema = z.object({
21217
21683
  sizes: z.string().optional(),
@@ -34672,6 +35138,7 @@ var init_appointment_services = __esmMin((() => {
34672
35138
  init_fragments$1();
34673
35139
  init_boxStyles$1();
34674
35140
  init_defineBlock();
35141
+ init_schema();
34675
35142
  appointmentServicesManifest = createBlockManifest({
34676
35143
  id: "block.appointment-services",
34677
35144
  version: "1.0.0",
@@ -34696,6 +35163,15 @@ var init_appointment_services = __esmMin((() => {
34696
35163
  required: false,
34697
35164
  ui: { intent: "content" }
34698
35165
  },
35166
+ createSiteOptionSelectField({
35167
+ id: "categoryId",
35168
+ label: "Category",
35169
+ description: "Show one category (with its heading and intro), or leave it on All categories to show everything grouped.",
35170
+ required: false,
35171
+ multiple: false,
35172
+ optionSource: "appointmentServiceCategories",
35173
+ ui: { intent: "content" }
35174
+ }),
34699
35175
  sectionStylesField({
34700
35176
  id: "_sectionStyles",
34701
35177
  label: "Section styles",
@@ -34730,6 +35206,7 @@ var init_appointment_services = __esmMin((() => {
34730
35206
  richText({ className: "rb-prose rb-max-w-none" }, bind$1("content.description"), when("content.description")),
34731
35207
  el$1("appointment-services", {
34732
35208
  sectionHeading: { $bind: { from: "content.heading" } },
35209
+ categoryId: { $bind: { from: "content.categoryId" } },
34733
35210
  services: { $bind: { from: "data.services" } },
34734
35211
  pathname: { $bind: { from: "$root.pathname" } },
34735
35212
  servicePathPrefix: { $bind: { from: "$root.appointmentServicePathPrefix" } }
@@ -45961,6 +46438,17 @@ function coerceToString(value) {
45961
46438
  return "";
45962
46439
  }
45963
46440
  /**
46441
+ * The appointment-services catalogue (issue 1403) pairs the services with the
46442
+ * site's ordered categories. Both are needed to group them, so that response
46443
+ * is passed through whole; any other `{ services }` wrapper is unwrapped.
46444
+ */
46445
+ function coerceServicesPayload(record) {
46446
+ return Array.isArray(record.services) && Array.isArray(record.categories) ? {
46447
+ services: record.services,
46448
+ categories: record.categories
46449
+ } : record.services;
46450
+ }
46451
+ /**
45964
46452
  * Extract data from API response.
45965
46453
  * Unwraps common response wrappers: { data }, { form }, { entries }, { services }, { teamMembers }
45966
46454
  *
@@ -45975,7 +46463,7 @@ function coercePayload(payload) {
45975
46463
  if ("data" in record && typeof record.data !== "function") return record.data;
45976
46464
  if ("form" in record && typeof record.form !== "function") return record.form;
45977
46465
  if ("entries" in record && typeof record.entries !== "function") return record.entries;
45978
- if ("services" in record && typeof record.services !== "function") return record.services;
46466
+ if ("services" in record && typeof record.services !== "function") return coerceServicesPayload(record);
45979
46467
  if ("teamMembers" in record && typeof record.teamMembers !== "function") return record.teamMembers;
45980
46468
  }
45981
46469
  return payload;
@@ -46984,7 +47472,12 @@ var init_appointmentSetup = __esmMin((() => {
46984
47472
  venue: appointmentSetupVenueChoiceSchema,
46985
47473
  timezone: z.string().trim().min(1).nullable(),
46986
47474
  payment: appointmentSetupPaymentDraftSchema,
46987
- assignment: appointmentSetupServiceAssignmentDraftSchema
47475
+ assignment: appointmentSetupServiceAssignmentDraftSchema,
47476
+ /**
47477
+ * The service's category, or null for "Other" (issue 1403). Omitted leaves
47478
+ * an existing service's category alone and puts a new one in "Other".
47479
+ */
47480
+ categoryId: z.string().uuid().nullable().optional()
46988
47481
  }).superRefine((service, ctx) => {
46989
47482
  if (service.payment.kind !== "free" && (service.priceAmount === null || service.priceAmount <= 0)) ctx.addIssue({
46990
47483
  code: "custom",
@@ -48372,7 +48865,7 @@ async function loadPageWithDeps(deps, params) {
48372
48865
  });
48373
48866
  return {
48374
48867
  page: pageOutline,
48375
- runtimeBoundaries: pageData.runtimeBoundaries,
48868
+ runtimeJoins: pageData.runtimeJoins,
48376
48869
  theme: requireSdkTheme(support.theme, siteId),
48377
48870
  sdkConfig: support.sdkConfig,
48378
48871
  siteId,