import { AnyAction, Reducer, Middleware, compose, StoreEnhancer, Store } from 'redux'; import * as React from 'react'; import React__default, { ComponentType, FunctionComponent, Context as Context$1 } from 'react'; import { DefaultMemoizeOptions } from 'reselect'; type AnyComponent = ComponentType | FunctionComponent; type KeyType = string | number | boolean; type PathType = KeyType[]; type Selector = (state?: any, props?: any) => any; type Props = Record; type PartialRecord = Partial>; interface Logic { path: PathType; pathString: string; props: any; lastProps: any; key?: KeyType; keyBuilder?: (props: any) => KeyType; actionCreators: Record; actionKeys: Record; actionTypes: Record; actions: Record; asyncActions: Record; cache: Record; connections: { [pathString: string]: BuiltLogic; }; defaults: Record; reducers: Record; reducer?: ReducerFunction; reducerOptions: Record; selector?: Selector; selectors: Record; values: Record; events: { beforeMount?: () => void; afterMount?: () => void; beforeUnmount?: () => void; afterUnmount?: () => void; propsChanged?: (props: any, oldProps: any) => void; }; listeners?: Record; sharedListeners?: Record; __keaTypeGenInternalSelectorTypes: Record; __keaTypeGenInternalReducerActions: Record; __keaTypeGenInternalExtraInput: Record; } interface BuiltLogicAdditions { _isKeaBuild: boolean; mount: () => () => void; unmount: () => void; isMounted: () => boolean; extend: (extendedInput: LogicInput | LogicInput[]) => LogicWrapper; wrapper: LogicWrapper; } type BuiltLogic = LogicType & BuiltLogicAdditions; interface LogicWrapperAdditions { _isKea: boolean; inputs: (LogicInput | LogicBuilder)[]; (props: T): T extends LogicType['props'] ? BuiltLogic : FunctionComponent; (): BuiltLogic; wrap: (Component: AnyComponent) => KeaComponent; build: (props?: LogicType['props']) => BuiltLogic; mount: () => () => void; unmount: () => void; isMounted: (keyOrProps?: KeyType | Record) => boolean; findMounted: (keyOrProps?: KeyType | Record) => BuiltLogic | null; findAllMounted: () => BuiltLogic[]; find: (keyOrProps?: KeyType | Record) => BuiltLogic; extend: (extendedInput: LogicInput) => LogicWrapper; } type LogicWrapper = LogicType & LogicWrapperAdditions; type LogicBuilder = (logic: BuiltLogic) => void; type PayloadCreatorDefinition = true | ((...args: any[]) => any); type ActionDefinitions = LogicType['actionCreators'] extends Record ? Partial<{ [K in keyof LogicType['actionCreators']]: LogicType['actionCreators'][K] extends Function ? ReturnType['payload']['value'] extends true ? true : (...args: Parameters) => LogicType['actionCreators'][K]['payload'] : never; }> : Record; interface KeaReduxAction extends AnyAction { type: string; payload?: any; } interface KeaAction { (...args: any[]): KeaReduxAction; _isKeaAction: boolean; toString(): string; } type ReducerActions = LogicType['__keaTypeGenInternalReducerActions'] extends Record ? { [K in keyof LogicType['actionCreators']]?: (state: ReducerType, payload: ReturnType['payload']) => ReducerType; } : LogicType['__keaTypeGenInternalReducerActions'] extends Record ? { [K in keyof LogicType['actionCreators']]?: (state: ReducerType, payload: ReturnType['payload']) => ReducerType; } & { [K in keyof LogicType['__keaTypeGenInternalReducerActions']]?: (state: ReducerType, payload: ReturnType['payload']) => ReducerType; } : never; type ReducerDefault any, P extends Props> = ReturnType | ((state: any, props: P) => ReturnType); type ReducerDefinitions = { [K in keyof LogicType['reducers']]?: [ ReducerDefault, Record, ReducerActions> ] | [ ReducerDefault, ReducerActions> ] | [ReducerDefault] | ReducerActions>; }; type ReducerFunction = (state: S, action: KeaReduxAction, fullState: any) => S; type SelectorTuple = [] | [Selector] | [Selector, Selector] | [Selector, Selector, Selector] | [Selector, Selector, Selector, Selector] | [Selector, Selector, Selector, Selector, Selector] | [Selector, Selector, Selector, Selector, Selector, Selector] | [Selector, Selector, Selector, Selector, Selector, Selector, Selector] | [Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector] | [Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector] | [Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector] | [Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector] | [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] | [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] | [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] | [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ] | [ Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector, Selector ]; type SelectorDefinition = [(s: Selectors, p: PropSelectors) => SelectorTuple, SelectorFunction] | [(s: Selectors, p: PropSelectors) => SelectorTuple, SelectorFunction, DefaultMemoizeOptions]; type LogicPropSelectors = { [PK in keyof LogicType['props']]: () => LogicType['props'][PK]; }; type SelectorDefinitions = { [K in keyof LogicType['__keaTypeGenInternalSelectorTypes']]?: SelectorDefinition, LogicType['__keaTypeGenInternalSelectorTypes'][K]>; } | { [key: string]: SelectorDefinition, any>; }; type BreakPointFunction = (() => void) & ((ms: number) => Promise); type ListenerDefinitionsForRecord any>> = { [K in keyof A]?: ListenerFunction> | ListenerFunction>[]; }; type ListenerDefinitions = LogicType['__keaTypeGenInternalReducerActions'] extends Record ? ListenerDefinitionsForRecord : LogicType['__keaTypeGenInternalReducerActions'] extends Record ? ListenerDefinitionsForRecord & ListenerDefinitionsForRecord : never; type EventDefinitions = { beforeMount?: (() => void) | (() => void)[]; afterMount?: (() => void) | (() => void)[]; beforeUnmount?: (() => void) | (() => void)[]; afterUnmount?: (() => void) | (() => void)[]; propsChanged?: ((props: Logic['props'], oldProps: Logic['props']) => void) | ((props: Logic['props'], oldProps: Logic['props']) => void)[]; }; type ListenerFunction = (payload: A['payload'], breakpoint: BreakPointFunction, action: A, previousState: any) => void | Promise; type ListenerFunctionWrapper = (action: any, previousState: any) => void; type SharedListenerDefinitions = Record; type WindowValuesDefinitions = Record any>; type LoaderFunctions = { [K in keyof LogicType['actionCreators']]?: (payload: ReturnType['payload'], breakpoint: BreakPointFunction, action: ReturnType) => ReducerReturnType | Promise; }; type LoaderDefinitions = { [K in keyof LogicType['reducers']]?: (LoaderFunctions> | { __default: ReturnType; }) | [ReturnType, LoaderFunctions>]; }; type ConnectDefinitions = BuiltLogic | LogicWrapper | (BuiltLogic | LogicWrapper)[] | { logic?: (BuiltLogic | LogicWrapper)[]; values?: any[]; actions?: any[]; }; type LogicInput = { inherit?: LogicWrapper[]; extend?: LogicInput[]; key?: (props: LogicType['props']) => KeyType; path?: PathType | ((key: KeyType) => PathType); connect?: ConnectDefinitions | ((props: LogicType['props']) => ConnectDefinitions); actions?: ActionDefinitions | ((logic: LogicType) => ActionDefinitions); reducers?: ReducerDefinitions | ((logic: LogicType) => ReducerDefinitions); selectors?: SelectorDefinitions | ((logic: LogicType) => SelectorDefinitions); listeners?: ListenerDefinitions | ((logic: LogicType) => ListenerDefinitions); sharedListeners?: SharedListenerDefinitions | ((logic: LogicType) => SharedListenerDefinitions); events?: EventDefinitions | ((logic: LogicType) => EventDefinitions); defaults?: ((logic: LogicType) => (state: any, props: LogicType['props']) => Record) | ((logic: LogicType) => Record) | Record; loaders?: LoaderDefinitions | ((logic: LogicType) => LoaderDefinitions); windowValues?: WindowValuesDefinitions | ((logic: LogicType) => WindowValuesDefinitions); urlToAction?: (logic: LogicType) => Record, searchParams: Record, hashParams: Record, payload: { method: 'PUSH' | 'REPLACE' | 'POP'; pathname: string; search: string; searchParams: Record; hash: string; hashParams: Record; url: string; initial?: boolean; }, previousLocation: { method: 'PUSH' | 'REPLACE' | 'POP' | null; pathname: string; search: string; searchParams: Record; hash: string; hashParams: Record; url: string; }) => any>; actionToUrl?: (logic: LogicType) => { [K in keyof LogicType['actionCreators']]?: (payload: Record) => void | string | [string] | [string, string | Record | undefined] | [string, string | Record | undefined, string | Record | undefined] | [ string, string | Record | undefined, string | Record | undefined, { replace?: boolean; } ]; }; [key: string]: unknown; } & LogicType['__keaTypeGenInternalExtraInput']; interface MakeLogicType = Record, Actions = Record, LogicProps = Props> extends Logic { actionCreators: { [ActionKey in keyof Actions]: Actions[ActionKey] extends AnyFunction ? ActionCreatorForPayloadBuilder : never; }; actionKeys: Record; actionTypes: { [ActionKey in keyof Actions]: string; }; actions: { [ActionKey in keyof Actions]: Actions[ActionKey] extends AnyFunction ? ActionForPayloadBuilder : never; }; asyncActions: { [ActionKey in keyof Actions]: Actions[ActionKey] extends AnyFunction ? AsyncActionForPayloadBuilder : never; }; defaults: Values; props: LogicProps; reducer: ReducerFunction; reducers: { [Value in keyof Values]: ReducerFunction; }; selector: (state: any, props: LogicProps) => Values; selectors: { [Value in keyof Values]: (state: any, props: LogicProps) => Values[Value]; }; values: Values; __keaTypeGenInternalSelectorTypes: { [K in keyof Values]: (...args: any) => Values[K]; }; } interface KeaLogicTypeInput { values?: Record; actions?: Record; props?: Props; __keaTypeGenInternalSelectorTypes?: Record; __keaTypeGenInternalReducerActions?: Record; __keaTypeGenInternalExtraInput?: Record; } interface KeaLogicType extends Logic { actionCreators: { [ActionKey in keyof Input['actions']]: Input['actions'][ActionKey] extends AnyFunction ? ActionCreatorForPayloadBuilder : never; }; actionKeys: Record; actionTypes: { [ActionKey in keyof Input['actions']]: string; }; actions: { [ActionKey in keyof Input['actions']]: Input['actions'][ActionKey] extends AnyFunction ? ActionForPayloadBuilder : never; }; defaults: Input['values'] extends Record ? Input['values'] : Record; props: Input['props']; reducer: ReducerFunction; reducers: { [Value in keyof Input['values']]: ReducerFunction; }; selector: (state: any, props: Input['props']) => Input['values']; selectors: { [Value in keyof Input['values']]: (state: any, props: Input['props']) => Input['values'][Value]; }; values: Input['values'] extends Record ? Input['values'] : Record; __keaTypeGenInternalSelectorTypes: Input['__keaTypeGenInternalSelectorTypes'] extends Record ? Input['__keaTypeGenInternalSelectorTypes'] : Record; __keaTypeGenInternalReducerActions: Input['__keaTypeGenInternalReducerActions'] extends Record ? Input['__keaTypeGenInternalReducerActions'] : Record; __keaTypeGenInternalExtraInput: Input['__keaTypeGenInternalExtraInput'] extends Record ? Input['__keaTypeGenInternalExtraInput'] : Record; } type AnyFunction = (...args: any) => any; type ActionCreatorForPayloadBuilder = (...args: Parameters) => { type: string; payload: ReturnType; }; type ActionForPayloadBuilder = (...args: Parameters) => void; type AsyncActionForPayloadBuilder = (...args: Parameters) => Promise; interface CreateStoreOptions { paths: string[]; reducers: Record; preloadedState: Record | undefined; middleware: Middleware[]; compose: typeof compose; enhancers: StoreEnhancer[]; plugins: KeaPlugin[]; } interface InternalContextOptions { debug: boolean; proxyFields: boolean; flatDefaults: boolean; attachStrategy: 'dispatch' | 'replace'; detachStrategy: 'dispatch' | 'replace' | 'persist'; defaultPath: string[]; disableAsyncActions: boolean; } interface ContextOptions extends Partial { plugins?: KeaPlugin[]; createStore?: boolean | Partial; defaults?: Record; } interface KeaComponent extends FunctionComponent { _wrapper: LogicWrapper; _wrappedComponent: AnyComponent; } interface PluginEvents { afterOpenContext?: (context: Context, options: ContextOptions) => void; afterPlugin?: () => void; beforeReduxStore?: (options: CreateStoreOptions) => void; afterReduxStore?: (options: CreateStoreOptions, store: Store) => void; beforeKea?: (input: LogicInput | LogicBuilder) => void; beforeBuild?: (logic: BuiltLogic, inputs: (LogicInput | LogicBuilder)[]) => void; beforeLogic?: (logic: BuiltLogic, input: LogicInput | LogicBuilder) => void; afterLogic?: (logic: BuiltLogic, input: LogicInput | LogicBuilder) => void; legacyBuild?: (logic: BuiltLogic, input: LogicInput) => void; legacyBuildAfterConnect?: (logic: BuiltLogic, input: LogicInput) => void; legacyBuildAfterDefaults?: (logic: BuiltLogic, input: LogicInput) => void; afterBuild?: (logic: BuiltLogic, inputs: (LogicInput | LogicBuilder)[]) => void; beforeMount?: (logic: BuiltLogic) => void; afterMount?: (logic: BuiltLogic) => void; beforeAttach?: (logic: BuiltLogic) => void; afterAttach?: (logic: BuiltLogic) => void; beforeUnmount?: (logic: BuiltLogic) => void; afterUnmount?: (logic: BuiltLogic) => void; beforeDetach?: (logic: BuiltLogic) => void; afterDetach?: (logic: BuiltLogic) => void; beforeWrap?: (wrapper: LogicWrapper, Klass: AnyComponent) => void; afterWrap?: (wrapper: LogicWrapper, Klass: AnyComponent, Kea: KeaComponent) => void; beforeRender?: (logic: BuiltLogic, props: Props) => void; beforeCloseContext?: (context: Context) => void; } type PluginEventArrays = { [K in keyof PluginEvents]: PluginEvents[K][]; }; interface KeaPlugin { name: string; defaults?: () => Record; events?: PluginEvents; } interface WrapperContext { isBuilding: boolean; keyBuilder: L['keyBuilder']; builtLogics: Map>; } interface Context { contextId: string; plugins: { activated: KeaPlugin[]; events: PluginEventArrays; logicFields: Record; contexts: Record>; }; inputCounter: number; reducerDefaults: Record | undefined; wrapperContexts: WeakMap; buildHeap: Logic[]; mount: { counter: Record; mounted: Record; }; react: { contexts: WeakMap>; }; reducers: { tree: any; roots: any; redux: any; whitelist: false | Record; combined: ReducerFunction | undefined; }; store: Store; __store: Store | undefined; options: InternalContextOptions; } declare function isLogicWrapper(logic: any): logic is LogicWrapper; declare function isBuiltLogic(logic: any): logic is BuiltLogic; declare const shallowCompare: (obj1: Record, obj2: Record) => boolean; declare function actions(input: ActionDefinitions | ((logic: L) => ActionDefinitions)): LogicBuilder; declare function createActionCreator(type: string, payloadCreator: PayloadCreatorDefinition): KeaAction; declare function connect(input: ConnectDefinitions | ((props: L['props']) => ConnectDefinitions)): LogicBuilder; declare function addConnection(logic: Logic, otherLogic: Logic): void; declare function defaults(input: ((logic: L) => (state: any, props: L['props']) => Partial<{ [T in keyof L['values']]: L['values'][T]; }>) | ((logic: L) => Partial<{ [T in keyof L['values']]: L['values'][T]; }>) | Partial<{ [T in keyof L['values']]: L['values'][T]; }>): LogicBuilder; declare function events(input: EventDefinitions | ((logic: L) => EventDefinitions)): LogicBuilder; declare function afterMount(input: (logic: L) => void): LogicBuilder; declare function beforeUnmount(input: (logic: L) => void): LogicBuilder; declare function propsChanged(input: (logic: L, oldProps: L['props']) => void): LogicBuilder; declare const isBreakpoint: (error: Error) => boolean; declare function listeners(input: LogicInput['listeners']): LogicBuilder; declare function sharedListeners(input: LogicInput['sharedListeners']): LogicBuilder; declare function reducers(input: ReducerDefinitions | ((logic: L) => ReducerDefinitions)): LogicBuilder; declare function selectors(input: SelectorDefinitions | ((logic: L) => SelectorDefinitions)): LogicBuilder; declare function key(input: (props: L['props']) => KeyType): LogicBuilder; declare function props(input: L['props']): LogicBuilder; declare function path(input: PathType | ((key: KeyType) => PathType)): LogicBuilder; declare const corePlugin: KeaPlugin; declare function kea(input: LogicInput | (LogicBuilder | LogicInput)[]): LogicWrapper; declare function useSelector(selector: Selector): any; declare function useValues(logic: BuiltLogic | LogicWrapper): L['values']; declare function useAllValues(logic: BuiltLogic | LogicWrapper): L['values']; declare function useActions(logic: BuiltLogic | LogicWrapper): L['actions']; declare function useAsyncActions(logic: BuiltLogic | LogicWrapper): L['asyncActions']; declare function useMountedLogic(logic: BuiltLogic | LogicWrapper): BuiltLogic; declare function batchChanges(callback: () => void): void; type BindPropsProps = { logic: LogicWrapper; props: LogicWrapper['props']; children: React.ReactNode; }; declare function BindLogic({ logic, props, children }: BindPropsProps): React.JSX.Element; declare function Provider({ children }: { children: React__default.ReactNode; }): JSX.Element; declare function getContext(): Context; declare function openContext(options?: ContextOptions, initial?: boolean): Context; declare function closeContext(): void; declare function resetContext(options?: ContextOptions, initial?: boolean): Context; declare function getPluginContext>(name: string): Context; declare function setPluginContext = Record>(name: string, pluginContext: Context): void; declare function createStore(opts?: {}): Store | void; declare function keaReducer(pathStart?: string): ReducerFunction; declare function activatePlugin(pluginToActivate: KeaPlugin | (() => KeaPlugin)): void; declare const ATTACH_REDUCER: "@KEA/ATTACH_REDUCER"; declare const DETACH_REDUCER: "@KEA/DETACH_REDUCER"; export { ATTACH_REDUCER, ActionCreatorForPayloadBuilder, ActionDefinitions, ActionForPayloadBuilder, AnyComponent, AnyFunction, AsyncActionForPayloadBuilder, BindLogic, BreakPointFunction, BuiltLogic, BuiltLogicAdditions, ConnectDefinitions, Context, ContextOptions, CreateStoreOptions, DETACH_REDUCER, EventDefinitions, InternalContextOptions, KeaAction, KeaComponent, KeaLogicType, KeaLogicTypeInput, KeaPlugin, KeaReduxAction, KeyType, ListenerDefinitions, ListenerDefinitionsForRecord, ListenerFunction, ListenerFunctionWrapper, Logic, LogicBuilder, LogicInput, LogicPropSelectors, LogicWrapper, LogicWrapperAdditions, MakeLogicType, PartialRecord, PathType, PayloadCreatorDefinition, PluginEventArrays, PluginEvents, Props, Provider, ReducerActions, ReducerDefault, ReducerDefinitions, ReducerFunction, Selector, SelectorDefinition, SelectorDefinitions, SelectorTuple, SharedListenerDefinitions, WrapperContext, actions, activatePlugin, addConnection, afterMount, batchChanges, beforeUnmount, closeContext, connect, corePlugin, createActionCreator, createStore, defaults, events, getContext, getPluginContext, isBreakpoint, isBuiltLogic, isLogicWrapper, kea, keaReducer, key, listeners, openContext, path, props, propsChanged, reducers, resetContext, selectors, setPluginContext, shallowCompare, sharedListeners, useActions, useAllValues, useAsyncActions, useMountedLogic, useSelector, useValues };