declare module 'react-sweet-state' { import type { ComponentType, ReactNode, PropsWithChildren, FunctionComponent, } from 'react'; interface SetState { (newState: Partial): void; } type GetState = () => Readonly; type StoreUnsubscribe = () => void; type RenderPropComponent = ( state: TState, actions: TActions ) => ReactNode; type HookReturnValue = [TState, TActions]; type ActionThunk< TState, TActions extends Record> > = (...args: any) => Action; type Store< TState, TActions extends Record> > = { key: string; initialState: TState; actions: TActions; containedBy?: ContainerComponent; handlers?: { onInit?: () => Action; onUpdate?: () => Action; onDestroy?: () => Action; onContainerUpdate?: ( nextProps: any, prevProps: any ) => Action; }; }; type StoreState = { getState: GetState; setState: SetState; resetState: () => void; notify: () => void; key: string; subscribe: (listener: () => void) => StoreUnsubscribe; mutator: SetState; }; type StoreActionApi = { setState: SetState; getState: GetState; dispatch: >( actionThunk: T ) => ReturnType; }; type Action< TState, TContainerProps = void, TReturnValue = void | Promise > = ( api: StoreActionApi, containerProps: TContainerProps ) => TReturnValue; type BoundActions< TState, TActions extends Record> > = { [K in keyof TActions]: ( ...args: Parameters ) => ReturnType>; }; interface StoreInstance< TState, TActions extends Record> > { storeState: StoreState; actions: BoundActions; } class Registry { stores: Map>; initStore: < TState, TActions extends Record> >( store: Store, key: string ) => StoreInstance; getStore: < TState, TActions extends Record> >( store: Store, scopeId?: string ) => StoreInstance; hasStore: < TState, TActions extends Record> >( store: Store, scopeId?: string ) => boolean; deleteStore: < TState, TActions extends Record> >( store: Store, scopeId?: string ) => void; } const defaultRegistry: Registry; type MiddlewareResult = any; type Middleware = ( storeState: StoreState ) => (next: (arg: any) => MiddlewareResult) => (arg: any) => MiddlewareResult; const defaults: { /** * @deprecated Batching is enabled by default in React 18+ and turning it off will be deprecated in next major */ batchUpdates: boolean; devtools: boolean | ((storeState: StoreState) => Record); middlewares: Set; mutator: (currentState: any, setStateArg: any) => any; }; function batch(callback: () => any): void; type ContainerComponent = | GenericContainerComponent | OverrideContainerComponent; type BaseContainerProps = | { scope?: string; isGlobal?: never } | { scope?: never; isGlobal?: boolean }; interface GenericContainerComponent extends FunctionComponent & TProps> { override?: false; } interface OverrideContainerComponent extends FunctionComponent & TProps> { override: true; } type SubscriberComponent< TState, TActions, TProps = undefined > = ComponentType< { children: RenderPropComponent; } & TProps >; type HookFunction = ( ...args: TArg extends unknown ? TArg extends undefined ? [TArg] | [] : [TArg] : [] ) => HookReturnValue; type HookActionsFunction = () => TActions; type HookStateFunction = ( ...args: TArg extends undefined ? [] : [TArg] ) => TState; /** * createStore */ function createStore< TState extends object, TActions extends Record>, TContainerProps = unknown >( config: | { initialState: TState; actions: TActions; name?: string; containedBy?: never; handlers?: never; } | { initialState: TState; actions: TActions; name?: string; containedBy: GenericContainerComponent; handlers?: { onInit?: () => Action; onUpdate?: () => Action; onDestroy?: () => Action; onContainerUpdate?: ( nextProps: BaseContainerProps & TContainerProps, prevProps: BaseContainerProps & TContainerProps ) => Action; }; } ): Store; /** * createContainer */ function createContainer(options?: { displayName?: string; }): GenericContainerComponent; function createContainer< TState, TActions extends Record>, TContainerProps = unknown >( store: Store, options?: { onInit?: () => Action; onUpdate?: () => Action; onCleanup?: () => Action; displayName?: string; } ): OverrideContainerComponent; /** * createSubscriber */ type Selector = ( state: TState, props: TSubscriberProps ) => TOutput; function createSubscriber< TState, TActions extends Record>, TSelectedState = TState, TSubscriberProps = unknown >( store: Store, options?: { displayName?: string; selector?: Selector | null; } ): SubscriberComponent< TSelectedState, BoundActions, TSubscriberProps >; /** * createHook */ function createHook< TState, TActions extends Record>, TSelectedState = TState, THookArg = void >( store: Store, options?: { selector?: Selector | null; } ): HookFunction, THookArg>; function createActionsHook< TState, TActions extends Record> >( store: Store ): HookActionsFunction>; function createStateHook< TState, TActions extends Record>, TSelectedState = TState, THookArg = void >( store: Store, options?: { selector?: Selector; } ): HookStateFunction; /** * createSelector */ type InputSelector = (state: ST, props: PR) => SE; type OutputSelector = { (state: ST, props: PR, ...rest: any[]): SE; resultFunc(...args: any[]): SE; dependencies: any[]; }; function createSelector( selectors: [InputSelector], resultFn: (arg1: T1) => SE ): OutputSelector; function createSelector( selector1: InputSelector, resultFn: (arg1: T1) => SE ): OutputSelector; function createSelector( selector1: InputSelector, selector2: InputSelector, resultFn: (arg1: T1, arg2: T2) => SE ): OutputSelector; function createSelector( selectors: [InputSelector, InputSelector], resultFn: (arg1: T1, arg2: T2) => SE ): OutputSelector; function createSelector< ST, PR = void, SE = void, T1 = void, T2 = void, T3 = void >( selector1: InputSelector, selector2: InputSelector, selector3: InputSelector, resultFn: (arg1: T1, arg2: T2, arg3: T3) => SE ): OutputSelector; function createSelector< ST, PR = void, SE = void, T1 = void, T2 = void, T3 = void >( selectors: [ InputSelector, InputSelector, InputSelector ], resultFn: (arg1: T1, arg2: T2, arg3: T3) => SE ): OutputSelector; function createSelector< ST, PR = void, SE = void, T1 = void, T2 = void, T3 = void, T4 = void >( selector1: InputSelector, selector2: InputSelector, selector3: InputSelector, selector4: InputSelector, resultFn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => SE ): OutputSelector; function createSelector< ST, PR = void, SE = void, T1 = void, T2 = void, T3 = void, T4 = void >( selectors: [ InputSelector, InputSelector, InputSelector, InputSelector ], resultFn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => SE ): OutputSelector; function createSelector< ST, PR = void, SE = void, T1 = void, T2 = void, T3 = void, T4 = void, T5 = void >( selector1: InputSelector, selector2: InputSelector, selector3: InputSelector, selector4: InputSelector, selector5: InputSelector, resultFn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => SE ): OutputSelector; function createSelector< ST, PR = void, SE = void, T1 = void, T2 = void, T3 = void, T4 = void, T5 = void >( selectors: [ InputSelector, InputSelector, InputSelector, InputSelector, InputSelector ], resultFn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => SE ): OutputSelector; function createSelector< ST, PR = void, SE = void, T1 = void, T2 = void, T3 = void, T4 = void, T5 = void, T6 = void >( selector1: InputSelector, selector2: InputSelector, selector3: InputSelector, selector4: InputSelector, selector5: InputSelector, selector6: InputSelector, resultFn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => SE ): OutputSelector; function createSelector< ST, PR = void, SE = void, T1 = void, T2 = void, T3 = void, T4 = void, T5 = void, T6 = void >( selectors: [ InputSelector, InputSelector, InputSelector, InputSelector, InputSelector, InputSelector ], resultFn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => SE ): OutputSelector; }