@riverbankcms/sdk 0.135.0 → 0.136.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 (153) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +4 -8
  3. package/dist/{PreviewEditorSidebar-roNY0GVy.mjs → PreviewEditorSidebar-BU5ZlhQR.mjs} +4 -4
  4. package/dist/{PreviewEditorUI-KboDbEh_.mjs → PreviewEditorUI-9XkHL-bC.mjs} +3 -3
  5. package/dist/{PreviewQueryProvider-DcgaESkm.mjs → PreviewQueryProvider-wbEpXryy.mjs} +1 -1
  6. package/dist/{SdkPreviewModeRuntime-DBrF7Caa.mjs → SdkPreviewModeRuntime-CnWmj-2B.mjs} +50 -99
  7. package/dist/{SiteChromeCustomizeContext-DrIEpJKn.mjs → SiteChromeCustomizeContext-B6d5zkog.mjs} +2334 -1173
  8. package/dist/_dts/ai/src/contracts/proposals.d.ts +8 -554
  9. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +401 -2312
  10. package/dist/_dts/api/src/contentRuntime.d.ts +6 -0
  11. package/dist/_dts/api/src/endpoints.d.ts +7 -0
  12. package/dist/_dts/api/src/index.d.ts +1 -0
  13. package/dist/_dts/api/src/publicEventEndpointDefinitions.d.ts +7 -0
  14. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +26 -0
  15. package/dist/_dts/api/src/sdkBlockContentAdmission.d.ts +5 -0
  16. package/dist/_dts/api/src/sdkThemeWire.d.ts +6 -432
  17. package/dist/_dts/block-form/src/blockDraftSaveability.d.ts +2 -3
  18. package/dist/_dts/block-form/src/utils/slug.d.ts +6 -0
  19. package/dist/_dts/blocks/src/PageRenderer.d.ts +12 -6
  20. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +48 -0
  21. package/dist/_dts/blocks/src/definitions.d.ts +14 -0
  22. package/dist/_dts/blocks/src/index.d.ts +4 -3
  23. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +40 -0
  24. package/dist/_dts/blocks/src/server.d.ts +2 -2
  25. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +25 -0
  26. package/dist/_dts/blocks/src/system/data/index.d.ts +2 -0
  27. package/dist/_dts/blocks/src/system/data/publicLoaderCachePolicy.d.ts +78 -0
  28. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +2 -18
  29. package/dist/_dts/blocks/src/system/manifest/validation.d.ts +103 -16
  30. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
  31. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +2 -1
  32. package/dist/_dts/blocks/src/system/runtime/api/endpoints.d.ts +8 -0
  33. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  34. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +19 -0
  35. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +52 -0
  36. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +24 -0
  37. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.d.ts +44 -18
  38. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.state.d.ts +20 -3
  39. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/VerifyingTimeoutStep.d.ts +3 -1
  40. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationStripeReturn.d.ts +1 -0
  41. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCalendar.client.d.ts +2 -2
  42. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCalendar.interactive.d.ts +40 -0
  43. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.client.d.ts +2 -0
  44. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.interactive.d.ts +43 -0
  45. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/CalendarDayCell.d.ts +3 -1
  46. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/CalendarNavigationChevron.d.ts +4 -0
  47. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/DayEventsModal.d.ts +2 -1
  48. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventModalContext.d.ts +3 -2
  49. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekAgendaView.d.ts +3 -0
  50. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekBoardView.d.ts +31 -3
  51. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekTimetableView.d.ts +3 -1
  52. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +19 -1
  53. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/timetableModel.d.ts +4 -3
  54. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/utils.d.ts +3 -3
  55. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +0 -1
  56. package/dist/_dts/calendar/src/grid.d.ts +24 -66
  57. package/dist/_dts/calendar/src/index.d.ts +2 -2
  58. package/dist/_dts/calendar/src/timetable.d.ts +5 -9
  59. package/dist/_dts/commerce/src/purchase/allocation.d.ts +11 -0
  60. package/dist/_dts/commerce/src/purchase/index.d.ts +2 -0
  61. package/dist/_dts/commerce/src/purchase/settlement.d.ts +33 -0
  62. package/dist/_dts/commerce/src/purchase/stripeCheckoutReturnUrl.d.ts +8 -0
  63. package/dist/_dts/content-model/src/templates/defaults.d.ts +6 -0
  64. package/dist/_dts/core/src/slug.d.ts +20 -5
  65. package/dist/_dts/preview-next/src/client/blocks/EditablePageRenderer.d.ts +1 -1
  66. package/dist/_dts/preview-next/src/client/preview/headerInteractionPaletteSurfaceState.d.ts +2 -1
  67. package/dist/_dts/sdk/src/client/publicLoaderCacheAccess.d.ts +6 -0
  68. package/dist/_dts/sdk/src/public-api/contracts.d.ts +5 -1
  69. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +10 -6
  70. package/dist/_dts/sdk/src/rendering/components/Block.shared.d.ts +0 -1
  71. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +4 -4
  72. package/dist/_dts/sdk/src/rendering/helpers/footerPageOutline.d.ts +3 -0
  73. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +3 -0
  74. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +1 -1
  75. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +17 -0
  76. package/dist/_dts/sdk/src/rendering/helpers/templateContent.d.ts +9 -3
  77. package/dist/_dts/sdk/src/rendering/hooks/usePage.d.ts +1 -1
  78. package/dist/_dts/sdk/src/rendering/index.d.ts +2 -2
  79. package/dist/_dts/sdk/src/rendering/overrideResolution.d.ts +7 -4
  80. package/dist/_dts/sdk/src/version.d.ts +1 -1
  81. package/dist/_dts/theme-core/src/cards/types.d.ts +8 -8
  82. package/dist/_dts/theme-core/src/data.d.ts +12 -0
  83. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  84. package/dist/_dts/theme-core/src/header/legacyHeaderVariant.d.ts +2 -6
  85. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +6 -807
  86. package/dist/_dts/theme-core/src/schema.d.ts +452 -1278
  87. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +213 -1
  88. package/dist/_dts/theme-core/src/site-styles/headerLayoutCatalog.d.ts +0 -29
  89. package/dist/_dts/theme-core/src/site-styles/headerLayoutStyles.d.ts +10 -0
  90. package/dist/_dts/theme-core/src/site-styles/headerLayoutTypes.d.ts +8 -5
  91. package/dist/_dts/theme-core/src/site-styles/headerOpeningForeground.d.ts +4 -4
  92. package/dist/_dts/theme-core/src/site-styles/headerStyleCompiler.d.ts +16 -2
  93. package/dist/_dts/theme-core/src/site-styles/headerStyleDefaults.d.ts +465 -0
  94. package/dist/_dts/theme-core/src/site-styles/headerStyleRecipe.d.ts +161 -0
  95. package/dist/client/{BookingConsentAgreement-BQqwi8Oa.mjs → BookingConsentAgreement-DCch21a6.mjs} +2 -2
  96. package/dist/client/{DiscountCodeDisclosure-B97aMo0V.mjs → DiscountCodeDisclosure-DIj1T59K.mjs} +1 -1
  97. package/dist/client/{EventCombined.client-Bs2Iw9Q6.mjs → EventCombined.client-BWVNlXTx.mjs} +226 -206
  98. package/dist/client/{EventListing.client-C4QUQdmg.mjs → EventListing.client-DVFCDe3i.mjs} +2 -2
  99. package/dist/client/{LeafletStaticMap-CwWRk69M.mjs → LeafletStaticMap-BY5mIHw9.mjs} +1 -1
  100. package/dist/client/{accordion-BA0j8Mpw.mjs → accordion-CK29E8rG.mjs} +1 -1
  101. package/dist/client/{bookingForm-Br2e41H0.mjs → bookingForm-DFvnet-N.mjs} +5 -5
  102. package/dist/client/bookings.mjs +87 -47
  103. package/dist/client/{carousel-B4dmwnpD.mjs → carousel-BVU5NQlb.mjs} +1 -1
  104. package/dist/client/{cart-B_ckGW4b.mjs → cart-BNItcZVa.mjs} +3 -3
  105. package/dist/client/{checkout-DAyspHdf.mjs → checkout-Bu6iCdkP.mjs} +3 -3
  106. package/dist/client/client.mjs +1985 -1055
  107. package/dist/client/{context-DljQn8L5.mjs → context-BImarOAq.mjs} +12 -0
  108. package/dist/client/{eventCalendar-pJu3FUod.mjs → eventCalendar-DS2h-UXD.mjs} +256 -114
  109. package/dist/client/{eventCombined-B6Kacm9F.mjs → eventCombined-Drt4Oq9p.mjs} +3 -3
  110. package/dist/client/{eventDetails-CaX9z1pv.mjs → eventDetails-Bl2vWgTX.mjs} +4 -3
  111. package/dist/client/{eventListing-B9aXPO-I.mjs → eventListing-CS7PHY7v.mjs} +3 -3
  112. package/dist/client/{eventRegistration-CBSovBkg.mjs → eventRegistration-D-j8eNy2.mjs} +85 -41
  113. package/dist/client/{form-Cm0tu_7o.mjs → form-RMpoLTyr.mjs} +2 -2
  114. package/dist/client/{headerSection-OgRtHeKS.mjs → headerSection-BYE3Lb3k.mjs} +2 -2
  115. package/dist/client/hooks.mjs +2254 -298
  116. package/dist/client/{locationMap-DmjcYqNM.mjs → locationMap-BxSr7Kkh.mjs} +2 -2
  117. package/dist/client/{newsletterForm-D08OZQAC.mjs → newsletterForm-DerbXwFC.mjs} +2 -2
  118. package/dist/client/{productDetail-BqZeu2P4.mjs → productDetail-4SZCLhAf.mjs} +3 -3
  119. package/dist/client/{productList-mNyIF9FG.mjs → productList-D7AP4GNq.mjs} +3 -3
  120. package/dist/client/{propsDecoder-DwHXRm9X.mjs → propsDecoder-pzBeCh14.mjs} +123 -46
  121. package/dist/client/rendering/client.mjs +793 -488
  122. package/dist/client/rendering/islands.mjs +17 -17
  123. package/dist/client/rendering.mjs +2161 -1268
  124. package/dist/client/{scrollToBlock-DtmdM3v-.mjs → scrollToBlock-CduAKf8T.mjs} +1 -1
  125. package/dist/client/{shop-CNjZK16F.mjs → shop-Cp5p_kGe.mjs} +6 -6
  126. package/dist/client/{shop-commerce-DkNNao1J.mjs → shop-commerce-DicXYaYX.mjs} +5 -5
  127. package/dist/client/{shop-commerce-store-9WA--zuW.mjs → shop-commerce-store-CGWnpY4K.mjs} +1 -1
  128. package/dist/client/{shopShared-CHCVfccY.mjs → shopShared-BDf9ljkm.mjs} +3 -3
  129. package/dist/client/{useEventFilters-DvuaB4ZN.mjs → useEventFilters-DeeyGYuk.mjs} +3 -3
  130. package/dist/preview-next/before-render.mjs +7 -0
  131. package/dist/preview-next/client/runtime.mjs +4 -4
  132. package/dist/preview-next/keepAlive.mjs +7 -0
  133. package/dist/preview-next/middleware.mjs +7 -0
  134. package/dist/{previewAuthStore-C7ksxt5b.mjs → previewAuthStore-DbqBol0V.mjs} +7 -0
  135. package/dist/{sdk-runtime-3GhW4knb.mjs → sdk-runtime-19MO27F0.mjs} +2 -2
  136. package/dist/{separator-D3bCWYYb.mjs → separator-DaPLtJ1f.mjs} +1 -1
  137. package/dist/server/components.mjs +1562 -917
  138. package/dist/server/config-validation.mjs +94 -135
  139. package/dist/server/config.mjs +94 -135
  140. package/dist/server/data.mjs +94 -134
  141. package/dist/server/index.mjs +122 -4
  142. package/dist/server/manifest.mjs +0 -1
  143. package/dist/server/next.mjs +1467 -732
  144. package/dist/server/page-converter.mjs +87 -113
  145. package/dist/server/prebuild.mjs +1 -1
  146. package/dist/server/rendering/server.mjs +1717 -939
  147. package/dist/server/rendering.mjs +1729 -1044
  148. package/dist/server/routing.mjs +3229 -1835
  149. package/dist/server/server.mjs +21739 -19801
  150. package/dist/server/theme-bridge.mjs +656 -264
  151. package/dist/server/theme.mjs +2 -17
  152. package/dist/styles/index.css +609 -181
  153. package/package.json +1 -1
