import { DevtoolsOptions as DevtoolsOptions$1, PersistOptions as PersistOptions$1, devtools, persist } from 'zustand/middleware'; import * as zustand from 'zustand'; import { StateCreator, StoreMutatorIdentifier, Mutate, StoreApi } from 'zustand'; import { Draft as Draft$1, PatchesOptions, Options as Options$2 } from 'mutative'; import { Draft } from 'immer'; import { UseBoundStoreWithEqualityFn } from 'zustand/traditional'; type TExtractMutatorFromMiddleware = M extends (initializer: StateCreator, ...rest: any[]) => StateCreator ? Mutators extends [infer Mutator, ...unknown[]] ? Mutator extends [StoreMutatorIdentifier, unknown] ? Mutator : never : never : never; type TFlattenMiddlewares = { [K in keyof Middlewares]: TExtractMutatorFromMiddleware; }; type TMiddleware = (initializer: StateCreator, ...rest: any[]) => StateCreator; type DevtoolsOptions = MiddlewareOption>; declare module 'zustand' { interface StoreMutators { ['zustand/immer-x']: WithImmer; } } type Write$1 = Omit & U; type SkipTwo$1 = T extends { length: 0; } ? [] : T extends { length: 1; } ? [] : T extends { length: 0 | 1; } ? [] : T extends [unknown, unknown, ...infer A] ? A : T extends [unknown, unknown?, ...infer A] ? A : T extends [unknown?, unknown?, ...infer A] ? A : never; type SetStateType$1 = Exclude; type WithImmer = Write$1>; type StoreImmer = S extends { setState: infer SetState; } ? SetState extends { (...a: infer A1): infer Sr1; (...a: infer A2): infer Sr2; } ? { setState(nextStateOrUpdater: SetStateType$1 | Partial> | ((state: Draft>>) => void), shouldReplace?: true, ...a: SkipTwo$1): Sr1; setState(nextStateOrUpdater: SetStateType$1 | ((state: Draft>>) => void), shouldReplace: false, ...a: SkipTwo$1): Sr2; } : never : never; type Options$1 = { enableMapSet?: boolean; enabledAutoFreeze?: boolean; }; type Immer = (initializer: StateCreator, options?: Options$1) => StateCreator; declare const immerMiddleware: Immer; type ImmerOptions = MiddlewareOption; declare module 'zustand/vanilla' { interface StoreMutators { ['zustand/mutative-x']: WithMutative; } } type SetStateType = Exclude; type WithMutative = Write>; type Write = Omit & U; type SkipTwo = T extends { length: 0; } ? [] : T extends { length: 1; } ? [] : T extends { length: 0 | 1; } ? [] : T extends [unknown, unknown, ...infer A] ? A : T extends [unknown, unknown?, ...infer A] ? A : T extends [unknown?, unknown?, ...infer A] ? A : never; type StoreMutative = S extends { setState: infer SetState; } ? SetState extends { (...a: infer A1): infer Sr1; (...a: infer A2): infer Sr2; } ? { setState(nextStateOrUpdater: SetStateType | Partial> | ((state: Draft$1>>) => void), shouldReplace?: true, ...a: SkipTwo): Sr1; setState(nextStateOrUpdater: SetStateType | ((state: Draft$1>>) => void), shouldReplace: false, ...a: SkipTwo): Sr2; } : never : never; type Options = Omit, 'enablePatches'>; type Mutative = (initializer: StateCreator, options?: Options) => StateCreator; declare const mutativeMiddleware: Mutative; type MutativeOptions = MiddlewareOption>; type PersistOptions = MiddlewareOption>>>; type TState = object; type TEqualityChecker = (state: StateType, newState: StateType) => boolean; type TCreatedStoreMutateType = Mutate, Mutators>; type TCreatedStoreType = UseBoundStoreWithEqualityFn>; type MiddlewareOption = boolean | (T & { enabled?: boolean; }); type ArrayElement = T extends (infer E)[] ? E : never; type RemoveNever = T extends [infer First, ...infer Rest] ? [First] extends [never] ? RemoveNever : [First, ...RemoveNever] : []; type TBaseStoreOptions = { name: string; /** * Devtools middleware options. * https://zustand.docs.pmnd.rs/middlewares/devtools */ devtools?: DevtoolsOptions; /** * Immer middleware options. * https://zustand.docs.pmnd.rs/middlewares/immer */ immer?: ImmerOptions; /** * Mutative middleware options. * https://www.npmjs.com/package/mutative */ mutative?: MutativeOptions; /** * Persist middleware options. * https://zustand.docs.pmnd.rs/middlewares/persist */ persist?: PersistOptions; /** * If you're using custom middleware like `immer` and `mutative` * and no need to return new state then set this value to `true`. */ isMutativeState?: boolean; }; type ConditionalMiddleware = T extends { enabled: true; } | true ? Middleware : IsDefault extends true ? T extends { enabled: false; } | false ? never : Middleware : never; type DefaultMutators> = RemoveNever, ConditionalMiddleware>, ConditionalMiddleware, ConditionalMiddleware ]>>; type AnyFunction = (...args: any[]) => any; type TSelectorBuilder = {}, TSelectors extends Record = {}> = (api: TBaseStateApiForBuilder) => Record; type TActionBuilder = {}, TSelectors extends Record = {}> = (api: TBaseStateApiForBuilder) => Record; type TStoreApiGet = {}> = { (key: K): StateType[K]; (key: K, ...args: Parameters): ReturnType; (key: 'state'): ReturnType['getState']>; }; type TStoreApiSet = {}> = { (key: K, value: StateType[K]): void; (key: K, ...args: Parameters): ReturnType; (key: K, callback: (prevVal: StateType[K]) => StateType[K]): void; (key: 'state', value: Parameters['setState']>[0]): void; }; type TStoreApiSubscribe = {}> = { (key: K, listener: (state: StateType[K], previousState: StateType[K]) => void): () => void; (key: K, selector: (state: StateType[K]) => S, listener: (state: S, previousState: S) => void, options?: { equalityFn?: TEqualityChecker; fireImmediately?: boolean; }): () => void; (key: K, ...args: [ ...Parameters, listener: (state: ReturnType, previousState: ReturnType) => void ]): () => void; >(key: K, ...args: [ ...Parameters, selector: (state: ReturnType) => S, listener: (state: S, previousState: S) => void, options?: { equalityFn?: TEqualityChecker; fireImmediately?: boolean; } ]): () => void; (key: 'state', listener: (state: ReturnType['getState']>, previousState: ReturnType['getState']>) => void): () => void; ['getState']>>(key: 'state', selector: (state: ReturnType['getState']>) => S, listener: (state: S, previousState: S) => void, options?: { equalityFn?: TEqualityChecker; fireImmediately?: boolean; }): () => void; }; type TBaseStateApi = {}, TSelectors extends Record = {}> = { name: string; get: TStoreApiGet; set: TStoreApiSet; subscribe: TStoreApiSubscribe; actions: TActions; selectors: TSelectors; store: TCreatedStoreMutateType; extendSelectors>(builder: SelectorBuilder): TBaseStateApi>; extendActions>(builder: ActionBuilder): TBaseStateApi, TSelectors>; }; type TBaseStateApiForBuilder = {}, TSelectors extends Record = {}> = Omit, 'extendActions' | 'extendSelectors'>; declare const extendActions: , unknown][], TActions extends Record, TSelectors extends Record, Builder extends TActionBuilder>(builder: Builder, api: TBaseStateApiForBuilder) => TBaseStateApiForBuilder, TSelectors>; export { type AnyFunction as A, type DefaultMutators as D, type ImmerOptions as I, type MiddlewareOption as M, type PersistOptions as P, type RemoveNever as R, type TState as T, type TBaseStateApi as a, type TCreatedStoreType as b, type TEqualityChecker as c, type TSelectorBuilder as d, type TActionBuilder as e, type TBaseStoreOptions as f, type DevtoolsOptions as g, type MutativeOptions as h, immerMiddleware as i, type TExtractMutatorFromMiddleware as j, type TFlattenMiddlewares as k, type TMiddleware as l, mutativeMiddleware as m, type TStoreApiGet as n, type TStoreApiSet as o, type TStoreApiSubscribe as p, type TBaseStateApiForBuilder as q, type TCreatedStoreMutateType as r, type ArrayElement as s, extendActions as t };