import { AnnotationMapEntry, IAtom, IEqualsComparer } from 'mobx'; import { AnyObject, Maybe } from 'yummies/types'; type ObservableAnnotationsArray = [ AnnotationMapEntry, ...(keyof T | (string & {}))[] ][]; declare const applyObservable: (context: T, annotationsArray: ObservableAnnotationsArray, useDecorators?: boolean) => void; interface IEnhancedAtom extends IAtom { meta: TMeta; } /** * Creates an enhanced atom with meta data * And bind `reportChanged` and `reportObserved` method to the atom */ declare const createEnhancedAtom: (name: string, onBecomeObservedHandler?: (atom: IEnhancedAtom) => void, onBecomeUnobservedHandler?: (atom: IEnhancedAtom) => void, meta?: TMeta) => IEnhancedAtom; /** * You can return `false` if you don't want to change the value in this ref */ type RefChangeListener = (value: T | null, prevValue: T | undefined) => void | false; /** * Alternative to React.createRef but works in MobX world. * Typically it the should be the same React.LegacyRef (fn style) */ interface Ref { /** * Setter function */ (value: Maybe): void; set(value: Maybe): void; listeners: Set>>; current: NoInfer | null; meta: TMeta; } interface CreateRefConfig { onSet?: (node: T, prevValue: T | undefined) => void; onUnset?: (lastValue: T | undefined) => void; onChange?: RefChangeListener; meta?: TMeta; initial?: Maybe; comparer?: IEqualsComparer; } /** * Creates ref thing to attach HTMLElements in React and all other */ declare const createRef: (cfg?: CreateRefConfig) => Ref; declare const isRef: (value: T | Ref) => value is Ref; declare const toRef: (value: T | Ref, cfg?: Omit, "initial">) => Ref; declare class DeepObservableStruct { data: TData; constructor(data: TData); set(newData: Partial): void; } type ObservableObjectAdministration = Parameters['make_']>[0]; declare const getMobxAdministration: (context: AnyObject) => ObservableObjectAdministration; /** * When ONE OF the properties is becomes observed then `onStart` function is called. * WHen ALL properties are unobserved then `onEnd` function is called with the `metaData` that was returned by `onStart`. * * It uses `onBecomeObserved` and `onBecomeUnobserved` mobx hooks to perform lazy observation. */ declare const lazyObserve: ({ context, property, onStart, onEnd, endDelay, }: { context?: any; property: any | any[]; onStart?: () => TMetaData; onEnd?: (metaData: TMetaData, cleanupFn: VoidFunction) => void; endDelay?: number | false; }) => () => void; export { DeepObservableStruct, applyObservable, createEnhancedAtom, createRef, getMobxAdministration, isRef, lazyObserve, toRef }; export type { CreateRefConfig, IEnhancedAtom, ObservableAnnotationsArray, Ref, RefChangeListener };