import type { ButtonVariant, CalendarTabViews, ColumnOption, DisplayMode, EventBlockKind, EventLayout, EventScheduleScope, EventSurfaceScope, FilterAutoShow, PublicEvent, WeekStart } from "../../../blocks/events/shared/types";
import { type InteractiveIslandProps } from "../../../../contracts/islands";
import type { EventListingDisplay, EventListingInteractiveIslandProps } from "./EventListing.interactive";
export type EventCalendarSourceProps = Readonly<{
    events?: PublicEvent[] | null;
    siteId: string;
    apiBaseUrl?: string;
    stage?: "preview" | "published";
    displayMode?: DisplayMode | null;
    listLayout?: EventLayout;
    listColumns?: ColumnOption;
    layout?: EventLayout;
    columns?: ColumnOption;
    eventsPerPage?: string;
    compactEventsPerPage?: string;
    loadMoreText?: string;
    startOfWeek?: WeekStart;
    calendarTabViews?: CalendarTabViews;
    showFilters?: boolean | null;
    showCategoryFilter?: FilterAutoShow;
    showVenueFilter?: boolean | null;
    showStaffFilter?: boolean | null;
    kind?: EventBlockKind | null;
    eventSurface?: EventSurfaceScope | null;
    filterEventPresets?: readonly string[] | string | null;
    scheduleScope?: EventScheduleScope | null;
    filterCategoryIds?: readonly string[] | string | null;
    filterStaffMemberId?: string | null;
    filterVenueId?: string | null;
    buttonVariant?: ButtonVariant;
    buttonText?: string;
    showVenue?: boolean | null;
    showMap?: boolean | null;
    showCapacity?: boolean | null;
    emptyMessage?: string;
    className?: string;
}>;
export type EventCalendarDisplay = Readonly<{
    kind: "event-calendar";
    displayMode: DisplayMode;
    className: string | null;
    events: readonly PublicEvent[];
    listLayout: EventLayout;
    listColumns: ColumnOption;
    eventsPerPage: string;
    loadMoreText: string;
    startOfWeek: WeekStart;
    calendarTabViews: CalendarTabViews;
    showFilters: boolean;
    showCategoryFilter: FilterAutoShow;
    showVenueFilter: boolean;
    showStaffFilter: boolean;
    eventKind: EventBlockKind;
    eventSurface: EventSurfaceScope;
    filterEventPresets: string | null;
    scheduleScope: EventScheduleScope;
    filterCategoryIds: string | null;
    filterStaffMemberId: string | null;
    filterVenueId: string | null;
    buttonVariant: ButtonVariant;
    buttonText: string;
    showVenue: boolean;
    showMap: boolean;
    showCapacity: boolean;
    emptyMessage: string;
}>;
export type EventCalendarHydration = Readonly<{
    siteId: string;
    stage?: "preview" | "published";
    prefetchedEvents: boolean;
    eventKind: EventBlockKind;
    eventSurface: EventSurfaceScope;
    filterEventPresets: string | null;
    scheduleScope: EventScheduleScope;
}>;
type EventCalendarIslandMeta = Readonly<{
    siteId: string;
    apiBaseUrl?: string;
    stage?: "preview" | "published";
}>;
export declare function buildEventCalendarDisplay(source: EventCalendarSourceProps): EventCalendarDisplay;
export declare function buildEventCalendarListingDisplay(display: EventCalendarDisplay, prefetchedEvents: boolean, className?: string | null): EventListingDisplay;
export declare function buildEventCalendarListingRender(render: Readonly<{
    display: EventCalendarDisplay;
    hydration: EventCalendarHydration;
}>, className?: string | null): EventListingInteractiveIslandProps["render"];
export type EventCalendarInteractiveIslandProps = InteractiveIslandProps<EventCalendarIslandMeta, "event-calendar", typeof eventCalendarBlockRuntime>;
export declare const eventCalendarBlockRuntime: Readonly<{
    kind: "progressive";
    buildRender: (source: Readonly<{
        events?: PublicEvent[] | null;
        siteId: string;
        apiBaseUrl?: string;
        stage?: "preview" | "published";
        displayMode?: DisplayMode | null;
        listLayout?: EventLayout;
        listColumns?: ColumnOption;
        layout?: EventLayout;
        columns?: ColumnOption;
        eventsPerPage?: string;
        compactEventsPerPage?: string;
        loadMoreText?: string;
        startOfWeek?: WeekStart;
        calendarTabViews?: CalendarTabViews;
        showFilters?: boolean | null;
        showCategoryFilter?: FilterAutoShow;
        showVenueFilter?: boolean | null;
        showStaffFilter?: boolean | null;
        kind?: EventBlockKind | null;
        eventSurface?: EventSurfaceScope | null;
        filterEventPresets?: readonly string[] | string | null;
        scheduleScope?: EventScheduleScope | null;
        filterCategoryIds?: readonly string[] | string | null;
        filterStaffMemberId?: string | null;
        filterVenueId?: string | null;
        buttonVariant?: ButtonVariant;
        buttonText?: string;
        showVenue?: boolean | null;
        showMap?: boolean | null;
        showCapacity?: boolean | null;
        emptyMessage?: string;
        className?: string;
    }>) => Readonly<{
        display: Readonly<{
            kind: "event-calendar";
            displayMode: DisplayMode;
            className: string | null;
            events: readonly PublicEvent[];
            listLayout: EventLayout;
            listColumns: ColumnOption;
            eventsPerPage: string;
            loadMoreText: string;
            startOfWeek: WeekStart;
            calendarTabViews: CalendarTabViews;
            showFilters: boolean;
            showCategoryFilter: FilterAutoShow;
            showVenueFilter: boolean;
            showStaffFilter: boolean;
            eventKind: EventBlockKind;
            eventSurface: EventSurfaceScope;
            filterEventPresets: string | null;
            scheduleScope: EventScheduleScope;
            filterCategoryIds: string | null;
            filterStaffMemberId: string | null;
            filterVenueId: string | null;
            buttonVariant: ButtonVariant;
            buttonText: string;
            showVenue: boolean;
            showMap: boolean;
            showCapacity: boolean;
            emptyMessage: string;
        }>;
        hydration: Readonly<{
            siteId: string;
            stage?: "preview" | "published";
            prefetchedEvents: boolean;
            eventKind: EventBlockKind;
            eventSurface: EventSurfaceScope;
            filterEventPresets: string | null;
            scheduleScope: EventScheduleScope;
        }>;
    }>;
    contracts: Readonly<{
        source: Readonly<{
            encode: (value: Readonly<{
                events?: PublicEvent[] | null;
                siteId: string;
                apiBaseUrl?: string;
                stage?: "preview" | "published";
                displayMode?: DisplayMode | null;
                listLayout?: EventLayout;
                listColumns?: ColumnOption;
                layout?: EventLayout;
                columns?: ColumnOption;
                eventsPerPage?: string;
                compactEventsPerPage?: string;
                loadMoreText?: string;
                startOfWeek?: WeekStart;
                calendarTabViews?: CalendarTabViews;
                showFilters?: boolean | null;
                showCategoryFilter?: FilterAutoShow;
                showVenueFilter?: boolean | null;
                showStaffFilter?: boolean | null;
                kind?: EventBlockKind | null;
                eventSurface?: EventSurfaceScope | null;
                filterEventPresets?: readonly string[] | string | null;
                scheduleScope?: EventScheduleScope | null;
                filterCategoryIds?: readonly string[] | string | null;
                filterStaffMemberId?: string | null;
                filterVenueId?: string | null;
                buttonVariant?: ButtonVariant;
                buttonText?: string;
                showVenue?: boolean | null;
                showMap?: boolean | null;
                showCapacity?: boolean | null;
                emptyMessage?: string;
                className?: string;
            }>) => unknown;
            decode: (input: unknown) => import("../../../../contracts").DecodeResult<Readonly<{
                events?: PublicEvent[] | null;
                siteId: string;
                apiBaseUrl?: string;
                stage?: "preview" | "published";
                displayMode?: DisplayMode | null;
                listLayout?: EventLayout;
                listColumns?: ColumnOption;
                layout?: EventLayout;
                columns?: ColumnOption;
                eventsPerPage?: string;
                compactEventsPerPage?: string;
                loadMoreText?: string;
                startOfWeek?: WeekStart;
                calendarTabViews?: CalendarTabViews;
                showFilters?: boolean | null;
                showCategoryFilter?: FilterAutoShow;
                showVenueFilter?: boolean | null;
                showStaffFilter?: boolean | null;
                kind?: EventBlockKind | null;
                eventSurface?: EventSurfaceScope | null;
                filterEventPresets?: readonly string[] | string | null;
                scheduleScope?: EventScheduleScope | null;
                filterCategoryIds?: readonly string[] | string | null;
                filterStaffMemberId?: string | null;
                filterVenueId?: string | null;
                buttonVariant?: ButtonVariant;
                buttonText?: string;
                showVenue?: boolean | null;
                showMap?: boolean | null;
                showCapacity?: boolean | null;
                emptyMessage?: string;
                className?: string;
            }>>;
        }>;
        render: Readonly<{
            encode: (value: Readonly<{
                display: Readonly<{
                    kind: "event-calendar";
                    displayMode: DisplayMode;
                    className: string | null;
                    events: readonly PublicEvent[];
                    listLayout: EventLayout;
                    listColumns: ColumnOption;
                    eventsPerPage: string;
                    loadMoreText: string;
                    startOfWeek: WeekStart;
                    calendarTabViews: CalendarTabViews;
                    showFilters: boolean;
                    showCategoryFilter: FilterAutoShow;
                    showVenueFilter: boolean;
                    showStaffFilter: boolean;
                    eventKind: EventBlockKind;
                    eventSurface: EventSurfaceScope;
                    filterEventPresets: string | null;
                    scheduleScope: EventScheduleScope;
                    filterCategoryIds: string | null;
                    filterStaffMemberId: string | null;
                    filterVenueId: string | null;
                    buttonVariant: ButtonVariant;
                    buttonText: string;
                    showVenue: boolean;
                    showMap: boolean;
                    showCapacity: boolean;
                    emptyMessage: string;
                }>;
                hydration: Readonly<{
                    siteId: string;
                    stage?: "preview" | "published";
                    prefetchedEvents: boolean;
                    eventKind: EventBlockKind;
                    eventSurface: EventSurfaceScope;
                    filterEventPresets: string | null;
                    scheduleScope: EventScheduleScope;
                }>;
            }>) => unknown;
            decode: (input: unknown) => import("../../../../contracts").DecodeResult<Readonly<{
                display: Readonly<{
                    kind: "event-calendar";
                    displayMode: DisplayMode;
                    className: string | null;
                    events: readonly PublicEvent[];
                    listLayout: EventLayout;
                    listColumns: ColumnOption;
                    eventsPerPage: string;
                    loadMoreText: string;
                    startOfWeek: WeekStart;
                    calendarTabViews: CalendarTabViews;
                    showFilters: boolean;
                    showCategoryFilter: FilterAutoShow;
                    showVenueFilter: boolean;
                    showStaffFilter: boolean;
                    eventKind: EventBlockKind;
                    eventSurface: EventSurfaceScope;
                    filterEventPresets: string | null;
                    scheduleScope: EventScheduleScope;
                    filterCategoryIds: string | null;
                    filterStaffMemberId: string | null;
                    filterVenueId: string | null;
                    buttonVariant: ButtonVariant;
                    buttonText: string;
                    showVenue: boolean;
                    showMap: boolean;
                    showCapacity: boolean;
                    emptyMessage: string;
                }>;
                hydration: Readonly<{
                    siteId: string;
                    stage?: "preview" | "published";
                    prefetchedEvents: boolean;
                    eventKind: EventBlockKind;
                    eventSurface: EventSurfaceScope;
                    filterEventPresets: string | null;
                    scheduleScope: EventScheduleScope;
                }>;
            }>>;
        }>;
    }>;
}>;
export declare const eventCalendarInteractiveIslandPropsCodec: Readonly<{
    encode: (value: Readonly<Readonly<{
        siteId: string;
        apiBaseUrl?: string;
        stage?: "preview" | "published";
    }> & {
        renderKind: "progressive";
        render: Readonly<{
            mode: "event-calendar";
        } & Readonly<{
            display: Readonly<{
                kind: "event-calendar";
                displayMode: DisplayMode;
                className: string | null;
                events: readonly PublicEvent[];
                listLayout: EventLayout;
                listColumns: ColumnOption;
                eventsPerPage: string;
                loadMoreText: string;
                startOfWeek: WeekStart;
                calendarTabViews: CalendarTabViews;
                showFilters: boolean;
                showCategoryFilter: FilterAutoShow;
                showVenueFilter: boolean;
                showStaffFilter: boolean;
                eventKind: EventBlockKind;
                eventSurface: EventSurfaceScope;
                filterEventPresets: string | null;
                scheduleScope: EventScheduleScope;
                filterCategoryIds: string | null;
                filterStaffMemberId: string | null;
                filterVenueId: string | null;
                buttonVariant: ButtonVariant;
                buttonText: string;
                showVenue: boolean;
                showMap: boolean;
                showCapacity: boolean;
                emptyMessage: string;
            }>;
            hydration: Readonly<{
                siteId: string;
                stage?: "preview" | "published";
                prefetchedEvents: boolean;
                eventKind: EventBlockKind;
                eventSurface: EventSurfaceScope;
                filterEventPresets: string | null;
                scheduleScope: EventScheduleScope;
            }>;
        }>>;
    }>) => unknown;
    decode: (input: unknown) => import("../../../../contracts").DecodeResult<Readonly<Readonly<{
        siteId: string;
        apiBaseUrl?: string;
        stage?: "preview" | "published";
    }> & {
        renderKind: "progressive";
        render: Readonly<{
            mode: "event-calendar";
        } & Readonly<{
            display: Readonly<{
                kind: "event-calendar";
                displayMode: DisplayMode;
                className: string | null;
                events: readonly PublicEvent[];
                listLayout: EventLayout;
                listColumns: ColumnOption;
                eventsPerPage: string;
                loadMoreText: string;
                startOfWeek: WeekStart;
                calendarTabViews: CalendarTabViews;
                showFilters: boolean;
                showCategoryFilter: FilterAutoShow;
                showVenueFilter: boolean;
                showStaffFilter: boolean;
                eventKind: EventBlockKind;
                eventSurface: EventSurfaceScope;
                filterEventPresets: string | null;
                scheduleScope: EventScheduleScope;
                filterCategoryIds: string | null;
                filterStaffMemberId: string | null;
                filterVenueId: string | null;
                buttonVariant: ButtonVariant;
                buttonText: string;
                showVenue: boolean;
                showMap: boolean;
                showCapacity: boolean;
                emptyMessage: string;
            }>;
            hydration: Readonly<{
                siteId: string;
                stage?: "preview" | "published";
                prefetchedEvents: boolean;
                eventKind: EventBlockKind;
                eventSurface: EventSurfaceScope;
                filterEventPresets: string | null;
                scheduleScope: EventScheduleScope;
            }>;
        }>>;
    }>>;
}>;
export declare function buildEventCalendarInteractiveIslandProps(props: EventCalendarSourceProps): EventCalendarInteractiveIslandProps;
export {};
