@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
@@ -5033,6 +5033,15 @@ function asSiteStyleId(value) {
5033
5033
  function asDesignSystemTemplateId(value) {
5034
5034
  return brandNonEmptyString(value, "DesignSystemTemplateId");
5035
5035
  }
5036
+ function toNonEmptyReadonlyArray(values) {
5037
+ const [first, ...rest] = values;
5038
+ return first === void 0 ? null : [first, ...rest];
5039
+ }
5040
+ function requireNonEmptyReadonlyArray(values, message = "Expected a non-empty array.") {
5041
+ const result = toNonEmptyReadonlyArray(values);
5042
+ if (!result) throw new Error(message);
5043
+ return result;
5044
+ }
5036
5045
  function makeBoundaryId(previousBlockId, nextBlockId) {
5037
5046
  return asDesignBoundaryId(`boundary:${encodeURIComponent(previousBlockId)}:${encodeURIComponent(nextBlockId)}`);
5038
5047
  }
@@ -5232,16 +5241,18 @@ const themeV2RuntimeStyleFieldNames = [
5232
5241
  "_frameStyles",
5233
5242
  "_sectionStyles",
5234
5243
  "_containerStyles",
5235
- "_cardStyles",
5236
- "_transitionStyles",
5237
- "styleGroup"
5244
+ "_cardStyles"
5238
5245
  ];
5239
5246
  const themeV2BlockSpecificRawStyleFieldNames = [
5240
5247
  "_contentCardStyles",
5241
5248
  "_heroLayoutStyles",
5242
5249
  "_textCardStyles"
5243
5250
  ];
5244
- const themeV2NormalEditorRawStyleFieldNames = [...themeV2RuntimeStyleFieldNames, ...themeV2BlockSpecificRawStyleFieldNames];
5251
+ const themeV2NormalEditorRawStyleFieldNames = [
5252
+ ...themeV2RuntimeStyleFieldNames,
5253
+ ...themeV2BlockSpecificRawStyleFieldNames,
5254
+ "styleGroup"
5255
+ ];
5245
5256
  new Set(themeV2NormalEditorRawStyleFieldNames);
5246
5257
  [...themeV2RuntimeStyleFieldNames, ...themeV2BlockSpecificRawStyleFieldNames];
5247
5258
  const pageDesignEditorBackgroundOverrideOwner = "page-design-editor";
@@ -6967,11 +6978,260 @@ function cardRoleFromLegacyVocabulary(value) {
6967
6978
  */
6968
6979
  const cardRoleWithLegacyAliasSchema = z.preprocess((value) => cardRoleFromLegacyVocabulary(value) ?? value, cardRoleSchema);
6969
6980
  //#endregion
6970
- //#region ../theme-core/src/site-styles/compilationPlan.ts
6971
- const defaultHeaderBrandPreferences = {
6972
- brandDisplay: "auto",
6973
- logoSize: "auto"
6974
- };
6981
+ //#region ../theme-core/src/site-styles/transitionCatalogue.ts
6982
+ /**
6983
+ * Family order for pickers. Entries below are listed family by family in this
6984
+ * same order, so the flat option list and the grouped families agree.
6985
+ */
6986
+ const transitionCatalogueFamilies = [
6987
+ {
6988
+ id: "gradient",
6989
+ label: "Gradient"
6990
+ },
6991
+ {
6992
+ id: "wave",
6993
+ label: "Wave"
6994
+ },
6995
+ {
6996
+ id: "angle",
6997
+ label: "Angle"
6998
+ }
6999
+ ];
7000
+ const mediumHeight = "6rem + 2px";
7001
+ const compactHeight = "4.5rem + 2px";
7002
+ const largeHeight = "7rem + 2px";
7003
+ /**
7004
+ * The single source of transition vocabulary. Order is significant: it is the
7005
+ * order of `boundaryOptions` (after `none`) and of each family's variants,
7006
+ * which persisted pins, page-flow presets and the editor picker all rely on.
7007
+ *
7008
+ * Shapes match what `generateLayoutCss` draws today. Structured
7009
+ * amplitude/frequency treatments (issue 826) extend this list later.
7010
+ */
7011
+ const transitionCatalogueEntries = defineExactCatalog()([
7012
+ {
7013
+ intent: "soft-fade-short",
7014
+ optionId: asBoundaryOptionId("break:soft"),
7015
+ family: "gradient",
7016
+ variantId: "soft",
7017
+ label: "Soft",
7018
+ variantLabel: "Soft",
7019
+ treatment: {
7020
+ kind: "soft-fade",
7021
+ height: "medium",
7022
+ curve: "soft"
7023
+ },
7024
+ size: "medium",
7025
+ heightExpression: mediumHeight,
7026
+ shape: { kind: "fade" }
7027
+ },
7028
+ {
7029
+ intent: "soft-fade-long",
7030
+ optionId: asBoundaryOptionId("break:spacious"),
7031
+ family: "gradient",
7032
+ variantId: "spacious",
7033
+ label: "Spacious",
7034
+ variantLabel: "Spacious",
7035
+ treatment: {
7036
+ kind: "soft-fade",
7037
+ height: "large",
7038
+ curve: "spacious"
7039
+ },
7040
+ size: "spacious",
7041
+ heightExpression: "10rem",
7042
+ shape: { kind: "fade" }
7043
+ },
7044
+ {
7045
+ intent: "soft-fade-expansive",
7046
+ optionId: asBoundaryOptionId("break:expansive"),
7047
+ family: "gradient",
7048
+ variantId: "expansive",
7049
+ label: "Expansive",
7050
+ variantLabel: "Expansive",
7051
+ treatment: {
7052
+ kind: "soft-fade",
7053
+ height: "expansive",
7054
+ curve: "expansive"
7055
+ },
7056
+ size: "expansive",
7057
+ heightExpression: "14rem",
7058
+ shape: { kind: "fade" }
7059
+ },
7060
+ {
7061
+ intent: "wave-edge-balanced",
7062
+ optionId: asBoundaryOptionId("break:wave-balanced"),
7063
+ family: "wave",
7064
+ variantId: "balanced",
7065
+ label: "Balanced wave",
7066
+ variantLabel: "Balanced",
7067
+ treatment: {
7068
+ kind: "wave-edge",
7069
+ height: "medium",
7070
+ amplitude: "balanced",
7071
+ rhythm: "double",
7072
+ symmetry: "symmetrical"
7073
+ },
7074
+ size: "medium",
7075
+ heightExpression: mediumHeight,
7076
+ shape: {
7077
+ kind: "wave",
7078
+ mask: "balanced"
7079
+ }
7080
+ },
7081
+ {
7082
+ intent: "wave-edge",
7083
+ optionId: asBoundaryOptionId("break:wave"),
7084
+ family: "wave",
7085
+ variantId: "classic",
7086
+ label: "Classic wave",
7087
+ variantLabel: "Classic",
7088
+ treatment: {
7089
+ kind: "wave-edge",
7090
+ height: "medium",
7091
+ amplitude: "balanced",
7092
+ rhythm: "double",
7093
+ symmetry: "asymmetrical"
7094
+ },
7095
+ size: "medium",
7096
+ heightExpression: mediumHeight,
7097
+ shape: {
7098
+ kind: "wave",
7099
+ mask: "classic"
7100
+ }
7101
+ },
7102
+ {
7103
+ intent: "wave-edge-gentle",
7104
+ optionId: asBoundaryOptionId("break:wave-gentle"),
7105
+ family: "wave",
7106
+ variantId: "gentle",
7107
+ label: "Gentle wave",
7108
+ variantLabel: "Gentle",
7109
+ treatment: {
7110
+ kind: "wave-edge",
7111
+ height: "compact",
7112
+ amplitude: "subtle",
7113
+ rhythm: "single",
7114
+ symmetry: "symmetrical"
7115
+ },
7116
+ size: "compact",
7117
+ heightExpression: compactHeight,
7118
+ shape: {
7119
+ kind: "wave",
7120
+ mask: "gentle"
7121
+ }
7122
+ },
7123
+ {
7124
+ intent: "wave-edge-bold",
7125
+ optionId: asBoundaryOptionId("break:wave-bold"),
7126
+ family: "wave",
7127
+ variantId: "bold",
7128
+ label: "Bold wave",
7129
+ variantLabel: "Bold",
7130
+ treatment: {
7131
+ kind: "wave-edge",
7132
+ height: "large",
7133
+ amplitude: "bold",
7134
+ rhythm: "double",
7135
+ symmetry: "symmetrical"
7136
+ },
7137
+ size: "large",
7138
+ heightExpression: largeHeight,
7139
+ shape: {
7140
+ kind: "wave",
7141
+ mask: "bold"
7142
+ }
7143
+ },
7144
+ {
7145
+ intent: "wave-edge-drift",
7146
+ optionId: asBoundaryOptionId("break:wave-drift"),
7147
+ family: "wave",
7148
+ variantId: "drift",
7149
+ label: "Drift wave",
7150
+ variantLabel: "Drift",
7151
+ treatment: {
7152
+ kind: "wave-edge",
7153
+ height: "medium",
7154
+ amplitude: "balanced",
7155
+ rhythm: "double",
7156
+ symmetry: "drift"
7157
+ },
7158
+ size: "medium",
7159
+ heightExpression: mediumHeight,
7160
+ shape: {
7161
+ kind: "wave",
7162
+ mask: "drift"
7163
+ }
7164
+ },
7165
+ {
7166
+ intent: "angle-edge-subtle",
7167
+ optionId: asBoundaryOptionId("break:angle-subtle"),
7168
+ family: "angle",
7169
+ variantId: "subtle",
7170
+ label: "Subtle angle",
7171
+ variantLabel: "Subtle",
7172
+ treatment: {
7173
+ kind: "angle-edge",
7174
+ height: "compact",
7175
+ slope: "subtle",
7176
+ direction: "forward"
7177
+ },
7178
+ size: "compact",
7179
+ heightExpression: compactHeight,
7180
+ shape: {
7181
+ kind: "angle",
7182
+ polygon: {
7183
+ startTopPercent: 34,
7184
+ endTopPercent: 18
7185
+ }
7186
+ }
7187
+ },
7188
+ {
7189
+ intent: "angle-edge",
7190
+ optionId: asBoundaryOptionId("break:angle-balanced"),
7191
+ family: "angle",
7192
+ variantId: "balanced",
7193
+ label: "Balanced angle",
7194
+ variantLabel: "Balanced",
7195
+ treatment: {
7196
+ kind: "angle-edge",
7197
+ height: "medium",
7198
+ slope: "balanced",
7199
+ direction: "forward"
7200
+ },
7201
+ size: "medium",
7202
+ heightExpression: mediumHeight,
7203
+ shape: {
7204
+ kind: "angle",
7205
+ polygon: {
7206
+ startTopPercent: 42,
7207
+ endTopPercent: 8
7208
+ }
7209
+ }
7210
+ },
7211
+ {
7212
+ intent: "angle-edge-steep",
7213
+ optionId: asBoundaryOptionId("break:angle-steep"),
7214
+ family: "angle",
7215
+ variantId: "steep",
7216
+ label: "Steep angle",
7217
+ variantLabel: "Steep",
7218
+ treatment: {
7219
+ kind: "angle-edge",
7220
+ height: "large",
7221
+ slope: "steep",
7222
+ direction: "forward"
7223
+ },
7224
+ size: "large",
7225
+ heightExpression: largeHeight,
7226
+ shape: {
7227
+ kind: "angle",
7228
+ polygon: {
7229
+ startTopPercent: 54,
7230
+ endTopPercent: 0
7231
+ }
7232
+ }
7233
+ }
7234
+ ]);
6975
7235
  //#endregion
6976
7236
  //#region ../theme-core/src/site-styles/sectionTransitions.ts
6977
7237
  function boundaryRuntimeMetrics(family, size, heightExpression) {
@@ -6982,42 +7242,106 @@ function boundaryRuntimeMetrics(family, size, heightExpression) {
6982
7242
  reserveCss: `calc((${heightExpression}) / 2)`
6983
7243
  };
6984
7244
  }
6985
- 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");
7245
+ new Map(transitionCatalogueEntries.map((entry) => [entry.intent, entry]));
7246
+ new Map(transitionCatalogueEntries.map((entry) => [entry.intent, boundaryRuntimeMetrics(entry.family, entry.size, entry.heightExpression)]));
7247
+ /**
7248
+ * The catalogue's compile-time coverage check guarantees an entry per
7249
+ * decorative intent, so a miss here is a broken invariant, not bad input.
7250
+ */
7251
+ function requireCatalogueValue(values, intent) {
7252
+ const value = values.get(intent);
7253
+ if (value === void 0) throw new Error(`Transition catalogue has no entry for ${intent}`);
7254
+ return value;
7255
+ }
6986
7256
  const noneBoundaryOption = {
6987
7257
  id: asBoundaryOptionId("break:none"),
6988
7258
  label: "None",
6989
7259
  transitionAfter: "none",
6990
7260
  treatment: { kind: "none" }
6991
7261
  };
6992
- const softBoundaryOption = {
6993
- id: asBoundaryOptionId("break:soft"),
6994
- label: "Soft",
6995
- transitionAfter: "soft-fade-short",
6996
- treatment: {
6997
- kind: "soft-fade",
6998
- height: "medium",
6999
- curve: "soft"
7000
- }
7262
+ const boundaryOptionByIntent = new Map(transitionCatalogueEntries.map((entry) => [entry.intent, {
7263
+ id: entry.optionId,
7264
+ label: entry.label,
7265
+ transitionAfter: entry.intent,
7266
+ treatment: entry.treatment
7267
+ }]));
7268
+ function boundaryOptionForTransitionIntent(intent) {
7269
+ return requireCatalogueValue(boundaryOptionByIntent, intent);
7270
+ }
7271
+ const softBoundaryOption = boundaryOptionForTransitionIntent("soft-fade-short");
7272
+ const spaciousBoundaryOption = boundaryOptionForTransitionIntent("soft-fade-long");
7273
+ boundaryOptionForTransitionIntent("soft-fade-expansive");
7274
+ boundaryOptionForTransitionIntent("wave-edge");
7275
+ boundaryOptionForTransitionIntent("wave-edge-balanced");
7276
+ boundaryOptionForTransitionIntent("wave-edge-gentle");
7277
+ boundaryOptionForTransitionIntent("wave-edge-bold");
7278
+ boundaryOptionForTransitionIntent("wave-edge-drift");
7279
+ boundaryOptionForTransitionIntent("angle-edge-subtle");
7280
+ boundaryOptionForTransitionIntent("angle-edge");
7281
+ boundaryOptionForTransitionIntent("angle-edge-steep");
7282
+ /**
7283
+ * Must remain non-empty; downstream code indexes `[0]` as the documented default.
7284
+ */
7285
+ const boundaryOptions = [noneBoundaryOption, ...transitionCatalogueEntries.map((entry) => boundaryOptionForTransitionIntent(entry.intent))];
7286
+ const noneTransitionVariant = {
7287
+ familyId: "none",
7288
+ variantId: "none",
7289
+ label: "None",
7290
+ boundaryOption: noneBoundaryOption
7001
7291
  };
7002
- const spaciousBoundaryOption = {
7003
- id: asBoundaryOptionId("break:spacious"),
7004
- label: "Spacious",
7005
- transitionAfter: "soft-fade-long",
7006
- treatment: {
7007
- kind: "soft-fade",
7008
- height: "large",
7009
- curve: "spacious"
7010
- }
7292
+ function transitionVariantForEntry(entry) {
7293
+ return {
7294
+ familyId: entry.family,
7295
+ variantId: entry.variantId,
7296
+ label: entry.variantLabel,
7297
+ boundaryOption: boundaryOptionForTransitionIntent(entry.intent)
7298
+ };
7299
+ }
7300
+ const sectionTransitionFamilies = [{
7301
+ id: "none",
7302
+ label: "None",
7303
+ variants: [noneTransitionVariant]
7304
+ }, ...transitionCatalogueFamilies.map((family) => ({
7305
+ id: family.id,
7306
+ label: family.label,
7307
+ variants: requireNonEmptyReadonlyArray(transitionCatalogueEntries.filter((entry) => entry.family === family.id).map(transitionVariantForEntry), `Transition family ${family.id} has no catalogue entries.`)
7308
+ }))];
7309
+ new Map(boundaryOptions.map((option) => [option.id, option]));
7310
+ new Map(boundaryOptions.map((option) => [stableTreatmentKey(option.treatment), option]));
7311
+ new Map(sectionTransitionFamilies.flatMap((family) => family.variants.map((variant) => [variant.boundaryOption.id, variant])));
7312
+ new Map(sectionTransitionFamilies.map((family) => [family.id, family]));
7313
+ function stableTreatmentKey(treatment) {
7314
+ switch (treatment.kind) {
7315
+ case "none": return "none";
7316
+ case "soft-fade": return `${treatment.kind}:${treatment.height}:${treatment.curve}`;
7317
+ case "wave-edge": return [
7318
+ treatment.kind,
7319
+ treatment.height,
7320
+ treatment.amplitude,
7321
+ treatment.rhythm,
7322
+ treatment.symmetry
7323
+ ].join(":");
7324
+ case "angle-edge": return [
7325
+ treatment.kind,
7326
+ treatment.height,
7327
+ treatment.slope,
7328
+ treatment.direction
7329
+ ].join(":");
7330
+ case "legacy-unsupported": return `${treatment.kind}:${treatment.boundaryOptionId}`;
7331
+ }
7332
+ }
7333
+ requireThemeColorToken$1("background");
7334
+ function requireThemeColorToken$1(value) {
7335
+ const token = parseThemeColorToken(value);
7336
+ if (!token) throw new Error(`Expected a theme color token. Received: ${value}`);
7337
+ return token;
7338
+ }
7339
+ //#endregion
7340
+ //#region ../theme-core/src/site-styles/compilationPlan.ts
7341
+ const defaultHeaderBrandPreferences = {
7342
+ brandDisplay: "auto",
7343
+ logoSize: "auto"
7011
7344
  };
7012
- asBoundaryOptionId("break:expansive");
7013
- asBoundaryOptionId("break:wave");
7014
- asBoundaryOptionId("break:wave-balanced");
7015
- asBoundaryOptionId("break:wave-gentle");
7016
- asBoundaryOptionId("break:wave-bold");
7017
- asBoundaryOptionId("break:wave-drift");
7018
- asBoundaryOptionId("break:angle-subtle");
7019
- asBoundaryOptionId("break:angle-balanced");
7020
- asBoundaryOptionId("break:angle-steep");
7021
7345
  asBoundaryOptionId("break:unknown");
7022
7346
  const pageDesignUserPinnedAppearanceChoiceSchema = z.object({
7023
7347
  kind: z.literal("user-pinned"),
@@ -7144,14 +7468,11 @@ function validateUniquePageDesignPins(intent, ctx) {
7144
7468
  label: "block Look pin"
7145
7469
  });
7146
7470
  addDuplicateStringIssues(ctx, {
7147
- values: intent.boundaryPins.map((pin) => boundaryKey(pin.previousBlockId, pin.nextBlockId)),
7471
+ values: intent.boundaryPins.map((pin) => makeBoundaryId(pin.previousBlockId, pin.nextBlockId)),
7148
7472
  path: ["boundaryPins"],
7149
7473
  label: "boundary pin"
7150
7474
  });
7151
7475
  }
7152
- function boundaryKey(previousBlockId, nextBlockId) {
7153
- return makeBoundaryId(previousBlockId, nextBlockId);
7154
- }
7155
7476
  //#endregion
7156
7477
  //#region ../theme-core/src/accordions/siteStyleDefaults.ts
7157
7478
  /**
@@ -8752,6 +9073,13 @@ z.object({
8752
9073
  fields: nonEmptyRuntimeStyleFieldNamesSchema,
8753
9074
  authority: styleAuthoritySchema
8754
9075
  }).strict();
9076
+ asPageFlowPresetId("flow:quiet"), noneBoundaryOption.id, asPageFlowPresetId("flow:balanced"), softBoundaryOption.id, asPageFlowPresetId("flow:expressive"), spaciousBoundaryOption.id;
9077
+ asPageFlowPresetId("generated-default");
9078
+ asSiteStyleId("site-style:south-west-twerk-school");
9079
+ asAppearancePresetId("hero-brand-scrim-fixed-frame");
9080
+ asLayoutVariantKey("classic");
9081
+ asLayoutVariantKey("micro");
9082
+ asBoundaryOptionId("break:wave");
8755
9083
  //#endregion
8756
9084
  //#region ../theme-core/src/site-styles/runtimeCompiler.ts
8757
9085
  function defineSectionForegroundRuntimeTokens(input) {
@@ -8775,7 +9103,7 @@ function defineComponentRuntimeRules(rules) {
8775
9103
  }
8776
9104
  /**
8777
9105
  * Default design rules translate semantic page-level choices into the current
8778
- * runtime's section background and transition style-group vocabulary.
9106
+ * runtime's section background vocabulary.
8779
9107
  */
8780
9108
  const defaultDesignRuntimeRules = defineDesignRuntimeRules({
8781
9109
  sectionSurfaces: {
@@ -8810,8 +9138,7 @@ const defaultDesignRuntimeRules = defineDesignRuntimeRules({
8810
9138
  color: "surface",
8811
9139
  opacity: .88
8812
9140
  }
8813
- },
8814
- transitionClassName: (transition, fromSurface, toSurface) => transition === "none" ? null : `site-style-transition-${transition}-from-${fromSurface}-to-${toSurface}`
9141
+ }
8815
9142
  });
8816
9143
  /**
8817
9144
  * Default component rules translate frame and item-surface semantics into the
@@ -10546,19 +10873,11 @@ const curatedSiteStyles = [
10546
10873
  })
10547
10874
  ];
10548
10875
  new Map(curatedSiteStyles.map((style) => [style.id, style]));
10549
- asPageFlowPresetId("generated-default");
10550
- asSiteStyleId("site-style:south-west-twerk-school");
10551
- asAppearancePresetId("hero-brand-scrim-fixed-frame");
10552
- asLayoutVariantKey("classic");
10553
- asLayoutVariantKey("micro");
10554
- asBoundaryOptionId("break:wave");
10555
- asPageFlowPresetId("flow:quiet"), noneBoundaryOption.id, asPageFlowPresetId("flow:balanced"), softBoundaryOption.id, asPageFlowPresetId("flow:expressive"), spaciousBoundaryOption.id;
10556
10876
  //#endregion
10557
10877
  //#region ../theme-core/src/site-styles/resolver.ts
10558
10878
  const blockDesignFallback = {
10559
10879
  sectionSurface: "base",
10560
10880
  contentFrame: plainFrame,
10561
- transitionAfter: "none",
10562
10881
  sectionHeight: "default",
10563
10882
  heroLegibility: "none",
10564
10883
  imageSurfaceTreatment: { kind: "none" },
@@ -10569,7 +10888,7 @@ const blockDesignFallback = {
10569
10888
  accordionIconTreatment: null,
10570
10889
  composition: null
10571
10890
  };
10572
- blockDesignFallback.sectionSurface, blockDesignFallback.contentFrame, blockDesignFallback.transitionAfter, blockDesignFallback.sectionHeight, blockDesignFallback.heroLegibility, blockDesignFallback.imageSurfaceTreatment, blockDesignFallback.imageSurfaceMotion, blockDesignFallback.tileTreatment, blockDesignFallback.eventListTreatment, blockDesignFallback.eyebrowTreatment, blockDesignFallback.accordionIconTreatment, blockDesignFallback.composition;
10891
+ blockDesignFallback.sectionSurface, blockDesignFallback.contentFrame, blockDesignFallback.sectionHeight, blockDesignFallback.heroLegibility, blockDesignFallback.imageSurfaceTreatment, blockDesignFallback.imageSurfaceMotion, blockDesignFallback.tileTreatment, blockDesignFallback.eventListTreatment, blockDesignFallback.eyebrowTreatment, blockDesignFallback.accordionIconTreatment, blockDesignFallback.composition;
10573
10892
  //#endregion
10574
10893
  //#region ../theme-core/src/site-styles/siteChromeBackgrounds.ts
10575
10894
  const siteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceColorTokenNames);
@@ -12167,7 +12486,8 @@ const siteOptionSources = [
12167
12486
  "eventCategories",
12168
12487
  "eventSeries",
12169
12488
  "venues",
12170
- "staffMembers"
12489
+ "staffMembers",
12490
+ "appointmentServiceCategories"
12171
12491
  ];
12172
12492
  const mediaDeliverySchema = z.object({
12173
12493
  sizes: z.string().optional(),
@@ -21223,6 +21543,15 @@ const appointmentServicesBlockDefinition = {
21223
21543
  required: false,
21224
21544
  ui: { intent: "content" }
21225
21545
  },
21546
+ createSiteOptionSelectField({
21547
+ id: "categoryId",
21548
+ label: "Category",
21549
+ description: "Show one category (with its heading and intro), or leave it on All categories to show everything grouped.",
21550
+ required: false,
21551
+ multiple: false,
21552
+ optionSource: "appointmentServiceCategories",
21553
+ ui: { intent: "content" }
21554
+ }),
21226
21555
  sectionStylesField({
21227
21556
  id: "_sectionStyles",
21228
21557
  label: "Section styles",
@@ -21257,6 +21586,7 @@ const appointmentServicesBlockDefinition = {
21257
21586
  richText({ className: "rb-prose rb-max-w-none" }, bind("content.description"), when("content.description")),
21258
21587
  el("appointment-services", {
21259
21588
  sectionHeading: { $bind: { from: "content.heading" } },
21589
+ categoryId: { $bind: { from: "content.categoryId" } },
21260
21590
  services: { $bind: { from: "data.services" } },
21261
21591
  pathname: { $bind: { from: "$root.pathname" } },
21262
21592
  servicePathPrefix: { $bind: { from: "$root.appointmentServicePathPrefix" } }
@@ -12,7 +12,7 @@ import * as crypto from "crypto";
12
12
  * 1. This constant
13
13
  * 2. The "version" field in package.json
14
14
  */
15
- const SDK_VERSION = "0.144.0";
15
+ const SDK_VERSION = "0.145.0";
16
16
  //#endregion
17
17
  //#region src/constants.ts
18
18
  /**