import { ComputedRef, Ref, UnwrapRef } from 'vue';
import { Reactive } from '../common/common';
import { ObjectConfigs } from '../common/configs';
type Objects<T> = Record<string, T>;
interface ObjectStateDatumBase {
    id: string;
    selected: boolean;
    hovered: boolean;
    selectable: ComputedRef<boolean | number>;
    zIndex: ComputedRef<number>;
}
type ObjectState<S extends ObjectStateDatumBase> = UnwrapRef<S>;
type PartiallyPartial<T, K extends keyof T> = Pick<T, K> & Partial<Omit<T, K>>;
type NewStateDatum<T extends ObjectStateDatumBase> = PartiallyPartial<T, keyof ObjectStateDatumBase>;
export declare function useObjectState<T, S extends ObjectStateDatumBase, E extends {
    id: string;
    zIndex: number;
} = ObjectState<S>>(objects: Ref<Record<string, T>>, config: ObjectConfigs<T>, selected: Reactive<Set<string>>, hovered: Reactive<Set<string>>, createState: (obj: Ref<Objects<T>>, id: string, state: NewStateDatum<S>) => void, terminateState?: (id: string, state: ObjectState<S>) => void, entriesForZOrder?: () => E[]): {
    states: Record<string, ObjectState<S>>;
    zOrderedList: ComputedRef<E[]>;
};
export {};
