import type { PresenceAnimation } from './animation-interface.js';
type PresenceDirection = 'in' | 'out' | 'both';
type PlayDirection = 'in' | 'out';
interface PresenceTransitionConfig {
    delay?: number;
    duration?: number;
    tick?: (t: number, u: number) => void;
}
/**
 * Svelte supports deferred transitions (the mechanism behind `crossfade`): returning a
 * function instead of a config makes Svelte call it in a microtask with the *actual* play
 * direction. This is what lets a single `transition:presence` behave like AnimatePresence —
 * we build the enter or exit animation only once we know which one is playing, and can
 * report the real (e.g. spring-resolved) exit duration to Svelte.
 */
type PresenceResult = PresenceTransitionConfig | ((opts?: {
    direction: PlayDirection;
}) => PresenceTransitionConfig);
/**
 * Cancels any in-flight presence animation on the element and restores any inline
 * styles that were mutated (e.g. by popLayout). Called when a new presence/mercury
 * lifecycle starts on the same node so a reversed exit doesn't leave it stranded.
 */
export declare const clearPresence: (element: HTMLElement) => void;
/**
 * Svelte-native AnimatePresence.
 *
 * Used as a transition directive, so Svelte's semantics map directly onto motion/react's:
 *
 * - `transition:presence={{ initial, exit, mode, transition }}` — like a child of
 *   `<AnimatePresence>`: on enter the element animates from `initial` to its settled
 *   CSS styles, on removal it animates to `exit`.
 * - Local transitions don't run when an ancestor block mounts, which is exactly
 *   `<AnimatePresence initial={false}>`. Use `transition:presence|global` to opt in.
 * - `mode: 'sync' | 'wait' | 'popLayout'` matches AnimatePresence's `mode`.
 * - Flat params (`out:presence={{ opacity: 0 }}`) describe the hidden state for both
 *   directions: enters animate from it, exits animate to it.
 *
 * In `initial`, array values are treated as full keyframes (`opacity: [0, 0.5, 1]`).
 */
export declare const presence: (element: HTMLElement, params: PresenceAnimation, options: {
    direction: PresenceDirection;
}) => PresenceResult;
export {};
