UNPKG

react-vmodel

Version:

a vue v-model like usage for react with ts prompt

76 lines (66 loc) 2.86 kB
import { Dispatch } from 'react'; import { JSX } from 'react/jsx-runtime'; import { ReactNode } from 'react'; import { SetStateAction } from 'react'; declare type AllPaths<T> = IsAny<T> extends true ? string : T extends number | null | string | boolean | undefined ? undefined : T extends Array<infer E> ? `[${number}]` | (E extends object ? `[${number}].${AllPaths<Exclude<E, undefined>> extends string ? AllPaths<Exclude<E, undefined>> : never}` : never) : T extends object ? { [K in keyof T]-?: K extends string ? `${K}` | `${K}${T[K] extends Array<any> ? "" : "."}${AllPaths<Exclude<T[K], undefined>> extends string ? AllPaths<Exclude<T[K], undefined>> : never}` : never; }[keyof T] : never; declare type IsAny<T> = unknown extends T ? [keyof T] extends [never] ? false : true : false; export declare const makeVModel: <T = any>(state?: T, setState?: (value: T) => void) => { <R extends object>(key?: ObjectKeys<T>, transform?: (value: any, onChange: (e: EventTarget | any) => void) => R): R; <R extends object>(transform?: (value: any, onChange: (e: EventTarget | any) => void) => R): R; number(key?: ObjectKeys<T>): { value: any; onChange: (e: EventTarget | any) => void; }; trim(key?: ObjectKeys<T>): { value: any; onChange: (e: EventTarget | any) => void; }; checked: { (key?: ObjectKeys<T>, options?: { trueValue?: any; falseValue?: any; value?: any; }): { value: any; checked: boolean; onChange: (e: EventTarget | any) => void; }; (options?: { trueValue?: any; falseValue?: any; value?: any; }): { value: any; checked: boolean; onChange: (e: EventTarget | any) => void; }; }; checklist: { (key?: ObjectKeys<T>, options?: { value?: any; }): { value: any; checked: boolean; onChange: (e: EventTarget | any) => void; }; (options?: { value?: any; }): { value: any; checked: boolean; onChange: (e: EventTarget | any) => void; }; }; }; export declare function Model<T = any>({ children, value, onChange }: Props<T>): JSX.Element; export declare type ObjectKeys<T> = T extends Array<any> ? number | AllPaths<T> : AllPaths<T>; declare type Props<T> = { children: (vModel: VModel<T>, value: T, onChange: (value: T) => void) => ReactNode; value?: T; onChange?: (value: T) => void; }; export declare const useVModel: <T>(value: T) => [VModel<T>, T, Dispatch<SetStateAction<T>>]; export declare type VModel<T> = ReturnType<typeof makeVModel<T>>; export { }