ultra-image-uploader 2.0.0 → 2.0.1

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, beautiful React image upload component with progress tracking, drag-and-drop, and multi-provider support.
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** • **Progress Bars** • **ImgBB & Cloudinary** • **Auto Import Ready**
12
12
 
13
13
  </div>
14
14
 
@@ -16,21 +16,32 @@ 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
22
- - **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
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
29
28
 
30
29
  ## Installation
31
30
 
31
+ Install with any package manager:
32
+
32
33
  ```bash
34
+ # npm
33
35
  npm install ultra-image-uploader
36
+
37
+ # yarn
38
+ yarn add ultra-image-uploader
39
+
40
+ # pnpm
41
+ pnpm add ultra-image-uploader
42
+
43
+ # bun
44
+ bun add ultra-image-uploader
34
45
  ```
35
46
 
36
47
  ## Quick Start
@@ -47,104 +58,97 @@ function App() {
47
58
  images={images}
48
59
  setImages={setImages}
49
60
  multiple
50
- theme="light"
51
61
  />
52
62
  );
53
63
  }
54
64
  ```
55
65
 
56
- ## Themes
66
+ ## Usage Examples
57
67
 
58
- Choose from 5 beautiful themes:
68
+ ### Basic File Upload
59
69
 
60
70
  ```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} />
69
-
70
- // Ocean (cyan)
71
- <ImageUploader theme="ocean" images={images} setImages={setImages} />
72
-
73
- // Sunset (orange)
74
- <ImageUploader theme="sunset" images={images} setImages={setImages} />
75
- ```
71
+ import { ImageUploader } from "ultra-image-uploader";
76
72
 
77
- ## Custom Theme
73
+ function BasicUpload() {
74
+ const [images, setImages] = useState<File[]>([]);
78
75
 
79
- ```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
- };
76
+ const handleUploadComplete = (urls: string[]) => {
77
+ console.log('Uploaded URLs:', urls);
78
+ };
92
79
 
93
- <ImageUploader
94
- images={images}
95
- setImages={setImages}
96
- theme={customTheme}
97
- />
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
+ }
98
94
  ```
99
95
 
100
- ## Upload to ImgBB
96
+ ### Upload with ImgBB
101
97
 
102
98
  ```tsx
103
- import { ImageUploader, uploadImagesToImageBB } from "ultra-image-uploader";
99
+ import { ImageUploader } from "ultra-image-uploader";
104
100
 
105
- function UploadToImgBB() {
101
+ function ImgBBUpload() {
106
102
  const [images, setImages] = useState<File[]>([]);
107
103
 
108
- const handleUpload = async () => {
109
- const result = await uploadImagesToImageBB(images, 'YOUR_API_KEY');
110
- console.log('Uploaded:', result.urls);
111
- };
112
-
113
104
  return (
114
105
  <div>
115
- <ImageUploader images={images} setImages={setImages} multiple />
116
- <button onClick={handleUpload}>Upload</button>
106
+ <ImageUploader
107
+ images={images}
108
+ setImages={setImages}
109
+ 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
+ }}
117
+ />
117
118
  </div>
118
119
  );
119
120
  }
120
121
  ```
121
122
 
122
- ## Upload to Cloudinary
123
+ ### Upload with Cloudinary
123
124
 
124
125
  ```tsx
125
- import { ImageUploader, uploadImagesToCloudinary } from "ultra-image-uploader";
126
+ import { ImageUploader } from "ultra-image-uploader";
126
127
 
