import type { Media } from '../../contracts';
import type { PublicTeamMemberSummary } from '../../../../api/src/index';
import type { BookingFlexibleBalanceConfig, BookingInstalmentPlanConfig, LocationCoordinates } from '../../../../core/src/index';
import type { AccordionIslandProps as BlocksAccordionIslandProps, BookingFormConfig as BlocksBookingFormConfig, BookingFormInteractiveIslandProps as BlocksBookingFormIslandProps, BookingFormService as BlocksBookingFormService, CarouselIslandProps as BlocksCarouselIslandProps, CourseRegistrationInteractiveIslandProps as BlocksCourseRegistrationIslandProps, CartDisplay as BlocksCartDisplay, CartInteractiveIslandProps as BlocksCartIslandProps, CartLineDisplay as BlocksCartLineDisplay, CheckoutDisplay as BlocksCheckoutDisplay, CheckoutInteractiveIslandProps as BlocksCheckoutIslandProps, EventCalendarInteractiveIslandProps as BlocksEventCalendarIslandProps, EventCombinedInteractiveIslandProps as BlocksEventCombinedIslandProps, EventDetailsContentEntry as BlocksEventDetailsContentEntry, EventDetailsIslandProps as BlocksEventDetailsIslandProps, EventDetailsOccurrenceContext as BlocksEventDetailsOccurrenceContext, LocationMapIslandProps as BlocksLocationMapIslandProps, EventRegistrationInteractiveIslandProps as BlocksEventRegistrationIslandProps, EventListingDisplay as BlocksEventListingDisplay, EventListingHydration as BlocksEventListingHydration, EventListingInteractiveIslandProps as BlocksEventListingIslandProps, FormInteractiveIslandProps as BlocksFormIslandProps, HeaderSectionIslandProps as BlocksHeaderSectionIslandProps, MembershipCardDisplay as BlocksMembershipCardDisplay, NewsletterFormInteractiveIslandProps as BlocksNewsletterFormIslandProps, PassCardDisplay as BlocksPassCardDisplay, PassesMembershipsDisplay as BlocksPassesMembershipsDisplay, ProductCardDisplay as BlocksProductCardDisplay, ProductDetailDisplay as BlocksProductDetailDisplay, ProductDetailInteractiveIslandProps as BlocksProductDetailIslandProps, ProductListDisplay as BlocksProductListDisplay, ProductListInteractiveIslandProps as BlocksProductListIslandProps, ProductVariantOptionDisplay as BlocksProductVariantOptionDisplay, ShopInteractiveIslandProps as BlocksShopIslandProps } from '../../../../blocks/src/contracts/index';
export type ResponsiveSlidesToShow = {
    mobile?: number | string;
    tablet?: number | string;
    desktop?: number | string;
};
export type FormFieldDef = {
    id: string;
    label?: string;
    type?: string;
    required?: boolean;
    placeholder?: string;
    helpText?: string;
    layout?: {
        width?: 'full' | 'half';
    };
    rows?: number;
    options?: Array<{
        value: string;
        label: string;
    }>;
    multiple?: boolean;
    minLength?: number;
    maxLength?: number;
    pattern?: string;
    min?: number;
    max?: number;
};
export type FormRecord = {
    id: string;
    schemaJson?: {
        fields?: FormFieldDef[];
    };
};
export type VenueLocation = LocationCoordinates;
export type EventVenue = {
    id: string;
    name: string;
    address: string | null;
    location: VenueLocation | null;
};
export type EventCategory = {
    id: string;
    name: string;
    color: string | null;
};
export type PricingType = 'free' | 'paid' | 'pass_only' | 'membership_only';
export type AccessRestriction = 'none' | 'category';
export type PublicEventTicketTypeAvailability = {
    kind: 'available';
    remainingCapacity: number | null;
} | {
    kind: 'unavailable';
    reason: 'inactive' | 'not_on_sale_yet' | 'sale_ended' | 'sold_out' | 'event_sold_out';
    remainingCapacity: number | null;
};
export type PublicEventTicketType = {
    id: string;
    siteId: string;
    eventSeriesId: string;
    name: string;
    description: string | null;
    priceAmount: number;
    isActive: boolean;
    sortOrder: number;
    capacityMode: 'limited' | 'unlimited';
    capacityLimit: number | null;
    attendanceScope?: 'in_person' | 'online' | 'both';
    saleStartsAt: string | null;
    saleEndsAt: string | null;
    availability: PublicEventTicketTypeAvailability;
    createdAt: string;
    updatedAt: string;
};
export type PublicEventAttendanceMode = 'in_person' | 'online';
export type PublicEventAttendanceModeAvailability = {
    mode: PublicEventAttendanceMode;
    capacity: number | null;
    registeredCount: number;
    availableSpots: number | null;
    waitlistEnabled: boolean;
};
export type { PublicTeamMemberSummary };
export type BookingPaymentCollectionOption = {
    kind: 'upfront';
} | {
    kind: 'deferred_manual';
} | {
    kind: 'instalment_plan';
    plan: BookingInstalmentPlanConfig;
} | {
    kind: 'flexible_balance';
    config: BookingFlexibleBalanceConfig;
};
export type BookingPaymentTerms = {
    allowedOptions: BookingPaymentCollectionOption[];
};
export type BookingPricingOption = {
    id: string;
    name: string;
    description: string | null;
    priceAmount: number;
    isActive: boolean;
    sortOrder: number;
    capacityLimit: number | null;
    saleStartsAt: string | null;
    saleEndsAt: string | null;
    attendanceScope?: 'in_person' | 'online' | 'both' | null;
};
export type BookingPricing = {
    bookingRequirement: 'none' | 'required';
    pricingStrategy: 'free' | 'single' | 'tiered';
    currency: string;
    singlePriceAmount: number | null;
    paymentTerms: BookingPaymentTerms;
    options: readonly BookingPricingOption[];
};
export type PublicEvent = {
    kind?: 'event' | 'course_session';
    id: string;
    occurrenceId: string;
    seriesId: string;
    title: string;
    description: string | null;
    presentation?: {
        cardTitleOverride?: string | null;
        summary?: string | null;
        image?: Media | null;
        tags?: string[];
        ctaLabel?: string | null;
        badges?: string[];
    };
    slug: string;
    path: string;
    requiresRegistration: boolean;
    deliveryMode: 'in_person' | 'online' | 'hybrid';
    attendanceModes: PublicEventAttendanceModeAvailability[];
    startsAt: string;
    endsAt: string;
    capacity: number | null;
    registeredCount: number;
    availableSpots: number | null;
    waitlistEnabled: boolean;
    venue: EventVenue | null;
    eventCategory: EventCategory | null;
    teamMembers?: PublicTeamMemberSummary[];
    status?: 'active' | 'draft' | 'archived';
    timeZone: string;
    pricingType: PricingType;
    price: number | null;
    currency: string;
    paymentTerms: BookingPaymentTerms;
    pricingMode?: 'single' | 'ticket_types';
    ticketTypes?: PublicEventTicketType[];
    accessRestriction: AccessRestriction;
    allowedCategoryIds: string[];
    requireGuestDetails?: boolean;
    acceptsPasses?: boolean;
    acceptsMemberships?: boolean;
    course?: {
        id: string;
        pricing?: BookingPricing;
        priceCents: number | null;
        currency: string;
        enrollmentOpen: boolean;
    } | null;
};
export type CourseStatus = 'active' | 'draft' | 'cancelled';
export type CourseVenue = {
    id: string;
    name: string;
    address: string | null;
};
export type CourseSession = {
    id: string;
    startsAt: string;
    endsAt: string;
    capacityOverride?: number | null;
    overrides?: Record<string, unknown> | null;
};
export type PublicCourse = {
    id: string;
    title: string;
    slug: string;
    description: unknown | null;
    enrollmentOpen: boolean;
    priceCents: number | null;
    currency: string;
    enrollmentCapacity: number | null;
    acceptsMemberships: boolean;
    status: CourseStatus;
    sessionsCount: number;
    enrolledCount: number;
    availableSpots: number | null;
    sessions: CourseSession[];
    venue: CourseVenue | null;
    contentEntryId: string | null;
};
export type PublicPassProduct = {
    id: string;
    productUseCase: 'event_pass' | 'appointment_package';
    name: string;
    description: string | null;
    price: number;
    currency: string;
    creditsTotal: number;
    pricePerCredit: number;
    validDays: number | null;
    eligibleCategoryIds: string[];
    eligibleCategoryNames: string[];
};
export type PublicMembershipProduct = {
    id: string;
    name: string;
    description: string | null;
    price: number;
    currency: string;
    billingInterval: 'month' | 'year';
    eligibleCategoryIds: string[];
    eligibleCategoryNames: string[];
};
export type PublicProductVariant = {
    id: string;
    title: string;
    sku: string | null;
    priceCents: number;
    stockQuantity: number | null;
    soldOut: boolean;
};
export type PublicProduct = {
    id: string;
    contentEntryId: string | null;
    title: string;
    slug: string;
    path: string | null;
    status: 'draft' | 'active';
    priceCents: number;
    currency: string;
    productType: 'physical' | 'digital';
    requiresShipping: boolean;
    hasVariants: boolean;
    trackInventory: boolean;
    soldOut: boolean;
    category: {
        id: string;
        name: string;
        slug: string;
    } | null;
    summary: string | null;
    badges: string[];
    ctaLabel: string | null;
    body: unknown | null;
    gallery: Array<{
        url: string;
        alt: string | null;
    }>;
    variants: PublicProductVariant[];
};
export type ShopDisplayConfig = {
    className?: string | null;
    mode?: 'passes-memberships' | 'product-list' | 'product-detail' | 'cart' | 'checkout';
    heading?: string | null;
    productSlug?: string | null;
    showPasses?: boolean;
    showMemberships?: boolean;
    layout?: 'grid' | 'list';
    columns?: string;
    showDescriptions?: boolean;
    showSummary?: boolean;
    showBody?: boolean;
    showBadges?: boolean;
    showPrices?: boolean;
    showValidityPeriod?: boolean;
    showPricePerCredit?: boolean | null;
    passesHeading?: string;
    membershipsHeading?: string;
    buyButtonText?: string;
    addButtonText?: string;
    passPurchaseMode?: 'add_to_cart' | 'buy_now';
    subscribeButtonText?: string;
    emptyStateText?: string;
    checkoutButtonText?: string;
    clearButtonText?: string;
    submitButtonText?: string;
    contentEntry?: {
        id?: string | null;
        slug?: string | null;
    } | null;
    passes?: PublicPassProduct[] | null;
    memberships?: PublicMembershipProduct[] | null;
    products?: PublicProduct[] | null;
};
export type EventLayout = 'grid' | 'stack';
export type ColumnOption = '2' | '3' | '4';
export type CalendarView = 'month' | 'week';
export type WeekStart = 'sunday' | 'monday';
export type FilterAutoShow = 'auto' | 'always' | 'never';
export type CalendarTabViews = 'both' | 'month' | 'week';
export type IslandKind = 'accordion' | 'headerSection' | 'carousel' | 'form' | 'booking-form' | 'event-registration' | 'course-registration' | 'event-details' | 'location-map' | 'event-listing' | 'event-calendar' | 'event-combined' | 'product-list' | 'product-detail' | 'cart' | 'checkout' | 'shop' | 'newsletter-form';
export type AccordionIslandProps = BlocksAccordionIslandProps;
export type CarouselIslandProps = BlocksCarouselIslandProps;
export type FormIslandProps = BlocksFormIslandProps;
export type BookingFormService = BlocksBookingFormService;
export type BookingFormConfig = BlocksBookingFormConfig;
export type BookingFormIslandProps = BlocksBookingFormIslandProps;
export type CardVariant = 'default' | 'variant1' | 'variant2';
export type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'link';
export type EventListingLayout = EventLayout;
export type CardOrientation = 'vertical' | 'horizontal';
export type EventListingDisplay = BlocksEventListingDisplay;
export type EventListingHydration = BlocksEventListingHydration;
export type ProductVariantOptionDisplay = BlocksProductVariantOptionDisplay;
export type ProductCardDisplay = BlocksProductCardDisplay;
export type ProductListDisplay = BlocksProductListDisplay;
export type ProductDetailDisplay = BlocksProductDetailDisplay;
export type PassCardDisplay = BlocksPassCardDisplay;
export type MembershipCardDisplay = BlocksMembershipCardDisplay;
export type PassesMembershipsDisplay = BlocksPassesMembershipsDisplay;
export type CartLineDisplay = BlocksCartLineDisplay;
export type CartDisplay = BlocksCartDisplay;
export type CheckoutDisplay = BlocksCheckoutDisplay;
export type EventListingIslandProps = BlocksEventListingIslandProps;
export type EventCalendarIslandProps = BlocksEventCalendarIslandProps;
export type EventCombinedIslandProps = BlocksEventCombinedIslandProps;
export type EventRegistrationIslandProps = BlocksEventRegistrationIslandProps;
export type EventDetailsIslandProps = BlocksEventDetailsIslandProps;
export type EventDetailsContentEntry = BlocksEventDetailsContentEntry;
export type LocationMapIslandProps = BlocksLocationMapIslandProps;
export type CourseRegistrationIslandProps = BlocksCourseRegistrationIslandProps;
export type EventRegistrationContentEntry = EventDetailsContentEntry;
export type CourseRegistrationContentEntry = {
    id: string;
    slug: string;
    contentTypeSlug: string;
};
export type CourseEntrySubrouteContext = {
    kind: 'course-run';
    run: {
        courseId: string;
        seriesId: string;
        runSlug: string;
        runName: string | null;
    };
} | {
    kind: 'event-occurrence';
    occurrence: OccurrenceContext;
};
export type OccurrenceContext = BlocksEventDetailsOccurrenceContext;
export type HeaderSectionIslandProps = BlocksHeaderSectionIslandProps;
export type NewsletterPreset = 'emailOnly' | 'emailName' | 'emailFirstLast' | 'emailNameCompany';
export type NewsletterFormIslandProps = BlocksNewsletterFormIslandProps;
export type ShopIslandProps = BlocksShopIslandProps;
export type ProductListIslandProps = BlocksProductListIslandProps;
export type ProductDetailIslandProps = BlocksProductDetailIslandProps;
export type CartIslandProps = BlocksCartIslandProps;
export type CheckoutIslandProps = BlocksCheckoutIslandProps;
export type IslandPropsMap = {
    accordion: AccordionIslandProps;
    headerSection: HeaderSectionIslandProps;
    carousel: CarouselIslandProps;
    form: FormIslandProps;
    'booking-form': BookingFormIslandProps;
    'event-registration': EventRegistrationIslandProps;
    'event-details': EventDetailsIslandProps;
    'location-map': LocationMapIslandProps;
    'course-registration': CourseRegistrationIslandProps;
    'event-listing': EventListingIslandProps;
    'event-calendar': EventCalendarIslandProps;
    'event-combined': EventCombinedIslandProps;
    'product-list': ProductListIslandProps;
    'product-detail': ProductDetailIslandProps;
    'cart': CartIslandProps;
    'checkout': CheckoutIslandProps;
    shop: ShopIslandProps;
    'newsletter-form': NewsletterFormIslandProps;
};
export type IslandEnhancer<K extends IslandKind = IslandKind> = {
    bivarianceHack(root: HTMLElement, props: IslandPropsMap[K]): void | (() => void) | Promise<void | (() => void)>;
}['bivarianceHack'];
export type IslandEnhancerModule<K extends IslandKind = IslandKind> = {
    enhance: IslandEnhancer<K>;
};
export type IslandEnhancerLoaders = {
    [K in IslandKind]: () => Promise<IslandEnhancerModule<K>>;
};
