/**
 * Framer Motion Presets
 *
 * Standardized animation constants for consistent Framer Motion usage
 * across all apps. Provides typed durations, easings, hover effects,
 * distance presets, viewport settings, animation variants, stagger
 * containers, and helper functions.
 *
 * Usage:
 *   import { DURATIONS, EASINGS, VARIANTS } from '@digilogiclabs/saas-factory-ui'
 */
/**
 * Standard animation durations (in seconds).
 * Choose based on interaction type and user expectation.
 */
declare const DURATIONS: {
    /** 0.15s - Micro-interactions, immediate feedback */
    readonly instant: 0.15;
    /** 0.3s - Hover effects, tooltips, quick transitions */
    readonly fast: 0.3;
    /** 0.5s - Standard page elements, cards, modals */
    readonly normal: 0.5;
    /** 0.8s - Hero sections, emphasized content */
    readonly slow: 0.8;
    /** 1.2s - Page transitions, complex sequences */
    readonly slower: 1.2;
};
/**
 * Standard easing curves.
 * Choose based on animation direction and feel.
 */
declare const EASINGS: {
    /** Constant speed - use for continuous motion (spinners, scrolling) */
    readonly linear: readonly [0, 0, 1, 1];
    /** Fast start, slow end - use for entrances (fade in, slide in) */
    readonly easeOut: readonly [0, 0, 0.2, 1];
    /** Slow start, fast end - use for exits (fade out, slide out) */
    readonly easeIn: readonly [0.4, 0, 1, 1];
    /** Smooth both ends - use for movement (slide across, scale) */
    readonly easeInOut: readonly [0.4, 0, 0.2, 1];
    /** Natural bounce - use for interactive elements, emphasis */
    readonly spring: {
        readonly type: "spring";
        readonly stiffness: 100;
        readonly damping: 15;
    };
    /** Gentle bounce - use for cards, modals, subtle effects */
    readonly softSpring: {
        readonly type: "spring";
        readonly stiffness: 80;
        readonly damping: 15;
    };
    /** Bouncy - use for playful interactions, success states */
    readonly bouncySpring: {
        readonly type: "spring";
        readonly stiffness: 120;
        readonly damping: 12;
    };
};
/**
 * Standard hover effects.
 * Consistent lift and scale values for interactive elements.
 *
 * Usage:
 *   <motion.div whileHover={HOVER.lift} transition={HOVER_TRANSITION}>
 */
declare const HOVER: {
    /** Standard lift: -6px up (most common) */
    readonly lift: {
        readonly y: -6;
    };
    /** Lift with scale: -6px up + 5% scale (buttons, cards) */
    readonly liftWithScale: {
        readonly y: -6;
        readonly scale: 1.05;
    };
    /** Subtle lift: -4px up (small elements, icons) */
    readonly subtle: {
        readonly y: -4;
    };
    /** Dramatic lift: -8px up (hero elements, featured cards) */
    readonly dramatic: {
        readonly y: -8;
    };
};
/**
 * Standard transition for hover effects.
 * Use with HOVER variants for consistent feel.
 */
declare const HOVER_TRANSITION: {
    readonly duration: 0.3;
    readonly ease: readonly [0, 0, 0.2, 1];
};
/**
 * Standard movement distances (in pixels).
 * Use for slide animations (slideUp, slideDown, etc.).
 */
declare const DISTANCES: {
    /** 10px - Subtle movement, micro-interactions */
    readonly sm: 10;
    /** 20px - Noticeable movement, standard slides */
    readonly md: 20;
    /** 40px - Prominent movement, emphasized entrances */
    readonly lg: 40;
    /** 60px - Dramatic movement, hero sections */
    readonly xl: 60;
};
/**
 * Delays between staggered animations (in seconds).
 * Use with STAGGER_CONTAINERS for sequential reveals.
 */
declare const STAGGER: {
    /** 0.05s - Fast stagger (3-5 items) */
    readonly fast: 0.05;
    /** 0.1s - Normal stagger (6-10 items) */
    readonly normal: 0.1;
    /** 0.15s - Slow stagger (large sections) */
    readonly slow: 0.15;
};
/**
 * Viewport intersection settings for scroll-triggered animations.
 * Controls when animations trigger during scroll.
 */
