ultra-image-uploader 2.0.0 → 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 support for multiple providers.
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** • **Multiple Providers** • **5 Themes** • **Production Ready**
11
+ **Modern UI** • **Dark/Light Themes** • **Grid Layout** • **Drag Reorder**
12
12
 
13
13
  </div>
14
14
 
@@ -16,21 +16,33 @@ A modern, beautiful React image upload component with support for multiple provi
16
16
 
17
17
  ## Features
18
18
 
19
- - **Beautiful UI** - Modern, clean design with smooth animations
20
- - **5 Built-in Themes** - Light, Dark, Modern, Ocean, Sunset
21
- - **Custom Themes** - Create your own color schemes
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
22
29
  - **Multiple Providers** - ImgBB & Cloudinary support
23
- - **Drag & Drop** - Intuitive file handling
24
- - **Upload Progress** - Real-time progress tracking
25
- - **File Validation** - Type and size validation
26
- - **Auto Upload** - Optional automatic uploading
27
- - **TypeScript** - Fully typed
28
- - **Simple API** - Easy to use
30
+ - **Auto Import** - Works with VS Code, WebStorm, and all editors
29
31
 
30
32
  ## Installation
31
33
 
32
34
  ```bash
35
+ # npm
33
36
  npm install ultra-image-uploader
37
+
38
+ # yarn
39
+ yarn add ultra-image-uploader
40
+
41
+ # pnpm
42
+ pnpm add ultra-image-uploader
43
+
44
+ # bun
45
+ bun add ultra-image-uploader
34
46
  ```
35
47
 
36
48
  ## Quick Start
@@ -47,265 +59,267 @@ function App() {
47
59
  images={images}
48
60
  setImages={setImages}
49
61
  multiple
50
- theme="light"
62
+ gridCols={4}
51
63
  />
52
64
  );
53
65
  }
54
66
  ```
55
67
 
56
- ## Themes
57
-
58
- Choose from 5 beautiful themes:
59
-
60
- ```tsx
61
- // Light (default)
62
- <ImageUploader theme="light" images={images} setImages={setImages} />
63
-
64
- // Dark
65
- <ImageUploader theme="dark" images={images} setImages={setImages} />
66
-
67
- // Modern (pink)
68
- <ImageUploader theme="modern" images={images} setImages={setImages} />
68
+ ## Props
69
69
 
70
- // Ocean (cyan)
71
- <ImageUploader theme="ocean" images={images} setImages={setImages} />
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
- // Sunset (orange)
74
- <ImageUploader theme="sunset" images={images} setImages={setImages} />
75
- ```
93
+ ## Examples
76
94
 
77
- ## Custom Theme
95
+ ### Basic Grid Layout
78
96
 
79
97
  ```tsx
80
- import { ImageUploader, type ThemeConfig } from "ultra-image-uploader";
81
-
82
- const customTheme: ThemeConfig = {
83
- primary: '#ff6b6b',
84
- background: '#fff',
85
- border: '#ddd',
86
- text: '#333',
87
- textSecondary: '#666',
88
- error: '#e74c3c',
89
- success: '#2ecc71',
90
- radius: '8px',
91
- };
92
-
93
98
  <ImageUploader
94
99
  images={images}
95
100
  setImages={setImages}
96
- theme={customTheme}
101
+ multiple
102
+ gridCols={4}
97
103
  />
98
104
  ```
99
105
 
100
- ## Upload to ImgBB
106
+ ### Dark Theme
101
107
 
102
108
  ```tsx
