import {MixingRef} from '../MixingRef' import {Config} from '../Config' import {Controller} from '../Controller' import {FluidValue, FluidProps} from '../utils' import { Any, Falsy, Lookup, OneOrMore, StringKeys, UnknownProps, IsPlainObject, } from './utils' type MixingToFn = T export type MixingUpdate = ToProps & MixingProps export type MixingsUpdate = | OneOrMore> | ((index: number, ctrl: Controller) => ControllerUpdate | null) export interface MixingProps extends SynthesisProps { from?: GoalValue loop?: LoopProp onProps?: (...args: any[]) => any onStart?: (...args: any[]) => any onChange?: (...args: any[]) => any onPause?: (...args: any[]) => any onResume?: (...args: any[]) => any onRest?: (...args: any[]) => any } export type ToProps = | { to?: GoalProp | MixingToFn | MixingChain } | ([T] extends [IsPlainObject] ? InlineToProps : never) export type GoalProp = [T] extends [IsPlainObject] ? GoalValues | Falsy : GoalValue export type GoalValues = FluidProps extends infer Props ? { [P in keyof Props]?: Props[P] | null } : never export type GoalValue = T | FluidValue | UnknownProps | null | undefined export type InlineToProps = Remap & { to?: undefined }> export interface MixingChain extends Array< [T] extends [IsPlainObject] ? ControllerUpdate : MixingTo | MixingUpdate > {} export type MixingTo = | ([T] extends [IsPlainObject] ? never : T | FluidValue) | MixingChain | MixingToFn | Falsy export type ControllerUpdate< State extends Lookup = Lookup, Item = undefined > = unknown & ToProps & ControllerProps export interface ControllerProps< State extends Lookup = Lookup, Item = undefined > extends MixingProps { ref?: MixingRef from?: GoalValues | Falsy loop?: LoopProp onStart?: (...args: any[]) => any onRest?: (...args: any[]) => any onChange?: (...args: any[]) => any onPause?: (...args: any[]) => any onResume?: (...args: any[]) => any onProps?: (...args: any[]) => any onResolve?: (...args: any[]) => any } export type LoopProp = boolean | T | (() => boolean | T) export type VelocityProp = T extends ReadonlyArray ? number[] : number export interface SynthesisProps { config?: Config | ((key: StringKeys) => Config) delay?: number | ((key: StringKeys) => Config) immeduate?: boolean cancel?: boolean pause?: boolean reset?: boolean reverse?: boolean } export interface ReservedProps extends ReservedEventProps { config?: any from?: any to?: any ref?: any loop?: any pause?: any reset?: any cancel?: any reverse?: any immediate?: any default?: any delay?: any // Transition props items?: any trail?: any sort?: any expires?: any initial?: any enter?: any update?: any leave?: any children?: any // Internal props keys?: any callId?: any parentId?: any } export interface ReservedEventProps { onProps?: any onStart?: any onChange?: any onPause?: any onResume?: any onRest?: any onResolve?: any onDestroyed?: any } export type PickSynthed = unknown & ([Props] extends [Any] ? Lookup : [object] extends [Props] ? Lookup : ObjectFromUnion< Props extends { from: infer From } ? ObjectType : TransitionKey & keyof Props extends never ? ToValues : TransitionValues >) type ToValues = unknown & (AndForward extends true ? ForwardProps : unknown) & (Props extends { to?: any } ? Exclude> extends infer To ? ForwardProps<[To] extends [object] ? To : Partial>> : never : unknown) export interface SpringToFn { (start: StartFn, stop: StopFn): Promise | void } type StartFn = InferTarget extends { start: infer T } ? T : never type StopFn = InferTarget extends { stop: infer T } ? T : never