@rovela-ai/sdk 0.3.21 → 0.3.22
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/ProductForm.d.ts.map +1 -1
- package/dist/admin/components/ProductForm.js +14 -5
- package/dist/admin/components/ProductForm.js.map +1 -1
- package/dist/admin/components/VariantManager.d.ts +1 -0
- package/dist/admin/components/VariantManager.d.ts.map +1 -1
- package/dist/admin/components/VariantManager.js +58 -3
- package/dist/admin/components/VariantManager.js.map +1 -1
- package/dist/admin/types.d.ts +5 -0
- package/dist/admin/types.d.ts.map +1 -1
- package/dist/core/db/queries.d.ts +22 -16
- package/dist/core/db/queries.d.ts.map +1 -1
- package/dist/core/db/schema.d.ts +39 -1
- package/dist/core/db/schema.d.ts.map +1 -1
- package/dist/core/db/schema.js +2 -0
- package/dist/core/db/schema.js.map +1 -1
- package/dist/core/types.d.ts +2 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/media/api/presign.d.ts.map +1 -1
- package/dist/media/api/presign.js +5 -3
- package/dist/media/api/presign.js.map +1 -1
- package/dist/media/components/ImageGalleryUpload.d.ts +6 -3
- package/dist/media/components/ImageGalleryUpload.d.ts.map +1 -1
- package/dist/media/components/ImageGalleryUpload.js +97 -57
- package/dist/media/components/ImageGalleryUpload.js.map +1 -1
- package/dist/media/config.d.ts +27 -1
- package/dist/media/config.d.ts.map +1 -1
- package/dist/media/config.js +48 -1
- package/dist/media/config.js.map +1 -1
- package/dist/media/index.d.ts +2 -2
- package/dist/media/index.d.ts.map +1 -1
- package/dist/media/index.js +2 -2
- package/dist/media/index.js.map +1 -1
- package/dist/media/types.d.ts +48 -6
- package/dist/media/types.d.ts.map +1 -1
- package/dist/media/types.js +44 -1
- package/dist/media/types.js.map +1 -1
- package/dist/products/components/ProductDetails.d.ts.map +1 -1
- package/dist/products/components/ProductDetails.js +20 -9
- package/dist/products/components/ProductDetails.js.map +1 -1
- package/dist/products/components/ProductGallery.d.ts +24 -19
- package/dist/products/components/ProductGallery.d.ts.map +1 -1
- package/dist/products/components/ProductGallery.js +48 -31
- package/dist/products/components/ProductGallery.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,73 +1,107 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx as _jsx,
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
/**
|
|
4
4
|
* @rovela-ai/sdk/media/components/ImageGalleryUpload
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* Combined image + video gallery uploader for products.
|
|
7
|
+
*
|
|
8
|
+
* Originally a pure image gallery. Now accepts both kinds — images via
|
|
9
|
+
* `value`/`onChange` (back-compat) and videos via `videos`/`onVideosChange`.
|
|
10
|
+
* Internally renders a single ordered grid (images first, then videos);
|
|
11
|
+
* drag-to-reorder operates on the combined list and re-splits on drop by
|
|
12
|
+
* URL extension. Tile rendering branches on `isVideoUrl()`.
|
|
13
|
+
*
|
|
14
|
+
* The component name `ImageGalleryUpload` is kept for back-compat — the
|
|
15
|
+
* single in-tree consumer is `admin/components/ProductForm.tsx`.
|
|
8
16
|
*/
|
|
9
17
|
import { useState, useCallback } from 'react';
|
|
10
18
|
import Image from 'next/image';
|
|
11
|
-
import { ImagePlus, Trash2, Star, GripVertical, Loader2, AlertCircle } from 'lucide-react';
|
|
19
|
+
import { ImagePlus, Trash2, Star, GripVertical, Loader2, AlertCircle, Play, } from 'lucide-react';
|
|
12
20
|
import { cn } from '../../core/utils';
|
|
13
21
|
import { useUpload } from '../hooks/useUpload';
|
|
14
22
|
import { DropZone } from './DropZone';
|
|
15
|
-
import {
|
|
23
|
+
import { DEFAULT_MEDIA_UPLOAD_CONFIG, isVideoUrl, isVideoMime } from '../types';
|
|
16
24
|
/**
|
|
17
|
-
* Multi-
|
|
25
|
+
* Multi-media upload component for products. Accepts both images and videos.
|
|
18
26
|
*
|
|
19
27
|
* @example
|
|
20
28
|
* ```tsx
|
|
21
29
|
* <ImageGalleryUpload
|
|
22
30
|
* value={productImages}
|
|
23
|
-
* onChange={
|
|
31
|
+
* onChange={setProductImages}
|
|
32
|
+
* videos={productVideos}
|
|
33
|
+
* onVideosChange={setProductVideos}
|
|
34
|
+
* onSave={async (images, videos) => updateProduct({ images, videos })}
|
|
24
35
|
* folder="products"
|
|
25
36
|
* entityId={productId}
|
|
26
37
|
* maxImages={10}
|
|
27
38
|
* />
|
|
28
39
|
* ```
|
|
29
40
|
*/
|
|
30
|
-
export function ImageGalleryUpload({ value = [], onChange, onSave, folder, entityId, maxImages = 10, maxSizeMB =
|
|
41
|
+
export function ImageGalleryUpload({ value = [], onChange, videos, onVideosChange, onSave, folder, entityId, maxImages = 10, maxSizeMB = 100, disabled = false, className, }) {
|
|
42
|
+
const videosArr = videos ?? [];
|
|
43
|
+
// Combined list, images first then videos. Drag-to-reorder operates on
|
|
44
|
+
// this list; on drop we re-split by URL extension and call both setters.
|
|
45
|
+
const combined = [...value, ...videosArr];
|
|
31
46
|
const [deletingIndex, setDeletingIndex] = useState(null);
|
|
32
47
|
const [dragIndex, setDragIndex] = useState(null);
|
|
33
48
|
const [dragOverIndex, setDragOverIndex] = useState(null);
|
|
34
|
-
|
|
49
|
+
const splitByKind = useCallback((urls) => {
|
|
50
|
+
const images = [];
|
|
51
|
+
const vids = [];
|
|
52
|
+
for (const u of urls) {
|
|
53
|
+
if (isVideoUrl(u))
|
|
54
|
+
vids.push(u);
|
|
55
|
+
else
|
|
56
|
+
images.push(u);
|
|
57
|
+
}
|
|
58
|
+
return { images, videos: vids };
|
|
59
|
+
}, []);
|
|
60
|
+
const persistBoth = useCallback((nextImages, nextVideos) => {
|
|
61
|
+
onChange(nextImages);
|
|
62
|
+
onVideosChange?.(nextVideos);
|
|
63
|
+
onSave?.(nextImages, nextVideos).catch((err) => {
|
|
64
|
+
console.error('[ImageGalleryUpload] Failed to save:', err);
|
|
65
|
+
});
|
|
66
|
+
}, [onChange, onVideosChange, onSave]);
|
|
67
|
+
// Upload hook — routes new uploads to images or videos by MIME
|
|
35
68
|
const { upload, isUploading, progress, error, reset } = useUpload({
|
|
36
69
|
folder,
|
|
37
70
|
entityId,
|
|
38
71
|
config: {
|
|
39
72
|
maxSizeBytes: maxSizeMB * 1024 * 1024,
|
|
73
|
+
allowedTypes: DEFAULT_MEDIA_UPLOAD_CONFIG.allowedTypes,
|
|
40
74
|
},
|
|
41
75
|
onSuccess: (result) => {
|
|
42
|
-
if (result.url)
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
76
|
+
if (!result.url)
|
|
77
|
+
return;
|
|
78
|
+
const isVideo = isVideoMime(result.contentType) || isVideoUrl(result.url);
|
|
79
|
+
if (isVideo) {
|
|
80
|
+
persistBoth(value, [...videosArr, result.url]);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
persistBoth([...value, result.url], videosArr);
|
|
49
84
|
}
|
|
50
85
|
},
|
|
51
86
|
});
|
|
52
|
-
// Handle file selection
|
|
87
|
+
// Handle file selection (DropZone gives us pre-validated File[])
|
|
53
88
|
const handleFiles = useCallback(async (files) => {
|
|
54
89
|
if (disabled || isUploading)
|
|
55
90
|
return;
|
|
56
|
-
//
|
|
57
|
-
const remainingSlots = maxImages -
|
|
91
|
+
// Combined cap (images + videos)
|
|
92
|
+
const remainingSlots = maxImages - combined.length;
|
|
58
93
|
if (remainingSlots <= 0)
|
|
59
94
|
return;
|
|
60
95
|
const filesToUpload = files.slice(0, remainingSlots);
|
|
61
|
-
// Upload files sequentially
|
|
62
96
|
for (const file of filesToUpload) {
|
|
63
97
|
await upload(file);
|
|
64
98
|
}
|
|
65
|
-
}, [upload, disabled, isUploading, maxImages,
|
|
66
|
-
// Handle delete
|
|
99
|
+
}, [upload, disabled, isUploading, maxImages, combined.length]);
|
|
100
|
+
// Handle delete — figure out which array the URL lives in, drop it
|
|
67
101
|
const handleDelete = useCallback(async (index) => {
|
|
68
102
|
if (disabled || deletingIndex !== null)
|
|
69
103
|
return;
|
|
70
|
-
const url =
|
|
104
|
+
const url = combined[index];
|
|
71
105
|
if (!url)
|
|
72
106
|
return;
|
|
73
107
|
setDeletingIndex(index);
|
|
@@ -77,35 +111,30 @@ export function ImageGalleryUpload({ value = [], onChange, onSave, folder, entit
|
|
|
77
111
|
headers: { 'Content-Type': 'application/json' },
|
|
78
112
|
body: JSON.stringify({ url }),
|
|
79
113
|
});
|
|
80
|
-
// Remove from list after R2 deletion
|
|
81
|
-
const newImages = [...value];
|
|
82
|
-
newImages.splice(index, 1);
|
|
83
|
-
onChange(newImages);
|
|
84
|
-
// Auto-persist to database if onSave is provided (edit mode)
|
|
85
|
-
onSave?.(newImages).catch((err) => {
|
|
86
|
-
console.error('[ImageGalleryUpload] Failed to save after delete:', err);
|
|
87
|
-
});
|
|
88
114
|
}
|
|
89
115
|
catch (err) {
|
|
90
116
|
console.error('Delete error:', err);
|
|
91
|
-
//
|
|
92
|
-
const newImages = [...value];
|
|
93
|
-
newImages.splice(index, 1);
|
|
94
|
-
onChange(newImages);
|
|
95
|
-
// Still try to persist the removal to DB
|
|
96
|
-
onSave?.(newImages).catch(() => { });
|
|
117
|
+
// Continue regardless — local state should reflect user intent.
|
|
97
118
|
}
|
|
98
|
-
|
|
99
|
-
|
|
119
|
+
// Remove from whichever array owns it
|
|
120
|
+
const isVideo = isVideoUrl(url);
|
|
121
|
+
if (isVideo) {
|
|
122
|
+
const nextVideos = videosArr.filter((u) => u !== url);
|
|
123
|
+
persistBoth(value, nextVideos);
|
|
100
124
|
}
|
|
101
|
-
|
|
102
|
-
|
|
125
|
+
else {
|
|
126
|
+
const nextImages = value.filter((u) => u !== url);
|
|
127
|
+
persistBoth(nextImages, videosArr);
|
|
128
|
+
}
|
|
129
|
+
setDeletingIndex(null);
|
|
130
|
+
}, [combined, value, videosArr, persistBoth, disabled, deletingIndex]);
|
|
131
|
+
// Drag and drop reordering — operates on the combined list, re-splits by
|
|
132
|
+
// extension on drop so each kind ends up in its own array.
|
|
103
133
|
const handleDragStart = useCallback((e, index) => {
|
|
104
134
|
if (disabled)
|
|
105
135
|
return;
|
|
106
136
|
setDragIndex(index);
|
|
107
137
|
e.dataTransfer.effectAllowed = 'move';
|
|
108
|
-
// Set drag image (optional - use the element itself)
|
|
109
138
|
if (e.currentTarget instanceof HTMLElement) {
|
|
110
139
|
e.dataTransfer.setDragImage(e.currentTarget, 50, 50);
|
|
111
140
|
}
|
|
@@ -117,30 +146,41 @@ export function ImageGalleryUpload({ value = [], onChange, onSave, folder, entit
|
|
|
117
146
|
setDragOverIndex(index);
|
|
118
147
|
}, [dragIndex]);
|
|
119
148
|
const handleDragEnd = useCallback(() => {
|
|
120
|
-
if (dragIndex !== null &&
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
|
|
149
|
+
if (dragIndex !== null &&
|
|
150
|
+
dragOverIndex !== null &&
|
|
151
|
+
dragIndex !== dragOverIndex) {
|
|
152
|
+
const next = [...combined];
|
|
153
|
+
const [removed] = next.splice(dragIndex, 1);
|
|
154
|
+
next.splice(dragOverIndex, 0, removed);
|
|
155
|
+
const { images, videos: vids } = splitByKind(next);
|
|
156
|
+
persistBoth(images, vids);
|
|
126
157
|
}
|
|
127
158
|
setDragIndex(null);
|
|
128
159
|
setDragOverIndex(null);
|
|
129
|
-
}, [dragIndex, dragOverIndex,
|
|
160
|
+
}, [dragIndex, dragOverIndex, combined, persistBoth, splitByKind]);
|
|
130
161
|
const handleDragLeave = useCallback(() => {
|
|
131
162
|
setDragOverIndex(null);
|
|
132
163
|
}, []);
|
|
133
|
-
//
|
|
164
|
+
// "Make primary" — the first tile is the primary product image. Only
|
|
165
|
+
// applies when the moved tile is an image (videos can't be primary).
|
|
134
166
|
const handleMakePrimary = useCallback((index) => {
|
|
135
167
|
if (index === 0 || disabled)
|
|
136
168
|
return;
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
169
|
+
const url = combined[index];
|
|
170
|
+
if (!url || isVideoUrl(url))
|
|
171
|
+
return;
|
|
172
|
+
const nextImages = [url, ...value.filter((u) => u !== url)];
|
|
173
|
+
persistBoth(nextImages, videosArr);
|
|
174
|
+
}, [combined, value, videosArr, persistBoth, disabled]);
|
|
175
|
+
const canAddMore = combined.length < maxImages;
|
|
176
|
+
const dropZoneAccept = DEFAULT_MEDIA_UPLOAD_CONFIG.allowedTypes;
|
|
177
|
+
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
|
+
const tileIsVideo = isVideoUrl(url);
|
|
179
|
+
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', 'transition-all duration-200', dragIndex === index && 'opacity-50 scale-95', dragOverIndex === index &&
|
|
180
|
+
'ring-2 ring-primary ring-offset-2', !disabled && 'cursor-grab active:cursor-grabbing'), children: [tileIsVideo ? (_jsxs(_Fragment, { children: [_jsx("video", { src: url, preload: "metadata", muted: true, playsInline: true, className: "absolute inset-0 h-full w-full object-cover" }), _jsx("span", { className: "pointer-events-none absolute inset-0 flex items-center justify-center bg-black/15", "aria-hidden": "true", children: _jsx(Play, { className: "h-6 w-6 fill-white text-white drop-shadow" }) })] })) : (_jsx(Image, { src: url, alt: `Image ${index + 1}`, fill: true, className: "object-cover", 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));
|
|
181
|
+
}) })), 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
|
|
182
|
+
? 'Add product media'
|
|
183
|
+
: '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." }))] }));
|
|
144
184
|
}
|
|
145
185
|
export default ImageGalleryUpload;
|
|
146
186
|
//# 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
|
|
1
|
+
{"version":3,"file":"ImageGalleryUpload.js","sourceRoot":"","sources":["../../../src/media/components/ImageGalleryUpload.tsx"],"names":[],"mappings":"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"}
|
package/dist/media/config.d.ts
CHANGED
|
@@ -20,13 +20,35 @@ export declare function isMediaConfigured(): boolean;
|
|
|
20
20
|
*/
|
|
21
21
|
export declare function requireMediaConfig(): MediaStorageConfig;
|
|
22
22
|
/**
|
|
23
|
-
* Default upload configuration
|
|
23
|
+
* Default upload configuration (image-only).
|
|
24
|
+
*
|
|
25
|
+
* Used by single-image surfaces (logos, category covers, variant swatches)
|
|
26
|
+
* where accepting video would break downstream rendering. DO NOT widen this
|
|
27
|
+
* to include video MIMEs — use `defaultMediaUploadConfig` for surfaces that
|
|
28
|
+
* legitimately accept both kinds.
|
|
24
29
|
*/
|
|
25
30
|
export declare const defaultUploadConfig: UploadConfig;
|
|
31
|
+
/**
|
|
32
|
+
* Allowed video MIME types across the platform.
|
|
33
|
+
* MP4 (H.264) is the universal baseline; WebM and QuickTime/MOV are accepted
|
|
34
|
+
* because browsers + iOS export them natively.
|
|
35
|
+
*/
|
|
36
|
+
export declare const VIDEO_MIME_TYPES: readonly ["video/mp4", "video/webm", "video/quicktime"];
|
|
37
|
+
/**
|
|
38
|
+
* Default media upload configuration (images + videos).
|
|
39
|
+
*
|
|
40
|
+
* Used by product galleries and any surface where merchants legitimately
|
|
41
|
+
* upload either kind. 100MB cap is the platform-wide ceiling.
|
|
42
|
+
*/
|
|
43
|
+
export declare const defaultMediaUploadConfig: UploadConfig;
|
|
26
44
|
/**
|
|
27
45
|
* Get upload configuration with optional overrides
|
|
28
46
|
*/
|
|
29
47
|
export declare function getUploadConfig(overrides?: Partial<UploadConfig>): UploadConfig;
|
|
48
|
+
/**
|
|
49
|
+
* Get media upload configuration (images + videos) with optional overrides
|
|
50
|
+
*/
|
|
51
|
+
export declare function getMediaUploadConfig(overrides?: Partial<UploadConfig>): UploadConfig;
|
|
30
52
|
/**
|
|
31
53
|
* Build the storage key (path) for a file.
|
|
32
54
|
*
|
|
@@ -54,4 +76,8 @@ export declare function getMimeType(filename: string): string;
|
|
|
54
76
|
* Check if a MIME type is an allowed image type
|
|
55
77
|
*/
|
|
56
78
|
export declare function isAllowedImageType(mimeType: string, config?: UploadConfig): boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Check if a MIME type is an allowed media type (image or video).
|
|
81
|
+
*/
|
|
82
|
+
export declare function isAllowedMediaType(mimeType: string, config?: UploadConfig): boolean;
|
|
57
83
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/media/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAM/D;;;GAGG;AACH,wBAAgB,cAAc,IAAI,kBAAkB,GAAG,IAAI,CAqB1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,kBAAkB,CASvD;AAMD
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/media/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAM/D;;;GAGG;AACH,wBAAgB,cAAc,IAAI,kBAAkB,GAAG,IAAI,CAqB1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,kBAAkB,CASvD;AAMD;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,YAIjC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,yDAA0D,CAAA;AAEvF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,YAUtC,CAAA;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAK/E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAKpF;AAMD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAUR;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAIzE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQnF;AA0BD;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,YAAkC,GACzC,OAAO,CAET;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,YAAuC,GAC9C,OAAO,CAET"}
|
package/dist/media/config.js
CHANGED
|
@@ -53,13 +53,41 @@ export function requireMediaConfig() {
|
|
|
53
53
|
// Upload Configuration
|
|
54
54
|
// =============================================================================
|
|
55
55
|
/**
|
|
56
|
-
* Default upload configuration
|
|
56
|
+
* Default upload configuration (image-only).
|
|
57
|
+
*
|
|
58
|
+
* Used by single-image surfaces (logos, category covers, variant swatches)
|
|
59
|
+
* where accepting video would break downstream rendering. DO NOT widen this
|
|
60
|
+
* to include video MIMEs — use `defaultMediaUploadConfig` for surfaces that
|
|
61
|
+
* legitimately accept both kinds.
|
|
57
62
|
*/
|
|
58
63
|
export const defaultUploadConfig = {
|
|
59
64
|
maxSizeBytes: 10 * 1024 * 1024, // 10MB
|
|
60
65
|
allowedTypes: ['image/jpeg', 'image/png', 'image/webp', 'image/gif'],
|
|
61
66
|
maxFiles: 10,
|
|
62
67
|
};
|
|
68
|
+
/**
|
|
69
|
+
* Allowed video MIME types across the platform.
|
|
70
|
+
* MP4 (H.264) is the universal baseline; WebM and QuickTime/MOV are accepted
|
|
71
|
+
* because browsers + iOS export them natively.
|
|
72
|
+
*/
|
|
73
|
+
export const VIDEO_MIME_TYPES = ['video/mp4', 'video/webm', 'video/quicktime'];
|
|
74
|
+
/**
|
|
75
|
+
* Default media upload configuration (images + videos).
|
|
76
|
+
*
|
|
77
|
+
* Used by product galleries and any surface where merchants legitimately
|
|
78
|
+
* upload either kind. 100MB cap is the platform-wide ceiling.
|
|
79
|
+
*/
|
|
80
|
+
export const defaultMediaUploadConfig = {
|
|
81
|
+
maxSizeBytes: 100 * 1024 * 1024, // 100MB
|
|
82
|
+
allowedTypes: [
|
|
83
|
+
'image/jpeg',
|
|
84
|
+
'image/png',
|
|
85
|
+
'image/webp',
|
|
86
|
+
'image/gif',
|
|
87
|
+
...VIDEO_MIME_TYPES,
|
|
88
|
+
],
|
|
89
|
+
maxFiles: 10,
|
|
90
|
+
};
|
|
63
91
|
/**
|
|
64
92
|
* Get upload configuration with optional overrides
|
|
65
93
|
*/
|
|
@@ -69,6 +97,15 @@ export function getUploadConfig(overrides) {
|
|
|
69
97
|
...overrides,
|
|
70
98
|
};
|
|
71
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Get media upload configuration (images + videos) with optional overrides
|
|
102
|
+
*/
|
|
103
|
+
export function getMediaUploadConfig(overrides) {
|
|
104
|
+
return {
|
|
105
|
+
...defaultMediaUploadConfig,
|
|
106
|
+
...overrides,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
72
109
|
// =============================================================================
|
|
73
110
|
// Path Helpers
|
|
74
111
|
// =============================================================================
|
|
@@ -125,6 +162,10 @@ const EXTENSION_TO_MIME = {
|
|
|
125
162
|
bmp: 'image/bmp',
|
|
126
163
|
tiff: 'image/tiff',
|
|
127
164
|
tif: 'image/tiff',
|
|
165
|
+
// Video
|
|
166
|
+
mp4: 'video/mp4',
|
|
167
|
+
webm: 'video/webm',
|
|
168
|
+
mov: 'video/quicktime',
|
|
128
169
|
};
|
|
129
170
|
/**
|
|
130
171
|
* Get MIME type from filename extension
|
|
@@ -139,4 +180,10 @@ export function getMimeType(filename) {
|
|
|
139
180
|
export function isAllowedImageType(mimeType, config = defaultUploadConfig) {
|
|
140
181
|
return config.allowedTypes.includes(mimeType);
|
|
141
182
|
}
|
|
183
|
+
/**
|
|
184
|
+
* Check if a MIME type is an allowed media type (image or video).
|
|
185
|
+
*/
|
|
186
|
+
export function isAllowedMediaType(mimeType, config = defaultMediaUploadConfig) {
|
|
187
|
+
return config.allowedTypes.includes(mimeType);
|
|
188
|
+
}
|
|
142
189
|
//# sourceMappingURL=config.js.map
|
package/dist/media/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/media/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,gFAAgF;AAChF,+BAA+B;AAC/B,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAA;IAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAA;IAChD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAA;IACxD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAA;IAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAA;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAA;IAEpC,mBAAmB;IACnB,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,IAAI,CAAC,eAAe,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5F,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO;QACL,SAAS;QACT,WAAW;QACX,eAAe;QACf,UAAU;QACV,SAAS;QACT,OAAO;KACR,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,cAAc,EAAE,KAAK,IAAI,CAAA;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,gEAAgE;YAC9D,gGAAgG,CACnG,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,gFAAgF;AAChF,uBAAuB;AACvB,gFAAgF;AAEhF
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/media/config.ts"],"names":[],"mappings":"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"}
|
package/dist/media/index.d.ts
CHANGED
|
@@ -50,8 +50,8 @@
|
|
|
50
50
|
* @module media
|
|
51
51
|
*/
|
|
52
52
|
export type { MediaStorageConfig, UploadConfig, MediaFolder, PresignedUrlRequest, PresignedUrlResponse, PresignApiRequest, PresignApiResponse, DeleteApiRequest, DeleteApiResponse, MediaApiError, UploadProgress, UploadStatus, UploadResult, UploadState, UseUploadOptions, UseUploadReturn, DropZoneProps, ImageUploadProps, ImageGalleryUploadProps, FileValidation, } from './types';
|
|
53
|
-
export { DEFAULT_UPLOAD_CONFIG, validateFile, generateUniqueFilename, getFileExtension } from './types';
|
|
54
|
-
export { getMediaConfig, isMediaConfigured, requireMediaConfig, defaultUploadConfig, getUploadConfig, buildStorageKey, buildPublicUrl, extractKeyFromUrl, getMimeType, isAllowedImageType, } from './config';
|
|
53
|
+
export { DEFAULT_UPLOAD_CONFIG, DEFAULT_MEDIA_UPLOAD_CONFIG, VIDEO_MIME_TYPES, validateFile, generateUniqueFilename, getFileExtension, isVideoUrl, isVideoMime, } from './types';
|
|
54
|
+
export { getMediaConfig, isMediaConfigured, requireMediaConfig, defaultUploadConfig, defaultMediaUploadConfig, getUploadConfig, getMediaUploadConfig, buildStorageKey, buildPublicUrl, extractKeyFromUrl, getMimeType, isAllowedImageType, isAllowedMediaType, } from './config';
|
|
55
55
|
export { useUpload } from './hooks';
|
|
56
56
|
export { DropZone, ImageUpload, ImageGalleryUpload } from './components';
|
|
57
57
|
//# 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,
|
|
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"}
|
package/dist/media/index.js
CHANGED
|
@@ -52,11 +52,11 @@
|
|
|
52
52
|
// =============================================================================
|
|
53
53
|
// Constants & Utilities
|
|
54
54
|
// =============================================================================
|
|
55
|
-
export { DEFAULT_UPLOAD_CONFIG, validateFile, generateUniqueFilename, getFileExtension } from './types';
|
|
55
|
+
export { DEFAULT_UPLOAD_CONFIG, DEFAULT_MEDIA_UPLOAD_CONFIG, VIDEO_MIME_TYPES, validateFile, generateUniqueFilename, getFileExtension, isVideoUrl, isVideoMime, } from './types';
|
|
56
56
|
// =============================================================================
|
|
57
57
|
// Configuration
|
|
58
58
|
// =============================================================================
|
|
59
|
-
export { getMediaConfig, isMediaConfigured, requireMediaConfig, defaultUploadConfig, getUploadConfig, buildStorageKey, buildPublicUrl, extractKeyFromUrl, getMimeType, isAllowedImageType, } from './config';
|
|
59
|
+
export { getMediaConfig, isMediaConfigured, requireMediaConfig, defaultUploadConfig, defaultMediaUploadConfig, getUploadConfig, getMediaUploadConfig, buildStorageKey, buildPublicUrl, extractKeyFromUrl, getMimeType, isAllowedImageType, isAllowedMediaType, } from './config';
|
|
60
60
|
// =============================================================================
|
|
61
61
|
// Hooks
|
|
62
62
|
// =============================================================================
|
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,
|
|
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"}
|
package/dist/media/types.d.ts
CHANGED
|
@@ -33,9 +33,36 @@ export interface UploadConfig {
|
|
|
33
33
|
maxFiles: number;
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
|
-
* Default upload configuration
|
|
36
|
+
* Default upload configuration (image-only).
|
|
37
|
+
*
|
|
38
|
+
* Used by single-image surfaces (logos, category covers, variant swatches)
|
|
39
|
+
* where accepting video would break downstream rendering. DO NOT widen this
|
|
40
|
+
* to include video MIMEs — use `DEFAULT_MEDIA_UPLOAD_CONFIG` for surfaces
|
|
41
|
+
* that legitimately accept both kinds.
|
|
37
42
|
*/
|
|
38
43
|
export declare const DEFAULT_UPLOAD_CONFIG: UploadConfig;
|
|
44
|
+
/**
|
|
45
|
+
* Allowed video MIME types across the platform.
|
|
46
|
+
* MP4 (H.264) is the universal baseline; WebM and QuickTime/MOV are accepted
|
|
47
|
+
* because browsers + iOS export them natively. Other formats are rejected.
|
|
48
|
+
*/
|
|
49
|
+
export declare const VIDEO_MIME_TYPES: readonly ["video/mp4", "video/webm", "video/quicktime"];
|
|
50
|
+
/**
|
|
51
|
+
* Default media upload configuration (images + videos).
|
|
52
|
+
*
|
|
53
|
+
* Used by product galleries and any surface where merchants legitimately
|
|
54
|
+
* upload either kind. 100MB cap is the platform-wide ceiling.
|
|
55
|
+
*/
|
|
56
|
+
export declare const DEFAULT_MEDIA_UPLOAD_CONFIG: UploadConfig;
|
|
57
|
+
/**
|
|
58
|
+
* Detect whether a URL points at a video asset by file extension.
|
|
59
|
+
* Used by gallery components to decide between `<img>` and `<video>` rendering.
|
|
60
|
+
*/
|
|
61
|
+
export declare function isVideoUrl(url: string): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Detect whether a MIME type is a video.
|
|
64
|
+
*/
|
|
65
|
+
export declare function isVideoMime(mime: string): boolean;
|
|
39
66
|
/**
|
|
40
67
|
* Folder types for organizing uploads
|
|
41
68
|
*/
|
|
@@ -231,22 +258,37 @@ export interface ImageUploadProps {
|
|
|
231
258
|
aspectRatio?: string;
|
|
232
259
|
}
|
|
233
260
|
/**
|
|
234
|
-
* Props for ImageGalleryUpload component
|
|
261
|
+
* Props for ImageGalleryUpload component (now also accepts videos).
|
|
262
|
+
*
|
|
263
|
+
* Image arrays use `value` / `onChange` (back-compat naming). Videos use
|
|
264
|
+
* the optional `videos` / `onVideosChange` pair. The component renders
|
|
265
|
+
* them in a single combined gallery; drag-to-reorder works across the
|
|
266
|
+
* boundary and re-splits into the two arrays on drop.
|
|
235
267
|
*/
|
|
236
268
|
export interface ImageGalleryUploadProps {
|
|
237
269
|
/** Current array of image URLs */
|
|
238
270
|
value: string[];
|
|
239
271
|
/** Called when images change (updates local state) */
|
|
240
272
|
onChange: (urls: string[]) => void;
|
|
241
|
-
/**
|
|
242
|
-
|
|
273
|
+
/** Current array of video URLs (optional — image-only callers can omit) */
|
|
274
|
+
videos?: string[];
|
|
275
|
+
/** Called when videos change (optional — paired with `videos`) */
|
|
276
|
+
onVideosChange?: (urls: string[]) => void;
|
|
277
|
+
/**
|
|
278
|
+
* Called to persist media to the database after a change. Receives
|
|
279
|
+
* BOTH arrays so a single transaction can save the new state. Note: the
|
|
280
|
+
* older single-arg signature `(urls) => Promise<void>` is structurally
|
|
281
|
+
* compatible — TypeScript permits ignoring extra args — so callers that
|
|
282
|
+
* don't care about videos still type-check.
|
|
283
|
+
*/
|
|
284
|
+
onSave?: (images: string[], videos: string[]) => Promise<void>;
|
|
243
285
|
/** Target folder for uploads */
|
|
244
286
|
folder: MediaFolder;
|
|
245
287
|
/** Associated entity ID */
|
|
246
288
|
entityId?: string;
|
|
247
|
-
/** Maximum number of
|
|
289
|
+
/** Maximum number of media items allowed (images + videos combined) */
|
|
248
290
|
maxImages?: number;
|
|
249
|
-
/** Maximum file size
|
|
291
|
+
/** Maximum file size in MB (default 100, covers the platform-wide video cap) */
|
|
250
292
|
maxSizeMB?: number;
|
|
251
293
|
/** Whether upload is disabled */
|
|
252
294
|
disabled?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/media/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,+BAA+B;IAC/B,eAAe,EAAE,MAAM,CAAA;IACvB,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAA;IACjB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAA;IACpB,yBAAyB;IACzB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/media/types.ts"],"names":[],"mappings":"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"}
|