flemo
Version:
A modern React router library with built-in motion animations and smooth transitions
47 lines (46 loc) • 2.19 kB
TypeScript
import { NavigateStatus } from '../navigate/store';
import { DecoratorName } from './decorator/typing';
import { PanInfo, TargetAndTransition, Target, AnimationOptions, DragControls } from 'motion/react';
export interface RegisterTransition {
}
export type TransitionName = RegisterTransition[keyof RegisterTransition] | "none" | "cupertino" | "material" | "layout";
export type TransitionVariant = `${NavigateStatus}-${boolean}`;
export type TransitionVariantValue = {
value: Omit<Target, "transitionDuration" | "transitionDelay" | "transitionTimingFunction" | "transitionBehavior" | "transitionEnd" | "transitionProperty">;
options: Omit<AnimationOptions, "delay"> & {
delay?: number;
};
};
export type TransitionOptions = {
decoratorName?: DecoratorName;
swipeDirection: "x" | "y";
onSwipeStart: (event: MouseEvent | TouchEvent | PointerEvent, info: PanInfo, options: {
animate: (target: object, objectTarget: Target, options: AnimationOptions) => void;
currentScreen: HTMLDivElement;
prevScreen: HTMLDivElement;
dragControls: DragControls;
onStart?: (triggered: boolean) => void;
}) => Promise<boolean>;
onSwipe: (event: MouseEvent | TouchEvent | PointerEvent, info: PanInfo, options: {
animate: (target: object, objectTarget: Target, options: AnimationOptions) => void;
currentScreen: HTMLDivElement;
prevScreen: HTMLDivElement;
dragControls: DragControls;
onProgress?: (triggered: boolean, progress: number) => void;
}) => number;
onSwipeEnd: (event: MouseEvent | TouchEvent | PointerEvent, info: PanInfo, options: {
animate: (target: object, objectTarget: Target, options: AnimationOptions) => void;
currentScreen: HTMLDivElement;
prevScreen: HTMLDivElement;
onStart?: (triggered: boolean) => void;
}) => Promise<boolean>;
} | {
decoratorName?: DecoratorName;
swipeDirection?: never;
};
export interface BaseTransition {
name: TransitionName;
initial: TargetAndTransition;
variants: Record<TransitionVariant, TransitionVariantValue>;
}
export type Transition = BaseTransition & TransitionOptions;