/**
 * Kosha: A lightweight global state management library for React.
 *
 * @template T - The type of the state object.
 * @param {(set: (state: StateSetterArgType<T>) => void, get: () => T | null) => T} storeCreator
 * A function that initializes the store with its state and actions.
 * @returns {(selectorFunc?: (state: T) => U) => U}
 * A custom React hook to read and subscribe to state slices.
 */
export type Immutable<T> = {
    readonly [K in keyof T]: T[K] extends object ? T[K] extends Function ? T[K] : Immutable<T[K]> : T[K];
};
export type Mutable<T> = {
    -readonly [K in keyof T]: T[K] extends object ? T[K] extends Function ? T[K] : Mutable<T[K]> : T[K];
};
export type BaseType = Omit<object, "__get">;
export type StateSetterArgType<T> = ((newState: Immutable<T>) => T | Partial<T>) | Partial<T> | T;
export type StateSetter<T> = {
    (state: StateSetterArgType<T>, replace?: false): void;
    (state: ((newState: Immutable<T>) => T) | T, replace: true): void;
};
export type StoreCreator<T extends BaseType> = (set: StateSetter<T>, get: () => T | null) => T & {
    __get?: () => T | null;
};
export type SliceCreator<TStore extends BaseType, TSlice = Partial<TStore>> = (set: StateSetter<TStore>, get: () => TStore | null) => TSlice;
export type Middleware<T extends BaseType> = (storeCreator: StoreCreator<T>) => StoreCreator<T>;
export declare const create: <T extends BaseType>(storeCreator: StoreCreator<T>) => {
    (): T;
    <U>(selectorFunc: (state: T) => U): U;
    getState: () => T | null;
    setState: StateSetter<T>;
};
