declare type Disconnect = { disconnect: () => void; }; export declare class Stateful { protected value: T; private listeners; private queue; constructor(value: T); snapshot(): T; private emit; private flush; protected update(value: T): void; subscribe(callback: (value: T) => void): Disconnect; } export declare class Atom extends Stateful { setState(value: T): void; } declare type SelectorGenerator = (context: { get: (dep: Stateful) => V; }) => T; export declare class Selector extends Stateful { private readonly generate; private registeredDeps; private addDep; private updateSelector; constructor(generate: SelectorGenerator); } export declare function atom(value: { key: string; default: V; }): Atom; export declare function selector(value: { key: string; get: SelectorGenerator; }): Selector; export declare function useCoiledValue(value: Stateful): T; export declare function useCoiledState(atom: Atom): [T, (value: T) => void]; export declare function setCoiledState(atom: Atom): (value: { [K in U]: T[K]; }) => void; export {};