import { Context } from 'react';
import { Atom, Scope } from './atom';
import { Store } from './store';
declare type VersionedWrite = (write: (version?: object) => void) => void;
export declare type ScopeContainer = {
    s: Store;
    w?: VersionedWrite;
};
export declare const createScopeContainer: (initialValues?: Iterable<readonly [
    Atom<unknown>,
    unknown
]> | undefined, unstable_createStore?: ((initialValues?: Iterable<readonly [
    {
        toString: () => string;
        debugLabel?: string;
        read: (get: {
            <Value>(atom: Atom<Value | Promise<Value>>): Value;
            <Value_1>(atom: Atom<Promise<Value_1>>): Value_1;
            <Value_2>(atom: Atom<Value_2>): Value_2 extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? any : V : V : V : V : V : V : V : V : V : V : Value_2;
        }) => unknown;
    },
    unknown
]> | undefined) => {
    get: <Value_3>(atom: Atom<Value_3>) => (Value_3 extends Promise<infer V_1> ? V_1 extends Promise<infer V_1> ? V_1 extends Promise<infer V_1> ? V_1 extends Promise<infer V_1> ? V_1 extends Promise<infer V_1> ? V_1 extends Promise<infer V_1> ? V_1 extends Promise<infer V_1> ? V_1 extends Promise<infer V_1> ? V_1 extends Promise<infer V_1> ? V_1 extends Promise<infer V_1> ? V_1 extends Promise<infer V_1> ? any : V_1 : V_1 : V_1 : V_1 : V_1 : V_1 : V_1 : V_1 : V_1 : V_1 : Value_3) | undefined;
    asyncGet: <Value_4>(atom: Atom<Value_4>) => Promise<Value_4 extends Promise<infer V_1> ? V_1 extends Promise<infer V_1> ? V_1 extends Promise<infer V_1> ? V_1 extends Promise<infer V_1> ? V_1 extends Promise<infer V_1> ? V_1 extends Promise<infer V_1> ? V_1 extends Promise<infer V_1> ? V_1 extends Promise<infer V_1> ? V_1 extends Promise<infer V_1> ? V_1 extends Promise<infer V_1> ? V_1 extends Promise<infer V_1> ? any : V_1 : V_1 : V_1 : V_1 : V_1 : V_1 : V_1 : V_1 : V_1 : V_1 : Value_4>;
    set: <Value_5, Update, Result extends void | Promise<void>>(atom: import("./atom").WritableAtom<Value_5, Update, Result>, update: Update) => Result;
    sub: (atom: {
        toString: () => string;
        debugLabel?: string;
        read: (get: {
            <Value>(atom: Atom<Value | Promise<Value>>): Value;
            <Value_1>(atom: Atom<Promise<Value_1>>): Value_1;
            <Value_2>(atom: Atom<Value_2>): Value_2 extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? any : V : V : V : V : V : V : V : V : V : V : Value_2;
        }) => unknown;
    }, callback: () => void) => () => void;
    SECRET_INTERNAL_store: {
        r: <Value_6>(readingAtom: Atom<Value_6>, version?: import("./store").VersionObject | undefined) => import("./store").AtomState<Value_6>;
        w: <Value_7, Update_1, Result_1 extends void | Promise<void>>(writingAtom: import("./atom").WritableAtom<Value_7, Update_1, Result_1>, update: Update_1, version?: import("./store").VersionObject | undefined) => Result_1;
        c: (_atom: {
            toString: () => string;
            debugLabel?: string;
            read: (get: {
                <Value>(atom: Atom<Value | Promise<Value>>): Value;
                <Value_1>(atom: Atom<Promise<Value_1>>): Value_1;
                <Value_2>(atom: Atom<Value_2>): Value_2 extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? any : V : V : V : V : V : V : V : V : V : V : Value_2;
            }) => unknown;
        } | null, version?: import("./store").VersionObject | undefined) => void;
        s: (atom: {
            toString: () => string;
            debugLabel?: string;
            read: (get: {
                <Value>(atom: Atom<Value | Promise<Value>>): Value;
                <Value_1>(atom: Atom<Promise<Value_1>>): Value_1;
                <Value_2>(atom: Atom<Value_2>): Value_2 extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? any : V : V : V : V : V : V : V : V : V : V : Value_2;
            }) => unknown;
        }, callback: (version?: import("./store").VersionObject | undefined) => void) => () => void;
        h: (values: Iterable<readonly [
            {
                toString: () => string;
                debugLabel?: string;
                read: (get: {
                    <Value>(atom: Atom<Value | Promise<Value>>): Value;
                    <Value_1>(atom: Atom<Promise<Value_1>>): Value_1;
                    <Value_2>(atom: Atom<Value_2>): Value_2 extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? any : V : V : V : V : V : V : V : V : V : V : Value_2;
                }) => unknown;
            },
            unknown
        ]>, version?: import("./store").VersionObject | undefined) => void;
        n: (l: () => void) => () => void;
        l: () => IterableIterator<{
            toString: () => string;
            debugLabel?: string;
            read: (get: {
                <Value>(atom: Atom<Value | Promise<Value>>): Value;
                <Value_1>(atom: Atom<Promise<Value_1>>): Value_1;
                <Value_2>(atom: Atom<Value_2>): Value_2 extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? any : V : V : V : V : V : V : V : V : V : V : Value_2;
            }) => unknown;
        }>;
        a: (a: {
            toString: () => string;
            debugLabel?: string;
            read: (get: {
                <Value>(atom: Atom<Value | Promise<Value>>): Value;
                <Value_1>(atom: Atom<Promise<Value_1>>): Value_1;
                <Value_2>(atom: Atom<Value_2>): Value_2 extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? any : V : V : V : V : V : V : V : V : V : V : Value_2;
            }) => unknown;
        }) => import("./store").AtomState<unknown> | undefined;
        m: (a: {
            toString: () => string;
            debugLabel?: string;
            read: (get: {
                <Value>(atom: Atom<Value | Promise<Value>>): Value;
                <Value_1>(atom: Atom<Promise<Value_1>>): Value_1;
                <Value_2>(atom: Atom<Value_2>): Value_2 extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? any : V : V : V : V : V : V : V : V : V : V : Value_2;
            }) => unknown;
        }) => {
            l: Set<(version?: import("./store").VersionObject | undefined) => void>;
            t: Set<{
                toString: () => string;
                debugLabel?: string;
                read: (get: {
                    <Value>(atom: Atom<Value | Promise<Value>>): Value;
                    <Value_1>(atom: Atom<Promise<Value_1>>): Value_1;
                    <Value_2>(atom: Atom<Value_2>): Value_2 extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? any : V : V : V : V : V : V : V : V : V : V : Value_2;
                }) => unknown;
            }>;
            u?: () => void;
        } | undefined;
    } | {
        r: <Value_6>(readingAtom: Atom<Value_6>, version?: import("./store").VersionObject | undefined) => import("./store").AtomState<Value_6>;
        w: <Value_7, Update_1, Result_1 extends void | Promise<void>>(writingAtom: import("./atom").WritableAtom<Value_7, Update_1, Result_1>, update: Update_1, version?: import("./store").VersionObject | undefined) => Result_1;
        c: (_atom: {
            toString: () => string;
            debugLabel?: string;
            read: (get: {
                <Value>(atom: Atom<Value | Promise<Value>>): Value;
                <Value_1>(atom: Atom<Promise<Value_1>>): Value_1;
                <Value_2>(atom: Atom<Value_2>): Value_2 extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? any : V : V : V : V : V : V : V : V : V : V : Value_2;
            }) => unknown;
        } | null, version?: import("./store").VersionObject | undefined) => void;
        s: (atom: {
            toString: () => string;
            debugLabel?: string;
            read: (get: {
                <Value>(atom: Atom<Value | Promise<Value>>): Value;
                <Value_1>(atom: Atom<Promise<Value_1>>): Value_1;
                <Value_2>(atom: Atom<Value_2>): Value_2 extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? any : V : V : V : V : V : V : V : V : V : V : Value_2;
            }) => unknown;
        }, callback: (version?: import("./store").VersionObject | undefined) => void) => () => void;
        h: (values: Iterable<readonly [
            {
                toString: () => string;
                debugLabel?: string;
                read: (get: {
                    <Value>(atom: Atom<Value | Promise<Value>>): Value;
                    <Value_1>(atom: Atom<Promise<Value_1>>): Value_1;
                    <Value_2>(atom: Atom<Value_2>): Value_2 extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? V extends Promise<infer V> ? any : V : V : V : V : V : V : V : V : V : V : Value_2;
                }) => unknown;
            },
            unknown
        ]>, version?: import("./store").VersionObject | undefined) => void;
        n?: never;
        l?: never;
        a?: never;
        m?: never;
    };
}) | undefined) => ScopeContainer;
declare type ScopeContext = Context<ScopeContainer>;
export declare const getScopeContext: (scope?: Scope | undefined) => ScopeContext;
export {};
