kelt-ui-kit-react 1.8.3 → 1.8.4

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 (243) hide show
  1. package/dist/badge/Badge.d.ts +1 -3
  2. package/dist/button/button.interface.d.ts +1 -1
  3. package/dist/dataTable/DataTable.d.ts +3 -17
  4. package/dist/dataTable/dataTable.interface.d.ts +3 -21
  5. package/dist/dataTable/dataTableActions/DataTableAction.d.ts +2 -2
  6. package/dist/dataTable/dataTableColumn/DataTableColumn.d.ts +7 -13
  7. package/dist/dataTable/dataTableLoading/DataTableLoading.d.ts +3 -1
  8. package/dist/dataTable/dataTableRow/DataTableRow.d.ts +3 -5
  9. package/dist/expands/expand/expand.d.ts +1 -1
  10. package/dist/form/form.enum.d.ts +0 -1
  11. package/dist/form/input/Input.d.ts +0 -3
  12. package/dist/form/inputNumber/InputNumber.d.ts +2 -0
  13. package/dist/icon/Icon.d.ts +1 -1
  14. package/dist/icon/icon.interface.d.ts +0 -1
  15. package/dist/index.d.ts +0 -1
  16. package/dist/index.js +2836 -3652
  17. package/dist/overlayPanel/OverlayPanel.d.ts +1 -3
  18. package/dist/select/Select.d.ts +1 -4
  19. package/dist/select/selectOption.interface.d.ts +0 -1
  20. package/dist/style.css +1 -1
  21. package/dist/tabs/Tabs.d.ts +1 -2
  22. package/package.json +1 -1
  23. package/src/badge/Badge.tsx +1 -9
  24. package/src/badge/badge.css +0 -4
  25. package/src/button/Button.tsx +1 -1
  26. package/src/button/button.interface.tsx +1 -1
  27. package/src/card/card.css +3 -23
  28. package/src/card/cardAction/CardAction.tsx +4 -4
  29. package/src/damier/damier.css +3 -2
  30. package/src/dataTable/DataTable.tsx +45 -670
  31. package/src/dataTable/DataTable.view.tsx +14 -47
  32. package/src/dataTable/dataTable.css +5 -153
  33. package/src/dataTable/dataTable.interface.ts +3 -21
  34. package/src/dataTable/dataTableActions/DataTableAction.tsx +2 -2
  35. package/src/dataTable/dataTableColumn/DataTableColumn.tsx +14 -64
  36. package/src/dataTable/dataTableLoading/DataTableLoading.tsx +15 -4
  37. package/src/dataTable/dataTableRow/DataTableRow.tsx +33 -60
  38. package/src/expands/Expands.tsx +16 -2
  39. package/src/expands/expand/expand.tsx +18 -6
  40. package/src/form/Form.tsx +12 -13
  41. package/src/form/form.css +2 -13
  42. package/src/form/form.enum.ts +0 -1
  43. package/src/form/input/Input.tsx +7 -61
  44. package/src/form/input/input.css +1 -23
  45. package/src/form/inputNumber/InputNumber.tsx +11 -6
  46. package/src/form/inputPrice/InputPrice.tsx +4 -2
  47. package/src/icon/Icon.tsx +2 -6
  48. package/src/icon/icon.interface.tsx +0 -1
  49. package/src/index.ts +0 -2
  50. package/src/overlayPanel/OverlayPanel.tsx +10 -23
  51. package/src/overlayPanel/overlay.context.tsx +4 -6
  52. package/src/overlayPanel/overlayPanel.css +1 -10
  53. package/src/select/Select.tsx +38 -134
  54. package/src/select/select.css +14 -65
  55. package/src/select/selectOption.interface.ts +0 -1
  56. package/src/sidebar/Sidebar.tsx +80 -9
  57. package/src/sidebar/sidebar.css +18 -1
  58. package/src/tabs/Tabs.tsx +1 -19
  59. package/dist/_core/type/generiqueType.d.ts +0 -4
  60. package/dist/dataTable/dataTableColumn/dataTableColumnFilter/DataTableColumnFilter.d.ts +0 -10
  61. package/dist/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterDate/DataTableColumnFilterDate.d.ts +0 -9
  62. package/dist/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterDateRange/dataTableColumnFilterDateRange.d.ts +0 -9
  63. package/dist/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterEnum/DataTableColumnFilterEnum.d.ts +0 -13
  64. package/dist/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterString/DataTableColumnFilterString.d.ts +0 -9
  65. package/dist/dataTable/dataTableColumn/dataTableColumnSort/DataTableColumnSort.d.ts +0 -11
  66. package/dist/dataTable/dataTableFilters/DataTableFilters.d.ts +0 -7
  67. package/dist/dataTable/dataTableRow/dataTableRowOverlay/DataTableRowOverlay.d.ts +0 -12
  68. package/dist/dataTable/dataTableRow/dataTableRowValue/DataTableRowValue.d.ts +0 -11
  69. package/kelt-ui-kit-react-1.6.9.tgz +0 -0
  70. package/package/README.md +0 -46
  71. package/package/index.html +0 -20
  72. package/package/package.json +0 -56
  73. package/package/public/favicon.ico +0 -0
  74. package/package/public/index.html +0 -18
  75. package/package/public/logo192.png +0 -0
  76. package/package/public/logo512.png +0 -0
  77. package/package/public/manifest.json +0 -25
  78. package/package/public/robots.txt +0 -3
  79. package/package/src/App.css +0 -11
  80. package/package/src/App.menu.tsx +0 -249
  81. package/package/src/App.routes.tsx +0 -16
  82. package/package/src/App.tsx +0 -30
  83. package/package/src/_core/hooks/HistoryProvider.tsx +0 -25
  84. package/package/src/_core/hooks/ImageChecker.tsx +0 -26
  85. package/package/src/_core/hooks/imageExist.tsx +0 -9
  86. package/package/src/_core/hooks/isEAN13.tsx +0 -16
  87. package/package/src/_core/hooks/objectToQueryParams.tsx +0 -32
  88. package/package/src/_core/hooks/useCurrency.tsx +0 -18
  89. package/package/src/_core/hooks/useDateutils.ts +0 -64
  90. package/package/src/_core/hooks/useIsMobile.ts +0 -18
  91. package/package/src/_core/hooks/useToken.tsx +0 -19
  92. package/package/src/_core/hooks/useValidate.tsx +0 -18
  93. package/package/src/_core/hooks/widgetSupport.tsx +0 -39
  94. package/package/src/action/Action.view.tsx +0 -21
  95. package/package/src/action/ButtonAction.tsx +0 -32
  96. package/package/src/action/action.css +0 -20
  97. package/package/src/badge/Badge.tsx +0 -34
  98. package/package/src/badge/Badge.view.tsx +0 -15
  99. package/package/src/badge/badge.css +0 -55
  100. package/package/src/button/Button.tsx +0 -46
  101. package/package/src/button/Button.view.tsx +0 -85
  102. package/package/src/button/button.css +0 -53
  103. package/package/src/button/button.interface.tsx +0 -21
  104. package/package/src/button/buttonActions/ButtonActions.tsx +0 -104
  105. package/package/src/button/buttonFile/ButtonFile.tsx +0 -59
  106. package/package/src/button/buttonFile/ButtonFile.view.tsx +0 -70
  107. package/package/src/button/buttonFilters/ButtonFilters.tsx +0 -102
  108. package/package/src/button/buttonFilters/buttonFilters.css +0 -22
  109. package/package/src/card/Card.tsx +0 -125
  110. package/package/src/card/Card.view.tsx +0 -73
  111. package/package/src/card/card.css +0 -145
  112. package/package/src/card/card.interface.tsx +0 -9
  113. package/package/src/card/cardAction/CardAction.tsx +0 -135
  114. package/package/src/card/cardAction/cardAction.css +0 -10
  115. package/package/src/card/cardAction.interface.tsx +0 -10
  116. package/package/src/card/hook/useCardInteractions.tsx +0 -30
  117. package/package/src/carousel/Carousel.css +0 -44
  118. package/package/src/carousel/Carousel.tsx +0 -115
  119. package/package/src/carousel/Carousel.view.tsx +0 -13
  120. package/package/src/damier/Damier.tsx +0 -64
  121. package/package/src/damier/Damier.view.tsx +0 -31
  122. package/package/src/damier/damier.css +0 -50
  123. package/package/src/damier/damierCell/DamierCell.tsx +0 -18
  124. package/package/src/damier/damierCell/damierCell.interface.tsx +0 -5
  125. package/package/src/dataTable/DataTable.tsx +0 -259
  126. package/package/src/dataTable/DataTable.view.tsx +0 -62
  127. package/package/src/dataTable/dataTable.css +0 -30
  128. package/package/src/dataTable/dataTable.interface.ts +0 -30
  129. package/package/src/dataTable/dataTableActions/DataTableAction.tsx +0 -44
  130. package/package/src/dataTable/dataTableColumn/DataTableColumn.tsx +0 -27
  131. package/package/src/dataTable/dataTableLoading/DataTableLoading.tsx +0 -21
  132. package/package/src/dataTable/dataTableRow/DataTableRow.tsx +0 -54
  133. package/package/src/datePicker/DatePicker.tsx +0 -110
  134. package/package/src/datePicker/DatePicker.view.tsx +0 -9
  135. package/package/src/datePicker/datePicker.css +0 -77
  136. package/package/src/expands/Expands.tsx +0 -42
  137. package/package/src/expands/Expands.view.tsx +0 -90
  138. package/package/src/expands/expand/expand.interface.tsx +0 -8
  139. package/package/src/expands/expand/expand.tsx +0 -75
  140. package/package/src/expands/expands.css +0 -97
  141. package/package/src/filAriane/FilAriane.tsx +0 -57
  142. package/package/src/filAriane/FilAriane.view.tsx +0 -28
  143. package/package/src/filAriane/filAriane.css +0 -23
  144. package/package/src/filAriane/filAriane.interface.tsx +0 -6
  145. package/package/src/form/Form.tsx +0 -279
  146. package/package/src/form/Form.view.tsx +0 -59
  147. package/package/src/form/form.css +0 -62
  148. package/package/src/form/form.enum.ts +0 -13
  149. package/package/src/form/form.interface.tsx +0 -37
  150. package/package/src/form/input/Input.tsx +0 -106
  151. package/package/src/form/input/input.css +0 -26
  152. package/package/src/form/inputNumber/InputNumber.tsx +0 -132
  153. package/package/src/form/inputNumber/InputNumber.view.tsx +0 -15
  154. package/package/src/form/inputPrice/InputPrice.tsx +0 -42
  155. package/package/src/form/inputPrice/InputPrice.view.tsx +0 -15
  156. package/package/src/form/textArea/TextArea.tsx +0 -59
  157. package/package/src/form/textArea/TextArea.view.tsx +0 -34
  158. package/package/src/form/textArea/textArea.css +0 -9
  159. package/package/src/grid/Grid.tsx +0 -21
  160. package/package/src/grid/Grid.view.tsx +0 -24
  161. package/package/src/grid/col/Col.tsx +0 -15
  162. package/package/src/grid/col/colStyled/ColStyled.tsx +0 -41
  163. package/package/src/grid/container/Container.tsx +0 -8
  164. package/package/src/grid/container/container.css +0 -5
  165. package/package/src/grid/grid.interface.tsx +0 -7
  166. package/package/src/grid/row/Row.tsx +0 -12
  167. package/package/src/grid/row/row.css +0 -18
  168. package/package/src/header/Header.tsx +0 -62
  169. package/package/src/header/Header.view.tsx +0 -5
  170. package/package/src/header/header.css +0 -26
  171. package/package/src/header/header.interface.tsx +0 -10
  172. package/package/src/home/Home.tsx +0 -3
  173. package/package/src/icon/Icon.tsx +0 -6
  174. package/package/src/icon/Icons.view.tsx +0 -29
  175. package/package/src/icon/icon.css +0 -20
  176. package/package/src/icon/icon.interface.tsx +0 -6
  177. package/package/src/icon/iconSize.enum.ts +0 -7
  178. package/package/src/index.css +0 -502
  179. package/package/src/index.ts +0 -58
  180. package/package/src/loader/Loader.tsx +0 -37
  181. package/package/src/loader/Loader.view.tsx +0 -20
  182. package/package/src/loader/loader.css +0 -30
  183. package/package/src/logo.svg +0 -1
  184. package/package/src/main.tsx +0 -10
  185. package/package/src/menus/Menus.tsx +0 -42
  186. package/package/src/menus/Menus.view.tsx +0 -39
  187. package/package/src/menus/menu/Menu.tsx +0 -17
  188. package/package/src/menus/menu/menu.interface.tsx +0 -9
  189. package/package/src/menus/menus.css +0 -47
  190. package/package/src/message/Message.tsx +0 -30
  191. package/package/src/message/Message.view.tsx +0 -22
  192. package/package/src/message/message.css +0 -29
  193. package/package/src/modal/Modal.tsx +0 -59
  194. package/package/src/modal/Modal.view.tsx +0 -26
  195. package/package/src/modal/modal.css +0 -71
  196. package/package/src/notFound/NotFound.tsx +0 -3
  197. package/package/src/overlayPanel/OverlayPanel.tsx +0 -195
  198. package/package/src/overlayPanel/OverlayPanel.view.tsx +0 -25
  199. package/package/src/overlayPanel/overlay.context.tsx +0 -28
  200. package/package/src/overlayPanel/overlayPanel.css +0 -35
  201. package/package/src/overlayPanel/overlayPanelStyled/OverlayPanelStyled.tsx +0 -18
  202. package/package/src/pdfViewer/PdfViewer.tsx +0 -73
  203. package/package/src/pdfViewer/PdfViewer.view.tsx +0 -5
  204. package/package/src/quantity/Quantity.tsx +0 -103
  205. package/package/src/quantity/Quantity.view.tsx +0 -0
  206. package/package/src/quantity/quantity.css +0 -26
  207. package/package/src/search/Search.tsx +0 -161
  208. package/package/src/search/Search.view.tsx +0 -14
  209. package/package/src/search/search.css +0 -59
  210. package/package/src/select/Select.tsx +0 -103
  211. package/package/src/select/Select.view.tsx +0 -71
  212. package/package/src/select/select.css +0 -69
  213. package/package/src/select/selectOption.interface.ts +0 -4
  214. package/package/src/sidebar/Sidebar.tsx +0 -208
  215. package/package/src/sidebar/Sidebar.view.tsx +0 -17
  216. package/package/src/sidebar/sidebar.css +0 -104
  217. package/package/src/sidebarData/SidebarData.tsx +0 -19
  218. package/package/src/sidebarData/SidebarData.view.tsx +0 -19
  219. package/package/src/sidebarData/sidebarData.css +0 -27
  220. package/package/src/tabs/Tabs.tsx +0 -90
  221. package/package/src/tabs/Tabs.view.tsx +0 -20
  222. package/package/src/tabs/tabs.css +0 -24
  223. package/package/src/toaster/Toaster.tsx +0 -55
  224. package/package/src/toaster/Toaster.view.tsx +0 -24
  225. package/package/src/toaster/store/useToasterStore.tsx +0 -41
  226. package/package/src/toaster/toaster.css +0 -87
  227. package/package/tsconfig.json +0 -28
  228. package/package/vite.config.ts +0 -20
  229. package/package/vite.config.ts.timestamp-1733262892554-a13dfef6e8a29.mjs +0 -24
  230. package/package/vite.config.ts.timestamp-1757847121745-e5a5bf54b81b.mjs +0 -28
  231. package/package/vite.config.ts.timestamp-1759742478362-4ac5c5a7db34b.mjs +0 -28
  232. package/src/_core/type/generiqueType.tsx +0 -4
  233. package/src/dataTable/dataTableColumn/dataTableColumnFilter/DataTableColumnFilter.tsx +0 -36
  234. package/src/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilter.css +0 -0
  235. package/src/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterDate/DataTableColumnFilterDate.tsx +0 -39
  236. package/src/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterDateRange/dataTableColumnFilterDateRange.tsx +0 -80
  237. package/src/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterEnum/DataTableColumnFilterEnum.tsx +0 -89
  238. package/src/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterString/DataTableColumnFilterString.tsx +0 -37
  239. package/src/dataTable/dataTableColumn/dataTableColumnSort/DataTableColumnSort.tsx +0 -42
  240. package/src/dataTable/dataTableFilters/DataTableFilters.tsx +0 -91
  241. package/src/dataTable/dataTableFilters/dataTableFilters.css +0 -16
  242. package/src/dataTable/dataTableRow/dataTableRowOverlay/DataTableRowOverlay.tsx +0 -80
  243. package/src/dataTable/dataTableRow/dataTableRowValue/DataTableRowValue.tsx +0 -123
