kelt-ui-kit-react 1.2.0 → 1.2.1

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 (215) hide show
  1. package/README.md +46 -46
  2. package/dist/App.d.ts +2 -3
  3. package/dist/App.menu.d.ts +10 -10
  4. package/dist/App.routes.d.ts +1 -1
  5. package/dist/_core/hooks/ImageChecker.d.ts +5 -6
  6. package/dist/_core/hooks/useIsMobile.d.ts +1 -1
  7. package/dist/action/Action.view.d.ts +1 -1
  8. package/dist/action/ButtonAction.d.ts +8 -9
  9. package/dist/badge/Badge.d.ts +8 -9
  10. package/dist/badge/Badge.view.d.ts +1 -1
  11. package/dist/button/Button.d.ts +1 -2
  12. package/dist/button/Button.view.d.ts +1 -1
  13. package/dist/button/button.interface.d.ts +17 -18
  14. package/dist/button/buttonActions/ButtonActions.d.ts +10 -11
  15. package/dist/card/Card.d.ts +12 -13
  16. package/dist/card/Card.view.d.ts +1 -1
  17. package/dist/card/card.interface.d.ts +10 -10
  18. package/dist/card/cardAction/CardAction.d.ts +13 -14
  19. package/dist/card/cardAction.interface.d.ts +8 -9
  20. package/dist/card/hook/useCardInteractions.d.ts +8 -8
  21. package/dist/carousel/Carousel.d.ts +14 -15
  22. package/dist/carousel/Carousel.view.d.ts +1 -1
  23. package/dist/damier/Damier.d.ts +9 -10
  24. package/dist/damier/Damier.view.d.ts +1 -1
  25. package/dist/damier/damierCell/DamierCell.d.ts +6 -7
  26. package/dist/damier/damierCell/damierCell.interface.d.ts +6 -6
  27. package/dist/dataTable/DataTable.d.ts +15 -16
  28. package/dist/dataTable/DataTable.view.d.ts +1 -1
  29. package/dist/dataTable/dataTable.interface.d.ts +30 -31
  30. package/dist/datePicker/DatePicker.d.ts +7 -8
  31. package/dist/datePicker/DatePicker.view.d.ts +1 -1
  32. package/dist/expands/Expands.d.ts +9 -10
  33. package/dist/expands/Expands.view.d.ts +1 -1
  34. package/dist/expands/expand/expand.d.ts +8 -9
  35. package/dist/expands/expand/expand.interface.d.ts +9 -9
  36. package/dist/filAriane/FilAriane.d.ts +8 -9
  37. package/dist/filAriane/FilAriane.view.d.ts +1 -1
  38. package/dist/filAriane/filAriane.interface.d.ts +6 -6
  39. package/dist/form/Form.d.ts +23 -24
  40. package/dist/form/Form.view.d.ts +1 -1
  41. package/dist/form/form.enum.d.ts +11 -11
  42. package/dist/form/form.interface.d.ts +29 -30
  43. package/dist/form/textArea/TextArea.d.ts +12 -13
  44. package/dist/form/textArea/TextArea.view.d.ts +1 -1
  45. package/dist/grid/Grid.d.ts +7 -8
  46. package/dist/grid/Grid.view.d.ts +1 -1
  47. package/dist/grid/col/Col.d.ts +10 -10
  48. package/dist/grid/col/colStyled/ColStyled.d.ts +9 -9
  49. package/dist/grid/container/Container.d.ts +5 -6
  50. package/dist/grid/grid.interface.d.ts +8 -8
  51. package/dist/grid/row/Row.d.ts +7 -8
  52. package/dist/header/Header.d.ts +1 -2
  53. package/dist/header/Header.view.d.ts +1 -1
  54. package/dist/header/header.interface.d.ts +9 -9
  55. package/dist/home/Home.d.ts +1 -1
  56. package/dist/icon/Icon.d.ts +1 -2
  57. package/dist/icon/Icons.view.d.ts +1 -1
  58. package/dist/icon/icon.interface.d.ts +4 -5
  59. package/dist/icon/iconSize.enum.d.ts +7 -7
  60. package/dist/index.d.ts +31 -32
  61. package/dist/index.html +18 -18
  62. package/dist/index.js +1 -1
  63. package/dist/loader/Loader.d.ts +7 -8
  64. package/dist/loader/Loader.view.d.ts +1 -1
  65. package/dist/main.d.ts +0 -1
  66. package/dist/manifest.json +25 -25
  67. package/dist/menus/Menus.d.ts +5 -6
  68. package/dist/menus/Menus.view.d.ts +1 -1
  69. package/dist/menus/menu/Menu.d.ts +6 -7
  70. package/dist/menus/menu/menu.interface.d.ts +10 -10
  71. package/dist/modal/Modal.d.ts +12 -13
  72. package/dist/modal/Modal.view.d.ts +1 -1
  73. package/dist/notFound/NotFound.d.ts +1 -1
  74. package/dist/overlayPanel/OverlayPanel.d.ts +18 -19
  75. package/dist/overlayPanel/OverlayPanel.view.d.ts +1 -1
  76. package/dist/overlayPanel/overlay.context.d.ts +9 -10
  77. package/dist/overlayPanel/overlayPanelStyled/OverlayPanelStyled.d.ts +7 -7
  78. package/dist/quantity/Quantity.d.ts +10 -11
  79. package/dist/robots.txt +3 -3
  80. package/dist/search/Search.d.ts +21 -22
  81. package/dist/search/Search.view.d.ts +1 -1
  82. package/dist/select/Select.d.ts +13 -14
  83. package/dist/select/Select.view.d.ts +1 -1
  84. package/dist/select/selectOption.interface.d.ts +4 -4
  85. package/dist/sidebar/Sidebar.d.ts +12 -13
  86. package/dist/sidebar/Sidebar.view.d.ts +1 -1
  87. package/dist/sidebarData/SidebarData.d.ts +6 -7
  88. package/dist/sidebarData/SidebarData.view.d.ts +1 -1
  89. package/dist/style.css +1 -1
  90. package/dist/toaster/Toaster.d.ts +1 -2
  91. package/dist/toaster/Toaster.view.d.ts +1 -1
  92. package/dist/toaster/store/useToasterStore.d.ts +18 -18
  93. package/index.html +19 -19
  94. package/package.json +55 -55
  95. package/public/index.html +18 -18
  96. package/public/manifest.json +25 -25
  97. package/public/robots.txt +3 -3
  98. package/src/App.css +11 -11
  99. package/src/App.menu.tsx +209 -209
  100. package/src/App.routes.tsx +16 -16
  101. package/src/App.tsx +28 -28
  102. package/src/_core/hooks/ImageChecker.tsx +26 -26
  103. package/src/_core/hooks/useIsMobile.ts +18 -18
  104. package/src/action/Action.view.tsx +21 -21
  105. package/src/action/ButtonAction.tsx +32 -32
  106. package/src/action/action.css +20 -20
  107. package/src/badge/Badge.tsx +34 -34
  108. package/src/badge/Badge.view.tsx +15 -15
  109. package/src/badge/badge.css +55 -55
  110. package/src/button/Button.tsx +44 -44
  111. package/src/button/Button.view.tsx +61 -61
  112. package/src/button/button.css +53 -53
  113. package/src/button/button.interface.tsx +20 -20
  114. package/src/button/buttonActions/ButtonActions.tsx +101 -101
  115. package/src/card/Card.tsx +125 -125
  116. package/src/card/Card.view.tsx +73 -73
  117. package/src/card/card.css +145 -145
  118. package/src/card/card.interface.tsx +9 -9
  119. package/src/card/cardAction/CardAction.tsx +135 -135
  120. package/src/card/cardAction/cardAction.css +10 -10
  121. package/src/card/cardAction.interface.tsx +10 -10
  122. package/src/card/hook/useCardInteractions.tsx +30 -30
  123. package/src/carousel/Carousel.css +44 -44
  124. package/src/carousel/Carousel.tsx +115 -115
  125. package/src/carousel/Carousel.view.tsx +13 -13
  126. package/src/damier/Damier.tsx +55 -55
  127. package/src/damier/Damier.view.tsx +31 -31
  128. package/src/damier/damier.css +44 -44
  129. package/src/damier/damierCell/DamierCell.tsx +18 -18
  130. package/src/damier/damierCell/damierCell.interface.tsx +5 -5
  131. package/src/dataTable/DataTable.tsx +202 -202
  132. package/src/dataTable/DataTable.view.tsx +59 -59
  133. package/src/dataTable/dataTable.css +14 -14
  134. package/src/dataTable/dataTable.interface.ts +29 -29
  135. package/src/datePicker/DatePicker.tsx +110 -110
  136. package/src/datePicker/DatePicker.view.tsx +9 -9
  137. package/src/datePicker/datePicker.css +77 -77
  138. package/src/expands/Expands.tsx +42 -42
  139. package/src/expands/Expands.view.tsx +90 -90
  140. package/src/expands/expand/expand.interface.tsx +8 -8
  141. package/src/expands/expand/expand.tsx +75 -75
  142. package/src/expands/expands.css +97 -97
  143. package/src/filAriane/FilAriane.tsx +57 -57
  144. package/src/filAriane/FilAriane.view.tsx +28 -28
  145. package/src/filAriane/filAriane.css +22 -22
  146. package/src/filAriane/filAriane.interface.tsx +6 -6
  147. package/src/form/Form.tsx +175 -175
  148. package/src/form/Form.view.tsx +47 -47
  149. package/src/form/form.css +37 -37
  150. package/src/form/form.enum.ts +11 -11
  151. package/src/form/form.interface.tsx +31 -31
  152. package/src/form/textArea/TextArea.tsx +53 -53
  153. package/src/form/textArea/TextArea.view.tsx +34 -34
  154. package/src/form/textArea/textArea.css +9 -9
  155. package/src/grid/Grid.tsx +21 -21
  156. package/src/grid/Grid.view.tsx +24 -24
  157. package/src/grid/col/Col.tsx +15 -15
  158. package/src/grid/col/colStyled/ColStyled.tsx +41 -41
  159. package/src/grid/container/Container.tsx +8 -8
  160. package/src/grid/container/container.css +5 -5
  161. package/src/grid/grid.interface.tsx +7 -7
  162. package/src/grid/row/Row.tsx +12 -12
  163. package/src/grid/row/row.css +18 -18
  164. package/src/header/Header.tsx +51 -51
  165. package/src/header/Header.view.tsx +5 -5
  166. package/src/header/header.css +26 -26
  167. package/src/header/header.interface.tsx +8 -8
  168. package/src/home/Home.tsx +3 -3
  169. package/src/icon/Icon.tsx +6 -6
  170. package/src/icon/Icons.view.tsx +29 -29
  171. package/src/icon/icon.css +20 -20
  172. package/src/icon/icon.interface.tsx +6 -6
  173. package/src/icon/iconSize.enum.ts +7 -7
  174. package/src/index.css +502 -502
  175. package/src/index.ts +33 -33
  176. package/src/loader/Loader.tsx +37 -37
  177. package/src/loader/Loader.view.tsx +20 -20
  178. package/src/loader/loader.css +30 -30
  179. package/src/main.tsx +10 -10
  180. package/src/menus/Menus.tsx +42 -42
  181. package/src/menus/Menus.view.tsx +39 -39
  182. package/src/menus/menu/Menu.tsx +17 -17
  183. package/src/menus/menu/menu.interface.tsx +9 -9
  184. package/src/menus/menus.css +47 -47
  185. package/src/modal/Modal.tsx +53 -53
  186. package/src/modal/Modal.view.tsx +25 -25
  187. package/src/modal/modal.css +67 -65
  188. package/src/notFound/NotFound.tsx +3 -3
  189. package/src/overlayPanel/OverlayPanel.tsx +189 -189
  190. package/src/overlayPanel/OverlayPanel.view.tsx +25 -25
  191. package/src/overlayPanel/overlay.context.tsx +28 -28
  192. package/src/overlayPanel/overlayPanel.css +35 -35
  193. package/src/overlayPanel/overlayPanelStyled/OverlayPanelStyled.tsx +18 -18
  194. package/src/quantity/Quantity.tsx +103 -103
  195. package/src/quantity/quantity.css +26 -26
  196. package/src/search/Search.tsx +161 -161
  197. package/src/search/Search.view.tsx +14 -14
  198. package/src/search/search.css +59 -59
  199. package/src/select/Select.tsx +53 -53
  200. package/src/select/Select.view.tsx +71 -71
  201. package/src/select/select.css +51 -51
  202. package/src/select/selectOption.interface.ts +4 -4
  203. package/src/sidebar/Sidebar.tsx +111 -111
  204. package/src/sidebar/Sidebar.view.tsx +17 -17
  205. package/src/sidebar/sidebar.css +87 -87
  206. package/src/sidebarData/SidebarData.tsx +19 -19
  207. package/src/sidebarData/SidebarData.view.tsx +19 -19
  208. package/src/sidebarData/sidebarData.css +27 -27
  209. package/src/toaster/Toaster.tsx +47 -47
  210. package/src/toaster/Toaster.view.tsx +3 -3
  211. package/src/toaster/store/useToasterStore.tsx +39 -39
  212. package/src/toaster/toaster.css +57 -57
  213. package/tsconfig.json +28 -28
  214. package/vite.config.ts +20 -20
  215. package/vite.config.ts.timestamp-1733262892554-a13dfef6e8a29.mjs +24 -24
