/**
 * make a throttled function that actually executes with the last given arguments.
 */
export declare function throttle<T extends (...args: any) => void>(fn: T, wait: number): T & {
    cancel(): void;
    flush(): void;
};
/**
 * wrap a function. in the following calls, if `input` didn't change, `fn` will not execute
 */
export declare function wrapAsTrigger<T>(fn: (input: T, lastInput?: T) => void, isEqual?: (a: T, b: T) => boolean): (input: T) => void;
/**
 * extract and remove items from the array safely.
 *
 * this will mutate `arr` the input array.
 *
 * @returns removed items in `indexes` order
 */
export declare function removeItems<T>(arr: T[], indexes: number[]): T[];
/**
 * move items inside an array safely.
 *
 * this will mutate `arr` the input array.
 */
export declare function moveItemsInArray(arr: any[], fromIndexes: number[], toIndex: number): void;
/**
 * move items between two arrays safely.
 *
 * this will mutate `fromArr` and `toArr`
 *
 * @param fromArr
 * @param fromIndexes
 * @param toArr
 * @param toIndex
 */
export declare function moveItemsBetweenArrays(fromArr: any[], fromIndexes: number[], toArr: any[], toIndex: number): void;
export declare type FirstParameter<T> = T extends (arg: infer R) => any ? R : never;
export declare type StyledEventLUT<T, S extends EventKeyStyle> = {
    [K in keyof T as ToStyledEventKey<S, K>]: T[K];
};
export declare type EventKeyStyle = "react" | "vue" | "lowercase" | "camelCase" | undefined | null;
declare type ToStyledEventKey<S extends EventKeyStyle, KEY> = KEY extends string ? (S extends "react" ? `on${Capitalize<KEY>}` : S extends "vue" | "lowercase" | "" | undefined | null ? Lowercase<KEY> : KEY) : KEY;
export declare function getStyledEventHandlersLUT<T, S extends EventKeyStyle>(o: T, style: S): StyledEventLUT<T, S>;
export {};
