@h4md1/visual-image-tool 0.1.5

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 ADDED
@@ -0,0 +1,267 @@
1
+ # VisualImageTool
2
+
3
+ Un outil léger en JavaScript vanilla pour définir des points focaux et zones de recadrage sur des images.
4
+
5
+ ## Fonctionnalités
6
+
7
+ - **Point focal** : Définissez un point d'intérêt sur l'image avec un marqueur visuel
8
+ - **Zone de recadrage** : Définissez une zone de recadrage avec poignées de redimensionnement
9
+ - **Sans dépendances** : Fonctionne sans bibliothèques externes
10
+ - **API simple** : Interface claire et facile à utiliser
11
+ - **Personnalisable** : Options de configuration flexibles
12
+ - **Responsive** : S'adapte aux redimensionnements d'écran
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ npm install @h4md1/visual-image-tool
18
+ ```
19
+
20
+ ## Guide de démarrage rapide
21
+
22
+ ### 1. Importation
23
+
24
+ ```javascript
25
+ // Importation ES modules (recommandé)
26
+ import VisualImageTool from '@h4md1/visual-image-tool';
27
+
28
+ // OU importation CommonJS
29
+ const VisualImageTool = require('@h4md1/visual-image-tool');
30
+
31
+ // OU utilisation directe via balise script (UMD)
32
+ // <script src="node_modules/image-tool/dist/image-tool.umd.js"></script>
33
+ ```
34
+
35
+ ### 2. Initialisation
36
+
37
+ ```javascript
38
+ // Créer une instance avec une image
39
+ const imageTool = new VisualImageTool.VisualImageTool({
40
+ imageElement: document.getElementById('myImage'),
41
+ onChange: (data) => {
42
+ console.log('Point focal:', data.focusPoint);
43
+ console.log('Zone de recadrage:', data.cropZone);
44
+ }
45
+ });
46
+ ```
47
+
48
+ ### 3. Utilisation des fonctionnalités
49
+
50
+ ```javascript
51
+ // Activer le point focal
52
+ imageTool.toggleFocusPoint(true);
53
+
54
+ // Activer la zone de recadrage
55
+ imageTool.toggleCropZone(true);
56
+
57
+ // Définir manuellement un point focal
58
+ imageTool.setFocusPoint(x, y);
59
+
60
+ // Définir manuellement une zone de recadrage
61
+ imageTool.setCropZone(x, y, width, height);
62
+
63
+ // Obtenir les valeurs actuelles
64
+ const focusPoint = imageTool.getFocusPoint();
65
+ const cropZone = imageTool.getCropZone();
66
+ ```
67
+
68
+ ## Options de configuration
69
+
70
+ ```javascript
71
+ const imageTool = new VisualImageTool.VisualImageTool({
72
+ // Élément image (obligatoire) - peut être un sélecteur CSS ou un élément DOM
73
+ imageElement: '#myImage',
74
+
75
+ // Configuration du point focal (optionnel)
76
+ focusPoint: {
77
+ enabled: true, // Activer/désactiver la fonctionnalité
78
+ style: {
79
+ width: '30px',
80
+ height: '30px',
81
+ border: '3px solid white',
82
+ boxShadow: '0 0 0 2px black, 0 0 5px rgba(0,0,0,0.5)',
83
+ backgroundColor: 'rgba(255, 0, 0, 0.5)'
84
+ }
85
+ },
86
+
87
+ // Configuration de la zone de recadrage (optionnel)
88
+ cropZone: {
89
+ enabled: true, // Activer/désactiver la fonctionnalité
90
+ style: {
91
+ border: '1px dashed #fff',
92
+ backgroundColor: 'rgba(0, 0, 0, 0.4)'
93
+ },
94
+ handleStyle: {
95
+ width: '14px',
96
+ height: '14px',
97
+ backgroundColor: 'white',
98
+ border: '2px solid black',
99
+ boxShadow: '0 0 3px rgba(0,0,0,0.5)'
100
+ }
101
+ },
102
+
103
+ // Callback appelé lors des changements (optionnel)
104
+ onChange: function(data) {
105
+ // data contient focusPoint, cropZone, focusActive, cropActive
106
+ }
107
+ });
108
+ ```
109
+
110
+ ## API complète
111
+
112
+ ### Méthodes
113
+
114
+ #### `toggleFocusPoint(active)`
115
+ Active ou désactive le point focal.
116
+ - `active` (boolean, optionnel): Si défini, force l'état à cette valeur. Si omis, inverse l'état actuel.
117
+ - Retourne: L'instance VisualImageTool pour le chaînage.
118
+
119
+ #### `toggleCropZone(active)`
120
+ Active ou désactive la zone de recadrage.
121
+ - `active` (boolean, optionnel): Si défini, force l'état à cette valeur. Si omis, inverse l'état actuel.
122
+ - Retourne: L'instance VisualImageTool pour le chaînage.
123
+
124
+ #### `setFocusPoint(x, y)`
125
+ Définit la position du point focal.
126
+ - `x` (number): Coordonnée X en pixels originaux.
127
+ - `y` (number): Coordonnée Y en pixels originaux.
128
+ - Retourne: L'instance VisualImageTool pour le chaînage.
129
+
130
+ #### `setCropZone(x, y, width, height)`
131
+ Définit la position et les dimensions de la zone de recadrage.
132
+ - `x` (number): Coordonnée X en pixels originaux.
133
+ - `y` (number): Coordonnée Y en pixels originaux.
134
+ - `width` (number): Largeur en pixels originaux.
135
+ - `height` (number): Hauteur en pixels originaux.
136
+ - Retourne: L'instance VisualImageTool pour le chaînage.
137
+
138
+ #### `getFocusPoint()`
139
+ Obtient la position actuelle du point focal.
140
+ - Retourne: Un objet `{x, y}` avec les coordonnées en pixels originaux.
141
+
142
+ #### `getCropZone()`
143
+ Obtient la position et les dimensions actuelles de la zone de recadrage.
144
+ - Retourne: Un objet `{x, y, width, height}` avec les valeurs en pixels originaux.
145
+
146
+ #### `getImageDimensions()`
147
+ Obtient les dimensions originales de l'image.
148
+ - Retourne: Un objet `{width, height}` avec les dimensions en pixels originaux.
149
+
150
+ #### `destroy()`
151
+ Détruit l'instance et nettoie les ressources.
152
+
153
+ ### Événements
154
+
155
+ L'outil utilise le callback `onChange` pour notifier des changements. Ce callback reçoit un objet avec les propriétés suivantes:
156
+
157
+ ```javascript
158
+ {
159
+ focusPoint: {x, y}, // Position du point focal
160
+ cropZone: {x, y, width, height}, // Position et dimensions de la zone de recadrage
161
+ focusActive: true|false, // État d'activation du point focal
162
+ cropActive: true|false // État d'activation de la zone de recadrage
163
+ }
164
+ ```
165
+
166
+ ## Exemples d'intégration avec des frameworks
167
+
168
+ ### React
169
+
170
+ ```jsx
171
+ import React, { useEffect, useRef } from 'react';
172
+ import VisualImageTool from '@h4md1/visual-image-tool';
173
+
174
+ function ImageEditor() {
175
+ const imageRef = useRef(null);
176
+ const toolRef = useRef(null);
177
+
178
+ useEffect(() => {
179
+ if (imageRef.current && !toolRef.current) {
180
+ toolRef.current = new VisualImageTool({
181
+ imageElement: imageRef.current,
182
+ onChange: (data) => {
183
+ console.log('Données mises à jour:', data);
184
+ }
185
+ });
186
+
187
+ // Activer les fonctionnalités
188
+ toolRef.current.toggleFocusPoint(true);
189
+ toolRef.current.toggleCropZone(true);
190
+ }
191
+
192
+ // Nettoyage
193
+ return () => {
194
+ if (toolRef.current) {
195
+ toolRef.current.destroy();
196
+ toolRef.current = null;
197
+ }
198
+ };
199
+ }, []);
200
+
201
+ return (
202
+ <div>
203
+ <img ref={imageRef} src="path/to/image.jpg" alt="Éditable" />
204
+ </div>
205
+ );
206
+ }
207
+ ```
208
+
209
+ ### Vue.js
210
+
211
+ ```vue
212
+ <template>
213
+ <div>
214
+ <img ref="editableImage" src="path/to/image.jpg" alt="Éditable" />
215
+ </div>
216
+ </template>
217
+
218
+ <script>
219
+ import VisualImageTool from '@h4md1/visual-image-tool';
220
+
221
+ export default {
222
+ data() {
223
+ return {
224
+ imageTool: null
225
+ };
226
+ },
227
+ mounted() {
228
+ this.imageTool = new VisualImageTool({
229
+ imageElement: this.$refs.editableImage,
230
+ onChange: (data) => {
231
+ console.log('Données mises à jour:', data);
232
+ }
233
+ });
234
+
235
+ // Activer les fonctionnalités
236
+ this.imageTool.toggleFocusPoint(true);
237
+ this.imageTool.toggleCropZone(true);
238
+ },
239
+ beforeDestroy() {
240
+ if (this.imageTool) {
241
+ this.imageTool.destroy();
242
+ this.imageTool = null;
243
+ }
244
+ }
245
+ };
246
+ </script>
247
+ ```
248
+
249
+ ## Démos
250
+
251
+ Consultez le dossier `demos/` pour des exemples complets :
252
+
253
+ - `basic-usage.html` : Exemple d'utilisation basique
254
+ - `custom-config.html` : Exemple avec configuration personnalisée
255
+ - `react-integration.jsx` : Exemple d'intégration avec React
256
+ - `vue-integration.js` : Exemple d'intégration avec Vue.js
257
+
258
+ ## Compatibilité navigateur
259
+
260
+ - Chrome (dernières versions)
261
+ - Firefox (dernières versions)
262
+ - Safari (dernières versions)
263
+ - Edge (dernières versions)
264
+
265
+ ## Licence
266
+
267
+ MIT