import type { PublicCourse } from '../../blocks/courses/shared/types';
import type { OccurrenceContext } from '../../blocks/event-registration.shared';
import type { CourseRegistrationClientProps as InternalCourseRegistrationClientProps } from './course-registration/types';
import { type InteractiveIslandProps } from '../../../contracts/islands';
export type CourseRegistrationContentEntry = Readonly<{
    id: string;
    slug: string;
    contentTypeSlug: string;
}>;
export type CourseEntrySubrouteContext = Readonly<{
    kind: 'course-run';
    run: Readonly<{
        courseId: string;
        seriesId: string;
        runSlug: string;
        runName: string | null;
    }>;
}> | Readonly<{
    kind: 'event-occurrence';
    occurrence: OccurrenceContext;
}>;
export type CourseRegistrationSourceProps = Readonly<{
    siteId?: string;
    apiBaseUrl?: string;
    portalToken?: string | null;
    contentEntry?: CourseRegistrationContentEntry | null;
    entrySubrouteContext?: CourseEntrySubrouteContext | null;
    courses?: PublicCourse[] | null;
    className?: string | null;
    showSessions?: boolean;
    showPrice?: boolean;
    showCapacity?: boolean;
    showVenue?: boolean;
    successMessage?: string;
    waitlistMessage?: string;
    membershipMessage?: string;
    buttonText?: string | null;
    buttonVariant?: 'primary' | 'secondary' | 'outline';
    stage?: 'preview' | 'published';
}>;
export type CourseRegistrationDisplay = Readonly<{
    kind: 'course-registration';
    state: 'shell';
    className: string | null;
    summaryButtonText: string;
}>;
export type CourseRegistrationHydration = Readonly<Omit<InternalCourseRegistrationClientProps, 'siteId' | 'stage' | 'buttonText' | 'className'>>;
type CourseRegistrationIslandMeta = Readonly<{
    siteId?: string;
    apiBaseUrl?: string;
    portalToken?: string | null;
    stage?: 'preview' | 'published';
}>;
export declare function buildCourseRegistrationDisplay(source: CourseRegistrationSourceProps): CourseRegistrationDisplay;
export type CourseRegistrationInteractiveIslandProps = InteractiveIslandProps<CourseRegistrationIslandMeta, 'course-registration', typeof courseRegistrationBlockRuntime>;
export declare const courseRegistrationBlockRuntime: Readonly<{
    kind: "client-owned";
    buildRender: (source: Readonly<{
        siteId?: string;
        apiBaseUrl?: string;
        portalToken?: string | null;
        contentEntry?: Readonly<{
            id: string;
            slug: string;
            contentTypeSlug: string;
        }> | null;
        entrySubrouteContext?: CourseEntrySubrouteContext | null;
        courses?: PublicCourse[] | null;
        className?: string | null;
        showSessions?: boolean;
        showPrice?: boolean;
        showCapacity?: boolean;
        showVenue?: boolean;
        successMessage?: string;
        waitlistMessage?: string;
        membershipMessage?: string;
        buttonText?: string | null;
        buttonVariant?: "primary" | "secondary" | "outline";
        stage?: "preview" | "published";
    }>) => Readonly<{
        display: Readonly<{
            kind: "course-registration";
            state: "shell";
            className: string | null;
            summaryButtonText: string;
        }>;
        hydration: Readonly<Omit<InternalCourseRegistrationClientProps, "siteId" | "stage" | "className" | "buttonText">>;
    }>;
    contracts: Readonly<{
        source: Readonly<{
            encode: (value: Readonly<{
                siteId?: string;
                apiBaseUrl?: string;
                portalToken?: string | null;
                contentEntry?: Readonly<{
                    id: string;
                    slug: string;
                    contentTypeSlug: string;
                }> | null;
                entrySubrouteContext?: CourseEntrySubrouteContext | null;
                courses?: PublicCourse[] | null;
                className?: string | null;
                showSessions?: boolean;
                showPrice?: boolean;
                showCapacity?: boolean;
                showVenue?: boolean;
                successMessage?: string;
                waitlistMessage?: string;
                membershipMessage?: string;
                buttonText?: string | null;
                buttonVariant?: "primary" | "secondary" | "outline";
                stage?: "preview" | "published";
            }>) => unknown;
            decode: (input: unknown) => import("../../../contracts").DecodeResult<Readonly<{
                siteId?: string;
                apiBaseUrl?: string;
                portalToken?: string | null;
                contentEntry?: Readonly<{
                    id: string;
                    slug: string;
                    contentTypeSlug: string;
                }> | null;
                entrySubrouteContext?: CourseEntrySubrouteContext | null;
                courses?: PublicCourse[] | null;
                className?: string | null;
                showSessions?: boolean;
                showPrice?: boolean;
                showCapacity?: boolean;
                showVenue?: boolean;
                successMessage?: string;
                waitlistMessage?: string;
                membershipMessage?: string;
                buttonText?: string | null;
                buttonVariant?: "primary" | "secondary" | "outline";
                stage?: "preview" | "published";
            }>>;
        }>;
        render: Readonly<{
            encode: (value: Readonly<{
                display: Readonly<{
                    kind: "course-registration";
                    state: "shell";
                    className: string | null;
                    summaryButtonText: string;
                }>;
                hydration: Readonly<Omit<InternalCourseRegistrationClientProps, "siteId" | "stage" | "className" | "buttonText">>;
            }>) => unknown;
            decode: (input: unknown) => import("../../../contracts").DecodeResult<Readonly<{
                display: Readonly<{
                    kind: "course-registration";
                    state: "shell";
                    className: string | null;
                    summaryButtonText: string;
                }>;
                hydration: Readonly<Omit<InternalCourseRegistrationClientProps, "siteId" | "stage" | "className" | "buttonText">>;
            }>>;
        }>;
    }>;
}>;
export declare const courseRegistrationInteractiveIslandPropsCodec: Readonly<{
    encode: (value: Readonly<Readonly<{
        siteId?: string;
        apiBaseUrl?: string;
        portalToken?: string | null;
        stage?: "preview" | "published";
    }> & {
        renderKind: "client-owned";
        render: Readonly<{
            mode: "course-registration";
        } & Readonly<{
            display: Readonly<{
                kind: "course-registration";
                state: "shell";
                className: string | null;
                summaryButtonText: string;
            }>;
            hydration: Readonly<Omit<InternalCourseRegistrationClientProps, "siteId" | "stage" | "className" | "buttonText">>;
        }>>;
    }>) => unknown;
    decode: (input: unknown) => import("../../../contracts").DecodeResult<Readonly<Readonly<{
        siteId?: string;
        apiBaseUrl?: string;
        portalToken?: string | null;
        stage?: "preview" | "published";
    }> & {
        renderKind: "client-owned";
        render: Readonly<{
            mode: "course-registration";
        } & Readonly<{
            display: Readonly<{
                kind: "course-registration";
                state: "shell";
                className: string | null;
                summaryButtonText: string;
            }>;
            hydration: Readonly<Omit<InternalCourseRegistrationClientProps, "siteId" | "stage" | "className" | "buttonText">>;
        }>>;
    }>>;
}>;
export declare function buildCourseRegistrationInteractiveIslandProps(props: CourseRegistrationSourceProps): CourseRegistrationInteractiveIslandProps;
export {};
