kelt-ui-kit-react 2.0.6 → 2.0.9

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 (313) hide show
  1. package/.github/workflows/publish.yml +40 -31
  2. package/README.md +124 -72
  3. package/dist/App.d.ts +2 -3
  4. package/dist/App.menu.d.ts +10 -10
  5. package/dist/App.routes.d.ts +1 -1
  6. package/dist/_core/hooks/HistoryProvider.d.ts +5 -5
  7. package/dist/_core/hooks/ImageChecker.d.ts +5 -6
  8. package/dist/_core/hooks/imageExist.d.ts +5 -6
  9. package/dist/_core/hooks/isEAN13.d.ts +1 -1
  10. package/dist/_core/hooks/objectToQueryParams.d.ts +1 -1
  11. package/dist/_core/hooks/useCurrency.d.ts +3 -3
  12. package/dist/_core/hooks/useDateutils.d.ts +4 -4
  13. package/dist/_core/hooks/useIsMobile.d.ts +1 -1
  14. package/dist/_core/hooks/useToken.d.ts +3 -3
  15. package/dist/_core/hooks/useValidate.d.ts +5 -5
  16. package/dist/_core/hooks/widgetSupport.d.ts +1 -1
  17. package/dist/_core/type/generiqueType.d.ts +4 -0
  18. package/dist/action/Action.view.d.ts +1 -1
  19. package/dist/action/ButtonAction.d.ts +8 -9
  20. package/dist/addressSearch/AddressSearch.d.ts +18 -19
  21. package/dist/addressSearch/AddressSearch.view.d.ts +1 -1
  22. package/dist/badge/Badge.d.ts +10 -9
  23. package/dist/badge/Badge.view.d.ts +1 -1
  24. package/dist/button/Button.d.ts +1 -2
  25. package/dist/button/Button.view.d.ts +1 -1
  26. package/dist/button/button.interface.d.ts +19 -20
  27. package/dist/button/buttonActions/ButtonActions.d.ts +11 -12
  28. package/dist/button/buttonFile/ButtonFile.d.ts +9 -9
  29. package/dist/button/buttonFile/ButtonFile.view.d.ts +1 -1
  30. package/dist/button/buttonFilters/ButtonFilters.d.ts +16 -17
  31. package/dist/card/Card.d.ts +14 -15
  32. package/dist/card/Card.view.d.ts +1 -1
  33. package/dist/card/card.interface.d.ts +10 -10
  34. package/dist/card/cardAction/CardAction.d.ts +13 -14
  35. package/dist/card/cardAction.interface.d.ts +8 -9
  36. package/dist/card/hook/useCardInteractions.d.ts +8 -8
  37. package/dist/carousel/Carousel.d.ts +14 -15
  38. package/dist/carousel/Carousel.view.d.ts +1 -1
  39. package/dist/damier/Damier.d.ts +9 -10
  40. package/dist/damier/Damier.view.d.ts +1 -1
  41. package/dist/damier/damierCell/DamierCell.d.ts +6 -7
  42. package/dist/damier/damierCell/damierCell.interface.d.ts +6 -6
  43. package/dist/dataTable/DataTable.d.ts +37 -33
  44. package/dist/dataTable/DataTable.view.d.ts +1 -1
  45. package/dist/dataTable/dataTable.interface.d.ts +70 -47
  46. package/dist/dataTable/dataTable.utils.d.ts +17 -0
  47. package/dist/dataTable/dataTableActions/DataTableAction.d.ts +9 -10
  48. package/dist/dataTable/dataTableColumn/DataTableColumn.d.ts +14 -8
  49. package/dist/dataTable/dataTableColumn/dataTableColumnFilter/DataTableColumnFilter.d.ts +9 -0
  50. package/dist/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterDate/DataTableColumnFilterDate.d.ts +9 -0
  51. package/dist/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterDateRange/dataTableColumnFilterDateRange.d.ts +9 -0
  52. package/dist/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterEnum/DataTableColumnFilterEnum.d.ts +12 -0
  53. package/dist/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterString/DataTableColumnFilterString.d.ts +9 -0
  54. package/dist/dataTable/dataTableColumn/dataTableColumnSort/DataTableColumnSort.d.ts +10 -0
  55. package/dist/dataTable/dataTableFilters/DataTableFilters.d.ts +6 -0
  56. package/dist/dataTable/dataTableLoading/DataTableLoading.d.ts +8 -7
  57. package/dist/dataTable/dataTableRow/DataTableRow.d.ts +12 -11
  58. package/dist/dataTable/useDataTableState.d.ts +13 -0
  59. package/dist/datePicker/DatePicker.d.ts +7 -8
  60. package/dist/datePicker/DatePicker.view.d.ts +1 -1
  61. package/dist/docs/ComponentDocs.d.ts +6 -0
  62. package/dist/docs/catalog.d.ts +8 -0
  63. package/dist/docs/documentation.types.d.ts +21 -0
  64. package/dist/expands/Expands.d.ts +11 -12
  65. package/dist/expands/Expands.view.d.ts +1 -1
  66. package/dist/expands/expand/expand.d.ts +10 -11
  67. package/dist/expands/expand/expand.interface.d.ts +9 -9
  68. package/dist/filAriane/FilAriane.d.ts +8 -9
  69. package/dist/filAriane/FilAriane.view.d.ts +1 -1
  70. package/dist/filAriane/filAriane.interface.d.ts +6 -6
  71. package/dist/form/Form.d.ts +35 -36
  72. package/dist/form/Form.view.d.ts +1 -1
  73. package/dist/form/form.enum.d.ts +16 -15
  74. package/dist/form/form.interface.d.ts +53 -54
  75. package/dist/form/input/Input.d.ts +27 -25
  76. package/dist/form/inputNumber/InputNumber.d.ts +21 -22
  77. package/dist/form/inputNumber/InputNumber.view.d.ts +1 -1
  78. package/dist/form/inputPrice/InputPrice.d.ts +14 -15
  79. package/dist/form/inputPrice/InputPrice.view.d.ts +1 -1
  80. package/dist/form/textArea/TextArea.d.ts +14 -15
  81. package/dist/form/textArea/TextArea.view.d.ts +1 -1
  82. package/dist/geocoding/GeocodingService.d.ts +11 -12
  83. package/dist/geocoding/geocoding.interface.d.ts +20 -20
  84. package/dist/grid/Grid.d.ts +9 -10
  85. package/dist/grid/Grid.view.d.ts +1 -1
  86. package/dist/grid/col/Col.d.ts +5 -6
  87. package/dist/grid/col/colStyled/ColStyled.d.ts +10 -11
  88. package/dist/grid/container/Container.d.ts +5 -6
  89. package/dist/grid/grid.interface.d.ts +23 -23
  90. package/dist/grid/row/Row.d.ts +13 -14
  91. package/dist/header/Header.d.ts +1 -2
  92. package/dist/header/Header.view.d.ts +1 -1
  93. package/dist/header/header.interface.d.ts +12 -12
  94. package/dist/home/Home.d.ts +1 -1
  95. package/dist/icon/Icon.d.ts +1 -2
  96. package/dist/icon/Icons.view.d.ts +1 -1
  97. package/dist/icon/icon.interface.d.ts +5 -5
  98. package/dist/icon/iconSize.enum.d.ts +7 -7
  99. package/dist/index.d.ts +56 -54
  100. package/dist/index.html +18 -18
  101. package/dist/index.js +3964 -3470
  102. package/dist/loader/Loader.d.ts +7 -8
  103. package/dist/loader/Loader.view.d.ts +1 -1
  104. package/dist/main.d.ts +0 -1
  105. package/dist/manifest.json +25 -25
  106. package/dist/menus/Menus.d.ts +5 -6
  107. package/dist/menus/Menus.view.d.ts +1 -1
  108. package/dist/menus/menu/Menu.d.ts +7 -8
  109. package/dist/menus/menu/menu.interface.d.ts +10 -10
  110. package/dist/message/Message.d.ts +6 -7
  111. package/dist/message/Message.view.d.ts +1 -1
  112. package/dist/modal/Modal.d.ts +13 -14
  113. package/dist/modal/Modal.view.d.ts +1 -1
  114. package/dist/notFound/NotFound.d.ts +1 -1
  115. package/dist/overlayPanel/OverlayPanel.d.ts +22 -23
  116. package/dist/overlayPanel/OverlayPanel.view.d.ts +1 -1
  117. package/dist/overlayPanel/overlay.context.d.ts +9 -10
  118. package/dist/overlayPanel/overlayPanelStyled/OverlayPanelStyled.d.ts +9 -9
  119. package/dist/pdfViewer/PdfViewer.d.ts +12 -12
  120. package/dist/pdfViewer/PdfViewer.view.d.ts +1 -1
  121. package/dist/quantity/Quantity.d.ts +10 -11
  122. package/dist/robots.txt +3 -3
  123. package/dist/search/Search.d.ts +21 -22
  124. package/dist/search/Search.view.d.ts +1 -1
  125. package/dist/select/Select.d.ts +23 -24
  126. package/dist/select/Select.view.d.ts +1 -1
  127. package/dist/select/selectOption.interface.d.ts +5 -5
  128. package/dist/sidebar/Sidebar.d.ts +12 -13
  129. package/dist/sidebar/Sidebar.view.d.ts +1 -1
  130. package/dist/sidebarData/SidebarData.d.ts +6 -7
  131. package/dist/sidebarData/SidebarData.view.d.ts +1 -1
  132. package/dist/style.css +1 -1
  133. package/dist/tabs/Tabs.d.ts +17 -17
  134. package/dist/tabs/Tabs.view.d.ts +1 -1
  135. package/dist/toaster/Toaster.d.ts +1 -2
  136. package/dist/toaster/Toaster.view.d.ts +1 -1
  137. package/dist/toaster/store/useToasterStore.d.ts +24 -20
  138. package/docs.plugin.ts +223 -0
  139. package/index.html +20 -18
  140. package/package.json +64 -56
  141. package/public/index.html +18 -18
  142. package/public/manifest.json +25 -25
  143. package/public/robots.txt +3 -3
  144. package/src/App.css +178 -11
  145. package/src/App.menu.tsx +277 -257
  146. package/src/App.routes.tsx +21 -16
  147. package/src/App.tsx +31 -30
  148. package/src/_core/hooks/HistoryProvider.tsx +25 -25
  149. package/src/_core/hooks/ImageChecker.tsx +26 -26
  150. package/src/_core/hooks/imageExist.tsx +9 -9
  151. package/src/_core/hooks/isEAN13.tsx +16 -16
  152. package/src/_core/hooks/objectToQueryParams.tsx +32 -32
  153. package/src/_core/hooks/useCurrency.tsx +18 -18
  154. package/src/_core/hooks/useDateutils.ts +64 -64
  155. package/src/_core/hooks/useIsMobile.ts +18 -18
  156. package/src/_core/hooks/useToken.tsx +19 -19
  157. package/src/_core/hooks/useValidate.tsx +18 -18
  158. package/src/_core/hooks/widgetSupport.tsx +39 -39
  159. package/src/_core/type/generiqueType.tsx +4 -0
  160. package/src/action/Action.view.tsx +21 -21
  161. package/src/action/ButtonAction.tsx +32 -32
  162. package/src/action/action.css +20 -20
  163. package/src/addressSearch/AddressSearch.tsx +246 -246
  164. package/src/addressSearch/AddressSearch.view.tsx +52 -52
  165. package/src/addressSearch/addressSearch.css +132 -132
  166. package/src/badge/Badge.tsx +41 -34
  167. package/src/badge/Badge.view.tsx +15 -15
  168. package/src/badge/badge.css +63 -55
  169. package/src/button/Button.tsx +48 -48
  170. package/src/button/Button.view.tsx +85 -85
  171. package/src/button/button.css +53 -53
  172. package/src/button/button.interface.tsx +22 -22
  173. package/src/button/buttonActions/ButtonActions.tsx +104 -104
  174. package/src/button/buttonFile/ButtonFile.tsx +59 -59
  175. package/src/button/buttonFile/ButtonFile.view.tsx +70 -70
  176. package/src/button/buttonFilters/ButtonFilters.tsx +102 -102
  177. package/src/button/buttonFilters/buttonFilters.css +22 -22
  178. package/src/card/Card.tsx +151 -151
  179. package/src/card/Card.view.tsx +73 -73
  180. package/src/card/card.css +144 -144
  181. package/src/card/card.interface.tsx +9 -9
  182. package/src/card/cardAction/CardAction.tsx +135 -135
  183. package/src/card/cardAction/cardAction.css +10 -10
  184. package/src/card/cardAction.interface.tsx +10 -10
  185. package/src/card/hook/useCardInteractions.tsx +30 -30
  186. package/src/carousel/Carousel.css +44 -44
  187. package/src/carousel/Carousel.tsx +115 -115
  188. package/src/carousel/Carousel.view.tsx +13 -13
  189. package/src/damier/Damier.tsx +64 -64
  190. package/src/damier/Damier.view.tsx +31 -31
  191. package/src/damier/damier.css +50 -50
  192. package/src/damier/damierCell/DamierCell.tsx +18 -18
  193. package/src/damier/damierCell/damierCell.interface.tsx +5 -5
  194. package/src/dataTable/DataTable.tsx +840 -746
  195. package/src/dataTable/DataTable.view.tsx +105 -71
  196. package/src/dataTable/dataTable.css +233 -208
  197. package/src/dataTable/dataTable.interface.ts +66 -45
  198. package/src/dataTable/dataTable.utils.ts +45 -0
  199. package/src/dataTable/dataTableActions/DataTableAction.tsx +82 -65
  200. package/src/dataTable/dataTableColumn/DataTableColumn.tsx +48 -27
  201. package/src/dataTable/dataTableColumn/dataTableColumnFilter/DataTableColumnFilter.tsx +36 -0
  202. package/src/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilter.css +0 -0
  203. package/src/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterDate/DataTableColumnFilterDate.tsx +39 -0
  204. package/src/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterDateRange/dataTableColumnFilterDateRange.tsx +80 -0
  205. package/src/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterEnum/DataTableColumnFilterEnum.tsx +89 -0
  206. package/src/dataTable/dataTableColumn/dataTableColumnFilter/dataTableColumnFilterString/DataTableColumnFilterString.tsx +37 -0
  207. package/src/dataTable/dataTableColumn/dataTableColumnSort/DataTableColumnSort.tsx +42 -0
  208. package/src/dataTable/dataTableFilters/DataTableFilters.tsx +91 -0
  209. package/src/dataTable/dataTableFilters/dataTableFilters.css +16 -0
  210. package/src/dataTable/dataTableLoading/DataTableLoading.tsx +23 -21
  211. package/src/dataTable/dataTableRow/DataTableRow.tsx +155 -208
  212. package/src/dataTable/useDataTableState.tsx +89 -0
  213. package/src/datePicker/DatePicker.tsx +110 -110
  214. package/src/datePicker/DatePicker.view.tsx +9 -9
  215. package/src/datePicker/datePicker.css +77 -77
  216. package/src/docs/ComponentDocs.tsx +156 -0
  217. package/src/docs/catalog.ts +40 -0
  218. package/src/docs/documentation.types.ts +20 -0
  219. package/src/docs/virtual.d.ts +7 -0
  220. package/src/expands/Expands.tsx +46 -46
  221. package/src/expands/Expands.view.tsx +90 -90
  222. package/src/expands/expand/expand.interface.tsx +8 -8
  223. package/src/expands/expands.css +101 -101
  224. package/src/filAriane/FilAriane.tsx +57 -57
  225. package/src/filAriane/FilAriane.view.tsx +28 -28
  226. package/src/filAriane/filAriane.css +23 -23
  227. package/src/filAriane/filAriane.interface.tsx +6 -6
  228. package/src/form/Form.tsx +477 -477
  229. package/src/form/Form.view.tsx +67 -67
  230. package/src/form/form.css +135 -135
  231. package/src/form/form.enum.ts +16 -15
  232. package/src/form/form.interface.tsx +67 -67
  233. package/src/form/input/Input.tsx +146 -106
  234. package/src/form/input/input.css +39 -29
  235. package/src/form/inputNumber/InputNumber.tsx +132 -132
  236. package/src/form/inputNumber/InputNumber.view.tsx +15 -15
  237. package/src/form/inputPrice/InputPrice.tsx +42 -42
  238. package/src/form/inputPrice/InputPrice.view.tsx +15 -15
  239. package/src/form/textArea/TextArea.tsx +59 -59
  240. package/src/form/textArea/TextArea.view.tsx +34 -34
  241. package/src/form/textArea/textArea.css +9 -9
  242. package/src/geocoding/GeocodingService.ts +89 -89
  243. package/src/geocoding/geocoding.interface.ts +25 -25
  244. package/src/grid/Grid.view.tsx +24 -24
  245. package/src/grid/container/Container.tsx +8 -8
  246. package/src/grid/container/container.css +4 -4
  247. package/src/grid/grid.interface.tsx +27 -27
  248. package/src/grid/row/row.css +25 -25
  249. package/src/header/Header.tsx +64 -64
  250. package/src/header/Header.view.tsx +5 -5
  251. package/src/header/header.css +43 -43
  252. package/src/header/header.interface.tsx +11 -11
  253. package/src/home/Home.tsx +40 -3
  254. package/src/icon/Icon.tsx +6 -6
  255. package/src/icon/Icons.view.tsx +29 -29
  256. package/src/icon/icon.css +20 -20
  257. package/src/icon/icon.interface.tsx +7 -6
  258. package/src/icon/iconSize.enum.ts +7 -7
  259. package/src/index.css +547 -547
  260. package/src/index.ts +76 -70
  261. package/src/loader/Loader.tsx +37 -37
  262. package/src/loader/Loader.view.tsx +20 -20
  263. package/src/loader/loader.css +30 -30
  264. package/src/main.tsx +10 -10
  265. package/src/menus/Menus.tsx +43 -43
  266. package/src/menus/Menus.view.tsx +39 -39
  267. package/src/menus/menu/Menu.tsx +18 -18
  268. package/src/menus/menu/menu.interface.tsx +9 -9
  269. package/src/menus/menus.css +47 -47
  270. package/src/message/Message.tsx +30 -30
  271. package/src/message/Message.view.tsx +22 -22
  272. package/src/message/message.css +29 -29
  273. package/src/modal/Modal.tsx +59 -59
  274. package/src/modal/Modal.view.tsx +26 -26
  275. package/src/modal/modal.css +71 -71
  276. package/src/notFound/NotFound.tsx +3 -3
  277. package/src/overlayPanel/OverlayPanel.tsx +260 -255
  278. package/src/overlayPanel/OverlayPanel.view.tsx +25 -25
  279. package/src/overlayPanel/overlay.context.tsx +30 -30
  280. package/src/overlayPanel/overlayPanel.css +43 -43
  281. package/src/overlayPanel/overlayPanelStyled/OverlayPanelStyled.tsx +23 -23
  282. package/src/pdfViewer/PdfViewer.tsx +73 -73
  283. package/src/pdfViewer/PdfViewer.view.tsx +5 -5
  284. package/src/quantity/Quantity.tsx +103 -103
  285. package/src/quantity/quantity.css +26 -26
  286. package/src/search/Search.tsx +161 -161
  287. package/src/search/Search.view.tsx +14 -14
  288. package/src/search/search.css +59 -59
  289. package/src/select/Select.tsx +245 -245
  290. package/src/select/Select.view.tsx +71 -71
  291. package/src/select/select.css +150 -150
  292. package/src/select/selectOption.interface.ts +5 -5
  293. package/src/sidebar/Sidebar.tsx +213 -213
  294. package/src/sidebar/Sidebar.view.tsx +17 -17
  295. package/src/sidebar/sidebar.css +103 -103
  296. package/src/sidebarData/SidebarData.tsx +19 -19
  297. package/src/sidebarData/SidebarData.view.tsx +19 -19
  298. package/src/sidebarData/sidebarData.css +27 -27
  299. package/src/tabs/Tabs.tsx +101 -90
  300. package/src/tabs/Tabs.view.tsx +20 -20
  301. package/src/tabs/tabs.css +29 -29
  302. package/src/toaster/Toaster.tsx +61 -60
  303. package/src/toaster/Toaster.view.tsx +25 -25
  304. package/src/toaster/store/useToasterStore.tsx +54 -43
  305. package/src/toaster/toaster.css +105 -92
  306. package/tests/dataTable.test.mjs +93 -0
  307. package/tests/documentation.test.mjs +75 -0
  308. package/tsconfig.docs.json +10 -0
  309. package/tsconfig.json +28 -28
  310. package/vite.config.ts +26 -20
  311. package/vite.config.ts.timestamp-1733262892554-a13dfef6e8a29.mjs +24 -24
  312. package/vite.config.ts.timestamp-1757847121745-e5a5bf54b81b.mjs +28 -28
  313. package/vite.config.ts.timestamp-1759742478362-4ac5c5a7db34b.mjs +28 -28