@@ -1199,6 +1199,13 @@ const PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1199
1199
  //#endregion
1200
1200
  //#region ../api/src/publicEventEndpointDefinitions.ts
1201
1201
  const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1202
+ resolvePublicEventCheckoutReturn: {
1203
+ path: "/public/sites/{siteId}/events/checkout-return",
1204
+ method: "POST",
1205
+ tags: [TAG_TEMPLATES.publicEvents, "event-checkout"],
1206
+ auth: "public",
1207
+ responseKind: "json"
1208
+ },
1202
1209
  getPublicEventRegistrationOptions: {
1203
1210
  path: "/public/sites/{siteId}/events/registration-options",
1204
1211
  method: "POST",
@@ -1930,6 +1937,9 @@ function getZonedDateTimeParts(date, timeZone) {
1930
1937
  function formatDateKey(date) {
1931
1938
  return `${String(date.year).padStart(4, "0")}-${String(date.month).padStart(2, "0")}-${String(date.day).padStart(2, "0")}`;
1932
1939
  }
1940
+ function toBookingTimeZone(timeZone) {
1941
+ return getSafeTimeZone(timeZone);
1942
+ }
1933
1943
  function parseUtcIsoDateTimeString(value) {
1934
1944
  const normalized = value.trim();
1935
1945
  const hasUtcSuffix = normalized.endsWith("Z");
@@ -9146,12 +9156,8 @@ const legacyHeaderVariantValues = Object.keys(legacyHeaderVariants);
9146
9156
  * `@riverbankcms/api` is `z.input<typeof themeSchema>`, so a widened input here
9147
9157
  * would leak straight into a public type.
9148
9158
  *
9149
- * Not every read of a persisted theme goes through the schema:
9150
- * `resolveRuntimeTheme` in
9151
- * `apps/dashboard/src/server/services/sites/runtimeSiteResponse.ts` returns the
9152
- * raw database JSON asserted as `Theme` with no parse, so a theme still
9153
- * carrying a legacy spelling reaches the theme editor un-aliased. That gap
9154
- * predates this alias and is harmless while persisted usage is zero.
9159
+ * Persisted runtime themes are admitted through `parseThemeForPersistence`
9160
+ * before reaching consumers, so legacy spellings normalize at that boundary.
9155
9161
  */
9156
9162
  const headerVariantWithLegacyAliasSchema = z.enum([...headerVariantValues, ...legacyHeaderVariantValues]).transform((value) => value in legacyHeaderVariants ? legacyHeaderVariants[value] : value);
9157
9163
  const BREAKPOINT_LG = 1024;
@@ -9610,7 +9616,6 @@ const navFontWeight = z.enum([
9610
9616
  "bold"
9611
9617
  ]);
9612
9618
  const headerMaxWidth = z.enum(["container", "full"]);
9613
- const headerBarFrame = z.enum(["full-bleed", "inset-shell"]);
9614
9619
  const headerBorderSchema = componentBorderSchema.extend({ position: z.enum([
9615
9620
  "bottom",
9616
9621
  "top",
@@ -9639,12 +9644,6 @@ const headerLogoTextSchema = z.object({
9639
9644
  ]).optional(),
9640
9645
  hideOnShrink: z.boolean().optional()
9641
9646
  }).optional();
9642
- const navEffectsSchema = z.object({
9643
- underlineGradient: z.boolean().default(false),
9644
- glow: z.boolean().default(false),
9645
- glowColor: z.string().optional(),
9646
- neumorphic: z.boolean().default(false)
9647
- }).optional();
9648
9647
  const dropdownStyleSchema = z.object({
9649
9648
  background: themeColorTokenSchema.default("surface"),
9650
9649
  textColor: themeColorTokenSchema.default("text"),
@@ -9736,9 +9735,7 @@ const headerSchema = z.object({
9736
9735
  positioning: headerPositioning,
9737
9736
  shrinkOnScroll: z.boolean(),
9738
9737
  maxWidth: headerMaxWidth,
9739
- barFrame: headerBarFrame.optional(),
9740
9738
  scrollTreatment: headerScrollTreatmentSchema,
9741
- logoOverride: mediaSchema.nullable().optional(),
9742
9739
  background: headerBackgroundSchema.default({
9743
9740
  type: "color",
9744
9741
  color: "surface"
@@ -9750,13 +9747,11 @@ const headerSchema = z.object({
9750
9747
  navFontRole: z.enum(["body", "heading"]).optional(),
9751
9748
  navTextSize: navLinkStyleSchema.shape.textSize,
9752
9749
  interactionPalette: headerInteractionPaletteSchema.optional(),
9753
- navPlacement: z.enum(["end", "center"]).optional(),
9754
9750
  container: headerContainerSchema,
9755
9751
  border: headerBorderSchema,
9756
9752
  shadow: componentShadowSchema.optional(),
9757
9753
  logo: logoStyleSchema,
9758
9754
  logoText: headerLogoTextSchema,
9759
- navEffects: navEffectsSchema,
9760
9755
  navContainer: navContainerSchema,
9761
9756
  navLinkStyle: navLinkStyleSchema.optional(),
9762
9757
  ctaGap: headerCtaGapSchema.optional(),
@@ -11851,27 +11846,6 @@ function asHeaderStyleId(value) {
11851
11846
  return value;
11852
11847
  }
11853
11848
  //#endregion
11854
- //#region ../theme-core/src/site-styles/headerInteractionPalette.ts
11855
- const clearSplitInteractionPalette = defineLookOptionGroup({
11856
- id: "interaction-palette",
11857
- label: "Hover colour",
11858
- defaultOptionId: "accent",
11859
- options: [
11860
- {
11861
- id: "accent",
11862
- label: "Accent"
11863
- },
11864
- {
11865
- id: "primary",
11866
- label: "Primary"
11867
- },
11868
- {
11869
- id: "secondary",
11870
- label: "Secondary"
11871
- }
11872
- ]
11873
- });
11874
- //#endregion
11875
11849
  //#region ../theme-core/src/site-styles/headerLayoutCatalog.ts
11876
11850
  const titleOnlyLogoAccommodation = {
11877
11851
  pattern: "title-only",
@@ -12031,43 +12005,37 @@ const headerStyleCatalog = defineExactCatalog()([
12031
12005
  id: asHeaderStyleId("minimal"),
12032
12006
  label: "Minimal",
12033
12007
  description: "Quiet surface with simple color-change navigation.",
12034
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
12035
- navTypography: "plain"
12008
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
12036
12009
  },
12037
12010
  {
12038
12011
  id: asHeaderStyleId("fine-line"),
12039
12012
  label: "Seamless",
12040
12013
  description: "Borderless surface with underline hover for a quieter page transition.",
12041
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
12042
- navTypography: "plain"
12014
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
12043
12015
  },
12044
12016
  {
12045
12017
  id: asHeaderStyleId("soft-bar"),
12046
12018
  label: "Soft Bar",
12047
12019
  description: "Soft tinted surface with gentle pill hover states.",
12048
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
12049
- navTypography: "plain"
12020
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
12050
12021
  },
12051
12022
  {
12052
12023
  id: asHeaderStyleId("pill-nav"),
12053
12024
  label: "Pill Nav",
12054
12025
  description: "A calm pill navigation rail over a neutral header.",
12055
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
12056
- navTypography: "plain"
12026
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
12057
12027
  },
12058
12028
  {
12059
12029
  id: asHeaderStyleId("brand-bar"),
12060
12030
  label: "Brand Bar",
12061
12031
  description: "Solid brand surface with high-contrast navigation.",
12062
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
12063
- navTypography: "brand-caps"
12032
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
12064
12033
  },
12065
12034
  {
12066
12035
  id: asHeaderStyleId("brand-underline"),
12067
12036
  label: "Brand Underline",
12068
12037
  description: "Brand surface with underline-grow navigation.",
12069
- supportedLayoutIds: supportedLayouts(["classic"]),
12070
- navTypography: "brand-caps"
12038
+ supportedLayoutIds: supportedLayouts(["classic"])
12071
12039
  },
12072
12040
  {
12073
12041
  id: asHeaderStyleId("brand-pill"),
@@ -12077,73 +12045,78 @@ const headerStyleCatalog = defineExactCatalog()([
12077
12045
  "classic",
12078
12046
  "centered",
12079
12047
  "floating"
12080
- ]),
12081
- navTypography: "brand-caps"
12048
+ ])
12082
12049
  },
12083
12050
  {
12084
12051
  id: asHeaderStyleId("brand-capsule"),
12085
12052
  label: "Brand Capsule",
12086
12053
  description: "Solid brand chrome designed as a floating capsule, with quiet-caps nav, a soft pill active state, and an inverted CTA pill.",
12087
- supportedLayoutIds: supportedLayouts(["classic"]),
12088
- navTypography: "quiet-caps"
12054
+ supportedLayoutIds: supportedLayouts(["classic"])
12089
12055
  },
12090
12056
  {
12091
12057
  id: asHeaderStyleId("serif-line"),
12092
12058
  label: "Serif Line",
12093
12059
  description: "Typographic logo treatment with understated underline navigation.",
12094
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
12095
- navTypography: "heading"
12060
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
12096
12061
  },
12097
12062
  {
12098
12063
  id: asHeaderStyleId("flat-tabs"),
12099
12064
  label: "Flat Tabs",
12100
12065
  description: "Flat block hover and active states with a Swiss utility feel.",
12101
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
12102
- navTypography: "quiet-caps"
12066
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
12103
12067
  },
12104
12068
  {
12105
12069
  id: asHeaderStyleId("glass"),
12106
12070
  label: "Glass",
12107
12071
  description: "Translucent chrome with frosted navigation backing.",
12108
- supportedLayoutIds: supportedLayouts(["floating"]),
12109
- navTypography: "plain"
12072
+ supportedLayoutIds: supportedLayouts(["floating"])
12110
12073
  },
12111
12074
  {
12112
12075
  id: asHeaderStyleId("minimal-surface"),
12113
12076
  label: "Clear Split",
12114
12077
  description: "Floating logo with transparent navigation and no shared shell.",
12115
- supportedLayoutIds: supportedLayouts(["floating"]),
12116
- navTypography: "plain",
12117
- openingForegroundTarget: "all",
12118
- scrollTreatment: "contrast-glass",
12119
- interactionPalette: clearSplitInteractionPalette
12078
+ supportedLayoutIds: supportedLayouts(["floating"])
12120
12079
  },
12121
12080
  {
12122
12081
  id: asHeaderStyleId("soft-shell"),
12123
12082
  label: "Soft Shell",
12124
12083
  description: "Floating rounded shell with soft pill navigation states.",
12125
- supportedLayoutIds: supportedLayouts(["floating"]),
12126
- navTypography: "plain"
12084
+ supportedLayoutIds: supportedLayouts(["floating"])
12127
12085
  },
12128
12086
  {
12129
12087
  id: asHeaderStyleId("split-glass"),
12130
12088
  label: "Split Glass",
12131
12089
  description: "Logo floats independently while the navigation sits in a glass rail.",
12132
- supportedLayoutIds: supportedLayouts(["floating"]),
12133
- navTypography: "quiet-caps",
12134
- openingForegroundTarget: "brand-only"
12090
+ supportedLayoutIds: supportedLayouts(["floating"])
12135
12091
  },
12136
12092
  {
12137
12093
  id: asHeaderStyleId("split-pill"),
12138
12094
  label: "Split Pill",
12139
12095
  description: "Logo floats independently with a soft pill-backed navigation rail.",
12140
- supportedLayoutIds: supportedLayouts(["floating"]),
12141
- navTypography: "heading",
12142
- openingForegroundTarget: "brand-only"
12096
+ supportedLayoutIds: supportedLayouts(["floating"])
12143
12097
  }
12144
12098
  ]);
12145
12099
  new Map(headerLayoutCatalog.map((layout) => [layout.id, layout]));
12146
12100
  new Map(headerStyleCatalog.map((style) => [style.id, style]));
12101
+ defineLookOptionGroup({
12102
+ id: "interaction-palette",
12103
+ label: "Hover colour",
12104
+ defaultOptionId: "accent",
12105
+ options: [
12106
+ {
12107
+ id: "accent",
12108
+ label: "Accent"
12109
+ },
12110
+ {
12111
+ id: "primary",
12112
+ label: "Primary"
12113
+ },
12114
+ {
12115
+ id: "secondary",
12116
+ label: "Secondary"
12117
+ }
12118
+ ]
12119
+ });
12147
12120
  //#endregion
12148
12121
  //#region ../theme-core/src/site-styles/footerLooks.ts
12149
12122
  function asFooterLookId(value) {
@@ -23540,26 +23513,6 @@ const headerLogoTextVisibleTransform = {
23540
23513
  return resolveHeaderBrandDisplay(asPartialObject(value)) !== "logo-only";
23541
23514
  }
23542
23515
  };
23543
- /**
23544
- * Selects which classic-layout nav row should render.
23545
- *
23546
- * - `'inline'` → classic variant with the historical logo-left / nav-right row
23547
- * - `'centered'`→ classic variant with a centred (flex-1) nav and a right CTA
23548
- * - `'other'` → not a classic variant (centered/floating handle it)
23549
- *
23550
- * Consumed by the site-header block's `$when` gates so the two classic rows are
23551
- * mutually exclusive without introducing a new top-level header variant.
23552
- */
23553
- const classicNavModeTransform = {
23554
- id: "layout.classicNavMode",
23555
- kind: "formatter",
23556
- summary: "Resolve which classic-layout nav row to render",
23557
- run: (value) => {
23558
- const header = asPartialObject(value);
23559
- if (header?.variant !== "classic") return "other";
23560
- return header?.navPlacement === "center" ? "centered" : "inline";
23561
- }
23562
- };
23563
23516
  const maxWidthClassTransform = {
23564
23517
  id: "layout.maxWidthClass",
23565
23518
  kind: "string",
@@ -23665,7 +23618,6 @@ const headerRootClassTransform = {
23665
23618
  if (isHeaderScrollRuntimeEnabled(content)) classes.push(config.shrink);
23666
23619
  const variant = header?.variant;
23667
23620
  if (variant && headerVariantValues.includes(variant)) classes.push(`header-variant-${variant}`);
23668
- if (header?.barFrame === "inset-shell" && variant === "classic") classes.push("header-bar-frame-inset-shell");
23669
23621
  return joinClasses(classes);
23670
23622
  }
23671
23623
  };
@@ -23873,7 +23825,6 @@ const layoutTransforms = [
23873
23825
  headerLogoClassTransform,
23874
23826
  headerLogoMediaClassTransform,
23875
23827
  headerLogoTextVisibleTransform,
23876
- classicNavModeTransform,
23877
23828
  footerRootClassTransform,
23878
23829
  headerRootStyleTransform,
23879
23830
  headerSectionBackgroundTransform,
@@ -24273,18 +24224,7 @@ const classicLayout = inline({
24273
24224
  logoRow,
24274
24225
  createNavRow(`rb-ml-auto ${desktopOnlyDisplay("flex")} rb-gap-6`),
24275
24226
  headerCta
24276
- ], whenTransformed("$root.theme.header", "layout.classicNavMode", "inline"));
24277
- const classicCenteredNavLayout = inline({
24278
- className: bindProp("$root.theme.header.maxWidth", {
24279
- transforms: pipe(tx("layout.maxWidthClass", { base: `rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-items-center rb-gap-6` })),
24280
- fallback: `rb-container rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-items-center rb-gap-6`
24281
- }),
24282
- align: "center"
24283
- }, [
24284
- logoRow,
24285
- createNavRow(`rb-flex-1 rb-justify-center ${desktopOnlyDisplay("flex")} rb-gap-6`, "center"),
24286
- headerCta
24287
- ], whenTransformed("$root.theme.header", "layout.classicNavMode", "centered"));
24227
+ ], when("$root.theme.header.variant", { equals: "classic" }));
24288
24228
  const centeredLayout = stack({
24289
24229
  gap: "md",
24290
24230
  align: "center",
@@ -24349,7 +24289,6 @@ const siteHeaderBlockDefinition = { manifest: createBlockManifest({
24349
24289
  }, [
24350
24290
  mobileHeaderBar,
24351
24291
  classicLayout,
24352
- classicCenteredNavLayout,
24353
24292
  centeredLayout,
24354
24293
  floatingLayout,
24355
24294
  mobileOverlay
@@ -26803,6 +26742,7 @@ const publicWholeSeriesPriceDisplaySchema = z.discriminatedUnion("kind", [
26803
26742
  freePriceDisplaySchema,
26804
26743
  exactPriceDisplaySchema,
26805
26744
  fromPriceDisplaySchema,
26745
+ rangePriceDisplaySchema,
26806
26746
  unavailablePriceDisplaySchema
26807
26747
  ]);
26808
26748
  z.discriminatedUnion("kind", [
@@ -27906,13 +27846,16 @@ function buildEventRegistrationShellStepLabels(source) {
27906
27846
  }) : false).map((step) => shellLabelForRegistrationStep(step, scopedEvents));
27907
27847
  }
27908
27848
  function scopeEventRegistrationEvents(source) {
27849
+ return toRegistrationEvents(scopeEventRegistrationSourceEvents(source));
27850
+ }
27851
+ function scopeEventRegistrationSourceEvents(source) {
27909
27852
  const scope = planEventRegistrationScope({
27910
- events: toRegistrationEvents(source.events ?? []),
27853
+ events: source.events ?? [],
27911
27854
  wholeSeriesOffering: source.wholeSeriesOffering,
27912
27855
  occurrenceContext: source.occurrenceContext,
27913
27856
  subject: source.subject
27914
27857
  });
27915
- return scope.kind === "invalidSelectedRun" ? [] : scope.events;
27858
+ return scope.kind === "invalidSelectedRun" ? [] : [...scope.events];
27916
27859
  }
27917
27860
  function shellLabelForRegistrationStep(step, events) {
27918
27861
  switch (step) {
@@ -27944,26 +27887,29 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
27944
27887
  source: createZodCodec(eventRegistrationSourceSchema),
27945
27888
  render: createZodCodec(eventRegistrationRenderSchema)
27946
27889
  },
27947
- buildRender: (source) => ({
27948
- display: buildEventRegistrationDisplay(source),
27949
- hydration: {
27950
- occurrenceContext: source.occurrenceContext ?? null,
27951
- subject: source.subject ?? null,
27952
- events: source.events ?? null,
27953
- wholeSeriesOfferings: source.wholeSeriesOfferings ?? null,
27954
- wholeSeriesOffering: resolveWholeSeriesOffering(source),
27955
- maxTickets: source.maxTickets ?? void 0,
27956
- showVenue: source.showVenue,
27957
- showCapacity: source.showCapacity,
27958
- successMessage: source.successMessage,
27959
- buttonVariant: source.buttonVariant,
27960
- overlayEnabled: source.overlayEnabled,
27961
- spamProtectionEnabled: source.spamProtectionEnabled,
27962
- supportEmail: source.supportEmail,
27963
- sitePasses: source.sitePasses ?? null,
27964
- siteMemberships: source.siteMemberships ?? null
27965
- }
27966
- })
27890
+ buildRender: (source) => {
27891
+ const events = source.events == null ? null : scopeEventRegistrationSourceEvents(source);
27892
+ return {
27893
+ display: buildEventRegistrationDisplay(source),
27894
+ hydration: {
27895
+ occurrenceContext: source.occurrenceContext ?? null,
27896
+ subject: source.subject ?? null,
27897
+ events,
27898
+ wholeSeriesOfferings: source.wholeSeriesOfferings ?? null,
27899
+ wholeSeriesOffering: resolveWholeSeriesOffering(source),
27900
+ maxTickets: source.maxTickets ?? void 0,
27901
+ showVenue: source.showVenue,
27902
+ showCapacity: source.showCapacity,
27903
+ successMessage: source.successMessage,
27904
+ buttonVariant: source.buttonVariant,
27905
+ overlayEnabled: source.overlayEnabled,
27906
+ spamProtectionEnabled: source.spamProtectionEnabled,
27907
+ supportEmail: source.supportEmail,
27908
+ sitePasses: source.sitePasses ?? null,
27909
+ siteMemberships: source.siteMemberships ?? null
27910
+ }
27911
+ };
27912
+ }
27967
27913
  });
27968
27914
  function normalizeEventRegistrationEventInput(value) {
27969
27915
  if (!isRecord$5(value)) return value;
@@ -28747,7 +28693,8 @@ const eventCollectionSourceSchemaShape = {
28747
28693
  buttonVariant: eventButtonVariantSchema.optional(),
28748
28694
  buttonText: z.string().optional(),
28749
28695
  emptyMessage: z.string().optional(),
28750
- className: z.string().optional()
28696
+ className: z.string().optional(),
28697
+ bookingTimeZone: z.string().optional()
28751
28698
  };
28752
28699
  const eventCollectionDisplaySchemaShape = {
28753
28700
  events: z.array(publicEventSchema),
@@ -28782,7 +28729,15 @@ const eventCollectionHydrationSchema = z.object({
28782
28729
  prefetchedEvents: z.boolean(),
28783
28730
  eventSurface: eventSurfaceScopeSchema$1,
28784
28731
  filterEventPresets: z.string().nullable(),
28785
- scheduleScope: eventScheduleScopeSchema$1
28732
+ scheduleScope: eventScheduleScopeSchema$1,
28733
+ calendarContext: z.object({
28734
+ timeZone: z.string().transform(toBookingTimeZone),
28735
+ initialToday: z.object({
28736
+ year: z.number().int(),
28737
+ month: z.number().int().min(1).max(12),
28738
+ day: z.number().int().min(1).max(31)
28739
+ })
28740
+ })
28786
28741
  });
28787
28742
  function buildEventCollectionDisplay(source) {
28788
28743
  return {
@@ -28827,14 +28782,19 @@ function buildEventCollectionPresentationDisplay(source) {
28827
28782
  emptyMessage: source.emptyMessage ?? "No upcoming events scheduled."
28828
28783
  };
28829
28784
  }
28830
- function buildEventCollectionHydration(source) {
28785
+ function buildEventCollectionHydration(source, now = /* @__PURE__ */ new Date()) {
28786
+ const timeZone = toBookingTimeZone(source.bookingTimeZone);
28831
28787
  return {
28832
28788
  siteId: source.siteId,
28833
28789
  stage: source.stage,
28834
28790
  prefetchedEvents: source.events != null,
28835
28791
  eventSurface: normalizeEventSurfaceScope(source.eventSurface),
28836
28792
  filterEventPresets: normalizeEventSurfacePresetsCsv(source.filterEventPresets),
28837
- scheduleScope: normalizeEventScheduleScope(source.scheduleScope)
28793
+ scheduleScope: normalizeEventScheduleScope(source.scheduleScope),
28794
+ calendarContext: {
28795
+ timeZone,
28796
+ initialToday: getLocalScheduleDate(now, timeZone)
28797
+ }
28838
28798
  };
28839
28799
  }
28840
28800
  //#endregion
@@ -1224,6 +1224,13 @@ const PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1224
1224
  //#endregion
1225
1225
  //#region ../api/src/publicEventEndpointDefinitions.ts
1226
1226
  const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1227
+ resolvePublicEventCheckoutReturn: {
1228
+ path: "/public/sites/{siteId}/events/checkout-return",
1229
+ method: "POST",
1230
+ tags: [TAG_TEMPLATES.publicEvents, "event-checkout"],
1231
+ auth: "public",
1232
+ responseKind: "json"
1233
+ },
1227
1234
  getPublicEventRegistrationOptions: {
1228
1235
  path: "/public/sites/{siteId}/events/registration-options",
1229
1236
  method: "POST",
@@ -8050,7 +8057,7 @@ var SimpleCache = class {
8050
8057
  * 1. This constant
8051
8058
  * 2. The "version" field in package.json
8052
8059
  */
8053
- const SDK_VERSION = "0.135.0";
8060
+ const SDK_VERSION = "0.136.0";
8054
8061
  //#endregion
8055
8062
  //#region src/client/error.ts
8056
8063
  let _Symbol$for;
@@ -8453,6 +8460,101 @@ function buildEndpointURL(baseURL, endpoint) {
8453
8460
  return baseURL + API_ENDPOINTS[endpoint].path;
8454
8461
  }
8455
8462
  //#endregion
8463
+ //#region ../blocks/src/system/data/loaderEndpoints.ts
8464
+ const SUPPORTED_LOADER_ENDPOINTS = [
8465
+ "listPublishedEntries",
8466
+ "getPublishedEntryPreview",
8467
+ "listPublicEvents",
8468
+ "listPublicRecurringSchedule",
8469
+ "getPublicEventDetails",
8470
+ "listPublicWholeSeriesOfferings",
8471
+ "getPublicWholeSeriesOffering",
8472
+ "listPublicRouteCandidates",
8473
+ "listPublicTeamMembers",
8474
+ "listPublicProducts",
8475
+ "listPublicPasses",
8476
+ "listPublicMemberships",
8477
+ "getPublicFormById",
8478
+ "getPublicBookingServices",
8479
+ "getPublicWeeklySlotAvailability"
8480
+ ];
8481
+ function isSupportedLoaderEndpoint(endpoint) {
8482
+ return SUPPORTED_LOADER_ENDPOINTS.includes(endpoint);
8483
+ }
8484
+ //#endregion
8485
+ //#region ../blocks/src/system/data/publicLoaderCachePolicy.ts
8486
+ /**
8487
+ * Canonical freshness policy for public block-loader data.
8488
+ *
8489
+ * Consumers may implement tagged caching differently, but a loader marked
8490
+ * live here must not be placed in a process-local or durable stale cache.
8491
+ */
8492
+ const PUBLIC_LOADER_CACHE_POLICIES = {
8493
+ listPublishedEntries: {
8494
+ kind: "tagged",
8495
+ tags: ["published_content"]
8496
+ },
8497
+ getPublishedEntryPreview: {
8498
+ kind: "tagged",
8499
+ tags: ["published_content"]
8500
+ },
8501
+ listPublicEvents: {
8502
+ kind: "live",
8503
+ reason: "booking_correctness"
8504
+ },
8505
+ listPublicRecurringSchedule: {
8506
+ kind: "live",
8507
+ reason: "booking_correctness"
8508
+ },
8509
+ getPublicEventDetails: {
8510
+ kind: "live",
8511
+ reason: "booking_correctness"
8512
+ },
8513
+ listPublicWholeSeriesOfferings: {
8514
+ kind: "tagged",
8515
+ tags: ["public_whole_series_offerings"]
8516
+ },
8517
+ getPublicWholeSeriesOffering: {
8518
+ kind: "tagged",
8519
+ tags: ["public_whole_series_offerings"]
8520
+ },
8521
+ listPublicRouteCandidates: {
8522
+ kind: "tagged",
8523
+ tags: ["published_content"]
8524
+ },
8525
+ listPublicTeamMembers: {
8526
+ kind: "tagged",
8527
+ tags: ["public_team_members"]
8528
+ },
8529
+ listPublicProducts: {
8530
+ kind: "tagged",
8531
+ tags: ["public_products"]
8532
+ },
8533
+ listPublicPasses: {
8534
+ kind: "live",
8535
+ reason: "booking_correctness"
8536
+ },
8537
+ listPublicMemberships: {
8538
+ kind: "live",
8539
+ reason: "booking_correctness"
8540
+ },
8541
+ getPublicFormById: {
8542
+ kind: "tagged",
8543
+ tags: ["site_forms"]
8544
+ },
8545
+ getPublicBookingServices: {
8546
+ kind: "live",
8547
+ reason: "booking_correctness"
8548
+ },
8549
+ getPublicWeeklySlotAvailability: {
8550
+ kind: "live",
8551
+ reason: "booking_correctness"
8552
+ }
8553
+ };
8554
+ function getPublicLoaderCachePolicy(endpoint) {
8555
+ return PUBLIC_LOADER_CACHE_POLICIES[endpoint];
8556
+ }
8557
+ //#endregion
8456
8558
  //#region src/client/runtimeCacheKeys.ts
8457
8559
  const DEFAULT_PUBLISHED_RUNTIME_CACHE_PAYLOAD_SCHEMA_VERSION = 1;
8458
8560
  function toNonEmptyString(value) {
@@ -8756,6 +8858,11 @@ function resolveKnownEndpointPolicy(endpoint, params) {
8756
8858
  endpoint,
8757
8859
  reason: "force_refresh"
8758
8860
  };
8861
+ if (isSupportedLoaderEndpoint(endpoint) && getPublicLoaderCachePolicy(endpoint).kind === "live") return {
8862
+ kind: "live-only",
8863
+ endpoint,
8864
+ reason: "safety_sensitive_booking"
8865
+ };
8759
8866
  const override = RUNTIME_CACHE_DURABILITY_OVERRIDES[endpoint];
8760
8867
  if (override.kind === "live-only") return {
8761
8868
  kind: "live-only",
@@ -9274,6 +9381,17 @@ var CircuitOpenError = class extends Error {
9274
9381
  }
9275
9382
  };
9276
9383
  //#endregion
9384
+ //#region src/client/publicLoaderCacheAccess.ts
9385
+ function shouldWrite(cacheEnabled, force) {
9386
+ return cacheEnabled && !force;
9387
+ }
9388
+ function liveLoaderOptions(endpoint, signal) {
9389
+ return {
9390
+ force: getPublicLoaderCachePolicy(endpoint).kind === "live",
9391
+ signal
9392
+ };
9393
+ }
9394
+ //#endregion
9277
9395
  //#region src/client/index.ts
9278
9396
  let prebuildModule = null;
9279
9397
  function tryRequire(modulePath) {
@@ -9741,7 +9859,7 @@ function createRiverbankClientWithDeps(deps, config) {
9741
9859
  } catch (error) {
9742
9860
  convertToTypedError(error);
9743
9861
  }
9744
- if (cacheEnabled) cache.set(cacheKey, data);
9862
+ if (shouldWrite(cacheEnabled, options.force)) cache.set(cacheKey, data);
9745
9863
  if (allowFallbacks && !isPreview) await writePublishedRuntimeCache(options.publishedRuntimeCache, data);
9746
9864
  return emitStatus("live", data, statusDetails());
9747
9865
  } catch (error) {
@@ -9979,7 +10097,7 @@ function createRiverbankClientWithDeps(deps, config) {
9979
10097
  },
9980
10098
  options: { signal: sig }
9981
10099
  });
9982
- }, { signal });
10100
+ }, liveLoaderOptions("listPublicEvents", signal));
9983
10101
  },
9984
10102
  async getPublicEventDetails(params) {
9985
10103
  const { siteId, limit, from, to, afterStartsAt, afterId, stage, categoryIds, venueId, staffMemberId, kind, eventSurface, eventPresets, scheduleScope, seriesId, includeOccurrenceId, signal } = params;
@@ -10014,7 +10132,7 @@ function createRiverbankClientWithDeps(deps, config) {
10014
10132
  }] },
10015
10133
  options: { signal: sig }
10016
10134
  }), requestId);
10017
- }, { signal });
10135
+ }, liveLoaderOptions("getPublicEventDetails", signal));
10018
10136
  },
10019
10137
  async listPublicTeamMembers(params) {
10020
10138
  const { siteId, stage, signal } = params;
@@ -72,7 +72,6 @@ const ALLOWED_TRANSFORM_IDS = [
72
72
  "layout.footerRootClass",
73
73
  "layout.headerRootStyle",
74
74
  "layout.headerSectionBackground",
75
- "layout.classicNavMode",
76
75
  "layout.footerRootStyle",
77
76
  "ui.headerNavLinkClass",
78
77
  "ui.headingClassFromAlignment",