import React from "react";
/**
 * Accordion component props
 */
export interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {
    /**
     * Accordion type - single allows only one item open, multiple allows many
     */
    type?: "single" | "multiple";
    /**
     * Visual variant - separated (card-like with spacing) or stacked (unified borders)
     */
    variant?: "separated" | "stacked";
    /**
     * Whether accordion can be collapsed after being opened (for type="single")
     */
    collapsible?: boolean;
    /**
     * Default value(s) for the opened item(s)
     */
    defaultValue?: string | string[];
    /**
     * Controlled value(s) for the opened item(s)
     */
    value?: string | string[];
    /**
     * Callback when open state changes
     */
    onValueChange?: (value: string | string[]) => void;
    /**
     * Theme overrides
     */
    theme?: AccordionThemeOverrides;
    children: React.ReactNode;
    /**
     * Force dark mode styling for the component. Use when placing the component
     * on a dark background while the page is in light mode. This applies the
     * 'dark' class to the container, making text, borders, and other elements
     * use light colors for visibility.
     * @default false
     */
    darkMode?: boolean;
}
/**
 * Accordion context value
 */
export interface AccordionContextValue {
    type: "single" | "multiple";
    variant: "separated" | "stacked";
    collapsible: boolean;
    value: string | string[] | undefined;
    onValueChange: (value: string | string[]) => void;
    theme: AccordionThemeOverrides & {
        baseStyle: string;
        triggerStyle: string;
        bodyStyle: string;
        bodyInnerStyle: string;
    };
}
/**
 * AccordionItem component props
 */
export interface AccordionItemProps extends React.HTMLAttributes<HTMLDivElement> {
    /**
     * Unique value for the accordion item
     */
    value: string;
    /**
     * Optional className for styling
     */
    className?: string;
    /**
     * Item content
     */
    children: React.ReactNode;
}
/**
 * AccordionItem context value - to be used by Trigger and Content
 */
export interface AccordionItemContextValue {
    value: string;
    isOpen: boolean;
    toggle: () => void;
    triggerId: string;
    contentId: string;
}
/**
 * Trigger props
 */
export interface AccordionTriggerProps extends React.HTMLAttributes<HTMLButtonElement> {
    children: React.ReactNode;
    className?: string;
    /**
     * Override the default indicator (chevron) icon.
     * Set to `null` to hide it entirely.
     */
    chevron?: React.ReactNode | null;
    /**
     * Rotation degrees applied to the chevron icon when open.
     * Default: 45 (for PlusIcon). Use 180 for a chevron-down, 90 for a right-arrow, 0 for none.
     */
    chevronRotation?: number;
    /**
     * Position of the chevron icon.
     * - `"right"` (default): pushed to the far right after children.
     * - `"left"`: appears before children.
     * No effect when `chevron` is explicitly provided.
     * @default "right"
     */
    chevronPosition?: "left" | "right";
    /**
     * @deprecated Use `chevronRotation` instead.
     */
    iconRotation?: number;
}
/**
 * Body props
 */
export interface AccordionBodyProps extends React.HTMLAttributes<HTMLDivElement> {
    children: React.ReactNode;
    className?: string;
}
/**
 * Theme overrides for Accordion
 */
export interface AccordionThemeOverrides {
    baseStyle?: string;
    baseStyleStacked?: string;
    triggerStyle?: string;
    bodyStyle?: string;
    bodyInnerStyle?: string;
    itemStyle?: string;
    itemStyleStacked?: string;
}
