@enact/ui
Version:
A collection of simplified unstyled cross-platform UI components for Enact
192 lines (182 loc) • 5.3 kB
TypeScript
// Type definitions for ui/ViewManager
import { ForwardRefProps as ui_ForwardRef_ForwardRefProps } from "@enact/ui/ForwardRef";
import * as React from "react";
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
type Merge<M, N> = Omit<M, Extract<keyof M, keyof N>> & N;
export interface ViewManagerBaseProps {
/**
* Arranger to control the animation
*/
arranger?: Arranger;
/**
* An object containing properties to be passed to each child.
*/
childProps?: object;
/**
* Views to be managed.
*
* May be any renderable component including custom React components or primitive DOM nodes.
*/
children?: React.ReactNode;
/**
* Type of component wrapping the children. May be a DOM node or a custom React component.
*/
component?: string | React.ComponentType;
/**
* Called with a reference to the root component.
*
* When using , the `ref` prop is forwarded to this
component as `componentRef` .
*/
componentRef?: object | Function;
/**
* Time in milliseconds to complete a transition
*/
duration?: number;
/**
* Index of last visible view.
*
* Defaults to the current value of `index` .
*/
end?: number;
/**
* Time, in milliseconds, to wait after a view has entered to inform it by pass the
`enteringProp` as false.
*/
enteringDelay?: number;
/**
* Name of the property to pass to the wrapped view to indicate when it is entering the
viewport.
*
* When `true` , the view has been created but has not transitioned into place.
When `false` , the view has finished its transition.
*
* The notification can be delayed by setting `enteringDelay` . If not set, the view will not
be notified of the change in transition.
*/
enteringProp?: string;
/**
* Index of active view
*/
index?: number;
/**
* Indicates if the transition should be animated
*/
noAnimation?: boolean;
/**
* Called when each view is rendered during initial construction.
*/
onAppear?: Function;
/**
* Called when each view completes its transition into the viewport.
*/
onEnter?: Function;
/**
* Called when each view completes its transition out of the viewport.
*/
onLeave?: Function;
/**
* Called when each view completes its transition within the viewport.
*/
onStay?: Function;
/**
* Called once when all views have completed their transition.
*/
onTransition?: Function;
/**
* Called once before views begin their transition.
*/
onWillTransition?: Function;
/**
* Explicitly sets the transition direction.
*
* If omitted, the direction is determined automatically based on the change of index or a
string comparison of the first child's key.
*/
reverseTransition?: boolean;
/**
* Indicates the current locale uses right-to-left reading order.
*
* `rtl` is passed to the `arranger` in order to alter the animation (e.g. reversing the
horizontal direction).
*/
rtl?: boolean;
/**
* Index of first visible view. Defaults to the current value of `index` .
*/
start?: number;
}
/**
* The base `ViewManager` component, without
applied.
*/
export class ViewManagerBase extends React.Component<
Merge<React.HTMLProps<HTMLElement>, ViewManagerBaseProps>
> {}
/**
* A function that generates an animation for a given transition configuration
*/
export interface ArrangerCallback {
(
/**
* Animation configuration object.
*/
config: object,
): any;
}
/**
* An object with callback functions to arrange views within .
*/
export interface Arranger {
/**
* Returns an array of keyframes describing the animation when
a view is entering the viewport.
*/
enter: ArrangerCallback /**
* Returns an array of keyframes describing the animation when
a view is leaving the viewport.
*/;
leave: ArrangerCallback /**
* Returns an array of keyframes describing the animation when
a view is remaining in the viewport.
*/;
stay?: ArrangerCallback;
}
/**
* A basic arranger factory that must be configured with `direction` and optionally an `amount` .
*/
export function SlideArranger(config: object): Arranger;
/**
* An arranger that enters from the left and leaves to the right.
*/
export declare const SlideRightArranger: Arranger;
/**
* An arranger that enters from the right and leaves to the left.
*/
export declare const SlideLeftArranger: Arranger;
/**
* An arranger that enters from the bottom and leaves to the top.
*/
export declare const SlideTopArranger: Arranger;
/**
* An arranger that enters from the top and leaves to the bottom.
*/
export declare const SlideBottomArranger: Arranger;
export interface ViewManagerDecoratorProps
extends ui_ForwardRef_ForwardRefProps {}
export function ViewManagerDecorator<P>(
Component: React.ComponentType<P> | string,
): React.ComponentType<P & ViewManagerDecoratorProps>;
export interface ViewManagerProps
extends Omit<
Merge<ViewManagerBaseProps, ViewManagerDecoratorProps>,
"componentRef"
> {}
/**
* A `ViewManager` controls the visibility of a configurable number of views, allowing for them to be
transitioned on and off the viewport.
*/
export class ViewManager extends React.Component<
Merge<React.HTMLProps<HTMLElement>, ViewManagerProps>
> {}
export default ViewManager;