popmotion-pose
Version:
A declarative animation library for HTML and SVG
110 lines (109 loc) • 4.27 kB
TypeScript
import { ValueType } from 'style-value-types';
import { Action, ValueReaction, ColdSubscription, TweenProps, PhysicsProps, SpringProps, DecayProps, KeyframesProps } from 'popmotion';
import { Poser, PoserConfig } from 'pose-core';
import { Pose as PoseCore, PoseMap as PoseMapCore, PoserState as PoserStateCore, ExtendAPI, TransformPose, ReadValueFromSource } from 'pose-core';
import { Styler } from 'stylefire';
import { Merge } from 'ts-essentials';
import { easingLookup } from './inc/lookups';
export declare type Value = {
raw: ValueReaction;
type?: ValueType;
};
export declare type Pose = PoseCore<Action, TransitionDefinition>;
export declare type PoseMap = PoseMapCore<Action, TransitionDefinition>;
export declare type PoserState = PoserStateCore<Value, Action, ColdSubscription, DomPopmotionPoser>;
export declare type Transformer = (v: any) => any;
export declare type TransitionProps = {
from: string | number;
velocity: number;
to: string | number;
key: string;
prevPoseKey: string;
dimensions: Dimensions;
};
export declare type ResolverProps = TransitionProps & {
[key: string]: any;
};
export declare type Transition = (props: ResolverProps) => Action | false;
export interface DomPopmotionPoser extends Poser<Value, Action, ColdSubscription, DomPopmotionPoser> {
addChild: (element: Element, config: PoserConfig<Value>) => DomPopmotionPoser;
flip: (op: Function) => Promise<any>;
measure: () => BoundingBox;
}
export declare type DragBounds = {
[key in BoundingBoxDimension]?: number | string;
};
export declare type DomPopmotionConfig = {
onDragStart?: (e: MouseEvent | TouchEvent) => any;
onDragEnd?: (e: MouseEvent | TouchEvent) => any;
onPressStart?: (e: MouseEvent | TouchEvent) => any;
onPressEnd?: (e: MouseEvent | TouchEvent) => any;
draggable?: Draggable;
hoverable?: boolean;
dragBounds?: DragBounds | ((props: ResolverProps) => DragBounds);
props?: {
[key: string]: any;
};
[key: string]: any;
};
export declare type Draggable = boolean | 'x' | 'y';
export declare type PopmotionPoserFactoryConfig<P, TD> = {
extendAPI: ExtendAPI<Value, Action, ColdSubscription, P>;
transformPose: TransformPose<Value, Action, ColdSubscription, P, TD>;
addListenerToValue: (key: string, styler: Styler) => (v: any) => void;
readValueFromSource?: ReadValueFromSource;
posePriority?: string[];
setValueNative: (key: string, to: any, props: {
elementStyler: Styler;
}) => void;
forceRender: (props: {
elementStyler: Styler;
}) => void;
};
export declare type Dimensions = {
get: (measurement?: BoundingBoxDimension) => BoundingBox | number;
measurementAsPixels: (measurement: BoundingBoxDimension, value: string | number, type?: ValueType) => number;
measure: () => BoundingBox;
has: () => boolean;
};
export declare type BoundingBox = {
[key in BoundingBoxDimension]: number;
};
export declare enum BoundingBoxDimension {
width = "width",
height = "height",
left = "left",
right = "right",
top = "top",
bottom = "bottom"
}
declare type NoEase = {
ease?: undefined;
};
export declare type CubicBezierArgs = [number, number, number, number];
declare type TransitionDefinitionCommonProps = {
delay?: number;
min?: number;
max?: number;
round?: boolean;
};
export declare type DecayDefinition = {
type: 'decay';
} & TransitionDefinitionCommonProps & DecayProps & NoEase;
export declare type KeyframesDefinition = {
type: 'keyframes';
} & TransitionDefinitionCommonProps & KeyframesProps;
export declare type PhysicsDefinition = {
type: 'physics';
} & TransitionDefinitionCommonProps & PhysicsProps & NoEase;
export declare type SpringDefinition = {
type: 'spring';
} & TransitionDefinitionCommonProps & SpringProps & NoEase;
export declare type TweenDefinition = Merge<{
type: 'tween';
} & TransitionDefinitionCommonProps & TweenProps, {
ease: TweenProps['ease'] | keyof typeof easingLookup | CubicBezierArgs;
}>;
export declare type TransitionDefinition = TweenDefinition | PhysicsDefinition | SpringDefinition | DecayDefinition | KeyframesDefinition;
export declare type AnimationDef = TransitionDefinition;
export {};