import * as _yamada_ui_motion from '@yamada-ui/motion';
import { MotionTransition, MotionProps } from '@yamada-ui/motion';
import { ThemeProps } from '@yamada-ui/core';
import { Merge } from '@yamada-ui/utils';
import { ReactElement } from 'react';

type FlipIdent = "from" | "to";
type FlipOrientation = "horizontal" | "vertical";
interface FlipOptions {
    /**
     * Passing React elements to "from" is required.
     */
    from: ReactElement;
    /**
     * Passing React elements to "to" is required.
     */
    to: ReactElement;
    /**
     * You can set the initial state.
     *
     * @default 'from'
     */
    defaultValue?: FlipIdent;
    /**
     *　The animation delay.
     *
     * @default 0
     */
    delay?: number;
    /**
     * If `true`, the component is disabled.
     *
     * @default false
     */
    disabled?: boolean;
    /**
     * The animation duration.
     *
     * @default 0.4
     */
    duration?: number;
    /**
     * If `true`, the component is disabled.
     *
     * @default false
     * @deprecated Use `disabled` instead.
     */
    isDisabled?: boolean;
    /**
     * If `true`, the component is readonly.
     *
     * @default false
     * @deprecated Use `readOnly` instead.
     */
    isReadOnly?: boolean;
    /**
     * The orientation of the flip effect. Determines whether the flip occurs horizontally or vertically.
     *
     * @default 'horizontal'
     */
    orientation?: FlipOrientation;
    /**
     * If `true`, the component is readonly.
     *
     * @default false
     */
    readOnly?: boolean;
    /**
     * The animation transition.
     */
    transition?: MotionTransition;
    /**
     * Use this when you want to control the animation from outside the component.
     */
    value?: FlipIdent;
    /**
     * This is a callback function that is called when the animation state changes.
     */
    onChange?: (value: FlipIdent) => void;
}
interface FlipProps extends Merge<MotionProps<"button">, FlipOptions>, ThemeProps<"Flip"> {
}
/**
 * `Flip` is an animation component that alternates between flipping two elements.
 *
 * @see Docs https://yamada-ui.com/components/transitions/flip
 */
declare const Flip: _yamada_ui_motion.MotionComponent<"button", FlipProps>;

export { Flip, type FlipIdent, type FlipOptions, type FlipOrientation, type FlipProps };
