@delightui/components 0.1.160 → 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.
Files changed (93) hide show
  1. package/dist/cjs/components/atoms/Checkbox/Checkbox.d.ts +1 -1
  2. package/dist/cjs/components/atoms/Checkbox/Checkbox.presenter.d.ts +1 -1
  3. package/dist/cjs/components/atoms/CheckboxItem/CheckboxItem.d.ts +1 -1
  4. package/dist/cjs/components/atoms/CheckboxItem/CheckboxItem.presenter.d.ts +2 -2
  5. package/dist/cjs/components/atoms/CustomToggle/CustomToggle.d.ts +1 -1
  6. package/dist/cjs/components/atoms/Input/Input.d.ts +1 -1
  7. package/dist/cjs/components/atoms/Input/Input.presenter.d.ts +2 -2
  8. package/dist/cjs/components/atoms/Password/Password.presenter.d.ts +2 -2
  9. package/dist/cjs/components/atoms/RadioButton/RadioButton.d.ts +1 -1
  10. package/dist/cjs/components/atoms/RadioButtonItem/RadioButtonItem.d.ts +1 -1
  11. package/dist/cjs/components/atoms/RadioButtonItem/RadioButtonItem.presenter.d.ts +2 -2
  12. package/dist/cjs/components/atoms/TextArea/TextArea.d.ts +1 -1
  13. package/dist/cjs/components/atoms/TextArea/TextArea.presenter.d.ts +1 -1
  14. package/dist/cjs/components/atoms/Toggle/Toggle.d.ts +1 -1
  15. package/dist/cjs/components/atoms/Toggle/Toggle.presenter.d.ts +2 -2
  16. package/dist/cjs/components/atoms/ToggleButton/ToggleButton.d.ts +1 -1
  17. package/dist/cjs/components/molecules/FormField/FormField.d.ts +28 -2
  18. package/dist/cjs/components/molecules/FormField/FormField.presenter.d.ts +14 -8
  19. package/dist/cjs/components/molecules/FormField/FormField.types.d.ts +85 -52
  20. package/dist/cjs/components/molecules/FormField/FormField.utils.d.ts +8 -11
  21. package/dist/cjs/components/molecules/FormField/index.d.ts +1 -2
  22. package/dist/cjs/components/molecules/FormField/useSafeController.d.ts +14 -0
  23. package/dist/cjs/components/molecules/FormField/useSafeFormContext.d.ts +8 -0
  24. package/dist/cjs/components/molecules/Modal/DemoModal.d.ts +1 -0
  25. package/dist/cjs/components/molecules/Modal/ModalContext/ModalContext.types.d.ts +24 -1
  26. package/dist/cjs/components/molecules/Search/Search.d.ts +1 -1
  27. package/dist/cjs/components/molecules/Search/Search.presenter.d.ts +2 -2
  28. package/dist/cjs/components/molecules/Select/Select.presenter.d.ts +4 -4
  29. package/dist/cjs/components/organisms/Form/Form.d.ts +22 -1
  30. package/dist/cjs/components/organisms/Form/Form.presenter.d.ts +21 -0
  31. package/dist/cjs/components/organisms/Form/Form.types.d.ts +27 -131
  32. package/dist/cjs/components/organisms/Form/examples/DropzoneFormExample.d.ts +6 -0
  33. package/dist/cjs/components/organisms/Form/examples/UpdatedFormExample.d.ts +2 -0
  34. package/dist/cjs/components/organisms/Form/{UseFormExample.d.ts → examples/UseFormExample.d.ts} +0 -3
  35. package/dist/cjs/components/organisms/Form/index.d.ts +4 -4
  36. package/dist/cjs/components/organisms/Form/useAutosave.d.ts +10 -0
  37. package/dist/cjs/library.js +3 -3
  38. package/dist/cjs/library.js.map +1 -1
  39. package/dist/esm/components/atoms/Checkbox/Checkbox.d.ts +1 -1
  40. package/dist/esm/components/atoms/Checkbox/Checkbox.presenter.d.ts +1 -1
  41. package/dist/esm/components/atoms/CheckboxItem/CheckboxItem.d.ts +1 -1
  42. package/dist/esm/components/atoms/CheckboxItem/CheckboxItem.presenter.d.ts +2 -2
  43. package/dist/esm/components/atoms/CustomToggle/CustomToggle.d.ts +1 -1
  44. package/dist/esm/components/atoms/Input/Input.d.ts +1 -1
  45. package/dist/esm/components/atoms/Input/Input.presenter.d.ts +2 -2
  46. package/dist/esm/components/atoms/Password/Password.presenter.d.ts +2 -2
  47. package/dist/esm/components/atoms/RadioButton/RadioButton.d.ts +1 -1
  48. package/dist/esm/components/atoms/RadioButtonItem/RadioButtonItem.d.ts +1 -1
  49. package/dist/esm/components/atoms/RadioButtonItem/RadioButtonItem.presenter.d.ts +2 -2
  50. package/dist/esm/components/atoms/TextArea/TextArea.d.ts +1 -1
  51. package/dist/esm/components/atoms/TextArea/TextArea.presenter.d.ts +1 -1
  52. package/dist/esm/components/atoms/Toggle/Toggle.d.ts +1 -1
  53. package/dist/esm/components/atoms/Toggle/Toggle.presenter.d.ts +2 -2
  54. package/dist/esm/components/atoms/ToggleButton/ToggleButton.d.ts +1 -1
  55. package/dist/esm/components/molecules/FormField/FormField.d.ts +28 -2
  56. package/dist/esm/components/molecules/FormField/FormField.presenter.d.ts +14 -8
  57. package/dist/esm/components/molecules/FormField/FormField.types.d.ts +85 -52
  58. package/dist/esm/components/molecules/FormField/FormField.utils.d.ts +8 -11
  59. package/dist/esm/components/molecules/FormField/index.d.ts +1 -2
  60. package/dist/esm/components/molecules/FormField/useSafeController.d.ts +14 -0
  61. package/dist/esm/components/molecules/FormField/useSafeFormContext.d.ts +8 -0
  62. package/dist/esm/components/molecules/Modal/DemoModal.d.ts +1 -0
  63. package/dist/esm/components/molecules/Modal/ModalContext/ModalContext.types.d.ts +24 -1
  64. package/dist/esm/components/molecules/Search/Search.d.ts +1 -1
  65. package/dist/esm/components/molecules/Search/Search.presenter.d.ts +2 -2
  66. package/dist/esm/components/molecules/Select/Select.presenter.d.ts +4 -4
  67. package/dist/esm/components/organisms/Form/Form.d.ts +22 -1
  68. package/dist/esm/components/organisms/Form/Form.presenter.d.ts +21 -0
  69. package/dist/esm/components/organisms/Form/Form.types.d.ts +27 -131
  70. package/dist/esm/components/organisms/Form/examples/DropzoneFormExample.d.ts +6 -0
  71. package/dist/esm/components/organisms/Form/examples/UpdatedFormExample.d.ts +2 -0
  72. package/dist/esm/components/organisms/Form/{UseFormExample.d.ts → examples/UseFormExample.d.ts} +0 -3
  73. package/dist/esm/components/organisms/Form/index.d.ts +4 -4
  74. package/dist/esm/components/organisms/Form/useAutosave.d.ts +10 -0
  75. package/dist/esm/library.js +3 -3
  76. package/dist/esm/library.js.map +1 -1
  77. package/dist/index.d.ts +172 -232
  78. package/docs/FORM_MIGRATION_GUIDE.md +631 -0
  79. package/docs/components/molecules/FormField.md +129 -34
  80. package/docs/components/organisms/Form.md +858 -162
  81. package/package.json +4 -1
  82. package/dist/cjs/components/organisms/Form/DropzoneFormExample.d.ts +0 -6
  83. package/dist/cjs/components/organisms/Form/Form.utils.d.ts +0 -2
  84. package/dist/cjs/components/organisms/Form/FormContext.d.ts +0 -5
  85. package/dist/cjs/components/organisms/Form/UpdatedFormExample.d.ts +0 -23
  86. package/dist/cjs/components/organisms/Form/useForm.d.ts +0 -50
  87. package/dist/esm/components/organisms/Form/DropzoneFormExample.d.ts +0 -6
  88. package/dist/esm/components/organisms/Form/Form.utils.d.ts +0 -2
  89. package/dist/esm/components/organisms/Form/FormContext.d.ts +0 -5
  90. package/dist/esm/components/organisms/Form/UpdatedFormExample.d.ts +0 -23
  91. package/dist/esm/components/organisms/Form/useForm.d.ts +0 -50
  92. /package/dist/cjs/components/organisms/Form/{AutosaveFormExample.d.ts → examples/AutosaveFormExample.d.ts} +0 -0
  93. /package/dist/esm/components/organisms/Form/{AutosaveFormExample.d.ts → examples/AutosaveFormExample.d.ts} +0 -0