declare const VIEWPORT: {
    /** Trigger once immediately when any part is visible */
    readonly once: {
        readonly once: true;
        readonly amount: 0;
    };
    /** Trigger once when 30% is visible - good for cards */
    readonly oncePartial: {
        readonly once: true;
        readonly amount: 0.3;
    };
    /** Trigger once when 50% is visible - good for large elements */
    readonly onceHalf: {
        readonly once: true;
        readonly amount: 0.5;
    };
    /** Trigger every time element enters viewport - use sparingly */
    readonly repeat: {
        readonly once: false;
        readonly amount: 0;
    };
};
/**
 * Reusable animation variants for Framer Motion.
 * Use these for consistent animations across all apps.
 *
 * Usage:
 *   <motion.div variants={VARIANTS.fadeIn} initial="initial" animate="animate" />
 */
declare const VARIANTS: {
    /** Simple fade in/out */
    readonly fadeIn: {
        readonly initial: {
            readonly opacity: 0;
        };
        readonly animate: {
            readonly opacity: 1;
        };
        readonly exit: {
            readonly opacity: 0;
        };
    };
    /** Fade in with slide up from bottom */
    readonly slideUp: {
        readonly initial: {
            readonly opacity: 0;
            readonly y: 40;
        };
        readonly animate: {
            readonly opacity: 1;
            readonly y: 0;
        };
        readonly exit: {
            readonly opacity: 0;
            readonly y: number;
        };
    };
    /** Fade in with slide down from top */
    readonly slideDown: {
        readonly initial: {
            readonly opacity: 0;
            readonly y: number;
        };
        readonly animate: {
            readonly opacity: 1;
            readonly y: 0;
        };
        readonly exit: {
            readonly opacity: 0;
            readonly y: 40;
        };
    };
    /** Fade in with slide from left */
    readonly slideLeft: {
        readonly initial: {
            readonly opacity: 0;
            readonly x: 40;
        };
        readonly animate: {
            readonly opacity: 1;
            readonly x: 0;
        };
        readonly exit: {
            readonly opacity: 0;
            readonly x: number;
        };
    };
    /** Fade in with slide from right */
    readonly slideRight: {
        readonly initial: {
            readonly opacity: 0;
            readonly x: number;
        };
        readonly animate: {
            readonly opacity: 1;
            readonly x: 0;
        };
        readonly exit: {
            readonly opacity: 0;
            readonly x: 40;
        };
    };
    /** Subtle scale effect for cards/modals */
    readonly scale: {
        readonly initial: {
            readonly opacity: 0;
            readonly scale: 0.95;
        };
        readonly animate: {
            readonly opacity: 1;
            readonly scale: 1;
        };
        readonly exit: {
            readonly opacity: 0;
            readonly scale: 0.95;
        };
    };
    /** Dramatic scale up effect */
    readonly scaleUp: {
        readonly initial: {
            readonly opacity: 0;
            readonly scale: 0.8;
        };
        readonly animate: {
            readonly opacity: 1;
            readonly scale: 1;
        };
        readonly exit: {
            readonly opacity: 0;
            readonly scale: 1.1;
        };
    };
    /** Rotate in effect (for icons, decorative elements) */
    readonly rotate: {
        readonly initial: {
            readonly opacity: 0;
            readonly rotate: -90;
        };
        readonly animate: {
            readonly opacity: 1;
            readonly rotate: 0;
        };
        readonly exit: {
            readonly opacity: 0;
            readonly rotate: 90;
        };
    };
    /** Slide up with bounce (for emphasized content) */
    readonly slideUpBounce: {
        readonly initial: {
            readonly opacity: 0;
            readonly y: 40;
        };
        readonly animate: {
            readonly opacity: 1;
            readonly y: 0;
        };
        readonly exit: {
            readonly opacity: 0;
            readonly y: number;
        };
    };
    /** Card reveal with subtle scale and slide */
    readonly cardReveal: {
        readonly initial: {
            readonly opacity: 0;
            readonly y: 40;
            readonly scale: 0.95;
        };
        readonly animate: {
            readonly opacity: 1;
            readonly y: 0;
            readonly scale: 1;
        };
        readonly exit: {
            readonly opacity: 0;
            readonly y: number;
            readonly scale: 0.95;
        };
    };
};
/**
 * Container variants for staggered children animations.
 * Use with motion components to stagger child elements.
 */
