import type { PropType, SlotsType } from 'vue';
import { Form as InertiaForm } from '@inertiajs/vue3';
import type { RouteParams, RouteParamsFormats, Routes } from '../common.ts';
export type InertiaFormSlots = InstanceType<typeof InertiaForm>['$slots'];
export type InertiaFormDefaultSlot = InertiaFormSlots['default'];
export type InertiaFormSlotProps = InertiaFormDefaultSlot extends (...args: any[]) => any ? Parameters<InertiaFormDefaultSlot>[0] : never;
/**
 * Parameters required for route navigation with proper type safety.
 */
export type FormParams<Route extends keyof Routes> = RouteParams<Route>;
/**
 * Type-safe Form component for Inertia.js form submissions.
 *
 * Supports both route-based form submission with automatic URL resolution
 * and direct action for maximum flexibility.
 *
 * @example
 * ```vue
 * <!-- Route-based form -->
 * <Form route="users.store" v-slot="{ processing }">
 *   <input type="text" name="name" />
 *   <button :disabled="processing">Create</button>
 * </Form>
 *
 * <!-- Direct action form -->
 * <Form :action="{ url: '/users', method: 'post' }" v-slot="{ processing }">
 *   <input type="text" name="name" />
 *   <button :disabled="processing">Create</button>
 * </Form>
 * ```
 */
export declare const Form: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
    route: {
        type: PropType<keyof Routes>;
        required: false;
    };
    params: {
        type: PropType<RouteParamsFormats<keyof Routes>>;
        required: false;
    };
    action: {
        type: PropType<{
            url: string;
            method: string;
        }>;
        required: false;
    };
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
    [key: string]: any;
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
    route: {
        type: PropType<keyof Routes>;
        required: false;
    };
    params: {
        type: PropType<RouteParamsFormats<keyof Routes>>;
        required: false;
    };
    action: {
        type: PropType<{
            url: string;
            method: string;
        }>;
        required: false;
    };
}>> & Readonly<{}>, {}, SlotsType<{
    default: InertiaFormSlotProps;
}>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
