import type { Accessor, Component, JSX, Setter } from "solid-js"; export type TestPropType = "boolean" | "number" | "string" | "object"; export type TestPropObjectOptions = T[] | Record | any; export type TestPropOptions = (T extends undefined ? { initialValue?: T; } : { initialValue: T; }) & { min?: T extends number ? number : undefined; max?: T extends number ? number : undefined; options?: TestPropObjectOptions; type?: TestPropType; }; export type TestPropReturn = [value: Accessor, setValue: Setter, field: Component]; export type TestPropProps = { name: string; value: Accessor; setValue: Setter; min?: T extends number ? number : undefined; max?: T extends number ? number : undefined; }; export declare const BoolProp: Component>; export declare const NumberProp: Component>; export declare const StringProp: Component>; export declare const SelectProp: (props: TestPropProps & { options: TestPropObjectOptions; }) => JSX.Element; /** * creates a getter, a setter and a form control for a single prop * * @param name {string} The name of the property * @param options initialValue or Options object * * @example ```ts * createControlledProp('value', 'test'); * createControlledProp('page', { initialValue: 7, min: 1, max: 99 }); * createControlledProp('language', { * initialValue: 'en', * options: ['en', 'de', 'it', 'jp', 'cn', 'xy'] * }); * // => { value: Accessor, setValue: Setter, field: Component } * ``` */ export declare function createControlledProp(name: string, options?: TestPropOptions): TestPropReturn; export declare function createControlledProp(name: string, options: TestPropOptions | T): TestPropReturn; export declare function createControlledProp(name: string, options: TestPropOptions | T): TestPropReturn; export declare function createControlledProp(name: string, options: TestPropOptions | T): TestPropReturn; export declare function createControlledProp(name: string, options: TestPropOptions): TestPropReturn; export declare function createControlledProp(name: string, options: T extends undefined ? never : T extends object ? TestPropOptions : TestPropOptions | T): TestPropReturn; export type CreateTestProps = ; }>(props: Props) => [ props: { [name in keyof Props]: Accessor; } & { [name in keyof Props as `set${Capitalize}`]: Setter; }, fields: JSX.Element[] ]; /** * creates reactive props for testing a component * * @param props {Record} * @returns ```ts * [ * props: { [name: string]: Accessor, [setName: string]: Setter } * fields: JSX.Element[] * ] * ``` * You get the fields to render the prop controls and getter and setter names derived from the name in `props` based on common practice, i.e. `count` would automatically translate to * ```ts * { count: Accessor, getCount: Setter } * ``` * @example ```ts * const [props, fields] = createControlledProps({ * value: { initialValue: '' }, * disabled: { initialValue: false }, * invalid: { initialValue: false }, * type: { initialValue: 'text', options: ['text', 'password', 'email'] } * }) * return <> * * {fields} * * ``` */ export declare const createControlledProps: CreateTestProps;