DefinitelyTyped/types/react-transition-group/Transition.d.ts
2018-12-19 12:27:01 +03:00

86 lines
2.5 KiB
TypeScript

import { Component } from "react";
export type EndHandler = (node: HTMLElement, done: () => void) => void;
export type EnterHandler = (node: HTMLElement, isAppearing: boolean) => void;
export type ExitHandler = (node: HTMLElement) => void;
export const UNMOUNTED = 'unmounted';
export const EXITED = 'exited';
export const ENTERING = 'entering';
export const ENTERED = 'entered';
export const EXITING = 'exiting';
export interface TransitionActions {
appear?: boolean;
enter?: boolean;
exit?: boolean;
}
export type TransitionStatus =
typeof ENTERING |
typeof ENTERED |
typeof EXITING |
typeof EXITED |
typeof UNMOUNTED;
export type TransitionChildren = React.ReactNode | ((status: TransitionStatus) => React.ReactNode);
export interface TransitionProps extends TransitionActions {
in?: boolean;
mountOnEnter?: boolean;
unmountOnExit?: boolean;
timeout: number | { enter?: number, exit?: number };
addEndListener?: EndHandler;
onEnter?: EnterHandler;
onEntering?: EnterHandler;
onEntered?: EnterHandler;
onExit?: ExitHandler;
onExiting?: ExitHandler;
onExited?: ExitHandler;
[prop: string]: any;
children?: TransitionChildren;
}
/**
* The Transition component lets you describe a transition from one component
* state to another _over time_ with a simple declarative API. Most commonly
* It's used to animate the mounting and unmounting of Component, but can also
* be used to describe in-place transition states as well.
*
* By default the `Transition` component does not alter the behavior of the
* component it renders, it only tracks "enter" and "exit" states for the components.
* It's up to you to give meaning and effect to those states. For example we can
* add styles to a component when it enters or exits:
*
* ```jsx
* import Transition from 'react-transition-group/Transition';
*
* const duration = 300;
*
* const defaultStyle = {
* transition: `opacity ${duration}ms ease-in-out`,
* opacity: 0,
* }
*
* const transitionStyles = {
* entering: { opacity: 1 },
* entered: { opacity: 1 },
* };
*
* const Fade = ({ in: inProp }) => (
* <Transition in={inProp} timeout={duration}>
* {(state) => (
* <div style={{
* ...defaultStyle,
* ...transitionStyles[state]
* }}>
* I'm A fade Transition!
* </div>
* )}
* </Transition>
* );
* ```
*
*/
declare class Transition extends Component<TransitionProps> {}
export default Transition;