@riverbankcms/sdk 0.149.0 → 0.150.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 (165) hide show
  1. package/dist/EventEmbeddedCheckoutStep-D00Kc8Zj.mjs +285 -0
  2. package/dist/{PreviewEditorSidebar-DBKln68M.mjs → PreviewEditorSidebar-7ZhmmnBB.mjs} +3 -3
  3. package/dist/{PreviewEditorUI-DpRX4Mum.mjs → PreviewEditorUI-BIJucTRd.mjs} +2 -2
  4. package/dist/{SdkPreviewModeRuntime-DJPmPY-r.mjs → SdkPreviewModeRuntime-tj45gmCX.mjs} +4 -3
  5. package/dist/{SiteChromeCustomizeContext-JYA0cJ_Z.mjs → SiteChromeCustomizeContext-BFOt0ss-.mjs} +4454 -4059
  6. package/dist/_dts/ai/src/contracts/proposals.d.ts +660 -0
  7. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +510 -0
  8. package/dist/_dts/api/src/billing.d.ts +2 -2
  9. package/dist/_dts/api/src/contentRuntime.d.ts +5 -1
  10. package/dist/_dts/api/src/footerCompositionContracts.d.ts +9 -0
  11. package/dist/_dts/api/src/footerSettings.d.ts +3 -3
  12. package/dist/_dts/api/src/index.d.ts +1 -1
  13. package/dist/_dts/api/src/navigation/bookingPortalLink.d.ts +13 -0
  14. package/dist/_dts/api/src/navigation.d.ts +1 -0
  15. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +9 -173
  16. package/dist/_dts/api/src/sdkThemeWire.d.ts +12 -0
  17. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +3 -3
  18. package/dist/_dts/api/src/siteSettings.d.ts +2 -0
  19. package/dist/_dts/blocks/src/client/site-chrome.d.ts +1 -1
  20. package/dist/_dts/blocks/src/client.d.ts +2 -1
  21. package/dist/_dts/blocks/src/rendering/server.d.ts +1 -1
  22. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime.d.ts +30 -3
  23. package/dist/_dts/blocks/src/system/designCapabilities.d.ts +10 -1
  24. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  25. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +38 -18
  26. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +1 -1
  27. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.server.d.ts +6 -0
  28. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventEmbeddedCheckoutStep.d.ts +13 -0
  29. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationPayment.d.ts +15 -0
  30. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizardActions.d.ts +0 -1
  31. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/FullyBookedStep.d.ts +6 -0
  32. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/PaymentBlockingPanel.d.ts +3 -0
  33. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/PaymentSelectionStep.d.ts +2 -0
  34. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +15 -5
  35. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.planning.d.ts +4 -2
  36. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/paymentLocation.d.ts +3 -0
  37. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/paymentResponse.d.ts +72 -0
  38. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationCompletion.d.ts +66 -5
  39. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationErrorRecovery.d.ts +1 -4
  40. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationStateMachine.d.ts +13 -5
  41. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/sessionStorage.d.ts +11 -52
  42. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +19 -2
  43. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationStripeReturn.d.ts +7 -42
  44. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +7 -8
  45. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +90 -24
  46. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useGuestRegistrationRecovery.d.ts +30 -0
  47. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/usePaymentStatusRecovery.d.ts +24 -12
  48. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useRegistrationAdmission.d.ts +18 -0
  49. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/wizardSteps.d.ts +6 -1
  50. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +1 -1
  51. package/dist/_dts/blocks/src/system/runtime/shared/stripe/browserStripe.d.ts +8 -0
  52. package/dist/_dts/blocks/src/system/transforms/registry/eventCalendar.d.ts +8 -0
  53. package/dist/_dts/commerce/src/purchase/checkoutCopy.d.ts +10 -0
  54. package/dist/_dts/commerce/src/purchase/checkoutPresentation.d.ts +49 -0
  55. package/dist/_dts/commerce/src/purchase/checkoutSessionMetadata.d.ts +4 -4
  56. package/dist/_dts/commerce/src/purchase/checkoutStripeFinalizationPlanning.d.ts +5 -1
  57. package/dist/_dts/commerce/src/purchase/event-registration-errors.d.ts +9 -0
  58. package/dist/_dts/commerce/src/purchase/index.d.ts +2 -0
  59. package/dist/_dts/commerce/src/purchase/orderItemMetadata.d.ts +1 -0
  60. package/dist/_dts/commerce/src/purchase/stripeCheckoutReturnUrl.d.ts +9 -2
  61. package/dist/_dts/commerce/src/purchase/types.d.ts +5 -6
  62. package/dist/_dts/content-editor/src/FooterComposerOverview.d.ts +3 -2
  63. package/dist/_dts/content-editor/src/footerPreviewRuntime.d.ts +6 -1
  64. package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +7 -0
  65. package/dist/_dts/core/src/index.d.ts +1 -0
  66. package/dist/_dts/core/src/patch/index.d.ts +30 -0
  67. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +30 -1
  68. package/dist/_dts/sdk/src/bookings/index.d.ts +2 -1
  69. package/dist/_dts/sdk/src/bookings/types.d.ts +1 -1
  70. package/dist/_dts/sdk/src/version.d.ts +1 -1
  71. package/dist/_dts/theme-core/src/blocks/index.d.ts +1 -0
  72. package/dist/_dts/theme-core/src/blocks/opaquePanels.d.ts +147 -0
  73. package/dist/_dts/theme-core/src/boxBackgroundSchema.d.ts +22 -0
  74. package/dist/_dts/theme-core/src/buttons/buttonSurfaceContext.d.ts +22 -0
  75. package/dist/_dts/theme-core/src/cards/roles.d.ts +12 -0
  76. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  77. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +198 -0
  78. package/dist/_dts/theme-core/src/palette/utils/index.d.ts +2 -0
  79. package/dist/_dts/theme-core/src/palette/utils/scrimContrast.d.ts +22 -0
  80. package/dist/_dts/theme-core/src/runtime/bridgeColourTokens.d.ts +10 -0
  81. package/dist/_dts/theme-core/src/schema.d.ts +330 -0
  82. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +0 -51
  83. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +0 -51
  84. package/dist/_dts/theme-core/src/site-styles/lookResolution.d.ts +11 -0
  85. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorCapabilities.d.ts +7 -1
  86. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +7 -1
  87. package/dist/_dts/theme-core/src/site-styles/previewRuntimeCapabilities.d.ts +12 -6
  88. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +7 -4
  89. package/dist/_dts/theme-core/src/site-styles/sectionSurfaceBackgrounds.d.ts +65 -0
  90. package/dist/_dts/theme-core/src/site-styles/types.d.ts +17 -0
  91. package/dist/_dts/theme-core/src/surfaces/opaqueSurface.d.ts +43 -0
  92. package/dist/client/{BookingMailingListNote-Cr3EeTP5.mjs → BookingMailingListNote-CYHOufsI.mjs} +10 -440
  93. package/dist/client/{CheckboxChoice-B33MqoUo.mjs → CheckboxChoice-M-3HycLw.mjs} +1 -1
  94. package/dist/client/{DemoBookingPortalAccess-BFGB1Fay.mjs → DemoBookingPortalAccess-Cvr9O_ca.mjs} +2 -2
  95. package/dist/client/{EventCombined.client-DKYV0_ft.mjs → EventCombined.client-m5UZIobP.mjs} +7 -7
  96. package/dist/client/EventEmbeddedCheckoutStep-DL6zFAkA.mjs +289 -0
  97. package/dist/client/{EventListing.client-B9UIcEYc.mjs → EventListing.client-DeMfCM04.mjs} +2 -2
  98. package/dist/client/{LeafletStaticMap-CFLPkP0K.mjs → LeafletStaticMap-CvZ3gOdD.mjs} +1 -1
  99. package/dist/client/{checkoutUrls-CXhko2Rv.mjs → RichText-BtfNvQV6.mjs} +2 -29
  100. package/dist/client/{TerminalPanel-JjmgxEsR.mjs → TerminalPanel-CUCNEwlH.mjs} +2 -18
  101. package/dist/client/{ThemedButton-CKV1Jh2m.mjs → ThemedButton-C7WhXuRl.mjs} +2 -2
  102. package/dist/client/{accordion-DXWIfT3T.mjs → accordion-cQm5mjqs.mjs} +1 -1
  103. package/dist/client/{bookingForm-CjZgHNvv.mjs → bookingForm-BVPJE5RQ.mjs} +11 -10
  104. package/dist/client/bookings.mjs +2668 -1134
  105. package/dist/client/{carousel-DSLikmvZ.mjs → carousel-3vgnY7LC.mjs} +2 -2
  106. package/dist/client/{carousel.client-A2lG-9od.mjs → carousel.client-CISsdZvg.mjs} +1 -1
  107. package/dist/client/{cart-HDjWReFt.mjs → cart-BGK4oOjm.mjs} +3 -3
  108. package/dist/client/{checkout-CUvRZA3W.mjs → checkout-GsBLUNJD.mjs} +3 -3
  109. package/dist/client/checkoutUrls-ChxwaNtO.mjs +28 -0
  110. package/dist/client/client.mjs +3042 -1868
  111. package/dist/client/{colorStyles-j5U9v5JA.mjs → colorStyles-D-32xHZh.mjs} +2 -30
  112. package/dist/client/{context-DFmaZa-Q.mjs → context-D_8s12Fp.mjs} +1 -1
  113. package/dist/client/{dates-BBep1JnF.mjs → dates-DeJQbQ9T.mjs} +2 -2
  114. package/dist/client/{eventCalendar-zEobhxo4.mjs → eventCalendar-cmucD4NR.mjs} +10 -10
  115. package/dist/client/{eventCombined-Dp7bz5k-.mjs → eventCombined-ku3E9FTl.mjs} +4 -4
  116. package/dist/client/{eventDetails-FE-zqTt7.mjs → eventDetails-CyKZ61sF.mjs} +5 -5
  117. package/dist/client/{eventListing-BMt5snal.mjs → eventListing-B7yxGIhX.mjs} +4 -4
  118. package/dist/client/{eventRegistration-O6ZxHfOb.mjs → eventRegistration-BoXfSFgZ.mjs} +1403 -857
  119. package/dist/client/{form-DFa1D8vt.mjs → form-CNQOWhJo.mjs} +5 -5
  120. package/dist/client/{headerSection-CmjHLR-N.mjs → headerSection-DahaBJGQ.mjs} +3 -3
  121. package/dist/client/hooks.mjs +123 -64
  122. package/dist/client/{locationMap-BXKP_lGh.mjs → locationMap-BoDjqYlW.mjs} +4 -4
  123. package/dist/client/{media-Cl38iOMI.mjs → media-BFY0y2rb.mjs} +2 -1
  124. package/dist/client/{newsletterForm-CU-HmxGx.mjs → newsletterForm-DtzXDklw.mjs} +4 -4
  125. package/dist/client/{pricing-KEAEsibq.mjs → pricing-DXEh2Lhh.mjs} +1 -1
  126. package/dist/client/{productDetail-Ckp7MGnt.mjs → productDetail-D7cPa-00.mjs} +3 -3
  127. package/dist/client/{productList-D91V0sYa.mjs → productList-D1XMap66.mjs} +3 -3
  128. package/dist/client/{propsDecoder-DZd6RJeA.mjs → propsDecoder-DiIeBopB.mjs} +758 -245
  129. package/dist/client/rendering/client.mjs +4381 -2892
  130. package/dist/client/rendering/islands.mjs +19 -19
  131. package/dist/client/rendering.mjs +3026 -1852
  132. package/dist/client/result-DRW7JWXz.mjs +30 -0
  133. package/dist/client/{routeIslandApiConfig-E1EkhhYY.mjs → routeIslandApiConfig-wzR4lKAY.mjs} +1 -1
  134. package/dist/client/scrollToBlock-C86BYkyV.mjs +17 -0
  135. package/dist/client/{shop-4F2jLQPI.mjs → shop-CYT5P-S5.mjs} +8 -8
  136. package/dist/client/{shop-commerce-store-vicweP2K.mjs → shop-commerce-store-wKhsJQxI.mjs} +1 -1
  137. package/dist/client/{shop-commerce-BbfCJjB3.mjs → shop-commerce-ypBu_dx4.mjs} +9 -9
  138. package/dist/client/{shopShared-DlONJt0T.mjs → shopShared-DFGhYrf2.mjs} +52 -6
  139. package/dist/client/{useEventFilters-COYyL3m7.mjs → useEventFilters-blSbN5o7.mjs} +8 -8
  140. package/dist/preview-next/client/runtime.mjs +3 -3
  141. package/dist/{sdk-runtime-CwvFFjB-.mjs → sdk-runtime-2p8uQk1V.mjs} +1 -1
  142. package/dist/{separator-ByL72zUT.mjs → separator-Cvvzk0Oo.mjs} +1 -1
  143. package/dist/server/components.mjs +4066 -3765
  144. package/dist/server/config-validation.mjs +185 -126
  145. package/dist/server/config.mjs +185 -126
  146. package/dist/server/data.mjs +123 -64
  147. package/dist/server/index.mjs +1 -1
  148. package/dist/server/next.mjs +615 -314
  149. package/dist/server/page-converter.mjs +100 -56
  150. package/dist/server/prebuild.mjs +1 -1
  151. package/dist/server/rendering/server.mjs +4041 -3751
  152. package/dist/server/rendering.mjs +4069 -3768
  153. package/dist/server/routing.mjs +149 -72
  154. package/dist/server/server.mjs +124 -65
  155. package/dist/server/theme-bridge.mjs +1122 -310
  156. package/dist/server/theme.mjs +126 -116
  157. package/dist/spinner-CDo6AkDz.mjs +658 -0
  158. package/dist/styles/index.css +75 -212
  159. package/package.json +1 -1
  160. package/dist/_dts/billing/src/checkout/platform.d.ts +0 -77
  161. package/dist/_dts/billing/src/config/env.d.ts +0 -29
  162. package/dist/_dts/billing/src/stripe/client.d.ts +0 -29
  163. package/dist/_dts/blocks/src/system/runtime/hooks/usePaymentVerification.d.ts +0 -63
  164. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventCheckoutHandoffRestore.d.ts +0 -9
  165. package/dist/client/urlParams-D71VXFGx.mjs +0 -47
