import React__default from 'react';

type Service$2 = {
    id: string;
    siteId: string;
    title: string;
    description?: string;
    durationMinutes?: number;
};
type FormConfig = {
    id: string;
    siteId: string;
    userId: string;
    name: string;
    schemaJson?: any;
    settingsJson?: any;
    createdAt: string;
    updatedAt: string;
};
type BookingFormProps = {
    siteId: string;
    formId: string;
    className?: string;
    form?: FormConfig | null;
    services?: Service$2[];
};
/**
 * BookingFormClient Component
 *
 * Multi-step booking form that:
 * 1. Receives form configuration and services from server-side loaders
 * 2. Shows service/resource selection if needed
 * 3. Shows date/time slot selection (fetched dynamically based on user selection)
 * 4. Shows dynamic custom fields
 * 5. Submits booking
 */
declare const BookingFormClient: React__default.FC<BookingFormProps>;

/**
 * Hook to load booking form configuration and services
 */
interface Service$1 {
    id: string;
    title: string;
    description?: string;
    durationMinutes?: number;
}
interface BookingFormConfig {
    id: string;
    name: string;
    slug: string;
    settings?: {
        type: 'booking';
        serviceId?: string;
        serviceIds?: string[];
        resourceId?: string;
        requiresApproval?: boolean;
        successMessage?: string;
    };
    schema?: {
        version: string;
        fields: any[];
    };
}
interface UseBookingFormConfigResult {
    formConfig: BookingFormConfig | null;
    services: Service$1[];
    isLoading: boolean;
    error: string | null;
}
/**
 * Load booking form configuration and associated services
 *
 * Fetches the form definition and determines which services to load based on:
 * - Single service (serviceId)
 * - Multiple services (serviceIds array)
 * - All site services (no serviceId/serviceIds)
 *
 * Supports both UUID and slug for formId. When using a slug, siteId is required.
 */
declare function useBookingFormConfig(siteId: string, formId: string): UseBookingFormConfigResult;

/**
 * Booking types for SDK consumers
 *
 * These types are exported for SDK sites to use when building custom booking UIs.
 */
/**
 * A bookable service (e.g., "30-minute consultation", "Hair cut")
 * Note: Aligned with @riverbankcms/blocks Service type
 */
interface Service {
    id: string;
    title: string;
    description?: string;
    durationMinutes?: number;
}
/**
 * An available time slot for booking
 */
interface TimeSlot {
    startAt: string;
    endAt: string;
    resourceId: string;
}
/**
 * Settings for a booking form
 */
interface BookingFormSettings {
    type: 'booking';
    serviceId?: string;
    serviceIds?: string[];
    resourceId?: string;
    requiresApproval?: boolean;
    successMessage?: string;
}
/**
 * Schema for custom fields in a booking form
 */
interface BookingFormSchema {
    version: string;
    fields: BookingFormField[];
}
/**
 * A field in the booking form schema
 */
interface BookingFormField {
    id: string;
    type: 'text' | 'email' | 'phone' | 'select' | 'textarea' | 'checkbox';
    label: string;
    required?: boolean;
    placeholder?: string;
    options?: Array<{
        label: string;
        value: string;
    }>;
}
/**
 * Data collected during the booking flow
 */
interface BookingFormData {
    serviceId?: string;
    resourceId?: string;
    selectedDate?: string;
    selectedSlot?: string;
    [key: string]: unknown;
}
/**
 * Data submitted to create a booking
 */
interface BookingSubmissionData {
    formId: string;
    serviceId: string;
    resourceId?: string;
    startAt: string;
    endAt: string;
    customFields: Record<string, unknown>;
    timezone: string;
}
/**
 * Result of a booking submission
 */
interface BookingSubmissionResult {
    success: boolean;
    appointmentId?: string;
    error?: string;
}

export { BookingFormClient, type FormConfig as BookingFormConfig, type BookingFormData, type BookingFormField, type BookingFormSchema, type BookingFormSettings, type Service$2 as BookingService, type BookingSubmissionData, type BookingSubmissionResult, type Service, type TimeSlot, useBookingFormConfig };
