@rovela-ai/sdk 0.9.2 → 0.10.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/dist/admin/components/AdminNav.d.ts.map +1 -1
- package/dist/admin/components/AdminNav.js +3 -1
- package/dist/admin/components/AdminNav.js.map +1 -1
- package/dist/admin/components/FilesManager.d.ts +5 -0
- package/dist/admin/components/FilesManager.d.ts.map +1 -0
- package/dist/admin/components/FilesManager.js +158 -0
- package/dist/admin/components/FilesManager.js.map +1 -0
- package/dist/admin/components/MediaLibraryPicker.d.ts +14 -0
- package/dist/admin/components/MediaLibraryPicker.d.ts.map +1 -0
- package/dist/admin/components/MediaLibraryPicker.js +95 -0
- package/dist/admin/components/MediaLibraryPicker.js.map +1 -0
- package/dist/admin/components/index.d.ts +4 -0
- package/dist/admin/components/index.d.ts.map +1 -1
- package/dist/admin/components/index.js +5 -0
- package/dist/admin/components/index.js.map +1 -1
- package/dist/admin/index.d.ts +1 -1
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +2 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/media/api/files.d.ts +32 -0
- package/dist/media/api/files.d.ts.map +1 -0
- package/dist/media/api/files.js +99 -0
- package/dist/media/api/files.js.map +1 -0
- package/dist/media/api/index.d.ts +1 -0
- package/dist/media/api/index.d.ts.map +1 -1
- package/dist/media/api/index.js +1 -0
- package/dist/media/api/index.js.map +1 -1
- package/dist/media/components/ImageGalleryUpload.d.ts.map +1 -1
- package/dist/media/components/ImageGalleryUpload.js +15 -2
- package/dist/media/components/ImageGalleryUpload.js.map +1 -1
- package/dist/media/components/ImageUpload.d.ts.map +1 -1
- package/dist/media/components/ImageUpload.js +16 -2
- package/dist/media/components/ImageUpload.js.map +1 -1
- package/dist/media/index.d.ts +2 -0
- package/dist/media/index.d.ts.map +1 -1
- package/dist/media/index.js +4 -0
- package/dist/media/index.js.map +1 -1
- package/dist/media/server/index.d.ts +1 -0
- package/dist/media/server/index.d.ts.map +1 -1
- package/dist/media/server/index.js +2 -0
- package/dist/media/server/index.js.map +1 -1
- package/dist/media/server/list.d.ts +23 -0
- package/dist/media/server/list.d.ts.map +1 -0
- package/dist/media/server/list.js +62 -0
- package/dist/media/server/list.js.map +1 -0
- package/dist/media/taxonomy.d.ts +106 -0
- package/dist/media/taxonomy.d.ts.map +1 -0
- package/dist/media/taxonomy.js +227 -0
- package/dist/media/taxonomy.js.map +1 -0
- package/package.json +5 -1
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @rovela-ai/sdk/media/api/files
|
|
3
|
+
*
|
|
4
|
+
* API route handlers for the admin Files page (store media library).
|
|
5
|
+
*
|
|
6
|
+
* GET /api/admin/files — list every recognised asset under the store prefix
|
|
7
|
+
* DELETE /api/admin/files — delete one asset by key (body: { key })
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* ```typescript
|
|
11
|
+
* // app/api/admin/files/route.ts
|
|
12
|
+
* export { getStoreFilesHandler as GET, deleteStoreFileHandler as DELETE } from '@rovela-ai/sdk/media/api'
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
import { NextResponse } from 'next/server';
|
|
16
|
+
import { DeleteObjectCommand } from '@aws-sdk/client-s3';
|
|
17
|
+
import { requireAdmin } from '../../admin/server/admin-session';
|
|
18
|
+
import { isMediaConfigured, requireMediaConfig } from '../config';
|
|
19
|
+
import { getR2Client, getBucketName, getStoreId } from '../server/r2-client';
|
|
20
|
+
import { listStoreFiles } from '../server/list';
|
|
21
|
+
import { parseAssetKey, keyBelongsToProject, ADMIN_PROTECTED_CATEGORIES, } from '../taxonomy';
|
|
22
|
+
function notConfigured() {
|
|
23
|
+
return NextResponse.json({
|
|
24
|
+
success: false,
|
|
25
|
+
error: 'Media storage not configured',
|
|
26
|
+
code: 'NOT_CONFIGURED',
|
|
27
|
+
}, { status: 503 });
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* GET /api/admin/files — list the store's media library.
|
|
31
|
+
* Gated on `products.read` (files serve catalog media).
|
|
32
|
+
*/
|
|
33
|
+
export async function getStoreFilesHandler(_request) {
|
|
34
|
+
const guard = await requireAdmin({ permission: 'products.read' });
|
|
35
|
+
if (!guard.ok)
|
|
36
|
+
return guard.response;
|
|
37
|
+
if (!isMediaConfigured())
|
|
38
|
+
return notConfigured();
|
|
39
|
+
try {
|
|
40
|
+
const { assets, truncated } = await listStoreFiles();
|
|
41
|
+
return NextResponse.json({ success: true, assets, truncated });
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
console.error('[Files API] List error:', error);
|
|
45
|
+
return NextResponse.json({ success: false, error: 'Failed to list files', code: 'LIST_FAILED' }, { status: 500 });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* DELETE /api/admin/files — delete one asset by canonical R2 key.
|
|
50
|
+
* Gated on `products.write`.
|
|
51
|
+
*
|
|
52
|
+
* Guardrails (defense in depth, both server-side):
|
|
53
|
+
* - the key MUST belong to this store's prefix (cross-tenant guard);
|
|
54
|
+
* - system categories (branding / references / thumbnail) are refused —
|
|
55
|
+
* branding deletion flows through the platform's branding helpers, which
|
|
56
|
+
* also clear the blueprint pointer + Vercel env vars.
|
|
57
|
+
*/
|
|
58
|
+
export async function deleteStoreFileHandler(request) {
|
|
59
|
+
const guard = await requireAdmin({ permission: 'products.write' });
|
|
60
|
+
if (!guard.ok)
|
|
61
|
+
return guard.response;
|
|
62
|
+
if (!isMediaConfigured())
|
|
63
|
+
return notConfigured();
|
|
64
|
+
try {
|
|
65
|
+
const body = (await request.json().catch(() => null));
|
|
66
|
+
const key = typeof body?.key === 'string' ? body.key : '';
|
|
67
|
+
if (!key) {
|
|
68
|
+
return NextResponse.json({ success: false, error: 'key (string) is required' }, { status: 400 });
|
|
69
|
+
}
|
|
70
|
+
const config = requireMediaConfig();
|
|
71
|
+
const storeId = getStoreId(config);
|
|
72
|
+
if (!keyBelongsToProject(key, storeId)) {
|
|
73
|
+
return NextResponse.json({ success: false, error: 'Key does not belong to this store' }, { status: 403 });
|
|
74
|
+
}
|
|
75
|
+
// Classify — unknown keys are deletable (stray objects under our own
|
|
76
|
+
// prefix), but protected categories are refused.
|
|
77
|
+
const parsed = parseAssetKey({
|
|
78
|
+
key,
|
|
79
|
+
size: 0,
|
|
80
|
+
lastModified: new Date(0),
|
|
81
|
+
publicUrlBase: 'https://x',
|
|
82
|
+
});
|
|
83
|
+
if (parsed && ADMIN_PROTECTED_CATEGORIES.has(parsed.category)) {
|
|
84
|
+
return NextResponse.json({
|
|
85
|
+
success: false,
|
|
86
|
+
error: 'This file is managed by the platform (branding and system assets). Update it from your Rovela dashboard instead.',
|
|
87
|
+
code: 'FILE_PROTECTED',
|
|
88
|
+
}, { status: 403 });
|
|
89
|
+
}
|
|
90
|
+
const client = getR2Client(config);
|
|
91
|
+
await client.send(new DeleteObjectCommand({ Bucket: getBucketName(config), Key: key }));
|
|
92
|
+
return NextResponse.json({ success: true });
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
console.error('[Files API] Delete error:', error);
|
|
96
|
+
return NextResponse.json({ success: false, error: 'Failed to delete file', code: 'DELETE_FAILED' }, { status: 500 });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../../src/media/api/files.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/media/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/media/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA"}
|
package/dist/media/api/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/media/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/media/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageGalleryUpload.d.ts","sourceRoot":"","sources":["../../../src/media/components/ImageGalleryUpload.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ImageGalleryUpload.d.ts","sourceRoot":"","sources":["../../../src/media/components/ImageGalleryUpload.tsx"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AASvD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,KAAU,EACV,QAAQ,EACR,MAAM,EACN,cAAc,EACd,MAAM,EACN,MAAM,EACN,QAAQ,EACR,SAAc,EACd,SAAe,EACf,QAAgB,EAChB,SAAS,GACV,EAAE,uBAAuB,2CAiZzB;AAED,eAAe,kBAAkB,CAAA"}
|
|
@@ -13,12 +13,15 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
|
|
|
13
13
|
* URL extension. Tile rendering branches on `isVideoUrl()`.
|
|
14
14
|
*/
|
|
15
15
|
import { useState, useCallback, useMemo } from 'react';
|
|
16
|
+
import dynamic from 'next/dynamic';
|
|
16
17
|
import Image from 'next/image';
|
|
17
|
-
import { ImagePlus, Trash2, Star, GripVertical, Loader2, AlertCircle, Play, } from 'lucide-react';
|
|
18
|
+
import { ImagePlus, Trash2, Star, GripVertical, Loader2, AlertCircle, Play, FolderOpen, } from 'lucide-react';
|
|
18
19
|
import { cn } from '../../core/utils';
|
|
19
20
|
import { useUpload } from '../hooks/useUpload';
|
|
20
21
|
import { DropZone } from './DropZone';
|
|
21
22
|
import { DEFAULT_MEDIA_UPLOAD_CONFIG, isVideoUrl, isVideoMime } from '../types';
|
|
23
|
+
// Lazy — the picker modal (and its file listing) loads only when opened.
|
|
24
|
+
const MediaLibraryPicker = dynamic(() => import('../../admin/components/MediaLibraryPicker').then((m) => m.MediaLibraryPicker), { ssr: false });
|
|
22
25
|
/**
|
|
23
26
|
* Multi-media upload component for products. Accepts both images and videos.
|
|
24
27
|
*
|
|
@@ -44,6 +47,7 @@ export function ImageGalleryUpload({ value = [], onChange, videos, onVideosChang
|
|
|
44
47
|
// this list; on drop we re-split by URL extension and call both setters.
|
|
45
48
|
const combined = useMemo(() => [...value, ...videosArr], [value, videosArr]);
|
|
46
49
|
const [deletingIndex, setDeletingIndex] = useState(null);
|
|
50
|
+
const [pickerOpen, setPickerOpen] = useState(false);
|
|
47
51
|
const [dragIndex, setDragIndex] = useState(null);
|
|
48
52
|
const [dragOverIndex, setDragOverIndex] = useState(null);
|
|
49
53
|
const splitByKind = useCallback((urls) => {
|
|
@@ -174,6 +178,15 @@ export function ImageGalleryUpload({ value = [], onChange, videos, onVideosChang
|
|
|
174
178
|
}, [combined, value, videosArr, persistBoth, disabled]);
|
|
175
179
|
const canAddMore = combined.length < maxImages;
|
|
176
180
|
const dropZoneAccept = DEFAULT_MEDIA_UPLOAD_CONFIG.allowedTypes;
|
|
181
|
+
// Reuse existing library files — appended through the same split/persist
|
|
182
|
+
// path an upload takes, deduped against what's already in the gallery.
|
|
183
|
+
const handleLibraryPick = useCallback((urls) => {
|
|
184
|
+
const fresh = urls.filter((u) => !combined.includes(u));
|
|
185
|
+
if (fresh.length === 0)
|
|
186
|
+
return;
|
|
187
|
+
const { images: pickedImages, videos: pickedVideos } = splitByKind(fresh);
|
|
188
|
+
persistBoth([...value, ...pickedImages], [...videosArr, ...pickedVideos]);
|
|
189
|
+
}, [combined, splitByKind, persistBoth, value, videosArr]);
|
|
177
190
|
return (_jsxs("div", { className: cn('space-y-4', className), children: [combined.length > 0 && (_jsx("div", { className: "grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-4", children: combined.map((url, index) => {
|
|
178
191
|
const tileIsVideo = isVideoUrl(url);
|
|
179
192
|
return (_jsxs("div", { draggable: !disabled, onDragStart: (e) => handleDragStart(e, index), onDragOver: (e) => handleDragOver(e, index), onDragEnd: handleDragEnd, onDragLeave: handleDragLeave, className: cn('relative aspect-square rounded-lg border overflow-hidden group bg-muted/30', 'transition-all duration-200', dragIndex === index && 'opacity-50 scale-95', dragOverIndex === index &&
|
|
@@ -187,7 +200,7 @@ export function ImageGalleryUpload({ value = [], onChange, videos, onVideosChang
|
|
|
187
200
|
_jsx(Image, { src: url, alt: `Image ${index + 1}`, fill: true, className: "object-contain", sizes: "(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 25vw" })), index === 0 && !tileIsVideo && (_jsx("div", { className: "absolute top-2 left-2 px-2 py-0.5 rounded-full bg-primary text-primary-foreground text-xs font-medium", children: "Primary" })), tileIsVideo && (_jsx("div", { className: "absolute top-2 left-2 px-2 py-0.5 rounded-full bg-black/70 text-white text-xs font-medium", children: "Video" })), _jsx("div", { className: "absolute inset-0 bg-black/0 group-hover:bg-black/40 transition-colors", children: _jsxs("div", { className: "absolute inset-0 flex items-center justify-center gap-2 opacity-0 group-hover:opacity-100 transition-opacity", children: [index !== 0 && !tileIsVideo && (_jsx("button", { type: "button", onClick: () => handleMakePrimary(index), disabled: disabled, className: cn('rounded-full bg-white/90 p-2 text-gray-700', 'hover:bg-white transition-colors', 'disabled:opacity-50 disabled:cursor-not-allowed'), title: "Make primary", children: _jsx(Star, { className: "h-4 w-4" }) })), _jsx("button", { type: "button", onClick: () => handleDelete(index), disabled: disabled || deletingIndex !== null, className: cn('rounded-full bg-destructive p-2 text-destructive-foreground', 'hover:bg-destructive/90 transition-colors', 'disabled:opacity-50 disabled:cursor-not-allowed'), title: tileIsVideo ? 'Remove video' : 'Remove image', children: deletingIndex === index ? (_jsx(Loader2, { className: "h-4 w-4 animate-spin" })) : (_jsx(Trash2, { className: "h-4 w-4" })) })] }) }), _jsx("div", { className: "absolute top-2 right-2 p-1 rounded bg-black/50 opacity-0 group-hover:opacity-100 transition-opacity", children: _jsx(GripVertical, { className: "h-4 w-4 text-white" }) })] }, url));
|
|
188
201
|
}) })), canAddMore && (_jsx(DropZone, { onFiles: handleFiles, multiple: maxImages - combined.length > 1, accept: dropZoneAccept, maxSize: maxSizeMB * 1024 * 1024, disabled: disabled || isUploading, className: "min-h-[120px]", children: _jsx("div", { className: "text-muted-foreground", children: isUploading ? (_jsxs("div", { className: "space-y-2", children: [_jsx(Loader2, { className: "mx-auto h-8 w-8 animate-spin" }), _jsx("p", { className: "text-sm", children: "Uploading..." }), progress && (_jsxs("div", { className: "w-full max-w-[200px] mx-auto", children: [_jsx("div", { className: "h-1.5 bg-muted rounded-full overflow-hidden", children: _jsx("div", { className: "h-full bg-primary transition-all duration-300", style: { width: `${progress.percentage}%` } }) }), _jsxs("p", { className: "text-xs mt-1", children: [progress.percentage, "%"] })] }))] })) : (_jsxs(_Fragment, { children: [_jsx(ImagePlus, { className: "mx-auto h-10 w-10 mb-2" }), _jsx("p", { className: "text-sm font-medium", children: combined.length === 0
|
|
189
202
|
? 'Add product media'
|
|
190
|
-
: 'Add more media' }), _jsx("p", { className: "text-xs mt-1", children: "Drop images or videos, or click to browse" }), _jsxs("p", { className: "text-xs text-muted-foreground/70", children: [combined.length, " / ", maxImages, " items"] })] })) }) })), !canAddMore && (_jsxs("p", { className: "text-sm text-muted-foreground text-center", children: ["Maximum ", maxImages, " items reached. Remove one to add more."] })), error && (_jsxs("div", { className: "flex items-center gap-2 text-sm text-destructive", children: [_jsx(AlertCircle, { className: "h-4 w-4 flex-shrink-0" }), _jsx("span", { children: error }), _jsx("button", { type: "button", onClick: reset, className: "text-primary hover:underline ml-auto", children: "Retry" })] })), combined.length > 1 && (_jsx("p", { className: "text-xs text-muted-foreground", children: "Drag to reorder. The first image is the primary product image. Videos can be reordered but cannot be set as primary." }))] }));
|
|
203
|
+
: 'Add more media' }), _jsx("p", { className: "text-xs mt-1", children: "Drop images or videos, or click to browse" }), _jsxs("p", { className: "text-xs text-muted-foreground/70", children: [combined.length, " / ", maxImages, " items"] })] })) }) })), canAddMore && !isUploading && (_jsxs("button", { type: "button", onClick: () => setPickerOpen(true), disabled: disabled, className: "inline-flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground disabled:opacity-50", children: [_jsx(FolderOpen, { className: "h-3.5 w-3.5" }), "Choose from library"] })), pickerOpen && (_jsx(MediaLibraryPicker, { isOpen: pickerOpen, onClose: () => setPickerOpen(false), onPick: handleLibraryPick, maxPick: Math.max(1, maxImages - combined.length), kinds: ['image', 'video'] })), !canAddMore && (_jsxs("p", { className: "text-sm text-muted-foreground text-center", children: ["Maximum ", maxImages, " items reached. Remove one to add more."] })), error && (_jsxs("div", { className: "flex items-center gap-2 text-sm text-destructive", children: [_jsx(AlertCircle, { className: "h-4 w-4 flex-shrink-0" }), _jsx("span", { children: error }), _jsx("button", { type: "button", onClick: reset, className: "text-primary hover:underline ml-auto", children: "Retry" })] })), combined.length > 1 && (_jsx("p", { className: "text-xs text-muted-foreground", children: "Drag to reorder. The first image is the primary product image. Videos can be reordered but cannot be set as primary." }))] }));
|
|
191
204
|
}
|
|
192
205
|
export default ImageGalleryUpload;
|
|
193
206
|
//# sourceMappingURL=ImageGalleryUpload.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageGalleryUpload.js","sourceRoot":"","sources":["../../../src/media/components/ImageGalleryUpload.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AACtD,OAAO,KAAK,MAAM,YAAY,CAAA;AAC9B,OAAO,EACL,SAAS,EACT,MAAM,EACN,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,WAAW,EACX,IAAI,GACL,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,2BAA2B,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAE/E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,kBAAkB,CAAC,EACjC,KAAK,GAAG,EAAE,EACV,QAAQ,EACR,MAAM,EACN,cAAc,EACd,MAAM,EACN,MAAM,EACN,QAAQ,EACR,SAAS,GAAG,EAAE,EACd,SAAS,GAAG,GAAG,EACf,QAAQ,GAAG,KAAK,EAChB,SAAS,GACe;IACxB,2EAA2E;IAC3E,8EAA8E;IAC9E,MAAM,SAAS,GAAG,OAAO,CAAW,GAAG,EAAE,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IAEjE,uEAAuE;IACvE,yEAAyE;IACzE,MAAM,QAAQ,GAAG,OAAO,CAAW,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAA;IAEtF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACvE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAC/D,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAEvE,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,IAAc,EAAE,EAAE;QACjD,MAAM,MAAM,GAAa,EAAE,CAAA;QAC3B,MAAM,IAAI,GAAa,EAAE,CAAA;QACzB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,UAAU,CAAC,CAAC,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;;gBAC1B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACrB,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;IACjC,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,UAAoB,EAAE,UAAoB,EAAE,EAAE;QAC7C,QAAQ,CAAC,UAAU,CAAC,CAAA;QACpB,cAAc,EAAE,CAAC,UAAU,CAAC,CAAA;QAC5B,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAC7C,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAA;QAC5D,CAAC,CAAC,CAAA;IACJ,CAAC,EACD,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,CAAC,CACnC,CAAA;IAED,+DAA+D;IAC/D,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;QAChE,MAAM;QACN,QAAQ;QACR,MAAM,EAAE;YACN,YAAY,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;YACrC,YAAY,EAAE,2BAA2B,CAAC,YAAY;SACvD;QACD,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE;YACpB,IAAI,CAAC,MAAM,CAAC,GAAG;gBAAE,OAAM;YACvB,MAAM,OAAO,GACX,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAC3D,IAAI,OAAO,EAAE,CAAC;gBACZ,WAAW,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;YAChD,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,CAAC,GAAG,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAA;YAChD,CAAC;QACH,CAAC;KACF,CAAC,CAAA;IAEF,iEAAiE;IACjE,MAAM,WAAW,GAAG,WAAW,CAC7B,KAAK,EAAE,KAAa,EAAE,EAAE;QACtB,IAAI,QAAQ,IAAI,WAAW;YAAE,OAAM;QAEnC,iCAAiC;QACjC,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAA;QAClD,IAAI,cAAc,IAAI,CAAC;YAAE,OAAM;QAE/B,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAA;QACpD,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAA;QACpB,CAAC;IACH,CAAC,EACD,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAC5D,CAAA;IAED,mEAAmE;IACnE,MAAM,YAAY,GAAG,WAAW,CAC9B,KAAK,EAAE,KAAa,EAAE,EAAE;QACtB,IAAI,QAAQ,IAAI,aAAa,KAAK,IAAI;YAAE,OAAM;QAC9C,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC3B,IAAI,CAAC,GAAG;YAAE,OAAM;QAEhB,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAEvB,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,YAAY,EAAE;gBACxB,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;aAC9B,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,CAAA;YACnC,gEAAgE;QAClE,CAAC;QAED,sCAAsC;QACtC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;QAC/B,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAA;YACrD,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;QAChC,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAA;YACjD,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;QACpC,CAAC;QAED,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC,EACD,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,CACnE,CAAA;IAED,yEAAyE;IACzE,2DAA2D;IAC3D,MAAM,eAAe,GAAG,WAAW,CACjC,CAAC,CAAkB,EAAE,KAAa,EAAE,EAAE;QACpC,IAAI,QAAQ;YAAE,OAAM;QACpB,YAAY,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC,CAAC,YAAY,CAAC,aAAa,GAAG,MAAM,CAAA;QACrC,IAAI,CAAC,CAAC,aAAa,YAAY,WAAW,EAAE,CAAC;YAC3C,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;QACtD,CAAC;IACH,CAAC,EACD,CAAC,QAAQ,CAAC,CACX,CAAA;IAED,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,CAAkB,EAAE,KAAa,EAAE,EAAE;QACpC,CAAC,CAAC,cAAc,EAAE,CAAA;QAClB,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,KAAK;YAAE,OAAM;QACrD,gBAAgB,CAAC,KAAK,CAAC,CAAA;IACzB,CAAC,EACD,CAAC,SAAS,CAAC,CACZ,CAAA;IAED,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;QACrC,IACE,SAAS,KAAK,IAAI;YAClB,aAAa,KAAK,IAAI;YACtB,SAAS,KAAK,aAAa,EAC3B,CAAC;YACD,MAAM,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAA;YAC1B,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;YAC3C,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;YACtC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;YAClD,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAC3B,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,CAAA;QAClB,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAA;IAElE,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;QACvC,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,qEAAqE;IACrE,qEAAqE;IACrE,MAAM,iBAAiB,GAAG,WAAW,CACnC,CAAC,KAAa,EAAE,EAAE;QAChB,IAAI,KAAK,KAAK,CAAC,IAAI,QAAQ;YAAE,OAAM;QACnC,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC3B,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC;YAAE,OAAM;QACnC,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;QAC3D,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;IACpC,CAAC,EACD,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CACpD,CAAA;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAA;IAC9C,MAAM,cAAc,GAAG,2BAA2B,CAAC,YAAY,CAAA;IAE/D,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,aAEvC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,cAAK,SAAS,EAAC,sDAAsD,YAClE,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;oBAC3B,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;oBACnC,OAAO,CACL,eAEE,SAAS,EAAE,CAAC,QAAQ,EACpB,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC,EAC7C,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,EAC3C,SAAS,EAAE,aAAa,EACxB,WAAW,EAAE,eAAe,EAC5B,SAAS,EAAE,EAAE,CACX,4EAA4E,EAC5E,6BAA6B,EAC7B,SAAS,KAAK,KAAK,IAAI,qBAAqB,EAC5C,aAAa,KAAK,KAAK;4BACrB,mCAAmC,EACrC,CAAC,QAAQ,IAAI,oCAAoC,CAClD,aAGA,WAAW,CAAC,CAAC,CAAC,CACb,8BACE,gBACE,GAAG,EAAE,GAAG,EACR,OAAO,EAAC,UAAU,EAClB,KAAK,QACL,WAAW,QACX,SAAS,EAAC,6CAA6C,GACvD,EACF,eACE,SAAS,EAAC,mFAAmF,iBACjF,MAAM,YAElB,KAAC,IAAI,IAAC,SAAS,EAAC,2CAA2C,GAAG,GACzD,IACN,CACJ,CAAC,CAAC,CAAC;4BACF,2DAA2D;4BAC3D,2DAA2D;4BAC3D,0DAA0D;4BAC1D,0DAA0D;4BAC1D,4DAA4D;4BAC5D,iEAAiE;4BACjE,KAAC,KAAK,IACJ,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,SAAS,KAAK,GAAG,CAAC,EAAE,EACzB,IAAI,QACJ,SAAS,EAAC,gBAAgB,EAC1B,KAAK,EAAC,yDAAyD,GAC/D,CACH,EAGA,KAAK,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAC9B,cAAK,SAAS,EAAC,uGAAuG,wBAEhH,CACP,EAGA,WAAW,IAAI,CACd,cAAK,SAAS,EAAC,2FAA2F,sBAEpG,CACP,EAGD,cAAK,SAAS,EAAC,uEAAuE,YACpF,eAAK,SAAS,EAAC,8GAA8G,aAE1H,KAAK,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAC9B,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,EACvC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,EAAE,CACX,4CAA4C,EAC5C,kCAAkC,EAClC,iDAAiD,CAClD,EACD,KAAK,EAAC,cAAc,YAEpB,KAAC,IAAI,IAAC,SAAS,EAAC,SAAS,GAAG,GACrB,CACV,EAGD,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EAClC,QAAQ,EAAE,QAAQ,IAAI,aAAa,KAAK,IAAI,EAC5C,SAAS,EAAE,EAAE,CACX,6DAA6D,EAC7D,2CAA2C,EAC3C,iDAAiD,CAClD,EACD,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,YAEnD,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,CACzB,KAAC,OAAO,IAAC,SAAS,EAAC,sBAAsB,GAAG,CAC7C,CAAC,CAAC,CAAC,CACF,KAAC,MAAM,IAAC,SAAS,EAAC,SAAS,GAAG,CAC/B,GACM,IACL,GACF,EAGN,cAAK,SAAS,EAAC,qGAAqG,YAClH,KAAC,YAAY,IAAC,SAAS,EAAC,oBAAoB,GAAG,GAC3C,KA1GD,GAAG,CA2GJ,CACP,CAAA;gBACH,CAAC,CAAC,GACE,CACP,EAGA,UAAU,IAAI,CACb,KAAC,QAAQ,IACP,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EACzC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,EAChC,QAAQ,EAAE,QAAQ,IAAI,WAAW,EACjC,SAAS,EAAC,eAAe,YAEzB,cAAK,SAAS,EAAC,uBAAuB,YACnC,WAAW,CAAC,CAAC,CAAC,CACb,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,OAAO,IAAC,SAAS,EAAC,8BAA8B,GAAG,EACpD,YAAG,SAAS,EAAC,SAAS,6BAAiB,EACtC,QAAQ,IAAI,CACX,eAAK,SAAS,EAAC,8BAA8B,aAC3C,cAAK,SAAS,EAAC,6CAA6C,YAC1D,cACE,SAAS,EAAC,+CAA+C,EACzD,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,UAAU,GAAG,EAAE,GAC3C,GACE,EACN,aAAG,SAAS,EAAC,cAAc,aAAE,QAAQ,CAAC,UAAU,SAAM,IAClD,CACP,IACG,CACP,CAAC,CAAC,CAAC,CACF,8BACE,KAAC,SAAS,IAAC,SAAS,EAAC,wBAAwB,GAAG,EAChD,YAAG,SAAS,EAAC,qBAAqB,YAC/B,QAAQ,CAAC,MAAM,KAAK,CAAC;oCACpB,CAAC,CAAC,mBAAmB;oCACrB,CAAC,CAAC,gBAAgB,GAClB,EACJ,YAAG,SAAS,EAAC,cAAc,0DAEvB,EACJ,aAAG,SAAS,EAAC,kCAAkC,aAC5C,QAAQ,CAAC,MAAM,SAAK,SAAS,cAC5B,IACH,CACJ,GACG,GACG,CACZ,EAGA,CAAC,UAAU,IAAI,CACd,aAAG,SAAS,EAAC,2CAA2C,yBAC7C,SAAS,+CAChB,CACL,EAGA,KAAK,IAAI,CACR,eAAK,SAAS,EAAC,kDAAkD,aAC/D,KAAC,WAAW,IAAC,SAAS,EAAC,uBAAuB,GAAG,EACjD,yBAAO,KAAK,GAAQ,EACpB,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,KAAK,EACd,SAAS,EAAC,sCAAsC,sBAGzC,IACL,CACP,EAGA,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,YAAG,SAAS,EAAC,+BAA+B,qIAGxC,CACL,IACG,CACP,CAAA;AACH,CAAC;AAED,eAAe,kBAAkB,CAAA"}
|
|
1
|
+
{"version":3,"file":"ImageGalleryUpload.js","sourceRoot":"","sources":["../../../src/media/components/ImageGalleryUpload.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageUpload.d.ts","sourceRoot":"","sources":["../../../src/media/components/ImageUpload.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ImageUpload.d.ts","sourceRoot":"","sources":["../../../src/media/components/ImageUpload.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAShD;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,MAAM,EACN,QAAQ,EACR,SAAc,EACd,QAAgB,EAChB,SAAS,EACT,WAA+B,EAC/B,WAAoB,GACrB,EAAE,gBAAgB,2CA4MlB;AAED,eAAe,WAAW,CAAA"}
|
|
@@ -6,12 +6,15 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
6
6
|
* Single image upload component with preview, progress, and delete functionality.
|
|
7
7
|
*/
|
|
8
8
|
import { useState, useCallback } from 'react';
|
|
9
|
+
import dynamic from 'next/dynamic';
|
|
9
10
|
import Image from 'next/image';
|
|
10
|
-
import { ImageIcon, Trash2, Loader2, AlertCircle } from 'lucide-react';
|
|
11
|
+
import { ImageIcon, Trash2, Loader2, AlertCircle, FolderOpen } from 'lucide-react';
|
|
11
12
|
import { cn } from '../../core/utils';
|
|
12
13
|
import { useUpload } from '../hooks/useUpload';
|
|
13
14
|
import { DropZone } from './DropZone';
|
|
14
15
|
import { DEFAULT_UPLOAD_CONFIG } from '../types';
|
|
16
|
+
// Lazy — the picker modal (and its file listing) loads only when opened.
|
|
17
|
+
const MediaLibraryPicker = dynamic(() => import('../../admin/components/MediaLibraryPicker').then((m) => m.MediaLibraryPicker), { ssr: false });
|
|
15
18
|
/**
|
|
16
19
|
* Single image upload component.
|
|
17
20
|
*
|
|
@@ -27,6 +30,7 @@ import { DEFAULT_UPLOAD_CONFIG } from '../types';
|
|
|
27
30
|
*/
|
|
28
31
|
export function ImageUpload({ value, onChange, onSave, folder, entityId, maxSizeMB = 10, disabled = false, className, placeholder = 'Upload an image', aspectRatio = '16/9', }) {
|
|
29
32
|
const [isDeleting, setIsDeleting] = useState(false);
|
|
33
|
+
const [pickerOpen, setPickerOpen] = useState(false);
|
|
30
34
|
// Upload hook
|
|
31
35
|
const { upload, isUploading, progress, error, reset } = useUpload({
|
|
32
36
|
folder,
|
|
@@ -83,7 +87,17 @@ export function ImageUpload({ value, onChange, onSave, folder, entityId, maxSize
|
|
|
83
87
|
const handleRetry = useCallback(() => {
|
|
84
88
|
reset();
|
|
85
89
|
}, [reset]);
|
|
86
|
-
|
|
90
|
+
// Reuse an existing library file instead of re-uploading.
|
|
91
|
+
const handlePick = useCallback((urls) => {
|
|
92
|
+
const url = urls[0];
|
|
93
|
+
if (!url)
|
|
94
|
+
return;
|
|
95
|
+
onChange(url);
|
|
96
|
+
onSave?.(url).catch((err) => {
|
|
97
|
+
console.error('[ImageUpload] Failed to save after library pick:', err);
|
|
98
|
+
});
|
|
99
|
+
}, [onChange, onSave]);
|
|
100
|
+
return (_jsxs("div", { className: cn('space-y-2', className), children: [value ? (_jsxs("div", { className: "relative rounded-lg border border-border overflow-hidden", children: [_jsx("div", { className: "relative bg-muted", style: { aspectRatio }, children: _jsx(Image, { src: value, alt: "Uploaded image", fill: true, className: "object-cover", sizes: "(max-width: 768px) 100vw, 50vw" }) }), _jsx("div", { className: "absolute inset-0 bg-black/0 hover:bg-black/40 transition-colors group", children: _jsx("div", { className: "absolute inset-0 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity", children: _jsx("button", { type: "button", onClick: handleDelete, disabled: disabled || isDeleting, className: cn('rounded-full bg-destructive p-2 text-destructive-foreground', 'hover:bg-destructive/90 transition-colors', 'disabled:opacity-50 disabled:cursor-not-allowed'), title: "Remove image", children: isDeleting ? (_jsx(Loader2, { className: "h-5 w-5 animate-spin" })) : (_jsx(Trash2, { className: "h-5 w-5" })) }) }) })] })) : (_jsx(DropZone, { onFiles: handleFiles, multiple: false, accept: DEFAULT_UPLOAD_CONFIG.allowedTypes, maxSize: maxSizeMB * 1024 * 1024, disabled: disabled || isUploading, className: cn('min-h-[120px]', aspectRatio && `aspect-[${aspectRatio}]`), children: _jsx("div", { className: "text-muted-foreground", children: isUploading ? (_jsxs("div", { className: "space-y-2", children: [_jsx(Loader2, { className: "mx-auto h-8 w-8 animate-spin" }), _jsx("p", { className: "text-sm", children: "Uploading..." }), progress && (_jsxs("div", { className: "w-full max-w-[200px] mx-auto", children: [_jsx("div", { className: "h-1.5 bg-muted rounded-full overflow-hidden", children: _jsx("div", { className: "h-full bg-primary transition-all duration-300", style: { width: `${progress.percentage}%` } }) }), _jsxs("p", { className: "text-xs mt-1", children: [progress.percentage, "%"] })] }))] })) : (_jsxs(_Fragment, { children: [_jsx(ImageIcon, { className: "mx-auto h-10 w-10 mb-2" }), _jsx("p", { className: "text-sm font-medium", children: placeholder }), _jsx("p", { className: "text-xs mt-1", children: "Drop an image or click to browse" }), _jsxs("p", { className: "text-xs text-muted-foreground/70", children: ["Max ", maxSizeMB, "MB"] })] })) }) })), !value && !isUploading && (_jsxs("button", { type: "button", onClick: () => setPickerOpen(true), disabled: disabled, className: "inline-flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground disabled:opacity-50", children: [_jsx(FolderOpen, { className: "h-3.5 w-3.5" }), "Choose from library"] })), pickerOpen && (_jsx(MediaLibraryPicker, { isOpen: pickerOpen, onClose: () => setPickerOpen(false), onPick: handlePick })), error && (_jsxs("div", { className: "flex items-center gap-2 text-sm text-destructive", children: [_jsx(AlertCircle, { className: "h-4 w-4 flex-shrink-0" }), _jsx("span", { children: error }), _jsx("button", { type: "button", onClick: handleRetry, className: "text-primary hover:underline ml-auto", children: "Retry" })] }))] }));
|
|
87
101
|
}
|
|
88
102
|
export default ImageUpload;
|
|
89
103
|
//# sourceMappingURL=ImageUpload.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageUpload.js","sourceRoot":"","sources":["../../../src/media/components/ImageUpload.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAC7C,OAAO,KAAK,MAAM,YAAY,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"ImageUpload.js","sourceRoot":"","sources":["../../../src/media/components/ImageUpload.tsx"],"names":[],"mappings":"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"}
|
package/dist/media/index.d.ts
CHANGED
|
@@ -53,5 +53,7 @@ export type { MediaStorageConfig, UploadConfig, MediaFolder, PresignedUrlRequest
|
|
|
53
53
|
export { DEFAULT_UPLOAD_CONFIG, DEFAULT_MEDIA_UPLOAD_CONFIG, VIDEO_MIME_TYPES, validateFile, generateUniqueFilename, getFileExtension, isVideoUrl, isVideoMime, } from './types';
|
|
54
54
|
export { getMediaConfig, isMediaConfigured, requireMediaConfig, defaultUploadConfig, defaultMediaUploadConfig, getUploadConfig, getMediaUploadConfig, buildStorageKey, buildPublicUrl, extractKeyFromUrl, getMimeType, isAllowedImageType, isAllowedMediaType, } from './config';
|
|
55
55
|
export { useUpload } from './hooks';
|
|
56
|
+
export { CATEGORY_META, ADMIN_PROTECTED_CATEGORIES, MEDIA_CHIP_FILTERS, parseAssetKey, brandingKindFromKey, keyBelongsToProject, } from './taxonomy';
|
|
57
|
+
export type { AssetCategory, AssetKind, AssetOrigin, CategoryMeta, StoreAsset, AssetChipFilter, ParseAssetInput, } from './taxonomy';
|
|
56
58
|
export { DropZone, ImageUpload, ImageGalleryUpload } from './components';
|
|
57
59
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/media/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAMH,YAAY,EAEV,kBAAkB,EAClB,YAAY,EACZ,WAAW,EAEX,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EAEb,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,WAAW,EAEX,gBAAgB,EAChB,eAAe,EAEf,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EAEvB,cAAc,GACf,MAAM,SAAS,CAAA;AAMhB,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,EAChB,UAAU,EACV,WAAW,GACZ,MAAM,SAAS,CAAA;AAMhB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,UAAU,CAAA;AAMjB,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAMnC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/media/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAMH,YAAY,EAEV,kBAAkB,EAClB,YAAY,EACZ,WAAW,EAEX,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EAEb,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,WAAW,EAEX,gBAAgB,EAChB,eAAe,EAEf,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EAEvB,cAAc,GACf,MAAM,SAAS,CAAA;AAMhB,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,EAChB,UAAU,EACV,WAAW,GACZ,MAAM,SAAS,CAAA;AAMhB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,UAAU,CAAA;AAMjB,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAMnC,OAAO,EACL,aAAa,EACb,0BAA0B,EAC1B,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,aAAa,EACb,SAAS,EACT,WAAW,EACX,YAAY,EACZ,UAAU,EACV,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAA;AAMnB,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA"}
|
package/dist/media/index.js
CHANGED
|
@@ -62,6 +62,10 @@ export { getMediaConfig, isMediaConfigured, requireMediaConfig, defaultUploadCon
|
|
|
62
62
|
// =============================================================================
|
|
63
63
|
export { useUpload } from './hooks';
|
|
64
64
|
// =============================================================================
|
|
65
|
+
// Taxonomy (shared with the platform Assets Library — single source)
|
|
66
|
+
// =============================================================================
|
|
67
|
+
export { CATEGORY_META, ADMIN_PROTECTED_CATEGORIES, MEDIA_CHIP_FILTERS, parseAssetKey, brandingKindFromKey, keyBelongsToProject, } from './taxonomy';
|
|
68
|
+
// =============================================================================
|
|
65
69
|
// Components
|
|
66
70
|
// =============================================================================
|
|
67
71
|
export { DropZone, ImageUpload, ImageGalleryUpload } from './components';
|
package/dist/media/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/media/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAmCH,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAEhF,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,EAChB,UAAU,EACV,WAAW,GACZ,MAAM,SAAS,CAAA;AAEhB,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,UAAU,CAAA;AAEjB,gFAAgF;AAChF,QAAQ;AACR,gFAAgF;AAEhF,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEnC,gFAAgF;AAChF,aAAa;AACb,gFAAgF;AAEhF,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/media/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAmCH,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAEhF,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,EAChB,UAAU,EACV,WAAW,GACZ,MAAM,SAAS,CAAA;AAEhB,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,UAAU,CAAA;AAEjB,gFAAgF;AAChF,QAAQ;AACR,gFAAgF;AAEhF,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEnC,gFAAgF;AAChF,qEAAqE;AACrE,gFAAgF;AAEhF,OAAO,EACL,aAAa,EACb,0BAA0B,EAC1B,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,YAAY,CAAA;AAWnB,gFAAgF;AAChF,aAAa;AACb,gFAAgF;AAEhF,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -7,4 +7,5 @@
|
|
|
7
7
|
export { getR2Client, clearR2ClientCache, getBucketName, getPublicUrlBase, getStoreId } from './r2-client';
|
|
8
8
|
export { generatePresignedUrl, generatePresignedUrls, isR2Url, validateStoreUrl, type GeneratePresignedUrlOptions, } from './presign';
|
|
9
9
|
export { deleteFile, deleteFileByKey, deleteFiles, safeDeleteFile } from './delete';
|
|
10
|
+
export { listStoreFiles, type ListStoreFilesResult } from './list';
|
|
10
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/media/server/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAG1G,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,OAAO,EACP,gBAAgB,EAChB,KAAK,2BAA2B,GACjC,MAAM,WAAW,CAAA;AAGlB,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/media/server/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAG1G,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,OAAO,EACP,gBAAgB,EAChB,KAAK,2BAA2B,GACjC,MAAM,WAAW,CAAA;AAGlB,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAGnF,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,QAAQ,CAAA"}
|
|
@@ -10,4 +10,6 @@ export { getR2Client, clearR2ClientCache, getBucketName, getPublicUrlBase, getSt
|
|
|
10
10
|
export { generatePresignedUrl, generatePresignedUrls, isR2Url, validateStoreUrl, } from './presign';
|
|
11
11
|
// File Deletion
|
|
12
12
|
export { deleteFile, deleteFileByKey, deleteFiles, safeDeleteFile } from './delete';
|
|
13
|
+
// File Listing (admin Files page)
|
|
14
|
+
export { listStoreFiles } from './list';
|
|
13
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/media/server/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY;AACZ,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE1G,iBAAiB;AACjB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,OAAO,EACP,gBAAgB,GAEjB,MAAM,WAAW,CAAA;AAElB,gBAAgB;AAChB,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/media/server/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY;AACZ,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE1G,iBAAiB;AACjB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,OAAO,EACP,gBAAgB,GAEjB,MAAM,WAAW,CAAA;AAElB,gBAAgB;AAChB,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAEnF,kCAAkC;AAClC,OAAO,EAAE,cAAc,EAA6B,MAAM,QAAQ,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @rovela-ai/sdk/media/server/list
|
|
3
|
+
*
|
|
4
|
+
* R2 listing for the admin Files page. Server-side only.
|
|
5
|
+
*
|
|
6
|
+
* Lists every object under the store's own prefix (`stores/{storeId}/`) —
|
|
7
|
+
* the same live storage the platform Assets Library reads, so both surfaces
|
|
8
|
+
* converge by construction (no sync layer, R2 is the source of truth).
|
|
9
|
+
*/
|
|
10
|
+
import type { MediaStorageConfig } from '../types';
|
|
11
|
+
import { type StoreAsset } from '../taxonomy';
|
|
12
|
+
export interface ListStoreFilesResult {
|
|
13
|
+
assets: StoreAsset[];
|
|
14
|
+
/** True when the listing stopped at MAX_ASSETS (older objects omitted). */
|
|
15
|
+
truncated: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* List and parse every recognised asset under this store's R2 prefix,
|
|
19
|
+
* newest first. Unrecognised keys (foreign prefixes, partial uploads) are
|
|
20
|
+
* skipped silently per the taxonomy contract.
|
|
21
|
+
*/
|
|
22
|
+
export declare function listStoreFiles(config?: MediaStorageConfig): Promise<ListStoreFilesResult>;
|
|
23
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/media/server/list.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAGlD,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAA;AAS5D,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,UAAU,EAAE,CAAA;IACpB,2EAA2E;IAC3E,SAAS,EAAE,OAAO,CAAA;CACnB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,oBAAoB,CAAC,CAyC/B"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @rovela-ai/sdk/media/server/list
|
|
3
|
+
*
|
|
4
|
+
* R2 listing for the admin Files page. Server-side only.
|
|
5
|
+
*
|
|
6
|
+
* Lists every object under the store's own prefix (`stores/{storeId}/`) —
|
|
7
|
+
* the same live storage the platform Assets Library reads, so both surfaces
|
|
8
|
+
* converge by construction (no sync layer, R2 is the source of truth).
|
|
9
|
+
*/
|
|
10
|
+
import { ListObjectsV2Command } from '@aws-sdk/client-s3';
|
|
11
|
+
import { requireMediaConfig } from '../config';
|
|
12
|
+
import { getR2Client, getBucketName, getPublicUrlBase, getStoreId } from './r2-client';
|
|
13
|
+
import { parseAssetKey } from '../taxonomy';
|
|
14
|
+
/**
|
|
15
|
+
* Hard ceiling on parsed assets returned in one listing. Stores live well
|
|
16
|
+
* under this; the cap is a runaway guard, not a pagination scheme — the
|
|
17
|
+
* Files page filters client-side.
|
|
18
|
+
*/
|
|
19
|
+
const MAX_ASSETS = 2000;
|
|
20
|
+
/**
|
|
21
|
+
* List and parse every recognised asset under this store's R2 prefix,
|
|
22
|
+
* newest first. Unrecognised keys (foreign prefixes, partial uploads) are
|
|
23
|
+
* skipped silently per the taxonomy contract.
|
|
24
|
+
*/
|
|
25
|
+
export async function listStoreFiles(config) {
|
|
26
|
+
const resolvedConfig = config || requireMediaConfig();
|
|
27
|
+
const client = getR2Client(resolvedConfig);
|
|
28
|
+
const bucket = getBucketName(resolvedConfig);
|
|
29
|
+
const publicUrlBase = getPublicUrlBase(resolvedConfig);
|
|
30
|
+
const storeId = getStoreId(resolvedConfig);
|
|
31
|
+
const assets = [];
|
|
32
|
+
let continuationToken;
|
|
33
|
+
let truncated = false;
|
|
34
|
+
do {
|
|
35
|
+
const page = await client.send(new ListObjectsV2Command({
|
|
36
|
+
Bucket: bucket,
|
|
37
|
+
Prefix: `stores/${storeId}/`,
|
|
38
|
+
MaxKeys: 1000,
|
|
39
|
+
ContinuationToken: continuationToken,
|
|
40
|
+
}));
|
|
41
|
+
for (const obj of page.Contents ?? []) {
|
|
42
|
+
if (!obj.Key)
|
|
43
|
+
continue;
|
|
44
|
+
const asset = parseAssetKey({
|
|
45
|
+
key: obj.Key,
|
|
46
|
+
size: obj.Size ?? 0,
|
|
47
|
+
lastModified: obj.LastModified ?? new Date(0),
|
|
48
|
+
publicUrlBase,
|
|
49
|
+
});
|
|
50
|
+
if (asset)
|
|
51
|
+
assets.push(asset);
|
|
52
|
+
if (assets.length >= MAX_ASSETS) {
|
|
53
|
+
truncated = true;
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
continuationToken = truncated ? undefined : page.NextContinuationToken;
|
|
58
|
+
} while (continuationToken);
|
|
59
|
+
assets.sort((a, b) => b.lastModified.localeCompare(a.lastModified));
|
|
60
|
+
return { assets, truncated };
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/media/server/list.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAEzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACtF,OAAO,EAAE,aAAa,EAAmB,MAAM,aAAa,CAAA;AAE5D;;;;GAIG;AACH,MAAM,UAAU,GAAG,IAAI,CAAA;AAQvB;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAA2B;IAE3B,MAAM,cAAc,GAAG,MAAM,IAAI,kBAAkB,EAAE,CAAA;IACrD,MAAM,MAAM,GAAG,WAAW,CAAC,cAAc,CAAC,CAAA;IAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,cAAc,CAAC,CAAA;IAC5C,MAAM,aAAa,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAA;IACtD,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IAE1C,MAAM,MAAM,GAAiB,EAAE,CAAA;IAC/B,IAAI,iBAAqC,CAAA;IACzC,IAAI,SAAS,GAAG,KAAK,CAAA;IAErB,GAAG,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAC5B,IAAI,oBAAoB,CAAC;YACvB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,UAAU,OAAO,GAAG;YAC5B,OAAO,EAAE,IAAI;YACb,iBAAiB,EAAE,iBAAiB;SACrC,CAAC,CACH,CAAA;QAED,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,GAAG,CAAC,GAAG;gBAAE,SAAQ;YACtB,MAAM,KAAK,GAAG,aAAa,CAAC;gBAC1B,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC;gBACnB,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC;gBAC7C,aAAa;aACd,CAAC,CAAA;YACF,IAAI,KAAK;gBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC7B,IAAI,MAAM,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;gBAChC,SAAS,GAAG,IAAI,CAAA;gBAChB,MAAK;YACP,CAAC;QACH,CAAC;QAED,iBAAiB,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAA;IACxE,CAAC,QAAQ,iBAAiB,EAAC;IAE3B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAA;IACnE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;AAC9B,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @rovela-ai/sdk/media/taxonomy
|
|
3
|
+
*
|
|
4
|
+
* Asset taxonomy — the single source of truth for classifying every R2
|
|
5
|
+
* object under `stores/{storeId}/...` into a typed `StoreAsset`. Shared by
|
|
6
|
+
* TWO surfaces that list the same storage live (no sync layer by design):
|
|
7
|
+
*
|
|
8
|
+
* - the store admin's Files page (SDK, /admin/files)
|
|
9
|
+
* - the Rovela platform's Assets Library (`lib/assets/categories.ts`
|
|
10
|
+
* re-exports this module — never fork the parse logic there)
|
|
11
|
+
*
|
|
12
|
+
* Well-known prefixes:
|
|
13
|
+
* branding/{logo|favicon} — merchant-uploaded logos (canonical keys, no extension)
|
|
14
|
+
* products/{...} — product photos
|
|
15
|
+
* products/videos/{...} — product videos
|
|
16
|
+
* variants/{...} — variant images (admin upload folder)
|
|
17
|
+
* categories/{...} — category cover images (admin upload folder)
|
|
18
|
+
* locations/{...} — store-location images (admin upload folder)
|
|
19
|
+
* general/{...} — untyped admin uploads
|
|
20
|
+
* chat-attachments/{...} — platform chat / library uploads (any kind)
|
|
21
|
+
* generated/products/{...} — AI-generated product images
|
|
22
|
+
* generated/library/{...} — AI-generated library images
|
|
23
|
+
* generated/{...} — AI-generated section images
|
|
24
|
+
* references/{...} — reference screenshots (system)
|
|
25
|
+
* thumbnail.jpg — post-deploy store thumbnail (system)
|
|
26
|
+
*
|
|
27
|
+
* Adding a category: append the union value, define META, extend
|
|
28
|
+
* `categoryFromInnerPath` (more specific prefixes FIRST). Removing one is a
|
|
29
|
+
* fleet decision — unrecognised keys parse to `null` and are silently
|
|
30
|
+
* skipped by every list surface.
|
|
31
|
+
*/
|
|
32
|
+
/** Discriminator that names every well-known prefix. */
|
|
33
|
+
export type AssetCategory = 'logo' | 'favicon' | 'product-image' | 'product-video' | 'category-image' | 'location-image' | 'general-upload' | 'chat-upload' | 'ai-generated' | 'ai-generated-product' | 'ai-generated-library' | 'reference' | 'thumbnail';
|
|
34
|
+
export type AssetKind = 'image' | 'video' | 'other';
|
|
35
|
+
export type AssetOrigin = 'upload' | 'ai-generated' | 'system';
|
|
36
|
+
export interface CategoryMeta {
|
|
37
|
+
id: AssetCategory;
|
|
38
|
+
/** Human label used in row "Type" column + tooltips. */
|
|
39
|
+
label: string;
|
|
40
|
+
origin: AssetOrigin;
|
|
41
|
+
}
|
|
42
|
+
export declare const CATEGORY_META: Record<AssetCategory, CategoryMeta>;
|
|
43
|
+
/**
|
|
44
|
+
* Categories the store ADMIN must never delete: branding assets are wired
|
|
45
|
+
* into env vars + the platform branding helpers (deleting the raw object
|
|
46
|
+
* would leave a dangling logo URL on the deployed store), and system
|
|
47
|
+
* artifacts (references, thumbnail) belong to the platform pipeline.
|
|
48
|
+
*/
|
|
49
|
+
export declare const ADMIN_PROTECTED_CATEGORIES: ReadonlySet<AssetCategory>;
|
|
50
|
+
/**
|
|
51
|
+
* The unified asset row consumed by every Files/Library UI. `key` is the
|
|
52
|
+
* canonical R2 object key (use it for delete); `url` is the public R2 URL.
|
|
53
|
+
*/
|
|
54
|
+
export interface StoreAsset {
|
|
55
|
+
/** Canonical R2 object key. Stable; used for delete. */
|
|
56
|
+
key: string;
|
|
57
|
+
/** Parsed from the key (`stores/{projectId}/...`). */
|
|
58
|
+
projectId: string;
|
|
59
|
+
category: AssetCategory;
|
|
60
|
+
/** Public R2 URL (publicUrlBase + '/' + key). */
|
|
61
|
+
url: string;
|
|
62
|
+
/** Display name — `{timestamp}_` prefix stripped for uploaded files. */
|
|
63
|
+
name: string;
|
|
64
|
+
/** Bytes (R2 ContentLength / Size). */
|
|
65
|
+
size: number;
|
|
66
|
+
/** ISO 8601 from R2 LastModified. */
|
|
67
|
+
lastModified: string;
|
|
68
|
+
kind: AssetKind;
|
|
69
|
+
origin: AssetOrigin;
|
|
70
|
+
}
|
|
71
|
+
export interface AssetChipFilter {
|
|
72
|
+
/** Slug used in URL query / state. */
|
|
73
|
+
id: string;
|
|
74
|
+
label: string;
|
|
75
|
+
test: (asset: StoreAsset) => boolean;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Media chips shared by the admin Files page and the platform Assets
|
|
79
|
+
* Library. "All" first; order is the render order.
|
|
80
|
+
*/
|
|
81
|
+
export declare const MEDIA_CHIP_FILTERS: AssetChipFilter[];
|
|
82
|
+
export interface ParseAssetInput {
|
|
83
|
+
/** Canonical R2 key. */
|
|
84
|
+
key: string;
|
|
85
|
+
/** Bytes — `Size` from ListObjectsV2 `Contents`. */
|
|
86
|
+
size: number;
|
|
87
|
+
/** `LastModified` from ListObjectsV2 — Date or ISO string. */
|
|
88
|
+
lastModified: Date | string;
|
|
89
|
+
/** R2 public URL base (no trailing slash). */
|
|
90
|
+
publicUrlBase: string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Parse one R2 object into a StoreAsset. Returns `null` for keys outside
|
|
94
|
+
* the `stores/{id}/` namespace or with unknown prefixes — callers SKIP
|
|
95
|
+
* nulls so stray objects never surface.
|
|
96
|
+
*/
|
|
97
|
+
export declare function parseAssetKey({ key, size, lastModified, publicUrlBase, }: ParseAssetInput): StoreAsset | null;
|
|
98
|
+
/**
|
|
99
|
+
* Branding-key sniffer — 'logo' / 'favicon' / null. Used by the platform's
|
|
100
|
+
* generic DELETE route to forward to the branding handlers (which also clear
|
|
101
|
+
* `blueprint.store.{logo|favicon}Url` + PATCH Vercel envs).
|
|
102
|
+
*/
|
|
103
|
+
export declare function brandingKindFromKey(key: string): 'logo' | 'favicon' | null;
|
|
104
|
+
/** Authz guard: confirms a key belongs to the given store/project. */
|
|
105
|
+
export declare function keyBelongsToProject(key: string, projectId: string): boolean;
|
|
106
|
+
//# sourceMappingURL=taxonomy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taxonomy.d.ts","sourceRoot":"","sources":["../../src/media/taxonomy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,wDAAwD;AACxD,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,SAAS,GACT,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,gBAAgB,GAChB,aAAa,GACb,cAAc,GACd,sBAAsB,GACtB,sBAAsB,GACtB,WAAW,GACX,WAAW,CAAA;AAEf,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;AACnD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,cAAc,GAAG,QAAQ,CAAA;AAE9D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,aAAa,CAAA;IACjB,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,WAAW,CAAA;CACpB;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,YAAY,CAsB7D,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,EAAE,WAAW,CAAC,aAAa,CAKhE,CAAA;AAEF;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,wDAAwD;IACxD,GAAG,EAAE,MAAM,CAAA;IACX,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,aAAa,CAAA;IACvB,iDAAiD;IACjD,GAAG,EAAE,MAAM,CAAA;IACX,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAA;IACZ,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,SAAS,CAAA;IACf,MAAM,EAAE,WAAW,CAAA;CACpB;AAMD,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAA;CACrC;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,eAAe,EAoC/C,CAAA;AAkED,MAAM,WAAW,eAAe;IAC9B,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAA;IACZ,8DAA8D;IAC9D,YAAY,EAAE,IAAI,GAAG,MAAM,CAAA;IAC3B,8CAA8C;IAC9C,aAAa,EAAE,MAAM,CAAA;CACtB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAC5B,GAAG,EACH,IAAI,EACJ,YAAY,EACZ,aAAa,GACd,EAAE,eAAe,GAAG,UAAU,GAAG,IAAI,CAyBrC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAG1E;AAED,sEAAsE;AACtE,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAE3E"}
|