@connect-soft/form-generator 1.0.0 → 1.1.0-alpha2
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.
- package/MIGRATION.md +503 -0
- package/README.md +22 -328
- package/dist/index.js +3610 -0
- package/dist/index.js.map +1 -0
- package/dist/index.m.js +3558 -0
- package/dist/index.m.js.map +1 -0
- package/dist/styles/globals.css +2 -0
- package/dist/types/components/form/field-renderer.d.ts +12 -0
- package/dist/types/components/form/field-renderer.d.ts.map +1 -0
- package/dist/types/components/form/form-generator.d.ts +27 -0
- package/dist/types/components/form/form-generator.d.ts.map +1 -0
- package/dist/types/components/form/index.d.ts +5 -0
- package/dist/types/components/form/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/lib/field-registry.d.ts +114 -0
- package/dist/types/lib/field-registry.d.ts.map +1 -0
- package/dist/types/lib/field-types.d.ts +133 -0
- package/dist/types/lib/field-types.d.ts.map +1 -0
- package/dist/types/lib/index.d.ts +8 -0
- package/dist/types/lib/index.d.ts.map +1 -0
- package/dist/types/setupTests.d.ts +2 -0
- package/dist/types/setupTests.d.ts.map +1 -0
- package/package.json +49 -126
|
@@ -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,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { FormItem, InferFormValues } from '@/lib';
|
|
4
|
+
export interface FormGeneratorPropsWithSchema<TSchema extends z.ZodType> {
|
|
5
|
+
fields: readonly FormItem[];
|
|
6
|
+
schema: TSchema;
|
|
7
|
+
onSubmit: (values: z.infer<TSchema>) => void | Promise<void>;
|
|
8
|
+
defaultValues?: Partial<z.infer<TSchema>>;
|
|
9
|
+
className?: string;
|
|
10
|
+
submitText?: string;
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
mode?: 'onChange' | 'onBlur' | 'onSubmit' | 'onTouched' | 'all';
|
|
13
|
+
}
|
|
14
|
+
export interface FormGeneratorPropsWithoutSchema<TFields extends readonly FormItem[]> {
|
|
15
|
+
fields: TFields;
|
|
16
|
+
schema?: undefined;
|
|
17
|
+
onSubmit: (values: InferFormValues<TFields>) => void | Promise<void>;
|
|
18
|
+
defaultValues?: Partial<InferFormValues<TFields>>;
|
|
19
|
+
className?: string;
|
|
20
|
+
submitText?: string;
|
|
21
|
+
disabled?: boolean;
|
|
22
|
+
mode?: 'onChange' | 'onBlur' | 'onSubmit' | 'onTouched' | 'all';
|
|
23
|
+
}
|
|
24
|
+
export type FormGeneratorProps<TSchema extends z.ZodType = z.ZodType, TFields extends readonly FormItem[] = readonly FormItem[]> = FormGeneratorPropsWithSchema<TSchema> | FormGeneratorPropsWithoutSchema<TFields>;
|
|
25
|
+
export declare function FormGenerator<TSchema extends z.ZodType>(props: FormGeneratorPropsWithSchema<TSchema>): React.ReactElement;
|
|
26
|
+
export declare function FormGenerator<TFields extends readonly FormItem[]>(props: FormGeneratorPropsWithoutSchema<TFields>): React.ReactElement;
|
|
27
|
+
//# 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,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAIH,QAAQ,EAIR,eAAe,EAClB,MAAM,OAAO,CAAC;AA+Lf,MAAM,WAAW,4BAA4B,CAAC,OAAO,SAAS,CAAC,CAAC,OAAO;IACnE,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;IAC1C,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;CACnE;AAMD,MAAM,WAAW,+BAA+B,CAAC,OAAO,SAAS,SAAS,QAAQ,EAAE;IAChF,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;IAClD,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;CACnE;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;AAWrF,wBAAgB,aAAa,CAAC,OAAO,SAAS,CAAC,CAAC,OAAO,EACnD,KAAK,EAAE,4BAA4B,CAAC,OAAO,CAAC,GAC7C,KAAK,CAAC,YAAY,CAAC;AACtB,wBAAgB,aAAa,CAAC,OAAO,SAAS,SAAS,QAAQ,EAAE,EAC7D,KAAK,EAAE,+BAA+B,CAAC,OAAO,CAAC,GAChD,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 } 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,EAClC,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 @@
|
|
|
1
|
+
{"version":3,"file":"setupTests.d.ts","sourceRoot":"","sources":["../../src/setupTests.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,38 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@connect-soft/form-generator",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"author": "Lukáš Černý <lukas.cerny@connect-soft.cz>",
|
|
3
|
+
"version": "1.1.0-alpha2",
|
|
5
4
|
"description": "Type-safe form generator with Radix UI, Tailwind CSS, and react-hook-form",
|
|
5
|
+
"author": "Lukáš Černý <lukas.cerny@connect-soft.cz>",
|
|
6
6
|
"license": "ISC",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"module": "dist/index.m.js",
|
|
9
|
-
"
|
|
10
|
-
"
|
|
9
|
+
"types": "dist/types/index.d.ts",
|
|
10
|
+
"sideEffects": [
|
|
11
|
+
"*.css"
|
|
12
|
+
],
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./dist/types/index.d.ts",
|
|
16
|
+
"import": "./dist/index.m.js",
|
|
17
|
+
"require": "./dist/index.js"
|
|
18
|
+
},
|
|
19
|
+
"./styles": "./dist/styles/globals.css",
|
|
20
|
+
"./advanced": {
|
|
21
|
+
"types": "./dist/types/components/ui/advanced/index.d.ts",
|
|
22
|
+
"import": "./dist/components/ui/advanced/index.m.js",
|
|
23
|
+
"require": "./dist/components/ui/advanced/index.js"
|
|
24
|
+
},
|
|
25
|
+
"./adapters": {
|
|
26
|
+
"types": "./dist/types/adapters/index.d.ts",
|
|
27
|
+
"import": "./dist/adapters/index.m.js",
|
|
28
|
+
"require": "./dist/adapters/index.js"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"dist",
|
|
33
|
+
"README.md",
|
|
34
|
+
"MIGRATION.md"
|
|
35
|
+
],
|
|
11
36
|
"keywords": [
|
|
12
37
|
"react",
|
|
13
38
|
"radix-ui",
|
|
@@ -22,78 +47,23 @@
|
|
|
22
47
|
"react-hooks",
|
|
23
48
|
"react-hook-form"
|
|
24
49
|
],
|
|
25
|
-
"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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"
|
|
50
|
+
"peerDependencies": {
|
|
51
|
+
"react": "^19.0.0",
|
|
52
|
+
"react-dom": "^19.0.0",
|
|
53
|
+
"zod": "^4.0.0"
|
|
60
54
|
},
|
|
61
|
-
"
|
|
62
|
-
"
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"@hookform/resolvers": "^5.2.1",
|
|
57
|
+
"react-hook-form": "^7.55.0"
|
|
63
58
|
},
|
|
64
|
-
"homepage": "https://gitlab.com/connect-soft/components/form-generator#readme",
|
|
65
|
-
"dependencies": {},
|
|
66
59
|
"devDependencies": {
|
|
67
|
-
"@
|
|
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",
|
|
60
|
+
"@testing-library/jest-dom": "^6.9.1",
|
|
82
61
|
"@testing-library/react": "^16.3.0",
|
|
83
|
-
"@types/jest": "^
|
|
84
|
-
"@types/node": "^20.0.0",
|
|
62
|
+
"@types/jest": "^29.5.0",
|
|
85
63
|
"@types/react": "^19.0.0",
|
|
86
64
|
"@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
65
|
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
91
66
|
"@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
67
|
"eslint": "^8.56.0",
|
|
98
68
|
"eslint-config-airbnb-typescript": "^17.1.0",
|
|
99
69
|
"eslint-config-prettier": "^9.1.0",
|
|
@@ -102,75 +72,28 @@
|
|
|
102
72
|
"eslint-plugin-import": "^2.29.1",
|
|
103
73
|
"eslint-plugin-jest": "^27.6.2",
|
|
104
74
|
"eslint-plugin-jsx-a11y": "^6.8.0",
|
|
105
|
-
"eslint-plugin-local-rules": "^3.0.2",
|
|
106
75
|
"eslint-plugin-prettier": "^5.1.3",
|
|
107
76
|
"eslint-plugin-react": "^7.33.2",
|
|
108
77
|
"eslint-plugin-react-hooks": "^4.6.0",
|
|
109
|
-
"eslint-plugin-storybook": "^10.1.11",
|
|
110
78
|
"eslint-plugin-testing-library": "^6.2.0",
|
|
111
79
|
"jest": "^29.7.0",
|
|
112
|
-
"jest-canvas-mock": "^2.5.2",
|
|
113
80
|
"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
81
|
"prettier": "^3.0.0",
|
|
118
|
-
"
|
|
119
|
-
"
|
|
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"
|
|
82
|
+
"ts-jest": "^29.1.0",
|
|
83
|
+
"typescript": "^5.8.3"
|
|
150
84
|
},
|
|
151
85
|
"scripts": {
|
|
152
86
|
"clean": "rimraf dist",
|
|
153
87
|
"prebuild": "pnpm clean",
|
|
154
|
-
"build": "rollup --config rollup.config.cjs && tsc
|
|
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}\"",
|
|
88
|
+
"build": "rollup --config rollup.config.cjs && tsc -p tsconfig.build.json && mkdir -p dist/styles && cp src/styles/globals.css dist/styles/",
|
|
158
89
|
"type": "tsc --noEmit -p tsconfig.build.json",
|
|
159
|
-
"
|
|
160
|
-
"test:
|
|
161
|
-
"test:
|
|
162
|
-
"
|
|
163
|
-
"
|
|
164
|
-
"
|
|
165
|
-
"
|
|
166
|
-
"
|
|
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"
|
|
90
|
+
"test": "jest",
|
|
91
|
+
"test:watch": "jest --watch",
|
|
92
|
+
"test:coverage": "jest --coverage",
|
|
93
|
+
"lint": "eslint --ext .ts,.tsx src/",
|
|
94
|
+
"lint:fix": "eslint --ext .ts,.tsx src/ --fix",
|
|
95
|
+
"format": "prettier --check \"src/**/*.{ts,tsx}\"",
|
|
96
|
+
"format:fix": "prettier --write \"src/**/*.{ts,tsx}\"",
|
|
97
|
+
"verify": "pnpm format && pnpm lint && pnpm type"
|
|
175
98
|
}
|
|
176
99
|
}
|