127
- function UploadToCloudinary() {
128
+ function CloudinaryUpload() {
128
129
  const [images, setImages] = useState<File[]>([]);
129
130
 
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
131
  return (
139
- <div>
140
- <ImageUploader images={images} setImages={setImages} multiple theme="dark" />
141
- <button onClick={handleUpload}>Upload</button>
142
- </div>
132
+ <ImageUploader
133
+ images={images}
134
+ setImages={setImages}
135
+ multiple
136
+ uploadConfig={{
137
+ provider: 'cloudinary',
138
+ config: {
139
+ cloudName: 'your-cloud-name',
140
+ uploadPreset: 'your-upload-preset'
141
+ }
142
+ }}
143
+ onUploadComplete={(urls) => {
144
+ console.log('Images uploaded to Cloudinary:', urls);
145
+ }}
146
+ />
143
147
  );
144
148
  }
145
149
  ```
146
150
 
147
- ## Auto Upload Mode
151
+ ### Auto Upload Mode
148
152
 
149
153
  ```tsx
150
154
  <ImageUploader
@@ -154,158 +158,194 @@ function UploadToCloudinary() {
154
158
  autoUpload
155
159
  uploadConfig={{
156
160
  provider: 'imgbb',
157
- config: { apiKey: 'your-api-key' },
161
+ config: { apiKey: 'your-api-key' }
158
162
  }}
159
- onUploadComplete={(urls) => console.log('Done!', urls)}
160
- onUploadError={(error) => console.error('Error:', error)}
161
163
  />
162
164
  ```
163
165
 
164
- ## Props
166
+ ### Single File Upload
167
+
168
+ ```tsx
169
+ <ImageUploader
170
+ images={avatar}
171
+ setImages={setAvatar}
172
+ multiple={false}
173
+ maxSize={2 * 1024 * 1024} // 2MB
174
+ />
175
+ ```
176
+
177
+ ## Component Props
165
178
 
166
179
  | Prop | Type | Default | Description |
167
180
  |------|------|---------|-------------|
168
181
  | `images` | `File[]` | **Required** | Selected image files |
169
182
  | `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) |
183
+ | `multiple` | `boolean` | `true` | Allow multiple file selection |
184
+ | `maxSize` | `number` | `52428800` | Max file size in bytes (50MB) |
176
185
  | `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 |
186
+ | `className` | `string` | `''` | Extra CSS classes |
187
+ | `autoUpload` | `boolean` | `false` | Auto-upload on selection |
188
+ | `uploadConfig` | `{ provider, config }` | `undefined` | Upload configuration |
183
189
  | `onUploadComplete` | `(urls: string[]) => void` | `undefined` | Upload success callback |
184
190
  | `onUploadError` | `(error: Error) => void` | `undefined` | Upload error callback |
185
- | `className` | `string` | `''` | Extra CSS classes |
186
191
 
187
192
  ## Upload Functions
188
193
 
189
- ### `uploadImage(file, provider, config, options?)`
190
-
191
- Upload a single image.
194
+ You can also use the upload functions directly:
192
195
 
193
196
  ```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);
205
- ```
206
-
207
- ### `uploadImages(files, provider, config, options?)`
197
+ import {
198
+ uploadImage,
199
+ uploadImages,
200
+ uploadImagesToImageBB,
201
+ uploadImagesToCloudinary
202
+ } from "ultra-image-uploader";
208
203
 
209
- Upload multiple images.
204
+ // Upload single image
205
+ const result = await uploadImage(file, 'imgbb', { apiKey: 'key' });
210
206
 
211
- ```tsx
207
+ // Upload multiple images
212
208
  const results = await uploadImages(files, 'cloudinary', {
213
- cloudName: 'your-cloud',
209
+ cloudName: 'your-cloud'
214
210
  });
211
+
212
+ // Convenience functions
213
+ const { urls } = await uploadImagesToImageBB(images, apiKey);
214
+ const uploads = await uploadImagesToCloudinary(images, config);
215
215
  ```
216
216
 
217
- ### `uploadImagesToImageBB(images, apiKey)`
217
+ ## API Configuration
218
218
 
219
- Upload to ImgBB (shorthand).
219
+ ### 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:
220
224
 
221
225
  ```tsx
