= {
readonly $$typeof: symbol;
} & ((props: PropsWithoutRef & RefAttributes) => JSX.Element);
type AttributesWithoutMotionProps = {
[K in Exclude]?: Attributes[K];
};
/**
* @public
*/
type HTMLMotionProps = AttributesWithoutMotionProps & MotionProps;
/**
* Motion-optimised versions of React's HTML components.
*
* @public
*/
type HTMLMotionComponents = {
[K in keyof HTMLElements]: ForwardRefComponent>;
};
interface SVGAttributesWithoutMotionProps extends Pick, Exclude, keyof MotionProps>> {
}
/**
* Blanket-accept any SVG attribute as a `MotionValue`
* @public
*/
type SVGAttributesAsMotionValues = MakeMotion>;
type UnwrapSVGFactoryElement = F extends React.SVGProps ? P : never;
/**
* @public
*/
interface SVGMotionProps extends SVGAttributesAsMotionValues, MotionProps {
}
/**
* Motion-optimised versions of React's SVG components.
*
* @public
*/
type SVGMotionComponents = {
[K in SVGElements]: ForwardRefComponent, SVGMotionProps>>;
};
declare abstract class Feature {
isMounted: boolean;
node: VisualElement;
constructor(node: VisualElement);
abstract mount(): void;
abstract unmount(): void;
update(): void;
}
declare function MeasureLayout(props: MotionProps & {
visualElement: VisualElement;
}): react_jsx_runtime.JSX.Element;
interface FeatureClass {
new (props: Props): Feature;
}
type HydratedFeatureDefinition = {
isEnabled: (props: MotionProps) => boolean;
Feature: FeatureClass;
ProjectionNode?: any;
MeasureLayout?: typeof MeasureLayout;
};
interface HydratedFeatureDefinitions {
animation?: HydratedFeatureDefinition;
exit?: HydratedFeatureDefinition;
drag?: HydratedFeatureDefinition;
tap?: HydratedFeatureDefinition;
focus?: HydratedFeatureDefinition;
hover?: HydratedFeatureDefinition;
pan?: HydratedFeatureDefinition;
inView?: HydratedFeatureDefinition;
layout?: HydratedFeatureDefinition;
}
type FeatureDefinition = {
isEnabled: HydratedFeatureDefinition["isEnabled"];
Feature?: HydratedFeatureDefinition["Feature"];
ProjectionNode?: HydratedFeatureDefinition["ProjectionNode"];
MeasureLayout?: HydratedFeatureDefinition["MeasureLayout"];
};
type FeatureDefinitions = {
[K in keyof HydratedFeatureDefinitions]: FeatureDefinition;
};
type FeaturePackage = {
Feature?: HydratedFeatureDefinition["Feature"];
ProjectionNode?: HydratedFeatureDefinition["ProjectionNode"];
MeasureLayout?: HydratedFeatureDefinition["MeasureLayout"];
};
type FeaturePackages = {
[K in keyof HydratedFeatureDefinitions]: FeaturePackage;
};
interface FeatureBundle extends FeaturePackages {
renderer: CreateVisualElement;
}
type LazyFeatureBundle$1 = () => Promise;
type RenderComponent = (Component: string | React$1.ComponentType>, props: MotionProps, ref: React$1.Ref, visualState: VisualState, isStatic: boolean, visualElement?: VisualElement) => any;
interface MotionComponentConfig {
preloadedFeatures?: FeatureBundle;
createVisualElement?: CreateVisualElement;
useRender: RenderComponent;
useVisualState: UseVisualState;
Component: string | React$1.ComponentType>;
}
type MotionComponentProps = {
[K in Exclude]?: Props[K];
} & MotionProps;
/**
* Create a `motion` component.
*
* This function accepts a Component argument, which can be either a string (ie "div"
* for `motion.div`), or an actual React component.
*
* Alongside this is a config option which provides a way of rendering the provided
* component "offline", or outside the React render cycle.
*/
declare function createRendererMotionComponent({ preloadedFeatures, createVisualElement, useRender, useVisualState, Component, }: MotionComponentConfig): React$1.ForwardRefExoticComponent>;
declare const motion: ((Component: string | TagName | React$1.ComponentType, { forwardMotionProps }?: {
forwardMotionProps: boolean;
}) => TagName extends "symbol" | "filter" | "stop" | "clipPath" | "mask" | "marker" | "animate" | "text" | "path" | "image" | "circle" | "switch" | "svg" | keyof HTMLElements | "defs" | "desc" | "ellipse" | "feBlend" | "feColorMatrix" | "feComponentTransfer" | "feComposite" | "feConvolveMatrix" | "feDiffuseLighting" | "feDisplacementMap" | "feDistantLight" | "feDropShadow" | "feFlood" | "feFuncA" | "feFuncB" | "feFuncG" | "feFuncR" | "feGaussianBlur" | "feImage" | "feMerge" | "feMergeNode" | "feMorphology" | "feOffset" | "fePointLight" | "feSpecularLighting" | "feSpotLight" | "feTile" | "feTurbulence" | "foreignObject" | "g" | "line" | "linearGradient" | "metadata" | "pattern" | "polygon" | "polyline" | "radialGradient" | "rect" | "textPath" | "tspan" | "use" | "view" ? DOMMotionComponents[TagName] : React$1.ComponentType>>) & HTMLMotionComponents & SVGMotionComponents & {
create: (Component: string | TagName | React$1.ComponentType, { forwardMotionProps }?: {
forwardMotionProps: boolean;
}) => TagName extends "symbol" | "filter" | "stop" | "clipPath" | "mask" | "marker" | "animate" | "text" | "path" | "image" | "circle" | "switch" | "svg" | keyof HTMLElements | "defs" | "desc" | "ellipse" | "feBlend" | "feColorMatrix" | "feComponentTransfer" | "feComposite" | "feConvolveMatrix" | "feDiffuseLighting" | "feDisplacementMap" | "feDistantLight" | "feDropShadow" | "feFlood" | "feFuncA" | "feFuncB" | "feFuncG" | "feFuncR" | "feGaussianBlur" | "feImage" | "feMerge" | "feMergeNode" | "feMorphology" | "feOffset" | "fePointLight" | "feSpecularLighting" | "feSpotLight" | "feTile" | "feTurbulence" | "foreignObject" | "g" | "line" | "linearGradient" | "metadata" | "pattern" | "polygon" | "polyline" | "radialGradient" | "rect" | "textPath" | "tspan" | "use" | "view" ? DOMMotionComponents[TagName] : React$1.ComponentType>>;
};
declare const m: ((Component: string | TagName | React$1.ComponentType, { forwardMotionProps }?: {
forwardMotionProps: boolean;
}) => TagName extends "symbol" | "filter" | "stop" | "clipPath" | "mask" | "marker" | "animate" | "text" | "path" | "image" | "circle" | "switch" | "svg" | keyof HTMLElements | "defs" | "desc" | "ellipse" | "feBlend" | "feColorMatrix" | "feComponentTransfer" | "feComposite" | "feConvolveMatrix" | "feDiffuseLighting" | "feDisplacementMap" | "feDistantLight" | "feDropShadow" | "feFlood" | "feFuncA" | "feFuncB" | "feFuncG" | "feFuncR" | "feGaussianBlur" | "feImage" | "feMerge" | "feMergeNode" | "feMorphology" | "feOffset" | "fePointLight" | "feSpecularLighting" | "feSpotLight" | "feTile" | "feTurbulence" | "foreignObject" | "g" | "line" | "linearGradient" | "metadata" | "pattern" | "polygon" | "polyline" | "radialGradient" | "rect" | "textPath" | "tspan" | "use" | "view" ? DOMMotionComponents[TagName] : React$1.ComponentType>>) & HTMLMotionComponents & SVGMotionComponents & {
create: (Component: string | TagName | React$1.ComponentType, { forwardMotionProps }?: {
forwardMotionProps: boolean;
}) => TagName extends "symbol" | "filter" | "stop" | "clipPath" | "mask" | "marker" | "animate" | "text" | "path" | "image" | "circle" | "switch" | "svg" | keyof HTMLElements | "defs" | "desc" | "ellipse" | "feBlend" | "feColorMatrix" | "feComponentTransfer" | "feComposite" | "feConvolveMatrix" | "feDiffuseLighting" | "feDisplacementMap" | "feDistantLight" | "feDropShadow" | "feFlood" | "feFuncA" | "feFuncB" | "feFuncG" | "feFuncR" | "feGaussianBlur" | "feImage" | "feMerge" | "feMergeNode" | "feMorphology" | "feOffset" | "fePointLight" | "feSpecularLighting" | "feSpotLight" | "feTile" | "feTurbulence" | "foreignObject" | "g" | "line" | "linearGradient" | "metadata" | "pattern" | "polygon" | "polyline" | "radialGradient" | "rect" | "textPath" | "tspan" | "use" | "view" ? DOMMotionComponents[TagName] : React$1.ComponentType>>;
};
/**
* @public
*/
interface AnimatePresenceProps {
/**
* By passing `initial={false}`, `AnimatePresence` will disable any initial animations on children
* that are present when the component is first rendered.
*
* ```jsx
*
* {isVisible && (
*
* )}
*
* ```
*
* @public
*/
initial?: boolean;
/**
* When a component is removed, there's no longer a chance to update its props. So if a component's `exit`
* prop is defined as a dynamic variant and you want to pass a new `custom` prop, you can do so via `AnimatePresence`.
* This will ensure all leaving components animate using the latest data.
*
* @public
*/
custom?: any;
/**
* Fires when all exiting nodes have completed animating out.
*
* @public
*/
onExitComplete?: () => void;
/**
* Replace with `mode="wait"`
*
* @deprecated
*
* Replace with `mode="wait"`
*/
exitBeforeEnter?: boolean;
/**
* Determines how to handle entering and exiting elements.
*
* - `"sync"`: Default. Elements animate in and out as soon as they're added/removed.
* - `"popLayout"`: Exiting elements are "popped" from the page layout, allowing sibling
* elements to immediately occupy their new layouts.
* - `"wait"`: Only renders one component at a time. Wait for the exiting component to animate out
* before animating the next component in.
*
* @public
*/
mode?: "sync" | "popLayout" | "wait";
/**
* Internal. Used in Framer to flag that sibling children *shouldn't* re-render as a result of a
* child being removed.
*/
presenceAffectsLayout?: boolean;
}
/**
* `AnimatePresence` enables the animation of components that have been removed from the tree.
*
* When adding/removing more than a single child, every child **must** be given a unique `key` prop.
*
* Any `motion` components that have an `exit` property defined will animate out when removed from
* the tree.
*
* ```jsx
* import { motion, AnimatePresence } from 'framer-motion'
*
* export const Items = ({ items }) => (
*
* {items.map(item => (
*
* ))}
*
* )
* ```
*
* You can sequence exit animations throughout a tree using variants.
*
* If a child contains multiple `motion` components with `exit` props, it will only unmount the child
* once all `motion` components have finished animating out. Likewise, any components using
* `usePresence` all need to call `safeToRemove`.
*
* @public
*/
declare const AnimatePresence: React$1.FunctionComponent>;
type IsValidProp = (key: string) => boolean;
declare function filterProps(props: MotionProps, isDom: boolean, forwardMotionProps: boolean): MotionProps;
interface MotionConfigProps extends Partial {
children?: React$1.ReactNode;
isValidProp?: IsValidProp;
}
/**
* `MotionConfig` is used to set configuration options for all children `motion` components.
*
* ```jsx
* import { motion, MotionConfig } from "framer-motion"
*
* export function App() {
* return (
*
*
*
* )
* }
* ```
*
* @public
*/
declare function MotionConfig({ children, isValidProp, ...config }: MotionConfigProps): react_jsx_runtime.JSX.Element;
type LazyFeatureBundle = () => Promise;
/**
* @public
*/
interface LazyProps {
children?: React.ReactNode;
/**
* Can be used to provide a feature bundle synchronously or asynchronously.
*
* ```jsx
* // features.js
* import { domAnimation } from "framer-motion"
* export default domAnimation
*
* // index.js
* import { LazyMotion, m } from "framer-motion"
*
* const loadFeatures = import("./features.js")
* .then(res => res.default)
*
* function Component() {
* return (
*
*
*
* )
* }
* ```
*
* @public
*/
features: FeatureBundle | LazyFeatureBundle;
/**
* If `true`, will throw an error if a `motion` component renders within
* a `LazyMotion` component.
*
* ```jsx
* // This component will throw an error that explains using a motion component
* // instead of the m component will break the benefits of code-splitting.
* function Component() {
* return (
*
*
*
* )
* }
* ```
*
* @public
*/
strict?: boolean;
}
/**
* Used in conjunction with the `m` component to reduce bundle size.
*
* `m` is a version of the `motion` component that only loads functionality
* critical for the initial render.
*
* `LazyMotion` can then be used to either synchronously or asynchronously
* load animation and gesture support.
*
* ```jsx
* // Synchronous loading
* import { LazyMotion, m, domAnimation } from "framer-motion"
*
* function App() {
* return (
*
*
*
* )
* }
*
* // Asynchronous loading
* import { LazyMotion, m } from "framer-motion"
*
* function App() {
* return (
* import('./path/to/domAnimation')}>
*
*
* )
* }
* ```
*
* @public
*/
declare function LazyMotion({ children, features, strict }: LazyProps): react_jsx_runtime.JSX.Element;
type InheritOption = boolean | "id";
interface Props$2 {
id?: string;
inherit?: InheritOption;
}
declare const LayoutGroup: React$1.FunctionComponent>;
interface Props$1 {
/**
* A HTML element to render this component as. Defaults to `"ul"`.
*
* @public
*/
as?: keyof HTMLElements;
/**
* The axis to reorder along. By default, items will be draggable on this axis.
* To make draggable on both axes, set ``
*
* @public
*/
axis?: "x" | "y";
/**
* A callback to fire with the new value order. For instance, if the values
* are provided as a state from `useState`, this could be the set state function.
*
* @public
*/
onReorder: (newOrder: V[]) => void;
/**
* The latest values state.
*
* ```jsx
* function Component() {
* const [items, setItems] = useState([0, 1, 2])
*
* return (
*
* {items.map((item) => )}
*
* )
* }
* ```
*
* @public
*/
values: V[];
}
type ReorderGroupProps = Props$1 & Omit, "values"> & React$1.PropsWithChildren<{}>;
declare function ReorderGroupComponent({ children, as, axis, onReorder, values, ...props }: ReorderGroupProps, externalRef?: React$1.ForwardedRef): react_jsx_runtime.JSX.Element;
declare const ReorderGroup: (props: ReorderGroupProps & {
ref?: React$1.ForwardedRef;
}) => ReturnType;
interface Props {
/**
* A HTML element to render this component as. Defaults to `"li"`.
*
* @public
*/
as?: keyof HTMLElements;
/**
* The value in the list that this component represents.
*
* @public
*/
value: V;
/**
* A subset of layout options primarily used to disable layout="size"
*
* @public
* @default true
*/
layout?: true | "position";
}
type ReorderItemProps = Props & HTMLMotionProps & React$1.PropsWithChildren<{}>;
declare function ReorderItemComponent({ children, style, value, as, onDrag, layout, ...props }: ReorderItemProps, externalRef?: React$1.ForwardedRef): react_jsx_runtime.JSX.Element;
declare const ReorderItem: (props: ReorderItemProps & {
ref?: React$1.ForwardedRef;
}) => ReturnType;
declare namespace namespace_d {
export { ReorderGroup as Group, ReorderItem as Item };
}
type ObjectTarget = {
[K in keyof O]?: O[K] | GenericKeyframesTarget;
};
type SequenceTime = number | "<" | `+${number}` | `-${number}` | `${string}`;
type SequenceLabel = string;
interface SequenceLabelWithTime {
name: SequenceLabel;
at: SequenceTime;
}
interface At {
at?: SequenceTime;
}
type MotionValueSegment = [
MotionValue,
UnresolvedValueKeyframe | UnresolvedValueKeyframe[]
];
type MotionValueSegmentWithTransition = [
MotionValue,
UnresolvedValueKeyframe | UnresolvedValueKeyframe[],
Transition & At
];
type DOMSegment = [ElementOrSelector, DOMKeyframesDefinition];
type DOMSegmentWithTransition = [
ElementOrSelector,
DOMKeyframesDefinition,
DynamicAnimationOptions & At
];
type ObjectSegment = [O, ObjectTarget];
type ObjectSegmentWithTransition = [
O,
ObjectTarget,
DynamicAnimationOptions & At
];
type Segment = ObjectSegment | ObjectSegmentWithTransition | SequenceLabel | SequenceLabelWithTime | MotionValueSegment | MotionValueSegmentWithTransition | DOMSegment | DOMSegmentWithTransition;
type AnimationSequence = Segment[];
interface SequenceOptions extends AnimationPlaybackOptions {
delay?: number;
duration?: number;
defaultTransition?: Transition;
}
interface AbsoluteKeyframe {
value: string | number | null;
at: number;
easing?: Easing;
}
type ValueSequence = AbsoluteKeyframe[];
interface SequenceMap {
[key: string]: ValueSequence;
}
type ResolvedAnimationDefinition = {
keyframes: {
[key: string]: UnresolvedValueKeyframe[];
};
transition: {
[key: string]: Transition;
};
};
type ResolvedAnimationDefinitions = Map;
/**
* Creates an animation function that is optionally scoped
* to a specific element.
*/
declare function createScopedAnimate(scope?: AnimationScope): {
(sequence: AnimationSequence, options?: SequenceOptions): AnimationPlaybackControls;
(value: string | MotionValue, keyframes: string | GenericKeyframesTarget, options?: ValueAnimationTransition): AnimationPlaybackControls;
(value: number | MotionValue, keyframes: number | GenericKeyframesTarget, options?: ValueAnimationTransition): AnimationPlaybackControls;
(value: V | MotionValue, keyframes: V | GenericKeyframesTarget, options?: ValueAnimationTransition): AnimationPlaybackControls;
(element: ElementOrSelector, keyframes: DOMKeyframesDefinition, options?: DynamicAnimationOptions): AnimationPlaybackControls;
(object: O | O[], keyframes: ObjectTarget, options?: DynamicAnimationOptions): AnimationPlaybackControls;
};
declare const animate: {
(sequence: AnimationSequence, options?: SequenceOptions): AnimationPlaybackControls;
(value: string | MotionValue, keyframes: string | GenericKeyframesTarget, options?: ValueAnimationTransition): AnimationPlaybackControls;
(value: number | MotionValue, keyframes: number | GenericKeyframesTarget, options?: ValueAnimationTransition): AnimationPlaybackControls;
(value: V | MotionValue, keyframes: V | GenericKeyframesTarget, options?: ValueAnimationTransition): AnimationPlaybackControls;
(element: ElementOrSelector, keyframes: DOMKeyframesDefinition, options?: DynamicAnimationOptions): AnimationPlaybackControls;
(object: O | O[], keyframes: ObjectTarget, options?: DynamicAnimationOptions): AnimationPlaybackControls;
};
declare const animateMini: (elementOrSelector: ElementOrSelector, keyframes: DOMKeyframesDefinition, options?: DynamicAnimationOptions) => AnimationPlaybackControls;
interface ScrollOptions {
source?: HTMLElement;
container?: HTMLElement;
target?: Element;
axis?: "x" | "y";
offset?: ScrollOffset;
}
type OnScrollProgress = (progress: number) => void;
type OnScrollWithInfo = (progress: number, info: ScrollInfo) => void;
type OnScroll = OnScrollProgress | OnScrollWithInfo;
interface AxisScrollInfo {
current: number;
offset: number[];
progress: number;
scrollLength: number;
velocity: number;
targetOffset: number;
targetLength: number;
containerLength: number;
interpolatorOffsets?: number[];
interpolate?: EasingFunction;
}
interface ScrollInfo {
time: number;
x: AxisScrollInfo;
y: AxisScrollInfo;
}
type OnScrollInfo = (info: ScrollInfo) => void;
type SupportedEdgeUnit = "px" | "vw" | "vh" | "%";
type EdgeUnit = `${number}${SupportedEdgeUnit}`;
type NamedEdges = "start" | "end" | "center";
type EdgeString = NamedEdges | EdgeUnit | `${number}`;
type Edge = EdgeString | number;
type ProgressIntersection = [number, number];
type Intersection = `${Edge} ${Edge}`;
type ScrollOffset = Array;
interface ScrollInfoOptions {
container?: HTMLElement;
target?: Element;
axis?: "x" | "y";
offset?: ScrollOffset;
}
declare class ScrollTimeline implements ProgressTimeline {
constructor(options: ScrollOptions);
currentTime: null | {
value: number;
};
cancel?: VoidFunction;
}
declare global {
interface Window {
ScrollTimeline: ScrollTimeline;
}
}
declare function scroll(onScroll: OnScroll | AnimationPlaybackControls, { axis, ...options }?: ScrollOptions): VoidFunction;
declare function scrollInfo(onScroll: OnScrollInfo, { container, ...options }?: ScrollInfoOptions): () => void;
type ViewChangeHandler = (entry: IntersectionObserverEntry) => void;
type MarginValue = `${number}${"px" | "%"}`;
type MarginType = MarginValue | `${MarginValue} ${MarginValue}` | `${MarginValue} ${MarginValue} ${MarginValue}` | `${MarginValue} ${MarginValue} ${MarginValue} ${MarginValue}`;
interface InViewOptions {
root?: Element | Document;
margin?: MarginType;
amount?: "some" | "all" | number;
}
declare function inView(elementOrSelector: ElementOrSelector, onStart: (entry: IntersectionObserverEntry) => void | ViewChangeHandler, { root, margin: rootMargin, amount }?: InViewOptions): VoidFunction;
declare const anticipate: (p: number) => number;
declare const backOut: (t: number) => number;
declare const backIn: EasingFunction;
declare const backInOut: EasingFunction;
declare const circIn: EasingFunction;
declare const circOut: EasingFunction;
declare const circInOut: EasingFunction;
declare const easeIn: (t: number) => number;
declare const easeOut: (t: number) => number;
declare const easeInOut: (t: number) => number;
declare function cubicBezier(mX1: number, mY1: number, mX2: number, mY2: number): (t: number) => number;
type Direction = "start" | "end";
declare function steps(numSteps: number, direction?: Direction): EasingFunction;
declare const mirrorEasing: EasingModifier;
declare const reverseEasing: EasingModifier;
declare function spring(optionsOrVisualDuration?: ValueAnimationOptions | number, bounce?: number): KeyframeGenerator;
declare function inertia({ keyframes, velocity, power, timeConstant, bounceDamping, bounceStiffness, modifyTarget, min, max, restDelta, restSpeed, }: ValueAnimationOptions): KeyframeGenerator;
declare function keyframes({ duration, keyframes: keyframeValues, times, ease, }: ValueAnimationOptions): KeyframeGenerator;
type StaggerOrigin = "first" | "last" | "center" | number;
type StaggerOptions = {
startDelay?: number;
from?: StaggerOrigin;
ease?: Easing;
};
declare function stagger(duration?: number, { startDelay, from, ease }?: StaggerOptions): DynamicOption;
/**
* @public
*/
interface TransformOptions {
/**
* Clamp values to within the given range. Defaults to `true`
*
* @public
*/
clamp?: boolean;
/**
* Easing functions to use on the interpolations between each value in the input and output ranges.
*
* If provided as an array, the array must be one item shorter than the input and output ranges, as the easings apply to the transition **between** each.
*
* @public
*/
ease?: EasingFunction | EasingFunction[];
/**
* Provide a function that can interpolate between any two values in the provided range.
*
* @public
*/
mixer?: (from: T, to: T) => (v: number) => any;
}
/**
* Transforms numbers into other values by mapping them from an input range to an output range.
* Returns the type of the input provided.
*
* @remarks
*
* Given an input range of `[0, 200]` and an output range of
* `[0, 1]`, this function will return a value between `0` and `1`.
* The input range must be a linear series of numbers. The output range
* can be any supported value type, such as numbers, colors, shadows, arrays, objects and more.
* Every value in the output range must be of the same type and in the same format.
*
* ```jsx
* import * as React from "react"
* import { transform } from "framer-motion"
*
* export function MyComponent() {
* const inputRange = [0, 200]
* const outputRange = [0, 1]
* const output = transform(100, inputRange, outputRange)
*
* // Returns 0.5
* return {output}
* }
* ```
*
* @param inputValue - A number to transform between the input and output ranges.
* @param inputRange - A linear series of numbers (either all increasing or decreasing).
* @param outputRange - A series of numbers, colors, strings, or arrays/objects of those. Must be the same length as `inputRange`.
* @param options - Clamp: Clamp values to within the given range. Defaults to `true`.
*
* @public
*/
declare function transform(inputValue: number, inputRange: number[], outputRange: T[], options?: TransformOptions): T;
/**
*
* Transforms numbers into other values by mapping them from an input range to an output range.
*
* Given an input range of `[0, 200]` and an output range of
* `[0, 1]`, this function will return a value between `0` and `1`.
* The input range must be a linear series of numbers. The output range
* can be any supported value type, such as numbers, colors, shadows, arrays, objects and more.
* Every value in the output range must be of the same type and in the same format.
*
* ```jsx
* import * as React from "react"
* import { Frame, transform } from "framer"
*
* export function MyComponent() {
* const inputRange = [-200, -100, 100, 200]
* const outputRange = [0, 1, 1, 0]
* const convertRange = transform(inputRange, outputRange)
* const output = convertRange(-150)
*
* // Returns 0.5
* return {output}
* }
*
* ```
*
* @param inputRange - A linear series of numbers (either all increasing or decreasing).
* @param outputRange - A series of numbers, colors or strings. Must be the same length as `inputRange`.
* @param options - Clamp: clamp values to within the given range. Defaults to `true`.
*
* @public
*/
declare function transform(inputRange: number[], outputRange: T[], options?: TransformOptions): (inputValue: number) => T;
declare const clamp: (min: number, max: number, v: number) => number;
type DelayedFunction = (overshoot: number) => void;
/**
* Timeout defined in ms
*/
declare function delay(callback: DelayedFunction, timeout: number): () => void;
declare const distance: (a: number, b: number) => number;
declare function distance2D(a: Point, b: Point): number;
type Mix = (v: number) => T;
type MixerFactory = (from: T, to: T) => Mix;
interface InterpolateOptions {
clamp?: boolean;
ease?: EasingFunction | EasingFunction[];
mixer?: MixerFactory