react-sequencer
Version:
Step based sequencer to give your components reliable states for transitions and animations.
50 lines (49 loc) • 1.59 kB
TypeScript
export declare enum PlayStatus {
IDLE = "STATUS_IDLE",
PLAYING = "STATUS_PLAYING"
}
export declare type EndMode = 'loop' | 'end' | 'start';
/**** Ticker */
export declare type TickerNotifyFunction = (timestamp: number) => void;
/**** Sequencer */
export declare type StepInput<TStepName> = [TStepName, number];
export declare type StepsInput<TStepName> = Array<StepInput<TStepName>>;
export interface OptionsInput<TStepName> {
steps: StepsInput<TStepName>;
loop?: boolean;
complete?: boolean;
endMode?: EndMode;
autoplay?: boolean;
}
export interface Options<TStepName> {
steps: StepsInput<TStepName>;
loop: boolean;
complete: boolean;
endMode: EndMode;
autoplay: boolean;
}
export interface Step<TStepName> {
startPos: number;
endPos: number;
name: TStepName;
}
export declare type Steps<TStepName> = Array<Step<TStepName>>;
export declare type NotifyFunction<TStepName> = (state: SequencerState<TStepName>) => void;
export declare type Subscriptions<TStepName> = Array<NotifyFunction<TStepName>>;
export interface SequencerState<TStepName> {
current: TStepName;
index: number;
isPlaying: boolean;
isComplete: boolean;
isStopped: boolean;
}
export interface SequencerApi<TStepName> {
play(): void;
complete(): void;
stop(): void;
pause(): void;
isBefore(name: TStepName): boolean;
isAfter(name: TStepName): boolean;
}
/*** Use Sequencer */
export declare type TUseSequencer<TStepName> = [SequencerState<TStepName>, SequencerApi<TStepName>];