@connect-soft/form-generator 1.0.0 → 1.1.0-alpha3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,12 @@
1
+ import { BaseField, FormItem } from '@/lib';
2
+ export interface FieldRendererProps {
3
+ field: BaseField;
4
+ namePrefix?: string;
5
+ }
6
+ export declare const FieldRenderer: import("react").MemoExoticComponent<({ field, namePrefix }: FieldRendererProps) => import("react/jsx-runtime").JSX.Element | null>;
7
+ export interface FormItemRendererProps {
8
+ item: FormItem;
9
+ namePrefix?: string;
10
+ }
11
+ export declare const FormItemRenderer: import("react").MemoExoticComponent<({ item, namePrefix }: FormItemRendererProps) => import("react/jsx-runtime").JSX.Element | null>;
12
+ //# sourceMappingURL=field-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-renderer.d.ts","sourceRoot":"","sources":["../../../../src/components/form/field-renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAKH,SAAS,EACT,QAAQ,EAIX,MAAM,OAAO,CAAC;AAMf,MAAM,WAAW,kBAAkB;IAC/B,KAAK,EAAE,SAAS,CAAC;IAEjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,aAAa,8DAAgC,kBAAkB,oDAsF1E,CAAC;AAgFH,MAAM,WAAW,qBAAqB;IAClC,IAAI,EAAE,QAAQ,CAAC;IAEf,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,gBAAgB,6DAA+B,qBAAqB,oDAmB/E,CAAC"}
@@ -0,0 +1,41 @@
1
+ import React from 'react';
2
+ import { UseFormReturn } from 'react-hook-form';
3
+ import { z } from 'zod';
4
+ import { FormItem, InferFormValues } from '@/lib';
5
+ interface FormGeneratorBaseProps {
6
+ className?: string;
7
+ submitText?: string;
8
+ disabled?: boolean;
9
+ mode?: 'onChange' | 'onBlur' | 'onSubmit' | 'onTouched' | 'all';
10
+ ref?: React.Ref<FormGeneratorRef<any>>;
11
+ }
12
+ export interface FormGeneratorPropsWithSchema<TSchema extends z.ZodType> extends FormGeneratorBaseProps {
13
+ fields: readonly FormItem[];
14
+ schema: TSchema;
15
+ onSubmit: (values: z.infer<TSchema>) => void | Promise<void>;
16
+ defaultValues?: Partial<z.infer<TSchema>>;
17
+ }
18
+ export interface FormGeneratorPropsWithoutSchema<TFields extends readonly FormItem[]> extends FormGeneratorBaseProps {
19
+ fields: TFields;
20
+ schema?: undefined;
21
+ onSubmit: (values: InferFormValues<TFields>) => void | Promise<void>;
22
+ defaultValues?: Partial<InferFormValues<TFields>>;
23
+ }
24
+ export type FormGeneratorProps<TSchema extends z.ZodType = z.ZodType, TFields extends readonly FormItem[] = readonly FormItem[]> = FormGeneratorPropsWithSchema<TSchema> | FormGeneratorPropsWithoutSchema<TFields>;
25
+ export interface FormGeneratorRef<TValues extends Record<string, any> = Record<string, any>> {
26
+ setValues: (values: Partial<TValues>) => void;
27
+ getValues: () => TValues;
28
+ reset: (values?: Partial<TValues>) => void;
29
+ submit: () => Promise<void>;
30
+ clearErrors: () => void;
31
+ setError: (name: keyof TValues, error: {
32
+ type: string;
33
+ message: string;
34
+ }) => void;
35
+ isValid: () => boolean;
36
+ isDirty: () => boolean;
37
+ form: UseFormReturn<TValues>;
38
+ }
39
+ export declare const FormGenerator: <TSchema extends z.ZodType = z.ZodType, TFields extends readonly FormItem[] = readonly FormItem[]>(props: FormGeneratorProps<TSchema, TFields>) => React.ReactElement;
40
+ export {};
41
+ //# sourceMappingURL=form-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-generator.d.ts","sourceRoot":"","sources":["../../../../src/components/form/form-generator.tsx"],"names":[],"mappings":"AACA,OAAO,KAA+C,MAAM,OAAO,CAAC;AACpE,OAAO,EAAyB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAIH,QAAQ,EAIR,eAAe,EAClB,MAAM,OAAO,CAAC;AA8Lf,UAAU,sBAAsB;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,KAAK,CAAC;IAEhE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;CAC1C;AAMD,MAAM,WAAW,4BAA4B,CAAC,OAAO,SAAS,CAAC,CAAC,OAAO,CAAE,SAAQ,sBAAsB;IACnG,MAAM,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;CAC7C;AAMD,MAAM,WAAW,+BAA+B,CAAC,OAAO,SAAS,SAAS,QAAQ,EAAE,CAAE,SAAQ,sBAAsB;IAChH,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,aAAa,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;CACrD;AAED,MAAM,MAAM,kBAAkB,CAC1B,OAAO,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,EACrC,OAAO,SAAS,SAAS,QAAQ,EAAE,GAAG,SAAS,QAAQ,EAAE,IACzD,4BAA4B,CAAC,OAAO,CAAC,GAAG,+BAA+B,CAAC,OAAO,CAAC,CAAC;AAMrF,MAAM,WAAW,gBAAgB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAEvF,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAE9C,SAAS,EAAE,MAAM,OAAO,CAAC;IAEzB,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAE3C,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B,WAAW,EAAE,MAAM,IAAI,CAAC;IAExB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,OAAO,EAAE,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAElF,OAAO,EAAE,MAAM,OAAO,CAAC;IAEvB,OAAO,EAAE,MAAM,OAAO,CAAC;IAEvB,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CAChC;AAuGD,eAAO,MAAM,aAAa,EAAwB,CAC9C,OAAO,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,EACrC,OAAO,SAAS,SAAS,QAAQ,EAAE,GAAG,SAAS,QAAQ,EAAE,EAEzD,KAAK,EAAE,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,KAC1C,KAAK,CAAC,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { FieldRenderer, FormItemRenderer } from './field-renderer';
2
+ export type { FieldRendererProps, FormItemRendererProps } from './field-renderer';
3
+ export { FormGenerator } from './form-generator';
4
+ export type { FormGeneratorProps, FormGeneratorPropsWithSchema, FormGeneratorPropsWithoutSchema, FormGeneratorRef } from './form-generator';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/form/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACnE,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAElF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EACR,kBAAkB,EAClB,4BAA4B,EAC5B,+BAA+B,EAC/B,gBAAgB,EACnB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,15 @@
1
+ export { FormGenerator } from './components/form/form-generator';
2
+ export type { FormGeneratorProps } from './components/form/form-generator';
3
+ export { FieldRenderer } from './components/form/field-renderer';
4
+ export type { FieldRendererProps } from './components/form/field-renderer';
5
+ export * from './lib/field-types';
6
+ export { registerField, registerFields, getFieldComponent, hasFieldType, unregisterField, getRegisteredFieldTypes, clearFieldRegistry } from './lib/field-registry';
7
+ export type { FieldComponentProps, FieldComponent, RegistrationConfig } from './lib/field-registry';
8
+ export { registerFormComponents, registerFormComponent, getFormComponent, hasFormComponent, getFormComponents, clearFormComponentRegistry, resetFormComponentRegistry, clearAllRegistries } from './lib/field-registry';
9
+ export type { FormComponents, FormItemProps, FormInputLabelWrapperProps, FormLabelProps, FormDescriptionProps, FormMessageProps, SubmitButtonProps } from './lib/field-registry';
10
+ export { registerLayoutComponents, registerLayoutComponent, getLayoutComponent, hasLayoutComponent, clearLayoutRegistry } from './lib/field-registry';
11
+ export type { LayoutComponents, ColumnsLayoutProps, SectionLayoutProps } from './lib/field-registry';
12
+ export { useForm, useFormContext, useWatch, useFieldArray, Controller, FormProvider } from 'react-hook-form';
13
+ export type { FieldValues, UseFormReturn, FieldPath, ControllerRenderProps } from 'react-hook-form';
14
+ export { z } from 'zod';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,YAAY,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,YAAY,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAG3E,cAAc,mBAAmB,CAAC;AAGlC,OAAO,EACH,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EACrB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAGpG,OAAO,EACH,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,0BAA0B,EAC1B,kBAAkB,EACrB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACR,cAAc,EACd,aAAa,EACb,0BAA0B,EAC1B,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACpB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACH,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAGrG,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7G,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAGpG,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC"}
@@ -0,0 +1,114 @@
1
+ import { z } from 'zod';
2
+ import type { BaseField, ColumnsLayout, SectionLayout, FormItem } from './field-types';
3
+ import type { ComponentType, ReactNode, Ref } from 'react';
4
+ export type ValidatorFactory<TField extends BaseField = BaseField> = (field: TField) => z.ZodType<any>;
5
+ export interface FieldState {
6
+ invalid: boolean;
7
+ error?: {
8
+ type: string;
9
+ message?: string;
10
+ };
11
+ isDirty: boolean;
12
+ isTouched: boolean;
13
+ }
14
+ export interface FieldComponentProps<TField extends BaseField = BaseField> {
15
+ field: TField;
16
+ formField: {
17
+ value: any;
18
+ onChange: (value: any) => void;
19
+ onBlur: () => void;
20
+ name: string;
21
+ ref: Ref<any>;
22
+ };
23
+ fieldState: FieldState;
24
+ }
25
+ export type FieldComponent<TField extends BaseField = BaseField> = ComponentType<FieldComponentProps<TField>>;
26
+ export interface FieldRegistrationOptions {
27
+ className?: string;
28
+ labelClassName?: string;
29
+ inputLabelWrapper?: string;
30
+ inputLabelWrapperOrientation?: FormInputLabelWrapperProps['orientation'];
31
+ descriptionClassName?: string;
32
+ messageClassName?: string;
33
+ validator?: ValidatorFactory<any>;
34
+ }
35
+ export interface FormItemProps {
36
+ className?: string;
37
+ children: ReactNode;
38
+ }
39
+ export interface FormInputLabelWrapperProps {
40
+ className?: string;
41
+ orientation?: 'horizontal' | 'vertical';
42
+ children: ReactNode;
43
+ }
44
+ export interface FormLabelProps {
45
+ className?: string;
46
+ children: ReactNode;
47
+ required?: boolean;
48
+ htmlFor?: string;
49
+ }
50
+ export interface FormDescriptionProps {
51
+ className?: string;
52
+ children: ReactNode;
53
+ }
54
+ export interface FormMessageProps {
55
+ className?: string;
56
+ name: string;
57
+ }
58
+ export interface SubmitButtonProps {
59
+ className?: string;
60
+ children: ReactNode;
61
+ disabled?: boolean;
62
+ isSubmitting?: boolean;
63
+ }
64
+ export interface FormComponents {
65
+ FormItem: ComponentType<FormItemProps>;
66
+ FormInputLabelWrapper: ComponentType<FormInputLabelWrapperProps>;
67
+ FormLabel: ComponentType<FormLabelProps>;
68
+ FormDescription: ComponentType<FormDescriptionProps>;
69
+ FormMessage: ComponentType<FormMessageProps>;
70
+ SubmitButton: ComponentType<SubmitButtonProps>;
71
+ }
72
+ export interface ColumnsLayoutProps {
73
+ layout: ColumnsLayout;
74
+ renderItem: (item: FormItem, index: number) => ReactNode;
75
+ }
76
+ export interface SectionLayoutProps {
77
+ layout: SectionLayout;
78
+ renderItem: (item: FormItem, index: number) => ReactNode;
79
+ }
80
+ export interface LayoutComponents {
81
+ Columns: ComponentType<ColumnsLayoutProps>;
82
+ Section: ComponentType<SectionLayoutProps>;
83
+ }
84
+ export interface RegistrationConfig {
85
+ override?: boolean | 'only';
86
+ }
87
+ export declare function registerField<TField extends BaseField>(type: TField['type'], component: FieldComponent<TField>, options?: FieldRegistrationOptions, config?: RegistrationConfig): void;
88
+ export type FieldDefinition = FieldComponent<any> | {
89
+ component: FieldComponent<any>;
90
+ options?: FieldRegistrationOptions;
91
+ };
92
+ export declare function registerFields(fields: Record<string, FieldDefinition>, config?: RegistrationConfig): void;
93
+ export declare function getFieldComponent<TField extends BaseField>(type: string): FieldComponent<TField>;
94
+ export declare function getFieldClassName(type: string): string | undefined;
95
+ export declare function getFieldOptions(type: string): FieldRegistrationOptions | undefined;
96
+ export declare function getFieldValidator(type: string): ValidatorFactory<any> | undefined;
97
+ export declare function hasFieldType(type: string): boolean;
98
+ export declare function unregisterField(type: string): boolean;
99
+ export declare function getRegisteredFieldTypes(): string[];
100
+ export declare function registerFormComponents(components: Partial<FormComponents>, config?: RegistrationConfig): void;
101
+ export declare function registerFormComponent<K extends keyof FormComponents>(name: K, component: FormComponents[K], config?: RegistrationConfig): void;
102
+ export declare function getFormComponent<K extends keyof FormComponents>(name: K): FormComponents[K];
103
+ export declare function hasFormComponent(name: keyof FormComponents): boolean;
104
+ export declare function getFormComponents(): Partial<FormComponents>;
105
+ export declare function registerLayoutComponents(components: Partial<LayoutComponents>, config?: RegistrationConfig): void;
106
+ export declare function registerLayoutComponent<K extends keyof LayoutComponents>(name: K, component: LayoutComponents[K], config?: RegistrationConfig): void;
107
+ export declare function getLayoutComponent<K extends keyof LayoutComponents>(name: K): LayoutComponents[K] | undefined;
108
+ export declare function hasLayoutComponent(name: keyof LayoutComponents): boolean;
109
+ export declare function clearLayoutRegistry(): void;
110
+ export declare function clearFieldRegistry(): void;
111
+ export declare function clearFormComponentRegistry(): void;
112
+ export declare function resetFormComponentRegistry(): void;
113
+ export declare function clearAllRegistries(): void;
114
+ //# sourceMappingURL=field-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-registry.d.ts","sourceRoot":"","sources":["../../../src/lib/field-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ import { z } from 'zod';
2
+ export interface BaseField<TType extends string = string, TValue = any> {
3
+ type: TType;
4
+ name: string;
5
+ label?: string;
6
+ description?: string;
7
+ required?: boolean;
8
+ disabled?: boolean;
9
+ hidden?: boolean;
10
+ defaultValue?: TValue;
11
+ validation?: z.ZodType<TValue>;
12
+ className?: string;
13
+ }
14
+ export interface FieldOption {
15
+ label: string;
16
+ value: string;
17
+ disabled?: boolean;
18
+ }
19
+ export type CreateFieldType<TType extends string, TValue = any, TProps extends Record<string, any> = object> = BaseField<TType, TValue> & TProps;
20
+ export interface TextFieldProps {
21
+ placeholder?: string;
22
+ minLength?: number;
23
+ maxLength?: number;
24
+ }
25
+ export interface NumberFieldProps {
26
+ placeholder?: string;
27
+ min?: number;
28
+ max?: number;
29
+ step?: number;
30
+ }
31
+ export interface OptionsFieldProps {
32
+ options: FieldOption[];
33
+ placeholder?: string;
34
+ }
35
+ export interface TextareaFieldProps {
36
+ placeholder?: string;
37
+ rows?: number;
38
+ minLength?: number;
39
+ maxLength?: number;
40
+ }
41
+ export interface FieldTypeRegistry {
42
+ 'text': CreateFieldType<'text', string, TextFieldProps & {
43
+ fieldType?: 'text' | 'email' | 'password' | 'tel' | 'url' | 'search';
44
+ }>;
45
+ 'email': CreateFieldType<'email', string, TextFieldProps>;
46
+ 'password': CreateFieldType<'password', string, TextFieldProps>;
47
+ 'tel': CreateFieldType<'tel', string, TextFieldProps>;
48
+ 'url': CreateFieldType<'url', string, TextFieldProps>;
49
+ 'search': CreateFieldType<'search', string, TextFieldProps>;
50
+ 'number': CreateFieldType<'number', number, NumberFieldProps>;
51
+ 'range': CreateFieldType<'range', number, NumberFieldProps>;
52
+ 'textarea': CreateFieldType<'textarea', string, TextareaFieldProps>;
53
+ 'checkbox': CreateFieldType<'checkbox', boolean>;
54
+ 'switch': CreateFieldType<'switch', boolean>;
55
+ 'select': CreateFieldType<'select', string, OptionsFieldProps>;
56
+ 'radio': CreateFieldType<'radio', string, OptionsFieldProps>;
57
+ 'date': CreateFieldType<'date', Date>;
58
+ 'time': CreateFieldType<'time', string>;
59
+ 'datetime': CreateFieldType<'datetime', Date>;
60
+ 'datetime-local': CreateFieldType<'datetime-local', Date>;
61
+ 'month': CreateFieldType<'month', string>;
62
+ 'week': CreateFieldType<'week', string>;
63
+ 'color': CreateFieldType<'color', string>;
64
+ 'file': CreateFieldType<'file', File | FileList, {
65
+ accept?: string;
66
+ multiple?: boolean;
67
+ }>;
68
+ 'hidden': CreateFieldType<'hidden', string>;
69
+ }
70
+ export type RegisteredFieldType = keyof FieldTypeRegistry;
71
+ export type RegisteredField = FieldTypeRegistry[RegisteredFieldType];
72
+ export type FieldByType<T extends RegisteredFieldType> = FieldTypeRegistry[T];
73
+ export type Field = RegisteredField;
74
+ export interface BaseLayout<TType extends string = string> {
75
+ type: TType;
76
+ name?: string;
77
+ hidden?: boolean;
78
+ className?: string;
79
+ wrapFieldNames?: boolean;
80
+ }
81
+ export interface ColumnConfig {
82
+ title?: string;
83
+ width?: string | number;
84
+ children: FormItem[];
85
+ className?: string;
86
+ }
87
+ export interface ColumnsLayout extends BaseLayout<'columns'> {
88
+ type: 'columns';
89
+ columns: ColumnConfig[];
90
+ gap?: string | number;
91
+ }
92
+ export interface SectionLayout extends BaseLayout<'section'> {
93
+ type: 'section';
94
+ title?: string;
95
+ children: FormItem[];
96
+ }
97
+ export type LayoutBlock = ColumnsLayout | SectionLayout;
98
+ export type FormItem = Field | LayoutBlock;
99
+ export declare function isLayoutBlock(item: FormItem): item is LayoutBlock;
100
+ export interface FieldTypeValueMap {
101
+ 'text': string;
102
+ 'textarea': string;
103
+ 'email': string;
104
+ 'password': string;
105
+ 'url': string;
106
+ 'tel': string;
107
+ 'search': string;
108
+ 'number': number;
109
+ 'range': number;
110
+ 'checkbox': boolean;
111
+ 'switch': boolean;
112
+ 'radio': string;
113
+ 'select': string;
114
+ 'date': Date;
115
+ 'datetime': Date;
116
+ 'datetime-local': Date;
117
+ 'time': string;
118
+ 'month': string;
119
+ 'week': string;
120
+ 'color': string;
121
+ 'file': File | FileList;
122
+ 'hidden': string;
123
+ }
124
+ export type FieldValueType<T extends string> = T extends keyof FieldTypeValueMap ? FieldTypeValueMap[T] : unknown;
125
+ export type InferFieldValue<F> = F extends BaseField<infer T, infer V> ? (unknown extends V ? FieldValueType<T> : V) : unknown;
126
+ type ExtractFields<T extends FormItem> = T extends ColumnsLayout ? T['columns'][number]['children'][number] : T extends SectionLayout ? T['children'][number] : T extends BaseField ? T : never;
127
+ type FlattenFields<T extends readonly FormItem[]> = ExtractFields<T[number]>;
128
+ export type InferFormValues<T extends readonly FormItem[]> = {
129
+ [K in Extract<FlattenFields<T>, BaseField> as K['name']]: K['required'] extends true ? InferFieldValue<K> : InferFieldValue<K> | undefined;
130
+ };
131
+ export type InferFormValuesFromFields<T extends FormItem[]> = InferFormValues<readonly [...T]>;
132
+ export {};
133
+ //# sourceMappingURL=field-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-types.d.ts","sourceRoot":"","sources":["../../../src/lib/field-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export * from './field-types';
2
+ export { registerField, registerFields, getFieldComponent, getFieldClassName, getFieldOptions, getFieldValidator, hasFieldType, unregisterField, getRegisteredFieldTypes, clearFieldRegistry } from './field-registry';
3
+ export type { FieldComponentProps, FieldComponent, FieldRegistrationOptions, FieldDefinition, ValidatorFactory, FieldState } from './field-registry';
4
+ export { registerFormComponents, registerFormComponent, getFormComponent, hasFormComponent, getFormComponents, clearFormComponentRegistry, clearAllRegistries } from './field-registry';
5
+ export type { FormComponents, FormItemProps, FormLabelProps, FormDescriptionProps, FormMessageProps, SubmitButtonProps } from './field-registry';
6
+ export { registerLayoutComponents, registerLayoutComponent, getLayoutComponent, hasLayoutComponent, clearLayoutRegistry } from './field-registry';
7
+ export type { LayoutComponents, ColumnsLayoutProps, SectionLayoutProps } from './field-registry';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AACA,cAAc,eAAe,CAAC;AAG9B,OAAO,EACH,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EACrB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACR,mBAAmB,EACnB,cAAc,EACd,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,UAAU,EACb,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACH,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,kBAAkB,EACrB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACR,cAAc,EACd,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACH,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACtB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import '@testing-library/jest-dom';
2
+ //# sourceMappingURL=setupTests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupTests.d.ts","sourceRoot":"","sources":["../../src/setupTests.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC"}
package/package.json CHANGED
@@ -1,18 +1,27 @@
1
1
  {
2
2
  "name": "@connect-soft/form-generator",
3
- "version": "1.0.0",
3
+ "version": "1.1.0-alpha3",
4
+ "description": "Headless, type-safe form generator with react-hook-form and Zod validation",
4
5
  "author": "Lukáš Černý <lukas.cerny@connect-soft.cz>",
5
- "description": "Type-safe form generator with Radix UI, Tailwind CSS, and react-hook-form",
6
6
  "license": "ISC",
7
7
  "main": "dist/index.js",
8
- "module": "dist/index.m.js",
9
- "unpkg": "dist/index.umd.js",
10
- "umd:main": "dist/index.umd.js",
8
+ "module": "dist/index.mjs",
9
+ "types": "dist/types/index.d.ts",
10
+ "sideEffects": false,
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/types/index.d.ts",
14
+ "import": "./dist/index.mjs",
15
+ "require": "./dist/index.js"
16
+ }
17
+ },
18
+ "files": [
19
+ "dist",
20
+ "README.md"
21
+ ],
11
22
  "keywords": [
12
23
  "react",
13
- "radix-ui",
14
- "tailwind",
15
- "shadcn",
24
+ "headless",
16
25
  "form",
17
26
  "forms",
18
27
  "form-generator",
@@ -20,80 +29,27 @@
20
29
  "validation",
21
30
  "typescript",
22
31
  "react-hooks",
23
- "react-hook-form"
32
+ "react-hook-form",
33
+ "zod",
34
+ "type-safe"
24
35
  ],
