import * as react_jsx_runtime from 'react/jsx-runtime'; import * as class_variance_authority_types from 'class-variance-authority/types'; import * as React from 'react'; import { VariantProps } from 'class-variance-authority'; type MarketingBannerCorner = "bottom-left" | "bottom-right"; type MarketingBannerFloatingVariant = "card" | "media"; type MarketingBannerTone = "surface" | "tint" | "gradient"; interface MarketingBannerAction { label: string; href?: string; onClick?: () => void; /** * Renders the action as done rather than removing it. * * For an offer that can only be taken once — a beta opt-in is the case this * exists for — dropping the button on success leaves the banner looking as * though nothing happened, and swapping only its label leaves something that * still invites a second click it will not honour. */ disabled?: boolean; } declare const marketingBannerRootVariants: (props?: ({ layout?: "hero" | "floating" | null | undefined; tone?: "surface" | "tint" | "gradient" | null | undefined; } & class_variance_authority_types.ClassProp) | undefined) => string; interface MarketingBannerProps extends Omit, "title">, VariantProps { layout: "hero" | "floating"; title: string; /** * Heading level for the hero title. Defaults to `h3`, which is right when the * banner sits inside a section that already has its own heading — but a * banner placed directly under the page `h1` skips a level there, and axe * (correctly) calls that a heading-order violation. Set it to match the * outline of the page you are dropping the banner into. */ titleAs?: "h2" | "h3" | "h4"; eyebrow?: string; eyebrowIcon?: string; children?: React.ReactNode; illustration?: React.ReactNode; media?: React.ReactNode; /** * `"contain"` (default) centers `media`/`illustration` at its own size — * right for vector art (`FeaturedProduct`'s `ProductIllustration`) that is * drawn to a deliberate size and looks wrong stretched. * * `"fill"` stretches the visual column to the row's full height and bleeds * it to the card's own top/end/bottom edges, fading in from a soft * mask rather than a hard vertical seam — right for a single UI component * (a floating Leo window, one KPI card) that illustrates the update * without needing the whole card (`WhatsNewSection`'s default). The child * supplies its own `object-cover`; this only sizes the frame around it. * * `"cover"` drops the two-column split entirely and lets `media` fill the * *whole* card as a background, with a scrim gradient the copy sits on — * right when the screenshot itself is the story (a full dashboard, a * whole search result) rather than one component floating beside the * copy. */ mediaFit?: "contain" | "fill" | "cover"; /** * Clamps the description to two lines. A one-off hero selling a single * idea (`FeaturedProduct`'s tagline) wants the whole sentence; a row of * many banners side by side (`WhatsNewSection`) wants every card the same * height regardless of whose copy ran long, the way a table row does not * grow to fit its longest cell. */ compactDescription?: boolean; /** * Shorter hero chrome for digest rows (`WhatsNewSection`): tighter padding, * smaller title, no media-column height floor. Featured / marketing heroes * leave this off. */ compact?: boolean; floatingVariant?: MarketingBannerFloatingVariant; tone?: MarketingBannerTone; primaryAction?: MarketingBannerAction; secondaryAction?: MarketingBannerAction; primaryActionFullWidth?: boolean; dismissible?: boolean; onDismiss?: () => void; corner?: MarketingBannerCorner; decorativeOverlay?: React.ReactNode; } declare function MarketingBanner({ layout, floatingVariant, tone: toneProp, title, titleAs: TitleTag, eyebrow, eyebrowIcon, children, illustration, media, mediaFit, compactDescription, compact, primaryAction, secondaryAction, primaryActionFullWidth, dismissible, onDismiss, corner, decorativeOverlay, className, ...props }: MarketingBannerProps): react_jsx_runtime.JSX.Element | null; export { MarketingBanner, type MarketingBannerAction, type MarketingBannerCorner, type MarketingBannerFloatingVariant, type MarketingBannerProps, type MarketingBannerTone };