@@ -1,59 +1,59 @@
1
- import { ChangeEvent, useRef } from "react";
2
- import { Button } from "../Button";
3
-
4
- interface ButtonFileProps {
5
- onFileSelected?: (file: File, buffer: ArrayBuffer) => void;
6
- accept?: string;
7
- buttonText?: string;
8
- buttonClassName?: string;
9
- containerClassName?: string;
10
- }
11
-
12
- export const ButtonFile = ({
13
- onFileSelected,
14
- accept = "*",
15
- buttonText = "Choisir un fichier",
16
- buttonClassName,
17
- containerClassName,
18
- }: ButtonFileProps) => {
19
- const fileInputRef = useRef<HTMLInputElement>(null);
20
-
21
- const handleFileChange = (e: ChangeEvent<HTMLInputElement>) => {
22
- const file = e.target.files?.[0];
23
-
24
- if (file && onFileSelected) {
25
- const reader = new FileReader();
26
-
27
- reader.onload = (event: ProgressEvent<FileReader>) => {
28
- const buffer = event.target?.result as ArrayBuffer;
29
- onFileSelected(file, buffer);
30
- };
31
-
32
- reader.readAsArrayBuffer(file);
33
- }
34
- };
35
-
36
- const handleButtonClick = () => {
37
- fileInputRef.current?.click();
38
- };
39
-
40
- return (
41
- <div className={containerClassName}>
42
- <input
43
- type="file"
44
- ref={fileInputRef}
45
- onChange={handleFileChange}
46
- className="hidden"
47
- accept={accept}
48
- />
49
- <Button
50
- onClick={handleButtonClick}
51
- className={
52
- buttonClassName ||
53
- "bg-green-500 hover:bg-green-600 text-white font-medium py-3 px-6 rounded-lg transition-colors duration-200"
54
- }
55
- title={buttonText || "Choisir un fichier"}
56
- />
57
- </div>
58
- );
59
- };
1
+ import { ChangeEvent, useRef } from "react";
2
+ import { Button } from "../Button";
3
+
4
+ interface ButtonFileProps {
5
+ onFileSelected?: (file: File, buffer: ArrayBuffer) => void;
6
+ accept?: string;
7
+ buttonText?: string;
8
+ buttonClassName?: string;
9
+ containerClassName?: string;
10
+ }
11
+
12
+ export const ButtonFile = ({
13
+ onFileSelected,
14
+ accept = "*",
15
+ buttonText = "Choisir un fichier",
16
+ buttonClassName,
17
+ containerClassName,
18
+ }: ButtonFileProps) => {
19
+ const fileInputRef = useRef<HTMLInputElement>(null);
20
+
21
+ const handleFileChange = (e: ChangeEvent<HTMLInputElement>) => {
22
+ const file = e.target.files?.[0];
23
+
24
+ if (file && onFileSelected) {
25
+ const reader = new FileReader();
26
+
27
+ reader.onload = (event: ProgressEvent<FileReader>) => {
28
+ const buffer = event.target?.result as ArrayBuffer;
29
+ onFileSelected(file, buffer);
30
+ };
31
+
32
+ reader.readAsArrayBuffer(file);
33
+ }
34
+ };
35
+
36
+ const handleButtonClick = () => {
37
+ fileInputRef.current?.click();
38
+ };
39
+
40
+ return (
41
+ <div className={containerClassName}>
42
+ <input
43
+ type="file"
44
+ ref={fileInputRef}
45
+ onChange={handleFileChange}
46
+ className="hidden"
47
+ accept={accept}
48
+ />
49
+ <Button
50
+ onClick={handleButtonClick}
51
+ className={
52
+ buttonClassName ||
53
+ "bg-green-500 hover:bg-green-600 text-white font-medium py-3 px-6 rounded-lg transition-colors duration-200"
54
+ }
55
+ title={buttonText || "Choisir un fichier"}
56
+ />
57
+ </div>
58
+ );
59
+ };
@@ -1,70 +1,70 @@
1
- import { ButtonFile } from "./ButtonFile";
2
-
3
- export const ButtonFileView = () => {
4
- const handleZipFile = (file: File, buffer: ArrayBuffer) => {
5
- console.log("Fichier sélectionné:", file.name);
6
- console.log("Type:", file.type);
7
- console.log("Taille:", file.size);
8
- console.log("Buffer:", buffer);
9
- console.log("Taille du buffer:", buffer.byteLength);
10
-
11
- // Convertir en Uint8Array si nécessaire
12
- const uint8Array = new Uint8Array(buffer);
13
- console.log("Uint8Array:", uint8Array);
14
-
15
- // Faites ce que vous voulez avec le buffer ici
16
- };
17
-
18
- return (
19
- <div className="min-h-screen bg-gray-50 p-8">
20
- <div className="max-w-2xl mx-auto space-y-6">
21
- <div className="border-2 border-dashed border-gray-300 rounded-lg p-8 text-center bg-white">
22
- <h2 className="text-2xl font-semibold mb-6 text-gray-800">
23
- Exemple 1 : Fichier ZIP
24
- </h2>
25
- <ButtonFile
26
- onFileSelected={handleZipFile}
27
- accept=".zip"
28
- buttonText="Sélectionner un ZIP"
29
- />
30
- </div>
31
-
32
- <div className="border-2 border-dashed border-gray-300 rounded-lg p-8 text-center bg-white">
33
- <h2 className="text-2xl font-semibold mb-6 text-gray-800">
34
- Exemple 2 : Tout type de fichier
35
- </h2>
36
- <ButtonFile
37
- onFileSelected={(file: File, buffer: ArrayBuffer) => {
38
- console.log(
39
- "Fichier:",
40
- file.name,
41
- "Buffer size:",
42
- buffer.byteLength,
43
- );
44
- }}
45
- buttonText="Sélectionner n'importe quel fichier"
46
- buttonClassName="bg-blue-500 hover:bg-blue-600 text-white font-medium py-2 px-4 rounded"
47
- />
48
- </div>
49
-
50
- <div className="border-2 border-dashed border-gray-300 rounded-lg p-8 text-center bg-white">
51
- <h2 className="text-2xl font-semibold mb-6 text-gray-800">
52
- Exemple 3 : Images uniquement
53
- </h2>
54
- <ButtonFile
55
- onFileSelected={(file: File, buffer: ArrayBuffer) => {
56
- console.log("Image:", file.name);
57
- // Créer une URL pour prévisualiser l'image
58
- const blob = new Blob([buffer], { type: file.type });
59
- const url = URL.createObjectURL(blob);
60
- console.log("URL de prévisualisation:", url);
61
- }}
62
- accept="image/*"
63
- buttonText="Sélectionner une image"
64
- buttonClassName="bg-purple-500 hover:bg-purple-600 text-white font-medium py-3 px-6 rounded-lg"
65
- />
66
- </div>
67
- </div>
68
- </div>
69
- );
70
- };
1
+ import { ButtonFile } from "./ButtonFile";
2
+
3
+ export const ButtonFileView = () => {
4
+ const handleZipFile = (file: File, buffer: ArrayBuffer) => {
5
+ console.log("Fichier sélectionné:", file.name);
6
+ console.log("Type:", file.type);
7
+ console.log("Taille:", file.size);
8
+ console.log("Buffer:", buffer);
9
+ console.log("Taille du buffer:", buffer.byteLength);
10
+
11
+ // Convertir en Uint8Array si nécessaire
12
+ const uint8Array = new Uint8Array(buffer);
13
+ console.log("Uint8Array:", uint8Array);
14
+
15
+ // Faites ce que vous voulez avec le buffer ici
16
+ };
17
+
18
+ return (
19
+ <div className="min-h-screen bg-gray-50 p-8">
20
+ <div className="max-w-2xl mx-auto space-y-6">
21
+ <div className="border-2 border-dashed border-gray-300 rounded-lg p-8 text-center bg-white">
22
+ <h2 className="text-2xl font-semibold mb-6 text-gray-800">
23
+ Exemple 1 : Fichier ZIP
24
+ </h2>
25
+ <ButtonFile
26
+ onFileSelected={handleZipFile}
27
+ accept=".zip"
28
+ buttonText="Sélectionner un ZIP"
29
+ />
30
+ </div>
31
+
32
+ <div className="border-2 border-dashed border-gray-300 rounded-lg p-8 text-center bg-white">
33
+ <h2 className="text-2xl font-semibold mb-6 text-gray-800">
34
+ Exemple 2 : Tout type de fichier
35
+ </h2>
36
+ <ButtonFile
37
+ onFileSelected={(file: File, buffer: ArrayBuffer) => {
38
+ console.log(
39
+ "Fichier:",
40
+ file.name,
41
+ "Buffer size:",
42
+ buffer.byteLength,
43
+ );
44
+ }}
45
+ buttonText="Sélectionner n'importe quel fichier"
46
+ buttonClassName="bg-blue-500 hover:bg-blue-600 text-white font-medium py-2 px-4 rounded"
47
+ />
48
+ </div>
49
+
50
+ <div className="border-2 border-dashed border-gray-300 rounded-lg p-8 text-center bg-white">
51
+ <h2 className="text-2xl font-semibold mb-6 text-gray-800">
52
+ Exemple 3 : Images uniquement
53
+ </h2>
54
+ <ButtonFile
55
+ onFileSelected={(file: File, buffer: ArrayBuffer) => {
56
+ console.log("Image:", file.name);
57
+ // Créer une URL pour prévisualiser l'image
58
+ const blob = new Blob([buffer], { type: file.type });
59
+ const url = URL.createObjectURL(blob);
60
+ console.log("URL de prévisualisation:", url);
61
+ }}
62
+ accept="image/*"
63
+ buttonText="Sélectionner une image"
64
+ buttonClassName="bg-purple-500 hover:bg-purple-600 text-white font-medium py-3 px-6 rounded-lg"
65
+ />
66
+ </div>
67
+ </div>
68
+ </div>
69
+ );
70
+ };
@@ -1,102 +1,102 @@
1
- import { useCallback, useEffect, useRef, useState } from "react";
2
- import { DynamicForm } from "../../form/Form";
3
- import { FormInterface, FormValuesInterface } from "../../form/form.interface";
4
- import { Icon } from "../../icon/Icon";
5
- import { IconSizeEnum } from "../../icon/iconSize.enum";
6
- import "./buttonFilters.css";
7
- export type ButtonActionsProps<
8
- T extends { [key: string]: string | number | boolean | Date | string[] },
9
- > = {
10
- className?: string;
11
- onClick?: (e: React.MouseEvent) => void;
12
- title: string;
13
- classIcon?: string;
14
- sizeIcon?: IconSizeEnum;
15
- dataForm: FormInterface[];
16
- onChange?: (values: FormValuesInterface<T>) => void;
17
- disabled?: boolean;
18
- id?: string;
19
- };
20
- export const ButtonFilters = <
21
- T extends { [key: string]: string | number | boolean | Date | string[] },
22
- >({
23
- className,
24
- onClick,
25
- title,
26
- classIcon,
27
- sizeIcon,
28
- disabled = false,
29
- id,
30
- dataForm,
31
- onChange,
32
- }: ButtonActionsProps<T>) => {
33
- const buttonRef = useRef<HTMLButtonElement | null>(null);
34
- const [openFilters, setOpenFilters] = useState(false);
35
- const handleClick = (e: React.MouseEvent) => {
36
- e.preventDefault();
37
- setOpenFilters(!openFilters);
38
- if (onClick) {
39
- onClick(e);
40
- }
41
- };
42
- const handleClickOutside = useCallback(
43
- (event: MouseEvent) => {
44
- if (
45
- buttonRef.current &&
46
- !buttonRef.current.contains(event.target as Node)
47
- ) {
48
- setOpenFilters(false);
49
- }
50
- },
51
- [setOpenFilters],
52
- );
53
-
54
- useEffect(() => {
55
- if (openFilters) {
56
- document.addEventListener("mousedown", handleClickOutside);
57
- } else {
58
- document.removeEventListener("mousedown", handleClickOutside);
59
- }
60
-
61
- return () => {
62
- document.removeEventListener("mousedown", handleClickOutside);
63
- };
64
- }, [openFilters, handleClickOutside]);
65
-
66
- return (
67
- <>
68
- <button
69
- ref={buttonRef}
70
- id={id ?? ""}
71
- disabled={disabled}
72
- type="button"
73
- onClick={(e) => handleClick(e)}
74
- className={` ${className} button--filters button--transparent `}
75
- >
76
- {classIcon && (
77
- <span>
78
- <Icon
79
- classIcon={classIcon}
80
- size={sizeIcon || IconSizeEnum.EXTRA_SMALL}
81
- />
82
- </span>
83
- )}
84
- <span className=" flex-1">{title}</span>
85
- {openFilters && (
86
- <div
87
- className="button--filters-overlay"
88
- onClick={(e) => e.stopPropagation()}
89
- >
90
- <div className="button--filters-overlay-content">
91
- <DynamicForm
92
- onChange={onChange as any}
93
- initialForm={dataForm}
94
- hideSubmit
95
- />
96
- </div>
97
- </div>
98
- )}
99
- </button>
100
- </>
101
- );
102
- };
1
+ import { useCallback, useEffect, useRef, useState } from "react";
2
+ import { DynamicForm } from "../../form/Form";
3
+ import { FormInterface, FormValuesInterface } from "../../form/form.interface";
4
+ import { Icon } from "../../icon/Icon";
5
+ import { IconSizeEnum } from "../../icon/iconSize.enum";
6
+ import "./buttonFilters.css";
7
+ export type ButtonActionsProps<
8
+ T extends { [key: string]: string | number | boolean | Date | string[] },
9
+ > = {
10
+ className?: string;
11
+ onClick?: (e: React.MouseEvent) => void;
12
+ title: string;
13
+ classIcon?: string;
14
+ sizeIcon?: IconSizeEnum;
15
+ dataForm: FormInterface[];
16
+ onChange?: (values: FormValuesInterface<T>) => void;
17
+ disabled?: boolean;
18
+ id?: string;
19
+ };
20
+ export const ButtonFilters = <
21
+ T extends { [key: string]: string | number | boolean | Date | string[] },
22
+ >({
23
+ className,
24
+ onClick,
25
+ title,
26
+ classIcon,
27
+ sizeIcon,
28
+ disabled = false,
29
+ id,
30
+ dataForm,
31
+ onChange,
32
+ }: ButtonActionsProps<T>) => {
33
+ const buttonRef = useRef<HTMLButtonElement | null>(null);
34
+ const [openFilters, setOpenFilters] = useState(false);
35
+ const handleClick = (e: React.MouseEvent) => {
36
+ e.preventDefault();
37
+ setOpenFilters(!openFilters);
38
+ if (onClick) {
39
+ onClick(e);
40
+ }
41
+ };
42
+ const handleClickOutside = useCallback(
43
+ (event: MouseEvent) => {
44
+ if (
45
+ buttonRef.current &&
46
+ !buttonRef.current.contains(event.target as Node)
47
+ ) {
48
+ setOpenFilters(false);
49
+ }
50
+ },
51
+ [setOpenFilters],
52
+ );
53
+
54
+ useEffect(() => {
55
+ if (openFilters) {
56
+ document.addEventListener("mousedown", handleClickOutside);
57
+ } else {
58
+ document.removeEventListener("mousedown", handleClickOutside);
59
+ }
60
+
61
+ return () => {
62
+ document.removeEventListener("mousedown", handleClickOutside);
63
+ };
64
+ }, [openFilters, handleClickOutside]);
65
+
66
+ return (
67
+ <>
68
+ <button
69
+ ref={buttonRef}
70
+ id={id ?? ""}
71
+ disabled={disabled}
72
+ type="button"
73
+ onClick={(e) => handleClick(e)}
74
+ className={` ${className} button--filters button--transparent `}
75
+ >
76
+ {classIcon && (
77
+ <span>
78
+ <Icon
79
+ classIcon={classIcon}
80
+ size={sizeIcon || IconSizeEnum.EXTRA_SMALL}
81
+ />
82
+ </span>
83
+ )}
84
+ <span className=" flex-1">{title}</span>
85
+ {openFilters && (
86
+ <div
87
+ className="button--filters-overlay"
88
+ onClick={(e) => e.stopPropagation()}
89
+ >
90
+ <div className="button--filters-overlay-content">
91
+ <DynamicForm
92
+ onChange={onChange as any}
93
+ initialForm={dataForm}
94
+ hideSubmit
95
+ />
96
+ </div>
97
+ </div>
98
+ )}
99
+ </button>
100
+ </>
101
+ );
102
+ };
@@ -1,22 +1,22 @@
1
- .button--filters {
2
- position: relative;
3
- .button--filters-overlay {
4
- position: absolute;
5
- margin-top: 0.25rem;
6
- top: 100%;
7
- left: 0;
8
- background-color: white;
9
- border: 1px solid #ccc;
10
- padding: 10px;
11
- z-index: 1000;
12
- border-radius: 4px;
13
- width: 100%;
14
- .button--filters-overlay-content {
15
- display: flex;
16
- gap: 0.5rem;
17
- label {
18
- color: #333;
19
- }
20
- }
21
- }
22
- }
1
+ .button--filters {
2
+ position: relative;
3
+ .button--filters-overlay {
4
+ position: absolute;
5
+ margin-top: 0.25rem;
6
+ top: 100%;
7
+ left: 0;
8
+ background-color: white;
9
+ border: 1px solid #ccc;
10
+ padding: 10px;
11
+ z-index: 1000;
12
+ border-radius: 4px;
13
+ width: 100%;
14
+ .button--filters-overlay-content {
15
+ display: flex;
16
+ gap: 0.5rem;
17
+ label {
18
+ color: #333;
19
+ }
20
+ }
21
+ }
22
+ }