25
- "source": "packages/form-generator/src/index.ts",
26
- "types": "dist/types/index.d.ts",
27
- "sideEffects": false,
28
- "exports": {
29
- ".": {
30
- "types": "./dist/types/index.d.ts",
31
- "import": "./dist/index.m.js",
32
- "require": "./dist/index.js"
33
- },
34
- "./package.json": "./package.json"
35
- },
36
- "files": [
37
- "dist"
38
- ],
39
- "engines": {
40
- "node": ">=18.18.0"
41
- },
42
- "browserslist": {
43
- "production": [
44
- ">0.2%",
45
- "not dead",
46
- "not op_mini all"
47
- ],
48
- "development": [
49
- "last 1 chrome version",
50
- "last 1 firefox version",
51
- "last 1 safari version"
52
- ]
53
- },
54
- "publishConfig": {
55
- "access": "public"
56
- },
57
- "repository": {
58
- "type": "git",
59
- "url": "git+https://gitlab.com/connect-soft/components/form-generator.git"
36
+ "peerDependencies": {
37
+ "react": "^19.0.0",
38
+ "react-dom": "^19.0.0",
39
+ "zod": "^4.0.0"
60
40
  },
61
- "bugs": {
62
- "url": "https://gitlab.com/connect-soft/components/form-generator/issues"
41
+ "dependencies": {
42
+ "@hookform/resolvers": "^5.2.1",
43
+ "react-hook-form": "^7.55.0"
63
44
  },
64
- "homepage": "https://gitlab.com/connect-soft/components/form-generator#readme",
65
- "dependencies": {},
66
45
  "devDependencies": {
67
- "@babel/core": "7.28.5",
68
- "@babel/preset-react": "7.28.5",
69
- "@babel/preset-typescript": "7.28.5",
70
- "@rollup/plugin-babel": "6.1.0",
71
- "@rollup/plugin-commonjs": "^28.0.6",
72
- "@rollup/plugin-node-resolve": "^16.0.1",
73
- "@rollup/plugin-typescript": "^12.1.4",
74
- "@storybook/addon-a11y": "^10.1.11",
75
- "@storybook/addon-docs": "^10.1.11",
76
- "@storybook/addon-links": "^10.1.11",
77
- "@storybook/react-vite": "^10.1.11",
78
- "@swc/core": "^1.3.102",
79
- "@swc/jest": "^0.2.29",
80
- "@testing-library/dom": "^10.4.1",
81
- "@testing-library/jest-dom": "6.9.1",
46
+ "@testing-library/jest-dom": "^6.9.1",
82
47
  "@testing-library/react": "^16.3.0",
83
- "@types/jest": "^30.0.0",
84
- "@types/node": "^20.0.0",
48
+ "@types/jest": "^29.5.0",
85
49
  "@types/react": "^19.0.0",
86
50
  "@types/react-dom": "^19.0.0",
87
- "@types/react-transition-group": "4.4.12",
88
- "@types/react-window": "^2.0.0",
89
- "@types/rollup-plugin-peer-deps-external": "^2",
90
51
  "@typescript-eslint/eslint-plugin": "^6.0.0",
91
52
  "@typescript-eslint/parser": "^6.0.0",
92
- "@vitejs/plugin-react": "5.1.2",
93
- "@vitejs/plugin-react-swc": "^3.5.0",
94
- "babel-plugin-react-compiler": "1.0.0",
95
- "classnames": "^2.5.1",
96
- "dayjs": "^1.11.19",
97
53
  "eslint": "^8.56.0",
98
54
  "eslint-config-airbnb-typescript": "^17.1.0",
99
55
  "eslint-config-prettier": "^9.1.0",
@@ -102,75 +58,28 @@
102
58
  "eslint-plugin-import": "^2.29.1",
103
59
  "eslint-plugin-jest": "^27.6.2",
104
60
  "eslint-plugin-jsx-a11y": "^6.8.0",
105
- "eslint-plugin-local-rules": "^3.0.2",
106
61
  "eslint-plugin-prettier": "^5.1.3",
107
62
  "eslint-plugin-react": "^7.33.2",
108
63
  "eslint-plugin-react-hooks": "^4.6.0",
109
- "eslint-plugin-storybook": "^10.1.11",
110
64
  "eslint-plugin-testing-library": "^6.2.0",
111
65
  "jest": "^29.7.0",
112
- "jest-canvas-mock": "^2.5.2",
113
66
  "jest-environment-jsdom": "^29.7.0",
114
- "jest-preview": "^0.3.1",
115
- "jest-serializer-html": "^7.1.0",
116
- "postcss": "8.5.6",
117
67
  "prettier": "^3.0.0",
118
- "react": "^19.0.0",
119
- "react-colorful": "^5.6.1",
120
- "react-dom": "^19.0.0",
121
- "react-transition-group": "^4.4.5",
122
- "require-json5": "^1.3.0",
123
- "rimraf": "6.1.2",
124
- "rollup": "^4.45.1",
125
- "rollup-plugin-peer-deps-external": "^2.2.4",
126
- "storybook": "^10.1.11",
127
- "@tailwindcss/postcss": "^4.1.18",
128
- "@tailwindcss/vite": "^4.1.18",
129
- "tailwindcss": "^4.1.18",
130
- "ts-jest": "^29.1.1",
131
- "ts-jest-resolver": "^2.0.1",
132
- "ts-node": "^10.9.2",
133
- "tsc-alias": "^1.8.16",
134
- "tsconfig": "^7.0.0",
135
- "typescript": "^5.8.3",
136
- "usehooks-ts": "^3.1.1",
137
- "vite": "^5.0.0",
138
- "vite-plugin-svgr": "^4.2.0",
139
- "zod": "^4.0.15"
140
- },
141
- "peerDependencies": {
142
- "dayjs": "^1.11.19",
143
- "react": "^19.0.0",
144
- "react-dom": "^19.0.0",
145
- "zod": "^4.0.15"
146
- },
147
- "resolutions": {
148
- "jackspeak": "2.1.1",
149
- "eslint-plugin-import": "^2.25.3"
68
+ "ts-jest": "^29.1.0",
69
+ "typescript": "^5.8.3"
150
70
  },
151
71
  "scripts": {
152
72
  "clean": "rimraf dist",
153
73
  "prebuild": "pnpm clean",
154
- "build": "rollup --config rollup.config.cjs && tsc-alias -p tsconfig.build.json",
155
- "bundle:analyze": "rollup --config rollup.config.cjs --environment ANALYZE",
156
- "bundle:size": "pnpm build && du -sh dist/*.js && gzip-size dist/index.m.js",
157
- "prettier:fix": "prettier --config .prettierrc --write \"**/*.{js,ts,tsx,css}\"",
74
+ "build": "rollup --config rollup.config.cjs && tsc -p tsconfig.build.json",
158
75
  "type": "tsc --noEmit -p tsconfig.build.json",
159
- "jest-preview": "jest-preview",
160
- "test:coverage": "pnpm test -- --coverage",
161
- "test:watch": "pnpm test -- --onlyChanged --watch",
162
- "test": "TZ=UTC jest",
163
- "test:type": "tsd src/__typetest__",
164
- "postversion": "git push && git push origin v$npm_package_version",
165
- "prepublishonly": "pnpm install && pnpm lint:fix && pnpm type && pnpm test",
166
- "bundlewatch": "pnpm build && bundlewatch",
167
- "start": "pnpm build && pnpm --dir ./example install && pnpm --dir ./example run dev",
168
- "link": "(pnpm unlink | pnpm link) && pnpm link \"@connect-soft/react-file-upload\"",
169
- "verify": "pnpm format && pnpm lint && pnpm type",
170
- "reinstall": "rm -rf 'pnpm.lock' 'node_modules' && pnpm",
171
- "release": "pnpm build && pnpm release:only",
172
- "release:only": "pnpm publish",
173
- "storybook": "storybook dev -p 6006",
174
- "build-storybook": "storybook build"
76
+ "test": "jest",
77
+ "test:watch": "jest --watch",
78
+ "test:coverage": "jest --coverage",
79
+ "lint": "eslint --ext .ts,.tsx src/",
80
+ "lint:fix": "eslint --ext .ts,.tsx src/ --fix",
81
+ "format": "prettier --check \"src/**/*.{ts,tsx}\"",
82
+ "format:fix": "prettier --write \"src/**/*.{ts,tsx}\"",
83
+ "verify": "pnpm format && pnpm lint && pnpm type"
175
84
  }
176
85
  }