declare const STAGGER_CONTAINERS: {
    /** Fast stagger for small lists */
    readonly fast: {
        readonly hidden: {
            readonly opacity: 0;
        };
        readonly show: {
            readonly opacity: 1;
            readonly transition: {
                readonly staggerChildren: 0.05;
            };
        };
    };
    /** Normal stagger for medium lists */
    readonly normal: {
        readonly hidden: {
            readonly opacity: 0;
        };
        readonly show: {
            readonly opacity: 1;
            readonly transition: {
                readonly staggerChildren: 0.1;
            };
        };
    };
    /** Slow stagger for large sections */
    readonly slow: {
        readonly hidden: {
            readonly opacity: 0;
        };
        readonly show: {
            readonly opacity: 1;
            readonly transition: {
                readonly staggerChildren: 0.15;
            };
        };
    };
};
/**
 * Child variants for staggered animations.
 * Use as variants on children inside a STAGGER_CONTAINERS parent.
 */
declare const STAGGER_ITEMS: {
    /** Fade up for staggered items */
    readonly fadeUp: {
        readonly hidden: {
            readonly opacity: 0;
            readonly y: 20;
        };
        readonly show: {
            readonly opacity: 1;
            readonly y: 0;
            readonly transition: {
                readonly type: "spring";
                readonly stiffness: 80;
                readonly damping: 15;
            };
        };
    };
    /** Fade in for staggered items */
    readonly fade: {
        readonly hidden: {
            readonly opacity: 0;
        };
        readonly show: {
            readonly opacity: 1;
            readonly transition: {
                readonly duration: 0.5;
            };
        };
    };
    /** Scale in for staggered items */
    readonly scale: {
        readonly hidden: {
            readonly opacity: 0;
            readonly scale: 0.95;
        };
        readonly show: {
            readonly opacity: 1;
            readonly scale: 1;
            readonly transition: {
                readonly type: "spring";
                readonly stiffness: 80;
                readonly damping: 15;
            };
        };
    };
};
/**
 * Create a custom transition with standard settings.
 * @param duration - Duration key from DURATIONS
 * @param easing - Easing key from EASINGS
 * @param delay - Optional delay in seconds
 */
declare function createTransition(duration?: keyof typeof DURATIONS, easing?: keyof typeof EASINGS, delay?: number): {
    delay: number;
    type: "spring";
    stiffness: 100;
    damping: 15;
    duration?: undefined;
    ease?: undefined;
} | {
    delay: number;
    type: "spring";
    stiffness: 80;
    damping: 15;
    duration?: undefined;
    ease?: undefined;
} | {
    delay: number;
    type: "spring";
    stiffness: 120;
    damping: 12;
    duration?: undefined;
    ease?: undefined;
} | {
    duration: 0.15 | 0.3 | 0.5 | 0.8 | 1.2;
    ease: readonly [0, 0, 1, 1] | readonly [0, 0, 0.2, 1] | readonly [0.4, 0, 1, 1] | readonly [0.4, 0, 0.2, 1];
    delay: number;
};
/**
 * Create a custom slide variant.
 * @param direction - Direction to slide from
 * @param distance - Distance key from DISTANCES
 */
declare function createSlideVariant(direction: "up" | "down" | "left" | "right", distance?: keyof typeof DISTANCES): {
    initial: {
        x?: number | undefined;
        y?: number | undefined;
        opacity: number;
    };
    animate: {
        opacity: number;
        x: number;
        y: number;
    };
    exit: {
        x?: number | undefined;
        y?: number | undefined;
        opacity: number;
    };
};
/**
 * Merge multiple variants into one.
 * Useful for combining effects (e.g., fade + slide).
 */
declare function mergeVariants(...variants: Array<{
    initial?: Record<string, unknown>;
    animate?: Record<string, unknown>;
    exit?: Record<string, unknown>;
}>): {
    initial?: Record<string, unknown>;
    animate?: Record<string, unknown>;
    exit?: Record<string, unknown>;
};
type Duration = keyof typeof DURATIONS;
type Easing = keyof typeof EASINGS;
type Distance = keyof typeof DISTANCES;
type StaggerSpeed = keyof typeof STAGGER;
type ViewportSetting = keyof typeof VIEWPORT;
type MotionVariant = keyof typeof VARIANTS;

export { DISTANCES, DURATIONS, type Distance, type Duration, EASINGS, type Easing, HOVER, HOVER_TRANSITION, type MotionVariant, STAGGER, STAGGER_CONTAINERS, STAGGER_ITEMS, type StaggerSpeed, VARIANTS, VIEWPORT, type ViewportSetting, createSlideVariant, createTransition, mergeVariants };
