import React from 'react';
import { ModelObject } from '@admin/helpers/misc';
declare const useButtonHover: (debounce?: number) => (boolean | {
    onMouseEnter: () => void;
    onMouseLeave: () => void;
})[];
declare const useStorageState: <T>(name: string, defaultValue: T) => [T, React.Dispatch<T>];
interface BaseModel {
    id: number | string;
}
declare type ModelMiddleware<T> = (models: T[]) => T[];
export declare type SetModelMiddleware<T> = (middleware: ModelMiddleware<T>[]) => void;
declare type CompareFunction<T> = (a: T, b: T) => number;
declare const useModelState: <T extends BaseModel>(defaultValue?: T[], sorter?: CompareFunction<T>) => {
    arrayState: T[];
    objectState: ModelObject<T>;
    setObjectState: (models: ModelObject<T>) => void;
    setArrayState: (models: T[]) => void;
    create: (models: T[]) => void;
    delete: (ids: number[]) => void;
    update: (models: T[]) => void;
    middleware: ModelMiddleware<T>[];
    setMiddleware: React.Dispatch<React.SetStateAction<ModelMiddleware<T>[]>>;
    removeSort: () => void;
    setSort: React.Dispatch<React.SetStateAction<CompareFunction<T>>>;
};
declare class ModelStateWrapper<T extends BaseModel> {
    useModelState: (defaultValue?: T[]) => {
        arrayState: T[];
        objectState: ModelObject<T>;
        setObjectState: (models: ModelObject<T>) => void;
        setArrayState: (models: T[]) => void;
        create: (models: T[]) => void;
        delete: (ids: number[]) => void;
        update: (models: T[]) => void;
        middleware: ModelMiddleware<T>[];
        setMiddleware: React.Dispatch<React.SetStateAction<ModelMiddleware<T>[]>>;
        removeSort: () => void;
        setSort: React.Dispatch<React.SetStateAction<CompareFunction<T>>>;
    };
}
declare type ModelState<T extends BaseModel> = ReturnType<ModelStateWrapper<T>['useModelState']>;
declare type RefChangeCallback<T> = (current: T, previous?: T) => (() => void) | void;
declare const useRefChange: <T = unknown>(callback: RefChangeCallback<T>, initial?: T) => import("@fluentui/react-hooks").RefCallback<T>;
declare const useAllowedPaths: () => any[];
export { useRefChange, useButtonHover, useStorageState, useModelState, useAllowedPaths, ModelState, };
