import React from "react"; import type { LsgButtonVariant } from "../LsgButton"; import type { LsgCtaAnalytics } from "../analytics/analyticsEvents"; import "./LsgCarousel.scss"; export type LsgCarouselLayout = "media-right" | "media-left" | "full-width"; export type LsgCarouselHeadingTag = "h1" | "h2" | "h3" | "h4" | "h5" | "h6"; export type LsgCarouselMediaType = "image" | "video"; /** Mirrors the AEM "Background color" style group on the carousel policy. */ export type LsgCarouselBackground = "white" | "light" | "primary" | "secondary" | "tertiary" | "dark" | "black"; /** Mirrors the AEM "Accent color (arrows & dots)" style group on the carousel policy. */ export type LsgCarouselAccent = LsgCarouselBackground; export interface LsgCarouselCta { label: string; href?: string; external?: boolean; variant?: LsgButtonVariant; onClick?: React.MouseEventHandler; /** Optional `vt_cta_click` overrides. */ analytics?: LsgCtaAnalytics; } export interface LsgCarouselItem { /** Stable author/item identifier where available. */ id?: string; preTitle?: string; heading?: string; body?: string; cta?: LsgCarouselCta; type?: LsgCarouselMediaType; imageUrl?: string; imageAlt?: string; videoUrl?: string; videoPoster?: string; videoControls?: boolean; videoAutoPlay?: boolean; videoMuted?: boolean; videoLoop?: boolean; /** Optional per-media label used by layouts/themes that show a badge. */ label?: string; } export interface LsgCarouselProps { items: LsgCarouselItem[]; /** Desktop content/media position from the Figma variants. */ layout?: LsgCarouselLayout; /** * Background colour, mirroring the AEM "Background color" style group on the * carousel policy. Left undefined on purpose so no class is emitted and the * carousel keeps its default panel colour. Each option carries its own * legible foreground, which the nested Title/Text/Button inherit unless their * own policy overrides it. */ background?: LsgCarouselBackground; /** * Colour of the arrows and pagination dots, mirroring the AEM "Accent color" * style group. Left undefined so each theme keeps its own control colours. */ accent?: LsgCarouselAccent; headingTag?: LsgCarouselHeadingTag; ariaLabel?: string; className?: string; /** * @deprecated Text is authored per item. These apply to the first item only, * as a fallback for callers written against the single-content-block carousel, * and will be removed in the next major. */ heading?: string; /** @deprecated See `heading`. */ preTitle?: string; /** @deprecated See `heading`. */ body?: string; /** @deprecated See `heading`. */ cta?: LsgCarouselCta; } export declare const LsgCarousel: React.FC;