222
- const { urls } = await uploadImagesToImageBB(images, 'api-key');
226
+ uploadConfig={{
227
+ provider: 'imgbb',
228
+ config: { apiKey: 'your-api-key' }
229
+ }}
223
230
  ```
224
231
 
225
- ### `uploadImagesToCloudinary(files, config, options?)`
232
+ ### Cloudinary
226
233
 
227
- Upload to Cloudinary (shorthand).
234
+ 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:
228
238
 
229
239
  ```tsx
230
- const results = await uploadImagesToCloudinary(images, {
231
- cloudName: 'your-cloud',
232
- uploadPreset: 'your-preset',
233
- });
240
+ uploadConfig={{
241
+ provider: 'cloudinary',
242
+ config: {
243
+ cloudName: 'your-cloud-name',
244
+ uploadPreset: 'your-upload-preset'
245
+ }
246
+ }}
234
247
  ```
235
248
 
236
- ## Get API Keys
237
-
238
- ### ImgBB
239
- 1. Go to [imgbb.com/settings/api](https://imgbb.com/settings/api)
240
- 2. Copy your API key
241
-
242
- ### Cloudinary
243
- 1. Sign up at [cloudinary.com](https://cloudinary.com)
244
- 2. Get your cloud name from dashboard
245
- 3. Create upload preset (Settings → Upload)
246
-
247
249
  ## TypeScript
248
250
 
249
- All types are exported:
251
+ All exports are fully typed:
250
252
 
251
253
  ```tsx
252
254
  import type {
255
+ ImageUploaderProps,
253
256
  UploadProvider,
254
257
  UploadResult,
255
- ThemeConfig,
256
- ImageUploaderProps,
257
- FileValidationOptions,
258
- // ... more
258
+ ProviderConfig,
259
+ UploadOptions
259
260
  } from "ultra-image-uploader";
260
261
  ```
261
262
 
262
- ## Examples
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
263
274
 
264
- ### Profile Picture
275
+ The component uses Tailwind CSS classes. You can add custom styling:
265
276
 
266
277
  ```tsx
267
278
  <ImageUploader
268
- images={avatar}
269
- setImages={setAvatar}
270
- multiple={false}
271
- maxSize={2 * 1024 * 1024}
272
- theme="modern"
279
+ images={images}
280
+ setImages={setImages}
281
+ className="max-w-2xl mx-auto"
273
282
  />
274
283
  ```
275
284
 
276
- ### Product Gallery
285
+ ### Custom Styling
286
+
287
+ For complete customization, you can wrap and override styles:
277
288
 
278
289
  ```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
