ultra-image-uploader 2.0.1 → 2.0.2

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
@@ -2,13 +2,13 @@
2
2
 
3
3
  <div align="center">
4
4
 
5
- A modern, beautiful React image upload component with progress tracking, drag-and-drop, and multi-provider support.
5
+ A modern, fancy React image upload component with responsive grid layout, drag-and-drop reordering, and beautiful animations.
6
6
 
7
7
  [![npm version](https://badge.fury.io/js/ultra-image-uploader.svg)](https://www.npmjs.com/package/ultra-image-uploader)
8
8
  ![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue)
9
9
  [![License: MIT](https://img.shields.io/badge/License-MIT-green)](https://opensource.org/licenses/MIT)
10
10
 
11
- **Modern UI** • **Progress Bars** • **ImgBB & Cloudinary** • **Auto Import Ready**
11
+ **Modern UI** • **Dark/Light Themes** • **Grid Layout** • **Drag Reorder**
12
12
 
13
13
  </div>
14
14
 
@@ -16,20 +16,21 @@ A modern, beautiful React image upload component with progress tracking, drag-an
16
16
 
17
17
  ## Features
18
18
 
19
- - **Modern UI** - Clean, professional file upload interface matching industry standards
20
- - **Progress Tracking** - Real-time upload progress with smooth animations
21
- - **Drag & Drop** - Intuitive drag-and-drop file handling
22
- - **Multiple Providers** - Built-in support for ImgBB and Cloudinary
23
- - **File Validation** - Type and size validation with helpful error messages
24
- - **Auto Upload** - Optional automatic upload on file selection
25
- - **Cancel/Remove** - Easy file management with cancel buttons
26
- - **TypeScript** - Fully typed for excellent DX
27
- - **Auto Import** - Works seamlessly with VS Code, WebStorm, and all popular editors
19
+ - **Modern UI** - Beautiful card-based design with shadows and rounded corners
20
+ - **Responsive Grid** - Adaptive grid layout (2-6 columns) for all screen sizes
21
+ - **Drag & Drop** - Upload files by dragging or clicking
22
+ - **Live Previews** - Instant image thumbnails with metadata
23
+ - **Drag Reorder** - Rearrange images by dragging
24
+ - **Progress Tracking** - Real-time upload progress with animations
25
+ - **Theme Support** - Built-in light/dark theme toggle
26
+ - **Smooth Animations** - Hover effects, fade transitions, scale animations
27
+ - **Keyboard Accessible** - Full keyboard navigation support
28
+ - **File Validation** - Size and type validation
29
+ - **Multiple Providers** - ImgBB & Cloudinary support
30
+ - **Auto Import** - Works with VS Code, WebStorm, and all editors
28
31
 
29
32
  ## Installation
30
33
 
31
- Install with any package manager:
32
-
33
34
  ```bash
34
35
  # npm
35
36
  npm install ultra-image-uploader
@@ -58,74 +59,101 @@ function App() {
58
59
  images={images}
59
60
  setImages={setImages}
60
61
  multiple
62
+ gridCols={4}
61
63
  />
62
64
  );
63
65
  }
64
66
  ```
65
67
 
66
- ## Usage Examples
67
-
68
- ### Basic File Upload
68
+ ## Props
69
69
 
70
- ```tsx
71
- import { ImageUploader } from "ultra-image-uploader";
70
+ | Prop | Type | Default | Description |
71
+ |------|------|---------|-------------|
72
+ | `images` | `File[]` | **Required** | Selected image files |
73
+ | `setImages` | `(files: File[]) => void` | **Required** | Update images state |
74
+ | `multiple` | `boolean` | `true` | Allow multiple files |
75
+ | `maxSize` | `number` | `52428800` | Max file size (50MB) |
76
+ | `allowedTypes` | `string[]` | Image types | Allowed MIME types |
77
+ | `maxImages` | `number` | `20` | Maximum images allowed |
78
+ | `theme` | `'light' \| 'dark'` | `undefined` | Theme (uses internal if not set) |
79
+ | `onThemeChange` | `(theme) => void` | `undefined` | Theme change callback |
80
+ | `showThemeToggle` | `boolean` | `true` | Show theme toggle button |
81
+ | `showImageCount` | `boolean` | `true` | Show image count header |
82
+ | `enableReorder` | `boolean` | `true` | Enable drag reordering |
83
+ | `gridCols` | `number` | `4` | Grid columns (2-6) |
84
+ | `cardClassName` | `string` | `''` | Custom card class |
85
+ | `containerClassName` | `string` | `'max-w-5xl mx-auto'` | Container styling |
86
+ | `uploadText` | `string` | `'Click or drag...'` | Upload area text |
87
+ | `dragText` | `string` | `'Drop images here'` | Drag over text |
88
+ | `autoUpload` | `boolean` | `false` | Auto-upload on selection |
89
+ | `uploadConfig` | `{ provider, config }` | `undefined` | Upload configuration |
90
+ | `onUploadComplete` | `(urls: string[]) => void` | `undefined` | Success callback |
91
+ | `onUploadError` | `(error: Error) => void` | `undefined` | Error callback |
72
92
 
73
- function BasicUpload() {
74
- const [images, setImages] = useState<File[]>([]);
93
+ ## Examples
75
94
 
76
- const handleUploadComplete = (urls: string[]) => {
77
- console.log('Uploaded URLs:', urls);
78
- };
95
+ ### Basic Grid Layout
79
96
 
80
- return (
81
- <ImageUploader
82
- images={images}
83
- setImages={setImages}
84
- multiple
85
- maxSize={50 * 1024 * 1024} // 50MB
86
- onUploadComplete={handleUploadComplete}
87
- uploadConfig={{
88
- provider: 'imgbb',
89
- config: { apiKey: 'your-api-key' }
90
- }}
91
- />
92
- );
93
- }
97
+ ```tsx
98
+ <ImageUploader
99
+ images={images}
100
+ setImages={setImages}
101
+ multiple
102
+ gridCols={4}
103
+ />
94
104
  ```
95
105
 
96
- ### Upload with ImgBB
106
+ ### Dark Theme
97
107
 
98
108
  ```tsx
99
- import { ImageUploader } from "ultra-image-uploader";
100
-
101
- function ImgBBUpload() {
109
+ function DarkExample() {
110
+ const [theme, setTheme] = useState<'light' | 'dark'>('dark');
102
111
  const [images, setImages] = useState<File[]>([]);
103
112
 
104
113
  return (
105
- <div>
114
+ <div className={theme === 'dark' ? 'dark' : ''}>
106
115
  <ImageUploader
107
116
  images={images}
108
117
  setImages={setImages}
118
+ theme={theme}
119
+ onThemeChange={setTheme}
109
120
  multiple
110
- uploadConfig={{
111
- provider: 'imgbb',
112
- config: { apiKey: process.env.IMGBB_API_KEY }
113
- }}
114
- onUploadComplete={(urls) => {
115
- console.log('Images uploaded to ImgBB:', urls);
116
- }}
121
+ gridCols={3}
117
122
  />
118
123
  </div>
119
124
  );
120
125
  }
121
126
  ```
122
127
 
123
- ### Upload with Cloudinary
128
+ ### Custom Grid & Styling
124
129
 
125
130
  ```tsx
126
- import { ImageUploader } from "ultra-image-uploader";
131
+ <ImageUploader
132
+ images={images}
133
+ setImages={setImages}
134
+ gridCols={3}
135
+ maxImages={10}
136
+ maxSize={10 * 1024 * 1024}
137
+ containerClassName="max-w-4xl mx-auto"
138
+ cardClassName="border-2"
139
+ />
140
+ ```
127
141
 
128
- function CloudinaryUpload() {
142
+ ### Without Reordering
143
+
144
+ ```tsx
145
+ <ImageUploader
146
+ images={images}
147
+ setImages={setImages}
148
+ enableReorder={false}
149
+ gridCols={5}
150
+ />
151
+ ```
152
+
153
+ ### With Upload (ImgBB)
154
+
155
+ ```tsx
156
+ function UploadExample() {
129
157
  const [images, setImages] = useState<File[]>([]);
130
158
 
131
159
  return (
@@ -133,65 +161,73 @@ function CloudinaryUpload() {
133
161
  images={images}
134
162
  setImages={setImages}
135
163
  multiple
164
+ gridCols={4}
136
165
  uploadConfig={{
137
- provider: 'cloudinary',
138
- config: {
139
- cloudName: 'your-cloud-name',
140
- uploadPreset: 'your-upload-preset'
141
- }
166
+ provider: 'imgbb',
167
+ config: { apiKey: process.env.IMGBB_API_KEY }
142
168
  }}
143
169
  onUploadComplete={(urls) => {
144
- console.log('Images uploaded to Cloudinary:', urls);
170
+ console.log('Uploaded:', urls);
145
171
  }}
146
172
  />
147
173
  );
148
174
  }
149
175
  ```
150
176
 
151
- ### Auto Upload Mode
177
+ ### Responsive Grid
178
+
179
+ ```tsx
180
+ // 2 columns on mobile, 4 on desktop
181
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4">
182
+ <ImageUploader images={images} setImages={setImages} gridCols={1} />
183
+ </div>
184
+ ```
185
+
186
+ ## Theme Support
187
+
188
+ The component includes built-in light and dark themes:
152
189
 
153
190
  ```tsx
191
+ // Controlled theme
154
192
  <ImageUploader
155
193
  images={images}
156
194
  setImages={setImages}
157
- multiple
158
- autoUpload
159
- uploadConfig={{
160
- provider: 'imgbb',
161
- config: { apiKey: 'your-api-key' }
162
- }}
195
+ theme="dark"
196
+ showThemeToggle={false}
163
197
  />
164
- ```
165
-
166
- ### Single File Upload
167
198
 
168
- ```tsx
199
+ // Uncontrolled theme (with toggle)
169
200
  <ImageUploader
170
- images={avatar}
171
- setImages={setAvatar}
172
- multiple={false}
173
- maxSize={2 * 1024 * 1024} // 2MB
201
+ images={images}
202
+ setImages={setImages}
203
+ showThemeToggle={true}
174
204
  />
175
205
  ```
176
206
 
177
- ## Component Props
207
+ ## Animations
178
208
 
179
- | Prop | Type | Default | Description |
180
- |------|------|---------|-------------|
181
- | `images` | `File[]` | **Required** | Selected image files |
182
- | `setImages` | `(files: File[]) => void` | **Required** | Update images state |
183
- | `multiple` | `boolean` | `true` | Allow multiple file selection |
184
- | `maxSize` | `number` | `52428800` | Max file size in bytes (50MB) |
185
- | `allowedTypes` | `string[]` | Image types | Allowed MIME types |
186
- | `className` | `string` | `''` | Extra CSS classes |
187
- | `autoUpload` | `boolean` | `false` | Auto-upload on selection |
188
- | `uploadConfig` | `{ provider, config }` | `undefined` | Upload configuration |
189
- | `onUploadComplete` | `(urls: string[]) => void` | `undefined` | Upload success callback |
190
- | `onUploadError` | `(error: Error) => void` | `undefined` | Upload error callback |
209
+ The component includes smooth animations:
210
+ - Scale effect on drag over
211
+ - Fade-in/out for previews
212
+ - Hover scale on image cards
213
+ - Smooth progress bar transitions
214
+ - Button hover effects
191
215
 
192
- ## Upload Functions
216
+ ## Accessibility
217
+
218
+ - Keyboard accessible (Enter/Space to upload)
219
+ - Focus indicators on drag area
220
+ - ARIA-compatible markup
221
+ - Screen reader friendly
222
+
223
+ ## Responsive Design
193
224
 
194
- You can also use the upload functions directly:
225
+ The grid layout adapts to screen sizes:
226
+ - Default: `max-w-5xl mx-auto` container
227
+ - Configurable grid columns (2-6)
228
+ - Works on mobile, tablet, and desktop
229
+
230
+ ## Upload Functions
195
231
 
196
232
  ```tsx
197
233
  import {
@@ -201,137 +237,66 @@ import {
201
237
  uploadImagesToCloudinary
202
238
  } from "ultra-image-uploader";
203
239
 
204
- // Upload single image
205
- const result = await uploadImage(file, 'imgbb', { apiKey: 'key' });
240
+ // Upload with progress
241
+ const result = await uploadImage(file, 'imgbb', { apiKey }, {
242
+ onProgress: (p) => console.log(p.percentage)
243
+ });
206
244
 
207
- // Upload multiple images
245
+ // Multiple uploads
208
246
  const results = await uploadImages(files, 'cloudinary', {
209
247
  cloudName: 'your-cloud'
210
248
  });
211
-
212
- // Convenience functions
213
- const { urls } = await uploadImagesToImageBB(images, apiKey);
214
- const uploads = await uploadImagesToCloudinary(images, config);
215
249
  ```
216
250
 
217
251
  ## API Configuration
218
252
 
219
253
  ### ImgBB
220
-
221
- 1. Go to [imgbb.com/settings/api](https://imgbb.com/settings/api)
222
- 2. Copy your API key
223
- 3. Use in the component:
224
-
225
- ```tsx
226
- uploadConfig={{
227
- provider: 'imgbb',
228
- config: { apiKey: 'your-api-key' }
229
- }}
230
- ```
254
+ 1. Get API key from [imgbb.com/settings/api](https://imgbb.com/settings/api)
255
+ 2. Use `{ provider: 'imgbb', config: { apiKey } }`
231
256
 
232
257
  ### Cloudinary
233
-
234
258
  1. Sign up at [cloudinary.com](https://cloudinary.com)
235
- 2. Get your **cloud name** from dashboard
236
- 3. Create an **upload preset** (Settings Upload Upload presets)
237
- 4. Use in the component:
238
-
239
- ```tsx
240
- uploadConfig={{
241
- provider: 'cloudinary',
242
- config: {
243
- cloudName: 'your-cloud-name',
244
- uploadPreset: 'your-upload-preset'
245
- }
246
- }}
247
- ```
259
+ 2. Get cloud name and create upload preset
260
+ 3. Use `{ provider: 'cloudinary', config: { cloudName, uploadPreset } }`
248
261
 
249
- ## TypeScript
262
+ ## Customization
250
263
 
251
- All exports are fully typed:
264
+ ### Card Styling
252
265
 
253
266
  ```tsx
254
- import type {
255
- ImageUploaderProps,
256
- UploadProvider,
257
- UploadResult,
258
- ProviderConfig,
259
- UploadOptions
260
- } from "ultra-image-uploader";
267
+ <ImageUploader
268
+ images={images}
269
+ setImages={setImages}
270
+ cardClassName="border-2 border-purple-500"
271
+ />
261
272
  ```
262
273
 
263
- ## Auto Import Support
264
-
265
- This package supports auto-import in all major editors:
266
-
267
- - **VS Code** - Auto-suggestions work out of the box
268
- - **WebStorm** - Full IntelliSense support
269
- - **Neovim** - Works with LSP and completion plugins
270
- - **Sublime Text** - Works with LSP packages
271
- - **All TypeScript editors** - Full type checking and suggestions
272
-
273
- ## Styling
274
-
275
- The component uses Tailwind CSS classes. You can add custom styling:
274
+ ### Container Size
276
275
 
277
276
  ```tsx
278
277
  <ImageUploader
279
278
  images={images}
280
279
  setImages={setImages}
281
- className="max-w-2xl mx-auto"
280
+ containerClassName="max-w-7xl mx-auto"
282
281
  />
283
282
  ```
284
283
 
285
- ### Custom Styling
286
-
287
- For complete customization, you can wrap and override styles:
284
+ ### Grid Columns
288
285
 
289
286
  ```tsx
290
- <div className="your-custom-wrapper">
291
- <ImageUploader
292
- images={images}
293
- setImages={setImages}
294
- className="your-custom-class"
295
- />
296
- </div>
297
- ```
298
-
299
- ## Troubleshooting
300
-
301
- ### Auto imports not working
302
-
303
- **VS Code:**
304
- 1. Ensure TypeScript is enabled in your project
305
- 2. Restart the TypeScript server: `Cmd/Ctrl + Shift + P` → "TypeScript: Restart TS Server"
306
- 3. Check that `node_modules/ultra-image-uploader` exists
307
-
308
- **WebStorm:**
309
- 1. Invalidate caches: `File` → `Invalidate Caches and Restart`
310
- 2. Ensure TypeScript plugin is enabled
311
-
312
- ### Uploads failing
287
+ // 2 columns
288
+ <ImageUploader gridCols={2} />
313
289
 
314
- 1. **Check API keys** - Verify your ImgBB or Cloudinary credentials
315
- 2. **CORS issues** - Ensure your domain is whitelisted
316
- 3. **File size** - Check if file exceeds provider limits
317
- 4. **Network** - Check browser console for network errors
318
-
319
- ### TypeScript errors
320
-
321
- ```bash
322
- # Reinstall dependencies
323
- rm -rf node_modules package-lock.json
324
- npm install
325
-
326
- # Restart TypeScript server in your editor
290
+ // 6 columns
291
+ <ImageUploader gridCols={6} />
327
292
  ```
328
293
 
329
- ### Build issues
294
+ ## TypeScript
330
295
 
331
- ```bash
332
- # Clean and rebuild
333
- npm run clean
334
- npm run build
296
+ Full TypeScript support:
297
+
298
+ ```tsx
299
+ import type { ImageUploaderProps } from "ultra-image-uploader";
335
300
  ```
336
301
 
337
302
  ## Browser Support
@@ -339,12 +304,21 @@ npm run build
339
304
  - Chrome/Edge (latest)
340
305
  - Firefox (latest)
341
306
  - Safari (latest)
342
- - Mobile browsers (iOS Safari, Chrome Mobile)
307
+ - Mobile browsers
308
+
309
+ ## Troubleshooting
343
310
 
344
- ## Requirements
311
+ ### Auto imports not working
312
+ - Restart TypeScript server in your editor
313
+ - Ensure `node_modules` exists
345
314
 
346
- - React >= 18.0.0
347
- - TypeScript (optional but recommended)
315
+ ### Theme not applying
316
+ - Wrap parent div with `dark` class for dark mode
317
+ - Check Tailwind CSS dark mode config
318
+
319
+ ### Grid not responsive
320
+ - Adjust `gridCols` prop for different breakpoints
321
+ - Use wrapper with responsive classes
348
322
 
349
323
  ## License
350
324
 
@@ -354,16 +328,7 @@ MIT © Digontha Das
354
328
 
355
329
  - [GitHub](https://github.com/digontha/ultra-image-uploader)
356
330
  - [NPM](https://www.npmjs.com/package/ultra-image-uploader)
357
- - [Report Issues](https://github.com/digontha/ultra-image-uploader/issues)
358
-
359
- ## Changelog
360
-
361
- ### v2.0.0
362
- - 🎨 Modern UI redesign with progress bars
363
- - ✅ Auto import support for all editors
364
- - 📦 Simplified package structure
365
- - 🚀 Improved drag-and-drop experience
366
- - 🎯 Better TypeScript support
331
+ - [Issues](https://github.com/digontha/ultra-image-uploader/issues)
367
332
 
368
333
  ---
369
334
 
@@ -5,8 +5,18 @@ export interface ImageUploaderProps {
5
5
  multiple?: boolean;
6
6
  maxSize?: number;
7
7
  allowedTypes?: string[];
8
- uploadText?: string;
8
+ maxImages?: number;
9
9
  className?: string;
10
+ containerClassName?: string;
11
+ uploadText?: string;
12
+ dragText?: string;
13
+ theme?: 'light' | 'dark';
14
+ onThemeChange?: (theme: 'light' | 'dark') => void;
15
+ showThemeToggle?: boolean;
16
+ showImageCount?: boolean;
17
+ enableReorder?: boolean;
18
+ gridCols?: number;
19
+ cardClassName?: string;
10
20
  onUploadComplete?: (urls: string[]) => void;
11
21
  onUploadError?: (error: Error) => void;
12
22
  autoUpload?: boolean;
@@ -15,5 +25,5 @@ export interface ImageUploaderProps {
15
25
  config: ProviderConfig;
16
26
  };
17
27
  }
18
- export declare function ImageUploader({ images, setImages, multiple, maxSize, allowedTypes, className, onUploadComplete, onUploadError, autoUpload, uploadConfig, }: ImageUploaderProps): import("react/jsx-runtime").JSX.Element;
28
+ export declare function ImageUploader({ images, setImages, multiple, maxSize, allowedTypes, maxImages, className, containerClassName, uploadText, dragText, theme: externalTheme, onThemeChange, showThemeToggle, showImageCount, enableReorder, gridCols, cardClassName, onUploadComplete, onUploadError, autoUpload, uploadConfig, }: ImageUploaderProps): import("react/jsx-runtime").JSX.Element;
19
29
  //# sourceMappingURL=ImageUploader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ImageUploader.d.ts","sourceRoot":"","sources":["../../src/components/ImageUploader.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAI/D,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,IAAI,EAAE,CAAC;IACf,SAAS,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC5C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE;QACb,QAAQ,EAAE,cAAc,CAAC;QACzB,MAAM,EAAE,cAAc,CAAC;KACxB,CAAC;CACH;AAQD,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,SAAS,EACT,QAAe,EACf,OAA0B,EAC1B,YAAkF,EAClF,SAAc,EACd,gBAAgB,EAChB,aAAa,EACb,UAAkB,EAClB,YAAY,GACb,EAAE,kBAAkB,2CA0SpB"}
1
+ {"version":3,"file":"ImageUploader.d.ts","sourceRoot":"","sources":["../../src/components/ImageUploader.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAI/D,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,IAAI,EAAE,CAAC;IACf,SAAS,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;IAClD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC5C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE;QACb,QAAQ,EAAE,cAAc,CAAC;QACzB,MAAM,EAAE,cAAc,CAAC;KACxB,CAAC;CACH;AASD,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,SAAS,EACT,QAAe,EACf,OAA0B,EAC1B,YAAkF,EAClF,SAAc,EACd,SAAc,EACd,kBAAwC,EACxC,UAA6C,EAC7C,QAA6B,EAC7B,KAAK,EAAE,aAAa,EACpB,aAAa,EACb,eAAsB,EACtB,cAAqB,EACrB,aAAoB,EACpB,QAAY,EACZ,aAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,UAAkB,EAClB,YAAY,GACb,EAAE,kBAAkB,2CAwgBpB"}
@@ -1,25 +1,36 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { useState, useRef, useCallback, useEffect } from 'react';
4
- import { Upload, X, FileText, Loader2 } from 'lucide-react';
4
+ import { Upload, X, Image as ImageIcon, File, Moon, Sun, GripVertical } from 'lucide-react';
5
5
  import { uploadImage } from '../providers';
6
6
  import { isImageFile, formatFileSize } from '../utils/validation';
7
- export function ImageUploader({ images, setImages, multiple = true, maxSize = 50 * 1024 * 1024, allowedTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/webp', 'image/gif'], className = '', onUploadComplete, onUploadError, autoUpload = false, uploadConfig, }) {
7
+ export function ImageUploader({ images, setImages, multiple = true, maxSize = 50 * 1024 * 1024, allowedTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/webp', 'image/gif'], maxImages = 20, className = '', containerClassName = 'max-w-5xl mx-auto', uploadText = 'Click or drag to upload images', dragText = 'Drop images here', theme: externalTheme, onThemeChange, showThemeToggle = true, showImageCount = true, enableReorder = true, gridCols = 4, cardClassName = '', onUploadComplete, onUploadError, autoUpload = false, uploadConfig, }) {
8
+ const [internalTheme, setInternalTheme] = useState('light');
8
9
  const [isDragging, setIsDragging] = useState(false);
9
10
  const [fileStates, setFileStates] = useState(new Map());
10
11
  const [uploading, setUploading] = useState(false);
12
+ const [draggedIndex, setDraggedIndex] = useState(null);
11
13
  const fileInputRef = useRef(null);
12
14
  const dragCounter = useRef(0);
13
- // Initialize file states
15
+ const theme = externalTheme || internalTheme;
16
+ const isDark = theme === 'dark';
17
+ const handleThemeToggle = () => {
18
+ const newTheme = isDark ? 'light' : 'dark';
19
+ setInternalTheme(newTheme);
20
+ onThemeChange?.(newTheme);
21
+ };
22
+ // Generate previews
14
23
  useEffect(() => {
15
24
  const newStates = new Map();
16
25
  images.forEach((file) => {
17
26
  const key = `${file.name}-${file.size}`;
18
- if (!fileStates.has(key)) {
19
- newStates.set(key, { ...file, progress: 0, status: 'pending' });
27
+ const existing = fileStates.get(key);
28
+ if (existing?.preview) {
29
+ newStates.set(key, existing);
20
30
  }
21
31
  else {
22
- newStates.set(key, fileStates.get(key));
32
+ const preview = isImageFile(file) ? URL.createObjectURL(file) : undefined;
33
+ newStates.set(key, { ...file, progress: 0, status: 'pending', preview });
23
34
  }
24
35
  });
25
36
  setFileStates(newStates);
@@ -79,7 +90,7 @@ export function ImageUploader({ images, setImages, multiple = true, maxSize = 50
79
90
  const valid = [];
80
91
  const invalid = [];
81
92
  Array.from(files).forEach((file) => {
82
- if (!isImageFile(file)) {
93
+ if (!isImageFile(file) && !allowedTypes.includes(file.type)) {
83
94
  invalid.push(file);
84
95
  return;
85
96
  }
@@ -87,14 +98,13 @@ export function ImageUploader({ images, setImages, multiple = true, maxSize = 50
87
98
  invalid.push(file);
88
99
  return;
89
100
  }
90
- if (!allowedTypes.includes(file.type)) {
91
- invalid.push(file);
101
+ if (maxImages && images.length + valid.length >= maxImages) {
92
102
  return;
93
103
  }
94
104
  valid.push(file);
95
105
  });
96
106
  return { valid, invalid };
97
- }, [maxSize, allowedTypes]);
107
+ }, [maxSize, allowedTypes, maxImages, images.length]);
98
108
  const handleFiles = useCallback((files) => {
99
109
  const { valid } = validateFiles(files);
100
110
  if (valid.length === 0)
@@ -104,7 +114,7 @@ export function ImageUploader({ images, setImages, multiple = true, maxSize = 50
104
114
  return;
105
115
  }
106
116
  setImages(multiple ? [...images, ...valid] : [valid[0]]);
107
- }, [images, multiple, setImages, validateFiles]);
117
+ }, [images, multiple, setImages, validateFiles, maxImages]);
108
118
  const handleChange = (e) => {
109
119
  if (e.target.files?.length) {
110
120
  handleFiles(e.target.files);
@@ -137,24 +147,80 @@ export function ImageUploader({ images, setImages, multiple = true, maxSize = 50
137
147
  handleFiles(e.dataTransfer.files);
138
148
  }
139
149
  };
140
- const removeFile = (file) => {
141
- setImages(images.filter((f) => f !== file));
150
+ const removeFile = (index) => {
151
+ setImages(images.filter((_, i) => i !== index));
152
+ };
153
+ const handleDragStart = (e, index) => {
154
+ if (!enableReorder)
155
+ return;
156
+ setDraggedIndex(index);
157
+ e.dataTransfer.effectAllowed = 'move';
158
+ };
159
+ const handleDragOverItem = (e, index) => {
160
+ if (!enableReorder || draggedIndex === null || draggedIndex === index)
161
+ return;
162
+ e.preventDefault();
163
+ e.dataTransfer.dropEffect = 'move';
164
+ };
165
+ const handleDropItem = (e, index) => {
166
+ if (!enableReorder || draggedIndex === null || draggedIndex === index)
167
+ return;
168
+ e.preventDefault();
169
+ const newImages = [...images];
170
+ const draggedItem = newImages[draggedIndex];
171
+ newImages.splice(draggedIndex, 1);
172
+ newImages.splice(index, 0, draggedItem);
173
+ setImages(newImages);
174
+ setDraggedIndex(null);
175
+ };
176
+ const handleDragEnd = () => {
177
+ setDraggedIndex(null);
142
178
  };
143
179
  const getFileState = (file) => {
144
180
  const key = `${file.name}-${file.size}`;
145
181
  return fileStates.get(key) || { ...file, progress: 0, status: 'pending' };
146
182
  };
147
- return (_jsxs("div", { className: `image-uploader ${className}`, children: [_jsxs("div", { className: "relative border-2 border-dashed border-gray-300 rounded-lg p-12 transition-colors duration-200", style: {
148
- borderColor: isDragging ? '#1E88E5' : undefined,
149
- backgroundColor: isDragging ? '#F5F5F5' : 'white',
150
- }, onClick: () => fileInputRef.current?.click(), onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, children: [_jsx("input", { ref: fileInputRef, type: "file", accept: allowedTypes.join(','), multiple: multiple, onChange: handleChange, className: "absolute inset-0 opacity-0 cursor-pointer" }), _jsxs("div", { className: "flex flex-col items-center justify-center", children: [_jsxs("div", { className: "relative mb-4", children: [_jsx("div", { className: "w-16 h-16 rounded-full border-2 border-gray-300 flex items-center justify-center bg-white", children: _jsx(FileText, { size: 32, className: "text-gray-400" }) }), _jsx("div", { className: "absolute -bottom-1 -right-1 w-8 h-8 bg-gray-800 rounded-full flex items-center justify-center", children: _jsx(Upload, { size: 16, className: "text-white" }) })] }), _jsxs("p", { className: "text-base text-gray-700 mb-2", children: [_jsx("span", { className: "underline decoration-1 underline-offset-2 cursor-pointer hover:text-gray-900", children: "Click to upload" }), ' ', "or drag and drop"] }), _jsxs("p", { className: "text-sm text-gray-500", children: ["Maximum file size ", formatFileSize(maxSize)] })] })] }), images.length > 0 && (_jsx("div", { className: "mt-6 space-y-4", children: images.map((file) => {
151
- const state = getFileState(file);
152
- const isUploading = state.status === 'uploading';
153
- const isDone = state.status === 'done';
154
- return (_jsx("div", { className: "border border-gray-300 rounded-lg p-4 transition-all duration-200 hover:border-gray-400", children: _jsxs("div", { className: "flex items-start gap-4", children: [_jsx("div", { className: "w-10 h-10 rounded bg-gray-100 flex items-center justify-center flex-shrink-0", children: _jsx(FileText, { size: 20, className: "text-gray-500" }) }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("p", { className: "text-sm font-medium text-gray-900 truncate", children: file.name }), _jsx("p", { className: "text-sm text-gray-500", children: formatFileSize(file.size) }), isUploading || isDone ? (_jsx("div", { className: "mt-3", children: _jsxs("div", { className: "flex items-center justify-between mb-1", children: [_jsx("div", { className: "flex-1 mr-4", children: _jsx("div", { className: "w-full bg-gray-200 rounded-full h-1.5", children: _jsx("div", { className: "bg-gray-900 h-1.5 rounded-full transition-all duration-300", style: { width: `${state.progress || 0}%` } }) }) }), _jsxs("span", { className: "text-sm text-gray-700 font-medium", children: [state.progress || 0, "%"] })] }) })) : null] }), _jsx("button", { onClick: (e) => {
155
- e.stopPropagation();
156
- removeFile(file);
157
- }, className: "flex-shrink-0 w-6 h-6 flex items-center justify-center text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded-full transition-colors", children: _jsx(X, { size: 16 }) })] }) }, `${file.name}-${file.size}`));
158
- }) })), images.length > 0 && !autoUpload && (_jsxs("div", { className: "mt-6 flex items-center justify-end gap-3", children: [_jsx("button", { onClick: () => setImages([]), className: "px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors", children: "Cancel" }), _jsx("button", { onClick: handleAutoUpload, disabled: uploading, className: "px-4 py-2 text-sm font-medium text-white bg-gray-900 rounded-lg hover:bg-gray-800 disabled:opacity-50 disabled:cursor-not-allowed transition-colors flex items-center gap-2", children: uploading ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { size: 16, className: "animate-spin" }), "Uploading..."] })) : ('Attach files') })] }))] }));
183
+ const gridColsClass = {
184
+ 2: 'grid-cols-2',
185
+ 3: 'grid-cols-3',
186
+ 4: 'grid-cols-4',
187
+ 5: 'grid-cols-5',
188
+ 6: 'grid-cols-6',
189
+ }[gridCols] || 'grid-cols-4';
190
+ return (_jsxs("div", { className: `image-uploader ${containerClassName} ${className}`, children: [_jsxs("div", { className: "flex items-center justify-between mb-6", children: [_jsx("h2", { className: `text-2xl font-bold ${isDark ? 'text-white' : 'text-gray-900'}`, children: "Upload Images" }), showImageCount && (_jsxs("span", { className: `text-sm ${isDark ? 'text-gray-400' : 'text-gray-600'}`, children: [images.length, " ", maxImages ? `/ ${maxImages}` : '', " images"] }))] }), _jsxs("div", { className: `relative rounded-2xl border-2 border-dashed transition-all duration-300 ${isDragging
191
+ ? 'border-blue-500 bg-blue-50 scale-[1.02]'
192
+ : isDark
193
+ ? 'border-gray-600 bg-gray-800/50 hover:border-gray-500'
194
+ : 'border-gray-300 bg-gray-50 hover:border-gray-400'}`, style: {
195
+ boxShadow: isDark
196
+ ? '0 4px 6px -1px rgba(0, 0, 0, 0.3), 0 2px 4px -1px rgba(0, 0, 0, 0.2)'
197
+ : '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',
198
+ }, onClick: () => fileInputRef.current?.click(), onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, tabIndex: 0, onKeyDown: (e) => {
199
+ if (e.key === 'Enter' || e.key === ' ') {
200
+ fileInputRef.current?.click();
201
+ }
202
+ }, onFocus: (e) => e.currentTarget.classList.add('ring-2', 'ring-blue-500'), onBlur: (e) => e.currentTarget.classList.remove('ring-2', 'ring-blue-500'), children: [_jsx("input", { ref: fileInputRef, type: "file", accept: allowedTypes.join(','), multiple: multiple, onChange: handleChange, className: "absolute inset-0 opacity-0 cursor-pointer", style: { zIndex: 10 } }), _jsxs("div", { className: "flex flex-col items-center justify-center p-12", children: [_jsxs("div", { className: `relative mb-4 transition-transform duration-300 ${isDragging ? 'scale-110' : 'scale-100'}`, children: [_jsx("div", { className: `w-20 h-20 rounded-full flex items-center justify-center ${isDark ? 'bg-gray-700' : 'bg-white'}`, style: {
203
+ boxShadow: isDark
204
+ ? '0 4px 6px -1px rgba(0, 0, 0, 0.3)'
205
+ : '0 4px 6px -1px rgba(0, 0, 0, 0.1)',
206
+ }, children: _jsx(ImageIcon, { size: 40, className: isDark ? 'text-gray-400' : 'text-gray-500' }) }), _jsx("div", { className: `absolute -bottom-2 -right-2 w-10 h-10 rounded-full flex items-center justify-center transition-all duration-300 ${isDragging ? 'scale-125' : 'scale-100'} ${isDark ? 'bg-blue-600' : 'bg-blue-500'}`, children: _jsx(Upload, { size: 20, className: "text-white" }) })] }), _jsx("p", { className: `text-lg font-semibold mb-2 transition-colors ${isDark ? 'text-white' : 'text-gray-900'}`, children: isDragging ? dragText : uploadText }), _jsxs("p", { className: `text-sm ${isDark ? 'text-gray-400' : 'text-gray-500'}`, children: ["Maximum file size ", formatFileSize(maxSize)] }), maxImages && (_jsxs("p", { className: `text-xs mt-2 ${isDark ? 'text-gray-500' : 'text-gray-400'}`, children: ["Up to ", maxImages, " images"] }))] })] }), showThemeToggle && !externalTheme && (_jsx("div", { className: "flex justify-end mt-4", children: _jsxs("button", { onClick: handleThemeToggle, className: `flex items-center gap-2 px-4 py-2 rounded-lg transition-all ${isDark
207
+ ? 'bg-gray-800 hover:bg-gray-700 text-gray-200'
208
+ : 'bg-gray-100 hover:bg-gray-200 text-gray-700'}`, children: [isDark ? _jsx(Sun, { size: 18 }) : _jsx(Moon, { size: 18 }), _jsxs("span", { className: "text-sm font-medium", children: [isDark ? 'Light' : 'Dark', " Mode"] })] }) })), images.length > 0 && (_jsx("div", { className: "mt-8", children: _jsx("div", { className: `grid gap-4 ${gridColsClass} ${isDark ? 'text-white' : 'text-gray-900'}`, children: images.map((file, index) => {
209
+ const state = getFileState(file);
210
+ const isUploading = state.status === 'uploading';
211
+ const isDone = state.status === 'done';
212
+ return (_jsx("div", { draggable: enableReorder, onDragStart: (e) => handleDragStart(e, index), onDragOver: (e) => handleDragOverItem(e, index), onDrop: (e) => handleDropItem(e, index), onDragEnd: handleDragEnd, className: `group relative ${cardClassName} ${draggedIndex === index ? 'opacity-50' : ''}`, children: _jsxs("div", { className: `relative overflow-hidden rounded-xl transition-all duration-300 ${isDark
213
+ ? 'bg-gray-800 hover:bg-gray-750'
214
+ : 'bg-white hover:bg-gray-50'}`, style: {
215
+ boxShadow: isDark
216
+ ? '0 4px 6px -1px rgba(0, 0, 0, 0.3)'
217
+ : '0 4px 6px -1px rgba(0, 0, 0, 0.1)',
218
+ }, children: [enableReorder && (_jsx("div", { className: `absolute top-2 left-2 p-1.5 rounded-lg opacity-0 group-hover:opacity-100 transition-opacity z-20 ${isDark ? 'bg-gray-700' : 'bg-white'}`, style: { boxShadow: '0 2px 4px rgba(0,0,0,0.1)' }, children: _jsx(GripVertical, { size: 16, className: isDark ? 'text-gray-400' : 'text-gray-500' }) })), _jsx("button", { onClick: (e) => {
219
+ e.stopPropagation();
220
+ removeFile(index);
221
+ }, className: "absolute top-2 right-2 p-1.5 rounded-full opacity-0 group-hover:opacity-100 transition-all z-20 hover:scale-110 bg-red-500 hover:bg-red-600 text-white", style: { boxShadow: '0 2px 4px rgba(0,0,0,0.2)' }, children: _jsx(X, { size: 16 }) }), _jsxs("div", { className: "relative aspect-square", children: [state.preview ? (_jsx("img", { src: state.preview, alt: file.name, className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105" })) : (_jsx("div", { className: `w-full h-full flex items-center justify-center ${isDark ? 'bg-gray-700' : 'bg-gray-100'}`, children: _jsx(File, { size: 48, className: isDark ? 'text-gray-500' : 'text-gray-400' }) })), (isUploading || isDone) && (_jsx("div", { className: "absolute inset-0 bg-black/60 flex items-center justify-center", children: _jsx("div", { className: "text-center", children: isUploading ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "w-16 h-16 border-4 border-white border-t-transparent rounded-full animate-spin mx-auto mb-2" }), _jsxs("p", { className: "text-white font-semibold", children: [state.progress, "%"] })] })) : (_jsx("div", { className: "w-16 h-16 bg-green-500 rounded-full flex items-center justify-center", children: _jsx("svg", { className: "w-8 h-8 text-white", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 3, d: "M5 13l4 4L19 7" }) }) })) }) }))] }), _jsxs("div", { className: "p-3", children: [_jsx("p", { className: `text-sm font-medium truncate mb-1 ${isDark ? 'text-white' : 'text-gray-900'}`, children: file.name }), _jsx("p", { className: `text-xs ${isDark ? 'text-gray-400' : 'text-gray-500'}`, children: formatFileSize(file.size) }), isUploading && (_jsx("div", { className: "mt-2", children: _jsx("div", { className: "w-full bg-gray-200 rounded-full h-1", children: _jsx("div", { className: "bg-blue-500 h-1 rounded-full transition-all duration-300", style: { width: `${state.progress}%` } }) }) }))] })] }) }, `${file.name}-${file.size}`));
222
+ }) }) })), images.length > 0 && !autoUpload && (_jsxs("div", { className: "mt-6 flex items-center justify-end gap-3", children: [_jsx("button", { onClick: () => setImages([]), className: `px-6 py-2.5 text-sm font-medium rounded-lg transition-all ${isDark
223
+ ? 'bg-gray-800 hover:bg-gray-700 text-gray-200 border border-gray-700'
224
+ : 'bg-white hover:bg-gray-50 text-gray-700 border border-gray-300'}`, children: "Clear All" }), _jsx("button", { onClick: handleAutoUpload, disabled: uploading, className: "px-6 py-2.5 text-sm font-medium text-white bg-blue-500 hover:bg-blue-600 rounded-lg disabled:opacity-50 disabled:cursor-not-allowed transition-all hover:shadow-lg hover:scale-105 flex items-center gap-2", children: uploading ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "w-4 h-4 border-2 border-white border-t-transparent rounded-full animate-spin" }), "Uploading..."] })) : (_jsxs(_Fragment, { children: [_jsx(Upload, { size: 16 }), "Upload ", images.length, " ", images.length === 1 ? 'Image' : 'Images'] })) })] }))] }));
159
225
  }
160
226
  //# sourceMappingURL=ImageUploader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ImageUploader.js","sourceRoot":"","sources":["../../src/components/ImageUploader.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ImageUploader.js","sourceRoot":"","sources":["../../src/components/ImageUploader.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ultra-image-uploader",
3
- "version": "2.0.1",
3
+ "version": "2.0.2",
4
4
  "description": "A modern, beautiful React image upload component with ImgBB & Cloudinary support",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",