export type MorphEasingFn = (t: number) => number; /** Progress per unit of normalised time. Forward, so a knot reports the segment ahead. */ export declare function slopeAt(easing: MorphEasingFn, t: number): number; /** * The author's curve, leaving at the speed the box is already travelling. * * A morph arriving mid-transition restarts the curve at t=0, so a fast run of them * only ever plays each curve's opening sliver — the box crawls while the value races * ahead. Adding `k · t(1-t)^m` fixes the start slope to the carried velocity without * moving either endpoint; `m` narrows as `k` grows, holding the peak inside * CARRY_OVERSHOOT. Momentum is only ever added, never subtracted: a curve that starts * faster than the box was moving is the author's business, and slowing it to match * would make a value that had settled start sluggishly. */ export declare function carry(base: MorphEasingFn, normalisedVelocity: number): { curve: MorphEasingFn; k: number; }; /** Sampled fine enough that a segment is shorter than a frame at 120Hz. */ export declare function sampleEasing(curve: MorphEasingFn, duration: number): string; export declare function abortContainerTransition(element: HTMLElement): void; export declare function clearContainerTransition(element: HTMLElement): void; export declare function transitionContainerSize(element: HTMLElement, oldWidth: number, oldHeight: number, duration: number, ease: string, onComplete?: () => void, onCancel?: () => void): void; export declare function holdContainerSize(element: HTMLElement, width: number, height: number, duration: number, onComplete?: () => void, onCancel?: () => void): void;