import '../../assert/js/assert.js';
import '../../globals.js';
/**
 * An animation that will animate one object (usually a Node) out, and another in.
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import Bounds2 from '../../dot/js/Bounds2.js';
import { Shape } from '../../kite/js/imports.js';
import StrictOmit from '../../phet-core/js/types/StrictOmit.js';
import { Node } from '../../scenery/js/imports.js';
import Animation, { AnimationOptions } from './Animation.js';
import { AnimationTargetOptions } from './AnimationTarget.js';
type SelfOptions<TargetTypes> = {
    fromTargets: {
        [K in keyof TargetTypes]: AnimationTargetOptions<TargetTypes[K], Node>;
    };
    toTargets: {
        [K in keyof TargetTypes]: AnimationTargetOptions<TargetTypes[K], Node>;
    };
    resetNode: (node: Node) => void;
    targetOptions?: AnimationTargetOptions<unknown, Node>;
};
export type PartialTransitionOptions<T> = StrictOmit<SelfOptions<[T]>, 'fromTargets' | 'toTargets' | 'resetNode'> & AnimationOptions<unknown, unknown, [T], [Node]>;
export type SlideTransitionOptions = PartialTransitionOptions<number>;
export type WipeTransitionOptions = PartialTransitionOptions<Shape>;
export type DissolveTransitionSelfOptions = {
    gamma?: number;
};
export type DissolveTransitionOptions = PartialTransitionOptions<number> & DissolveTransitionSelfOptions;
export type TransitionOptions<SelfType = unknown, SelfObjectType = unknown, TargetTypes = unknown[], TargetObjectTypes extends {
    [K in keyof TargetTypes]: Node;
} = {
    [K in keyof TargetTypes]: Node;
}> = SelfOptions<TargetTypes> & AnimationOptions<SelfType, SelfObjectType, TargetTypes, TargetObjectTypes>;
declare class Transition<SelfType = unknown, SelfObjectType = unknown, TargetTypes = unknown[], TargetObjectTypes extends {
    [K in keyof TargetTypes]: Node;
} = {
    [K in keyof TargetTypes]: Node;
}> extends Animation<SelfType, SelfObjectType, TargetTypes, TargetObjectTypes> {
    /**
     * NOTE: The nodes' transform/pickability/visibility/opacity/clipArea/etc. can be modified, and will be reset to
     * the default value when the transition finishes.
     */
    constructor(fromNode: Node | null, toNode: Node | null, config: TransitionOptions);
    /**
     * Creates an animation that slides the `fromNode` out to the left (and the `toNode` in from the right).
     *
     * @param bounds
     * @param fromNode
     * @param toNode
     * @param [options] - Usually specify duration, easing, or other Animation options.
     */
    static slideLeft(bounds: Bounds2, fromNode: Node | null, toNode: Node | null, options?: SlideTransitionOptions): Transition;
    /**
     * Creates an animation that slides the `fromNode` out to the right (and the `toNode` in from the left).
     *
     * @param bounds
     * @param fromNode
     * @param toNode
     * @param [options] - Usually specify duration, easing, or other Animation options.
     */
    static slideRight(bounds: Bounds2, fromNode: Node | null, toNode: Node | null, options?: SlideTransitionOptions): Transition;
    /**
     * Creates an animation that slides the `fromNode` out to the top (and the `toNode` in from the bottom).
     *
     * @param bounds
     * @param fromNode
     * @param toNode
     * @param [options] - Usually specify duration, easing, or other Animation options.
     */
    static slideUp(bounds: Bounds2, fromNode: Node | null, toNode: Node | null, options?: SlideTransitionOptions): Transition;
    /**
     * Creates an animation that slides the `fromNode` out to the bottom (and the `toNode` in from the top).
     *
     * @param bounds
     * @param fromNode
     * @param toNode
     * @param [options] - Usually specify duration, easing, or other Animation options.
     */
    static slideDown(bounds: Bounds2, fromNode: Node | null, toNode: Node | null, options?: SlideTransitionOptions): Transition;
    /**
     * Creates a transition that wipes across the screen, moving to the left.
     *
     * @param bounds
     * @param fromNode
     * @param toNode
     * @param [options] - Usually specify duration, easing, or other Animation options.
     */
    static wipeLeft(bounds: Bounds2, fromNode: Node | null, toNode: Node | null, options?: WipeTransitionOptions): Transition;
    /**
     * Creates a transition that wipes across the screen, moving to the right.
     *
     * @param bounds
     * @param fromNode
     * @param toNode
     * @param [options] - Usually specify duration, easing, or other Animation options.
     */
    static wipeRight(bounds: Bounds2, fromNode: Node | null, toNode: Node | null, options?: WipeTransitionOptions): Transition;
    /**
     * Creates a transition that wipes across the screen, moving up.
     *
     * @param bounds
     * @param fromNode
     * @param toNode
     * @param [options] - Usually specify duration, easing, or other Animation options.
     */
    static wipeUp(bounds: Bounds2, fromNode: Node | null, toNode: Node | null, options?: WipeTransitionOptions): Transition;
    /**
     * Creates a transition that wipes across the screen, moving down.
     *
     * @param bounds
     * @param fromNode
     * @param toNode
     * @param [options] - Usually specify duration, easing, or other Animation options.
     */
    static wipeDown(bounds: Bounds2, fromNode: Node | null, toNode: Node | null, options?: WipeTransitionOptions): Transition;
    /**
     * Creates a transition that fades from `fromNode` to `toNode` by varying the opacity of both.
     *
     * @param fromNode
     * @param toNode
     * @param [providedOptions] - Usually specify duration, easing, or other Animation options.
     */
    static dissolve(fromNode: Node | null, toNode: Node | null, providedOptions?: DissolveTransitionOptions): Transition;
    /**
     * Creates a sliding transition within the bounds.
     *
     * @param fromNode
     * @param toNode
     * @param attribute - The positional attribute to animate
     * @param size - The size of the animation (for the positional attribute)
     * @param reversed - Whether to reverse the animation. By default it goes right/down.
     * @param [options]
     */
    private static createSlide;
    /**
     * Creates a wiping transition within the bounds.
     *
     * @param bounds
     * @param fromNode
     * @param toNode
     * @param minAttribute - One side of the bounds on the minimal side (where the animation starts)
     * @param maxAttribute - The other side of the bounds (where animation ends)
     * @param [options]
     */
    private static createWipe;
}
export default Transition;
//# sourceMappingURL=Transition.d.ts.map