import React from "react";
export type DrawerPosition = "left" | "right" | "top" | "bottom";
export type DrawerSizeToken = "sm" | "md" | "lg" | "full";
/** Preset size token or any arbitrary Tailwind width/height class, e.g. `"w-80"`, `"w-[50vw]"` */
export type DrawerSize = DrawerSizeToken | (string & {});
export interface DrawerTheme {
    overlay: string;
    container: string;
    inner: string;
    header: string;
    headerContent: string;
    title: string;
    subtitle: string;
    body: string;
    footer: string;
}
export interface DrawerThemeOverrides {
    overlay?: string;
    container?: string;
    inner?: string;
    header?: string;
    headerContent?: string;
    title?: string;
    subtitle?: string;
    body?: string;
    footer?: string;
}
export interface DrawerContextValue {
    isOpen: boolean;
    onClose: () => void;
    position: DrawerPosition;
    size: DrawerSize;
    closeOnOverlayClick: boolean;
    closeOnEsc: boolean;
    showCloseButton: boolean;
    theme: DrawerTheme;
    titleId: string;
    subtitleId: string;
}
export interface DrawerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onClose" | "onAnimationStart" | "onDragStart" | "title"> {
    isOpen: boolean;
    onClose: () => void;
    /** Title text displayed in the drawer header */
    title?: React.ReactNode;
    /** Subtitle text displayed below the title */
    subtitle?: React.ReactNode;
    /** Icon displayed to the left of the title/description */
    icon?: React.ReactNode;
    position?: DrawerPosition;
    size?: DrawerSize;
    closeOnOverlayClick?: boolean;
    closeOnEsc?: boolean;
    showCloseButton?: boolean;
    children: React.ReactNode;
    className?: string;
    theme?: DrawerThemeOverrides;
    /**
     * Scale factor for the background content when the drawer is open.
     * Creates an iOS-style modal presentation where the page scales down.
     * Requires a wrapper element with `data-flik-drawer-wrapper` attribute.
     * Set to `1` to disable scaling.
     * @default 0.94
     */
    scale?: number;
    /**
     * When enabled, pressing the browser back button closes the drawer
     * instead of navigating away. Useful for mobile-like UX.
     * @default false
     */
    closeOnBack?: boolean;
}
export interface DrawerHeaderProps extends React.HTMLAttributes<HTMLDivElement> {
    children: React.ReactNode;
    icon?: React.ReactNode;
    showCloseButton?: boolean;
    className?: string;
}
export interface DrawerTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {
    children: React.ReactNode;
    className?: string;
}
export interface DrawerSubtitleProps extends React.HTMLAttributes<HTMLParagraphElement> {
    children: React.ReactNode;
    className?: string;
}
export interface DrawerBodyProps extends React.HTMLAttributes<HTMLDivElement> {
    children: React.ReactNode;
    className?: string;
}
export interface DrawerFooterProps extends React.HTMLAttributes<HTMLDivElement> {
    children: React.ReactNode;
    className?: string;
}
