import { type HTMLMotionProps, type TargetAndTransition, type Transition } from 'motion/react';
import { type ComponentPropsWithoutRef, type CSSProperties, type KeyboardEventHandler, type MouseEventHandler, type ReactNode, type Ref } from 'react';
import { type CssLength } from '../../../utils/css';
export type ExpandableDirection = 'vertical' | 'horizontal' | 'both';
export type ExpandableBehavior = 'replace' | 'push';
export type ExpandableEase = 'easeInOut' | 'easeIn' | 'easeOut' | 'linear' | [number, number, number, number];
export type ExpandableSize = {
width?: CssLength;
height?: CssLength;
};
export type ExpandableRenderProps = {
isExpanded: boolean;
setExpanded: (expanded: boolean) => void;
toggleExpand: VoidFunction;
};
type ExpandableContextValue = ExpandableRenderProps & {
expandDirection: ExpandableDirection;
expandBehavior: ExpandableBehavior;
transitionDuration: number;
easeType: ExpandableEase;
initialDelay: number;
motionTransition: Transition;
};
declare const ExpandableContext: import("react").Context;
declare const contentPresets: {
fade: {
initial: {
opacity: number;
};
animate: {
opacity: number;
};
exit: {
opacity: number;
};
};
'slide-up': {
initial: {
opacity: number;
y: number;
};
animate: {
opacity: number;
y: number;
};
exit: {
opacity: number;
y: number;
};
};
'slide-down': {
initial: {
opacity: number;
y: number;
};
animate: {
opacity: number;
y: number;
};
exit: {
opacity: number;
y: number;
};
};
'slide-left': {
initial: {
opacity: number;
x: number;
};
animate: {
opacity: number;
x: number;
};
exit: {
opacity: number;
x: number;
};
};
'slide-right': {
initial: {
opacity: number;
x: number;
};
animate: {
opacity: number;
x: number;
};
exit: {
opacity: number;
x: number;
};
};
scale: {
initial: {
opacity: number;
scale: number;
};
animate: {
opacity: number;
scale: number;
};
exit: {
opacity: number;
scale: number;
};
};
rotate: {
initial: {
opacity: number;
rotate: number;
};
animate: {
opacity: number;
rotate: number;
};
exit: {
opacity: number;
rotate: number;
};
};
'blur-sm': {
initial: {
opacity: number;
filter: string;
};
animate: {
opacity: number;
filter: string;
};
exit: {
opacity: number;
filter: string;
};
};
'blur-md': {
initial: {
opacity: number;
filter: string;
};
animate: {
opacity: number;
filter: string;
};
exit: {
opacity: number;
filter: string;
};
};
'blur-lg': {
initial: {
opacity: number;
filter: string;
};
animate: {
opacity: number;
filter: string;
};
exit: {
opacity: number;
filter: string;
};
};
};
export declare const useExpandable: () => ExpandableContextValue;
export type ExpandableProps = Omit, 'children'> & {
children: ReactNode | ((props: ExpandableRenderProps) => ReactNode);
defaultExpanded?: boolean;
expanded?: boolean;
onExpandedChange?: (expanded: boolean) => void;
onToggle?: (expanded: boolean) => void;
transitionDuration?: number;
easeType?: ExpandableEase;
expandDirection?: ExpandableDirection;
expandBehavior?: ExpandableBehavior;
initialDelay?: number;
onExpandStart?: VoidFunction;
onExpandEnd?: VoidFunction;
onCollapseStart?: VoidFunction;
onCollapseEnd?: VoidFunction;
};
export declare const Expandable: import("react").ForwardRefExoticComponent, HTMLDivElement>, "ref">, "children"> & {
children: ReactNode | ((props: ExpandableRenderProps) => ReactNode);
defaultExpanded?: boolean;
expanded?: boolean;
onExpandedChange?: (expanded: boolean) => void;
onToggle?: (expanded: boolean) => void;
transitionDuration?: number;
easeType?: ExpandableEase;
expandDirection?: ExpandableDirection;
expandBehavior?: ExpandableBehavior;
initialDelay?: number;
onExpandStart?: VoidFunction;
onExpandEnd?: VoidFunction;
onCollapseStart?: VoidFunction;
onCollapseEnd?: VoidFunction;
} & import("react").RefAttributes>;
export type ExpandableTriggerProps = Omit, 'onClick' | 'onKeyDown'> & {
asChild?: boolean;
onClick?: MouseEventHandler;
onKeyDown?: KeyboardEventHandler;
ref?: Ref;
};
export declare const ExpandableTrigger: import("react").ForwardRefExoticComponent & import("react").RefAttributes>;
export type ExpandableCardProps = Omit, 'children' | 'className' | 'style'> & {
children: ReactNode;
className?: string;
collapsedSize?: ExpandableSize;
expandedSize?: ExpandableSize;
hoverToExpand?: boolean;
expandDelay?: number;
collapseDelay?: number;
style?: CSSProperties;
};
export declare const ExpandableCard: import("react").ForwardRefExoticComponent & import("react").RefAttributes>;
export type ExpandableContentPreset = keyof typeof contentPresets;
export type ExpandableContentAnimation = {
initial?: TargetAndTransition;
animate?: TargetAndTransition;
exit?: TargetAndTransition;
transition?: Transition;
};
export type ExpandableContentProps = Omit, 'children' | 'className' | 'style'> & {
children: ReactNode;
className?: string;
collapsedHeight?: CssLength;
preset?: ExpandableContentPreset;
animateIn?: ExpandableContentAnimation;
animateOut?: ExpandableContentAnimation;
stagger?: boolean;
staggerChildren?: number;
keepMounted?: boolean;
style?: CSSProperties;
};
export declare const ExpandableContent: import("react").ForwardRefExoticComponent & import("react").RefAttributes>;
export type ExpandableCardHeaderProps = ComponentPropsWithoutRef<'div'> & {
ref?: Ref;
};
export declare const ExpandableCardHeader: import("react").ForwardRefExoticComponent & import("react").RefAttributes>;
export type ExpandableCardContentProps = ComponentPropsWithoutRef<'div'> & {
ref?: Ref;
};
export declare const ExpandableCardContent: import("react").ForwardRefExoticComponent & import("react").RefAttributes>;
export type ExpandableCardFooterProps = ComponentPropsWithoutRef<'div'> & {
ref?: Ref;
};
export declare const ExpandableCardFooter: import("react").ForwardRefExoticComponent & import("react").RefAttributes>;
export { ExpandableContext };