/**
 * Public SDK contracts for built-in system block content.
 *
 * These are SDK-owned copies for SDK consumers so override typing does not
 * require importing internal blocks package types.
 */
import type { LinkValue, Media, TipTapNode } from './content';
import type { EventCategoryId, VenueId } from '@riverbankcms/core';
type UnknownRecord = Record<string, unknown>;
type ImageMedia = Omit<Media, 'type'> & {
    type: 'image';
};
export type SemanticSpacing = 'none' | 'compact' | 'cozy' | 'medium' | 'comfortable' | 'spacious';
export type ImageColSize = '1/4' | '1/3' | '2/5' | '1/2' | '2/3';
export type SectionStylesContent = {
    background?: {
        type?: 'color' | 'gradient' | 'image';
        color?: string | null;
        gradient?: string | null;
        image?: Media | null;
        objectFit?: 'fill' | 'fit' | 'original' | 'custom' | null;
        scale?: string | null;
        position?: string | null;
        opacity?: number | null;
        overlay?: {
            type?: 'none' | 'color' | 'gradient' | null;
            color?: string | null;
            gradient?: string | null;
            opacity?: number | null;
        } | null;
        textColor?: string | null;
        headingColor?: string | null;
    } | null;
    spacing?: string | null;
} | null;
export type CardStylesContent = {
    background?: Record<string, unknown> | null;
    border?: {
        enabled?: boolean | null;
        width?: 'none' | '1' | '2' | '3' | null;
        colorToken?: string | null;
    } | null;
    spacing?: string | null;
    raised?: boolean | null;
    rounded?: string | null;
} | null;
export type ContainerStylesContent = {
    background?: Record<string, unknown> | null;
    spacing?: string | null;
    raised?: boolean | null;
    rounded?: string | null;
    fullWidth?: boolean | null;
} | null;
export type CtaIconName = 'ArrowRight' | 'ArrowLeft' | 'ChevronRight' | 'ChevronLeft' | 'ChevronUp' | 'ChevronDown' | 'ExternalLink' | 'Download' | 'Upload' | 'Mail' | 'Phone' | 'Play' | 'ShoppingCart' | 'Calendar' | 'MapPin' | 'Info' | 'Plus' | 'Minus' | 'Check' | 'X';
export type RichTextDoc = {
    type: 'doc';
    content?: Array<{
        type: string;
        content?: Array<{
            type: string;
            text?: string;
            [key: string]: unknown;
        }>;
        [key: string]: unknown;
    }>;
};
export type BlogListingContent = {
    /**
     * First-class layout selector for current blog listings.
     */
    variant?: 'grid' | 'stack' | null;
    /**
     * Legacy layout selector used by older persisted rows before block variants
     * existed. Current writers should prefer `variant`; renderers still accept
     * `layout` so older SDK content can resolve through the same fallback path as
     * the internal blocks package.
     */
    layout?: 'grid' | 'stack' | null;
    columns?: '2' | '3' | '4' | null;
    postsPerPage?: '6' | '12' | '24' | '48' | null;
    showImages?: boolean | null;
    showExcerpts?: boolean | null;
    showDates?: boolean | null;
    readMoreText?: string | null;
    emptyMessage?: string | null;
    _sectionStyles?: SectionStylesContent;
    _containerStyles?: ContainerStylesContent;
    _cardStyles?: CardStylesContent;
};
export type BodyTextAlignment = 'left' | 'center';
export type BodyTextContent = {
    variant?: 'prose' | 'intro' | 'narrow' | null;
    heading?: string | null;
    body: TipTapNode;
    alignment?: BodyTextAlignment | null;
};
export type CollectionContent = {
    layout?: 'grid' | 'stack' | null;
    columns?: string | number | null;
    gap?: SemanticSpacing;
    items: Array<{
        _type: string;
        [key: string]: unknown;
    }>;
};
export type ColumnsContent = {
    equalHeight?: boolean;
    equalHeightAspectRatio?: '16/9' | '4/3' | '1/1' | '3/4';
    desktopColumns?: 'auto' | '2' | '3' | '4';
    gap?: SemanticSpacing;
    columns: Array<{
        _type: 'card';
        desktopSpan?: '' | '2' | '3' | '4';
        media?: unknown;
        aspectRatio?: '16/9' | '4/3' | '1/1' | '3/4' | 'auto';
        title: string;
        body?: unknown;
        ctas?: Array<unknown>;
        variant?: string;
    } | {
        _type: 'columnContent';
        desktopSpan?: '' | '2' | '3' | '4';
        items: Array<{
            _type: string;
            [key: string]: unknown;
        }>;
    }>;
};
export type CourseDetailsContent = {
    heading?: string | null;
    courseSlug?: string | null;
    showTitle?: boolean | null;
    showDescription?: boolean | null;
    showSessions?: boolean | null;
    sessionsLimit?: '3' | '5' | '10' | 'all' | null;
    showVenue?: boolean | null;
    showPrice?: boolean | null;
    showCapacity?: boolean | null;
    showEnrollmentStatus?: boolean | null;
    showMembershipNote?: boolean | null;
    _sectionStyles?: SectionStylesContent;
};
export type CourseRegistrationContent = {
    heading?: string | null;
    description?: unknown;
    showSessions?: boolean | null;
    showPrice?: boolean | null;
    showCapacity?: boolean | null;
    showVenue?: boolean | null;
    successMessage?: string | null;
    waitlistMessage?: string | null;
    membershipMessage?: string | null;
    buttonText?: string | null;
    buttonVariant?: 'primary' | 'secondary' | 'outline' | null;
    _sectionStyles?: SectionStylesContent;
};
export type CtaFullContent = {
    eyebrow?: string | null;
    title: string;
    content?: unknown;
    _sectionStyles?: SectionStylesContent;
    ctas?: Array<{
        label?: string | null;
        href?: string | null;
    }>;
};
export type EmbedContent = {
    heading?: string | null;
    subheading?: unknown;
    contentType: string;
    mode: 'query' | 'manual';
    limit?: string | null;
    orderBy?: 'order' | 'newest' | 'oldest' | 'title' | null;
    entries?: Array<{
        entryId: string;
    }> | null;
    layout?: string | null;
    emptyMessage?: string | null;
};
export type EventLayout = 'grid' | 'stack' | 'compact';
export type ColumnOption = '2' | '3' | '4';
export type WeekStart = 'sunday' | 'monday';
export type DisplayMode = 'combined' | 'month' | 'week' | 'list' | 'timetable';
export type FilterAutoShow = 'auto' | 'always' | 'never';
export type CalendarTabViews = 'both' | 'month' | 'week';
export type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'link';
export type EventBlockKind = 'all' | 'courses' | 'events';
export type EventSurfacePreset = 'class' | 'workshop' | 'retreat' | 'performance';
export type EventSurfaceScope = 'all' | 'regularClassSchedule' | 'specialDatedEvents' | 'custom';
export type EventScheduleScope = 'any' | 'recurring' | 'oneOff';
export type EventCalendarContent = {
    heading?: string | null;
    description?: unknown;
    displayMode?: DisplayMode | null;
    listLayout?: EventLayout | null;
    listColumns?: ColumnOption | null;
    layout?: EventLayout | null;
    columns?: ColumnOption | null;
    eventsPerPage?: '6' | '12' | '24' | null;
    compactEventsPerPage?: '10' | '20' | '30' | null;
    loadMoreText?: string | null;
    startOfWeek?: WeekStart | null;
    calendarTabViews?: CalendarTabViews | null;
    showFilters?: boolean | null;
    showCategoryFilter?: FilterAutoShow | null;
    showVenueFilter?: boolean | null;
    showStaffFilter?: boolean | null;
    kind?: EventBlockKind | null;
    eventSurface?: EventSurfaceScope | null;
    filterEventPresets?: readonly EventSurfacePreset[] | null;
    scheduleScope?: EventScheduleScope | null;
    filterCategoryIds?: readonly EventCategoryId[] | null;
    filterStaffMemberId?: string | null;
    filterVenueId?: VenueId | null;
    buttonVariant?: ButtonVariant | null;
    buttonText?: string | null;
    emptyMessage?: string | null;
    _sectionStyles?: SectionStylesContent;
};
export type EventDetailsContent = {
    heading?: string | null;
    showVenue?: boolean | null;
    showMap?: boolean | null;
    showOtherDates?: boolean | null;
    otherDatesLimit?: '3' | '5' | '10' | null;
    showCost?: boolean | null;
    showAcceptedPasses?: boolean | null;
    showAcceptedMemberships?: boolean | null;
    _sectionStyles?: SectionStylesContent;
};
export type EventListingContent = {
    heading?: string | null;
    description?: unknown;
    layout?: 'grid' | 'stack' | null;
    columns?: '2' | '3' | '4' | null;
    eventsPerPage?: '3' | '6' | '12' | '24' | null;
    paginationMode?: 'loadMore' | 'seeAllLink' | null;
    seeAllUrl?: string | null;
    loadMoreText?: string | null;
    cardVariant?: 'default' | 'variant1' | 'variant2' | null;
    buttonVariant?: ButtonVariant | null;
    buttonText?: string | null;
    showVenue?: boolean | null;
    showMap?: boolean | null;
    showCapacity?: boolean | null;
    kind?: EventBlockKind | null;
    eventSurface?: EventSurfaceScope | null;
    filterEventPresets?: readonly EventSurfacePreset[] | null;
    scheduleScope?: EventScheduleScope | null;
    filterCategoryIds?: readonly EventCategoryId[] | null;
    filterStaffMemberId?: string | null;
    filterVenueId?: VenueId | null;
    emptyMessage?: string | null;
    _sectionStyles?: SectionStylesContent;
};
export type EventRegistrationContent = {
    heading?: string | null;
    description?: unknown;
    maxTickets?: '1' | '2' | '3' | '5' | '10' | null;
    showVenue?: boolean | null;
    showCapacity?: boolean | null;
    successMessage?: string | null;
    waitlistMessage?: string | null;
    buttonText?: string | null;
    buttonVariant?: 'primary' | 'secondary' | 'outline' | null;
    _sectionStyles?: SectionStylesContent;
};
export type EventSpotlightContent = {
    heading?: string | null;
    description?: unknown;
    maxEvents?: '1' | '2' | '3' | '4' | '5' | '6' | null;
    ctaLabel?: string | null;
    ctaUrl?: LinkValue | string | null;
    layout?: 'grid' | 'stack' | null;
    columns?: '2' | '3' | null;
    cardVariant?: 'default' | 'variant1' | 'variant2' | null;
    buttonVariant?: ButtonVariant | null;
    buttonText?: string | null;
    showVenue?: boolean | null;
    showMap?: boolean | null;
    showCapacity?: boolean | null;
    emptyMessage?: string | null;
    _sectionStyles?: SectionStylesContent;
};
export type FaqItem = {
    question: string;
    answer: unknown;
};
export type FaqContent = {
    eyebrow?: string | null;
    title?: string | null;
    description?: unknown;
    items?: FaqItem[] | null;
    _containerStyles?: ContainerStylesContent;
};
export type HeroCta = {
    label: string;
    link: LinkValue;
    variant?: 'default' | 'primary' | 'secondary' | 'outline';
    size?: 'sm' | 'md' | 'lg' | 'xl';
    iconLeft?: string;
    iconRight?: string;
};
export type HeroCtaInput = HeroCta;
export type HeroContent = {
    eyebrow?: string;
    headline: string;
    subheadline?: string;
    contentAlignment?: 'left' | 'center' | 'right';
    verticalAlignment?: 'top' | 'center' | 'bottom';
    contentMaxWidth?: 'default' | 'narrow' | 'medium' | 'wide';
    _sectionStyles?: SectionStylesContent;
    _containerStyles?: ContainerStylesContent;
    _contentCardStyles?: ContainerStylesContent;
    ctas?: ReadonlyArray<HeroCtaInput>;
};
export type HeroMedia = Media;
export type ImageGalleryContent = {
    variant?: 'grid' | 'carousel' | 'masonry' | 'marquee' | null;
    fullBleed?: boolean | null;
    aspectRatio?: 'auto' | '1/1' | '4/3' | '16/9' | '3/2' | '3/4' | null;
    slidesToShow?: '1' | '2' | '3' | null;
    slidesToShowTablet?: '' | '1' | '2' | '3' | null;
    slidesToShowDesktop?: '' | '1' | '2' | '3' | null;
    transition?: 'slide' | 'fade' | null;
    showControls?: boolean | null;
    showDots?: boolean | null;
    autoplay?: boolean | null;
    autoplayDelay?: '3000' | '5000' | '7000' | '10000' | null;
    arrowVisibility?: 'always' | 'hover' | null;
    loop?: boolean | null;
    marqueeDirection?: 'left' | 'right' | null;
    marqueeSpeed?: 'slow' | 'medium' | 'fast' | null;
    marqueePauseOnHover?: boolean | null;
    marqueeImageSize?: 'sm' | 'md' | 'lg' | 'xl' | null;
    imageFilter?: 'none' | 'grayscale' | 'grayscale-hover-reveal' | 'sepia' | null;
    imageBorder?: {
        enabled?: boolean | null;
        colorToken?: string | null;
        opacity?: number | null;
        width?: '1' | '2' | '3' | null;
    } | null;
    imageCorners?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | null;
    images?: Array<{
        image?: Media | null;
        caption?: string | null;
    }> | null;
    _sectionStyles?: SectionStylesContent;
};
export type MediaTextAlignment = 'left' | 'center';
export type MediaTextImagePosition = 'left' | 'right';
export type MediaTextAspectRatio = 'auto' | '16/9' | '4/3' | '1/1' | '3/4';
export type MediaTextContent = {
    title?: string | null;
    titleAlignment?: MediaTextAlignment | null;
    imagePosition?: MediaTextImagePosition | null;
    gap?: SemanticSpacing | null;
    ratio?: ImageColSize | null;
    aspectRatio?: MediaTextAspectRatio | null;
    images?: Array<{
        image: ImageMedia | null;
    }> | null;
    carouselTransition?: 'slide' | 'fade' | null;
    carouselAutoplay?: boolean | null;
    carouselAutoplayDelay?: '3000' | '5000' | '7000' | '10000' | null;
    carouselArrowVisibility?: 'always' | 'hover' | 'never' | null;
    showDots?: boolean | null;
    text: TipTapNode;
    wrapTextInCard?: boolean | null;
    _textCardStyles?: unknown;
};
export type NewsletterSignupPreset = 'emailOnly' | 'emailName' | 'emailFirstLast' | 'emailNameCompany';
export type NewsletterSignupContent = {
    title?: string | null;
    subtitle?: RichTextDoc | null;
    preset: NewsletterSignupPreset;
    buttonLabel?: string | null;
    successMessage?: string | null;
    privacyNote?: string | null;
    _sectionStyles?: SectionStylesContent;
};
export type ShopContent = {
    showPasses?: boolean | null;
    showMemberships?: boolean | null;
    layout?: 'grid' | 'list' | null;
    columns?: '1' | '2' | '3' | '4' | null;
    showDescriptions?: boolean | null;
    showValidityPeriod?: boolean | null;
    showPricePerCredit?: boolean | null;
    passesHeading?: string | null;
    membershipsHeading?: string | null;
    buyButtonText?: string | null;
    passPurchaseMode?: 'add_to_cart' | 'buy_now' | null;
    subscribeButtonText?: string | null;
    emptyStateText?: string | null;
    _sectionStyles?: SectionStylesContent;
};
export type ProductListContent = {
    heading?: string | null;
    layout?: 'grid' | 'list' | null;
    columns?: '1' | '2' | '3' | '4' | null;
    showSummary?: boolean | null;
    showBadges?: boolean | null;
    showPrices?: boolean | null;
    addButtonText?: string | null;
    emptyStateText?: string | null;
    _sectionStyles?: SectionStylesContent;
};
export type ProductDetailContent = {
    heading?: string | null;
    productSlug?: string | null;
    showSummary?: boolean | null;
    showBody?: boolean | null;
    showBadges?: boolean | null;
    addButtonText?: string | null;
    emptyStateText?: string | null;
    _sectionStyles?: SectionStylesContent;
};
export type CartContent = {
    heading?: string | null;
    emptyStateText?: string | null;
    checkoutButtonText?: string | null;
    clearButtonText?: string | null;
    _sectionStyles?: SectionStylesContent;
};
export type CheckoutContent = {
    heading?: string | null;
    submitButtonText?: string | null;
    emptyStateText?: string | null;
    _sectionStyles?: SectionStylesContent;
};
export type SiteFooterContent = {
    bodyText?: unknown;
    bottomText?: unknown;
};
export type SiteHeaderContent = Record<string, never>;
export type ThumbnailShape = 'round' | 'rounded' | 'square';
export type LayoutAlign = 'center' | 'left';
export type LayoutWidth = 'full' | 'lg-3-4-left';
export type ThumbnailPadding = 'none' | 'sm' | 'md' | 'lg';
export type StackImagePosition = 'left' | 'right' | 'alternate';
export type StackContentAlignment = 'top' | 'center';
type ManualTeamMemberItem = {
    _type: 'teamMember';
    name: string;
    role?: string | null;
    bio?: unknown;
    photo?: ImageMedia | null;
    profilePath?: string | null;
};
type TeamMembersCommonContent = {
    variant?: 'grid' | 'stack' | null;
    heading?: string | null;
    layoutAlign?: LayoutAlign | null;
    layoutWidth?: LayoutWidth | null;
    thumbnailShape?: ThumbnailShape | null;
    thumbnailPadding?: ThumbnailPadding | null;
    imageColSize?: ImageColSize | null;
    stackImagePosition?: StackImagePosition | null;
    stackContentAlignment?: StackContentAlignment | null;
    columns?: string | number | null;
    gap?: SemanticSpacing;
};
export type TeamMembersContent = (TeamMembersCommonContent & {
    source?: 'manual' | null;
    members: ManualTeamMemberItem[];
}) | (TeamMembersCommonContent & {
    source: 'site_staff';
    members?: ManualTeamMemberItem[];
});
export type TestimonialsBlockContent = {
    variant?: 'carousel' | 'grid' | null;
    heading?: string | null;
    subheading?: string | null;
    avatarLayout?: 'above-centered' | 'inline-left' | 'hidden' | null;
    gridColumns?: '2' | '3' | '4' | null;
    featuredEntryId?: string | null;
    slidesToShow?: number | string | null;
    slidesToShowTablet?: number | string | null;
    slidesToShowDesktop?: number | string | null;
    transition?: 'slide' | 'fade' | null;
    showDots?: boolean | null;
    autoplay?: boolean | null;
    autoplayDelay?: number | string | null;
    arrowVisibility?: 'always' | 'hover' | null;
    maxEntries?: number | string | null;
    _cardStyles?: CardStylesContent;
    _sectionStyles?: SectionStylesContent;
    _containerStyles?: ContainerStylesContent;
};
export type TestimonialEntryContent = {
    name?: string | null;
    jobTitle?: string | null;
    company?: string | null;
    headshot?: {
        url?: string | null;
        alt?: string | null;
    } | null;
    body?: unknown;
};
export type VideoGridContent = {
    heading?: string | null;
    subheading?: string | null;
    columns?: '1' | '2' | '3' | '4' | null;
    aspectRatio?: '16/9' | '4/3' | '1/1' | '3/4' | '9/16' | '21/9' | null;
    videos?: Array<{
        url?: string | null;
        aspectRatio?: '' | '16/9' | '4/3' | '1/1' | '3/4' | '9/16' | '21/9' | null;
        caption?: string | null;
    }> | null;
    emptyMessage?: string | null;
};
export type AudioPlayerContent = {
    audio?: (Media & {
        type: 'audio';
    }) | null;
    title?: string | null;
    description?: string | null;
    coverImage?: (Media & {
        type: 'image';
    }) | null;
};
export type PublicDownloadMedia = Media & {
    type: 'document' | 'spreadsheet' | 'archive' | 'audio' | 'video';
};
export type FileDownloadContent = {
    file?: PublicDownloadMedia | null;
    title?: string | null;
    description?: string | null;
    buttonLabel?: string | null;
};
export type AppointmentBookingContent = {
    formId: string;
    heading?: string | null;
    description?: unknown;
    _sectionStyles?: SectionStylesContent;
};
export type BlogPostContent = {
    title?: string | null;
    postSlug?: string | null;
};
export type FormBlockContent = {
    title?: string | null;
    intro?: RichTextDoc | null;
    formSlug: string;
    submitLabel?: string | null;
    successMessage?: string | null;
    _sectionStyles?: SectionStylesContent;
};
export type LocationMapContent = {
    heading?: string | null;
    location?: {
        addressText?: string | null;
        lat?: number | null;
        lng?: number | null;
    } | null;
    showAddressText?: boolean | null;
    showDirections?: boolean | null;
    directionsLabel?: string | null;
    zoom?: number | null;
    heightPx?: number | null;
    _sectionStyles?: SectionStylesContent;
};
export type SingleButtonContent = {
    title?: string | null;
    button?: {
        label?: string | null;
        link?: LinkValue | null;
        variant?: string | null;
    } | null;
};
export type GiftingContent = {
    heading?: string | null;
    intro?: string | null;
    giftCardsHeading?: string | null;
    vouchersHeading?: string | null;
    emptyStateText?: string | null;
    checkoutButtonText?: string | null;
    successMessage?: string | null;
    _sectionStyles?: SectionStylesContent;
};
export type SystemBlockContentByFullKind = {
    'block.hero': HeroContent;
    'block.columns': ColumnsContent;
    'block.collection': CollectionContent;
    'block.media-text': MediaTextContent;
    'block.cta-full': CtaFullContent;
    'block.single-button': SingleButtonContent;
    'block.body-text': BodyTextContent;
    'block.location-map': LocationMapContent;
    'block.faq': FaqContent;
    'block.testimonials': TestimonialsBlockContent;
    'block.team-members': TeamMembersContent;
    'block.embed': EmbedContent;
    'block.blog-post': BlogPostContent;
    'block.blog-listing': BlogListingContent;
    'block.site-header': SiteHeaderContent;
    'block.site-footer': SiteFooterContent;
    'block.form': FormBlockContent;
    'block.appointment-booking': AppointmentBookingContent;
    'block.event-registration': EventRegistrationContent;
    'block.event-details': EventDetailsContent;
    'block.course-registration': CourseRegistrationContent;
    'block.course-details': CourseDetailsContent;
    'block.event-spotlight': EventSpotlightContent;
    'block.event-listing': EventListingContent;
    'block.event-calendar': EventCalendarContent;
    'block.shop': ShopContent;
    'block.product-list': ProductListContent;
    'block.product-detail': ProductDetailContent;
    'block.cart': CartContent;
    'block.checkout': CheckoutContent;
    'block.gifting': GiftingContent;
    'block.newsletter-signup': NewsletterSignupContent;
    'block.image-gallery': ImageGalleryContent;
    'block.video-grid': VideoGridContent;
    'block.audio-player': AudioPlayerContent;
    'block.file-download': FileDownloadContent;
};
type StripBlockPrefix<T extends string> = T extends `block.${infer ShortKind}` ? ShortKind : never;
export type SystemBlockShortKind = StripBlockPrefix<keyof SystemBlockContentByFullKind>;
export type SystemBlockContentByKind = SystemBlockContentByFullKind & {
    [K in keyof SystemBlockContentByFullKind as StripBlockPrefix<K & string>]: SystemBlockContentByFullKind[K];
};
export type SystemBlockContentFor<K extends string> = K extends keyof SystemBlockContentByKind ? SystemBlockContentByKind[K] : UnknownRecord;
export {};