@@ -4825,6 +4825,68 @@ const paletteValueKeySchema = z.string().transform((value, ctx) => {
4825
4825
  return z.NEVER;
4826
4826
  });
4827
4827
  //#endregion
4828
+ //#region ../theme-core/src/palette/utils/opaqueSurfaceColor.ts
4829
+ /** Resolve an opaque colour, compositing alpha against an explicit underlay. */
4830
+ function resolveOpaqueSurfaceHex(reference, palette, underlayReference) {
4831
+ const opaque = resolveConcreteColorHex(reference, palette);
4832
+ if (opaque) return opaque;
4833
+ if (!underlayReference) return null;
4834
+ const underlayHex = resolveConcreteColorHex(underlayReference, palette);
4835
+ if (!underlayHex) return null;
4836
+ const parts = parseColorTokenParts(reference);
4837
+ if (parts.kind === "token" && parts.opacityPercent !== null) {
4838
+ const foregroundHex = normalizePaletteHex(palette[parts.token] ?? "");
4839
+ return foregroundHex ? compositeHex(foregroundHex, underlayHex, parts.opacityPercent / 100) : null;
4840
+ }
4841
+ const rgba = parseRgba(parts.kind === "raw" ? parts.value : reference);
4842
+ return rgba ? compositeHex(rgbToHex(rgba.r, rgba.g, rgba.b), underlayHex, rgba.alpha) : null;
4843
+ }
4844
+ /** Resolve a colour reference only when it is already fully opaque. */
4845
+ function resolveConcreteColorHex(reference, palette) {
4846
+ const literalHex = normalizePaletteHex(reference);
4847
+ if (literalHex) return literalHex;
4848
+ const parts = parseColorTokenParts(reference);
4849
+ if (parts.kind === "token") {
4850
+ if (parts.opacityPercent !== null) return null;
4851
+ return normalizePaletteHex(palette[parts.token] ?? "");
4852
+ }
4853
+ const literal = parts.kind === "raw" ? parts.value : reference;
4854
+ if (literal.toLowerCase() === "black") return "#000000";
4855
+ if (literal.toLowerCase() === "white") return "#ffffff";
4856
+ return normalizePaletteHex(literal);
4857
+ }
4858
+ function compositeHex(foregroundHex, underlayHex, alpha) {
4859
+ const foreground = hexToRgb(foregroundHex);
4860
+ const underlay = hexToRgb(underlayHex);
4861
+ const channel = (foregroundValue, underlayValue) => Math.round(foregroundValue * alpha + underlayValue * (1 - alpha));
4862
+ return rgbToHex(channel(foreground.r, underlay.r), channel(foreground.g, underlay.g), channel(foreground.b, underlay.b));
4863
+ }
4864
+ function parseRgba(value) {
4865
+ const match = value.trim().match(/^rgba?\(\s*([\d.]+)(?:\s*,\s*|\s+)([\d.]+)(?:\s*,\s*|\s+)([\d.]+)(?:\s*(?:,|\/)\s*([\d.]+%?))?\s*\)$/i);
4866
+ if (!match) return null;
4867
+ const [, rSource, gSource, bSource] = match;
4868
+ if (!rSource || !gSource || !bSource) return null;
4869
+ const r = Number(rSource);
4870
+ const g = Number(gSource);
4871
+ const b = Number(bSource);
4872
+ const alpha = parseAlpha(match[4]);
4873
+ if (alpha === null || !isRgbChannel(r) || !isRgbChannel(g) || !isRgbChannel(b)) return null;
4874
+ return {
4875
+ r,
4876
+ g,
4877
+ b,
4878
+ alpha
4879
+ };
4880
+ }
4881
+ function parseAlpha(source) {
4882
+ if (!source) return 1;
4883
+ const value = source.endsWith("%") ? Number(source.slice(0, -1)) / 100 : Number(source);
4884
+ return Number.isFinite(value) && value >= 0 && value <= 1 ? value : null;
4885
+ }
4886
+ function isRgbChannel(value) {
4887
+ return Number.isFinite(value) && value >= 0 && value <= 255;
4888
+ }
4889
+ //#endregion
4828
4890
  //#region ../theme-core/src/site-styles/styleTags.ts