- />
290
+ <div className="your-custom-wrapper">
291
+ <ImageUploader
292
+ images={images}
293
+ setImages={setImages}
294
+ className="your-custom-class"
295
+ />
296
+ </div>
288
297
  ```
289
298
 
290
- ### Custom Colors
299
+ ## Troubleshooting
291
300
 
292
- ```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
- />
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
313
+
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
327
+ ```
328
+
329
+ ### Build issues
330
+
331
+ ```bash
332
+ # Clean and rebuild
333
+ npm run clean
334
+ npm run build
307
335
  ```
308
336
 
337
+ ## Browser Support
338
+
339
+ - Chrome/Edge (latest)
340
+ - Firefox (latest)
341
+ - Safari (latest)
342
+ - Mobile browsers (iOS Safari, Chrome Mobile)
343
+
344
+ ## Requirements
345
+
346
+ - React >= 18.0.0
347
+ - TypeScript (optional but recommended)
348
+
309
349
  ## License
310
350
 
311
351
  MIT © Digontha Das
@@ -314,7 +354,16 @@ MIT © Digontha Das
314
354
 
315
355
  - [GitHub](https://github.com/digontha/ultra-image-uploader)
316
356
  - [NPM](https://www.npmjs.com/package/ultra-image-uploader)
317
- - [Issues](https://github.com/digontha/ultra-image-uploader/issues)
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
318
367
 
319
368
  ---
320
369
 
@@ -1,27 +1,19 @@
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
+ uploadText?: string;
17
9
  className?: string;
10
+ onUploadComplete?: (urls: string[]) => void;
11
+ onUploadError?: (error: Error) => void;
18
12
  autoUpload?: boolean;
19
13
  uploadConfig?: {
20
14
  provider: UploadProvider;
21
15
  config: ProviderConfig;
22
16
  };
23
- onUploadComplete?: (urls: string[]) => void;
24
- onUploadError?: (error: Error) => void;
25
17
  }
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;
18
+ export declare function ImageUploader({ images, setImages, multiple, maxSize, allowedTypes, className, onUploadComplete, onUploadError, autoUpload, uploadConfig, }: ImageUploaderProps): import("react/jsx-runtime").JSX.Element;
27
19
  //# 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,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,73 +1,30 @@
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, FileText, Loader2 } 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'], className = '', onUploadComplete, onUploadError, autoUpload = false, uploadConfig, }) {
62
8
  const [isDragging, setIsDragging] = useState(false);
63
- const [progress, setProgress] = useState({});
9
+ const [fileStates, setFileStates] = useState(new Map());
64
10
  const [uploading, setUploading] = useState(false);
65
- const [errors, setErrors] = useState([]);
66
11
  const fileInputRef = useRef(null);
67
12
  const dragCounter = useRef(0);
68
- const currentTheme = typeof theme === 'string' ? themes[theme] : theme;
69
- const mergedTheme = { ...themes.light, ...currentTheme };
70
- // Auto-upload effect
13
+ // Initialize file states
14
+ useEffect(() => {
15
+ const newStates = new Map();
16
+ images.forEach((file) => {
17
+ const key = `${file.name}-${file.size}`;
18
+ if (!fileStates.has(key)) {
19
+ newStates.set(key, { ...file, progress: 0, status: 'pending' });
20
+ }
21
+ else {
22
+ newStates.set(key, fileStates.get(key));
23
+ }
24
+ });
25
+ setFileStates(newStates);
26
+ }, [images]);
27
+ // Auto upload effect
71
28
  useEffect(() => {
72
29
  if (autoUpload && uploadConfig && images.length > 0 && !uploading) {
73
30
  handleAutoUpload();
@@ -78,11 +35,35 @@ export function ImageUploader({ images, setImages, mode = 'add', defaultImages =
78
35
  return;
79
36
  setUploading(true);
80
37
  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
- })));
38
+ const results = await Promise.all(images.map(async (file) => {
39
+ const key = `${file.name}-${file.size}`;
40
+ setFileStates((prev) => {
41
+ const next = new Map(prev);
42
+ next.set(key, { ...file, progress: 0, status: 'uploading' });
43
+ return next;
44
+ });
45
+ const result = await uploadImage(file, uploadConfig.provider, uploadConfig.config, {
46
+ onProgress: (p) => {
47
+ setFileStates((prev) => {
48
+ const next = new Map(prev);
49
+ const current = next.get(key);
50
+ if (current) {
51
+ next.set(key, { ...current, progress: p.percentage });
52
+ }
53
+ return next;
54
+ });
55
+ },
56
+ });
57
+ setFileStates((prev) => {
58
+ const next = new Map(prev);
59
+ const current = next.get(key);
60
+ if (current) {
61
+ next.set(key, { ...current, progress: 100, status: 'done' });
62
+ }
63
+ return next;
64
+ });
65
+ return result;
66
+ }));
86
67
  const urls = results.map((r) => r.url);
87
68
  onUploadComplete?.(urls);
88
69
  }
@@ -92,7 +73,6 @@ export function ImageUploader({ images, setImages, mode = 'add', defaultImages =
92
73
  }
93
74
  finally {
94
75
  setUploading(false);
95
- setProgress({});
96
76
  }
97
77
  };
98
78
  const validateFiles = useCallback((files) => {
@@ -100,15 +80,15 @@ export function ImageUploader({ images, setImages, mode = 'add', defaultImages =
100
80
  const invalid = [];
101
81
  Array.from(files).forEach((file) => {
102
82
  if (!isImageFile(file)) {
103
- invalid.push({ ...file, error: 'Not an image file' });
83
+ invalid.push(file);
104
84
  return;
105
85
  }
106
86
  if (file.size > maxSize) {
107
- invalid.push({ ...file, error: `File too large (max ${formatFileSize(maxSize)})` });
87
+ invalid.push(file);
108
88
  return;
109
89
  }
110
90
  if (!allowedTypes.includes(file.type)) {
111
- invalid.push({ ...file, error: 'File type not allowed' });
91
+ invalid.push(file);
112
92
  return;
113
93
  }
114
94
  valid.push(file);
@@ -116,14 +96,11 @@ export function ImageUploader({ images, setImages, mode = 'add', defaultImages =
116
96
  return { valid, invalid };
117
97
  }, [maxSize, allowedTypes]);
118
98
  const handleFiles = useCallback((files) => {
119
- const { valid, invalid } = validateFiles(files);
120
- if (invalid.length > 0) {
121
- setErrors((prev) => [...prev, ...invalid]);
122
- }
99
+ const { valid } = validateFiles(files);
123
100
  if (valid.length === 0)
124
101
  return;
125
102
  if (!multiple && valid.length > 1) {
126
- alert('Only one image allowed');
103
+ alert('Only one file allowed');
127
104
  return;
128
105
  }
129
106
  setImages(multiple ? [...images, ...valid] : [valid[0]]);
@@ -135,8 +112,6 @@ export function ImageUploader({ images, setImages, mode = 'add', defaultImages =
135
112
  }
136
113
  };
137
114
  const handleDragEnter = (e) => {
138
- if (!dragAndDrop)
139
- return;
140
115
  e.preventDefault();
141
116
  e.stopPropagation();
142
117
  dragCounter.current++;
@@ -144,8 +119,6 @@ export function ImageUploader({ images, setImages, mode = 'add', defaultImages =
144
119
  setIsDragging(true);
145
120
  };
146
121
  const handleDragLeave = (e) => {
147
- if (!dragAndDrop)
148
- return;
149
122
  e.preventDefault();
150
123
  e.stopPropagation();
151
124
  dragCounter.current--;
@@ -153,13 +126,9 @@ export function ImageUploader({ images, setImages, mode = 'add', defaultImages =
153
126
  setIsDragging(false);
154
127
  };
155
128
  const handleDragOver = (e) => {
156
- if (!dragAndDrop)
157
- return;
158
129
  e.preventDefault();
159
130
  };
160
131
  const handleDrop = (e) => {
161
- if (!dragAndDrop)
162
- return;
163
132
  e.preventDefault();
164
133
  e.stopPropagation();
165
134
  setIsDragging(false);
@@ -168,40 +137,24 @@ export function ImageUploader({ images, setImages, mode = 'add', defaultImages =
168
137
  handleFiles(e.dataTransfer.files);
169
138
  }
170
139
  };
171
- const removeImage = (index) => {
172
- setImages(images.filter((_, i) => i !== index));
173
- };
174
- const removeDefault = (index) => {
175
- setRemovedDefaults((prev) => [...prev, index]);
140
+ const removeFile = (file) => {
141
+ setImages(images.filter((f) => f !== file));
176
142
  };
177
- const dismissError = (index) => {
178
- setErrors((prev) => prev.filter((_, i) => i !== index));
143
+ const getFileState = (file) => {
144
+ const key = `${file.name}-${file.size}`;
145
+ return fileStates.get(key) || { ...file, progress: 0, status: 'pending' };
179
146
  };
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" })] }))] }));
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') })] }))] }));
206
159
  }
207
160
  //# 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.1",
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",