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 +220 -171
- package/dist/components/ImageUploader.d.ts +5 -13
- package/dist/components/ImageUploader.d.ts.map +1 -1
- package/dist/components/ImageUploader.js +70 -117
- package/dist/components/ImageUploader.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +14 -7
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
|
|
5
|
+
A modern, beautiful React image upload component with progress tracking, drag-and-drop, and multi-provider support.
|
|
6
6
|
|
|
7
7
|
[](https://www.npmjs.com/package/ultra-image-uploader)
|
|
8
8
|

|
|
9
9
|
[](https://opensource.org/licenses/MIT)
|
|
10
10
|
|
|
11
|
-
**Modern UI** • **
|
|
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
|
-
- **
|
|
20
|
-
- **
|
|
21
|
-
- **
|
|
22
|
-
- **Multiple Providers** - ImgBB
|
|
23
|
-
- **
|
|
24
|
-
- **Upload
|
|
25
|
-
- **
|
|
26
|
-
- **
|
|
27
|
-
- **
|
|
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
|
-
##
|
|
66
|
+
## Usage Examples
|
|
57
67
|
|
|
58
|
-
|
|
68
|
+
### Basic File Upload
|
|
59
69
|
|
|
60
70
|
```tsx
|
|
61
|
-
|
|
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
|
-
|
|
73
|
+
function BasicUpload() {
|
|
74
|
+
const [images, setImages] = useState<File[]>([]);
|
|
78
75
|
|
|
79
|
-
|
|
80
|
-
|
|
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
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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
|
-
|
|
96
|
+
### Upload with ImgBB
|
|
101
97
|
|
|
102
98
|
```tsx
|
|
103
|
-
import { ImageUploader
|
|
99
|
+
import { ImageUploader } from "ultra-image-uploader";
|
|
104
100
|
|
|
105
|
-
function
|
|
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
|
|
116
|
-
|
|
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
|
-
|
|
123
|
+
### Upload with Cloudinary
|
|
123
124
|
|
|
124
125
|
```tsx
|
|
125
|
-
import { ImageUploader
|
|
126
|
+
import { ImageUploader } from "ultra-image-uploader";
|
|
126
127
|
|
|
127
|
-
function
|
|
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
|
-
<
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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` | `
|
|
171
|
-
| `
|
|
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
|
-
| `
|
|
178
|
-
| `
|
|
179
|
-
| `
|
|
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
|
-
|
|
190
|
-
|
|
191
|
-
Upload a single image.
|
|
194
|
+
You can also use the upload functions directly:
|
|
192
195
|
|
|
193
196
|
```tsx
|
|
194
|
-
import {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
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
|
|
204
|
+
// Upload single image
|
|
205
|
+
const result = await uploadImage(file, 'imgbb', { apiKey: 'key' });
|
|
210
206
|
|
|
211
|
-
|
|
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
|
-
|
|
217
|
+
## API Configuration
|
|
218
218
|
|
|
219
|
-
|
|
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
|
-
|
|
226
|
+
uploadConfig={{
|
|
227
|
+
provider: 'imgbb',
|
|
228
|
+
config: { apiKey: 'your-api-key' }
|
|
229
|
+
}}
|
|
223
230
|
```
|
|
224
231
|
|
|
225
|
-
###
|
|
232
|
+
### Cloudinary
|
|
226
233
|
|
|
227
|
-
|
|
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
|
-
|
|
231
|
-
|
|
232
|
-
|
|
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
|
|
251
|
+
All exports are fully typed:
|
|
250
252
|
|
|
251
253
|
```tsx
|
|
252
254
|
import type {
|
|
255
|
+
ImageUploaderProps,
|
|
253
256
|
UploadProvider,
|
|
254
257
|
UploadResult,
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
FileValidationOptions,
|
|
258
|
-
// ... more
|
|
258
|
+
ProviderConfig,
|
|
259
|
+
UploadOptions
|
|
259
260
|
} from "ultra-image-uploader";
|
|
260
261
|
```
|
|
261
262
|
|
|
262
|
-
##
|
|
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
|
-
|
|
275
|
+
The component uses Tailwind CSS classes. You can add custom styling:
|
|
265
276
|
|
|
266
277
|
```tsx
|
|
267
278
|
<ImageUploader
|
|
268
|
-
images={
|
|
269
|
-
setImages={
|
|
270
|
-
|
|
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
|
-
###
|
|
285
|
+
### Custom Styling
|
|
286
|
+
|
|
287
|
+
For complete customization, you can wrap and override styles:
|
|
277
288
|
|
|
278
289
|
```tsx
|
|
279
|
-
<
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
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
|
-
|
|
299
|
+
## Troubleshooting
|
|
291
300
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
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
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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,
|
|
4
|
+
import { Upload, X, FileText, Loader2 } from 'lucide-react';
|
|
5
5
|
import { uploadImage } from '../providers';
|
|
6
6
|
import { isImageFile, formatFileSize } from '../utils/validation';
|
|
7
|
-
|
|
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 [
|
|
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
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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) =>
|
|
82
|
-
|
|
83
|
-
|
|
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(
|
|
83
|
+
invalid.push(file);
|
|
104
84
|
return;
|
|
105
85
|
}
|
|
106
86
|
if (file.size > maxSize) {
|
|
107
|
-
invalid.push(
|
|
87
|
+
invalid.push(file);
|
|
108
88
|
return;
|
|
109
89
|
}
|
|
110
90
|
if (!allowedTypes.includes(file.type)) {
|
|
111
|
-
invalid.push(
|
|
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
|
|
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
|
|
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
|
|
172
|
-
setImages(images.filter((
|
|
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
|
|
178
|
-
|
|
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: [
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
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
|
|
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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,
|
|
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
|
|
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,
|
|
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.
|
|
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",
|