@andoniaina/react-modal 1.1.1 → 1.1.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/README.md CHANGED
@@ -1,107 +1,49 @@
1
1
  # @andoniaina/react-modal
2
2
 
3
- Un composant **Modal React** simple et réutilisable, converti depuis un plugin jQuery modal, prêt à être utilisé dans n'importe quel projet React.
3
+ Un composant **Modal React simple, léger et accessible**, prêt à l’emploi, avec gestion du scroll, fermeture par clic extérieur et touche ESC.
4
4
 
5
- ## Installation
5
+ Idéal pour afficher des messages de succès, d’erreur ou des confirmations dans vos applications React.
6
6
 
7
- Installe le package depuis npm :
7
+ ---
8
8
 
9
- ```bash
10
- npm install @andoniaina/react-modal
11
-
12
- 🧩 Problématique initiale
13
- Limites de la solution jQuery
14
-
15
- Manipulation directe du DOM
16
-
17
- Couplage fort entre HTML et JavaScript
18
-
19
- Difficulté de maintenance à grande échelle
20
-
21
- Dépendance à une librairie externe (jQuery)
22
-
23
- Intégration complexe dans une application React
24
-
25
- 👉 Dans une application React, l’utilisation de jQuery va à l’encontre du Virtual DOM et des bonnes pratiques React.
26
-
27
- 🔄 Solution mise en place
28
-
29
- Le plugin jquery-modal a été remplacé par un composant React contrôlé par l’état (state), respectant :
30
-
31
- le flux de données unidirectionnel
32
-
33
- la logique déclarative de React
9
+ ## ✨ Fonctionnalités
34
10
 
35
- la réutilisabilité des composants
11
+ - Modal contrôlée (`isOpen`)
12
+ - ✅ Fermeture par clic sur l’overlay
13
+ - ✅ Fermeture avec la touche **ESC**
14
+ - ✅ Blocage du scroll en arrière-plan
15
+ - ✅ Styles CSS inclus
16
+ - ✅ Types de modal (`success`, `error`)
17
+ - ✅ Accessible (`role="dialog"`, `aria-modal`)
36
18
 
37
- 🔍 Comparaison fonctionnelle
38
- Fonctionnalité jquery-modal React Modal
39
- Ouverture / fermeture Attribut HTML + JS State React
40
- Overlay Oui Oui
41
- Fermeture par ESC Oui Oui
42
- Fermeture par clic Oui Oui
43
- Animation jQuery CSS
44
- Événements jQuery events Props & callbacks
45
- Accessibilité Limitée aria-modal, role="dialog"
46
- Dépendance externe jQuery Aucune
19
+ ---
47
20
 
48
- 🧠 Différence de paradigme
49
- Approche jQuery (impérative)
50
- <a href="#modal" rel="modal:open">Open</a>
21
+ ## 📦 Installation
51
22
 
52
- $('#modal').modal({ escapeClose: true });
53
-
54
- - Le DOM est modifié directement
55
- - Le comportement dépend de sélecteurs
56
- - La logique est dispersée
57
-
58
- Approche React (déclarative)
59
- const [isOpen, setIsOpen] = useState(false);
60
-
61
- <Modal isOpen={isOpen} onClose={() => setIsOpen(false)}>
62
- Contenu du modal
63
- </Modal>
64
-
65
- - L’UI dépend de l’état
66
- - La logique est centralisée
67
- - Le composant est réutilisable
68
-
69
- 🔁 Correspondance des API
70
- jquery-modal Implémentation React
71
- rel="modal:open" <ModalTrigger />
72
- $.modal.close() setIsOpen(false)
73
- escapeClose closeOnEsc
74
- clickClose closeOnOverlayClick
75
- fadeDuration animationDuration
76
- modal:open onAfterOpen
77
- modal:close onAfterClose
78
-
79
- 🧱 Architecture du composant
80
- src/
81
- ├── components/
82
- │ ├── Modal/
83
- │ │ ├── Modal.jsx
84
- │ │ └── Modal.css
85
- │ └── ModalTrigger.jsx
86
- ├── App.jsx
87
-
88
- - Modal.jsx : gestion de l’ouverture, fermeture et événements
89
- - Modal.css : styles et animations
90
- - ModalTrigger.jsx : remplacement du déclenchement jQuery
91
-
92
- ♿ Accessibilité
93
- Le composant React respecte les bonnes pratiques d’accessibilité :
94
- * role="dialog"
95
- * aria-modal="true"
96
- * Fermeture via la touche Escape
97
- * Blocage du scroll du body lors de l’ouverture
98
-
99
- Ces éléments améliorent l’expérience utilisateur par rapport à la version jQuery.
100
-
101
- ✅ Bénéfices de la migration
23
+ ```bash
24
+ npm install @andoniaina/react-modal
102
25
 
103
- Suppression complète de jQuery
104
- ♻️ Code plus maintenable
105
- 🧠 Logique centralisée
106
- 🚀 Intégration native dans React
107
- 📈 Performance et lisibilité améliorées
26
+ ## Utilisation basique
27
+ import { useState } from "react";
28
+ import { Modal } from "@andoniaina/react-modal";
29
+
30
+ function App() {
31
+ const [isOpen, setIsOpen] = useState(false);
32
+
33
+ return (
34
+ <>
35
+ <button onClick={() => setIsOpen(true)}>
36
+ Ouvrir la modal
37
+ </button>
38
+
39
+ <Modal
40
+ isOpen={isOpen}
41
+ onClose={() => setIsOpen(false)}
42
+ type="success"
43
+ message="L’opération a été effectuée avec succès !"
44
+ />
45
+ </>
46
+ );
47
+ }
48
+
49
+ export default App;
@@ -0,0 +1 @@
1
+ .modal-overlay{position:fixed;inset:0;background-color:#0006;display:flex;align-items:center;justify-content:center;z-index:1001}.modal{background:#fff;padding:1.5rem;border-radius:8px;min-width:300px;text-align:center;animation:fadeIn .2s ease-in-out}.modal.success{border-left:6px solid #2ecc71}.modal.error{border-left:6px solid #e74c3c}.modal button{margin-top:1rem;padding:.5rem 1rem;cursor:pointer}@keyframes fadeIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@andoniaina/react-modal",
3
- "version": "1.1.1",
3
+ "version": "1.1.3",
4
4
  "description": "Reusable, accessible and customizable React modal component",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs.js",
@@ -8,6 +8,9 @@
8
8
  "files": [
9
9
  "dist"
10
10
  ],
11
+ "sideEffects": [
12
+ "*.css"
13
+ ],
11
14
  "exports": {
12
15
  ".": {
13
16
  "import": "./dist/index.es.js",
@@ -51,8 +54,8 @@
51
54
  "eslint-plugin-react-hooks": "^7.0.1",
52
55
  "eslint-plugin-react-refresh": "^0.4.24",
53
56
  "globals": "^16.5.0",
54
- "vite": "^7.2.4",
55
57
  "react": ">=18",
56
- "react-dom": ">=18"
58
+ "react-dom": ">=18",
59
+ "vite": "^7.2.4"
57
60
  }
58
61
  }
@@ -1 +0,0 @@
1
- .modal-overlay{position:fixed;inset:0;background-color:#0006;display:flex;align-items:center;justify-content:center;z-index:999}.modal{background:#fff;padding:1.5rem;border-radius:8px;min-width:300px;text-align:center;animation:fadeIn .2s ease-in-out}.modal.success{border-left:6px solid #2ecc71}.modal.error{border-left:6px solid #e74c3c}.modal button{margin-top:1rem;padding:.5rem 1rem;cursor:pointer}@keyframes fadeIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}