import { Dispatch, SetStateAction } from 'react';

interface UseControllableStateMethods<Y> {
    onChange?: (value: Y) => void;
    onUpdate?: (prev: Y, next: Y) => boolean;
}
interface UseControllableStateProps<Y> extends UseControllableStateMethods<Y> {
    defaultValue?: (() => Y) | Y;
    value?: Y;
}
declare function useControllableState<Y>(props: {
    value: Y;
    defaultValue?: (() => Y) | Y;
} & UseControllableStateMethods<Y>): [Y, Dispatch<SetStateAction<Y>>];
declare function useControllableState<Y>(props: {
    defaultValue: (() => Y) | Y;
    value?: Y;
} & UseControllableStateMethods<Y>): [Y, Dispatch<SetStateAction<Y>>];
declare function useControllableState<Y>(props: UseControllableStateProps<Y>): [Y, Dispatch<SetStateAction<Y>>];

export { type UseControllableStateProps, useControllableState };
