import * as React from 'react';
import { ValuesOf } from '../utils/typeUtils';
import { buttonTypes, contentPaddings, horizontalPaddings, SHOW_LABEL, SIZES, skins, TITLE_SIZES, transitionSpeeds } from './constants';
type ButtonTypes = ValuesOf<typeof buttonTypes>;
type ShowLabels = ValuesOf<typeof SHOW_LABEL>;
type Skins = ValuesOf<typeof skins>;
type Sizes = ValuesOf<typeof SIZES>;
type HorizontalPaddings = ValuesOf<typeof horizontalPaddings>;
type TransitionSpeeds = ValuesOf<typeof transitionSpeeds>;
type ContentPadding = ValuesOf<typeof contentPaddings>;
type TitleSizes = ValuesOf<typeof TITLE_SIZES>;
export interface AccordionItemType extends AccordionItemProps {
    render?: (uncontrolledProps: AccordionItemCommonProps, internalProps: AccordionItemInternalProps) => React.ReactNode;
}
export interface AccordionState {
    openIndexes: number[];
}
export interface AccordionProps {
    /** Applied as data-hook HTML attribute that can be used to create driver in testing. */
    dataHook?: string;
    /** Hide Accordion shadow effect
     * @default false
     */
    hideShadow?: boolean;
    /** Targets Accordion Item content padding. When not provided, uses default paddings. */
    contentPadding?: ContentPadding;
    /** Change horizontal padding   */
    horizontalPadding?: HorizontalPaddings;
    /** Provide items
     * - Available items props:
     * ```javascript
     * {
     * render?: func;
       title?: React.ReactNode;
       subtitle?: React.ReactNode;
       icon?: React.ReactNode;
       children?: React.ReactNode;
       expandLabel?: React.ReactNode;
       collapseLabel?: React.ReactNode;
       showLabel?: 'hover' | 'always';
       buttonType?: 'textButton' | 'button' | 'node';
       disabled?: boolean;
       onToggle?: React.MouseEventHandler<HTMLElement>;
       onMouseEnter?: React.MouseEventHandler<HTMLElement>;
       onMouseLeave?: React.MouseEventHandler<HTMLElement>;
       open?: boolean;
       initiallyOpen?: boolean;
     * }
        ```
     */
    items?: AccordionItemType[];
    /** allow multiple rows to be opened simultaneously
     * @default false
     */
    multiple?: boolean;
    /** Callback fired immediately after the animation is started */
    onAnimationEnter?: () => void;
    /** Callback fired immediately after the animation is ended */
    onAnimationExit?: () => void;
    /** Change items size
     * @default 'small'
     */
    size?: Sizes;
    /** Accordion skin color   */
    skin?: Skins;
    /** Change expand and collapse animation speed
     * @default 'medium'
     */
    transitionSpeed?: TransitionSpeeds;
    /** Accordion title and subtitle size
     * @default 'medium'
     */
    titleSize?: TitleSizes;
}
export interface AccordionItemCommonProps {
    key?: string | number;
    open?: boolean;
    initiallyOpen?: boolean;
    disabled?: boolean;
    title?: React.ReactNode;
    subtitle?: React.ReactNode;
    /**
     * @deprecated
     * use 'prefix' instead
     */
    icon?: React.ReactNode;
    /** Node rendered at the start of the item */
    prefix?: React.ReactNode;
    /** Node rendered at the end of the item */
    suffix?: React.ReactNode;
    children?: React.ReactNode;
    expandLabel?: React.ReactNode;
    collapseLabel?: React.ReactNode;
    /** controls where the caret is positioned */
    toggleIconPlacement?: 'start' | 'end';
    /** Specifies a CSS class name to be appended to the component’s root element.
     * @internal
     */
    className?: string;
    buttonType?: ButtonTypes;
    showLabel?: ShowLabels;
    onToggle?: React.MouseEventHandler<HTMLElement>;
    onMouseEnter?: React.MouseEventHandler<HTMLElement>;
    onMouseLeave?: React.MouseEventHandler<HTMLElement>;
}
export interface AccordionItemInternalProps {
    key?: string | number;
    last?: boolean;
    /** @default false */
    hideShadow?: boolean;
    className?: string;
    skin?: Skins;
    /** @default 'small' */
    size?: Sizes;
    onAnimationEnter?: () => void;
    onAnimationExit?: () => void;
    /** @default 'medium' */
    transitionSpeed?: TransitionSpeeds;
    horizontalPadding?: HorizontalPaddings;
    contentPadding?: ContentPadding;
    /** @default 'medium' */
    titleSize?: TitleSizes;
    children?: React.ReactNode;
}
export type AccordionItemProps = AccordionItemCommonProps & AccordionItemInternalProps;
export interface AccordionItemCaretProps extends Pick<AccordionItemCommonProps, 'buttonType' | 'expandLabel' | 'collapseLabel' | 'showLabel' | 'open' | 'disabled'>, Pick<AccordionItemInternalProps, 'skin'> {
    hover: boolean;
}
export type AccordionSectionItemProps = Pick<AccordionItemCommonProps, 'key' | 'title'>;
export {};
//# sourceMappingURL=Accordion.types.d.ts.map