/** based on framer-motion@4.0.3, Copyright (c) 2018 Framer B.V. */ import '../utils/fix-process-env.js'; import { SubscriptionManager } from '../utils/subscription-manager.js'; /** based on framer-motion@4.1.17, Copyright (c) 2018 Framer B.V. */ import type { Writable, Unsubscriber } from 'svelte/store'; export type Transformer = (v: T) => T; /** * @public */ export type Subscriber = (v: T) => void; /** * @public */ export type PassiveEffect = (v: T, safeSetter: (v: T) => void) => void; export type StartAnimation = (complete: () => void) => (() => void) | undefined; /** * `MotionValue` is used to track the state and velocity of motion values. * * @public */ export declare class MotionValue implements Writable { /** * Subscribe method to make MotionValue compatible with Svelte store. Returns a unsubscribe function. * Same as onChange. * * @public */ subscribe(this: void & MotionValue, subscription: Subscriber): Unsubscriber; /** * Update method to make MotionValue compatible with Svelte writable store * * @public */ update: (cb: (value: V) => V) => void; /** * The current state of the `MotionValue`. * * @internal */ private current; /** * The previous state of the `MotionValue`. * * @internal */ private prev; /** * Duration, in milliseconds, since last updating frame. * * @internal */ private timeDelta; /** * Timestamp of the last time this `MotionValue` was updated. * * @internal */ private lastUpdated; /** * Functions to notify when the `MotionValue` updates. * * @internal */ private updateSubscribers; /** * Functions to notify when the velocity updates. * * @internal */ velocityUpdateSubscribers: SubscriptionManager>; /** * Functions to notify when the `MotionValue` updates and `render` is set to `true`. * * @internal */ private renderSubscribers; /** * Add a passive effect to this `MotionValue`. * * A passive effect intercepts calls to `set`. For instance, `useSpring` adds * a passive effect that attaches a `spring` to the latest * set value. Hypothetically there could be a `useSmooth` that attaches an input smoothing effect. * * @internal */ private passiveEffect?; /** * A reference to the currently-controlling Popmotion animation * * @internal */ private stopAnimation?; /** * Tracks whether this value can output a velocity. Currently this is only true * if the value is numerical, but we might be able to widen the scope here and support * other value types. * * @internal */ private canTrackVelocity; private onSubscription; private onUnsubscription; /** * @param init - The initiating value * @param startStopNotifier - a function that is called, once the first subscriber is added to this motion value. * The return function is called, when the last subscriber unsubscribes. * * - `transformer`: A function to transform incoming values with. * * @internal */ constructor(init: V, startStopNotifier?: () => () => void); /** * Adds a function that will be notified when the `MotionValue` is updated. * * It returns a function that, when called, will cancel the subscription. * * When calling `onChange` inside a React component, it should be wrapped with the * `useEffect` hook. As it returns an unsubscribe function, this should be returned * from the `useEffect` function to ensure you don't add duplicate subscribers.. * * @motion * * ```jsx * * *
* ``` * * @param subscriber - A function that receives the latest value. * @returns A function that, when called, will cancel this subscription. * * @public */ onChange: (subscription: Subscriber) => (() => void); clearListeners: () => void; /** * Adds a function that will be notified when the `MotionValue` requests a render. * * @param subscriber - A function that's provided the latest value. * @returns A function that, when called, will cancel this subscription. * * @internal */ onRenderRequest: (subscription: Subscriber) => (() => void); /** * Attaches a passive effect to the `MotionValue`. * * @internal */ attach: (passiveEffect: PassiveEffect) => void; /** * Sets the state of the `MotionValue`. * * @remarks * * ```jsx * const x = useMotionValue(0) * x.set(10) * ``` * * @param latest - Latest value to set. * @param render - Whether to notify render subscribers. Defaults to `true` * * @public */ set: (v: V, render?: boolean) => void; updateAndNotify: (v: V, render?: boolean) => void; /** * Returns the latest state of `MotionValue` * * @returns - The latest state of `MotionValue` * * @public */ get: () => V; /** * @public */ getPrevious: () => V; /** * Returns the latest velocity of `MotionValue` * * @returns - The latest velocity of `MotionValue`. Returns `0` if the state is non-numerical. * * @public */ getVelocity: () => number; /** * Schedule a velocity check for the next frame. * * This is an instanced and bound function to prevent generating a new * function once per frame. * * @internal */ private scheduleVelocityCheck; /** * Updates `prev` with `current` if the value hasn't been updated this frame. * This ensures velocity calculations return `0`. * * This is an instanced and bound function to prevent generating a new * function once per frame. * * @internal */ private velocityCheck; hasAnimated: boolean; /** * Registers a new animation to control this `MotionValue`. Only one * animation can drive a `MotionValue` at one time. * * ```jsx * value.start() * ``` * * @param animation - A function that starts the provided animation * * @internal */ start: (animation: StartAnimation) => Promise; /** * Stop the currently active animation. * * @public */ stop: () => void; /** * Returns `true` if this value is currently animating. * * @public */ isAnimating: () => boolean; private clearAnimation; /** * Destroy and clean up subscribers to this `MotionValue`. * * The `MotionValue` hooks like `useMotionValue` and `useTransform` automatically * handle the lifecycle of the returned `MotionValue`, so this method is only necessary if you've manually * created a `MotionValue` via the `motionValue` function. * * @public */ destroy: () => void; } /** * @internal */ export declare function motionValue(init: V, startStopNotifier?: () => () => void): MotionValue; //# sourceMappingURL=index.d.ts.map