package/src/form/Form.tsx CHANGED
@@ -1,175 +1,175 @@
1
- import React, {
2
- forwardRef,
3
- useCallback,
4
- useImperativeHandle,
5
- useRef,
6
- useState,
7
- } from "react";
8
- import { Button } from "../button/Button";
9
- import { Icon } from "../icon/Icon";
10
- import "./form.css";
11
- import { FormInterface, FormValuesInterface } from "./form.interface";
12
-
13
- export type FormProps<
14
- T extends { [key: string]: string | number | boolean | Date }
15
- > = {
16
- className?: string;
17
- title?: string;
18
- hideSubmit?: boolean;
19
- initialForm: FormInterface[];
20
- onSubmit?: (values: FormValuesInterface<T>) => void;
21
- onChange?: (values: FormValuesInterface<T>) => void;
22
- };
23
-
24
- export const DynamicForm = forwardRef(
25
- <T extends { [key: string]: string | number | boolean | Date }>(
26
- {
27
- initialForm,
28
- title,
29
- onSubmit,
30
- onChange,
31
- hideSubmit,
32
- className,
33
- }: FormProps<T>,
34
- ref: React.Ref<{
35
- clearInput?: (name: string) => void;
36
- resetForm?: () => void;
37
- focusInitialElement?: () => void;
38
- getValues?: () => FormValuesInterface<T>;
39
- updateFormValue?: (values: FormValuesInterface<T>) => void;
40
- }>
41
- ) => {
42
- const [values, setValues] = useState<FormValuesInterface<T>>(() => {
43
- const initialValues: FormValuesInterface<T> =
44
- {} as FormValuesInterface<T>;
45
- initialForm.forEach((field) => {
46
- (initialValues as any)[field.name] = field.value ?? "";
47
- });
48
- return initialValues;
49
- });
50
-
51
- // Stocker les références des inputs
52
- const inputRefs = useRef<{ [key: string]: HTMLInputElement | null }>({});
53
-
54
- const handleChange = useCallback(
55
- (
56
- event: React.ChangeEvent<HTMLInputElement>,
57
- forminterface: FormInterface
58
- ) => {
59
- const { name, value, type, checked } = event.target;
60
- if (forminterface.onChange) {
61
- forminterface.onChange(value, name);
62
- }
63
- setValues((prevValues) => {
64
- const currentValues = prevValues || {};
65
- const updatedValues = {
66
- ...currentValues,
67
- [name]: type === "checkbox" ? checked : value,
68
- };
69
- if (onChange) {
70
- onChange(updatedValues);
71
- }
72
- return updatedValues;
73
- });
74
- },
75
- [onChange]
76
- );
77
-
78
- const handleSubmit = useCallback(
79
- (e: React.FormEvent<HTMLFormElement>) => {
80
- e.preventDefault();
81
- if (onSubmit) {
82
- onSubmit(values);
83
- }
84
- },
85
- [onSubmit, values]
86
- );
87
-
88
- const resetForm = () => {
89
- setValues(() => {
90
- const resetValues: FormValuesInterface<T> =
91
- {} as FormValuesInterface<T>;
92
- initialForm.forEach((field) => {
93
- (resetValues as any)[field.name] = field.value ?? "";
94
- });
95
- return resetValues;
96
- });
97
- };
98
-
99
- const clearInput = useCallback((name: string) => {
100
- setValues((prevValues) => ({
101
- ...prevValues,
102
- [name]: "",
103
- }));
104
- }, []);
105
-
106
- // Fonction pour donner le focus à l'élément qui devait initialement l'avoir
107
- const focusInitialElement = () => {
108
- const focusedField = initialForm.find((field) => field.focus);
109
- if (focusedField && inputRefs.current[focusedField.name]) {
110
- setTimeout(() => {
111
- inputRefs.current[focusedField.name]?.select();
112
- }, 500);
113
- }
114
- };
115
- const getValues = () => values;
116
- const updateFormValue: (values: FormValuesInterface<T>) => void = (
117
- values
118
- ) => {
119
- setValues((prevValues) => ({
120
- ...prevValues,
121
- ...values,
122
- }));
123
- };
124
- useImperativeHandle(ref, () => ({
125
- resetForm,
126
- clearInput,
127
- focusInitialElement,
128
- getValues,
129
- updateFormValue,
130
- }));
131
-
132
- return (
133
- <form onSubmit={handleSubmit} className={className ?? ""}>
134
- {initialForm.map((v, key) => {
135
- const required = v.onRequired
136
- ? v.onRequired(v.value)
137
- : v.required ?? false;
138
- const disabled = v.onDisabled
139
- ? v.onDisabled(v.value)
140
- : v.disabled ?? false;
141
- return (
142
- <div
143
- key={key}
144
- className={`d-flex flex-column ${v.className} form-group-${v.type}`}
145
- >
146
- {v.label && <label>{v.label}</label>}
147
- {v.icon && <Icon classIcon={v.icon} />}
148
-
149
- <input
150
- ref={(el) => (inputRefs.current[v.name] = el)}
151
- name={v.name}
152
- type={v.type}
153
- placeholder={v.placeholder ?? ""}
154
- autoComplete={v.autoComplete ?? "on"}
155
- tabIndex={0}
156
- disabled={disabled}
157
- autoFocus={v.focus ?? false}
158
- required={required}
159
- value={values && (values[v.name] as string | number)}
160
- checked={v.type === "checkbox" ? !!values[v.name] : undefined}
161
- onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
162
- handleChange(e, v)
163
- }
164
- onInvalid={v.onInvalid ? v.onInvalid : undefined}
165
- />
166
- </div>
167
- );
168
- })}
169
- <div className="d-flex justify-content-end">
170
- {!hideSubmit && <Button title={title || "submit"} />}
171
- </div>
172
- </form>
173
- );
174
- }
175
- );
1
+ import React, {
2
+ forwardRef,
3
+ useCallback,
4
+ useImperativeHandle,
5
+ useRef,
6
+ useState,
7
+ } from "react";
8
+ import { Button } from "../button/Button";
9
+ import { Icon } from "../icon/Icon";
10
+ import "./form.css";
11
+ import { FormInterface, FormValuesInterface } from "./form.interface";
12
+
13
+ export type FormProps<
14
+ T extends { [key: string]: string | number | boolean | Date }
15
+ > = {
16
+ className?: string;
17
+ title?: string;
18
+ hideSubmit?: boolean;
19
+ initialForm: FormInterface[];
20
+ onSubmit?: (values: FormValuesInterface<T>) => void;
21
+ onChange?: (values: FormValuesInterface<T>) => void;
22
+ };
23
+
24
+ export const DynamicForm = forwardRef(
25
+ <T extends { [key: string]: string | number | boolean | Date }>(
26
+ {
27
+ initialForm,
28
+ title,
29
+ onSubmit,
30
+ onChange,
31
+ hideSubmit,
32
+ className,
33
+ }: FormProps<T>,
34
+ ref: React.Ref<{
35
+ clearInput?: (name: string) => void;
36
+ resetForm?: () => void;
37
+ focusInitialElement?: () => void;
38
+ getValues?: () => FormValuesInterface<T>;
39
+ updateFormValue?: (values: FormValuesInterface<T>) => void;
40
+ }>
41
+ ) => {
42
+ const [values, setValues] = useState<FormValuesInterface<T>>(() => {
43
+ const initialValues: FormValuesInterface<T> =
44
+ {} as FormValuesInterface<T>;
45
+ initialForm.forEach((field) => {
46
+ (initialValues as any)[field.name] = field.value ?? "";
47
+ });
48
+ return initialValues;
49
+ });
50
+
51
+ // Stocker les références des inputs
52
+ const inputRefs = useRef<{ [key: string]: HTMLInputElement | null }>({});
53
+
54
+ const handleChange = useCallback(
55
+ (
56
+ event: React.ChangeEvent<HTMLInputElement>,
57
+ forminterface: FormInterface
58
+ ) => {
59
+ const { name, value, type, checked } = event.target;
60
+ if (forminterface.onChange) {
61
+ forminterface.onChange(value, name);
62
+ }
63
+ setValues((prevValues) => {
64
+ const currentValues = prevValues || {};
65
+ const updatedValues = {
66
+ ...currentValues,
67
+ [name]: type === "checkbox" ? checked : value,
68
+ };
69
+ if (onChange) {
70
+ onChange(updatedValues);
71
+ }
72
+ return updatedValues;
73
+ });
74
+ },
75
+ [onChange]
76
+ );
77
+
78
+ const handleSubmit = useCallback(
79
+ (e: React.FormEvent<HTMLFormElement>) => {
80
+ e.preventDefault();
81
+ if (onSubmit) {
82
+ onSubmit(values);
83
+ }
84
+ },
85
+ [onSubmit, values]
86
+ );
87
+
88
+ const resetForm = () => {
89
+ setValues(() => {
90
+ const resetValues: FormValuesInterface<T> =
91
+ {} as FormValuesInterface<T>;
92
+ initialForm.forEach((field) => {
93
+ (resetValues as any)[field.name] = field.value ?? "";
94
+ });
95
+ return resetValues;
96
+ });
97
+ };
98
+
99
+ const clearInput = useCallback((name: string) => {
100
+ setValues((prevValues) => ({
101
+ ...prevValues,
102
+ [name]: "",
103
+ }));
104
+ }, []);
105
+
106
+ // Fonction pour donner le focus à l'élément qui devait initialement l'avoir
107
+ const focusInitialElement = () => {
108
+ const focusedField = initialForm.find((field) => field.focus);
109
+ if (focusedField && inputRefs.current[focusedField.name]) {
110
+ setTimeout(() => {
111
+ inputRefs.current[focusedField.name]?.select();
112
+ }, 500);
113
+ }
114
+ };
115
+ const getValues = () => values;
116
+ const updateFormValue: (values: FormValuesInterface<T>) => void = (
117
+ values
118
+ ) => {
119
+ setValues((prevValues) => ({
120
+ ...prevValues,
121
+ ...values,
122
+ }));
123
+ };
124
+ useImperativeHandle(ref, () => ({
125
+ resetForm,
126
+ clearInput,
127
+ focusInitialElement,
128
+ getValues,
129
+ updateFormValue,
130
+ }));
131
+
132
+ return (
133
+ <form onSubmit={handleSubmit} className={className ?? ""}>
134
+ {initialForm.map((v, key) => {
135
+ const required = v.onRequired
136
+ ? v.onRequired(v.value)
137
+ : v.required ?? false;
138
+ const disabled = v.onDisabled
139
+ ? v.onDisabled(v.value)
140
+ : v.disabled ?? false;
141
+ return (
142
+ <div
143
+ key={key}
144
+ className={`d-flex flex-column ${v.className} form-group-${v.type}`}
145
+ >
146
+ {v.label && <label>{v.label}</label>}
147
+ {v.icon && <Icon classIcon={v.icon} />}
148
+
149
+ <input
150
+ ref={(el) => (inputRefs.current[v.name] = el)}
151
+ name={v.name}
152
+ type={v.type}
153
+ placeholder={v.placeholder ?? ""}
154
+ autoComplete={v.autoComplete ?? "on"}
155
+ tabIndex={0}
156
+ disabled={disabled}
157
+ autoFocus={v.focus ?? false}
158
+ required={required}
159
+ value={values && (values[v.name] as string | number)}
160
+ checked={v.type === "checkbox" ? !!values[v.name] : undefined}
161
+ onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
162
+ handleChange(e, v)
163
+ }
164
+ onInvalid={v.onInvalid ? v.onInvalid : undefined}
165
+ />
166
+ </div>
167
+ );
168
+ })}
169
+ <div className="d-flex justify-content-end">
170
+ {!hideSubmit && <Button title={title || "submit"} />}
171
+ </div>
172
+ </form>
173
+ );
174
+ }
175
+ );
@@ -1,47 +1,47 @@
1
- import { DynamicForm } from "./Form";
2
- import { TypeInputEnum } from "./form.enum";
3
-
4
- import { FormInterface, FormValuesInterface } from "./form.interface";
5
- interface FormData {
6
- nom: string;
7
- age: number;
8
- validate: boolean;
9
- password: string;
10
- [key: string]: string | number | boolean | Date; // Signature d'index ajoutée
11
- }
12
- export const FormView = (): JSX.Element => {
13
- const initialValues: FormInterface[] = [
14
- {
15
- value: "Alexandre",
16
- label: "Nom",
17
- focus: true,
18
- name: "nom",
19
- type: TypeInputEnum.TEXT,
20
- required: true,
21
- },
22
- {
23
- value: 30,
24
- label: "Age",
25
- name: "age",
26
- type: TypeInputEnum.NUMBER,
27
- },
28
- {
29
- value: false,
30
- name: "validate",
31
- label: "Validate",
32
- type: TypeInputEnum.CHECKBOX,
33
- },
34
- {
35
- value: "password",
36
- name: "password",
37
- label: "Password",
38
- type: TypeInputEnum.PASSWORD,
39
- },
40
- ];
41
-
42
- // Fonction qui sera appelée lors de la soumission du formulaire
43
- const handleSubmit = (values: FormValuesInterface<FormData>) => {
44
- console.log("Form Submitted: ", values);
45
- };
46
- return <DynamicForm onSubmit={handleSubmit} initialForm={initialValues} />;
47
- };
1
+ import { DynamicForm } from "./Form";
2
+ import { TypeInputEnum } from "./form.enum";
3
+
4
+ import { FormInterface, FormValuesInterface } from "./form.interface";
5
+ interface FormData {
6
+ nom: string;
7
+ age: number;
8
+ validate: boolean;
9
+ password: string;
10
+ [key: string]: string | number | boolean | Date; // Signature d'index ajoutée
11
+ }
12
+ export const FormView = (): JSX.Element => {
13
+ const initialValues: FormInterface[] = [
14
+ {
15
+ value: "Alexandre",
16
+ label: "Nom",
17
+ focus: true,
18
+ name: "nom",
19
+ type: TypeInputEnum.TEXT,
20
+ required: true,
21
+ },
22
+ {
23
+ value: 30,
24
+ label: "Age",
25
+ name: "age",
26
+ type: TypeInputEnum.NUMBER,
27
+ },
28
+ {
29
+ value: false,
30
+ name: "validate",
31
+ label: "Validate",
32
+ type: TypeInputEnum.CHECKBOX,
33
+ },
34
+ {
35
+ value: "password",
36
+ name: "password",
37
+ label: "Password",
38
+ type: TypeInputEnum.PASSWORD,
39
+ },
40
+ ];
41
+
42
+ // Fonction qui sera appelée lors de la soumission du formulaire
43
+ const handleSubmit = (values: FormValuesInterface<FormData>) => {
44
+ console.log("Form Submitted: ", values);
45
+ };
46
+ return <DynamicForm onSubmit={handleSubmit} initialForm={initialValues} />;
47
+ };
package/src/form/form.css CHANGED
@@ -1,37 +1,37 @@
1
- input {
2
- border: 1px solid #cfbdbd;
3
- padding: 0.5rem 1rem;
4
- border-radius: 4px;
5
- margin: 0.25rem 0 0.25rem 0;
6
- min-width: 250px;
7
- &:focus-visible {
8
- outline: 1px solid #9696a7;
9
- }
10
- }
11
- form {
12
- label {
13
- font-weight: 600;
14
- font-size: 0.85rem;
15
- padding-bottom: 0.15rem;
16
- }
17
- .form-group-checkbox {
18
- display: flex;
19
- flex-direction: row;
20
- align-items: center;
21
- margin-top: 0.5rem;
22
- label {
23
- margin-right: 1rem;
24
- padding: 0;
25
- }
26
- input {
27
- min-width: auto;
28
- padding: 0;
29
- margin: 0;
30
- height: 18px;
31
- width: 18px;
32
- }
33
- }
34
- button {
35
- margin-top: 1rem;
36
- }
37
- }
1
+ input {
2
+ border: 1px solid #cfbdbd;
3
+ padding: 0.5rem 1rem;
4
+ border-radius: 4px;
5
+ margin: 0.25rem 0 0.25rem 0;
6
+ min-width: 250px;
7
+ &:focus-visible {
8
+ outline: 1px solid #9696a7;
9
+ }
10
+ }
11
+ form {
12
+ label {
13
+ font-weight: 600;
14
+ font-size: 0.85rem;
15
+ padding-bottom: 0.15rem;
16
+ }
17
+ .form-group-checkbox {
18
+ display: flex;
19
+ flex-direction: row;
20
+ align-items: center;
21
+ margin-top: 0.5rem;
22
+ label {
23
+ margin-right: 1rem;
24
+ padding: 0;
25
+ }
26
+ input {
27
+ min-width: auto;
28
+ padding: 0;
29
+ margin: 0;
30
+ height: 18px;
31
+ width: 18px;
32
+ }
33
+ }
34
+ button {
35
+ margin-top: 1rem;
36
+ }
37
+ }
@@ -1,11 +1,11 @@
1
- export enum TypeInputEnum {
2
- TEXT = "text",
3
- BUTTON = "button",
4
- EMAIL = "email",
5
- HIDDEN = "hidden",
6
- PASSWORD = "password",
7
- NUMBER = "number",
8
- CHECKBOX = "checkbox",
9
- RADIO = "radio",
10
- DATE = "date",
11
- }
1
+ export enum TypeInputEnum {
2
+ TEXT = "text",
3
+ BUTTON = "button",
4
+ EMAIL = "email",
5
+ HIDDEN = "hidden",
6
+ PASSWORD = "password",
7
+ NUMBER = "number",
8
+ CHECKBOX = "checkbox",
9
+ RADIO = "radio",
10
+ DATE = "date",
11
+ }
@@ -1,31 +1,31 @@
1
- import { TypeInputEnum } from "./form.enum";
2
-
3
- export type FormValuesInterface<
4
- T extends { [key: string]: string | number | boolean | Date }
5
- > = Partial<{
6
- [K in keyof T]: T[K];
7
- }>;
8
- export interface FormCondition {
9
- errorMessage: string;
10
- regex: string;
11
- }
12
- export type autoCompleteType = "off" | "on";
13
- export interface FormInterface {
14
- value: string | number | boolean | Date;
15
- id?: string;
16
- label?: string;
17
- focus?: boolean;
18
- type: TypeInputEnum;
19
- placeholder?: string;
20
- name: string;
21
- disabled?: boolean;
22
- required?: boolean;
23
- condition?: FormCondition;
24
- icon?: string;
25
- className?: string;
26
- autoComplete?: autoCompleteType;
27
- onChange?: (value: string | number | boolean | Date, name?: string) => void;
28
- onRequired?: (value: string | number | boolean | Date) => boolean;
29
- onDisabled?: (value: string | number | boolean | Date) => boolean;
30
- onInvalid?: (e: React.ChangeEvent<HTMLInputElement>) => void;
31
- }
1
+ import { TypeInputEnum } from "./form.enum";
2
+
3
+ export type FormValuesInterface<
4
+ T extends { [key: string]: string | number | boolean | Date }
5
+ > = Partial<{
6
+ [K in keyof T]: T[K];
7
+ }>;
8
+ export interface FormCondition {
9
+ errorMessage: string;
10
+ regex: string;
11
+ }
12
+ export type autoCompleteType = "off" | "on";
13
+ export interface FormInterface {
14
+ value: string | number | boolean | Date;
15
+ id?: string;
16
+ label?: string;
17
+ focus?: boolean;
18
+ type: TypeInputEnum;
19
+ placeholder?: string;
20
+ name: string;
21
+ disabled?: boolean;
22
+ required?: boolean;
23
+ condition?: FormCondition;
24
+ icon?: string;
25
+ className?: string;
26
+ autoComplete?: autoCompleteType;
27
+ onChange?: (value: string | number | boolean | Date, name?: string) => void;
28
+ onRequired?: (value: string | number | boolean | Date) => boolean;
29
+ onDisabled?: (value: string | number | boolean | Date) => boolean;
30
+ onInvalid?: (e: React.ChangeEvent<HTMLInputElement>) => void;
31
+ }