/**
* Turns a React component or stateless render function into a reactive component.
*/
import * as React from "react"
export { useAsObservableSource, useLocalStore, IObserverOptions, Observer } from "mobx-react-lite"
export type IReactComponent
=
| React.StatelessComponent
| React.ComponentClass
| React.ClassicComponentClass
/**
* Observer
*/
export function observer(target: T): T
/**
* Inject
*/
export type IValueMap = { [key: string]: any }
export type IStoresToProps<
S extends IValueMap = {},
P extends IValueMap = {},
I extends IValueMap = {},
C extends IValueMap = {}
> = (stores: S, nextProps: P, context: C) => I
export type IWrappedComponent = {
wrappedComponent: IReactComponent
}
// Ideally we would want to return React.ComponentClass>,
// but TS doesn't allow such things in decorators, like we do in the non-decorator version
// See also #256
export function inject(
...stores: string[]
): >(
target: T
) => T & (T extends IReactComponent ? IWrappedComponent : never)
export function inject(
fn: IStoresToProps
): (target: T) => T & IWrappedComponent
// Ideal implementation:
// export function inject
// (
// fn: IStoresToProps
// ):
//
(target: IReactComponent
) => IReactComponent> & IWrappedComponent>>
//
// Or even better: (but that would require type inference to work other way around)
// export function inject
// (
// fn: IStoresToProps
// ):
// (target: T) => IReactComponent & IWrappedComponent
/**
* disposeOnUnmount
*/
type Disposer = () => void
export function disposeOnUnmount(target: React.Component, propertyKey: string): void
export function disposeOnUnmount(
target: React.Component,
fn: TF
): TF
/**
* Utilities
*/
export class Provider extends React.Component {}
export const MobXProviderContext: React.Context
export function useStaticRendering(value: boolean): void
export function isUsingStaticRendering(): boolean
export const PropTypes: {
observableArray: React.Requireable
observableArrayOf: (type: React.Validator) => React.Requireable
observableMap: React.Requireable
observableObject: React.Requireable
arrayOrObservableArray: React.Requireable
arrayOrObservableArrayOf: (type: React.Validator) => React.Requireable
objectOrObservableObject: React.Requireable
}