import type { StateCreator, StoreMutatorIdentifier, StoreApi, Mutate } from "zustand/vanilla"; import { PropType } from "@dhmk/utils"; export declare const meta: unique symbol; export type SetParameter = Partial | ((state: T) => Partial | void) | ((state: T) => T); export type Setter = (partial: SetParameter, replace?: boolean | undefined, ...args: any[]) => void; export type Getter = () => T; type CreateLensPartialSetter = (partial: T | Partial | ((s: T) => T | Partial), replace?: false, ...args: any[]) => any; type CreateLensStateSetter = (state: T | ((state: T) => T), replace: true, ...args: any[]) => any; type CreateLensSetter = CreateLensPartialSetter | CreateLensStateSetter; export declare function createLens(set: CreateLensSetter, get: Getter, path: readonly [...P]): [Setter>, Getter>]; export declare function createLens(set: CreateLensSetter, get: Getter, path: P): [Setter>, Getter>]; type IsAny = 0 extends 1 & T ? true : false; export type ResolveStoreApi = IsAny extends true ? StoreApi : X extends StoreApi ? X : X extends unknown ? StoreApi : unknown; declare class LensTypeInfo { protected __lensType?: T; protected __lensStoreApi?: (lensStoreApi: S) => void; } export type LensOpaqueType = T & LensTypeInfo>; export type LensMetaProps = { postprocess?: (state: T, prevState: T, ...args: unknown[]) => Partial | void; setter?: (set: () => void, ctx: LensContext) => void; }; export type LensMeta = { [p: string | number | symbol]: unknown; [meta]?: LensMetaProps; }; export type LensContext = { set: Setter; get: Getter; api: ResolveStoreApi; rootPath: ReadonlyArray; relativePath: ReadonlyArray; atomic: (fn: () => void) => void; }; export type Lens, Ctx = LensContext> = (set: SetterFn, get: Getter, api: ResolveStoreApi, ctx: Ctx) => T & LensMeta; export declare function lens(fn: Lens>): LensOpaqueType; type CheckLenses> = { [P in keyof T]: T[P] extends LensTypeInfo ? SA extends LSA ? LensOpaqueType : LensOpaqueType : T[P] extends Function ? T[P] : T[P] extends object ? CheckLenses : T[P]; }; type WithLenses = (f: CheckLenses, Mutate, Mps>> | StateCreator, Mutate, Mps>>>) => StateCreator; export declare const withLenses: WithLenses; type Atomic = (f: StateCreator) => StateCreator; export declare const atomic: Atomic; export {};