@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.
- package/dist/EventEmbeddedCheckoutStep-D00Kc8Zj.mjs +285 -0
- package/dist/{PreviewEditorSidebar-DBKln68M.mjs → PreviewEditorSidebar-7ZhmmnBB.mjs} +3 -3
- package/dist/{PreviewEditorUI-DpRX4Mum.mjs → PreviewEditorUI-BIJucTRd.mjs} +2 -2
- package/dist/{SdkPreviewModeRuntime-DJPmPY-r.mjs → SdkPreviewModeRuntime-tj45gmCX.mjs} +4 -3
- package/dist/{SiteChromeCustomizeContext-JYA0cJ_Z.mjs → SiteChromeCustomizeContext-BFOt0ss-.mjs} +4454 -4059
- package/dist/_dts/ai/src/contracts/proposals.d.ts +660 -0
- package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +510 -0
- package/dist/_dts/api/src/billing.d.ts +2 -2
- package/dist/_dts/api/src/contentRuntime.d.ts +5 -1
- package/dist/_dts/api/src/footerCompositionContracts.d.ts +9 -0
- package/dist/_dts/api/src/footerSettings.d.ts +3 -3
- package/dist/_dts/api/src/index.d.ts +1 -1
- package/dist/_dts/api/src/navigation/bookingPortalLink.d.ts +13 -0
- package/dist/_dts/api/src/navigation.d.ts +1 -0
- package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +9 -173
- package/dist/_dts/api/src/sdkThemeWire.d.ts +12 -0
- package/dist/_dts/api/src/siteManagementEndpoints.d.ts +3 -3
- package/dist/_dts/api/src/siteSettings.d.ts +2 -0
- package/dist/_dts/blocks/src/client/site-chrome.d.ts +1 -1
- package/dist/_dts/blocks/src/client.d.ts +2 -1
- package/dist/_dts/blocks/src/rendering/server.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/site-footer-runtime.d.ts +30 -3
- package/dist/_dts/blocks/src/system/designCapabilities.d.ts +10 -1
- package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +38 -18
- package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.server.d.ts +6 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventEmbeddedCheckoutStep.d.ts +13 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationPayment.d.ts +15 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizardActions.d.ts +0 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/FullyBookedStep.d.ts +6 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/PaymentBlockingPanel.d.ts +3 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/PaymentSelectionStep.d.ts +2 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +15 -5
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.planning.d.ts +4 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/paymentLocation.d.ts +3 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/paymentResponse.d.ts +72 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationCompletion.d.ts +66 -5
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationErrorRecovery.d.ts +1 -4
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationStateMachine.d.ts +13 -5
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/sessionStorage.d.ts +11 -52
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +19 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationStripeReturn.d.ts +7 -42
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +7 -8
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +90 -24
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useGuestRegistrationRecovery.d.ts +30 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/usePaymentStatusRecovery.d.ts +24 -12
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useRegistrationAdmission.d.ts +18 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/wizardSteps.d.ts +6 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/shared/stripe/browserStripe.d.ts +8 -0
- package/dist/_dts/blocks/src/system/transforms/registry/eventCalendar.d.ts +8 -0
- package/dist/_dts/commerce/src/purchase/checkoutCopy.d.ts +10 -0
- package/dist/_dts/commerce/src/purchase/checkoutPresentation.d.ts +49 -0
- package/dist/_dts/commerce/src/purchase/checkoutSessionMetadata.d.ts +4 -4
- package/dist/_dts/commerce/src/purchase/checkoutStripeFinalizationPlanning.d.ts +5 -1
- package/dist/_dts/commerce/src/purchase/event-registration-errors.d.ts +9 -0
- package/dist/_dts/commerce/src/purchase/index.d.ts +2 -0
- package/dist/_dts/commerce/src/purchase/orderItemMetadata.d.ts +1 -0
- package/dist/_dts/commerce/src/purchase/stripeCheckoutReturnUrl.d.ts +9 -2
- package/dist/_dts/commerce/src/purchase/types.d.ts +5 -6
- package/dist/_dts/content-editor/src/FooterComposerOverview.d.ts +3 -2
- package/dist/_dts/content-editor/src/footerPreviewRuntime.d.ts +6 -1
- package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +7 -0
- package/dist/_dts/core/src/index.d.ts +1 -0
- package/dist/_dts/core/src/patch/index.d.ts +30 -0
- package/dist/_dts/db/src/generated/supabase/database.types.d.ts +30 -1
- package/dist/_dts/sdk/src/bookings/index.d.ts +2 -1
- package/dist/_dts/sdk/src/bookings/types.d.ts +1 -1
- package/dist/_dts/sdk/src/version.d.ts +1 -1
- package/dist/_dts/theme-core/src/blocks/index.d.ts +1 -0
- package/dist/_dts/theme-core/src/blocks/opaquePanels.d.ts +147 -0
- package/dist/_dts/theme-core/src/boxBackgroundSchema.d.ts +22 -0
- package/dist/_dts/theme-core/src/buttons/buttonSurfaceContext.d.ts +22 -0
- package/dist/_dts/theme-core/src/cards/roles.d.ts +12 -0
- package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
- package/dist/_dts/theme-core/src/mock-themes/all.d.ts +198 -0
- package/dist/_dts/theme-core/src/palette/utils/index.d.ts +2 -0
- package/dist/_dts/theme-core/src/palette/utils/scrimContrast.d.ts +22 -0
- package/dist/_dts/theme-core/src/runtime/bridgeColourTokens.d.ts +10 -0
- package/dist/_dts/theme-core/src/schema.d.ts +330 -0
- package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +0 -51
- package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +0 -51
- package/dist/_dts/theme-core/src/site-styles/lookResolution.d.ts +11 -0
- package/dist/_dts/theme-core/src/site-styles/pageDesignEditorCapabilities.d.ts +7 -1
- package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +7 -1
- package/dist/_dts/theme-core/src/site-styles/previewRuntimeCapabilities.d.ts +12 -6
- package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +7 -4
- package/dist/_dts/theme-core/src/site-styles/sectionSurfaceBackgrounds.d.ts +65 -0
- package/dist/_dts/theme-core/src/site-styles/types.d.ts +17 -0
- package/dist/_dts/theme-core/src/surfaces/opaqueSurface.d.ts +43 -0
- package/dist/client/{BookingMailingListNote-Cr3EeTP5.mjs → BookingMailingListNote-CYHOufsI.mjs} +10 -440
- package/dist/client/{CheckboxChoice-B33MqoUo.mjs → CheckboxChoice-M-3HycLw.mjs} +1 -1
- package/dist/client/{DemoBookingPortalAccess-BFGB1Fay.mjs → DemoBookingPortalAccess-Cvr9O_ca.mjs} +2 -2
- package/dist/client/{EventCombined.client-DKYV0_ft.mjs → EventCombined.client-m5UZIobP.mjs} +7 -7
- package/dist/client/EventEmbeddedCheckoutStep-DL6zFAkA.mjs +289 -0
- package/dist/client/{EventListing.client-B9UIcEYc.mjs → EventListing.client-DeMfCM04.mjs} +2 -2
- package/dist/client/{LeafletStaticMap-CFLPkP0K.mjs → LeafletStaticMap-CvZ3gOdD.mjs} +1 -1
- package/dist/client/{checkoutUrls-CXhko2Rv.mjs → RichText-BtfNvQV6.mjs} +2 -29
- package/dist/client/{TerminalPanel-JjmgxEsR.mjs → TerminalPanel-CUCNEwlH.mjs} +2 -18
- package/dist/client/{ThemedButton-CKV1Jh2m.mjs → ThemedButton-C7WhXuRl.mjs} +2 -2
- package/dist/client/{accordion-DXWIfT3T.mjs → accordion-cQm5mjqs.mjs} +1 -1
- package/dist/client/{bookingForm-CjZgHNvv.mjs → bookingForm-BVPJE5RQ.mjs} +11 -10
- package/dist/client/bookings.mjs +2668 -1134
- package/dist/client/{carousel-DSLikmvZ.mjs → carousel-3vgnY7LC.mjs} +2 -2
- package/dist/client/{carousel.client-A2lG-9od.mjs → carousel.client-CISsdZvg.mjs} +1 -1
- package/dist/client/{cart-HDjWReFt.mjs → cart-BGK4oOjm.mjs} +3 -3
- package/dist/client/{checkout-CUvRZA3W.mjs → checkout-GsBLUNJD.mjs} +3 -3
- package/dist/client/checkoutUrls-ChxwaNtO.mjs +28 -0
- package/dist/client/client.mjs +3042 -1868
- package/dist/client/{colorStyles-j5U9v5JA.mjs → colorStyles-D-32xHZh.mjs} +2 -30
- package/dist/client/{context-DFmaZa-Q.mjs → context-D_8s12Fp.mjs} +1 -1
- package/dist/client/{dates-BBep1JnF.mjs → dates-DeJQbQ9T.mjs} +2 -2
- package/dist/client/{eventCalendar-zEobhxo4.mjs → eventCalendar-cmucD4NR.mjs} +10 -10
- package/dist/client/{eventCombined-Dp7bz5k-.mjs → eventCombined-ku3E9FTl.mjs} +4 -4
- package/dist/client/{eventDetails-FE-zqTt7.mjs → eventDetails-CyKZ61sF.mjs} +5 -5
- package/dist/client/{eventListing-BMt5snal.mjs → eventListing-B7yxGIhX.mjs} +4 -4
- package/dist/client/{eventRegistration-O6ZxHfOb.mjs → eventRegistration-BoXfSFgZ.mjs} +1403 -857
- package/dist/client/{form-DFa1D8vt.mjs → form-CNQOWhJo.mjs} +5 -5
- package/dist/client/{headerSection-CmjHLR-N.mjs → headerSection-DahaBJGQ.mjs} +3 -3
- package/dist/client/hooks.mjs +123 -64
- package/dist/client/{locationMap-BXKP_lGh.mjs → locationMap-BoDjqYlW.mjs} +4 -4
- package/dist/client/{media-Cl38iOMI.mjs → media-BFY0y2rb.mjs} +2 -1
- package/dist/client/{newsletterForm-CU-HmxGx.mjs → newsletterForm-DtzXDklw.mjs} +4 -4
- package/dist/client/{pricing-KEAEsibq.mjs → pricing-DXEh2Lhh.mjs} +1 -1
- package/dist/client/{productDetail-Ckp7MGnt.mjs → productDetail-D7cPa-00.mjs} +3 -3
- package/dist/client/{productList-D91V0sYa.mjs → productList-D1XMap66.mjs} +3 -3
- package/dist/client/{propsDecoder-DZd6RJeA.mjs → propsDecoder-DiIeBopB.mjs} +758 -245
- package/dist/client/rendering/client.mjs +4381 -2892
- package/dist/client/rendering/islands.mjs +19 -19
- package/dist/client/rendering.mjs +3026 -1852
- package/dist/client/result-DRW7JWXz.mjs +30 -0
- package/dist/client/{routeIslandApiConfig-E1EkhhYY.mjs → routeIslandApiConfig-wzR4lKAY.mjs} +1 -1
- package/dist/client/scrollToBlock-C86BYkyV.mjs +17 -0
- package/dist/client/{shop-4F2jLQPI.mjs → shop-CYT5P-S5.mjs} +8 -8
- package/dist/client/{shop-commerce-store-vicweP2K.mjs → shop-commerce-store-wKhsJQxI.mjs} +1 -1
- package/dist/client/{shop-commerce-BbfCJjB3.mjs → shop-commerce-ypBu_dx4.mjs} +9 -9
- package/dist/client/{shopShared-DlONJt0T.mjs → shopShared-DFGhYrf2.mjs} +52 -6
- package/dist/client/{useEventFilters-COYyL3m7.mjs → useEventFilters-blSbN5o7.mjs} +8 -8
- package/dist/preview-next/client/runtime.mjs +3 -3
- package/dist/{sdk-runtime-CwvFFjB-.mjs → sdk-runtime-2p8uQk1V.mjs} +1 -1
- package/dist/{separator-ByL72zUT.mjs → separator-Cvvzk0Oo.mjs} +1 -1
- package/dist/server/components.mjs +4066 -3765
- package/dist/server/config-validation.mjs +185 -126
- package/dist/server/config.mjs +185 -126
- package/dist/server/data.mjs +123 -64
- package/dist/server/index.mjs +1 -1
- package/dist/server/next.mjs +615 -314
- package/dist/server/page-converter.mjs +100 -56
- package/dist/server/prebuild.mjs +1 -1
- package/dist/server/rendering/server.mjs +4041 -3751
- package/dist/server/rendering.mjs +4069 -3768
- package/dist/server/routing.mjs +149 -72
- package/dist/server/server.mjs +124 -65
- package/dist/server/theme-bridge.mjs +1122 -310
- package/dist/server/theme.mjs +126 -116
- package/dist/spinner-CDo6AkDz.mjs +658 -0
- package/dist/styles/index.css +75 -212
- package/package.json +1 -1
- package/dist/_dts/billing/src/checkout/platform.d.ts +0 -77
- package/dist/_dts/billing/src/config/env.d.ts +0 -29
- package/dist/_dts/billing/src/stripe/client.d.ts +0 -29
- package/dist/_dts/blocks/src/system/runtime/hooks/usePaymentVerification.d.ts +0 -63
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventCheckoutHandoffRestore.d.ts +0 -9
- package/dist/client/urlParams-D71VXFGx.mjs +0 -47
package/dist/server/config.mjs
CHANGED
|
@@ -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-
|
|
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-
|
|
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 =
|
|
20560
|
-
|
|
20561
|
-
|
|
20562
|
-
|
|
20563
|
-
|
|
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 [
|
|
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
|
|
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,
|