@delightui/components 0.1.161 → 0.1.162-alpha.0
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/dist/cjs/components/atoms/Checkbox/Checkbox.d.ts +1 -1
- package/dist/cjs/components/atoms/Checkbox/Checkbox.presenter.d.ts +1 -1
- package/dist/cjs/components/atoms/CheckboxItem/CheckboxItem.d.ts +1 -1
- package/dist/cjs/components/atoms/CheckboxItem/CheckboxItem.presenter.d.ts +2 -2
- package/dist/cjs/components/atoms/CustomToggle/CustomToggle.d.ts +1 -1
- package/dist/cjs/components/atoms/Input/Input.d.ts +1 -1
- package/dist/cjs/components/atoms/Input/Input.presenter.d.ts +2 -2
- package/dist/cjs/components/atoms/Password/Password.presenter.d.ts +2 -2
- package/dist/cjs/components/atoms/RadioButton/RadioButton.d.ts +1 -1
- package/dist/cjs/components/atoms/RadioButtonItem/RadioButtonItem.d.ts +1 -1
- package/dist/cjs/components/atoms/RadioButtonItem/RadioButtonItem.presenter.d.ts +2 -2
- package/dist/cjs/components/atoms/TextArea/TextArea.d.ts +1 -1
- package/dist/cjs/components/atoms/TextArea/TextArea.presenter.d.ts +1 -1
- package/dist/cjs/components/atoms/Toggle/Toggle.d.ts +1 -1
- package/dist/cjs/components/atoms/Toggle/Toggle.presenter.d.ts +2 -2
- package/dist/cjs/components/atoms/ToggleButton/ToggleButton.d.ts +1 -1
- package/dist/cjs/components/molecules/FormField/FormField.d.ts +28 -2
- package/dist/cjs/components/molecules/FormField/FormField.presenter.d.ts +14 -8
- package/dist/cjs/components/molecules/FormField/FormField.types.d.ts +85 -52
- package/dist/cjs/components/molecules/FormField/FormField.utils.d.ts +8 -11
- package/dist/cjs/components/molecules/FormField/index.d.ts +1 -2
- package/dist/cjs/components/molecules/FormField/useSafeController.d.ts +14 -0
- package/dist/cjs/components/molecules/FormField/useSafeFormContext.d.ts +8 -0
- package/dist/cjs/components/molecules/Search/Search.d.ts +1 -1
- package/dist/cjs/components/molecules/Search/Search.presenter.d.ts +2 -2
- package/dist/cjs/components/molecules/Select/Select.presenter.d.ts +4 -4
- package/dist/cjs/components/organisms/Form/Form.d.ts +22 -1
- package/dist/cjs/components/organisms/Form/Form.presenter.d.ts +21 -0
- package/dist/cjs/components/organisms/Form/Form.types.d.ts +27 -131
- package/dist/cjs/components/organisms/Form/examples/DropzoneFormExample.d.ts +6 -0
- package/dist/cjs/components/organisms/Form/examples/UpdatedFormExample.d.ts +2 -0
- package/dist/cjs/components/organisms/Form/{UseFormExample.d.ts → examples/UseFormExample.d.ts} +0 -3
- package/dist/cjs/components/organisms/Form/index.d.ts +4 -4
- package/dist/cjs/components/organisms/Form/useAutosave.d.ts +10 -0
- package/dist/cjs/library.js +3 -3
- package/dist/cjs/library.js.map +1 -1
- package/dist/esm/components/atoms/Checkbox/Checkbox.d.ts +1 -1
- package/dist/esm/components/atoms/Checkbox/Checkbox.presenter.d.ts +1 -1
- package/dist/esm/components/atoms/CheckboxItem/CheckboxItem.d.ts +1 -1
- package/dist/esm/components/atoms/CheckboxItem/CheckboxItem.presenter.d.ts +2 -2
- package/dist/esm/components/atoms/CustomToggle/CustomToggle.d.ts +1 -1
- package/dist/esm/components/atoms/Input/Input.d.ts +1 -1
- package/dist/esm/components/atoms/Input/Input.presenter.d.ts +2 -2
- package/dist/esm/components/atoms/Password/Password.presenter.d.ts +2 -2
- package/dist/esm/components/atoms/RadioButton/RadioButton.d.ts +1 -1
- package/dist/esm/components/atoms/RadioButtonItem/RadioButtonItem.d.ts +1 -1
- package/dist/esm/components/atoms/RadioButtonItem/RadioButtonItem.presenter.d.ts +2 -2
- package/dist/esm/components/atoms/TextArea/TextArea.d.ts +1 -1
- package/dist/esm/components/atoms/TextArea/TextArea.presenter.d.ts +1 -1
- package/dist/esm/components/atoms/Toggle/Toggle.d.ts +1 -1
- package/dist/esm/components/atoms/Toggle/Toggle.presenter.d.ts +2 -2
- package/dist/esm/components/atoms/ToggleButton/ToggleButton.d.ts +1 -1
- package/dist/esm/components/molecules/FormField/FormField.d.ts +28 -2
- package/dist/esm/components/molecules/FormField/FormField.presenter.d.ts +14 -8
- package/dist/esm/components/molecules/FormField/FormField.types.d.ts +85 -52
- package/dist/esm/components/molecules/FormField/FormField.utils.d.ts +8 -11
- package/dist/esm/components/molecules/FormField/index.d.ts +1 -2
- package/dist/esm/components/molecules/FormField/useSafeController.d.ts +14 -0
- package/dist/esm/components/molecules/FormField/useSafeFormContext.d.ts +8 -0
- package/dist/esm/components/molecules/Search/Search.d.ts +1 -1
- package/dist/esm/components/molecules/Search/Search.presenter.d.ts +2 -2
- package/dist/esm/components/molecules/Select/Select.presenter.d.ts +4 -4
- package/dist/esm/components/organisms/Form/Form.d.ts +22 -1
- package/dist/esm/components/organisms/Form/Form.presenter.d.ts +21 -0
- package/dist/esm/components/organisms/Form/Form.types.d.ts +27 -131
- package/dist/esm/components/organisms/Form/examples/DropzoneFormExample.d.ts +6 -0
- package/dist/esm/components/organisms/Form/examples/UpdatedFormExample.d.ts +2 -0
- package/dist/esm/components/organisms/Form/{UseFormExample.d.ts → examples/UseFormExample.d.ts} +0 -3
- package/dist/esm/components/organisms/Form/index.d.ts +4 -4
- package/dist/esm/components/organisms/Form/useAutosave.d.ts +10 -0
- package/dist/esm/library.js +3 -3
- package/dist/esm/library.js.map +1 -1
- package/dist/index.d.ts +165 -232
- package/docs/FORM_MIGRATION_GUIDE.md +631 -0
- package/docs/components/molecules/FormField.md +129 -34
- package/docs/components/organisms/Form.md +858 -162
- package/package.json +4 -1
- package/dist/cjs/components/organisms/Form/DropzoneFormExample.d.ts +0 -6
- package/dist/cjs/components/organisms/Form/Form.utils.d.ts +0 -2
- package/dist/cjs/components/organisms/Form/FormContext.d.ts +0 -5
- package/dist/cjs/components/organisms/Form/UpdatedFormExample.d.ts +0 -23
- package/dist/cjs/components/organisms/Form/useForm.d.ts +0 -50
- package/dist/esm/components/organisms/Form/DropzoneFormExample.d.ts +0 -6
- package/dist/esm/components/organisms/Form/Form.utils.d.ts +0 -2
- package/dist/esm/components/organisms/Form/FormContext.d.ts +0 -5
- package/dist/esm/components/organisms/Form/UpdatedFormExample.d.ts +0 -23
- package/dist/esm/components/organisms/Form/useForm.d.ts +0 -50
- /package/dist/cjs/components/organisms/Form/{AutosaveFormExample.d.ts → examples/AutosaveFormExample.d.ts} +0 -0
- /package/dist/esm/components/organisms/Form/{AutosaveFormExample.d.ts → examples/AutosaveFormExample.d.ts} +0 -0
|
@@ -1,138 +1,34 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type {
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { FieldValues, UseFormProps } from 'react-hook-form';
|
|
3
|
+
export type { FieldValue, FieldValidationFunction, AsyncFieldValidationFunction, } from '../../molecules/FormField/FormField.types';
|
|
3
4
|
/**
|
|
4
|
-
*
|
|
5
|
+
* Form submission handler
|
|
5
6
|
*/
|
|
6
|
-
export type
|
|
7
|
+
export type FormSubmitHandler<TFormValues extends FieldValues = FieldValues> = (values: TFormValues) => void | Promise<void>;
|
|
7
8
|
/**
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```typescript
|
|
11
|
-
* const formState: FormState = {
|
|
12
|
-
* name: 'John Doe',
|
|
13
|
-
* age: 30,
|
|
14
|
-
* dob: new Date('1990-01-01')
|
|
15
|
-
* };
|
|
16
|
-
* ```
|
|
9
|
+
* Form component props
|
|
17
10
|
*/
|
|
18
|
-
export type
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
* It takes an error setter function and the field value (optional) and returns a boolean indicating if the value is valid
|
|
26
|
-
* @example
|
|
27
|
-
* ```typescript
|
|
28
|
-
* const nameValidator: FieldValidationFunction = (setError, value) => {
|
|
29
|
-
* if (!value) {
|
|
30
|
-
* setError('Name is required');
|
|
31
|
-
* return false;
|
|
32
|
-
* }
|
|
33
|
-
* return true;
|
|
34
|
-
* };
|
|
35
|
-
* ```
|
|
36
|
-
*/
|
|
37
|
-
export type FieldValidationFunction<T extends FieldValue = FieldValue> = (setError: (message: string) => void, value?: T) => boolean;
|
|
38
|
-
/**
|
|
39
|
-
* Type representing the required fields in a form
|
|
40
|
-
* It's a partial record of field names to a boolean indicating if the field is required
|
|
41
|
-
*/
|
|
42
|
-
export type RequiredFields<T extends FormState = FormState> = Partial<Record<keyof T, boolean>>;
|
|
43
|
-
/**
|
|
44
|
-
* Type representing the validation functions for each field in a form
|
|
45
|
-
* It's a partial record of field names to validation functions (or undefined)
|
|
46
|
-
* @example
|
|
47
|
-
* ```typescript
|
|
48
|
-
* const nameValidator: FieldValidationFunction = (setError, value) => {
|
|
49
|
-
* if (!value) {
|
|
50
|
-
* setError('Name is required');
|
|
51
|
-
* return false;
|
|
52
|
-
* }
|
|
53
|
-
* return true;
|
|
54
|
-
* };
|
|
55
|
-
* const fieldValidators: FieldValidators = {
|
|
56
|
-
* name: nameValidator,
|
|
57
|
-
* age: undefined,
|
|
58
|
-
* };
|
|
59
|
-
* ```
|
|
60
|
-
*/
|
|
61
|
-
export type FieldValidators<T extends FormState = FormState> = Partial<Record<keyof T, FieldValidationFunction | undefined>>;
|
|
62
|
-
/**
|
|
63
|
-
* Type representing a function that handles form state changes
|
|
64
|
-
* It takes the new form state and an error setter function and doesn't return anything
|
|
65
|
-
* @example
|
|
66
|
-
* ```typescript
|
|
67
|
-
* const handleFormStateChange: FormStateChangeHandler = (state, setError) => {
|
|
68
|
-
* // Validate form state and set errors
|
|
69
|
-
* if (!state.name) {
|
|
70
|
-
* setError('name', 'Name is required');
|
|
71
|
-
* }
|
|
72
|
-
* };
|
|
73
|
-
* ```
|
|
74
|
-
*/
|
|
75
|
-
export type FormStateChangeHandler<T extends FormState = FormState> = (state: T, setError: (field: keyof T, errorMessage: string) => void) => void;
|
|
76
|
-
/**
|
|
77
|
-
* Type representing a function that validates the entire form
|
|
78
|
-
* It takes the form values and an error setter function and returns a boolean indicating if the form is valid
|
|
79
|
-
* @example
|
|
80
|
-
* ```typescript
|
|
81
|
-
* const validateForm: FormValidator = (state, setError) => {
|
|
82
|
-
* let isValid = true;
|
|
83
|
-
* if (!state.name) {
|
|
84
|
-
* setError('name', 'Name is required');
|
|
85
|
-
* isValid = false;
|
|
86
|
-
* }
|
|
87
|
-
* if (!state.age || typeof state.age !== 'number') {
|
|
88
|
-
* setError('age', 'Age must be a number');
|
|
89
|
-
* isValid = false;
|
|
90
|
-
* }
|
|
91
|
-
* return isValid;
|
|
92
|
-
* };
|
|
93
|
-
* ```
|
|
94
|
-
*/
|
|
95
|
-
export type FormValidator<T extends FormState = FormState> = (state: T, setError: (field: keyof T, errorMessage: string) => void) => boolean;
|
|
96
|
-
/**
|
|
97
|
-
* Type representing a function that handles form submission.
|
|
98
|
-
* It takes updated form state and a function to set error messages for specific fields.
|
|
99
|
-
*
|
|
100
|
-
* @template T - The type of the form state, defaulting to `FormState`.
|
|
101
|
-
*
|
|
102
|
-
* @param {T} values - The updated form state values.
|
|
103
|
-
* @param {(field: keyof T, errorMessage: string) => void} setError - A function to set error messages for specific fields.
|
|
104
|
-
*
|
|
105
|
-
* @example
|
|
106
|
-
* ```typescript
|
|
107
|
-
* const handleFormSubmit: FormSubmitHandler = (values, setError) => {
|
|
108
|
-
* // Submit form data
|
|
109
|
-
* console.log(values);
|
|
110
|
-
* };
|
|
111
|
-
* ```
|
|
112
|
-
*/
|
|
113
|
-
export type FormSubmitHandler<T extends FormState = FormState> = (values: T, setError: (field: keyof T, errorMessage: string) => void) => void;
|
|
114
|
-
export type FormProps = Omit<FormHTMLAttributes<HTMLFormElement>, 'onSubmit'> & {
|
|
115
|
-
formRef?: Ref<HTMLFormElement>;
|
|
116
|
-
};
|
|
117
|
-
export type FormContextValues<T extends FormState = FormState> = {
|
|
118
|
-
formRef?: Ref<HTMLFormElement>;
|
|
119
|
-
formState?: T;
|
|
120
|
-
updateFieldValue: (name: string, value: FieldValue) => void;
|
|
121
|
-
formErrors: FormErrors<T>;
|
|
122
|
-
updateFieldError: (name: keyof T, errorMessage: string) => void;
|
|
123
|
-
onFormSubmit: React.FormEventHandler<HTMLFormElement>;
|
|
124
|
-
updateFieldValidators: (name: keyof T, validate?: FieldValidationFunction) => void;
|
|
125
|
-
updateRequiredFields: (name: keyof T, required?: boolean) => void;
|
|
126
|
-
resetForm: () => void;
|
|
127
|
-
};
|
|
128
|
-
export type FormProviderProps<T extends FormState = FormState> = {
|
|
129
|
-
formRef?: Ref<HTMLFormElement>;
|
|
130
|
-
children?: React.ReactNode;
|
|
131
|
-
formState?: T;
|
|
132
|
-
onFormStateChange?: FormStateChangeHandler<T>;
|
|
133
|
-
formValidator?: FormValidator<T>;
|
|
134
|
-
onSubmit?: FormSubmitHandler<T>;
|
|
135
|
-
validateOnChange?: boolean;
|
|
11
|
+
export type FormProps<TFormValues extends FieldValues = FieldValues> = {
|
|
12
|
+
children: ReactNode;
|
|
13
|
+
/** Initial form values (uncontrolled mode) */
|
|
14
|
+
defaultValues?: UseFormProps<TFormValues>['defaultValues'];
|
|
15
|
+
/** Form submission handler */
|
|
16
|
+
onSubmit?: FormSubmitHandler<TFormValues>;
|
|
17
|
+
/** Enable autosave functionality */
|
|
136
18
|
autosave?: boolean;
|
|
19
|
+
/** Autosave debounce delay in milliseconds */
|
|
137
20
|
autosaveDelayMs?: number;
|
|
21
|
+
/** RHF validation mode */
|
|
22
|
+
mode?: UseFormProps<TFormValues>['mode'];
|
|
23
|
+
/** Additional RHF options */
|
|
24
|
+
formOptions?: Omit<UseFormProps<TFormValues>, 'defaultValues' | 'mode'>;
|
|
25
|
+
/** Form HTML attributes */
|
|
26
|
+
className?: string;
|
|
27
|
+
style?: React.CSSProperties;
|
|
28
|
+
formRef?: React.Ref<HTMLFormElement>;
|
|
138
29
|
};
|
|
30
|
+
/**
|
|
31
|
+
* @deprecated Use FormProps instead
|
|
32
|
+
* Legacy alias for backwards compatibility
|
|
33
|
+
*/
|
|
34
|
+
export type FormProviderProps<TFormValues extends FieldValues = FieldValues> = Omit<FormProps<TFormValues>, 'className' | 'style' | 'formRef'>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
declare const Form: <T extends FormState>(props: FormProviderProps<T> & FormProps) => import("react/jsx-runtime").JSX.Element;
|
|
1
|
+
import Form from './Form';
|
|
3
2
|
export default Form;
|
|
4
|
-
export
|
|
5
|
-
export {
|
|
3
|
+
export type { FormProps, FormSubmitHandler, FormProviderProps, } from './Form.types';
|
|
4
|
+
export type { FieldValue } from './Form.types';
|
|
5
|
+
export { useAutosave } from './useAutosave';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type FieldValues } from 'react-hook-form';
|
|
2
|
+
import type { FormSubmitHandler } from './Form.types';
|
|
3
|
+
/**
|
|
4
|
+
* Hook to enable autosave functionality for forms
|
|
5
|
+
* Debounces changes and validates before submitting
|
|
6
|
+
*
|
|
7
|
+
* Note: Uses formState.isDirty to detect changes instead of watching all values
|
|
8
|
+
* for better performance
|
|
9
|
+
*/
|
|
10
|
+
export declare const useAutosave: <TFormValues extends FieldValues>(enabled: boolean, onSubmit: FormSubmitHandler<TFormValues> | undefined, delayMs?: number) => void;
|