import { create, StateCreator } from 'zustand'; import { HydrationState, ResetState } from './types'; /** * App store configuration options */ export interface AppStoreConfig { /** Store name for DevTools */ name: string; /** Persistence configuration */ persist?: { /** Storage key */ key: string; /** State to persist (whitelist) */ partialize?: (state: TState) => Partial; /** Storage version for migrations */ version?: number; /** Migration functions */ migrate?: (persistedState: unknown, version: number) => TState; /** Skip hydration */ skipHydration?: boolean; }; /** Enable DevTools (default: true in dev) */ devtools?: boolean; /** Custom DevTools options */ devtoolsOptions?: { enabled?: boolean; anonymousActionType?: string; trace?: boolean; traceLimit?: number; }; } /** * Full middleware stack type for proper inference */ type FullMiddleware = [ [ 'zustand/immer', never ], [ 'zustand/devtools', never ], [ 'zustand/subscribeWithSelector', never ], [ 'zustand/persist', unknown ] ]; /** * Create a type-safe Zustand store with all middleware * * Middleware order (inside-out): * 1. immer - Enables immutable updates with mutable syntax * 2. devtools - Redux DevTools integration with action names * 3. subscribeWithSelector - Granular subscriptions for performance * 4. persist - Optional state persistence to localStorage * * @example * ```typescript * const useStore = createAppStore( * (set, get) => ({ * count: 0, * increment: () => set((state) => { state.count += 1 }, false, { type: 'increment' }), * }), * { name: 'CounterStore' } * ); * ``` */ export declare function createAppStore(initializer: StateCreator, config: AppStoreConfig): ReturnType>; /** * Create a simple Zustand store with Immer and DevTools * Use this for stores that don't need persistence * * @example * ```typescript * const useUIStore = createSimpleStore( * (set) => ({ * isOpen: false, * toggle: () => set((state) => { state.isOpen = !state.isOpen }, false, { type: 'toggle' }), * }), * 'UIStore' * ); * ``` */ export declare function createSimpleStore(initializer: StateCreator, name: string, enableDevtools?: boolean): ReturnType>; /** * Create a minimal Zustand store with just Immer * Use this for simple local stores * * @example * ```typescript * const useLocalStore = createMinimalStore((set) => ({ * items: [], * addItem: (item) => set((state) => { state.items.push(item) }), * })); * ``` */ export declare function createMinimalStore(initializer: StateCreator): ReturnType>; /** * Wait for store hydration to complete */ export declare function waitForHydration(store: { getState: () => TState; subscribe: (selector: (state: TState) => boolean, callback: (value: boolean) => void) => () => void; }): Promise; /** * Create a reset function for a store */ export declare function createStoreReset(store: { getState: () => TState; }): () => void; export {};