@geekapps/silo-elements-nextjs 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/FileUploader.d.ts +3 -0
- package/dist/FileUploader.d.ts.map +1 -0
- package/dist/FileUploader.js +43 -0
- package/dist/FileUploader.js.map +1 -0
- package/dist/ImageUploader.d.ts +3 -0
- package/dist/ImageUploader.d.ts.map +1 -0
- package/dist/ImageUploader.js +71 -0
- package/dist/ImageUploader.js.map +1 -0
- package/dist/MediaUploader.d.ts +3 -0
- package/dist/MediaUploader.d.ts.map +1 -0
- package/dist/MediaUploader.js +47 -0
- package/dist/MediaUploader.js.map +1 -0
- package/dist/VideoPlayer.d.ts +56 -0
- package/dist/VideoPlayer.d.ts.map +1 -0
- package/dist/VideoPlayer.js +738 -0
- package/dist/VideoPlayer.js.map +1 -0
- package/dist/VideoUploader.d.ts +3 -0
- package/dist/VideoUploader.d.ts.map +1 -0
- package/dist/VideoUploader.js +48 -0
- package/dist/VideoUploader.js.map +1 -0
- package/dist/components/DropZone.d.ts +17 -0
- package/dist/components/DropZone.d.ts.map +1 -0
- package/dist/components/DropZone.js +52 -0
- package/dist/components/DropZone.js.map +1 -0
- package/dist/components/ProgressBar.d.ts +9 -0
- package/dist/components/ProgressBar.d.ts.map +1 -0
- package/dist/components/ProgressBar.js +18 -0
- package/dist/components/ProgressBar.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +129 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/format.d.ts +3 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +29 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/theme.d.ts +5 -0
- package/dist/utils/theme.d.ts.map +1 -0
- package/dist/utils/theme.js +34 -0
- package/dist/utils/theme.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { FileUploaderProps } from "./types.js";
|
|
2
|
+
export declare function FileUploader({ bucket, expiresIn, private: isPrivate, onUpload, onError, className, style, disabled, maxSize, accept, multiple, theme, renderIcon, renderProgress, renderSuccess, renderError, children, }: FileUploaderProps): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
//# sourceMappingURL=FileUploader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileUploader.d.ts","sourceRoot":"","sources":["../src/FileUploader.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAMpD,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,SAAS,EACT,OAAO,EAAE,SAAgB,EACzB,QAAQ,EACR,OAAO,EACP,SAAc,EACd,KAAK,EACL,QAAgB,EAChB,OAAO,EACP,MAAM,EACN,QAAgB,EAChB,KAAK,EACL,UAAU,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,QAAQ,GACT,EAAE,iBAAiB,2CAwGnB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback } from "react";
|
|
4
|
+
import { useUpload } from "@silo/nextjs";
|
|
5
|
+
import { DropZone } from "./components/DropZone.js";
|
|
6
|
+
import { ProgressBar } from "./components/ProgressBar.js";
|
|
7
|
+
import { formatBytes } from "./utils/format.js";
|
|
8
|
+
import { resolveTheme, themeToVars } from "./utils/theme.js";
|
|
9
|
+
export function FileUploader({ bucket, expiresIn, private: isPrivate = true, onUpload, onError, className = "", style, disabled = false, maxSize, accept, multiple = false, theme, renderIcon, renderProgress, renderSuccess, renderError, children, }) {
|
|
10
|
+
const uploadOpts = { private: isPrivate, ...(bucket !== undefined && { bucket }), ...(expiresIn !== undefined && { expiresIn }) };
|
|
11
|
+
const { state, upload, reset } = useUpload(uploadOpts);
|
|
12
|
+
const t = resolveTheme(theme);
|
|
13
|
+
const vars = themeToVars(t);
|
|
14
|
+
const handleFiles = useCallback(async (files) => {
|
|
15
|
+
const file = files[0];
|
|
16
|
+
if (!file)
|
|
17
|
+
return;
|
|
18
|
+
try {
|
|
19
|
+
const result = await upload(file);
|
|
20
|
+
onUpload?.(result);
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
onError?.(err instanceof Error ? err : new Error(String(err)));
|
|
24
|
+
}
|
|
25
|
+
}, [upload, onUpload, onError]);
|
|
26
|
+
const containerStyle = {
|
|
27
|
+
...vars,
|
|
28
|
+
display: "flex",
|
|
29
|
+
flexDirection: "column",
|
|
30
|
+
gap: "12px",
|
|
31
|
+
width: "100%",
|
|
32
|
+
fontFamily: "var(--silo-font)",
|
|
33
|
+
...style,
|
|
34
|
+
};
|
|
35
|
+
if (state.status === "error" && renderError) {
|
|
36
|
+
return _jsx("div", { style: containerStyle, children: renderError(state.error, reset) });
|
|
37
|
+
}
|
|
38
|
+
if (state.status === "done" && renderSuccess) {
|
|
39
|
+
return _jsx("div", { style: containerStyle, children: renderSuccess(state.result) });
|
|
40
|
+
}
|
|
41
|
+
return (_jsxs("div", { className: `silo-file-uploader${className ? ` ${className}` : ""}`, style: containerStyle, children: [_jsx(DropZone, { ...(accept !== undefined && { accept }), ...(maxSize !== undefined && { maxSize }), ...(onError !== undefined && { onError }), ...(theme !== undefined && { theme }), multiple: multiple, disabled: disabled || state.status === "uploading", onFiles: handleFiles, style: { padding: "28px 24px", textAlign: "center" }, children: _jsxs("div", { style: { display: "flex", flexDirection: "column", alignItems: "center", gap: "8px" }, children: [renderIcon ? renderIcon() : (_jsx("svg", { width: "40", height: "40", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", style: { color: "var(--silo-text-muted)", opacity: 0.6 }, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M9 13h6m-3-3v6m5 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" }) })), children ?? (_jsxs(_Fragment, { children: [_jsx("span", { style: { fontWeight: 600, color: "var(--silo-text)" }, children: multiple ? "Drop files here" : "Drop a file here" }), _jsx("span", { style: { fontSize: "13px", color: "var(--silo-text-muted)" }, children: "or click to browse" }), maxSize && _jsxs("span", { style: { fontSize: "12px", color: "var(--silo-text-muted)" }, children: ["Max ", formatBytes(maxSize)] })] }))] }) }), state.status === "uploading" && (_jsx("div", { style: { display: "flex", flexDirection: "column", gap: "6px" }, children: renderProgress ? renderProgress(state.progress) : (_jsxs(_Fragment, { children: [_jsxs("div", { style: { display: "flex", justifyContent: "space-between", fontSize: "13px", color: "var(--silo-text-muted)" }, children: [_jsx("span", { children: "Uploading\u2026" }), _jsxs("span", { children: [state.progress, "%"] })] }), _jsx(ProgressBar, { progress: state.progress })] })) })), state.status === "done" && !renderSuccess && (_jsxs("div", { style: { display: "flex", alignItems: "center", gap: "10px", padding: "10px 14px", borderRadius: "8px", backgroundColor: "rgba(34,197,94,0.08)", border: "1px solid rgba(34,197,94,0.2)", fontSize: "14px" }, children: [_jsx("svg", { width: "18", height: "18", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", style: { color: "#22c55e", flexShrink: 0 }, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) }), _jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [_jsx("div", { style: { fontWeight: 500, color: "var(--silo-text)", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: state.result.key }), _jsx("div", { style: { fontSize: "12px", color: "var(--silo-text-muted)" }, children: formatBytes(state.result.size) })] }), _jsx("button", { onClick: (e) => { e.stopPropagation(); reset(); }, style: { background: "none", border: "none", cursor: "pointer", fontSize: "12px", color: "var(--silo-text-muted)", flexShrink: 0 }, children: "Replace" })] })), state.status === "error" && !renderError && (_jsxs("div", { style: { display: "flex", alignItems: "center", gap: "8px", padding: "10px 14px", borderRadius: "8px", backgroundColor: "rgba(239,68,68,0.1)", color: "var(--silo-error, #ef4444)", fontSize: "14px" }, children: [_jsx("span", { children: state.error.message }), _jsx("button", { onClick: (e) => { e.stopPropagation(); reset(); }, style: { marginLeft: "auto", background: "none", border: "none", cursor: "pointer", fontSize: "12px" }, children: "Retry" })] }))] }));
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=FileUploader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileUploader.js","sourceRoot":"","sources":["../src/FileUploader.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ImageUploaderProps } from "./types.js";
|
|
2
|
+
export declare function ImageUploader({ bucket, expiresIn, private: isPrivate, onUpload, onError, className, style, disabled, maxSize, accept, showPreview, theme, renderIcon, renderProgress, renderSuccess, renderError, children, }: ImageUploaderProps): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
//# sourceMappingURL=ImageUploader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageUploader.d.ts","sourceRoot":"","sources":["../src/ImageUploader.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAMrD,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,SAAS,EACT,OAAO,EAAE,SAAgB,EACzB,QAAQ,EACR,OAAO,EACP,SAAc,EACd,KAAK,EACL,QAAgB,EAChB,OAAO,EACP,MAAkB,EAClB,WAAkB,EAClB,KAAK,EACL,UAAU,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,QAAQ,GACT,EAAE,kBAAkB,2CAmKpB"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useState, useCallback } from "react";
|
|
4
|
+
import { useUpload } from "@silo/nextjs";
|
|
5
|
+
import { DropZone } from "./components/DropZone.js";
|
|
6
|
+
import { ProgressBar } from "./components/ProgressBar.js";
|
|
7
|
+
import { formatBytes } from "./utils/format.js";
|
|
8
|
+
import { resolveTheme, themeToVars } from "./utils/theme.js";
|
|
9
|
+
export function ImageUploader({ bucket, expiresIn, private: isPrivate = true, onUpload, onError, className = "", style, disabled = false, maxSize, accept = "image/*", showPreview = true, theme, renderIcon, renderProgress, renderSuccess, renderError, children, }) {
|
|
10
|
+
const uploadOpts = { private: isPrivate, ...(bucket !== undefined && { bucket }), ...(expiresIn !== undefined && { expiresIn }) };
|
|
11
|
+
const { state, upload, reset } = useUpload(uploadOpts);
|
|
12
|
+
const [preview, setPreview] = useState(null);
|
|
13
|
+
const t = resolveTheme(theme);
|
|
14
|
+
const vars = themeToVars(t);
|
|
15
|
+
const handleFiles = useCallback(async (files) => {
|
|
16
|
+
const file = files[0];
|
|
17
|
+
if (!file)
|
|
18
|
+
return;
|
|
19
|
+
if (showPreview) {
|
|
20
|
+
const url = URL.createObjectURL(file);
|
|
21
|
+
setPreview(url);
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
const result = await upload(file);
|
|
25
|
+
onUpload?.(result);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
onError?.(err instanceof Error ? err : new Error(String(err)));
|
|
29
|
+
}
|
|
30
|
+
}, [upload, onUpload, onError, showPreview]);
|
|
31
|
+
const containerStyle = {
|
|
32
|
+
...vars,
|
|
33
|
+
display: "flex",
|
|
34
|
+
flexDirection: "column",
|
|
35
|
+
gap: "12px",
|
|
36
|
+
width: "100%",
|
|
37
|
+
fontFamily: "var(--silo-font)",
|
|
38
|
+
...style,
|
|
39
|
+
};
|
|
40
|
+
if (state.status === "error" && renderError) {
|
|
41
|
+
return _jsx("div", { style: containerStyle, children: renderError(state.error, reset) });
|
|
42
|
+
}
|
|
43
|
+
if (state.status === "done" && renderSuccess) {
|
|
44
|
+
return _jsx("div", { style: containerStyle, children: renderSuccess(state.result) });
|
|
45
|
+
}
|
|
46
|
+
return (_jsxs("div", { className: `silo-image-uploader${className ? ` ${className}` : ""}`, style: containerStyle, children: [_jsx(DropZone, { ...(accept !== undefined && { accept }), ...(maxSize !== undefined && { maxSize }), ...(onError !== undefined && { onError }), ...(theme !== undefined && { theme }), disabled: disabled || state.status === "uploading", onFiles: handleFiles, style: { padding: "32px 24px", textAlign: "center" }, children: preview && state.status !== "uploading" ? (_jsxs("div", { style: { display: "flex", flexDirection: "column", alignItems: "center", gap: "8px" }, children: [_jsx("img", { src: preview, alt: "Preview", style: {
|
|
47
|
+
maxWidth: "100%",
|
|
48
|
+
maxHeight: "200px",
|
|
49
|
+
borderRadius: "8px",
|
|
50
|
+
objectFit: "contain",
|
|
51
|
+
} }), _jsx("span", { style: { fontSize: "12px", color: "var(--silo-text-muted)" }, children: "Click or drag to replace" })] })) : (_jsxs("div", { style: { display: "flex", flexDirection: "column", alignItems: "center", gap: "8px" }, children: [renderIcon ? renderIcon() : (_jsx("svg", { width: "40", height: "40", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", style: { color: "var(--silo-text-muted)", opacity: 0.6 }, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z" }) })), children ?? (_jsxs(_Fragment, { children: [_jsx("span", { style: { fontWeight: 600, color: "var(--silo-text)" }, children: "Drop image here" }), _jsx("span", { style: { fontSize: "13px", color: "var(--silo-text-muted)" }, children: "or click to browse" }), maxSize && (_jsxs("span", { style: { fontSize: "12px", color: "var(--silo-text-muted)" }, children: ["Max ", formatBytes(maxSize)] }))] }))] })) }), state.status === "uploading" && (_jsx("div", { style: { display: "flex", flexDirection: "column", gap: "6px" }, children: renderProgress ? (renderProgress(state.progress)) : (_jsxs(_Fragment, { children: [_jsxs("div", { style: { display: "flex", justifyContent: "space-between", fontSize: "13px", color: "var(--silo-text-muted)" }, children: [_jsx("span", { children: "Uploading\u2026" }), _jsxs("span", { children: [state.progress, "%"] })] }), _jsx(ProgressBar, { progress: state.progress })] })) })), state.status === "done" && !renderSuccess && (_jsxs("div", { style: {
|
|
52
|
+
display: "flex",
|
|
53
|
+
alignItems: "center",
|
|
54
|
+
gap: "8px",
|
|
55
|
+
padding: "10px 14px",
|
|
56
|
+
borderRadius: "8px",
|
|
57
|
+
backgroundColor: "rgba(34,197,94,0.1)",
|
|
58
|
+
color: "var(--silo-success, #22c55e)",
|
|
59
|
+
fontSize: "14px",
|
|
60
|
+
}, children: [_jsx("svg", { width: "18", height: "18", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) }), _jsx("span", { children: "Upload complete" }), _jsx("button", { onClick: (e) => { e.stopPropagation(); reset(); setPreview(null); }, style: { marginLeft: "auto", background: "none", border: "none", cursor: "pointer", fontSize: "12px", color: "var(--silo-text-muted)" }, children: "Upload another" })] })), state.status === "error" && !renderError && (_jsxs("div", { style: {
|
|
61
|
+
display: "flex",
|
|
62
|
+
alignItems: "center",
|
|
63
|
+
gap: "8px",
|
|
64
|
+
padding: "10px 14px",
|
|
65
|
+
borderRadius: "8px",
|
|
66
|
+
backgroundColor: "rgba(239,68,68,0.1)",
|
|
67
|
+
color: "var(--silo-error, #ef4444)",
|
|
68
|
+
fontSize: "14px",
|
|
69
|
+
}, children: [_jsx("svg", { width: "18", height: "18", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }) }), _jsx("span", { children: state.error.message }), _jsx("button", { onClick: (e) => { e.stopPropagation(); reset(); }, style: { marginLeft: "auto", background: "none", border: "none", cursor: "pointer", fontSize: "12px", color: "var(--silo-text-muted)" }, children: "Retry" })] }))] }));
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=ImageUploader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageUploader.js","sourceRoot":"","sources":["../src/ImageUploader.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { MediaUploaderProps } from "./types.js";
|
|
2
|
+
export declare function MediaUploader({ tabs, defaultTab, imageProps, videoProps, fileProps, className, style, theme, onUpload, onError, ...shared }: MediaUploaderProps): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
//# sourceMappingURL=MediaUploader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MediaUploader.d.ts","sourceRoot":"","sources":["../src/MediaUploader.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAcrD,wBAAgB,aAAa,CAAC,EAC5B,IAAiC,EACjC,UAAU,EACV,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAc,EACd,KAAK,EACL,KAAK,EACL,QAAQ,EACR,OAAO,EACP,GAAG,MAAM,EACV,EAAE,kBAAkB,2CAkFpB"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { ImageUploader } from "./ImageUploader.js";
|
|
5
|
+
import { VideoUploader } from "./VideoUploader.js";
|
|
6
|
+
import { FileUploader } from "./FileUploader.js";
|
|
7
|
+
import { resolveTheme, themeToVars } from "./utils/theme.js";
|
|
8
|
+
const TAB_LABELS = {
|
|
9
|
+
image: { label: "Image", icon: "🖼️" },
|
|
10
|
+
video: { label: "Video", icon: "🎬" },
|
|
11
|
+
file: { label: "File", icon: "📎" },
|
|
12
|
+
};
|
|
13
|
+
export function MediaUploader({ tabs = ["image", "video", "file"], defaultTab, imageProps, videoProps, fileProps, className = "", style, theme, onUpload, onError, ...shared }) {
|
|
14
|
+
const [activeTab, setActiveTab] = useState(defaultTab ?? tabs[0] ?? "image");
|
|
15
|
+
const t = resolveTheme(theme);
|
|
16
|
+
const vars = themeToVars(t);
|
|
17
|
+
const containerStyle = {
|
|
18
|
+
...vars,
|
|
19
|
+
display: "flex",
|
|
20
|
+
flexDirection: "column",
|
|
21
|
+
gap: "0",
|
|
22
|
+
width: "100%",
|
|
23
|
+
fontFamily: "var(--silo-font)",
|
|
24
|
+
border: "1px solid var(--silo-border)",
|
|
25
|
+
borderRadius: "var(--silo-radius)",
|
|
26
|
+
overflow: "hidden",
|
|
27
|
+
backgroundColor: "var(--silo-bg)",
|
|
28
|
+
...style,
|
|
29
|
+
};
|
|
30
|
+
return (_jsxs("div", { className: `silo-media-uploader${className ? ` ${className}` : ""}`, style: containerStyle, children: [_jsx("div", { style: { display: "flex", borderBottom: "1px solid var(--silo-border)" }, children: tabs.map((tab) => (_jsxs("button", { onClick: () => setActiveTab(tab), style: {
|
|
31
|
+
flex: 1,
|
|
32
|
+
padding: "10px 8px",
|
|
33
|
+
background: "none",
|
|
34
|
+
border: "none",
|
|
35
|
+
borderBottom: `2px solid ${activeTab === tab ? "var(--silo-accent)" : "transparent"}`,
|
|
36
|
+
cursor: "pointer",
|
|
37
|
+
fontSize: "13px",
|
|
38
|
+
fontWeight: activeTab === tab ? 600 : 400,
|
|
39
|
+
color: activeTab === tab ? "var(--silo-accent)" : "var(--silo-text-muted)",
|
|
40
|
+
transition: "color 0.15s, border-color 0.15s",
|
|
41
|
+
display: "flex",
|
|
42
|
+
alignItems: "center",
|
|
43
|
+
justifyContent: "center",
|
|
44
|
+
gap: "6px",
|
|
45
|
+
}, children: [_jsx("span", { children: TAB_LABELS[tab].icon }), _jsx("span", { children: TAB_LABELS[tab].label })] }, tab))) }), _jsxs("div", { style: { padding: "16px" }, children: [activeTab === "image" && (_jsx(ImageUploader, { ...shared, ...imageProps, ...(theme !== undefined && { theme }), ...(onUpload !== undefined && { onUpload }), ...(onError !== undefined && { onError }) })), activeTab === "video" && (_jsx(VideoUploader, { ...shared, ...videoProps, ...(theme !== undefined && { theme }), ...(onUpload !== undefined && { onUpload }), ...(onError !== undefined && { onError }) })), activeTab === "file" && (_jsx(FileUploader, { ...shared, ...fileProps, ...(theme !== undefined && { theme }), ...(onUpload !== undefined && { onUpload }), ...(onError !== undefined && { onError }) }))] })] }));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=MediaUploader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MediaUploader.js","sourceRoot":"","sources":["../src/MediaUploader.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export type VideoSourceType = "dash" | "hls" | "file";
|
|
3
|
+
export type SourceProps = {
|
|
4
|
+
id?: string;
|
|
5
|
+
src: string;
|
|
6
|
+
label?: string;
|
|
7
|
+
type?: VideoSourceType;
|
|
8
|
+
default?: boolean;
|
|
9
|
+
};
|
|
10
|
+
export type SourcesProps = {
|
|
11
|
+
children: ReactNode;
|
|
12
|
+
};
|
|
13
|
+
export type SubtitleProps = {
|
|
14
|
+
src: string;
|
|
15
|
+
srclang: string;
|
|
16
|
+
label: string;
|
|
17
|
+
default?: boolean;
|
|
18
|
+
};
|
|
19
|
+
export type SubtitlesProps = {
|
|
20
|
+
children: ReactNode;
|
|
21
|
+
};
|
|
22
|
+
export type StoryboardFrameProps = {
|
|
23
|
+
start: number;
|
|
24
|
+
end: number;
|
|
25
|
+
image: string;
|
|
26
|
+
x?: number;
|
|
27
|
+
y?: number;
|
|
28
|
+
w?: number;
|
|
29
|
+
h?: number;
|
|
30
|
+
};
|
|
31
|
+
export type StoryboardProps = {
|
|
32
|
+
src?: string;
|
|
33
|
+
fallbackImage?: string;
|
|
34
|
+
width?: number;
|
|
35
|
+
height?: number;
|
|
36
|
+
children?: ReactNode;
|
|
37
|
+
};
|
|
38
|
+
type VideoProps = {
|
|
39
|
+
title?: string;
|
|
40
|
+
description?: string;
|
|
41
|
+
poster?: string;
|
|
42
|
+
children: ReactNode;
|
|
43
|
+
className?: string;
|
|
44
|
+
autoHideControls?: boolean;
|
|
45
|
+
defaultVolume?: number;
|
|
46
|
+
};
|
|
47
|
+
export declare function Sources(_props: SourcesProps): null;
|
|
48
|
+
export declare function Source(_props: SourceProps): null;
|
|
49
|
+
export declare function Subtitles(_props: SubtitlesProps): null;
|
|
50
|
+
export declare function Subtitle(_props: SubtitleProps): null;
|
|
51
|
+
export declare function Storyboard(_props: StoryboardProps): null;
|
|
52
|
+
export declare function StoryboardFrame(_props: StoryboardFrameProps): null;
|
|
53
|
+
export declare function Video({ title, description, poster, children, className, autoHideControls, defaultVolume, }: VideoProps): import("react/jsx-runtime").JSX.Element;
|
|
54
|
+
export declare const VideoPlayer: typeof Video;
|
|
55
|
+
export {};
|
|
56
|
+
//# sourceMappingURL=VideoPlayer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VideoPlayer.d.ts","sourceRoot":"","sources":["../src/VideoPlayer.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAIV,SAAS,EACV,MAAM,OAAO,CAAC;AAGf,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAEtD,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAmBF,KAAK,UAAU,GAAG;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAQF,wBAAgB,OAAO,CAAC,MAAM,EAAE,YAAY,QAE3C;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,WAAW,QAEzC;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,cAAc,QAE/C;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,aAAa,QAE7C;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,QAEjD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,oBAAoB,QAE3D;AAED,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,WAAW,EACX,MAAM,EACN,QAAQ,EACR,SAAS,EACT,gBAAuB,EACvB,aAAoB,GACrB,EAAE,UAAU,2CAw8BZ;AAED,eAAO,MAAM,WAAW,cAAQ,CAAC"}
|