@@ -1,138 +1,34 @@
1
- import React from 'react';
2
- import type { FormHTMLAttributes, Ref } from 'react';
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
- * Type representing the allowed values for form fields
5
+ * Form submission handler
5
6
  */
6
- export type FieldValue = string | number | Date | boolean | File | Array<string | number | Date | File>;
7
+ export type FormSubmitHandler<TFormValues extends FieldValues = FieldValues> = (values: TFormValues) => void | Promise<void>;
7
8
  /**
8
- * Type representing the form values as a partial record of field names to field values
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 FormState<T extends FieldValue = FieldValue> = Partial<Record<string, T>>;
19
- /**
20
- * Type representing the form errors as a partial record of field names to error messages
21
- */
22
- export type FormErrors<T extends FormState = FormState> = Partial<Record<keyof T, string>>;
23
- /**
24
- * Type representing a validation function for a form field
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'>;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Placeholder for DropzoneFormExample
3
+ * This example needs to be updated to work with the new Form implementation
4
+ */
5
+ declare const DropzoneFormExample: () => import("react/jsx-runtime").JSX.Element;
6
+ export default DropzoneFormExample;
@@ -0,0 +1,2 @@
1
+ declare const UpdatedFormExample: () => import("react/jsx-runtime").JSX.Element;
2
+ export default UpdatedFormExample;
@@ -1,5 +1,2 @@
1
- /**
2
- * Main example demonstrating the useForm hook
3
- */
4
1
  declare const UseFormExample: () => import("react/jsx-runtime").JSX.Element;
5
2
  export default UseFormExample;
@@ -1,5 +1,5 @@
1
- import type { FormProps, FormProviderProps, FormState } from './Form.types';
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 * from './Form.types';
5
- export { useForm, useFormTyped } from './useForm';
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;