@@ -1,279 +0,0 @@
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 { Select } from "../select/Select"; // <--- ton composant
11
- import "./form.css";
12
- import { FormInterface, FormValuesInterface } from "./form.interface";
13
- import { Input } from "./input/Input";
14
- import { TextArea } from "./textArea/TextArea";
15
-
16
- export type FormProps<
17
- T extends { [key: string]: string | number | boolean | Date | string[] }
18
- > = {
19
- id?: string;
20
- className?: string;
21
- title?: string;
22
- hideSubmit?: boolean;
23
- autoComplete?: string;
24
- children?: React.ReactNode;
25
- initialForm: FormInterface[];
26
- disabledSubmit?: boolean;
27
- onSubmit?: (values: FormValuesInterface<T>) => void;
28
- onChange?: (values: FormValuesInterface<T>) => void;
29
- };
30
-
31
- export const DynamicForm = forwardRef(
32
- <T extends { [key: string]: string | number | boolean | Date | string[] }>(
33
- {
34
- initialForm,
35
- title,
36
- onSubmit,
37
- id,
38
- children,
39
- autoComplete,
40
- onChange,
41
- hideSubmit,
42
- disabledSubmit = false,
43
- className,
44
- }: FormProps<T>,
45
- ref: React.Ref<{
46
- clearInput?: (name: string) => void;
47
- resetForm?: () => void;
48
- focusInitialElement?: () => void;
49
- getValues?: () => FormValuesInterface<T>;
50
- updateFormValue?: (values: FormValuesInterface<T>) => void;
51
- setBtnDisabledSubmit?: (disabled: boolean) => void;
52
- }>
53
- ) => {
54
- const [btnDisabledSubmit, setBtnDisabledSubmit] = useState(disabledSubmit);
55
- const [values, setValues] = useState<FormValuesInterface<T>>(() => {
56
- const initialValues: FormValuesInterface<T> =
57
- {} as FormValuesInterface<T>;
58
- initialForm.forEach((field) => {
59
- (initialValues as any)[field.name] = field.value ?? "";
60
- });
61
- return initialValues;
62
- });
63
-
64
- const inputRefs = useRef<{ [key: string]: HTMLInputElement | null }>({});
65
-
66
- /** Gestion des <input> */
67
- const handleChangeInput = useCallback(
68
- (
69
- event: React.ChangeEvent<HTMLInputElement>,
70
- forminterface: FormInterface
71
- ) => {
72
- const { name, type, checked, value } = event.target;
73
- const newValue = type === "checkbox" ? checked : value;
74
-
75
- if (forminterface.onChange) {
76
- forminterface.onChange(newValue, name);
77
- }
78
-
79
- setValues((prevValues) => {
80
- const updatedValues = { ...prevValues, [name]: newValue };
81
- if (onChange) {
82
- onChange(updatedValues);
83
- }
84
- return updatedValues;
85
- });
86
- },
87
- [onChange]
88
- );
89
- const handleChangeTextArea = useCallback(
90
- (name: string, value: string, forminterface: FormInterface) => {
91
- if (forminterface.onChange) {
92
- forminterface.onChange(value, name);
93
- }
94
-
95
- setValues((prevValues) => {
96
- const updatedValues = { ...prevValues, [name]: value };
97
- if (onChange) {
98
- onChange(updatedValues);
99
- }
100
- return updatedValues;
101
- });
102
- },
103
- [onChange]
104
- );
105
- /** Gestion des <select> */
106
- const handleChangeSelect = useCallback(
107
- (
108
- newValue: string | string[],
109
- name: string,
110
- forminterface: FormInterface
111
- ) => {
112
- if (forminterface.onChange) {
113
- forminterface.onChange(newValue, name);
114
- }
115
-
116
- setValues((prevValues) => {
117
- const updatedValues = { ...prevValues, [name]: newValue };
118
- if (onChange) onChange(updatedValues);
119
- return updatedValues;
120
- });
121
- },
122
- [onChange]
123
- );
124
-
125
- const handleSubmit = useCallback(
126
- (e: React.FormEvent<HTMLFormElement>) => {
127
- e.preventDefault();
128
- if (onSubmit) {
129
- onSubmit(values);
130
- }
131
- },
132
- [onSubmit, values]
133
- );
134
-
135
- const resetForm = () => {
136
- setValues(() => {
137
- const resetValues: FormValuesInterface<T> =
138
- {} as FormValuesInterface<T>;
139
- initialForm.forEach((field) => {
140
- (resetValues as any)[field.name] = field.value ?? "";
141
- });
142
- return resetValues;
143
- });
144
- };
145
-
146
- const clearInput = useCallback((name: string) => {
147
- setValues((prevValues) => ({
148
- ...prevValues,
149
- [name]: "",
150
- }));
151
- }, []);
152
-
153
- const focusInitialElement = () => {
154
- const focusedField = initialForm.find((field) => field.focus);
155
- if (focusedField && inputRefs.current[focusedField.name]) {
156
- setTimeout(() => {
157
- inputRefs.current[focusedField.name]?.select();
158
- }, 500);
159
- }
160
- };
161
-
162
- const getValues = () => values;
163
-
164
- const updateFormValue: (values: FormValuesInterface<T>) => void = (
165
- values
166
- ) => {
167
- setValues((prevValues) => ({
168
- ...prevValues,
169
- ...values,
170
- }));
171
- };
172
-
173
- useImperativeHandle(ref, () => ({
174
- resetForm,
175
- clearInput,
176
- focusInitialElement,
177
- getValues,
178
- updateFormValue,
179
- setBtnDisabledSubmit,
180
- }));
181
-
182
- return (
183
- <form
184
- autoComplete={autoComplete ?? "off"}
185
- onSubmit={handleSubmit}
186
- className={className ?? ""}
187
- >
188
- <div className="form-content">
189
- {initialForm.map((v, key) => {
190
- const required = v.onRequired
191
- ? v.onRequired(v.value)
192
- : v.required ?? false;
193
- const disabled = v.onDisabled
194
- ? v.onDisabled(v.value)
195
- : v.disabled ?? false;
196
-
197
- return (
198
- <div
199
- key={key}
200
- className={`d-flex flex-column ${
201
- v.className ?? ""
202
- } form-group form-group-${v.type}`}
203
- >
204
- {v.label && <label>{v.label}</label>}
205
- {v.icon && <Icon classIcon={v.icon} />}
206
-
207
- {v.type === "select" ? (
208
- <Select
209
- id={v.id ?? v.name}
210
- label={undefined}
211
- name={v.name}
212
- options={v.options ?? []}
213
- disabled={disabled}
214
- multiple={v.multiple}
215
- value={values[v.name] as any}
216
- required={required}
217
- defaultValue={v.value as string | string[]}
218
- placeholder={v.placeholder}
219
- onChangeMultiple={(newValue) =>
220
- handleChangeSelect(newValue, v.name, v)
221
- }
222
- onChange={(newValue) =>
223
- handleChangeSelect(newValue, v.name, v)
224
- }
225
- />
226
- ) : v.type === "textarea" ? (
227
- <TextArea
228
- id={v.id ?? v.name}
229
- name={v.name}
230
- className="textarea-input"
231
- placeholder={v.placeholder ?? ""}
232
- disabled={disabled}
233
- required={required}
234
- value={values[v.name] as string}
235
- onChange={(value, name) =>
236
- handleChangeTextArea(name, value, v)
237
- }
238
- />
239
- ) : (
240
- <Input
241
- id={v.id ?? v.name}
242
- ref={(el) => (inputRefs.current[v.name] = el)}
243
- name={v.name}
244
- type={v.type}
245
- placeholder={v.placeholder ?? ""}
246
- autoComplete={v.autoComplete}
247
- tabIndex={0}
248
- disabled={disabled}
249
- autoFocus={v.focus ?? false}
250
- required={required}
251
- step={v.step ?? "0.01"}
252
- value={values[v.name] as string | number}
253
- checked={
254
- v.type === "checkbox" ? !!values[v.name] : undefined
255
- }
256
- onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
257
- handleChangeInput(e, v)
258
- }
259
- onInvalid={v.onInvalid ? v.onInvalid : undefined}
260
- />
261
- )}
262
- </div>
263
- );
264
- })}
265
- {children}
266
- </div>
267
- <div className="d-flex justify-content-end form-footer">
268
- {!hideSubmit && (
269
- <Button
270
- id={`button-${id}`}
271
- disabled={btnDisabledSubmit}
272
- title={title || "submit"}
273
- />
274
- )}
275
- </div>
276
- </form>
277
- );
278
- }
279
- );
@@ -1,59 +0,0 @@
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 | string[]; // 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.PASSWORD,
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
- value: "",
42
- name: "selectOption",
43
- label: "Select Option",
44
- placeholder: "Choose an option",
45
- type: TypeInputEnum.SELECT,
46
- options: [
47
- { value: "option1", label: "Option 1" },
48
- { value: "option2", label: "Option 2" },
49
- { value: "option3", label: "Option 3" },
50
- ],
51
- },
52
- ];
53
-
54
- // Fonction qui sera appelée lors de la soumission du formulaire
55
- const handleSubmit = (values: FormValuesInterface<FormData>) => {
56
- console.log("Form Submitted: ", values);
57
- };
58
- return <DynamicForm onSubmit={handleSubmit} initialForm={initialValues} />;
59
- };
@@ -1,62 +0,0 @@
1
- input {
2
- border: 1px solid #b2a1a1;
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
- input[type="checkbox"],
12
- input[type="radio"] {
13
- min-width: auto;
14
- padding: 0;
15
- margin: 0;
16
- height: 18px;
17
- width: 18px;
18
- }
19
- form {
20
- &.form-row {
21
- display: flex;
22
- flex-direction: row;
23
- flex-wrap: wrap;
24
- align-items: center;
25
- .form-group {
26
- margin-right: 1rem;
27
- flex: 1;
28
- padding: 0;
29
- .input-container {
30
- min-width: auto;
31
- input {
32
- min-width: auto;
33
- }
34
- }
35
- }
36
- }
37
- label {
38
- font-weight: 600;
39
- font-size: 0.85rem;
40
- padding-bottom: 0.15rem;
41
- }
42
- .form-group-checkbox {
43
- display: flex;
44
- flex-direction: row;
45
- align-items: center;
46
- margin-top: 0.5rem;
47
- label {
48
- margin-right: 1rem;
49
- padding: 0;
50
- }
51
- input {
52
- min-width: auto;
53
- padding: 0;
54
- margin: 0;
55
- height: 18px;
56
- width: 18px;
57
- }
58
- }
59
- button {
60
- margin-top: 1rem;
61
- }
62
- }
@@ -1,13 +0,0 @@
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
- SELECT = "select",
12
- TEXTAREA = "textarea",
13
- }
@@ -1,37 +0,0 @@
1
- import { TypeInputEnum } from "./form.enum";
2
-
3
- export type FormValuesInterface<
4
- T extends { [key: string]: string | number | boolean | Date | string[] }
5
- > = Partial<{
6
- [K in keyof T]: T[K];
7
- }>;
8
- export interface FormCondition {
9
- errorMessage: string;
10
- regex: string;
11
- }
12
-
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
- multiple?: boolean;
26
- options?: { value: string; label: string }[]; // <--- pour les <option>
27
- className?: string;
28
- autoComplete?: string;
29
- step?: string;
30
- onChange?: (
31
- value: string | number | boolean | Date | string[],
32
- name?: string
33
- ) => void;
34
- onRequired?: (value: string | number | boolean | Date) => boolean;
35
- onDisabled?: (value: string | number | boolean | Date) => boolean;
36
- onInvalid?: (e: React.ChangeEvent<HTMLInputElement>) => void;
37
- }
@@ -1,106 +0,0 @@
1
- import { forwardRef, useState } from "react";
2
- import { Icon } from "../../icon/Icon";
3
- import { TypeInputEnum } from "../form.enum";
4
- import "./input.css";
5
-
6
- export interface InputProps {
7
- id: string; // obligatoire pour le label for
8
- name: string;
9
- type?: TypeInputEnum;
10
- onInvalid?: (e: React.FocusEvent<HTMLInputElement>) => void;
11
- value?: string | number;
12
- placeholder?: string;
13
- className?: string;
14
- inputMode?: "text" | "numeric" | "decimal" | "email" | "tel" | "search";
15
- disabled?: boolean;
16
- autoFocus?: boolean;
17
- required?: boolean;
18
- minLength?: number;
19
- maxLength?: number;
20
- autoComplete?: string;
21
- step?: string;
22
- tabIndex?: number;
23
- checked?: boolean;
24
- handleKeyDown?: (e: React.KeyboardEvent<HTMLInputElement>) => void;
25
- onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;
26
- onBlur?: (e: React.FocusEvent<HTMLInputElement>) => void;
27
- onClick?: (e: React.MouseEvent<HTMLInputElement>) => void;
28
- }
29
-
30
- export const Input = forwardRef<HTMLInputElement, InputProps>(
31
- (
32
- {
33
- id,
34
- name,
35
- type = TypeInputEnum.TEXT,
36
- value,
37
- onInvalid,
38
- placeholder,
39
- className,
40
- inputMode,
41
- minLength,
42
- maxLength,
43
- autoFocus = false,
44
- disabled = false,
45
- required = false,
46
- autoComplete,
47
- tabIndex = 0,
48
- step,
49
- checked,
50
- onChange,
51
- onBlur,
52
- onClick,
53
- handleKeyDown,
54
- },
55
- ref
56
- ) => {
57
- // Si le type est password, on utilise l'input de type password
58
- const [showPassword, setShowPassword] = useState(false);
59
-
60
- return (
61
- <div className={`input-container ${`input-container-${type}`} `}>
62
- <input name={`hide-${name}`} type="text" style={{ display: "none" }} />
63
-
64
- <input
65
- ref={ref} // 👈 le vrai ref est bien transmis au HTMLInputElement
66
- id={id}
67
- name={name}
68
- inputMode={inputMode ?? (type === "number" ? "numeric" : "text")}
69
- type={showPassword ? TypeInputEnum.TEXT : type}
70
- spellCheck="false"
71
- value={value}
72
- placeholder={placeholder}
73
- disabled={disabled}
74
- required={required}
75
- autoComplete={autoComplete ?? "new-password"}
76
- step={step}
77
- tabIndex={tabIndex}
78
- autoFocus={autoFocus}
79
- minLength={minLength}
80
- maxLength={maxLength}
81
- onChange={onChange}
82
- checked={checked}
83
- onKeyDown={handleKeyDown}
84
- onBlur={onBlur}
85
- onClick={(e) => {
86
- e.stopPropagation();
87
- onClick && onClick(e);
88
- }}
89
- className={`input-field ${className ?? ""}`}
90
- onInvalid={onInvalid}
91
- />
92
-
93
- {type === TypeInputEnum.PASSWORD && (
94
- <div
95
- onClick={() => setShowPassword(!showPassword)}
96
- className="input-password-icon"
97
- >
98
- <Icon classIcon={showPassword ? "bi-eye-slash" : "bi-eye"} />
99
- </div>
100
- )}
101
- </div>
102
- );
103
- }
104
- );
105
-
106
- Input.displayName = "Input";
@@ -1,26 +0,0 @@
1
- .input-container {
2
- position: relative;
3
- min-width: 250px;
4
- width: 100%;
5
- &.input-container-radio,
6
- &.input-container-checkbox {
7
- min-width: 10px;
8
- width: 10px;
9
- input {
10
- width: 10px;
11
- min-width: 10px;
12
- }
13
- }
14
- .input-password-icon {
15
- position: absolute;
16
- right: 10px;
17
- height: 100%;
18
- top: 0;
19
- display: flex;
20
- align-items: center;
21
- }
22
- input {
23
- width: 100%;
24
- font-size: 0.8rem;
25
- }
26
- }