@inputdev/sdk 1.0.3 → 1.0.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.
- package/README.md +462 -378
- package/inputdev-sdk.min.js +1 -0
- package/inputdev-sdk.prod.js +1 -495
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -1,378 +1,462 @@
|
|
|
1
|
-
# InputDev SDK Documentation �
|
|
2
|
-
|
|
3
|
-
> **Le backend de formulaires le plus simple et professionnel pour les développeurs modernes.**
|
|
4
|
-
|
|
5
|
-
[](https://inputdev.dev)
|
|
6
|
-
[](LICENSE)
|
|
7
|
-
[](https://inputdev.pages.dev/documentation)
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## 📖 Table des matières
|
|
12
|
-
|
|
13
|
-
- [Introduction](#-introduction)
|
|
14
|
-
- [Quick Start](#-quick-start-démarrage-rapide)
|
|
15
|
-
- [Comment ça fonctionne](#-comment-ça-fonctionne)
|
|
16
|
-
- [Installation](#-installation)
|
|
17
|
-
- [Utilisation JavaScript](#-utilisation-javascript-pour-frameworks)
|
|
18
|
-
- [SDK JavaScript Avancé](#-sdk-javascript-avancé)
|
|
19
|
-
- [Validation Email](#-validation-email)
|
|
20
|
-
- [Événements](#-événements)
|
|
21
|
-
- [Codes d'erreur](#-codes-derreur)
|
|
22
|
-
- [Sécurité](#-sécurité)
|
|
23
|
-
- [Mode Silence](#-mode-silence)
|
|
24
|
-
- [Limites](#-limites)
|
|
25
|
-
- [Bonnes pratiques](#-bonnes-pratiques)
|
|
26
|
-
- [Exemple complet](#-exemple-complet-réel)
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## 🚀 Introduction
|
|
31
|
-
|
|
32
|
-
InputDev permet de transformer un simple formulaire en système de collecte de données sécurisé et professionnel.
|
|
33
|
-
|
|
34
|
-
### ✨ Avantages principaux
|
|
35
|
-
|
|
36
|
-
- **Aucune configuration serveur nécessaire** - Déployez en minutes
|
|
37
|
-
- **Aucune dépendance externe** - SDK ultra-léger et autonome
|
|
38
|
-
- **Installation en moins de 1 minute** - Intégration instantanée
|
|
39
|
-
- **Validation automatique** - Emails et champs intégrés
|
|
40
|
-
- **Sécurité de niveau entreprise** - HTTPS, CORS, anti-spam
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
<
|
|
205
|
-
</
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
###
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
-
|
|
276
|
-
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
---
|
|
377
|
-
|
|
378
|
-
|
|
1
|
+
# InputDev SDK Documentation �
|
|
2
|
+
|
|
3
|
+
> **Le backend de formulaires le plus simple et professionnel pour les développeurs modernes.**
|
|
4
|
+
|
|
5
|
+
[](https://inputdev.dev)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
[](https://inputdev.pages.dev/documentation)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 📖 Table des matières
|
|
12
|
+
|
|
13
|
+
- [Introduction](#-introduction)
|
|
14
|
+
- [Quick Start](#-quick-start-démarrage-rapide)
|
|
15
|
+
- [Comment ça fonctionne](#-comment-ça-fonctionne)
|
|
16
|
+
- [Installation](#-installation)
|
|
17
|
+
- [Utilisation JavaScript](#-utilisation-javascript-pour-frameworks)
|
|
18
|
+
- [SDK JavaScript Avancé](#-sdk-javascript-avancé)
|
|
19
|
+
- [Validation Email](#-validation-email)
|
|
20
|
+
- [Événements](#-événements)
|
|
21
|
+
- [Codes d'erreur](#-codes-derreur)
|
|
22
|
+
- [Sécurité](#-sécurité)
|
|
23
|
+
- [Mode Silence](#-mode-silence)
|
|
24
|
+
- [Limites](#-limites)
|
|
25
|
+
- [Bonnes pratiques](#-bonnes-pratiques)
|
|
26
|
+
- [Exemple complet](#-exemple-complet-réel)
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 🚀 Introduction
|
|
31
|
+
|
|
32
|
+
InputDev permet de transformer un simple formulaire en système de collecte de données sécurisé et professionnel.
|
|
33
|
+
|
|
34
|
+
### ✨ Avantages principaux
|
|
35
|
+
|
|
36
|
+
- **Aucune configuration serveur nécessaire** - Déployez en minutes
|
|
37
|
+
- **Aucune dépendance externe** - SDK ultra-léger et autonome
|
|
38
|
+
- **Installation en moins de 1 minute** - Intégration instantanée
|
|
39
|
+
- **Validation automatique** - Emails et champs intégrés
|
|
40
|
+
- **Sécurité de niveau entreprise** - HTTPS, CORS, anti-spam
|
|
41
|
+
- **Filtrage intelligent des champs** - Ignore automatiquement les éléments non-pertinents
|
|
42
|
+
- **Retour visuel immédiat** - Boutons verts/rouges selon succès/erreur
|
|
43
|
+
- **Deux versions disponibles** - Minifiée (8.3KB) et complète (10.3KB)
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## ⚡ Quick Start (Démarrage rapide)
|
|
48
|
+
|
|
49
|
+
### Étape 1 — Ajouter le script
|
|
50
|
+
|
|
51
|
+
#### Via CDN (recommandé)
|
|
52
|
+
|
|
53
|
+
```html
|
|
54
|
+
<script src="https://unpkg.com/@inputdev/sdk@latest/inputdev-sdk.prod.js"></script>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
> ⚡ **Note importante** : Utilisez la version `.prod.js` qui est la seule version fonctionnelle actuellement
|
|
58
|
+
|
|
59
|
+
#### Via NPM
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
npm install @inputdev/sdk
|
|
63
|
+
import InputDev from "@inputdev/sdk";
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Étape 2 — Ajouter votre clé API
|
|
67
|
+
|
|
68
|
+
```html
|
|
69
|
+
<form data-inputdev="grts_VotreCleApiDeCeSite">
|
|
70
|
+
<input type="text" name="name" required />
|
|
71
|
+
<input type="email" name="email" required />
|
|
72
|
+
<button type="submit">Envoyer</button>
|
|
73
|
+
</form>
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
> 🎉 **C'est terminé !** Le formulaire est maintenant connecté à InputDev.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 🔧 Comment ça fonctionne
|
|
81
|
+
|
|
82
|
+
1. **Navigateur** - L'utilisateur soumet le formulaire
|
|
83
|
+
2. **InputDev API** - Les données sont validées et envoyées en HTTPS
|
|
84
|
+
3. **Stockage sécurisé** - Elles sont enregistrées dans votre tableau de bord
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## 📦 Installation
|
|
89
|
+
|
|
90
|
+
### Via CDN (recommandé pour production)
|
|
91
|
+
|
|
92
|
+
> **Deux versions disponibles :**
|
|
93
|
+
> - **Version minifiée (8.3KB)** : Pour production - chargement ultra-rapide
|
|
94
|
+
> - **Version complète (10.3KB)** : Pour développement - avec commentaires
|
|
95
|
+
|
|
96
|
+
#### Version Minifiée (Production)
|
|
97
|
+
```html
|
|
98
|
+
<script src="https://unpkg.com/@inputdev/sdk@latest/inputdev-sdk.min.js"></script>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
#### Version Complète (Développement)
|
|
102
|
+
```html
|
|
103
|
+
<script src="https://unpkg.com/@inputdev/sdk@latest/inputdev-sdk.prod.js"></script>
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
#### CDN Alternative (JSDelivr)
|
|
107
|
+
```html
|
|
108
|
+
<script src="https://cdn.jsdelivr.net/npm/@inputdev/sdk@latest/inputdev-sdk.min.js"></script>
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Via NPM
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
npm install @inputdev/sdk
|
|
115
|
+
import InputDev from "@inputdev/sdk";
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## 💻 Utilisation JavaScript (Pour Frameworks)
|
|
121
|
+
|
|
122
|
+
Idéal pour les frameworks JavaScript (React, Vue, Angular, etc.) où vous contrôlez déjà les données du formulaire :
|
|
123
|
+
|
|
124
|
+
```javascript
|
|
125
|
+
const sdk = new InputDev();
|
|
126
|
+
|
|
127
|
+
await sdk.submit("grts_VotreCleApiDeCeSite", {
|
|
128
|
+
name: "John",
|
|
129
|
+
email: "john@email.com",
|
|
130
|
+
plan: "premium"
|
|
131
|
+
});
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Paramètres
|
|
135
|
+
|
|
136
|
+
| Paramètre | Type | Obligatoire | Description |
|
|
137
|
+
|-----------|------|-------------|-------------|
|
|
138
|
+
| `apiKey` | string | Oui | Clé publique fournie par InputDev |
|
|
139
|
+
| `data` | object | Oui | Données à envoyer |
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## 🚀 SDK JavaScript Avancé
|
|
144
|
+
|
|
145
|
+
Pour le HTML classique avec un contrôle total des champs et une gestion personnalisée :
|
|
146
|
+
|
|
147
|
+
```html
|
|
148
|
+
<form id="contact-form">
|
|
149
|
+
<!-- ... vos champs ici ... -->
|
|
150
|
+
<button type="button" onclick="submitFormulaire()">Envoyer</button>
|
|
151
|
+
</form>
|
|
152
|
+
|
|
153
|
+
<script src="https://unpkg.com/@inputdev/sdk@latest/inputdev-sdk.prod.js"></script>
|
|
154
|
+
<script>
|
|
155
|
+
// Fonction réutilisable, contrôle total des champs
|
|
156
|
+
function submitFormulaire() {
|
|
157
|
+
const dev = new InputDevSDK();
|
|
158
|
+
const data = {
|
|
159
|
+
email: "exemple@test.com",
|
|
160
|
+
message: "Message par défaut",
|
|
161
|
+
telephone: "+22990000000",
|
|
162
|
+
plan: "free"
|
|
163
|
+
};
|
|
164
|
+
dev.submit("grts_VotreCleApiDeCeSite", data); // SDK gère erreurs et succès automatiquement
|
|
165
|
+
}
|
|
166
|
+
</script>
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Avantages du SDK avancé
|
|
170
|
+
|
|
171
|
+
- **Contrôle total des données** - Gérez chaque champ manuellement
|
|
172
|
+
- **Validation personnalisée** - Appliquez vos règles métier
|
|
173
|
+
- **Gestion d'erreurs avancée** - Messages d'erreur sur mesure
|
|
174
|
+
- **Performance optimisée** - Envoi asynchrone et optimisé
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## 📧 Validation Email
|
|
179
|
+
|
|
180
|
+
InputDev valide automatiquement les adresses email pour garantir la qualité des données collectées. La validation fonctionne en deux temps : affichage des messages et blocage de la soumission si nécessaire.
|
|
181
|
+
|
|
182
|
+
### Comment ça fonctionne ?
|
|
183
|
+
|
|
184
|
+
Le SDK détecte automatiquement les champs email de deux manières :
|
|
185
|
+
1. **Type d'input** : Tous les `<input type="email">` sont validés
|
|
186
|
+
2. **Nom du champ** : Tous les champs dont le nom contient "email" (insensible à la casse)
|
|
187
|
+
|
|
188
|
+
> ⚠️ **Important** : Les **names** sont très importants ! Ils déterminent quels champs seront validés et comment les données seront stockées.
|
|
189
|
+
|
|
190
|
+
#### Messages dans la console (pour le débogage)
|
|
191
|
+
|
|
192
|
+
```
|
|
193
|
+
📧 VALIDATION EMAIL
|
|
194
|
+
⚠️ Erreurs trouvées:
|
|
195
|
+
• L'email "email" est invalide: test@invalid
|
|
196
|
+
💡 Corrigez les emails avant de soumettre à nouveau
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
#### Messages sous le formulaire (pour l'expérience utilisateur)
|
|
200
|
+
|
|
201
|
+
```html
|
|
202
|
+
<div class="inputdev-email-error-message" data-inputdev-error-for="email">
|
|
203
|
+
<span style="text-decoration: underline; font-weight: bold;">InputDev SDK</span> :
|
|
204
|
+
<span style="font-weight: bold;">Veuillez entrer une adresse email valide</span>
|
|
205
|
+
</div>
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Processus de validation
|
|
209
|
+
|
|
210
|
+
1. **Détection** : Le SDK identifie les champs avec "email" dans le nom (insensible à la casse)
|
|
211
|
+
2. **Validation en temps réel** : Vérification lors de la perte de focus (blur event)
|
|
212
|
+
3. **Feedback visuel** : Bordure rouge et message d'erreur sous le champ
|
|
213
|
+
4. **Blocage de soumission** : Empêche l'envoi si un email est invalide
|
|
214
|
+
5. **Nettoyage automatique** : Supprime l'erreur quand l'utilisateur corrige
|
|
215
|
+
|
|
216
|
+
### Exemple de validation
|
|
217
|
+
|
|
218
|
+
```html
|
|
219
|
+
<form data-inputdev="grts_VotreCleApiDeCeSite">
|
|
220
|
+
<input type="text" name="name" placeholder="Nom" required>
|
|
221
|
+
|
|
222
|
+
<!-- ✅ Sera validé (type="email") -->
|
|
223
|
+
<input type="email" name="contact" placeholder="Contact" required>
|
|
224
|
+
|
|
225
|
+
<!-- ✅ Aussi validé (type="email" + name contient "email") -->
|
|
226
|
+
<input type="email" name="email" placeholder="Email" required>
|
|
227
|
+
|
|
228
|
+
<!-- ✅ Validé (name contient "email") -->
|
|
229
|
+
<input type="text" name="user_email" placeholder="Email utilisateur">
|
|
230
|
+
|
|
231
|
+
<!-- ❌ Non validé (ni type="email", ni name avec "email") -->
|
|
232
|
+
<input type="text" name="phone" placeholder="Téléphone">
|
|
233
|
+
|
|
234
|
+
<button type="submit">Envoyer</button>
|
|
235
|
+
</form>
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Types de validation
|
|
239
|
+
|
|
240
|
+
#### ✅ Champs qui seront validés
|
|
241
|
+
- `<input type="email" name="quelconque">` (peu importe le name)
|
|
242
|
+
- `<input type="text" name="email">` (name contient "email")
|
|
243
|
+
- `<input type="text" name="user_email">` (name contient "email")
|
|
244
|
+
- `<input type="email" name="EMAIL_ADDRESS">` (les deux conditions)
|
|
245
|
+
|
|
246
|
+
#### ❌ Champs qui ne seront PAS validés
|
|
247
|
+
- `<input type="text" name="contact">` (ni type email, ni name avec "email")
|
|
248
|
+
- `<input type="tel" name="phone">` (ni type email, ni name avec "email")
|
|
249
|
+
- `<input type="text" name="message">` (ni type email, ni name avec "email")
|
|
250
|
+
|
|
251
|
+
### Types de validation
|
|
252
|
+
|
|
253
|
+
#### ✅ Emails valides
|
|
254
|
+
- user@domain.com
|
|
255
|
+
- test.email+tag@example.co.uk
|
|
256
|
+
- user123@sub.domain.org
|
|
257
|
+
|
|
258
|
+
#### ❌ Emails invalides
|
|
259
|
+
- email@
|
|
260
|
+
- user.domain.com
|
|
261
|
+
- user@domain
|
|
262
|
+
|
|
263
|
+
### Importance des names (noms de champs)
|
|
264
|
+
|
|
265
|
+
Les **names** sont cruciaux pour le fonctionnement d'InputDev :
|
|
266
|
+
|
|
267
|
+
1. **Validation** : Les names déterminent quels champs sont validés automatiquement
|
|
268
|
+
2. **Stockage** : Les names deviennent les clés dans votre base de données
|
|
269
|
+
3. **Identification** : Les names permettent d'identifier chaque champ de manière unique
|
|
270
|
+
|
|
271
|
+
#### Bonnes pratiques pour les names
|
|
272
|
+
- ✅ Utilisez des names descriptifs : `name="email_utilisateur"`
|
|
273
|
+
- ✅ Utilisez des names simples : `name="telephone"`
|
|
274
|
+
- ✅ Soyez cohérent : `name="email"` et `name="confirmation_email"`
|
|
275
|
+
- ❌ Évitez les names vides ou manquants
|
|
276
|
+
- ❌ Évitez les caractères spéciaux : `name="email-utilisateur"` (préférer `_`)
|
|
277
|
+
|
|
278
|
+
### Styles appliqués automatiquement
|
|
279
|
+
|
|
280
|
+
```css
|
|
281
|
+
.inputdev-email-error {
|
|
282
|
+
border: 2px solid #ef4444 !important;
|
|
283
|
+
box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1) !important;
|
|
284
|
+
outline: none !important;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
.inputdev-email-error-message {
|
|
288
|
+
color: #ef4444;
|
|
289
|
+
font-size: 12px;
|
|
290
|
+
margin-top: 4px;
|
|
291
|
+
display: block;
|
|
292
|
+
}
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
> ⚠️ **Important** : Si un email est invalide, la soumission du formulaire est complètement bloquée. L'utilisateur doit corriger l'email avant de pouvoir envoyer le formulaire.
|
|
296
|
+
|
|
297
|
+
> 💡 **Astuce** : La validation fonctionne en mode normal et en mode silence. En mode silence, seul le message sous le formulaire s'affiche (pas de logs console).
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## 📡 Événements
|
|
302
|
+
|
|
303
|
+
Vous pouvez écouter les événements globaux pour personnaliser l'expérience utilisateur :
|
|
304
|
+
|
|
305
|
+
```javascript
|
|
306
|
+
document.addEventListener("inputdev:success", (event) => {
|
|
307
|
+
console.log("Succès :", event.detail);
|
|
308
|
+
// Rediriger, afficher un message, etc.
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
document.addEventListener("inputdev:error", (event) => {
|
|
312
|
+
console.error("Erreur :", event.detail);
|
|
313
|
+
// Afficher une notification, logger l'erreur, etc.
|
|
314
|
+
});
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
## 🔄 Comportement de Soumission (Important)
|
|
320
|
+
|
|
321
|
+
### ⚠️ **Le SDK bloque temporairement le rechargement de la page**
|
|
322
|
+
|
|
323
|
+
Le SDK InputDev utilise un comportement moderne de type SPA (Single Page Application) pour garantir une meilleure expérience utilisateur :
|
|
324
|
+
|
|
325
|
+
#### 📋 **Ce qui se passe lors de la soumission**
|
|
326
|
+
|
|
327
|
+
1. **`e.preventDefault()`** : Le rechargement automatique de la page est bloqué
|
|
328
|
+
2. **Bouton désactivé** : Le bouton submit est désactivé pendant 3 secondes pour éviter les double-soumissions
|
|
329
|
+
3. **Texte changé** : Le bouton affiche "Envoi en cours..." pendant le traitement
|
|
330
|
+
4. **Requête asynchrone** : L'envoi se fait en AJAX sans rechargement
|
|
331
|
+
5. **Gestion des résultats** : Succès ou erreur sont gérés via les événements
|
|
332
|
+
|
|
333
|
+
#### ✅ **Avantages de ce comportement**
|
|
334
|
+
|
|
335
|
+
- 🔄 **Évite les soumissions multiples** - Protection contre les doubles clics
|
|
336
|
+
- 📱 **Meilleure UX** - Pas de rechargement brutal de la page
|
|
337
|
+
- 🔧 **Gestion d'erreur améliorée** - Messages d'erreur sans perdre le formulaire
|
|
338
|
+
- 📊 **Feedback visuel** - Indicateur de chargement clair
|
|
339
|
+
- 🎯 **Compatible SPA** - Fonctionne parfaitement avec React, Vue, Angular
|
|
340
|
+
|
|
341
|
+
> 💡 **Note** : Ce comportement est **intentionnel** et **professionnel**. Il garantit que vos utilisateurs ne perdent jamais leurs données et offre une expérience moderne et fluide.
|
|
342
|
+
|
|
343
|
+
---
|
|
344
|
+
|
|
345
|
+
## � Codes d'erreur
|
|
346
|
+
|
|
347
|
+
| Code | Signification | Solution |
|
|
348
|
+
|------|---------------|----------|
|
|
349
|
+
| `API_001` | Clé API invalide | Vérifiez votre clé |
|
|
350
|
+
| `DOM_001` | Domaine non autorisé | Ajoutez le domaine autorisé |
|
|
351
|
+
| `QUO_001` | Quota dépassé | Passez à un plan supérieur |
|
|
352
|
+
| `NET_001` | Erreur réseau | Vérifiez la connexion |
|
|
353
|
+
| `VAL_001` | Validation échouée | Vérifiez les champs |
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
## 🔐 Sécurité
|
|
358
|
+
|
|
359
|
+
- **Requêtes envoyées en HTTPS** - Chiffrement de bout en bout
|
|
360
|
+
- **Validation côté client et serveur** - Double couche de sécurité
|
|
361
|
+
- **Domaine autorisé configurable** - Protection contre l'usage non autorisé
|
|
362
|
+
- **Anti-spam intégré** - Protection automatique
|
|
363
|
+
|
|
364
|
+
> ℹ️ **Sécurité** : La clé API est publique et conçue pour rester dans le frontend. Elle est sécurisée par validation de domaine et quotas automatiques.
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
368
|
+
## � Mode Silence
|
|
369
|
+
|
|
370
|
+
Pour désactiver les logs en production :
|
|
371
|
+
|
|
372
|
+
```html
|
|
373
|
+
<form data-inputdev-silence="grts_VotreCleApiDeCeSite">
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
---
|
|
377
|
+
|
|
378
|
+
## 📊 Limites
|
|
379
|
+
|
|
380
|
+
- **Nombre de soumissions par mois** - Dépend du plan choisi
|
|
381
|
+
- **Nombre maximum de formulaires** - Variable selon le plan
|
|
382
|
+
- **Nombre de sites/clés actives** - Une clé, un site
|
|
383
|
+
- **SSL obligatoire** - HTTPS requis pour la sécurité
|
|
384
|
+
- **Domaines autorisés** - Configurable par clé
|
|
385
|
+
|
|
386
|
+
---
|
|
387
|
+
|
|
388
|
+
## ⭐ Bonnes pratiques
|
|
389
|
+
|
|
390
|
+
- ✅ Toujours utiliser HTTPS
|
|
391
|
+
- ✅ Toujours définir des champs name
|
|
392
|
+
- ✅ Toujours gérer les événements erreur
|
|
393
|
+
- ✅ Surveiller votre quota
|
|
394
|
+
- ✅ Tester en environnement de développement
|
|
395
|
+
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
## 📋 Exemple complet réel
|
|
399
|
+
|
|
400
|
+
```html
|
|
401
|
+
<!DOCTYPE html>
|
|
402
|
+
<html>
|
|
403
|
+
<head>
|
|
404
|
+
<script src="https://unpkg.com/@inputdev/sdk@latest/inputdev-sdk.prod.js"></script>
|
|
405
|
+
</head>
|
|
406
|
+
<body>
|
|
407
|
+
|
|
408
|
+
<form data-inputdev="grts_VotreCleApiDeCeSite">
|
|
409
|
+
<div class="form-group">
|
|
410
|
+
<label for="name">Nom complet</label>
|
|
411
|
+
<input type="text" id="name" name="name" required>
|
|
412
|
+
</div>
|
|
413
|
+
|
|
414
|
+
<div class="form-group">
|
|
415
|
+
<label for="email">Email</label>
|
|
416
|
+
<input type="email" id="email" name="email" required>
|
|
417
|
+
</div>
|
|
418
|
+
|
|
419
|
+
<div class="form-group">
|
|
420
|
+
<label for="message">Message</label>
|
|
421
|
+
<textarea id="message" name="message" required></textarea>
|
|
422
|
+
</div>
|
|
423
|
+
|
|
424
|
+
<button type="submit">Envoyer</button>
|
|
425
|
+
</form>
|
|
426
|
+
|
|
427
|
+
<script>
|
|
428
|
+
// Écouter les événements pour une meilleure UX
|
|
429
|
+
document.addEventListener('inputdev:success', (event) => {
|
|
430
|
+
alert('Message envoyé avec succès !');
|
|
431
|
+
// Réinitialiser le formulaire
|
|
432
|
+
document.querySelector('form').reset();
|
|
433
|
+
});
|
|
434
|
+
|
|
435
|
+
document.addEventListener('inputdev:error', (event) => {
|
|
436
|
+
console.error('Erreur lors de l\'envoi :', event.detail);
|
|
437
|
+
alert('Une erreur est survenue. Veuillez réessayer.');
|
|
438
|
+
});
|
|
439
|
+
</script>
|
|
440
|
+
|
|
441
|
+
</body>
|
|
442
|
+
</html>
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
---
|
|
446
|
+
|
|
447
|
+
## � Support & Liens
|
|
448
|
+
|
|
449
|
+
- 📖 **Documentation Complète** : [docs.inputdev.dev](https://inputdev.pages.dev/documentation)
|
|
450
|
+
- 💬 **Discord** : [Rejoindre la communauté]
|
|
451
|
+
- 🐛 **Issues** : [Signaler un bug]
|
|
452
|
+
|
|
453
|
+
|
|
454
|
+
---
|
|
455
|
+
|
|
456
|
+
## 📄 Licence
|
|
457
|
+
|
|
458
|
+
MIT License - voir le fichier [LICENSE](LICENSE) pour plus de détails.
|
|
459
|
+
|
|
460
|
+
---
|
|
461
|
+
|
|
462
|
+
<p align="center">Made with ❤️ by <b>InputDev Team</b></p>
|