4829
4891
  /**
4830
4892
  * Descriptive style-axis metadata for button personalities and palette
@@ -7433,68 +7495,6 @@ function interpolateHex(startHex, endHex, position) {
7433
7495
  const channel = (from, to) => Math.round(from + (to - from) * position).toString(16).padStart(2, "0");
7434
7496
  return `#${channel(start.r, end.r)}${channel(start.g, end.g)}${channel(start.b, end.b)}`;
7435
7497
  }
7436
- //#endregion
7437
- //#region ../theme-core/src/palette/utils/opaqueSurfaceColor.ts
7438
- /** Resolve an opaque colour, compositing alpha against an explicit underlay. */
7439
- function resolveOpaqueSurfaceHex(reference, palette, underlayReference) {
7440
- const opaque = resolveConcreteColorHex(reference, palette);
7441
- if (opaque) return opaque;
7442
- if (!underlayReference) return null;
7443
- const underlayHex = resolveConcreteColorHex(underlayReference, palette);
7444
- if (!underlayHex) return null;
7445
- const parts = parseColorTokenParts(reference);
7446
- if (parts.kind === "token" && parts.opacityPercent !== null) {
7447
- const foregroundHex = normalizePaletteHex(palette[parts.token] ?? "");
7448
- return foregroundHex ? compositeHex(foregroundHex, underlayHex, parts.opacityPercent / 100) : null;
7449
- }
7450
- const rgba = parseRgba(parts.kind === "raw" ? parts.value : reference);
7451
- return rgba ? compositeHex(rgbToHex(rgba.r, rgba.g, rgba.b), underlayHex, rgba.alpha) : null;
7452
- }
7453
- /** Resolve a colour reference only when it is already fully opaque. */
7454
- function resolveConcreteColorHex(reference, palette) {
7455
- const literalHex = normalizePaletteHex(reference);
7456
- if (literalHex) return literalHex;
7457
- const parts = parseColorTokenParts(reference);
7458
- if (parts.kind === "token") {
7459
- if (parts.opacityPercent !== null) return null;
7460
- return normalizePaletteHex(palette[parts.token] ?? "");
7461
- }
7462
- const literal = parts.kind === "raw" ? parts.value : reference;
7463
- if (literal.toLowerCase() === "black") return "#000000";
7464
- if (literal.toLowerCase() === "white") return "#ffffff";
7465
- return normalizePaletteHex(literal);
7466
- }
7467
- function compositeHex(foregroundHex, underlayHex, alpha) {
7468
- const foreground = hexToRgb(foregroundHex);
7469
- const underlay = hexToRgb(underlayHex);
7470
- const channel = (foregroundValue, underlayValue) => Math.round(foregroundValue * alpha + underlayValue * (1 - alpha));
7471
- return rgbToHex(channel(foreground.r, underlay.r), channel(foreground.g, underlay.g), channel(foreground.b, underlay.b));
7472
- }
7473
- function parseRgba(value) {
7474
- const match = value.trim().match(/^rgba?\(\s*([\d.]+)(?:\s*,\s*|\s+)([\d.]+)(?:\s*,\s*|\s+)([\d.]+)(?:\s*(?:,|\/)\s*([\d.]+%?))?\s*\)$/i);
7475
- if (!match) return null;
7476
- const [, rSource, gSource, bSource] = match;
7477
- if (!rSource || !gSource || !bSource) return null;
7478
- const r = Number(rSource);
7479
- const g = Number(gSource);
7480
- const b = Number(bSource);
7481
- const alpha = parseAlpha(match[4]);
7482
- if (alpha === null || !isRgbChannel(r) || !isRgbChannel(g) || !isRgbChannel(b)) return null;
7483
- return {
7484
- r,
7485
- g,
7486
- b,
7487
- alpha
7488
- };
7489
- }
7490
- function parseAlpha(source) {
7491
- if (!source) return 1;
7492
- const value = source.endsWith("%") ? Number(source.slice(0, -1)) / 100 : Number(source);
7493
- return Number.isFinite(value) && value >= 0 && value <= 1 ? value : null;
7494
- }
7495
- function isRgbChannel(value) {
7496
- return Number.isFinite(value) && value >= 0 && value <= 255;
7497
- }
7498
7498
  /**
7499
7499
  * Derive the hover foreground that belongs with a resolved resting foreground.
7500
7500
  *
@@ -8060,6 +8060,15 @@ function fallbackBackground(fallbackToken, palette) {
8060
8060
  reason: "unresolvable-colour"
8061
8061
  };
8062
8062
  }
8063
+ /** Every role's contextual styles against one proven solid surface. */
8064
+ function knownSurfaceButtonContextStyles(input) {
8065
+ return Object.fromEntries(VARIANT_ROLES.flatMap((role) => Object.entries(contextualButtonSurfaceStyles(resolveContextualButtonRole({
8066
+ role,
8067
+ buttonSystem: input.buttonSystem,
8068
+ palette: input.palette,
8069
+ surface: input.surface
8070
+ })))));
8071
+ }
8063
8072
  function resolveContextualButtonRole(input) {
8064
8073
  const requested = findVariant(input.buttonSystem, input.role);
8065
8074
  if (!requested) return {
@@ -11059,6 +11068,18 @@ function brandNonEmptyString(value, label) {
11059
11068
  if (value.length === 0) throw new Error(`${label} must be a non-empty string.`);
11060
11069
  return value;
11061
11070
  }
11071
+ /**
11072
+ * What a block's own section background field admits, read from its manifest.
11073
+ * A site style's surface rule may paint a gradient or a photo; a block whose
11074
+ * `_sectionStyles.background` refuses that paint would be dropped at render
11075
+ * admission, so the runtime compiler paints the surface's colour equivalent
11076
+ * instead (see `compileSectionBackground`).
11077
+ */
11078
+ const sectionBackgroundPaintValues = [
11079
+ "color",
11080
+ "gradient",
11081
+ "image"
11082
+ ];
11062
11083
  const plainFrame = { kind: "plain" };
11063
11084
  function panelFrame(treatment) {
11064
11085
  return {
@@ -11143,6 +11164,7 @@ function defineBlockDesignCapability(capability) {
11143
11164
  ...capability,
11144
11165
  kind: "designed",
11145
11166
  looks: capability.looks ?? "not-applicable",
11167
+ sectionBackgroundPaints: admittedSectionBackgroundPaints(capability.sectionBackgroundPaints),
11146
11168
  sectionHeights: capability.sectionHeights ?? ["default"],
11147
11169
  imageSurfaceTreatments: capability.imageSurfaceTreatments ?? ["none"],
11148
11170
  imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
@@ -11155,6 +11177,10 @@ function defineBlockDesignCapability(capability) {
11155
11177
  ...capability.accordionIconSets ? { accordionIconSets: capability.accordionIconSets } : {}
11156
11178
  };
11157
11179
  }
11180
+ /** Absent means the block admits every section background paint. */
11181
+ function admittedSectionBackgroundPaints(paints) {
11182
+ return paints ?? sectionBackgroundPaintValues;
11183
+ }
11158
11184
  //#endregion
11159
11185
  //#region ../theme-core/src/site-styles/logoBranding.ts
11160
11186
  const logoTextConfidenceValues = [
@@ -11433,12 +11459,22 @@ const mediaPresentationSchema = commonSchema.extend({
11433
11459
  const boxBackgroundSchema = z.discriminatedUnion("type", [
11434
11460
  commonSchema.extend({
11435
11461
  type: z.literal("color"),
11436
- color: tokenOrCssColorValueSchema.nullable().optional()
11462
+ color: tokenOrCssColorValueSchema.nullable().optional(),
11463
+ /**
11464
+ * Compiler-owned. The scrim a site-style colour surface lays over media
11465
+ * that replaces it (a Look's band meeting an authored photo), sized so the
11466
+ * surface's foreground stays legible over any pixel. A colour background
11467
+ * never draws it itself; `resolveSectionBackground` moves it onto the
11468
+ * merged media background as its overlay.
11469
+ */
11470
+ mediaScrim: boxBackgroundOverlaySchema.nullable().optional()
11437
11471
  }),
11438
11472
  commonSchema.extend({
11439
11473
  type: z.literal("gradient"),
11440
11474
  gradient: z.string().nullable().optional(),
11441
- gradientPresetId: z.string().min(1).nullable().optional()
11475
+ gradientPresetId: z.string().min(1).nullable().optional(),
11476
+ /** Compiler-owned; see the colour branch. */
11477
+ mediaScrim: boxBackgroundOverlaySchema.nullable().optional()
11442
11478
  }),
11443
11479
  mediaPresentationSchema.extend({
11444
11480
  type: z.literal("image"),
@@ -12236,6 +12272,17 @@ function defineBlockAppearancePreset(preset) {
12236
12272
  * (`defineBlockAppearancePreset` defaults it to `none`) — the block's own
12237
12273
  * composition still governs how its items look. The per-Look rationale for the card-bearing ones lives
12238
12274
  * in `.project/plans/1297-card-role-contract-site-styles-own-card-surfaces/mapping-table.md`.
12275
+ *
12276
+ * A Look asking for the `alternative` or `open` role is offered only where the
12277
+ * site style defines that role (`siteStyleSupportsLookDesign`), so two Looks
12278
+ * that differ only in role are distinct wherever both are offered.
12279
+ *
12280
+ * Retiring a Look is removing its entry. A stored pin to a retired id reads as
12281
+ * an unsupported pin in the page design editor model and renders the block's
12282
+ * auto Look, the same path an unavailable Look takes. Duplicates retired in
12283
+ * the 2026-09 Look audit: `feature-cards-soft-panels`,
12284
+ * `feature-cards-photo-tiles`, `feature-cards-editorial-pathways`,
12285
+ * `testimonials-default-cards`.
12239
12286
  */
12240
12287
  const brandScrimOptionGroups = [{
12241
12288
  id: "image-surface-treatment",
@@ -12620,16 +12667,6 @@ defineBlockAppearancePreset({
12620
12667
  treatment: "framed-programme"
12621
12668
  }
12622
12669
  }
12623
- }), defineBlockAppearancePreset({
12624
- id: "feature-cards-soft-panels",
12625
- target: "feature-cards",
12626
- label: "Soft tinted panels",
12627
- blockKinds: ["block.feature-cards"],
12628
- design: {
12629
- sectionSurface: "base",
12630
- contentFrame: plainFrame,
12631
- cardRole: "alternative"
12632
- }
12633
12670
  }), defineBlockAppearancePreset({
12634
12671
  id: "feature-cards-editorial-diptych",
12635
12672
  target: "feature-cards",
@@ -12641,27 +12678,6 @@ defineBlockAppearancePreset({
12641
12678
  contentFrame: plainFrame,
12642
12679
  cardRole: "default"
12643
12680
  }
12644
- }), defineBlockAppearancePreset({
12645
- id: "feature-cards-editorial-pathways",
12646
- target: "feature-cards",
12647
- label: "Editorial pathways",
12648
- blockKinds: ["block.feature-cards"],
12649
- constraints: { layoutVariantKeys: ["editorial-pathways"] },
12650
- design: {
12651
- sectionSurface: "base",
12652
- contentFrame: plainFrame,
12653
- cardRole: "default"
12654
- }
12655
- }), defineBlockAppearancePreset({
12656
- id: "feature-cards-photo-tiles",
12657
- target: "feature-cards",
12658
- label: "Photo tiles",
12659
- blockKinds: ["block.feature-cards"],
12660
- design: {
12661
- sectionSurface: "base",
12662
- contentFrame: plainFrame,
12663
- cardRole: "default"
12664
- }
12665
12681
  }), defineBlockAppearancePreset({
12666
12682
  id: "events-lined-panel",
12667
12683
  target: "events",
@@ -12750,16 +12766,6 @@ defineBlockAppearancePreset({
12750
12766
  contentFrame: panelFrame("raised"),
12751
12767
  cardRole: "default"
12752
12768
  }
12753
- }), defineBlockAppearancePreset({
12754
- id: "testimonials-default-cards",
12755
- target: "testimonials",
12756
- label: "Default cards",
12757
- blockKinds: ["block.testimonials"],
12758
- design: {
12759
- sectionSurface: "base",
12760
- contentFrame: plainFrame,
12761
- cardRole: "default"
12762
- }
12763
12769
  }), defineBlockAppearancePreset({
12764
12770
  id: "testimonials-statement-cards",
12765
12771
  target: "testimonials",
@@ -16241,9 +16247,7 @@ const curatedSiteStyles = [
16241
16247
  recommendedAppearancePresetIds: [
16242
16248
  "hero-split-editorial",
16243
16249
  "intro-portrait-bio",
16244
- "feature-cards-soft-panels",
16245
- "feature-cards-editorial-columns",
16246
- "feature-cards-photo-tiles",
16250
+ "feature-cards-bold-colors",
16247
16251
  "testimonials-non-carded",
16248
16252
  "faq-contained-help",
16249
16253
  "contact-form-panel"
@@ -16887,8 +16891,7 @@ const curatedSiteStyles = [
16887
16891
  "intro-portrait-bio",
16888
16892
  "feature-cards-editorial-columns",
16889
16893
  "feature-cards-editorial-diptych",
16890
- "feature-cards-editorial-pathways",
16891
- "feature-cards-soft-panels",
16894
+ "feature-cards-bold-colors",
16892
16895
  "events-lined-panel",
16893
16896
  "testimonials-non-carded",
16894
16897
  "faq-base-accordion",
@@ -18694,6 +18697,34 @@ function withLookCapability(declaration) {
18694
18697
  }
18695
18698
  };
18696
18699
  }
18700
+ /**
18701
+ * The section background paints a block's own `_sectionStyles.background`
18702
+ * field admits, read from its manifest so the design capability cannot drift
18703
+ * from what render admission accepts. A block without the field admits none.
18704
+ */
18705
+ function sectionBackgroundPaintsOfFields(fields) {
18706
+ const sectionStyles = fields.find((field) => field.id === "_sectionStyles");
18707
+ if (!sectionStyles || sectionStyles.type !== "modal") return [];
18708
+ const background = sectionStyles.schema.fields.find((field) => field.id === "background");
18709
+ if (!background || background.type !== "tabGroup") return [];
18710
+ const tabIds = new Set(background.tabs.map((tab) => tab.id));
18711
+ return [
18712
+ "color",
18713
+ "gradient",
18714
+ "image"
18715
+ ].filter((paint) => tabIds.has(paint));
18716
+ }
18717
+ /** Pins a designed capability's section background paints to the block's manifest. */
18718
+ function withManifestSectionBackgroundPaints(declaration, fields) {
18719
+ if (declaration.kind !== "capability") return declaration;
18720
+ return {
18721
+ kind: "capability",
18722
+ capability: {
18723
+ ...declaration.capability,
18724
+ sectionBackgroundPaints: sectionBackgroundPaintsOfFields(fields)
18725
+ }
18726
+ };
18727
+ }
18697
18728
  function declareNoBlockDesignCapability(reason) {
18698
18729
  return {
18699
18730
  kind: "none",
@@ -20556,15 +20587,11 @@ function resolveContextualButtonStyles(background, foreground, context, options)
20556
20587
  if (!paletteCache.has(palette)) paletteCache.set(palette, surfaceCache);
20557
20588
  const cached = surfaceCache.get(cacheKey);
20558
20589
  if (cached) return cached;
20559
- const styles = Object.fromEntries(VARIANT_ROLES.flatMap((role) => {
20560
- const resolution = resolveContextualButtonRole({
20561
- role,
20562
- buttonSystem,
20563
- palette,
20564
- surface: surface.surface
20565
- });
20566
- return Object.entries(contextualButtonSurfaceStyles(resolution));
20567
- }));
20590
+ const styles = knownSurfaceButtonContextStyles({
20591
+ surface: surface.surface,
20592
+ palette,
20593
+ buttonSystem
20594
+ });
20568
20595
  surfaceCache.set(cacheKey, styles);
20569
20596
  return styles;
20570
20597
  }
@@ -27252,6 +27279,20 @@ const footerEngagement = stack({
27252
27279
  ...footerSpamProtectionBinding
27253
27280
  }), [], when("module.engagement.kind", { equals: "mailing-list" }))
27254
27281
  ], when("module.kind", { equals: "engagement" }));
27282
+ const platformAttribution = el("div", {
27283
+ className: "rb-caption",
27284
+ "data-site-attribution": "macadamia"
27285
+ }, [
27286
+ text({ as: "span" }, bind("module.lead")),
27287
+ text({
27288
+ as: "span",
27289
+ value: " "
27290
+ }),
27291
+ link({
27292
+ href: { $bind: { from: "module.link.href" } },
27293
+ className: "footer-nav-link rb-caption transition-theme-standard"
27294
+ }, [text({ as: "span" }, bind("module.link.label"))])
27295
+ ], when("module.kind", { equals: "attribution" }));
27255
27296
  const footerGroup = stack({
27256
27297
  gap: "md",
27257
27298
  align: "stretch",
@@ -27281,6 +27322,7 @@ const footerGroup = stack({
27281
27322
  hours,
27282
27323
  socials,
27283
27324
  footerEngagement,
27325
+ platformAttribution,
27284
27326
  stack({ className: "rb-w-full" }, [authoredCopy], when("module.kind", { equals: "supporting-text" })),
27285
27327
  stack({ className: "rb-w-full rb-lg-col-span-3" }, [authoredCopy], when("module.kind", { equals: "legal" }))
27286
27328
  ], repeat("group.modules", "module"))], repeat("region.groups", "group"));
@@ -30147,14 +30189,18 @@ const calendarTabViewsSchema = z.enum([
30147
30189
  * @param needsPaymentStep - Whether user must complete payment method selection
30148
30190
  * @returns Array of wizard steps to display
30149
30191
  */
30150
- function getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep) {
30192
+ function getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep, paymentActive = false) {
30151
30193
  const baseSteps = hasPreSelectedContext ? ["select-tickets", "enter-details"] : [
30152
30194
  "select-event",
30153
30195
  "select-tickets",
30154
30196
  "enter-details"
30155
30197
  ];
30156
30198
  if (!needsPaymentStep) return baseSteps;
30157
- return [...baseSteps, "select-payment"];
30199
+ return paymentActive ? [
30200
+ ...baseSteps,
30201
+ "select-payment",
30202
+ "payment"
30203
+ ] : [...baseSteps, "select-payment"];
30158
30204
  }
30159
30205
  //#endregion
30160
30206
  //#region ../blocks/src/system/runtime/nodes/event-registration/registrationDerivations.ts
@@ -30273,6 +30319,7 @@ const EVENT_REGISTRATION_SHELL_STEP_LABELS = [
30273
30319
  "Date",
30274
30320
  "Tickets",
30275
30321
  "Details",
30322
+ "Payment options",
30276
30323
  "Payment"
30277
30324
  ];
30278
30325
  const eventRegistrationPublicEventSchema = z.preprocess(normalizeEventRegistrationEventInput, publicEventSchema);
@@ -30415,12 +30462,13 @@ function shellLabelForRegistrationStep(step, events) {
30415
30462
  switch (step) {
30416
30463
  case "select-event": return isDateSelection(events) ? "Date" : "Event";
30417
30464
  case "select-tickets": return "Tickets";
30465
+ case "fully-booked":
30418
30466
  case "enter-details": return "Details";
30419
- case "select-payment": return "Payment";
30467
+ case "select-payment": return "Payment options";
30468
+ case "payment": return "Payment";
30420
30469
  case "error":
30421
30470
  case "success":
30422
30471
  case "submitting":
30423
- case "redirecting":
30424
30472
  case "verifying-payment":
30425
30473
  case "verifying-timeout":
30426
30474
  case "payment-status":
@@ -30432,7 +30480,7 @@ function isDateSelection(events) {
30432
30480
  return Boolean(events.length > 1 && firstSeriesId && events.every((event) => event.seriesId === firstSeriesId));
30433
30481
  }
30434
30482
  function buildEventRegistrationShellBodyText(stepLabels) {
30435
- if (stepLabels.includes("Payment")) return "Preparing tickets, details, and payment options.";
30483
+ if (stepLabels.includes("Payment options")) return "Preparing tickets, details, and payment options.";
30436
30484
  if (stepLabels[0] === "Tickets") return "Preparing tickets and booking details.";
30437
30485
  return "Preparing dates, tickets, and booking details.";
30438
30486
  }
@@ -32407,7 +32455,8 @@ const eventCalendarLayout = [styledSection({
32407
32455
  fallback: false
32408
32456
  } },
32409
32457
  banded: { $bind: {
32410
- from: "content.banded",
32458
+ from: "content",
32459
+ transforms: [{ id: "events.calendarBanded" }],
32411
32460
  fallback: false
32412
32461
  } }
32413
32462
  }))]
@@ -38562,7 +38611,7 @@ function withDesignCapability(blockKind, definition, designCapability, designMet
38562
38611
  if (definition.manifest.name !== blockKind) throw new Error(`System block kind mismatch: expected ${blockKind}, received ${definition.manifest.name}.`);
38563
38612
  return {
38564
38613
  ...definition,
38565
- designCapability,
38614
+ designCapability: withManifestSectionBackgroundPaints(designCapability, definition.manifest.fields),
38566
38615
  designMetadata,
38567
38616
  manifest: {
38568
38617
  ...definition.manifest,
@@ -39615,6 +39664,16 @@ const builtinTransformDefinitions = [
39615
39664
  return resolveCalendarReadProfile(asPartialObject(value) ?? {});
39616
39665
  }
39617
39666
  },
39667
+ {
39668
+ id: "events.calendarBanded",
39669
+ kind: "formatter",
39670
+ summary: "Paint the week-board band only on a section with no background of its own",
39671
+ run(value) {
39672
+ const content = asPartialObject(value) ?? {};
39673
+ const sectionStyles = asPartialObject(content._sectionStyles);
39674
+ return content.banded === true && parseBackgroundContent(sectionStyles?.background) === null;
39675
+ }
39676
+ },
39618
39677
  ...formattingTransforms,
39619
39678
  ...layoutTransforms,
39620
39679
  ...chromeLogoTransforms,