/**
 * useLocalStorageModel persists model state in local storage with optional encryption and cache invalidation controls.
 * This doc block is consumed by vue-docgen for generated API documentation.
 */
import { type Ref } from 'vue';
export interface PersistSlimProps {
    /** enable persistence */
    persist?: boolean;
    /** key name in localStorage (required when persist=true) */
    persistKey?: string;
    /** optional prefix namespace */
    persistPrefix?: string;
    /** write debounce in ms */
    persistDebounce?: number;
    /** remove key when model is empty */
    persistClearOnEmpty?: boolean;
    /** TTL in seconds (optional) */
    persistTtl?: number;
    /** slim encryption (optional) */
    persistEncrypt?: boolean;
    /**
     * slim secret (required if persistEncrypt=true)
     * (you can also set it globally via ls.config)
     */
    persistSecret?: string;
    /** if true, hydrate even when model already has value */
    persistAlwaysHydrate?: boolean;
}
export declare function useLocalStorageModel<T>(model: Ref<T>, props: PersistSlimProps, options?: {
    /** map model -> stored payload */
    serializer?: (v: T) => any;
    /** map stored payload -> model */
    deserializer?: (raw: any) => T;
    /** custom empty checker */
    isEmpty?: (v: T) => boolean;
}): {
    isHydrated: Ref<boolean, boolean>;
    storageKey: import("vue").ComputedRef<string>;
    remove: () => void;
    read: () => unknown;
    write: (val: T) => void;
};
