ultra-image-uploader 2.0.3 → 3.0.0
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,
|
|
5
|
+
A modern, production-ready React image upload component with shadcn/ui-inspired design, beautiful themes, and smooth animations.
|
|
6
6
|
|
|
7
7
|
[](https://www.npmjs.com/package/ultra-image-uploader)
|
|
8
8
|

|
|
9
9
|
[](https://opensource.org/licenses/MIT)
|
|
10
10
|
|
|
11
|
-
**
|
|
11
|
+
**shadcn/ui Design** • **3 Themes** • **ImgBB & Cloudinary** • **Customizable**
|
|
12
12
|
|
|
13
13
|
</div>
|
|
14
14
|
|
|
@@ -16,18 +16,18 @@ A modern, fancy React image upload component with responsive grid layout, drag-a
|
|
|
16
16
|
|
|
17
17
|
## Features
|
|
18
18
|
|
|
19
|
-
- **Modern UI** -
|
|
20
|
-
- **
|
|
21
|
-
- **Drag & Drop** -
|
|
22
|
-
- **Live Previews** -
|
|
23
|
-
- **
|
|
24
|
-
- **
|
|
25
|
-
- **
|
|
26
|
-
- **Smooth Animations** - Hover effects, fade transitions, scale animations
|
|
27
|
-
- **Keyboard Accessible** - Full keyboard navigation support
|
|
28
|
-
- **File Validation** - Size and type validation
|
|
19
|
+
- **Modern UI** - Clean, minimal shadcn/ui-inspired design
|
|
20
|
+
- **3 Built-in Themes** - Nature (green), Modern (neutral), Fresh (blue)
|
|
21
|
+
- **Drag & Drop** - Beautiful drag-and-drop with smooth animations
|
|
22
|
+
- **Live Previews** - Responsive grid with image thumbnails
|
|
23
|
+
- **Progress Tracking** - Real-time upload progress with visual feedback
|
|
24
|
+
- **Remove Images** - Easy removal in both create and update modes
|
|
25
|
+
- **Custom Themes** - Create your own theme with custom colors
|
|
29
26
|
- **Multiple Providers** - ImgBB & Cloudinary support
|
|
27
|
+
- **File Validation** - Size, type, and count validation
|
|
28
|
+
- **Accessible** - Keyboard navigation and ARIA support
|
|
30
29
|
- **Auto Import** - Works with VS Code, WebStorm, and all editors
|
|
30
|
+
- **Customization API** - Border radius, preview size, show/hide elements
|
|
31
31
|
|
|
32
32
|
## Installation
|
|
33
33
|
|
|
@@ -59,7 +59,6 @@ function App() {
|
|
|
59
59
|
images={images}
|
|
60
60
|
setImages={setImages}
|
|
61
61
|
multiple
|
|
62
|
-
gridCols={4}
|
|
63
62
|
/>
|
|
64
63
|
);
|
|
65
64
|
}
|
|
@@ -69,91 +68,102 @@ function App() {
|
|
|
69
68
|
|
|
70
69
|
| Prop | Type | Default | Description |
|
|
71
70
|
|------|------|---------|-------------|
|
|
71
|
+
| **Core** |
|
|
72
72
|
| `images` | `File[]` | **Required** | Selected image files |
|
|
73
73
|
| `setImages` | `(files: File[]) => void` | **Required** | Update images state |
|
|
74
|
+
| **Mode** |
|
|
75
|
+
| `mode` | `'add' \| 'update'` | `'add'` | Upload mode |
|
|
76
|
+
| `defaultImages` | `string[]` | `[]` | Default images (update mode) |
|
|
77
|
+
| **File Constraints** |
|
|
74
78
|
| `multiple` | `boolean` | `true` | Allow multiple files |
|
|
75
79
|
| `maxSize` | `number` | `52428800` | Max file size (50MB) |
|
|
76
80
|
| `allowedTypes` | `string[]` | Image types | Allowed MIME types |
|
|
77
81
|
| `maxImages` | `number` | `20` | Maximum images allowed |
|
|
78
|
-
|
|
|
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 |
|
|
82
|
+
| **Upload** |
|
|
89
83
|
| `uploadConfig` | `{ provider, config }` | `undefined` | Upload configuration |
|
|
84
|
+
| `autoUpload` | `boolean` | `false` | Auto-upload on selection |
|
|
90
85
|
| `onUploadComplete` | `(urls: string[]) => void` | `undefined` | Success callback |
|
|
91
86
|
| `onUploadError` | `(error: Error) => void` | `undefined` | Error callback |
|
|
87
|
+
| **Theme & Styling** |
|
|
88
|
+
| `theme` | `'nature' \| 'modern' \| 'fresh'` | `'nature'` | Built-in theme |
|
|
89
|
+
| `customTheme` | `Theme` | `undefined` | Custom theme object |
|
|
90
|
+
| `showThemeSelector` | `boolean` | `false` | Show theme selector |
|
|
91
|
+
| `borderRadius` | `'none' \| 'sm' \| 'md' \| 'lg' \| 'full'` | `'md'` | Border radius |
|
|
92
|
+
| `previewSize` | `'sm' \| 'md' \| 'lg'` | `'md'` | Upload icon size |
|
|
93
|
+
| `className` | `string` | `''` | Custom class name |
|
|
94
|
+
| `containerClassName` | `string` | `'max-w-5xl mx-auto mt-10'` | Container styling |
|
|
95
|
+
| **UI Toggles** |
|
|
96
|
+
| `showImageCount` | `boolean` | `true` | Show image count badge |
|
|
97
|
+
| `showFileName` | `boolean` | `true` | Show file name under preview |
|
|
98
|
+
| `showFileSize` | `boolean` | `true` | Show file size under preview |
|
|
92
99
|
|
|
93
100
|
## Examples
|
|
94
101
|
|
|
95
|
-
### Basic
|
|
102
|
+
### Basic Usage
|
|
96
103
|
|
|
97
104
|
```tsx
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
setImages={setImages}
|
|
101
|
-
multiple
|
|
102
|
-
gridCols={4}
|
|
103
|
-
/>
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### Dark Theme
|
|
105
|
+
import { ImageUploader } from "ultra-image-uploader";
|
|
106
|
+
import { useState } from "react";
|
|
107
107
|
|
|
108
|
-
|
|
109
|
-
function DarkExample() {
|
|
110
|
-
const [theme, setTheme] = useState<'light' | 'dark'>('dark');
|
|
108
|
+
function BasicExample() {
|
|
111
109
|
const [images, setImages] = useState<File[]>([]);
|
|
112
110
|
|
|
113
111
|
return (
|
|
114
|
-
<
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
onThemeChange={setTheme}
|
|
120
|
-
multiple
|
|
121
|
-
gridCols={3}
|
|
122
|
-
/>
|
|
123
|
-
</div>
|
|
112
|
+
<ImageUploader
|
|
113
|
+
images={images}
|
|
114
|
+
setImages={setImages}
|
|
115
|
+
multiple
|
|
116
|
+
/>
|
|
124
117
|
);
|
|
125
118
|
}
|
|
126
119
|
```
|
|
127
120
|
|
|
128
|
-
###
|
|
121
|
+
### Different Themes
|
|
129
122
|
|
|
130
123
|
```tsx
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
/>
|
|
124
|
+
// Nature theme (green) - Default
|
|
125
|
+
<ImageUploader theme="nature" images={images} setImages={setImages} />
|
|
126
|
+
|
|
127
|
+
// Modern theme (neutral/monochrome)
|
|
128
|
+
<ImageUploader theme="modern" images={images} setImages={setImages} />
|
|
129
|
+
|
|
130
|
+
// Fresh theme (blue)
|
|
131
|
+
<ImageUploader theme="fresh" images={images} setImages={setImages} />
|
|
140
132
|
```
|
|
141
133
|
|
|
142
|
-
###
|
|
134
|
+
### Upload with ImgBB
|
|
143
135
|
|
|
144
136
|
```tsx
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
137
|
+
import { ImageUploader } from "ultra-image-uploader";
|
|
138
|
+
|
|
139
|
+
function ImgBBUpload() {
|
|
140
|
+
const [images, setImages] = useState<File[]>([]);
|
|
141
|
+
|
|
142
|
+
return (
|
|
143
|
+
<ImageUploader
|
|
144
|
+
images={images}
|
|
145
|
+
setImages={setImages}
|
|
146
|
+
multiple
|
|
147
|
+
theme="nature"
|
|
148
|
+
uploadConfig={{
|
|
149
|
+
provider: 'imgbb',
|
|
150
|
+
config: { apiKey: process.env.IMGBB_API_KEY! }
|
|
151
|
+
}}
|
|
152
|
+
onUploadComplete={(urls) => {
|
|
153
|
+
console.log('Uploaded URLs:', urls);
|
|
154
|
+
}}
|
|
155
|
+
onUploadError={(error) => {
|
|
156
|
+
console.error('Upload failed:', error.message);
|
|
157
|
+
}}
|
|
158
|
+
/>
|
|
159
|
+
);
|
|
160
|
+
}
|
|
151
161
|
```
|
|
152
162
|
|
|
153
|
-
###
|
|
163
|
+
### Upload with Cloudinary
|
|
154
164
|
|
|
155
165
|
```tsx
|
|
156
|
-
function
|
|
166
|
+
function CloudinaryUpload() {
|
|
157
167
|
const [images, setImages] = useState<File[]>([]);
|
|
158
168
|
|
|
159
169
|
return (
|
|
@@ -161,134 +171,271 @@ function UploadExample() {
|
|
|
161
171
|
images={images}
|
|
162
172
|
setImages={setImages}
|
|
163
173
|
multiple
|
|
164
|
-
|
|
174
|
+
theme="fresh"
|
|
165
175
|
uploadConfig={{
|
|
166
|
-
provider: '
|
|
167
|
-
config: {
|
|
176
|
+
provider: 'cloudinary',
|
|
177
|
+
config: {
|
|
178
|
+
cloudName: process.env.NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME!,
|
|
179
|
+
uploadPreset: process.env.NEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET!
|
|
180
|
+
}
|
|
168
181
|
}}
|
|
169
182
|
onUploadComplete={(urls) => {
|
|
170
|
-
console.log('Uploaded:', urls);
|
|
183
|
+
console.log('Uploaded URLs:', urls);
|
|
171
184
|
}}
|
|
172
185
|
/>
|
|
173
186
|
);
|
|
174
187
|
}
|
|
175
188
|
```
|
|
176
189
|
|
|
177
|
-
###
|
|
190
|
+
### Auto Upload
|
|
178
191
|
|
|
179
192
|
```tsx
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
193
|
+
function AutoUploadExample() {
|
|
194
|
+
const [images, setImages] = useState<File[]>([]);
|
|
195
|
+
|
|
196
|
+
return (
|
|
197
|
+
<ImageUploader
|
|
198
|
+
images={images}
|
|
199
|
+
setImages={setImages}
|
|
200
|
+
autoUpload
|
|
201
|
+
uploadConfig={{
|
|
202
|
+
provider: 'imgbb',
|
|
203
|
+
config: { apiKey: process.env.IMGBB_API_KEY! }
|
|
204
|
+
}}
|
|
205
|
+
onUploadComplete={(urls) => {
|
|
206
|
+
// Automatically upload when images are selected
|
|
207
|
+
saveUrlsToDatabase(urls);
|
|
208
|
+
}}
|
|
209
|
+
/>
|
|
210
|
+
);
|
|
211
|
+
}
|
|
184
212
|
```
|
|
185
213
|
|
|
186
|
-
|
|
214
|
+
### Update Mode (Existing Images)
|
|
215
|
+
|
|
216
|
+
```tsx
|
|
217
|
+
function UpdateExample() {
|
|
218
|
+
const [newImages, setNewImages] = useState<File[]>([]);
|
|
187
219
|
|
|
188
|
-
|
|
220
|
+
const existingImages = [
|
|
221
|
+
'https://example.com/image1.jpg',
|
|
222
|
+
'https://example.com/image2.jpg'
|
|
223
|
+
];
|
|
224
|
+
|
|
225
|
+
return (
|
|
226
|
+
<ImageUploader
|
|
227
|
+
images={newImages}
|
|
228
|
+
setImages={setNewImages}
|
|
229
|
+
mode="update"
|
|
230
|
+
defaultImages={existingImages}
|
|
231
|
+
theme="modern"
|
|
232
|
+
multiple
|
|
233
|
+
/>
|
|
234
|
+
);
|
|
235
|
+
}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Custom Theme
|
|
189
239
|
|
|
190
240
|
```tsx
|
|
191
|
-
|
|
192
|
-
<ImageUploader
|
|
193
|
-
images={images}
|
|
194
|
-
setImages={setImages}
|
|
195
|
-
theme="dark"
|
|
196
|
-
showThemeToggle={false}
|
|
197
|
-
/>
|
|
241
|
+
import { ImageUploader, type CustomTheme } from "ultra-image-uploader";
|
|
198
242
|
|
|
199
|
-
|
|
200
|
-
<
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
243
|
+
function CustomThemeExample() {
|
|
244
|
+
const [images, setImages] = useState<File[]>([]);
|
|
245
|
+
|
|
246
|
+
const customTheme: CustomTheme = {
|
|
247
|
+
name: 'MyBrand',
|
|
248
|
+
colors: {
|
|
249
|
+
primary: '#FF6B35',
|
|
250
|
+
primaryHover: '#E55A2B',
|
|
251
|
+
background: '#FFF5F0',
|
|
252
|
+
border: '#FFE5D9',
|
|
253
|
+
text: '#2D3142',
|
|
254
|
+
textSecondary: '#4F5D75',
|
|
255
|
+
cardBg: '#FFFFFF',
|
|
256
|
+
cardBorder: '#FFE5D9',
|
|
257
|
+
shadow: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',
|
|
258
|
+
},
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
return (
|
|
262
|
+
<ImageUploader
|
|
263
|
+
images={images}
|
|
264
|
+
setImages={setImages}
|
|
265
|
+
customTheme={customTheme}
|
|
266
|
+
showThemeSelector={false}
|
|
267
|
+
/>
|
|
268
|
+
);
|
|
269
|
+
}
|
|
205
270
|
```
|
|
206
271
|
|
|
207
|
-
|
|
272
|
+
### Customization Options
|
|
208
273
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
- Hover scale on image cards
|
|
213
|
-
- Smooth progress bar transitions
|
|
214
|
-
- Button hover effects
|
|
274
|
+
```tsx
|
|
275
|
+
function CustomizedExample() {
|
|
276
|
+
const [images, setImages] = useState<File[]>([]);
|
|
215
277
|
|
|
216
|
-
|
|
278
|
+
return (
|
|
279
|
+
<ImageUploader
|
|
280
|
+
images={images}
|
|
281
|
+
setImages={setImages}
|
|
282
|
+
// Border radius
|
|
283
|
+
borderRadius="lg"
|
|
284
|
+
// Preview size (affects upload icon)
|
|
285
|
+
previewSize="lg"
|
|
286
|
+
// Container width
|
|
287
|
+
containerClassName="max-w-3xl mx-auto mt-8"
|
|
288
|
+
// Show/hide elements
|
|
289
|
+
showImageCount={true}
|
|
290
|
+
showFileName={true}
|
|
291
|
+
showFileSize={true}
|
|
292
|
+
// Constraints
|
|
293
|
+
multiple={true}
|
|
294
|
+
maxImages={10}
|
|
295
|
+
maxSize={10 * 1024 * 1024} // 10MB
|
|
296
|
+
// Theme
|
|
297
|
+
theme="fresh"
|
|
298
|
+
/>
|
|
299
|
+
);
|
|
300
|
+
}
|
|
301
|
+
```
|
|
217
302
|
|
|
218
|
-
|
|
219
|
-
- Focus indicators on drag area
|
|
220
|
-
- ARIA-compatible markup
|
|
221
|
-
- Screen reader friendly
|
|
303
|
+
### Single Image Upload
|
|
222
304
|
|
|
223
|
-
|
|
305
|
+
```tsx
|
|
306
|
+
function SingleImageExample() {
|
|
307
|
+
const [avatar, setAvatar] = useState<File[]>([]);
|
|
224
308
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
309
|
+
return (
|
|
310
|
+
<ImageUploader
|
|
311
|
+
images={avatar}
|
|
312
|
+
setImages={setAvatar}
|
|
313
|
+
multiple={false}
|
|
314
|
+
maxImages={1}
|
|
315
|
+
theme="modern"
|
|
316
|
+
showImageCount={false}
|
|
317
|
+
showFileName={false}
|
|
318
|
+
showFileSize={false}
|
|
319
|
+
/>
|
|
320
|
+
);
|
|
321
|
+
}
|
|
322
|
+
```
|
|
229
323
|
|
|
230
|
-
|
|
324
|
+
### Product Gallery
|
|
231
325
|
|
|
232
326
|
```tsx
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
}
|
|
327
|
+
function ProductGallery() {
|
|
328
|
+
const [productImages, setProductImages] = useState<File[]>([]);
|
|
329
|
+
|
|
330
|
+
const handleUploadComplete = async (urls: string[]) => {
|
|
331
|
+
// Save to database
|
|
332
|
+
await fetch('/api/products/images', {
|
|
333
|
+
method: 'POST',
|
|
334
|
+
headers: { 'Content-Type': 'application/json' },
|
|
335
|
+
body: JSON.stringify({ images: urls }),
|
|
336
|
+
});
|
|
337
|
+
};
|
|
338
|
+
|
|
339
|
+
return (
|
|
340
|
+
<ImageUploader
|
|
341
|
+
images={productImages}
|
|
342
|
+
setImages={setProductImages}
|
|
343
|
+
multiple={true}
|
|
344
|
+
maxImages={8}
|
|
345
|
+
maxSize={5 * 1024 * 1024} // 5MB
|
|
346
|
+
theme="nature"
|
|
347
|
+
borderRadius="lg"
|
|
348
|
+
uploadConfig={{
|
|
349
|
+
provider: 'cloudinary',
|
|
350
|
+
config: {
|
|
351
|
+
cloudName: process.env.CLOUDINARY_CLOUD_NAME!,
|
|
352
|
+
uploadPreset: 'products'
|
|
353
|
+
}
|
|
354
|
+
}}
|
|
355
|
+
onUploadComplete={handleUploadComplete}
|
|
356
|
+
/>
|
|
357
|
+
);
|
|
358
|
+
}
|
|
249
359
|
```
|
|
250
360
|
|
|
251
|
-
##
|
|
361
|
+
## Built-in Themes
|
|
252
362
|
|
|
253
|
-
###
|
|
254
|
-
|
|
255
|
-
|
|
363
|
+
### Nature (Green)
|
|
364
|
+
- Soft greens with organic feel
|
|
365
|
+
- Primary: `#16a34a`
|
|
366
|
+
- Background: `#f0fdf4`
|
|
367
|
+
- Perfect for: Nature, health, eco-friendly apps
|
|
256
368
|
|
|
257
|
-
###
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
369
|
+
### Modern (Neutral)
|
|
370
|
+
- Clean monochrome design
|
|
371
|
+
- Primary: `#09090b`
|
|
372
|
+
- Background: `#fafafa`
|
|
373
|
+
- Perfect for: Professional apps, portfolios, dashboards
|
|
374
|
+
|
|
375
|
+
### Fresh (Blue)
|
|
376
|
+
- Light blue airy design
|
|
377
|
+
- Primary: `#0284c7`
|
|
378
|
+
- Background: `#f0f9ff`
|
|
379
|
+
- Perfect for: Social apps, SaaS, modern web apps
|
|
261
380
|
|
|
262
381
|
## Customization
|
|
263
382
|
|
|
264
|
-
###
|
|
383
|
+
### Border Radius Options
|
|
265
384
|
|
|
266
385
|
```tsx
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
386
|
+
borderRadius="none" // 0
|
|
387
|
+
borderRadius="sm" // 0.25rem
|
|
388
|
+
borderRadius="md" // 0.375rem (default)
|
|
389
|
+
borderRadius="lg" // 0.5rem
|
|
390
|
+
borderRadius="full" // 9999px (circular)
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
### Preview Size Options
|
|
394
|
+
|
|
395
|
+
```tsx
|
|
396
|
+
previewSize="sm" // Small icon
|
|
397
|
+
previewSize="md" // Medium icon (default)
|
|
398
|
+
previewSize="lg" // Large icon
|
|
272
399
|
```
|
|
273
400
|
|
|
274
|
-
###
|
|
401
|
+
### Show/Hide Elements
|
|
275
402
|
|
|
276
403
|
```tsx
|
|
277
404
|
<ImageUploader
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
405
|
+
showImageCount={false} // Hide image count badge
|
|
406
|
+
showFileName={false} // Hide file names
|
|
407
|
+
showFileSize={false} // Hide file sizes
|
|
281
408
|
/>
|
|
282
409
|
```
|
|
283
410
|
|
|
284
|
-
|
|
411
|
+
## Upload Providers
|
|
412
|
+
|
|
413
|
+
### ImgBB
|
|
414
|
+
|
|
415
|
+
1. Get API key from [imgbb.com/settings/api](https://imgbb.com/settings/api)
|
|
416
|
+
2. Configure:
|
|
285
417
|
|
|
286
418
|
```tsx
|
|
287
|
-
|
|
288
|
-
|
|
419
|
+
uploadConfig={{
|
|
420
|
+
provider: 'imgbb',
|
|
421
|
+
config: { apiKey: 'your-api-key' }
|
|
422
|
+
}}
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
### Cloudinary
|
|
289
426
|
|
|
290
|
-
|
|
291
|
-
|
|
427
|
+
1. Sign up at [cloudinary.com](https://cloudinary.com)
|
|
428
|
+
2. Get cloud name and create upload preset
|
|
429
|
+
3. Configure:
|
|
430
|
+
|
|
431
|
+
```tsx
|
|
432
|
+
uploadConfig={{
|
|
433
|
+
provider: 'cloudinary',
|
|
434
|
+
config: {
|
|
435
|
+
cloudName: 'your-cloud-name',
|
|
436
|
+
uploadPreset: 'your-upload-preset'
|
|
437
|
+
}
|
|
438
|
+
}}
|
|
292
439
|
```
|
|
293
440
|
|
|
294
441
|
## TypeScript
|
|
@@ -296,29 +443,57 @@ const results = await uploadImages(files, 'cloudinary', {
|
|
|
296
443
|
Full TypeScript support:
|
|
297
444
|
|
|
298
445
|
```tsx
|
|
299
|
-
import type { ImageUploaderProps } from "ultra-image-uploader";
|
|
446
|
+
import type { ImageUploaderProps, ThemeName, CustomTheme } from "ultra-image-uploader";
|
|
300
447
|
```
|
|
301
448
|
|
|
449
|
+
## Animations
|
|
450
|
+
|
|
451
|
+
The component includes smooth, performance-friendly animations:
|
|
452
|
+
- Drag-over state with border color change
|
|
453
|
+
- Fade-in for image previews
|
|
454
|
+
- Hover effects with shadow and scale
|
|
455
|
+
- Progress overlay with backdrop blur
|
|
456
|
+
- Done indicator with checkmark
|
|
457
|
+
- All transitions use CSS transforms for 60fps performance
|
|
458
|
+
|
|
459
|
+
## Accessibility
|
|
460
|
+
|
|
461
|
+
- Keyboard accessible (Tab to focus, Enter/Space to upload)
|
|
462
|
+
- Focus visible on drag area
|
|
463
|
+
- ARIA-compatible markup
|
|
464
|
+
- Screen reader friendly
|
|
465
|
+
- Semantic HTML structure
|
|
466
|
+
|
|
467
|
+
## Responsive Design
|
|
468
|
+
|
|
469
|
+
The grid layout adapts to screen sizes:
|
|
470
|
+
- Mobile (2 columns): 320px+
|
|
471
|
+
- Tablet (3 columns): 640px+
|
|
472
|
+
- Desktop (4 columns): 768px+
|
|
473
|
+
- Wide (5 columns): 1024px+
|
|
474
|
+
- Default container: `max-w-5xl mx-auto mt-10`
|
|
475
|
+
|
|
302
476
|
## Browser Support
|
|
303
477
|
|
|
304
478
|
- Chrome/Edge (latest)
|
|
305
479
|
- Firefox (latest)
|
|
306
480
|
- Safari (latest)
|
|
307
|
-
- Mobile browsers
|
|
481
|
+
- Mobile browsers (iOS Safari, Chrome Mobile)
|
|
308
482
|
|
|
309
483
|
## Troubleshooting
|
|
310
484
|
|
|
311
485
|
### Auto imports not working
|
|
312
|
-
- Restart TypeScript server in your editor
|
|
313
|
-
- Ensure `node_modules` exists
|
|
486
|
+
- Restart TypeScript server in your editor (Cmd+Shift+P > "Restart TypeScript Server")
|
|
487
|
+
- Ensure `node_modules` exists (`npm install`)
|
|
314
488
|
|
|
315
|
-
###
|
|
316
|
-
-
|
|
317
|
-
- Check
|
|
489
|
+
### Images not uploading
|
|
490
|
+
- Verify API credentials in environment variables
|
|
491
|
+
- Check browser console for errors
|
|
492
|
+
- Ensure CORS is configured for your upload provider
|
|
318
493
|
|
|
319
|
-
###
|
|
320
|
-
-
|
|
321
|
-
-
|
|
494
|
+
### Theme not applying
|
|
495
|
+
- Check that theme name matches: `'nature'` | `'modern'` | `'fresh'`
|
|
496
|
+
- For custom themes, verify the structure matches `CustomTheme` type
|
|
322
497
|
|
|
323
498
|
## License
|
|
324
499
|
|
|
@@ -1,18 +1,76 @@
|
|
|
1
1
|
import type { UploadProvider, ProviderConfig } from '../types';
|
|
2
|
+
export declare const themes: {
|
|
3
|
+
nature: {
|
|
4
|
+
name: string;
|
|
5
|
+
colors: {
|
|
6
|
+
primary: string;
|
|
7
|
+
primaryHover: string;
|
|
8
|
+
background: string;
|
|
9
|
+
border: string;
|
|
10
|
+
text: string;
|
|
11
|
+
textSecondary: string;
|
|
12
|
+
cardBg: string;
|
|
13
|
+
cardBorder: string;
|
|
14
|
+
shadow: string;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
modern: {
|
|
18
|
+
name: string;
|
|
19
|
+
colors: {
|
|
20
|
+
primary: string;
|
|
21
|
+
primaryHover: string;
|
|
22
|
+
background: string;
|
|
23
|
+
border: string;
|
|
24
|
+
text: string;
|
|
25
|
+
textSecondary: string;
|
|
26
|
+
cardBg: string;
|
|
27
|
+
cardBorder: string;
|
|
28
|
+
shadow: string;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
fresh: {
|
|
32
|
+
name: string;
|
|
33
|
+
colors: {
|
|
34
|
+
primary: string;
|
|
35
|
+
primaryHover: string;
|
|
36
|
+
background: string;
|
|
37
|
+
border: string;
|
|
38
|
+
text: string;
|
|
39
|
+
textSecondary: string;
|
|
40
|
+
cardBg: string;
|
|
41
|
+
cardBorder: string;
|
|
42
|
+
shadow: string;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
export type ThemeName = keyof typeof themes;
|
|
47
|
+
export type CustomTheme = typeof themes[ThemeName];
|
|
2
48
|
export interface ImageUploaderProps {
|
|
3
49
|
images: File[];
|
|
4
50
|
setImages: (images: File[]) => void;
|
|
51
|
+
mode?: 'add' | 'update';
|
|
52
|
+
defaultImages?: string[];
|
|
5
53
|
multiple?: boolean;
|
|
6
54
|
maxSize?: number;
|
|
7
55
|
allowedTypes?: string[];
|
|
8
|
-
|
|
9
|
-
onUploadComplete?: (urls: string[]) => void;
|
|
10
|
-
onUploadError?: (error: Error) => void;
|
|
11
|
-
autoUpload?: boolean;
|
|
56
|
+
maxImages?: number;
|
|
12
57
|
uploadConfig?: {
|
|
13
58
|
provider: UploadProvider;
|
|
14
59
|
config: ProviderConfig;
|
|
15
60
|
};
|
|
61
|
+
autoUpload?: boolean;
|
|
62
|
+
onUploadComplete?: (urls: string[]) => void;
|
|
63
|
+
onUploadError?: (error: Error) => void;
|
|
64
|
+
theme?: ThemeName;
|
|
65
|
+
customTheme?: CustomTheme;
|
|
66
|
+
showThemeSelector?: boolean;
|
|
67
|
+
previewSize?: 'sm' | 'md' | 'lg';
|
|
68
|
+
borderRadius?: 'none' | 'sm' | 'md' | 'lg' | 'full';
|
|
69
|
+
className?: string;
|
|
70
|
+
containerClassName?: string;
|
|
71
|
+
showImageCount?: boolean;
|
|
72
|
+
showFileSize?: boolean;
|
|
73
|
+
showFileName?: boolean;
|
|
16
74
|
}
|
|
17
|
-
export declare function ImageUploader({ images, setImages, multiple, maxSize, allowedTypes,
|
|
75
|
+
export declare function ImageUploader({ images, setImages, mode, defaultImages, multiple, maxSize, allowedTypes, maxImages, uploadConfig, autoUpload, onUploadComplete, onUploadError, theme, customTheme, showThemeSelector, previewSize, borderRadius, className, containerClassName, showImageCount, showFileSize, showFileName, }: ImageUploaderProps): import("react/jsx-runtime").JSX.Element;
|
|
18
76
|
//# sourceMappingURL=ImageUploader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageUploader.d.ts","sourceRoot":"","sources":["../../src/components/ImageUploader.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;
|
|
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;AAK/D,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2ClB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,MAAM,CAAC;AAC5C,MAAM,MAAM,WAAW,GAAG,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IAEjC,MAAM,EAAE,IAAI,EAAE,CAAC;IACf,SAAS,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IAGpC,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAGzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,YAAY,CAAC,EAAE;QACb,QAAQ,EAAE,cAAc,CAAC;QACzB,MAAM,EAAE,cAAc,CAAC;KACxB,CAAC;IACF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC5C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAGvC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAG5B,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAG5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAiBD,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,SAAS,EACT,IAAY,EACZ,aAAkB,EAClB,QAAe,EACf,OAA0B,EAC1B,YAAmG,EACnG,SAAc,EACd,YAAY,EACZ,UAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,KAAgB,EAChB,WAAW,EACX,iBAAyB,EACzB,WAAkB,EAClB,YAAmB,EACnB,SAAc,EACd,kBAA8C,EAC9C,cAAqB,EACrB,YAAmB,EACnB,YAAmB,GACpB,EAAE,kBAAkB,2CAydpB"}
|
|
@@ -1,25 +1,84 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import {
|
|
2
|
+
import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import { useState, useRef, useCallback, useEffect } from 'react';
|
|
4
|
-
import { Upload, X,
|
|
4
|
+
import { Upload, X, Image as ImageIcon, Loader2 } from 'lucide-react';
|
|
5
5
|
import { uploadImage } from '../providers';
|
|
6
6
|
import { isImageFile, formatFileSize } from '../utils/validation';
|
|
7
|
-
|
|
7
|
+
// Theme definitions - shadcn/ui inspired
|
|
8
|
+
export const themes = {
|
|
9
|
+
nature: {
|
|
10
|
+
name: 'Nature',
|
|
11
|
+
colors: {
|
|
12
|
+
primary: '#16a34a',
|
|
13
|
+
primaryHover: '#15803d',
|
|
14
|
+
background: '#f0fdf4',
|
|
15
|
+
border: '#bbf7d0',
|
|
16
|
+
text: '#14532d',
|
|
17
|
+
textSecondary: '#166534',
|
|
18
|
+
cardBg: '#ffffff',
|
|
19
|
+
cardBorder: '#dcfce7',
|
|
20
|
+
shadow: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
modern: {
|
|
24
|
+
name: 'Modern',
|
|
25
|
+
colors: {
|
|
26
|
+
primary: '#09090b',
|
|
27
|
+
primaryHover: '#18181b',
|
|
28
|
+
background: '#fafafa',
|
|
29
|
+
border: '#e4e4e7',
|
|
30
|
+
text: '#18181b',
|
|
31
|
+
textSecondary: '#71717a',
|
|
32
|
+
cardBg: '#ffffff',
|
|
33
|
+
cardBorder: '#e4e4e7',
|
|
34
|
+
shadow: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
fresh: {
|
|
38
|
+
name: 'Fresh',
|
|
39
|
+
colors: {
|
|
40
|
+
primary: '#0284c7',
|
|
41
|
+
primaryHover: '#0369a1',
|
|
42
|
+
background: '#f0f9ff',
|
|
43
|
+
border: '#bae6fd',
|
|
44
|
+
text: '#0c4a6e',
|
|
45
|
+
textSecondary: '#075985',
|
|
46
|
+
cardBg: '#ffffff',
|
|
47
|
+
cardBorder: '#e0f2fe',
|
|
48
|
+
shadow: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
const borderRadiusMap = {
|
|
53
|
+
none: '0',
|
|
54
|
+
sm: '0.25rem',
|
|
55
|
+
md: '0.375rem',
|
|
56
|
+
lg: '0.5rem',
|
|
57
|
+
full: '9999px',
|
|
58
|
+
};
|
|
59
|
+
export function ImageUploader({ images, setImages, mode = 'add', defaultImages = [], multiple = true, maxSize = 50 * 1024 * 1024, allowedTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/webp', 'image/gif', 'image/svg+xml'], maxImages = 20, uploadConfig, autoUpload = false, onUploadComplete, onUploadError, theme = 'nature', customTheme, showThemeSelector = false, previewSize = 'md', borderRadius = 'md', className = '', containerClassName = 'max-w-5xl mx-auto mt-10', showImageCount = true, showFileSize = true, showFileName = true, }) {
|
|
60
|
+
const [selectedTheme, setSelectedTheme] = useState(theme);
|
|
8
61
|
const [isDragging, setIsDragging] = useState(false);
|
|
9
62
|
const [fileStates, setFileStates] = useState(new Map());
|
|
10
63
|
const [uploading, setUploading] = useState(false);
|
|
64
|
+
const [removedDefaults, setRemovedDefaults] = useState([]);
|
|
11
65
|
const fileInputRef = useRef(null);
|
|
12
66
|
const dragCounter = useRef(0);
|
|
13
|
-
|
|
67
|
+
const currentTheme = customTheme || themes[selectedTheme];
|
|
68
|
+
const t = currentTheme.colors;
|
|
69
|
+
const radius = borderRadiusMap[borderRadius];
|
|
70
|
+
// Generate previews
|
|
14
71
|
useEffect(() => {
|
|
15
72
|
const newStates = new Map();
|
|
16
73
|
images.forEach((file) => {
|
|
17
74
|
const key = `${file.name}-${file.size}`;
|
|
18
|
-
|
|
19
|
-
|
|
75
|
+
const existing = fileStates.get(key);
|
|
76
|
+
if (existing?.preview) {
|
|
77
|
+
newStates.set(key, existing);
|
|
20
78
|
}
|
|
21
79
|
else {
|
|
22
|
-
|
|
80
|
+
const preview = isImageFile(file) ? URL.createObjectURL(file) : undefined;
|
|
81
|
+
newStates.set(key, { ...file, progress: 0, status: 'pending', preview });
|
|
23
82
|
}
|
|
24
83
|
});
|
|
25
84
|
setFileStates(newStates);
|
|
@@ -79,7 +138,7 @@ export function ImageUploader({ images, setImages, multiple = true, maxSize = 50
|
|
|
79
138
|
const valid = [];
|
|
80
139
|
const invalid = [];
|
|
81
140
|
Array.from(files).forEach((file) => {
|
|
82
|
-
if (!isImageFile(file)) {
|
|
141
|
+
if (!isImageFile(file) && !allowedTypes.includes(file.type)) {
|
|
83
142
|
invalid.push(file);
|
|
84
143
|
return;
|
|
85
144
|
}
|
|
@@ -87,14 +146,13 @@ export function ImageUploader({ images, setImages, multiple = true, maxSize = 50
|
|
|
87
146
|
invalid.push(file);
|
|
88
147
|
return;
|
|
89
148
|
}
|
|
90
|
-
if (
|
|
91
|
-
invalid.push(file);
|
|
149
|
+
if (maxImages && images.length + valid.length >= maxImages) {
|
|
92
150
|
return;
|
|
93
151
|
}
|
|
94
152
|
valid.push(file);
|
|
95
153
|
});
|
|
96
154
|
return { valid, invalid };
|
|
97
|
-
}, [maxSize, allowedTypes]);
|
|
155
|
+
}, [maxSize, allowedTypes, maxImages, images.length]);
|
|
98
156
|
const handleFiles = useCallback((files) => {
|
|
99
157
|
const { valid } = validateFiles(files);
|
|
100
158
|
if (valid.length === 0)
|
|
@@ -104,7 +162,7 @@ export function ImageUploader({ images, setImages, multiple = true, maxSize = 50
|
|
|
104
162
|
return;
|
|
105
163
|
}
|
|
106
164
|
setImages(multiple ? [...images, ...valid] : [valid[0]]);
|
|
107
|
-
}, [images, multiple, setImages, validateFiles]);
|
|
165
|
+
}, [images, multiple, setImages, validateFiles, maxImages]);
|
|
108
166
|
const handleChange = (e) => {
|
|
109
167
|
if (e.target.files?.length) {
|
|
110
168
|
handleFiles(e.target.files);
|
|
@@ -137,24 +195,74 @@ export function ImageUploader({ images, setImages, multiple = true, maxSize = 50
|
|
|
137
195
|
handleFiles(e.dataTransfer.files);
|
|
138
196
|
}
|
|
139
197
|
};
|
|
140
|
-
const removeFile = (
|
|
141
|
-
setImages(images.filter((
|
|
198
|
+
const removeFile = (index) => {
|
|
199
|
+
setImages(images.filter((_, i) => i !== index));
|
|
200
|
+
};
|
|
201
|
+
const removeDefaultImage = (index) => {
|
|
202
|
+
setRemovedDefaults((prev) => [...prev, index]);
|
|
142
203
|
};
|
|
143
204
|
const getFileState = (file) => {
|
|
144
205
|
const key = `${file.name}-${file.size}`;
|
|
145
206
|
return fileStates.get(key) || { ...file, progress: 0, status: 'pending' };
|
|
146
207
|
};
|
|
147
|
-
return (_jsxs("div", { className: `image-uploader ${className}`, children: [_jsxs("div", { className: "
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
}
|
|
208
|
+
return (_jsxs("div", { className: `image-uploader ${containerClassName} ${className}`, children: [_jsxs("div", { className: "flex items-center justify-between mb-6", children: [_jsxs("div", { children: [_jsxs("h2", { className: "text-2xl font-semibold tracking-tight", style: { color: t.text }, children: [mode === 'update' ? 'Update' : 'Upload', " Images"] }), _jsx("p", { className: "text-sm", style: { color: t.textSecondary }, children: multiple ? 'Drag and drop or click to upload' : 'Select an image to upload' })] }), showImageCount && (_jsxs("div", { className: "inline-flex items-center gap-2 px-3 py-1.5 text-sm font-medium rounded-md border", style: {
|
|
209
|
+
backgroundColor: t.cardBg,
|
|
210
|
+
borderColor: t.cardBorder,
|
|
211
|
+
color: t.text,
|
|
212
|
+
}, children: [_jsx("span", { children: images.length }), maxImages && _jsxs("span", { className: "text-muted", style: { color: t.textSecondary }, children: ["/ ", maxImages] })] }))] }), showThemeSelector && (_jsx("div", { className: "mb-6 inline-flex gap-1 p-1 rounded-lg border", style: { backgroundColor: t.background, borderColor: t.cardBorder }, children: Object.keys(themes).map((key) => (_jsx("button", { onClick: () => setSelectedTheme(key), className: "px-3 py-1.5 text-sm font-medium rounded-md transition-colors", style: {
|
|
213
|
+
backgroundColor: selectedTheme === key ? t.cardBg : 'transparent',
|
|
214
|
+
color: selectedTheme === key ? t.text : t.textSecondary,
|
|
215
|
+
}, children: themes[key].name }, key))) })), _jsxs("div", { className: "relative group cursor-pointer overflow-hidden transition-all duration-200", style: {
|
|
216
|
+
borderRadius: radius,
|
|
217
|
+
border: `2px dashed ${isDragging ? t.primary : t.cardBorder}`,
|
|
218
|
+
backgroundColor: t.background,
|
|
219
|
+
}, 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", style: { zIndex: 10 } }), _jsxs("div", { className: "flex flex-col items-center justify-center p-12", children: [_jsx("div", { className: "mb-4 flex items-center justify-center transition-transform duration-200", style: { color: isDragging ? t.primary : t.textSecondary }, children: _jsx("div", { className: "flex items-center justify-center rounded-full", style: {
|
|
220
|
+
width: previewSize === 'lg' ? '64px' : previewSize === 'md' ? '56px' : '48px',
|
|
221
|
+
height: previewSize === 'lg' ? '64px' : previewSize === 'md' ? '56px' : '48px',
|
|
222
|
+
backgroundColor: t.cardBg,
|
|
223
|
+
border: `1px solid ${t.cardBorder}`,
|
|
224
|
+
}, children: _jsx(ImageIcon, { size: 24 }) }) }), _jsxs("div", { className: "text-center space-y-1", children: [_jsx("p", { className: "text-sm font-medium", style: { color: t.text }, children: isDragging ? 'Drop images here' : multiple ? 'Drop images here' : 'Drop image here' }), _jsx("p", { className: "text-xs", style: { color: t.textSecondary }, children: "or click to browse" })] }), _jsxs("div", { className: "mt-4 text-xs space-y-0.5", style: { color: t.textSecondary }, children: [_jsxs("p", { children: ["Max size: ", formatFileSize(maxSize)] }), maxImages && _jsxs("p", { children: ["Up to ", maxImages, " image", maxImages > 1 ? 's' : ''] })] })] })] }), (images.length > 0 || defaultImages.length > 0) && (_jsx("div", { className: "mt-6", children: _jsxs("div", { className: "grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-4", children: [mode === 'update' &&
|
|
225
|
+
defaultImages.map((url, index) => !removedDefaults.includes(index) && (_jsx("div", { className: "relative group aspect-square", style: { animation: 'fadeIn 0.2s ease-out' }, children: _jsxs("div", { className: "relative w-full h-full overflow-hidden border transition-all duration-200 hover:shadow-md", style: {
|
|
226
|
+
borderRadius: radius,
|
|
227
|
+
borderColor: t.cardBorder,
|
|
228
|
+
backgroundColor: t.cardBg,
|
|
229
|
+
}, children: [_jsx("img", { src: url, alt: `Preview ${index + 1}`, className: "w-full h-full object-cover" }), _jsx("button", { onClick: () => removeDefaultImage(index), className: "absolute top-2 right-2 w-7 h-7 flex items-center justify-center rounded-full opacity-0 group-hover:opacity-100 transition-opacity duration-200", style: {
|
|
230
|
+
backgroundColor: 'rgba(0,0,0,0.7)',
|
|
231
|
+
backdropFilter: 'blur(4px)',
|
|
232
|
+
}, children: _jsx(X, { size: 14, className: "text-white" }) })] }) }, `default-${index}`))), images.map((file, index) => {
|
|
233
|
+
const state = getFileState(file);
|
|
234
|
+
const isUploading = state.status === 'uploading';
|
|
235
|
+
const isDone = state.status === 'done';
|
|
236
|
+
return (_jsxs("div", { className: "relative group aspect-square", style: { animation: 'fadeIn 0.2s ease-out', animationDelay: `${index * 30}ms` }, children: [_jsxs("div", { className: "relative w-full h-full overflow-hidden border transition-all duration-200 hover:shadow-md", style: {
|
|
237
|
+
borderRadius: radius,
|
|
238
|
+
borderColor: t.cardBorder,
|
|
239
|
+
backgroundColor: t.cardBg,
|
|
240
|
+
}, children: [state.preview ? (_jsx("img", { src: state.preview, alt: file.name, className: "w-full h-full object-cover" })) : (_jsx("div", { className: "w-full h-full flex items-center justify-center", style: { backgroundColor: t.border }, children: _jsx(ImageIcon, { size: 32, style: { color: t.primary } }) })), _jsx("button", { onClick: () => removeFile(index), className: "absolute top-2 right-2 w-7 h-7 flex items-center justify-center rounded-full opacity-0 group-hover:opacity-100 transition-opacity duration-200", style: {
|
|
241
|
+
backgroundColor: 'rgba(0,0,0,0.7)',
|
|
242
|
+
backdropFilter: 'blur(4px)',
|
|
243
|
+
}, children: _jsx(X, { size: 14, className: "text-white" }) }), isUploading && (_jsx("div", { className: "absolute inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center", children: _jsxs("div", { className: "text-center", children: [_jsx(Loader2, { size: 24, className: "animate-spin text-white mx-auto mb-2" }), _jsxs("p", { className: "text-white text-xs font-medium", children: [state.progress, "%"] })] }) })), isDone && (_jsx("div", { className: "absolute inset-0 bg-black/20 backdrop-blur-sm flex items-center justify-center", children: _jsx("div", { className: "w-12 h-12 bg-green-500 rounded-full flex items-center justify-center", style: {
|
|
244
|
+
boxShadow: '0 4px 12px rgba(34, 197, 94, 0.4)',
|
|
245
|
+
}, children: _jsx("svg", { className: "w-6 h-6 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" }) }) }) }))] }), (showFileName || showFileSize) && (_jsxs("div", { className: "mt-2 space-y-0.5", children: [showFileName && (_jsx("p", { className: "text-xs font-medium truncate", style: { color: t.text }, children: file.name })), showFileSize && (_jsx("p", { className: "text-xs", style: { color: t.textSecondary }, children: formatFileSize(file.size) }))] }))] }, `${file.name}-${file.size}`));
|
|
246
|
+
})] }) })), images.length > 0 && !autoUpload && uploadConfig && (_jsxs("div", { className: "mt-6 flex items-center justify-end gap-3", children: [_jsx("button", { onClick: () => {
|
|
247
|
+
setImages([]);
|
|
248
|
+
setRemovedDefaults([]);
|
|
249
|
+
}, className: "px-4 py-2 text-sm font-medium rounded-md border transition-colors duration-200 hover:bg-opacity-80", style: {
|
|
250
|
+
backgroundColor: t.cardBg,
|
|
251
|
+
color: t.text,
|
|
252
|
+
borderColor: t.cardBorder,
|
|
253
|
+
}, children: "Clear" }), _jsx("button", { onClick: handleAutoUpload, disabled: uploading, className: "px-4 py-2 text-sm font-medium rounded-md text-white transition-all duration-200 disabled:opacity-50 disabled:cursor-not-allowed inline-flex items-center gap-2", style: {
|
|
254
|
+
backgroundColor: t.primary,
|
|
255
|
+
}, children: uploading ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { size: 16, className: "animate-spin" }), "Uploading..."] })) : (_jsxs(_Fragment, { children: [_jsx(Upload, { size: 16 }), "Upload ", images.length, " ", images.length === 1 ? 'image' : 'images'] })) })] })), _jsx("style", { children: `
|
|
256
|
+
@keyframes fadeIn {
|
|
257
|
+
from {
|
|
258
|
+
opacity: 0;
|
|
259
|
+
transform: translateY(4px);
|
|
260
|
+
}
|
|
261
|
+
to {
|
|
262
|
+
opacity: 1;
|
|
263
|
+
transform: translateY(0);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
` })] }));
|
|
159
267
|
}
|
|
160
268
|
//# sourceMappingURL=ImageUploader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageUploader.js","sourceRoot":"","sources":["../../src/components/ImageUploader.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ImageUploader.js","sourceRoot":"","sources":["../../src/components/ImageUploader.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ultra-image-uploader",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "A modern,
|
|
3
|
+
"version": "3.0.0",
|
|
4
|
+
"description": "A modern, shadcn/ui-inspired React image upload component with beautiful themes, drag-and-drop, and smooth animations",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|