103
- import { ImageUploader, uploadImagesToImageBB } from "ultra-image-uploader";
104
-
105
- function UploadToImgBB() {
109
+ function DarkExample() {
110
+ const [theme, setTheme] = useState<'light' | 'dark'>('dark');
106
111
  const [images, setImages] = useState<File[]>([]);
107
112
 
108
- const handleUpload = async () => {
109
- const result = await uploadImagesToImageBB(images, 'YOUR_API_KEY');
110
- console.log('Uploaded:', result.urls);
111
- };
112
-
113
113
  return (
114
- <div>
115
- <ImageUploader images={images} setImages={setImages} multiple />
116
- <button onClick={handleUpload}>Upload</button>
114
+ <div className={theme === 'dark' ? 'dark' : ''}>
115
+ <ImageUploader
116
+ images={images}
117
+ setImages={setImages}
118
+ theme={theme}
119
+ onThemeChange={setTheme}
120
+ multiple
121
+ gridCols={3}
122
+ />
117
123
  </div>
118
124
  );
119
125
  }
120
126
  ```
121
127
 
122
- ## Upload to Cloudinary
128
+ ### Custom Grid & Styling
123
129
 
124
130
  ```tsx
125
- import { ImageUploader, uploadImagesToCloudinary } from "ultra-image-uploader";
126
-
127
- function UploadToCloudinary() {
128
- const [images, setImages] = useState<File[]>([]);
129
-
130
- const handleUpload = async () => {
131
- const results = await uploadImagesToCloudinary(images, {
132
- cloudName: 'your-cloud-name',
133
- uploadPreset: 'your-upload-preset',
134
- });
135
- console.log('Uploaded:', results.map(r => r.url));
136
- };
137
-
138
- return (
139
- <div>
140
- <ImageUploader images={images} setImages={setImages} multiple theme="dark" />
141
- <button onClick={handleUpload}>Upload</button>
142
- </div>
143
- );
144
- }
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
+ />
145
140
  ```
146
141
 
147
- ## Auto Upload Mode
142
+ ### Without Reordering
148
143
 
149
144
  ```tsx
150
145
  <ImageUploader
151
146
  images={images}
152
147
  setImages={setImages}
153
- multiple
154
- autoUpload
155
- uploadConfig={{
156
- provider: 'imgbb',
157
- config: { apiKey: 'your-api-key' },
158
- }}
159
- onUploadComplete={(urls) => console.log('Done!', urls)}
160
- onUploadError={(error) => console.error('Error:', error)}
148
+ enableReorder={false}
149
+ gridCols={5}
161
150
  />
162
151
  ```
163
152
 
164
- ## Props
153
+ ### With Upload (ImgBB)
165
154
 
166
- | Prop | Type | Default | Description |
167
- |------|------|---------|-------------|
168
- | `images` | `File[]` | **Required** | Selected image files |
169
- | `setImages` | `(files: File[]) => void` | **Required** | Update images state |
170
- | `multiple` | `boolean` | `false` | Allow multiple files |
171
- | `theme` | `'light' \| 'dark' \| 'modern' \| 'ocean' \| 'sunset' \| ThemeConfig` | `'light'` | Theme to use |
172
- | `mode` | `'add' \| 'update'` | `'add'` | Component mode |
173
- | `defaultImages` | `string[]` | `[]` | Existing image URLs |
174
- | `uploadText` | `string` | `'Drop images here...'` | Upload area text |
175
- | `maxSize` | `number` | `10485760` | Max file size (bytes) |
176
- | `allowedTypes` | `string[]` | Image types | Allowed MIME types |
177
- | `showFileSize` | `boolean` | `true` | Show file size |
178
- | `dragAndDrop` | `boolean` | `true` | Enable drag-drop |
179
- | `previewWidth` | `number` | `140` | Preview width (px) |
180
- | `previewHeight` | `number` | `140` | Preview height (px) |
181
- | `autoUpload` | `boolean` | `false` | Auto upload files |
182
- | `uploadConfig` | `{ provider, config }` | `undefined` | Upload config |
183
- | `onUploadComplete` | `(urls: string[]) => void` | `undefined` | Upload success callback |
184
- | `onUploadError` | `(error: Error) => void` | `undefined` | Upload error callback |
185
- | `className` | `string` | `''` | Extra CSS classes |
186
-
187
- ## Upload Functions
155
+ ```tsx
156
+ function UploadExample() {
157
+ const [images, setImages] = useState<File[]>([]);
188
158
 
189
- ### `uploadImage(file, provider, config, options?)`
159
+ return (
160
+ <ImageUploader
161
+ images={images}
162
+ setImages={setImages}
163
+ multiple
164
+ gridCols={4}
165
+ uploadConfig={{
166
+ provider: 'imgbb',
167
+ config: { apiKey: process.env.IMGBB_API_KEY }
168
+ }}
169
+ onUploadComplete={(urls) => {
170
+ console.log('Uploaded:', urls);
171
+ }}
172
+ />
173
+ );
174
+ }
175
+ ```
190
176
 
191
- Upload a single image.
177
+ ### Responsive Grid
192
178
 
193
179
  ```tsx
194
- import { uploadImage } from "ultra-image-uploader";
195
-
196
- const result = await uploadImage(
197
- file,
198
- 'imgbb',
199
- { apiKey: 'your-key' },
200
- {
201
- onProgress: (p) => console.log(p.percentage + '%'),
202
- }
203
- );
204
- console.log(result.url);
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>
205
184
  ```
206
185
 
207
- ### `uploadImages(files, provider, config, options?)`
186
+ ## Theme Support
208
187
 
209
- Upload multiple images.
188
+ The component includes built-in light and dark themes:
210
189
 
211
190
  ```tsx
212
- const results = await uploadImages(files, 'cloudinary', {
213
- cloudName: 'your-cloud',
214
- });
191
+ // Controlled theme
192
+ <ImageUploader
193
+ images={images}
194
+ setImages={setImages}
195
+ theme="dark"
196
+ showThemeToggle={false}
197
+ />
198
+
199
+ // Uncontrolled theme (with toggle)
200
+ <ImageUploader
201
+ images={images}
202
+ setImages={setImages}
203
+ showThemeToggle={true}
204
+ />
215
205
  ```
216
206
 
217
- ### `uploadImagesToImageBB(images, apiKey)`
207
+ ## Animations
218
208
 
219
- Upload to ImgBB (shorthand).
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
220
215
 
221
- ```tsx
222
- const { urls } = await uploadImagesToImageBB(images, 'api-key');
223
- ```
216
+ ## Accessibility
224
217
 
225
- ### `uploadImagesToCloudinary(files, config, options?)`
218
+ - Keyboard accessible (Enter/Space to upload)
219
+ - Focus indicators on drag area
220
+ - ARIA-compatible markup
221
+ - Screen reader friendly
226
222
 
227
- Upload to Cloudinary (shorthand).
223
+ ## Responsive Design
224
+
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
228
231
 
229
232
  ```tsx
230
- const results = await uploadImagesToCloudinary(images, {
231
- cloudName: 'your-cloud',
232
- uploadPreset: 'your-preset',
233
+ import {
234
+ uploadImage,
235
+ uploadImages,
236
+ uploadImagesToImageBB,
237
+ uploadImagesToCloudinary
238
+ } from "ultra-image-uploader";
239
+
240
+ // Upload with progress
241
+ const result = await uploadImage(file, 'imgbb', { apiKey }, {
242
+ onProgress: (p) => console.log(p.percentage)
243
+ });
244
+
245
+ // Multiple uploads
246
+ const results = await uploadImages(files, 'cloudinary', {
247
+ cloudName: 'your-cloud'
233
248
  });
234
249
  ```
235
250
 
236
- ## Get API Keys
251
+ ## API Configuration
237
252
 
238
253
  ### ImgBB
239
- 1. Go to [imgbb.com/settings/api](https://imgbb.com/settings/api)
240
- 2. Copy your API key
254
+ 1. Get API key from [imgbb.com/settings/api](https://imgbb.com/settings/api)
255
+ 2. Use `{ provider: 'imgbb', config: { apiKey } }`
241
256
 
242
257
  ### Cloudinary
243
258
  1. Sign up at [cloudinary.com](https://cloudinary.com)
244
- 2. Get your cloud name from dashboard
245
- 3. Create upload preset (Settings Upload)
259
+ 2. Get cloud name and create upload preset
260
+ 3. Use `{ provider: 'cloudinary', config: { cloudName, uploadPreset } }`
246
261
 
247
- ## TypeScript
262
+ ## Customization
248
263
 
249
- All types are exported:
264
+ ### Card Styling
250
265
 
251
266
  ```tsx
252
- import type {
253
- UploadProvider,
254
- UploadResult,
255
- ThemeConfig,
256
- ImageUploaderProps,
257
- FileValidationOptions,
258
- // ... more
259
- } from "ultra-image-uploader";
267
+ <ImageUploader
268
+ images={images}
269
+ setImages={setImages}
270
+ cardClassName="border-2 border-purple-500"
271
+ />
260
272
  ```
261
273
 
262
- ## Examples
263
-
264
- ### Profile Picture
274
+ ### Container Size
265
275
 
266
276
  ```tsx
267
277
  <ImageUploader
268
- images={avatar}
269
- setImages={setAvatar}
270
- multiple={false}
271
- maxSize={2 * 1024 * 1024}
272
- theme="modern"
278
+ images={images}
279
+ setImages={setImages}
280
+ containerClassName="max-w-7xl mx-auto"
273
281
  />
274
282
  ```
275
283
 
276
- ### Product Gallery
284
+ ### Grid Columns
277
285
 
278
286
  ```tsx
279
- <ImageUploader
280
- images={products}
281
- setImages={setProducts}
282
- multiple
283
- mode="update"
284
- defaultImages={existingImages}
285
- allowedTypes={['image/jpeg', 'image/webp']}
286
- theme="ocean"
287
- />
287
+ // 2 columns
288
+ <ImageUploader gridCols={2} />
289
+
290
+ // 6 columns
291
+ <ImageUploader gridCols={6} />
288
292
  ```
289
293
 
290
- ### Custom Colors
294
+ ## TypeScript
295
+
296
+ Full TypeScript support:
291
297
 
292
298
  ```tsx
293
- <ImageUploader
294
- images={images}
295
- setImages={setImages}
296
- theme={{
297
- primary: '#00d9ff',
298
- background: '#0a0a0a',
299
- border: '#333',
300
- text: '#fff',
301
- textSecondary: '#999',
302
- error: '#ff4757',
303
- success: '#2ed573',
304
- radius: '16px',
305
- }}
306
- />
299
+ import type { ImageUploaderProps } from "ultra-image-uploader";
307
300
  ```
308
301
 
302
+ ## Browser Support
303
+
304
+ - Chrome/Edge (latest)
305
+ - Firefox (latest)
306
+ - Safari (latest)
307
+ - Mobile browsers
308
+
309
+ ## Troubleshooting
310
+
311
+ ### Auto imports not working
312
+ - Restart TypeScript server in your editor
313
+ - Ensure `node_modules` exists
314
+
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
322
+
309
323
  ## License
310
324
 
311
325
  MIT © Digontha Das
@@ -1,27 +1,29 @@
1
- import type { UploadProvider, ProviderConfig, ThemeConfig } from '../types';
2
- export declare const themes: Record<string, ThemeConfig>;
1
+ import type { UploadProvider, ProviderConfig } from '../types';
3
2
  export interface ImageUploaderProps {
4
3
  images: File[];
5
4
  setImages: (images: File[]) => void;
6
- mode?: 'add' | 'update';
7
- defaultImages?: string[];
8
5
  multiple?: boolean;
9
- theme?: keyof typeof themes | ThemeConfig;
10
- uploadText?: string;
11
6
  maxSize?: number;
12
7
  allowedTypes?: string[];
13
- showFileSize?: boolean;
14
- dragAndDrop?: boolean;
15
- previewWidth?: number;
16
- previewHeight?: number;
8
+ maxImages?: number;
17
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;
20
+ onUploadComplete?: (urls: string[]) => void;
21
+ onUploadError?: (error: Error) => void;
18
22
  autoUpload?: boolean;
19
23
  uploadConfig?: {
20
24
  provider: UploadProvider;
21
25
  config: ProviderConfig;
22
26
  };
23
- onUploadComplete?: (urls: string[]) => void;
24
- onUploadError?: (error: Error) => void;
25
27
  }
26
- export declare function ImageUploader({ images, setImages, mode, defaultImages, multiple, theme, uploadText, maxSize, allowedTypes, showFileSize, dragAndDrop, previewWidth, previewHeight, className, autoUpload, uploadConfig, onUploadComplete, onUploadError, }: 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;
27
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,WAAW,EAAE,MAAM,UAAU,CAAC;AAK5E,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAmD9C,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,IAAI,EAAE,CAAC;IACf,SAAS,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACpC,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,OAAO,MAAM,GAAG,WAAW,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE;QACb,QAAQ,EAAE,cAAc,CAAC;QACzB,MAAM,EAAE,cAAc,CAAC;KACxB,CAAC;IACF,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC5C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACxC;AAMD,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,SAAS,EACT,IAAY,EACZ,aAAkB,EAClB,QAAgB,EAChB,KAAe,EACf,UAAkD,EAClD,OAA0B,EAC1B,YAAkF,EAClF,YAAmB,EACnB,WAAkB,EAClB,YAAkB,EAClB,aAAmB,EACnB,SAAc,EACd,UAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,aAAa,GACd,EAAE,kBAAkB,2CAqTpB"}
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,73 +1,41 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
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, Image as ImageIcon, AlertCircle, 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
- // Theme presets
8
- export const themes = {
9
- light: {
10
- primary: '#6366f1',
11
- background: '#ffffff',
12
- border: '#e5e7eb',
13
- text: '#1f2937',
14
- textSecondary: '#6b7280',
15
- error: '#ef4444',
16
- success: '#10b981',
17
- radius: '12px',
18
- },
19
- dark: {
20
- primary: '#8b5cf6',
21
- background: '#1f2937',
22
- border: '#374151',
23
- text: '#f9fafb',
24
- textSecondary: '#9ca3af',
25
- error: '#f87171',
26
- success: '#34d399',
27
- radius: '12px',
28
- },
29
- modern: {
30
- primary: '#ec4899',
31
- background: '#fdf2f8',
32
- border: '#f9a8d4',
33
- text: '#831843',
34
- textSecondary: '#9d174d',
35
- error: '#dc2626',
36
- success: '#059669',
37
- radius: '16px',
38
- },
39
- ocean: {
40
- primary: '#0891b2',
41
- background: '#ecfeff',
42
- border: '#a5f3fc',
43
- text: '#164e63',
44
- textSecondary: '#155e75',
45
- error: '#dc2626',
46
- success: '#059669',
47
- radius: '14px',
48
- },
49
- sunset: {
50
- primary: '#f97316',
51
- background: '#fff7ed',
52
- border: '#fdba74',
53
- text: '#7c2d12',
54
- textSecondary: '#9a3412',
55
- error: '#dc2626',
56
- success: '#059669',
57
- radius: '12px',
58
- },
59
- };
60
- export function ImageUploader({ images, setImages, mode = 'add', defaultImages = [], multiple = false, theme = 'light', uploadText = 'Drop images here or click to browse', maxSize = 10 * 1024 * 1024, allowedTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/webp', 'image/gif'], showFileSize = true, dragAndDrop = true, previewWidth = 140, previewHeight = 140, className = '', autoUpload = false, uploadConfig, onUploadComplete, onUploadError, }) {
61
- const [removedDefaults, setRemovedDefaults] = useState([]);
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');
62
9
  const [isDragging, setIsDragging] = useState(false);
63
- const [progress, setProgress] = useState({});
10
+ const [fileStates, setFileStates] = useState(new Map());
64
11
  const [uploading, setUploading] = useState(false);
65
- const [errors, setErrors] = useState([]);
12
+ const [draggedIndex, setDraggedIndex] = useState(null);
66
13
  const fileInputRef = useRef(null);
67
14
  const dragCounter = useRef(0);
68
- const currentTheme = typeof theme === 'string' ? themes[theme] : theme;
69
- const mergedTheme = { ...themes.light, ...currentTheme };
70
- // Auto-upload effect
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
23
+ useEffect(() => {
24
+ const newStates = new Map();
25
+ images.forEach((file) => {
26
+ const key = `${file.name}-${file.size}`;
27
+ const existing = fileStates.get(key);
28
+ if (existing?.preview) {
29
+ newStates.set(key, existing);
30
+ }
31
+ else {
32
+ const preview = isImageFile(file) ? URL.createObjectURL(file) : undefined;
33
+ newStates.set(key, { ...file, progress: 0, status: 'pending', preview });
34
+ }
35
+ });
36
+ setFileStates(newStates);
37
+ }, [images]);
38
+ // Auto upload effect
71
39
  useEffect(() => {
72
40
  if (autoUpload && uploadConfig && images.length > 0 && !uploading) {
73
41
  handleAutoUpload();
@@ -78,11 +46,35 @@ export function ImageUploader({ images, setImages, mode = 'add', defaultImages =
78
46
  return;
79
47
  setUploading(true);
80
48
  try {
81
- const results = await Promise.all(images.map((file) => uploadImage(file, uploadConfig.provider, uploadConfig.config, {
82
- onProgress: (p) => {
83
- setProgress((prev) => ({ ...prev, [file.name]: p.percentage }));
84
- },
85
- })));
49
+ const results = await Promise.all(images.map(async (file) => {
50
+ const key = `${file.name}-${file.size}`;
51
+ setFileStates((prev) => {
52
+ const next = new Map(prev);
53
+ next.set(key, { ...file, progress: 0, status: 'uploading' });
54
+ return next;
55
+ });
56
+ const result = await uploadImage(file, uploadConfig.provider, uploadConfig.config, {
57
+ onProgress: (p) => {
58
+ setFileStates((prev) => {
59
+ const next = new Map(prev);
60
+ const current = next.get(key);
61
+ if (current) {
62
+ next.set(key, { ...current, progress: p.percentage });
63
+ }
64
+ return next;
65
+ });
66
+ },
67
+ });
68
+ setFileStates((prev) => {
69
+ const next = new Map(prev);
70
+ const current = next.get(key);
71
+ if (current) {
72
+ next.set(key, { ...current, progress: 100, status: 'done' });
73
+ }
74
+ return next;
75
+ });
76
+ return result;
77
+ }));
86
78
  const urls = results.map((r) => r.url);
87
79
  onUploadComplete?.(urls);
88
80
  }
@@ -92,42 +84,37 @@ export function ImageUploader({ images, setImages, mode = 'add', defaultImages =
92
84
  }
93
85
  finally {
94
86
  setUploading(false);
95
- setProgress({});
96
87
  }
97
88
  };
98
89
  const validateFiles = useCallback((files) => {
99
90
  const valid = [];
100
91
  const invalid = [];
101
92
  Array.from(files).forEach((file) => {
102
- if (!isImageFile(file)) {
103
- invalid.push({ ...file, error: 'Not an image file' });
93
+ if (!isImageFile(file) && !allowedTypes.includes(file.type)) {
94
+ invalid.push(file);
104
95
  return;
105
96
  }
106
97
  if (file.size > maxSize) {
107
- invalid.push({ ...file, error: `File too large (max ${formatFileSize(maxSize)})` });
98
+ invalid.push(file);
108
99
  return;
109
100
  }
110
- if (!allowedTypes.includes(file.type)) {
111
- invalid.push({ ...file, error: 'File type not allowed' });
101
+ if (maxImages && images.length + valid.length >= maxImages) {
112
102
  return;
113
103
  }
114
104
  valid.push(file);
115
105
  });
116
106
  return { valid, invalid };
117
- }, [maxSize, allowedTypes]);
107
+ }, [maxSize, allowedTypes, maxImages, images.length]);
118
108
  const handleFiles = useCallback((files) => {
119
- const { valid, invalid } = validateFiles(files);
120
- if (invalid.length > 0) {
121
- setErrors((prev) => [...prev, ...invalid]);
122
- }
109
+ const { valid } = validateFiles(files);
123
110
  if (valid.length === 0)
124
111
  return;
125
112
  if (!multiple && valid.length > 1) {
126
- alert('Only one image allowed');
113
+ alert('Only one file allowed');
127
114
  return;
128
115
  }
129
116
  setImages(multiple ? [...images, ...valid] : [valid[0]]);
130
- }, [images, multiple, setImages, validateFiles]);
117
+ }, [images, multiple, setImages, validateFiles, maxImages]);
131
118
  const handleChange = (e) => {
132
119
  if (e.target.files?.length) {
133
120
  handleFiles(e.target.files);
@@ -135,8 +122,6 @@ export function ImageUploader({ images, setImages, mode = 'add', defaultImages =
135
122
  }
136
123
  };
137
124
  const handleDragEnter = (e) => {
138
- if (!dragAndDrop)
139
- return;
140
125
  e.preventDefault();
141
126
  e.stopPropagation();
142
127
  dragCounter.current++;
@@ -144,8 +129,6 @@ export function ImageUploader({ images, setImages, mode = 'add', defaultImages =
144
129
  setIsDragging(true);
145
130
  };
146
131
  const handleDragLeave = (e) => {
147
- if (!dragAndDrop)
148
- return;
149
132
  e.preventDefault();
150
133
  e.stopPropagation();
151
134
  dragCounter.current--;
@@ -153,13 +136,9 @@ export function ImageUploader({ images, setImages, mode = 'add', defaultImages =
153
136
  setIsDragging(false);
154
137
  };
155
138
  const handleDragOver = (e) => {
156
- if (!dragAndDrop)
157
- return;
158
139
  e.preventDefault();
159
140
  };
160
141
  const handleDrop = (e) => {
161
- if (!dragAndDrop)
162
- return;
163
142
  e.preventDefault();
164
143
  e.stopPropagation();
165
144
  setIsDragging(false);
@@ -168,40 +147,80 @@ export function ImageUploader({ images, setImages, mode = 'add', defaultImages =
168
147
  handleFiles(e.dataTransfer.files);
169
148
  }
170
149
  };
171
- const removeImage = (index) => {
150
+ const removeFile = (index) => {
172
151
  setImages(images.filter((_, i) => i !== index));
173
152
  };
174
- const removeDefault = (index) => {
175
- setRemovedDefaults((prev) => [...prev, index]);
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);
176
178
  };
177
- const dismissError = (index) => {
178
- setErrors((prev) => prev.filter((_, i) => i !== index));
179
+ const getFileState = (file) => {
180
+ const key = `${file.name}-${file.size}`;
181
+ return fileStates.get(key) || { ...file, progress: 0, status: 'pending' };
179
182
  };
180
- return (_jsxs("div", { className: `image-uploader ${className}`, children: [errors.length > 0 && (_jsx("div", { className: "space-y-2 mb-4", children: errors.map((file, i) => (_jsxs("div", { className: "flex items-center gap-2 p-3 rounded-lg", style: {
181
- backgroundColor: `${mergedTheme.error}15`,
182
- border: `1px solid ${mergedTheme.error}40`,
183
- }, children: [_jsx(AlertCircle, { size: 18, style: { color: mergedTheme.error, flexShrink: 0 } }), _jsxs("span", { className: "text-sm flex-1", style: { color: mergedTheme.text }, children: [_jsx("strong", { children: file.name }), ": ", file.error] }), _jsx("button", { onClick: () => dismissError(i), className: "p-1 hover:opacity-70", style: { color: mergedTheme.textSecondary }, children: _jsx(X, { size: 16 }) })] }, i))) })), _jsxs("div", { className: "relative h-44 w-full flex flex-col items-center justify-center text-center cursor-pointer transition-all duration-300", style: {
184
- backgroundColor: isDragging ? `${mergedTheme.primary}10` : mergedTheme.background,
185
- border: `2px dashed ${isDragging ? mergedTheme.primary : mergedTheme.border}`,
186
- borderRadius: mergedTheme.radius,
187
- transform: isDragging ? 'scale(1.01)' : 'scale(1)',
188
- }, onClick: () => fileInputRef.current?.click(), onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, children: [_jsx("div", { className: "p-3 rounded-full mb-3", style: { backgroundColor: `${mergedTheme.primary}15` }, children: uploading ? (_jsx(Loader2, { size: 32, className: "animate-spin", style: { color: mergedTheme.primary } })) : (_jsx(Upload, { size: 32, style: { color: mergedTheme.primary } })) }), _jsx("p", { className: "font-semibold mb-1", style: { color: mergedTheme.text }, children: uploadText }), _jsxs("p", { className: "text-sm", style: { color: mergedTheme.textSecondary }, children: ["PNG, JPG, WEBP up to ", formatFileSize(maxSize)] }), uploading && (_jsx("p", { className: "text-sm mt-2", style: { color: mergedTheme.primary }, children: "Uploading..." })), _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-wrap gap-3 mt-4", children: [mode === 'update' &&
189
- defaultImages.map((url, i) => !removedDefaults.includes(i) && (_jsxs("div", { className: "relative group", style: { width: `${previewWidth}px` }, children: [_jsx("img", { src: url, alt: `Existing ${i + 1}`, className: "w-full object-cover shadow-md hover:shadow-xl transition-all duration-300", style: {
190
- height: `${previewHeight}px`,
191
- borderRadius: mergedTheme.radius,
192
- } }), _jsx("button", { onClick: () => removeDefault(i), className: "absolute -top-2 -right-2 p-1.5 rounded-full shadow-lg opacity-0 group-hover:opacity-100 transition-opacity", style: { backgroundColor: mergedTheme.error }, children: _jsx(X, { size: 14, className: "text-white" }) })] }, `default-${i}`))), images.map((file, i) => {
193
- const fileProgress = progress[file.name];
194
- return (_jsxs("div", { className: "relative group", style: { width: `${previewWidth}px` }, children: [_jsx("img", { src: URL.createObjectURL(file), alt: `Preview ${i + 1}`, className: "w-full object-cover shadow-md hover:shadow-xl transition-all duration-300", style: {
195
- height: `${previewHeight}px`,
196
- borderRadius: mergedTheme.radius,
197
- } }), fileProgress !== undefined && fileProgress < 100 && (_jsx("div", { className: "absolute inset-0 flex items-center justify-center rounded-lg", style: {
198
- backgroundColor: 'rgba(0,0,0,0.6)',
199
- borderRadius: mergedTheme.radius,
200
- }, children: _jsxs("span", { className: "text-white font-semibold text-sm", children: [fileProgress, "%"] }) })), showFileSize && (_jsx("div", { className: "absolute bottom-2 left-2 px-2 py-1 rounded text-xs font-medium", style: {
201
- backgroundColor: `${mergedTheme.background}EE`,
202
- color: mergedTheme.text,
203
- }, children: formatFileSize(file.size) })), _jsx("button", { onClick: () => removeImage(i), className: "absolute -top-2 -right-2 p-1.5 rounded-full shadow-lg opacity-0 group-hover:opacity-100 transition-opacity", style: { backgroundColor: mergedTheme.error }, children: _jsx(X, { size: 14, className: "text-white" }) })] }, i));
204
- })] }), images.length === 0 &&
205
- defaultImages.filter((_, i) => !removedDefaults.includes(i)).length === 0 && (_jsxs("div", { className: "flex items-center justify-center gap-2 py-6", style: { color: mergedTheme.textSecondary }, children: [_jsx(ImageIcon, { size: 18 }), _jsx("span", { className: "text-sm", children: "No images selected" })] }))] }));
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'] })) })] }))] }));
206
225
  }
207
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/dist/index.d.ts CHANGED
@@ -2,9 +2,8 @@
2
2
  * Ultra Image Uploader
3
3
  * Modern image upload component with ImgBB & Cloudinary support
4
4
  */
5
- export { ImageUploader, themes } from './components/ImageUploader';
5
+ export { ImageUploader } from './components/ImageUploader';
6
6
  export type { ImageUploaderProps } from './components/ImageUploader';
7
- export type { ThemeConfig } from './types';
8
7
  export { uploadImage, uploadImages, uploadImagesToImageBB, uploadImagesToCloudinary, } from './providers';
9
8
  export type { UploadProvider, UploadResult, UploadProgress, UploadOptions, ImageTransformOptions, ProviderConfig, FileValidationOptions, ValidationResult, ValidationError, } from './types';
10
9
  export { validateImageFile, validateImageDimensions, validateFileComplete, formatFileSize, isImageFile, } from './utils/validation';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG3C,OAAO,EACL,WAAW,EACX,YAAY,EACZ,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,cAAc,EACd,YAAY,EACZ,cAAc,EACd,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GAChB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,cAAc,EACd,WAAW,GACZ,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAGrE,OAAO,EACL,WAAW,EACX,YAAY,EACZ,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,cAAc,EACd,YAAY,EACZ,cAAc,EACd,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GAChB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,cAAc,EACd,WAAW,GACZ,MAAM,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * Modern image upload component with ImgBB & Cloudinary support
4
4
  */
5
5
  // Component
6
- export { ImageUploader, themes } from './components/ImageUploader';
6
+ export { ImageUploader } from './components/ImageUploader';
7
7
  // Upload functions
8
8
  export { uploadImage, uploadImages, uploadImagesToImageBB, uploadImagesToCloudinary, } from './providers';
9
9
  // Validation
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY;AACZ,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAInE,mBAAmB;AACnB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAerB,aAAa;AACb,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,cAAc,EACd,WAAW,GACZ,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY;AACZ,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,mBAAmB;AACnB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAerB,aAAa;AACb,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,cAAc,EACd,WAAW,GACZ,MAAM,oBAAoB,CAAC"}
package/package.json CHANGED
@@ -1,10 +1,18 @@
1
1
  {
2
2
  "name": "ultra-image-uploader",
3
- "version": "2.0.0",
3
+ "version": "2.0.2",
4
4
  "description": "A modern, beautiful React image upload component with ImgBB & Cloudinary support",
5
- "main": "dist/index.js",
6
- "module": "dist/index.js",
7
- "types": "dist/index.d.ts",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "require": "./dist/index.js"
13
+ },
14
+ "./package.json": "./package.json"
15
+ },
8
16
  "files": [
9
17
  "dist",
10
18
  "README.md",
@@ -29,10 +37,9 @@
29
37
  "react-component",
30
38
  "image-uploader",
31
39
  "multiple-upload",
32
- "themes",
33
- "modern-ui",
34
40
  "progress-tracking",
35
- "file-validation"
41
+ "file-validation",
42
+ "auto-imports"
36
43
  ],
37
44
  "author": "Digontha Das",
38
45
  "license": "MIT",