kelt-ui-kit-react 1.6.2 → 1.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "kelt-ui-kit-react",
3
3
  "type": "module",
4
- "version": "1.6.2",
4
+ "version": "1.6.3",
5
5
  "private": false,
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
package/src/App.menu.tsx CHANGED
@@ -2,6 +2,7 @@ import { NavLink } from "react-router-dom";
2
2
  import { ActionView } from "./action/Action.view";
3
3
  import { BadgeView } from "./badge/Badge.view";
4
4
  import { ButtonView } from "./button/Button.view";
5
+ import { ButtonFileView } from "./button/buttonFile/ButtonFile.view";
5
6
  import { CardView } from "./card/Card.view";
6
7
  import { CarouselView } from "./carousel/Carousel.view";
7
8
  import { DamierView } from "./damier/Damier.view";
@@ -234,6 +235,13 @@ export const MenuList: MenuProps[] = [
234
235
  children: <NavLink to="/input-price">Input Price</NavLink>,
235
236
  element: <InputPriceView />,
236
237
  },
238
+ {
239
+ id: 29,
240
+ name: "Button File",
241
+ link: "/button-file",
242
+ children: <NavLink to="/button-file">Button File</NavLink>,
243
+ element: <ButtonFileView />,
244
+ },
237
245
  ];
238
246
 
239
247
  export const AppMenu = (): JSX.Element => {
@@ -0,0 +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
+ };
@@ -0,0 +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
+ };
package/src/index.ts CHANGED
@@ -18,6 +18,7 @@ export { ButtonAction } from "./action/ButtonAction";
18
18
  export { Badge } from "./badge/Badge";
19
19
  export { Button } from "./button/Button";
20
20
  export { ButtonActions } from "./button/buttonActions/ButtonActions";
21
+ export { ButtonFile } from "./button/buttonFile/ButtonFile";
21
22
  export { Card } from "./card/Card";
22
23
  export { Carousel } from "./carousel/Carousel";
23
24
  export { Damier } from "./damier/Damier";