@geekapps/silo-elements-nextjs 0.3.0 → 0.3.2
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.js +27 -7
- package/dist/FileUploader.js.map +1 -1
- package/dist/MediaUploader.js +27 -7
- package/dist/MediaUploader.js.map +1 -1
- package/dist/VideoUploader.js +26 -6
- package/dist/VideoUploader.js.map +1 -1
- package/dist/index.js +27 -7
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/theme.ts","../src/components/DropZone.tsx","../src/components/ProgressBar.tsx","../src/components/ImageOptions.tsx","../src/utils/format.ts","../src/ImageUploader.tsx","../src/components/VideoOptions.tsx","../src/VideoUploader.tsx","../src/FileUploader.tsx","../src/MediaUploader.tsx","../src/VideoPlayer.tsx","../src/components/Avatar.tsx","../src/components/Thumbnail.tsx","../src/components/Background.tsx","../src/components/FileIcon.tsx","../src/components/FileCard.tsx","../src/components/FilePreview.tsx"],"names":["jsx","jsxs","useState","useCallback","uploadLabel","useMultipartUpload","Fragment","DEFAULT_VIDEO_OPTS","createInitialVideoOpts","useRef","CaptionsIcon","useSignedUrl","STATUS_LABEL","isProcessing","useFileStatus","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["import type { SiloTheme } from \"../types.js\";\n\nexport const defaultTheme: Required<SiloTheme> = {\n borderColor: \"#e2e8f0\",\n borderColorActive: \"#6366f1\",\n backgroundColor: \"#f8fafc\",\n backgroundColorHover: \"#f1f5f9\",\n textColor: \"#0f172a\",\n textColorMuted: \"#64748b\",\n accentColor: \"#6366f1\",\n accentColorHover: \"#4f46e5\",\n errorColor: \"#ef4444\",\n successColor: \"#22c55e\",\n borderRadius: \"12px\",\n fontFamily: \"inherit\",\n};\n\nexport function resolveTheme(theme?: SiloTheme): Required<SiloTheme> {\n return { ...defaultTheme, ...theme };\n}\n\nexport function themeToVars(theme: Required<SiloTheme>): Record<string, string> {\n return {\n \"--silo-border\": theme.borderColor,\n \"--silo-border-active\": theme.borderColorActive,\n \"--silo-bg\": theme.backgroundColor,\n \"--silo-bg-hover\": theme.backgroundColorHover,\n \"--silo-text\": theme.textColor,\n \"--silo-text-muted\": theme.textColorMuted,\n \"--silo-accent\": theme.accentColor,\n \"--silo-accent-hover\": theme.accentColorHover,\n \"--silo-error\": theme.errorColor,\n \"--silo-success\": theme.successColor,\n \"--silo-radius\": theme.borderRadius,\n \"--silo-font\": theme.fontFamily,\n };\n}\n","\"use client\";\n\nimport {\n useState,\n useRef,\n useCallback,\n type DragEvent,\n type ChangeEvent,\n type ReactNode,\n type CSSProperties,\n} from \"react\";\nimport type { SiloTheme } from \"../types.js\";\nimport { resolveTheme, themeToVars } from \"../utils/theme.js\";\n\ninterface DropZoneProps {\n accept?: string;\n multiple?: boolean;\n disabled?: boolean;\n maxSize?: number;\n onFiles: (files: File[]) => void;\n onError?: (error: Error) => void;\n className?: string;\n style?: CSSProperties;\n theme?: SiloTheme;\n children: ReactNode;\n}\n\nexport function DropZone({\n accept,\n multiple = false,\n disabled = false,\n maxSize,\n onFiles,\n onError,\n className = \"\",\n style,\n theme,\n children,\n}: DropZoneProps) {\n const [dragging, setDragging] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const t = resolveTheme(theme);\n const vars = themeToVars(t);\n\n const validate = useCallback(\n (files: File[]): File[] => {\n return files.filter((f) => {\n if (maxSize && f.size > maxSize) {\n onError?.(new Error(`File \"${f.name}\" exceeds max size of ${maxSize} bytes`));\n return false;\n }\n return true;\n });\n },\n [maxSize, onError]\n );\n\n const handleDrop = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n setDragging(false);\n if (disabled) return;\n const files = Array.from(e.dataTransfer.files);\n const valid = validate(files);\n if (valid.length) onFiles(valid);\n },\n [disabled, validate, onFiles]\n );\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(e.target.files ?? []);\n const valid = validate(files);\n if (valid.length) onFiles(valid);\n e.target.value = \"\";\n },\n [validate, onFiles]\n );\n\n const rootStyle: CSSProperties = {\n ...vars as CSSProperties,\n border: `2px dashed ${dragging ? \"var(--silo-border-active)\" : \"var(--silo-border)\"}`,\n borderRadius: \"var(--silo-radius)\",\n background: dragging ? \"var(--silo-bg-hover)\" : \"var(--silo-bg)\",\n color: \"var(--silo-text)\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n opacity: disabled ? 0.5 : 1,\n outline: \"none\",\n transition: \"border-color 150ms, background 150ms\",\n ...style,\n };\n\n return (\n <div\n className={className}\n style={rootStyle}\n onDragOver={(e) => { e.preventDefault(); if (!disabled) setDragging(true); }}\n onDragLeave={() => setDragging(false)}\n onDrop={handleDrop}\n onClick={() => !disabled && inputRef.current?.click()}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onKeyDown={(e) => { if (e.key === \"Enter\" || e.key === \" \") inputRef.current?.click(); }}\n aria-label=\"Upload area\"\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n className=\"hidden\"\n onChange={handleChange}\n disabled={disabled}\n />\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport type { CSSProperties } from \"react\";\n\ninterface ProgressBarProps {\n progress: number;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function ProgressBar({ progress, className = \"\", style }: ProgressBarProps) {\n return (\n <div\n className={className}\n style={{ height: 4, borderRadius: 9999, background: \"var(--silo-border, #e2e8f0)\", overflow: \"hidden\", ...style }}\n role=\"progressbar\"\n aria-valuenow={progress}\n aria-valuemin={0}\n aria-valuemax={100}\n >\n <div\n style={{ height: \"100%\", borderRadius: 9999, background: \"var(--silo-accent, #6366f1)\", width: `${progress}%`, transition: \"width 200ms linear\" }}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport type { CSSProperties } from \"react\";\nimport type { ImageUploadOptions } from \"@geekapps/silo-nextjs\";\n\nconst FORMATS = [\n { value: \"webp\", label: \"WebP\", hint: \"Melhor custo-benefício\" },\n { value: \"avif\", label: \"AVIF\", hint: \"Máxima compressão\" },\n { value: \"jpeg\", label: \"JPEG\", hint: \"Compatibilidade universal\" },\n { value: \"png\", label: \"PNG\", hint: \"Sem perda\" },\n];\n\ninterface ImageOptionsProps {\n value: ImageUploadOptions;\n onChange: (opts: ImageUploadOptions) => void;\n style?: CSSProperties;\n}\n\nexport function ImageOptions({ value, onChange, style }: ImageOptionsProps) {\n const fmt = value.format ?? \"webp\";\n const optimize = value.optimize ?? true;\n\n return (\n <div className=\"flex flex-col gap-2.5\" style={style}>\n <div>\n <div style={{ fontSize: 11, fontWeight: 700, textTransform: \"uppercase\", letterSpacing: \"0.05em\", marginBottom: 6, color: \"rgba(255,255,255,0.4)\" }}>\n Formato de saída\n </div>\n <div className=\"flex gap-1.5 flex-wrap\">\n {FORMATS.map((f) => (\n <button\n key={f.value}\n type=\"button\"\n onClick={() => onChange({ ...value, format: f.value as NonNullable<ImageUploadOptions[\"format\"]> })}\n title={f.hint}\n style={fmt === f.value\n ? { border: \"1px solid #6366f1\", background: \"#6366f1\", color: \"#fff\", padding: \"4px 12px\", borderRadius: 6, fontSize: 12, fontWeight: 600, cursor: \"pointer\" }\n : { border: \"1px solid rgba(255,255,255,0.2)\", background: \"rgba(255,255,255,0.06)\", color: \"rgba(255,255,255,0.8)\", padding: \"4px 12px\", borderRadius: 6, fontSize: 12, fontWeight: 600, cursor: \"pointer\" }\n }\n >\n {f.label}\n </button>\n ))}\n </div>\n </div>\n\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, cursor: \"pointer\", userSelect: \"none\" }} onClick={() => onChange({ ...value, optimize: !optimize })}>\n <span style={{ position: \"relative\", display: \"inline-block\", width: 36, height: 20, borderRadius: 10, flexShrink: 0, cursor: \"pointer\", background: optimize ? \"#6366f1\" : \"rgba(255,255,255,0.15)\", transition: \"background 150ms\" }}>\n <span style={{ position: \"absolute\", top: 2, left: optimize ? 18 : 2, width: 16, height: 16, borderRadius: \"50%\", background: \"#fff\", boxShadow: \"0 1px 3px rgba(0,0,0,.3)\", transition: \"left 150ms\" }} />\n </span>\n <span style={{ fontSize: 12, fontWeight: 500, color: \"rgba(255,255,255,0.85)\" }}>Otimizar tamanho</span>\n <span style={{ fontSize: 11, color: \"rgba(255,255,255,0.45)\" }}>{optimize ? \"Qualidade 85 — menor tamanho\" : \"Qualidade máxima\"}</span>\n </div>\n </div>\n );\n}\n","export function formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 ** 2) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 ** 3) return `${(bytes / 1024 ** 2).toFixed(1)} MB`;\n return `${(bytes / 1024 ** 3).toFixed(2)} GB`;\n}\n\nexport function getFileIcon(mimeType: string): string {\n if (mimeType.startsWith(\"image/\")) return \"🖼️\";\n if (mimeType.startsWith(\"video/\")) return \"🎬\";\n if (mimeType.startsWith(\"audio/\")) return \"🎵\";\n if (mimeType === \"application/pdf\") return \"📄\";\n if (mimeType.includes(\"spreadsheet\") || mimeType.includes(\"excel\")) return \"📊\";\n if (mimeType.includes(\"presentation\") || mimeType.includes(\"powerpoint\")) return \"📑\";\n if (mimeType.includes(\"word\") || mimeType.includes(\"document\")) return \"📝\";\n if (mimeType.includes(\"zip\") || mimeType.includes(\"tar\") || mimeType.includes(\"gzip\")) return \"📦\";\n return \"📎\";\n}\n","\"use client\";\n\nimport { useState, useCallback, type CSSProperties } from \"react\";\nimport { useMultipartUpload } from \"@geekapps/silo-nextjs\";\nimport type { ImageUploadOptions } from \"@geekapps/silo-nextjs\";\nimport type { ImageUploaderProps } from \"./types.js\";\nimport { DropZone } from \"./components/DropZone.js\";\nimport { ProgressBar } from \"./components/ProgressBar.js\";\nimport { ImageOptions } from \"./components/ImageOptions.js\";\nimport { formatBytes } from \"./utils/format.js\";\nimport { resolveTheme, themeToVars } from \"./utils/theme.js\";\n\nfunction uploadLabel(status: string, progress: number): string {\n if (status === \"preparing\") return \"Preparando…\";\n if (status === \"completing\") return \"Concluindo…\";\n if (progress < 30) return \"Iniciando envio…\";\n if (progress < 70) return \"Enviando imagem…\";\n if (progress < 95) return \"Quase lá…\";\n return \"Finalizando…\";\n}\n\nexport function ImageUploader({\n bucket,\n expiresIn,\n onUpload,\n onError,\n className = \"\",\n style,\n disabled = false,\n maxSize,\n accept = \"image/*\",\n showPreview = true,\n showImageOptions = false,\n image,\n theme,\n renderIcon,\n renderProgress,\n renderSuccess,\n renderError,\n children,\n}: ImageUploaderProps) {\n const { state, upload, pause, resume, abort, reset } = useMultipartUpload(bucket);\n const [preview, setPreview] = useState<string | null>(null);\n const [imageOpts, setImageOpts] = useState<ImageUploadOptions>(image ?? { format: \"webp\", optimize: true });\n const [stagedFile, setStagedFile] = useState<File | null>(null);\n const t = resolveTheme(theme);\n const vars = themeToVars(t);\n\n const doUpload = useCallback(async (file: File, opts: ImageUploadOptions) => {\n if (showPreview) setPreview(URL.createObjectURL(file));\n try {\n const result = await upload(file, { ...(bucket !== undefined && { bucket }), image: opts });\n if (result) onUpload?.(result);\n } catch (err) {\n onError?.(err instanceof Error ? err : new Error(String(err)));\n }\n }, [upload, bucket, onUpload, onError, showPreview]);\n\n const handleFiles = useCallback(async (files: File[]) => {\n const file = files[0];\n if (!file) return;\n if (showImageOptions) {\n setStagedFile(file);\n if (showPreview) setPreview(URL.createObjectURL(file));\n } else {\n await doUpload(file, image ?? imageOpts);\n }\n }, [showImageOptions, image, imageOpts, doUpload, showPreview]);\n\n const containerStyle: CSSProperties = {\n ...vars as CSSProperties,\n ...style,\n };\n\n const isUploading = state.status === \"uploading\" || state.status === \"preparing\" || state.status === \"completing\";\n const progress = state.status === \"uploading\" ? state.progress : state.status === \"completing\" ? 99 : 0;\n const isPaused = state.status === \"idle\" && preview !== null && !stagedFile;\n\n if (state.status === \"error\" && renderError) return <div className=\"flex flex-col gap-3 w-full\" style={containerStyle}>{renderError(state.error, reset)}</div>;\n if (state.status === \"done\" && renderSuccess) return <div className=\"flex flex-col gap-3 w-full\" style={containerStyle}>{renderSuccess(state.result)}</div>;\n\n return (\n <div className={`flex flex-col gap-3 w-full${className ? ` ${className}` : \"\"}`} style={containerStyle}>\n <DropZone\n {...(accept !== undefined && { accept })}\n {...(maxSize !== undefined && { maxSize })}\n {...(onError !== undefined && { onError })}\n {...(theme !== undefined && { theme })}\n disabled={disabled || isUploading}\n onFiles={handleFiles}\n style={{ padding: \"32px 24px\", textAlign: \"center\" }}\n >\n {preview && !isUploading && !stagedFile ? (\n <div className=\"flex flex-col items-center gap-2\">\n <img src={preview} alt=\"Pré-visualização\" className=\"max-w-full max-h-[200px] rounded-lg object-contain\" />\n <span className=\"text-[12px] text-slate-400\">Clique ou arraste para trocar a imagem</span>\n </div>\n ) : (\n <div className=\"flex flex-col items-center gap-2\">\n {renderIcon ? renderIcon() : (\n <svg width=\"40\" height=\"40\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" className=\"text-slate-400 opacity-50\">\n <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\" />\n </svg>\n )}\n {children ?? (\n <>\n <span className=\"text-slate-900 font-bold text-[15px]\">Arraste sua imagem aqui</span>\n <span className=\"text-slate-500 text-[13px]\">ou clique para escolher do seu dispositivo</span>\n {maxSize && <span className=\"text-slate-400 text-[12px]\">Tamanho máximo: {formatBytes(maxSize)}</span>}\n </>\n )}\n </div>\n )}\n </DropZone>\n\n {showImageOptions && stagedFile && !isUploading && state.status !== \"done\" && (\n <>\n {preview && (\n <div className=\"border border-slate-200 rounded-xl overflow-hidden\">\n <img src={preview} alt=\"Pré-visualização\" className=\"w-full max-h-[200px] object-contain block bg-slate-50\" />\n </div>\n )}\n <div className=\"border border-slate-200 rounded-xl overflow-hidden\">\n <div className=\"px-3.5 py-2 bg-slate-100 text-[12px] font-bold text-slate-500 tracking-[0.04em]\">🖼️ Configurações de imagem</div>\n <ImageOptions value={imageOpts} onChange={setImageOpts} style={{ padding: \"12px 14px\" }} />\n </div>\n <div className=\"flex gap-2\">\n <button\n className=\"inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border border-slate-200 bg-transparent text-slate-900 cursor-pointer transition-colors hover:bg-slate-100\"\n onClick={() => { setStagedFile(null); setPreview(null); }}\n >\n Cancelar\n </button>\n <button\n className=\"flex-1 inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border-transparent bg-indigo-500 text-white cursor-pointer transition-opacity hover:opacity-90\"\n onClick={() => { const f = stagedFile; setStagedFile(null); void doUpload(f, imageOpts); }}\n >\n Enviar imagem\n </button>\n </div>\n </>\n )}\n\n {isUploading && (\n renderProgress ? renderProgress(progress) : (\n <div className=\"flex flex-col gap-2 px-3 py-4 bg-slate-50 rounded-xl border border-slate-200\">\n <div className=\"flex justify-between items-center\">\n <span className=\"text-[13px] font-semibold text-slate-900\">{uploadLabel(state.status, progress)}</span>\n <span className=\"text-[13px] font-bold text-indigo-500\">{progress}%</span>\n </div>\n <ProgressBar progress={progress} />\n </div>\n )\n )}\n\n {isPaused && (\n <div className=\"flex gap-2\">\n <button\n className=\"flex-1 inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border-transparent bg-emerald-500 text-white cursor-pointer hover:opacity-90\"\n onClick={() => resume({ ...(bucket !== undefined && { bucket }), image: imageOpts })}\n >\n ▶ Retomar envio\n </button>\n <button\n className=\"inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border border-slate-200 bg-transparent text-slate-900 cursor-pointer hover:bg-slate-100\"\n onClick={() => { abort(); setPreview(null); }}\n >\n Cancelar\n </button>\n </div>\n )}\n\n {state.status === \"done\" && !renderSuccess && (\n <div className=\"flex items-center gap-3 px-4 py-3.5 bg-green-500/[0.08] rounded-xl border border-green-500/20\">\n <span className=\"text-2xl\">✅</span>\n <div className=\"flex-1\">\n <div className=\"font-bold text-sm text-green-700\">Imagem enviada com sucesso!</div>\n <div className=\"text-[12px] text-slate-400 mt-0.5\">{formatBytes(state.result.size)}</div>\n </div>\n <button\n className=\"inline-flex items-center justify-center text-xs font-semibold py-1 px-2.5 rounded-lg border border-green-500/30 text-green-700 bg-transparent cursor-pointer hover:bg-green-500/10 shrink-0\"\n onClick={() => { reset(); setPreview(null); }}\n >\n Enviar outra\n </button>\n </div>\n )}\n\n {state.status === \"error\" && !renderError && (\n <div className=\"flex items-center gap-3 px-4 py-3.5 bg-red-500/[0.07] rounded-xl border border-red-500/20\">\n <span className=\"text-[22px]\">⚠️</span>\n <div className=\"flex-1\">\n <div className=\"font-bold text-[13px] text-red-500\">Não foi possível enviar a imagem</div>\n <div className=\"text-[12px] text-slate-400 mt-0.5\">{state.error.message}</div>\n </div>\n <button\n className=\"inline-flex items-center justify-center text-xs font-semibold py-1 px-2.5 rounded-lg border border-red-500/30 text-red-500 bg-transparent cursor-pointer hover:bg-red-500/10 shrink-0\"\n onClick={() => { reset(); setPreview(null); }}\n >\n Tentar novamente\n </button>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport type { CSSProperties } from \"react\";\nimport type { VideoUploadOptions } from \"@geekapps/silo-nextjs\";\n\nconst CODECS = [\n { value: \"h264\", label: \"H.264 (NVENC)\", hint: \"Compatibilidade máxima — GPU accelerated\" },\n { value: \"h265\", label: \"H.265 (NVENC)\", hint: \"Melhor compressão — GPU accelerated\" },\n];\n\nconst RESOLUTIONS = [\"144\", \"240\", \"360\", \"480\", \"720\", \"1080\", \"1440\", \"2160\"] as const;\nconst RESOLUTION_LABELS: Record<string, string> = {\n \"144\": \"144p\", \"240\": \"240p\", \"360\": \"360p\", \"480\": \"480p\",\n \"720\": \"720p\", \"1080\": \"1080p\", \"1440\": \"1440p\", \"2160\": \"4K\",\n};\n\ninterface VideoOptionsProps {\n value: VideoUploadOptions;\n onChange: (opts: VideoUploadOptions) => void;\n style?: CSSProperties;\n}\n\nfunction optBtnStyle(active: boolean): CSSProperties {\n return active\n ? { border: \"1px solid #6366f1\", background: \"#6366f1\", color: \"#fff\", padding: \"4px 10px\", borderRadius: 6, fontSize: 12, fontWeight: 600, cursor: \"pointer\", minWidth: 36 }\n : { border: \"1px solid rgba(255,255,255,0.2)\", background: \"rgba(255,255,255,0.06)\", color: \"rgba(255,255,255,0.8)\", padding: \"4px 10px\", borderRadius: 6, fontSize: 12, fontWeight: 600, cursor: \"pointer\", minWidth: 36 };\n}\n\nfunction Toggle({ checked, onToggle, label }: { checked: boolean; onToggle: () => void; label: string }) {\n return (\n <div style={{ display: \"inline-flex\", alignItems: \"center\", gap: 8, cursor: \"pointer\", userSelect: \"none\" }} onClick={onToggle}>\n <span style={{ position: \"relative\", display: \"inline-block\", width: 32, height: 18, borderRadius: 9, flexShrink: 0, cursor: \"pointer\", background: checked ? \"#6366f1\" : \"rgba(255,255,255,0.15)\", transition: \"background 150ms\" }}>\n <span style={{ position: \"absolute\", top: 2, left: checked ? 16 : 2, width: 14, height: 14, borderRadius: \"50%\", background: \"#fff\", boxShadow: \"0 1px 3px rgba(0,0,0,.3)\", transition: \"left 150ms\" }} />\n </span>\n <span style={{ fontSize: 12, fontWeight: 500, color: \"rgba(255,255,255,0.85)\" }}>{label}</span>\n </div>\n );\n}\n\nexport function VideoOptions({ value, onChange, style }: VideoOptionsProps) {\n const codec = value.codec ?? \"h264\";\n const transcoding = value.transcoding ?? \"auto\";\n const isAuto = transcoding === \"auto\";\n const selectedRes: string[] = isAuto ? [] : (transcoding as string[]);\n\n type Res = \"360\" | \"480\" | \"720\" | \"1080\" | \"1440\" | \"2160\";\n function toggleRes(r: Res) {\n if (isAuto) { onChange({ ...value, transcoding: [r] }); return; }\n const next = selectedRes.includes(r) ? selectedRes.filter((x) => x !== r) : [...selectedRes, r];\n onChange({ ...value, transcoding: next.length === 0 ? \"auto\" : (next as Res[]) });\n }\n\n function toggleFeature(key: keyof VideoUploadOptions) {\n onChange({ ...value, [key]: !value[key] });\n }\n\n return (\n <div className=\"flex flex-col gap-3\" style={style}>\n <div>\n <div style={{ fontSize: 11, fontWeight: 700, textTransform: \"uppercase\", letterSpacing: \"0.05em\", marginBottom: 6, color: \"rgba(255,255,255,0.4)\" }}>Codec</div>\n <div className=\"flex gap-1.5 flex-wrap\">\n {CODECS.map((c) => (\n <button key={c.value} type=\"button\" title={c.hint}\n onClick={() => onChange({ ...value, codec: c.value as NonNullable<VideoUploadOptions[\"codec\"]> })}\n style={optBtnStyle(codec === c.value)}\n >\n {c.label}\n </button>\n ))}\n </div>\n </div>\n\n <div>\n <div style={{ fontSize: 11, fontWeight: 700, textTransform: \"uppercase\", letterSpacing: \"0.05em\", marginBottom: 6, color: \"rgba(255,255,255,0.4)\" }}>Resoluções</div>\n <div className=\"flex gap-1.5 flex-wrap\">\n <button type=\"button\" onClick={() => onChange({ ...value, transcoding: \"auto\" })} style={optBtnStyle(isAuto)}>Auto</button>\n {RESOLUTIONS.map((r) => (\n <button key={r} type=\"button\"\n onClick={() => toggleRes(r as \"360\" | \"480\" | \"720\" | \"1080\" | \"1440\" | \"2160\")}\n style={optBtnStyle(!isAuto && selectedRes.includes(r))}\n >\n {RESOLUTION_LABELS[r]}\n </button>\n ))}\n </div>\n </div>\n\n <div>\n <div style={{ fontSize: 11, fontWeight: 700, textTransform: \"uppercase\", letterSpacing: \"0.05em\", marginBottom: 8, color: \"var(--silo-text-muted)\" }}>Recursos</div>\n <div className=\"flex flex-col gap-2\">\n <Toggle checked={value.thumbnails ?? true} onToggle={() => toggleFeature(\"thumbnails\")} label=\"Gerar thumbnails\" />\n <Toggle checked={value.storyboard ?? false} onToggle={() => toggleFeature(\"storyboard\")} label=\"Gerar storyboard\" />\n <Toggle checked={value.autoCaptions ?? false} onToggle={() => toggleFeature(\"autoCaptions\")} label=\"Legendas automáticas (IA)\" />\n <Toggle checked={value.separateAudio ?? false} onToggle={() => toggleFeature(\"separateAudio\")} label=\"Separar faixa de áudio\" />\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { useState, useCallback, type CSSProperties } from \"react\";\nimport { useMultipartUpload } from \"@geekapps/silo-nextjs\";\nimport type { VideoUploadOptions } from \"@geekapps/silo-nextjs\";\nimport type { VideoUploaderProps } from \"./types.js\";\nimport { DropZone } from \"./components/DropZone.js\";\nimport { ProgressBar } from \"./components/ProgressBar.js\";\nimport { VideoOptions } from \"./components/VideoOptions.js\";\nimport { formatBytes } from \"./utils/format.js\";\nimport { resolveTheme, themeToVars } from \"./utils/theme.js\";\n\nconst DEFAULT_VIDEO_OPTS: VideoUploadOptions = {\n thumbnails: true, storyboard: false, autoCaptions: false,\n separateAudio: false, codec: \"h264\", transcoding: \"auto\",\n};\n\nfunction createInitialVideoOpts(video?: VideoUploadOptions): VideoUploadOptions {\n return video ?? DEFAULT_VIDEO_OPTS;\n}\n\nfunction uploadLabel(status: string, progress: number): string {\n if (status === \"preparing\") return \"Preparando…\";\n if (status === \"completing\") return \"Concluindo envio…\";\n if (progress < 20) return \"Iniciando envio…\";\n if (progress < 50) return \"Enviando vídeo…\";\n if (progress < 80) return \"Ainda enviando…\";\n if (progress < 97) return \"Quase terminando…\";\n return \"Finalizando…\";\n}\n\nexport function VideoUploader({\n bucket,\n expiresIn,\n onUpload,\n onError,\n className = \"\",\n style,\n disabled = false,\n maxSize,\n accept = \"video/*\",\n showPreview = true,\n showVideoOptions = false,\n video,\n theme,\n renderIcon,\n renderProgress,\n renderSuccess,\n renderError,\n children,\n}: VideoUploaderProps) {\n const { state, upload, pause, resume, abort, reset } = useMultipartUpload(bucket);\n const [preview, setPreview] = useState<string | null>(null);\n const [videoOpts, setVideoOpts] = useState<VideoUploadOptions>(() => createInitialVideoOpts(video));\n const [stagedFile, setStagedFile] = useState<File | null>(null);\n const t = resolveTheme(theme);\n const vars = themeToVars(t);\n\n const doUpload = useCallback(async (file: File, opts: VideoUploadOptions) => {\n if (showPreview) setPreview(URL.createObjectURL(file));\n try {\n const result = await upload(file, { ...(bucket !== undefined && { bucket }), video: opts });\n if (result) onUpload?.(result);\n } catch (err) {\n onError?.(err instanceof Error ? err : new Error(String(err)));\n }\n }, [upload, bucket, onUpload, onError, showPreview]);\n\n const handleFiles = useCallback(async (files: File[]) => {\n const file = files[0];\n if (!file) return;\n if (showVideoOptions) {\n setVideoOpts(createInitialVideoOpts(video));\n setStagedFile(file);\n if (showPreview) setPreview(URL.createObjectURL(file));\n } else {\n await doUpload(file, video ?? videoOpts);\n }\n }, [showVideoOptions, video, videoOpts, doUpload, showPreview]);\n\n const containerStyle: CSSProperties = {\n ...vars as CSSProperties,\n ...style,\n };\n\n const isUploading = state.status === \"uploading\" || state.status === \"preparing\" || state.status === \"completing\";\n const progress = state.status === \"uploading\" ? state.progress : state.status === \"completing\" ? 99 : 0;\n const isPaused = state.status === \"idle\" && preview !== null && !stagedFile;\n\n if (state.status === \"error\" && renderError) return <div className=\"flex flex-col gap-3 w-full\" style={containerStyle}>{renderError(state.error, reset)}</div>;\n if (state.status === \"done\" && renderSuccess) return <div className=\"flex flex-col gap-3 w-full\" style={containerStyle}>{renderSuccess(state.result)}</div>;\n\n return (\n <div className={`flex flex-col gap-3 w-full${className ? ` ${className}` : \"\"}`} style={containerStyle}>\n <DropZone\n {...(accept !== undefined && { accept })}\n {...(maxSize !== undefined && { maxSize })}\n {...(onError !== undefined && { onError })}\n {...(theme !== undefined && { theme })}\n disabled={disabled || isUploading}\n onFiles={handleFiles}\n style={{ padding: \"32px 24px\", textAlign: \"center\" }}\n >\n {preview && !isUploading && !stagedFile ? (\n <div className=\"flex flex-col items-center gap-2\">\n <video src={preview} className=\"max-w-full max-h-[180px] rounded-lg\" muted playsInline />\n <span className=\"text-[12px] text-slate-400\">Clique ou arraste para trocar o vídeo</span>\n </div>\n ) : (\n <div className=\"flex flex-col items-center gap-2\">\n {renderIcon ? renderIcon() : (\n <svg width=\"40\" height=\"40\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" className=\"text-slate-400 opacity-50\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M15 10l4.553-2.069A1 1 0 0121 8.878v6.244a1 1 0 01-1.447.894L15 14M3 8a2 2 0 012-2h8a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2V8z\" />\n </svg>\n )}\n {children ?? (\n <>\n <span className=\"text-slate-900 font-bold text-[15px]\">Arraste seu vídeo aqui</span>\n <span className=\"text-slate-500 text-[13px]\">ou clique para escolher do seu dispositivo</span>\n <span className=\"text-slate-400 text-[12px]\">\n MP4, MOV, MKV, WebM{maxSize ? ` · Máx ${formatBytes(maxSize)}` : \"\"}\n </span>\n </>\n )}\n </div>\n )}\n </DropZone>\n\n {showVideoOptions && stagedFile && !isUploading && state.status !== \"done\" && (\n <>\n {preview && (\n <div className=\"border border-slate-200 rounded-xl overflow-hidden bg-black\">\n <video src={preview} className=\"w-full max-h-[200px] block\" muted playsInline controls />\n </div>\n )}\n <div className=\"border border-slate-200 rounded-xl overflow-hidden\">\n <div className=\"px-3.5 py-2 bg-slate-100 text-[12px] font-bold text-slate-500 tracking-[0.04em]\">🎬 Configurações de vídeo</div>\n <VideoOptions value={videoOpts} onChange={setVideoOpts} style={{ padding: \"12px 14px\" }} />\n </div>\n <div className=\"flex gap-2\">\n <button\n className=\"inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border border-slate-200 bg-transparent text-slate-900 cursor-pointer hover:bg-slate-100\"\n onClick={() => { setStagedFile(null); setPreview(null); setVideoOpts(createInitialVideoOpts(video)); }}\n >\n Cancelar\n </button>\n <button\n className=\"flex-1 inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border-transparent bg-indigo-500 text-white cursor-pointer hover:opacity-90\"\n onClick={() => { const f = stagedFile; setStagedFile(null); void doUpload(f, videoOpts); setVideoOpts(createInitialVideoOpts(video)); }}\n >\n Enviar vídeo\n </button>\n </div>\n </>\n )}\n\n {isUploading && (\n renderProgress ? renderProgress(progress) : (\n <div className=\"flex flex-col gap-2 px-3 py-4 bg-slate-50 rounded-xl border border-slate-200\">\n <div className=\"flex justify-between items-center\">\n <span className=\"text-[13px] font-semibold text-slate-900\">{uploadLabel(state.status, progress)}</span>\n <div className=\"flex gap-2 items-center\">\n <span className=\"text-[13px] font-bold text-indigo-500\">{progress}%</span>\n <button\n className=\"inline-flex items-center justify-center text-[11px] font-semibold py-0.5 px-2 rounded-lg border border-slate-200 bg-transparent text-slate-900 cursor-pointer hover:bg-slate-100\"\n onClick={pause}\n >\n Pausar\n </button>\n </div>\n </div>\n <ProgressBar progress={progress} />\n <span className=\"text-[11px] text-slate-400\">O processamento do vídeo começa automaticamente após o envio</span>\n </div>\n )\n )}\n\n {isPaused && (\n <div className=\"flex gap-2\">\n <button\n className=\"flex-1 inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border-transparent bg-emerald-500 text-white cursor-pointer hover:opacity-90\"\n onClick={() => resume({ ...(bucket !== undefined && { bucket }), video: videoOpts })}\n >\n ▶ Retomar envio\n </button>\n <button\n className=\"inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border border-slate-200 bg-transparent text-slate-900 cursor-pointer hover:bg-slate-100\"\n onClick={() => { abort(); setPreview(null); }}\n >\n Cancelar\n </button>\n </div>\n )}\n\n {state.status === \"done\" && !renderSuccess && (\n <div className=\"flex flex-col gap-2 px-4 py-3.5 bg-green-500/[0.08] rounded-xl border border-green-500/20\">\n <div className=\"flex items-center gap-3\">\n <span className=\"text-2xl\">✅</span>\n <div className=\"flex-1\">\n <div className=\"font-bold text-sm text-green-700\">Vídeo enviado com sucesso!</div>\n <div className=\"text-[12px] text-slate-400 mt-0.5\">{formatBytes(state.result.size)}</div>\n </div>\n <button\n className=\"inline-flex items-center justify-center text-xs font-semibold py-1 px-2.5 rounded-lg border border-green-500/30 text-green-700 bg-transparent cursor-pointer hover:bg-green-500/10 shrink-0\"\n onClick={() => { reset(); setPreview(null); }}\n >\n Enviar outro\n </button>\n </div>\n <div className=\"text-[12px] text-slate-500 px-3 py-2 rounded-lg bg-green-500/[0.06] border border-green-500/15\">\n 🎬 Seu vídeo está sendo processado em segundo plano. Isso pode levar alguns minutos dependendo do tamanho.\n </div>\n </div>\n )}\n\n {state.status === \"error\" && !renderError && (\n <div className=\"flex items-center gap-3 px-4 py-3.5 bg-red-500/[0.07] rounded-xl border border-red-500/20\">\n <span className=\"text-[22px]\">⚠️</span>\n <div className=\"flex-1\">\n <div className=\"font-bold text-[13px] text-red-500\">Não foi possível enviar o vídeo</div>\n <div className=\"text-[12px] text-slate-400 mt-0.5\">{state.error.message}</div>\n </div>\n <button\n className=\"inline-flex items-center justify-center text-xs font-semibold py-1 px-2.5 rounded-lg border border-red-500/30 text-red-500 bg-transparent cursor-pointer hover:bg-red-500/10 shrink-0\"\n onClick={() => { reset(); setPreview(null); }}\n >\n Tentar novamente\n </button>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { useState, useCallback, type CSSProperties } from \"react\";\nimport { useMultipartUpload, useBatchUpload } from \"@geekapps/silo-nextjs\";\nimport type { ImageUploadOptions, VideoUploadOptions } from \"@geekapps/silo-nextjs\";\nimport type { FileUploaderProps } from \"./types.js\";\nimport { DropZone } from \"./components/DropZone.js\";\nimport { ProgressBar } from \"./components/ProgressBar.js\";\nimport { ImageOptions } from \"./components/ImageOptions.js\";\nimport { VideoOptions } from \"./components/VideoOptions.js\";\nimport { formatBytes, getFileIcon } from \"./utils/format.js\";\nimport { resolveTheme, themeToVars } from \"./utils/theme.js\";\n\nconst DEFAULT_VIDEO_OPTS: VideoUploadOptions = {\n thumbnails: true, storyboard: false, autoCaptions: false,\n separateAudio: false, codec: \"h264\", transcoding: \"auto\",\n};\n\nfunction createInitialImageOpts(image?: ImageUploadOptions): ImageUploadOptions {\n return image ?? { format: \"webp\", optimize: true };\n}\n\nfunction createInitialVideoOpts(video?: VideoUploadOptions): VideoUploadOptions {\n return video ?? DEFAULT_VIDEO_OPTS;\n}\n\nfunction uploadLabel(status: string, progress: number): string {\n if (status === \"preparing\") return \"Preparando…\";\n if (status === \"completing\") return \"Concluindo…\";\n if (progress < 30) return \"Iniciando envio…\";\n if (progress < 70) return \"Enviando…\";\n if (progress < 95) return \"Quase lá…\";\n return \"Finalizando…\";\n}\n\nexport function FileUploader({\n bucket,\n onUpload,\n onBatchUpload,\n onError,\n className = \"\",\n style,\n disabled = false,\n maxSize,\n accept,\n multiple = false,\n allowRename = false,\n showImageOptions = false,\n showVideoOptions = false,\n image,\n video,\n isPrivate,\n captionLanguages,\n chapterLanguages,\n theme,\n renderIcon,\n renderProgress,\n renderSuccess,\n renderError,\n children,\n}: FileUploaderProps) {\n const t = resolveTheme(theme);\n const vars = themeToVars(t);\n\n const containerStyle: CSSProperties = {\n ...vars as CSSProperties,\n ...style,\n };\n\n const single = useMultipartUpload(bucket);\n const batch = useBatchUpload();\n\n const [imageOpts, setImageOpts] = useState<ImageUploadOptions>(() => createInitialImageOpts(image));\n const [videoOpts, setVideoOpts] = useState<VideoUploadOptions>(() => createInitialVideoOpts(video));\n const [staged, setStaged] = useState<File[] | null>(null);\n const [renames, setRenames] = useState<Map<number, string>>(new Map());\n const [editingIndex, setEditingIndex] = useState<number | null>(null);\n\n function effectiveName(index: number, files: File[]): string {\n return renames.get(index) ?? files[index]?.name ?? \"\";\n }\n\n function setRename(index: number, name: string, files: File[]) {\n setRenames((prev) => {\n const next = new Map(prev);\n if (name.trim() && name.trim() !== files[index]?.name) next.set(index, name.trim());\n else next.delete(index);\n return next;\n });\n }\n\n function clearStaging() {\n setStaged(null);\n setRenames(new Map());\n setEditingIndex(null);\n setImageOpts(createInitialImageOpts(image));\n setVideoOpts(createInitialVideoOpts(video));\n }\n\n const doUpload = useCallback(async (files: File[], overrideImage?: ImageUploadOptions, overrideVideo?: VideoUploadOptions) => {\n const resolvedImage = overrideImage ?? imageOpts;\n const resolvedVideo = overrideVideo ?? videoOpts;\n const effectiveImage = showImageOptions ? resolvedImage : (image ?? resolvedImage);\n const effectiveVideo = showVideoOptions ? resolvedVideo : (video ?? resolvedVideo);\n const videoWithLangs = (base?: VideoUploadOptions): VideoUploadOptions | undefined => {\n if (!captionLanguages?.length && !chapterLanguages?.length) return base;\n return {\n ...(base ?? {}),\n ...(captionLanguages?.length && { languages: captionLanguages }),\n ...(chapterLanguages?.length && { chapterLanguages }),\n };\n };\n\n if (multiple && files.length > 1) {\n try {\n const batchVideo = videoWithLangs(effectiveVideo);\n const results = await batch.upload(files, {\n ...(bucket !== undefined && { bucket }),\n image: effectiveImage,\n ...(batchVideo !== undefined && { video: batchVideo }),\n ...(isPrivate !== undefined && { isPrivate }),\n ...(captionLanguages?.length && { captionLanguages }),\n });\n onBatchUpload?.(results);\n results.forEach((r) => onUpload?.(r));\n } catch (err) {\n onError?.(err instanceof Error ? err : new Error(String(err)));\n }\n } else {\n const file = files[0];\n if (!file) return;\n try {\n const singleVideo = videoWithLangs(effectiveVideo);\n const result = await single.upload(file, {\n ...(bucket !== undefined && { bucket }),\n image: effectiveImage,\n ...(singleVideo !== undefined && { video: singleVideo }),\n ...(isPrivate !== undefined && { isPrivate }),\n });\n if (result) onUpload?.(result);\n } catch (err) {\n onError?.(err instanceof Error ? err : new Error(String(err)));\n }\n }\n }, [single, batch, multiple, bucket, image, video, isPrivate, captionLanguages, chapterLanguages, imageOpts, videoOpts, showImageOptions, showVideoOptions, onUpload, onBatchUpload, onError]);\n\n const handleFiles = useCallback(async (files: File[]) => {\n const needsStaging = allowRename\n || (showImageOptions && files.some((f) => f.type.startsWith(\"image/\")))\n || (showVideoOptions && files.some((f) => f.type.startsWith(\"video/\")));\n if (needsStaging) {\n setImageOpts(createInitialImageOpts(image));\n setVideoOpts(createInitialVideoOpts(video));\n setStaged(files);\n setRenames(new Map());\n }\n else await doUpload(files);\n }, [allowRename, showImageOptions, showVideoOptions, doUpload, image, video]);\n\n async function handleConfirmUpload() {\n if (!staged) return;\n const filesToUpload = staged.map((f, i) => {\n const name = effectiveName(i, staged);\n return name !== f.name ? new File([f], name, { type: f.type }) : f;\n });\n const snapshotImage = imageOpts;\n const snapshotVideo = videoOpts;\n clearStaging();\n await doUpload(filesToUpload, snapshotImage, snapshotVideo);\n }\n\n const isBatch = batch.state.files.length > 0;\n const isSingleUploading = single.state.status === \"uploading\" || single.state.status === \"preparing\" || single.state.status === \"completing\";\n const isBatchUploading = batch.state.status === \"uploading\" || batch.state.status === \"preparing\";\n const isUploading = isSingleUploading || isBatchUploading;\n const singleProgress = single.state.status === \"uploading\" ? single.state.progress : single.state.status === \"completing\" ? 99 : 0;\n\n if (single.state.status === \"error\" && renderError) return <div className=\"flex flex-col gap-3 w-full\" style={containerStyle}>{renderError(single.state.error, single.reset)}</div>;\n if (single.state.status === \"done\" && renderSuccess) return <div className=\"flex flex-col gap-3 w-full\" style={containerStyle}>{renderSuccess(single.state.result)}</div>;\n\n return (\n <div className={`flex flex-col gap-3 w-full${className ? ` ${className}` : \"\"}`} style={containerStyle}>\n\n {/* Drop zone */}\n {!isBatch && !staged && (\n <DropZone\n {...(accept !== undefined && { accept })}\n {...(maxSize !== undefined && { maxSize })}\n {...(onError !== undefined && { onError })}\n {...(theme !== undefined && { theme })}\n multiple={multiple}\n disabled={disabled || isUploading}\n onFiles={handleFiles}\n style={{ padding: \"28px 24px\", textAlign: \"center\" }}\n >\n <div className=\"flex flex-col items-center gap-2\">\n {renderIcon ? renderIcon() : (\n <svg width=\"40\" height=\"40\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" className=\"text-slate-400 opacity-50\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5m-13.5-9L12 3m0 0l4.5 4.5M12 3v13.5\" />\n </svg>\n )}\n {children ?? (\n <>\n <span style={{ color: \"var(--silo-text)\", fontWeight: 700, fontSize: 15 }}>\n {multiple ? \"Arraste seus arquivos aqui\" : \"Arraste seu arquivo aqui\"}\n </span>\n <span style={{ color: \"var(--silo-text-muted)\", fontSize: 13 }}>ou clique para escolher do seu dispositivo</span>\n {maxSize && <span style={{ color: \"var(--silo-text-muted)\", fontSize: 12 }}>Tamanho máximo: {formatBytes(maxSize)}</span>}\n </>\n )}\n </div>\n </DropZone>\n )}\n\n {/* Staging */}\n {staged && (\n <div className=\"flex flex-col gap-2\">\n <div style={{ color: \"var(--silo-text-muted)\", fontSize: 13, fontWeight: 600, marginBottom: 2 }}>\n {staged.length === 1 ? \"1 arquivo selecionado\" : `${staged.length} arquivos selecionados`}\n </div>\n\n {staged.map((f, i) => (\n <div key={i} style={{ display: \"flex\", alignItems: \"center\", gap: 10, padding: \"10px 12px\", background: \"var(--silo-bg)\", borderRadius: \"var(--silo-radius)\", border: \"1px solid var(--silo-border)\" }}>\n <span style={{ fontSize: 20, flexShrink: 0 }}>{getFileIcon(f.type)}</span>\n <div style={{ flex: 1, minWidth: 0 }}>\n {editingIndex === i ? (\n <input\n autoFocus\n type=\"text\"\n defaultValue={effectiveName(i, staged)}\n onBlur={(e) => { setRename(i, e.target.value, staged); setEditingIndex(null); }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") { setRename(i, e.currentTarget.value, staged); setEditingIndex(null); }\n if (e.key === \"Escape\") setEditingIndex(null);\n }}\n style={{ width: \"100%\", fontSize: 13, fontWeight: 500, border: \"1px solid var(--silo-accent)\", borderRadius: 6, padding: \"2px 8px\", outline: \"none\", background: \"var(--silo-bg)\", color: \"var(--silo-text)\" }}\n />\n ) : (\n <div\n style={{ fontSize: 13, fontWeight: 600, color: \"var(--silo-text)\", overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\", cursor: allowRename ? \"text\" : \"default\" }}\n onClick={() => allowRename && setEditingIndex(i)}\n title={allowRename ? \"Clique para renomear\" : undefined}\n >\n {effectiveName(i, staged)}\n {renames.has(i) && <span style={{ color: \"var(--silo-accent)\", marginLeft: 6, fontSize: 10, fontWeight: 700 }}>renomeado</span>}\n </div>\n )}\n <div style={{ fontSize: 11, color: \"var(--silo-text-muted)\", marginTop: 2 }}>{formatBytes(f.size)}</div>\n </div>\n {allowRename && (\n <button\n onClick={() => setEditingIndex(i)}\n title=\"Renomear\"\n style={{ color: \"var(--silo-text-muted)\", background: \"none\", border: \"none\", cursor: \"pointer\", fontSize: 14, padding: \"0 4px\", flexShrink: 0 }}\n >\n ✏️\n </button>\n )}\n <button\n onClick={() => { const next = staged.filter((_, j) => j !== i); if (next.length === 0) clearStaging(); else setStaged(next); }}\n style={{ color: \"var(--silo-text-muted)\", background: \"none\", border: \"none\", cursor: \"pointer\", fontSize: 18, padding: \"0 4px\", lineHeight: 1, flexShrink: 0 }}\n >\n ×\n </button>\n </div>\n ))}\n\n {showImageOptions && staged.some((f) => f.type.startsWith(\"image/\")) && (\n <div style={{ border: \"1px solid var(--silo-border)\", borderRadius: \"var(--silo-radius)\", overflow: \"hidden\" }}>\n <div style={{ padding: \"8px 14px\", background: \"var(--silo-bg-hover)\", fontSize: 12, fontWeight: 700, color: \"var(--silo-text-muted)\", letterSpacing: \"0.04em\" }}>🖼️ Configurações de imagem</div>\n <div style={{ padding: \"12px 14px\", background: \"var(--silo-bg)\" }}>\n <ImageOptions value={imageOpts} onChange={setImageOpts} />\n </div>\n </div>\n )}\n\n {showVideoOptions && staged.some((f) => f.type.startsWith(\"video/\")) && (\n <div style={{ border: \"1px solid var(--silo-border)\", borderRadius: \"var(--silo-radius)\", overflow: \"hidden\" }}>\n <div style={{ padding: \"8px 14px\", background: \"var(--silo-bg-hover)\", fontSize: 12, fontWeight: 700, color: \"var(--silo-text-muted)\", letterSpacing: \"0.04em\" }}>🎬 Configurações de vídeo</div>\n <div style={{ padding: \"12px 14px\", background: \"var(--silo-bg)\" }}>\n <VideoOptions value={videoOpts} onChange={setVideoOpts} />\n </div>\n </div>\n )}\n\n <div className=\"flex gap-2 mt-1\">\n <button\n onClick={clearStaging}\n style={{ display: \"inline-flex\", alignItems: \"center\", justifyContent: \"center\", gap: 6, fontSize: 14, fontWeight: 700, padding: \"10px 16px\", borderRadius: \"var(--silo-radius)\", border: \"1px solid var(--silo-border)\", background: \"transparent\", color: \"var(--silo-text)\", cursor: \"pointer\" }}\n >\n Cancelar\n </button>\n <button\n onClick={handleConfirmUpload}\n style={{ flex: 1, display: \"inline-flex\", alignItems: \"center\", justifyContent: \"center\", gap: 6, fontSize: 14, fontWeight: 700, padding: \"10px 16px\", borderRadius: \"var(--silo-radius)\", border: \"none\", background: \"var(--silo-accent)\", color: \"#fff\", cursor: \"pointer\" }}\n >\n {staged.length > 1 ? `Enviar ${staged.length} arquivos` : \"Enviar arquivo\"}\n </button>\n </div>\n </div>\n )}\n\n {/* Single upload progress */}\n {isSingleUploading && !isBatch && (\n renderProgress ? renderProgress(singleProgress) : (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8, padding: \"12px 16px\", background: \"var(--silo-bg)\", borderRadius: \"var(--silo-radius)\", border: \"1px solid var(--silo-border)\" }}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <span style={{ fontSize: 13, fontWeight: 600, color: \"var(--silo-text)\" }}>{uploadLabel(single.state.status, singleProgress)}</span>\n <span style={{ fontSize: 13, fontWeight: 700, color: \"var(--silo-accent)\" }}>{singleProgress}%</span>\n </div>\n <ProgressBar progress={singleProgress} />\n </div>\n )\n )}\n\n {/* Batch upload progress */}\n {isBatch && (\n <div className=\"flex flex-col gap-2\">\n {batch.state.files.map((f, i) => {\n const st = f.status;\n const p = st.status === \"uploading\" ? st.progress : st.status === \"paused\" ? st.progress : st.status === \"done\" ? 100 : st.status === \"completing\" ? 99 : 0;\n const isPaused = st.status === \"paused\";\n const isDone = st.status === \"done\";\n const isErr = st.status === \"error\";\n\n return (\n <div key={i} style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"stretch\", gap: 8, padding: \"12px 14px\", background: \"var(--silo-bg)\", borderRadius: \"var(--silo-radius)\", border: \"1px solid var(--silo-border)\" }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10 }}>\n <span style={{ fontSize: 18, flexShrink: 0 }}>{getFileIcon(f.file.type)}</span>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontSize: 13, fontWeight: 600, color: \"var(--silo-text)\", overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>{f.file.name}</div>\n <div style={{ fontSize: 11, color: \"var(--silo-text-muted)\" }}>{formatBytes(f.file.size)}</div>\n </div>\n {isDone && <span style={{ fontSize: 18, flexShrink: 0 }}>✅</span>}\n {isErr && <span style={{ fontSize: 12, fontWeight: 600, color: \"var(--silo-error)\", flexShrink: 0 }}>Erro no envio</span>}\n {!isDone && !isErr && (\n <span style={{ fontSize: 12, fontWeight: 700, flexShrink: 0, color: isPaused ? \"var(--silo-text-muted)\" : \"var(--silo-accent)\" }}>\n {isPaused ? \"Pausado\" : `${p}%`}\n </span>\n )}\n {!isDone && !isErr && f.fileId && (\n isPaused\n ? <button style={{ fontSize: 11, fontWeight: 600, padding: \"2px 10px\", borderRadius: 6, border: \"none\", background: \"#22c55e\", color: \"#fff\", cursor: \"pointer\" }} onClick={() => batch.resumeFile(f.fileId!)}>Retomar</button>\n : st.status === \"uploading\" ? <button style={{ fontSize: 11, fontWeight: 600, padding: \"2px 10px\", borderRadius: 6, border: \"1px solid var(--silo-border)\", background: \"transparent\", color: \"var(--silo-text)\", cursor: \"pointer\" }} onClick={() => batch.pauseFile(f.fileId!)}>Pausar</button> : null\n )}\n </div>\n {!isDone && !isErr && <ProgressBar progress={p} />}\n </div>\n );\n })}\n\n <div className=\"flex gap-2\">\n {batch.state.status !== \"done\" && (\n <button\n onClick={isBatchUploading ? batch.pauseAll : batch.resumeAll}\n style={{ flex: 1, display: \"inline-flex\", alignItems: \"center\", justifyContent: \"center\", gap: 6, fontSize: 14, fontWeight: 700, padding: \"10px 16px\", borderRadius: \"var(--silo-radius)\", border: \"none\", background: isBatchUploading ? \"#f59e0b\" : \"#22c55e\", color: \"#fff\", cursor: \"pointer\" }}\n >\n {isBatchUploading ? \"⏸ Pausar tudo\" : \"▶ Retomar tudo\"}\n </button>\n )}\n <button\n onClick={batch.state.status === \"done\" ? batch.reset : batch.abortAll}\n style={{ display: \"inline-flex\", alignItems: \"center\", justifyContent: \"center\", gap: 6, fontSize: 14, fontWeight: 700, padding: \"10px 16px\", borderRadius: \"var(--silo-radius)\", border: \"none\", background: batch.state.status === \"done\" ? \"var(--silo-accent)\" : \"#ef4444cc\", color: \"#fff\", cursor: \"pointer\" }}\n >\n {batch.state.status === \"done\" ? \"Enviar mais arquivos\" : \"Cancelar\"}\n </button>\n </div>\n\n {batch.state.status === \"done\" && (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10, padding: \"10px 12px\", background: \"rgba(34,197,94,0.08)\", borderRadius: \"var(--silo-radius)\", border: \"1px solid rgba(34,197,94,0.2)\" }}>\n <span style={{ fontSize: 20 }}>🎉</span>\n <span style={{ fontSize: 14, fontWeight: 600, color: \"#16a34a\" }}>\n {batch.state.files.length === 1 ? \"Arquivo enviado com sucesso!\" : `${batch.state.files.length} arquivos enviados com sucesso!`}\n </span>\n </div>\n )}\n </div>\n )}\n\n {/* Single done */}\n {single.state.status === \"done\" && !renderSuccess && (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 12, padding: \"14px 16px\", background: \"rgba(34,197,94,0.08)\", borderRadius: \"var(--silo-radius)\", border: \"1px solid rgba(34,197,94,0.2)\" }}>\n <span style={{ fontSize: 24 }}>✅</span>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontWeight: 700, fontSize: 14, color: \"#16a34a\" }}>Arquivo enviado com sucesso!</div>\n <div style={{ fontSize: 12, color: \"var(--silo-text-muted)\", marginTop: 2 }}>{formatBytes(single.state.result.size)}</div>\n </div>\n <button\n onClick={single.reset}\n style={{ display: \"inline-flex\", alignItems: \"center\", justifyContent: \"center\", fontSize: 12, fontWeight: 600, padding: \"4px 10px\", borderRadius: 6, border: \"1px solid rgba(34,197,94,0.3)\", color: \"#16a34a\", background: \"transparent\", cursor: \"pointer\", flexShrink: 0 }}\n >\n Enviar outro\n </button>\n </div>\n )}\n\n {/* Single error */}\n {single.state.status === \"error\" && !renderError && (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 12, padding: \"14px 16px\", background: \"rgba(239,68,68,0.07)\", borderRadius: \"var(--silo-radius)\", border: \"1px solid rgba(239,68,68,0.2)\" }}>\n <span style={{ fontSize: 22 }}>⚠️</span>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontWeight: 700, fontSize: 13, color: \"var(--silo-error)\" }}>Não foi possível enviar o arquivo</div>\n <div style={{ fontSize: 12, color: \"var(--silo-text-muted)\", marginTop: 2 }}>{single.state.error.message}</div>\n </div>\n <button\n onClick={single.reset}\n style={{ display: \"inline-flex\", alignItems: \"center\", justifyContent: \"center\", fontSize: 12, fontWeight: 600, padding: \"4px 10px\", borderRadius: 6, border: \"1px solid rgba(239,68,68,0.3)\", color: \"var(--silo-error)\", background: \"transparent\", cursor: \"pointer\", flexShrink: 0 }}\n >\n Tentar novamente\n </button>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { useState, type CSSProperties } from \"react\";\nimport type { MediaUploaderProps } from \"./types.js\";\nimport { ImageUploader } from \"./ImageUploader.js\";\nimport { VideoUploader } from \"./VideoUploader.js\";\nimport { FileUploader } from \"./FileUploader.js\";\nimport { resolveTheme, themeToVars } from \"./utils/theme.js\";\n\ntype Tab = \"image\" | \"video\" | \"file\";\n\nconst TAB_LABELS: Record<Tab, { label: string; icon: string }> = {\n image: { label: \"Imagem\", icon: \"🖼️\" },\n video: { label: \"Vídeo\", icon: \"🎬\" },\n file: { label: \"Arquivo\", icon: \"📎\" },\n};\n\nexport function MediaUploader({\n tabs = [\"image\", \"video\", \"file\"],\n defaultTab,\n imageProps,\n videoProps,\n fileProps,\n className = \"\",\n style,\n theme,\n onUpload,\n onBatchUpload,\n onError,\n ...shared\n}: MediaUploaderProps) {\n const [activeTab, setActiveTab] = useState<Tab>(defaultTab ?? tabs[0] ?? \"image\");\n const t = resolveTheme(theme);\n const vars = themeToVars(t);\n\n const containerStyle: CSSProperties = {\n ...vars as CSSProperties,\n ...style,\n };\n\n return (\n <div\n className={`flex flex-col w-full border border-slate-200 rounded-xl overflow-hidden bg-slate-50${className ? ` ${className}` : \"\"}`}\n style={containerStyle}\n >\n {/* Tab bar */}\n <div className=\"flex border-b border-slate-200\">\n {tabs.map((tab) => (\n <button\n key={tab}\n onClick={() => setActiveTab(tab)}\n className={`flex-1 flex items-center justify-center gap-1.5 py-2.5 px-2 bg-transparent border-none border-b-2 cursor-pointer text-[13px] transition-colors duration-150${\n activeTab === tab\n ? \"border-b-indigo-500 font-semibold text-indigo-500\"\n : \"border-b-transparent font-normal text-slate-400 hover:text-slate-600\"\n }`}\n style={{ borderBottom: `2px solid ${activeTab === tab ? \"#6366f1\" : \"transparent\"}` }}\n >\n <span>{TAB_LABELS[tab].icon}</span>\n <span>{TAB_LABELS[tab].label}</span>\n </button>\n ))}\n </div>\n\n {/* Tab content */}\n <div className=\"p-4\">\n {activeTab === \"image\" && (\n <ImageUploader\n {...shared}\n {...imageProps}\n {...(theme !== undefined && { theme })}\n {...(onUpload !== undefined && { onUpload })}\n {...(onError !== undefined && { onError })}\n />\n )}\n {activeTab === \"video\" && (\n <VideoUploader\n {...shared}\n {...videoProps}\n {...(theme !== undefined && { theme })}\n {...(onUpload !== undefined && { onUpload })}\n {...(onError !== undefined && { onError })}\n />\n )}\n {activeTab === \"file\" && (\n <FileUploader\n {...shared}\n {...fileProps}\n multiple\n {...(theme !== undefined && { theme })}\n {...(onUpload !== undefined && { onUpload })}\n {...(onBatchUpload !== undefined && { onBatchUpload })}\n {...(onError !== undefined && { onError })}\n />\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type {\n KeyboardEvent,\n PointerEvent,\n ReactElement,\n ReactNode,\n} from \"react\";\nimport gsap from \"gsap\";\nimport {\n Play,\n Pause,\n Volume2,\n VolumeX,\n Maximize,\n Minimize,\n Captions as CaptionsIcon,\n Settings,\n} from \"lucide-react\";\n\nexport type VideoSourceType = \"dash\" | \"hls\" | \"file\";\n\nexport type SourceProps = {\n id?: string;\n src: string;\n label?: string;\n type?: VideoSourceType;\n default?: boolean;\n};\n\nexport type CaptionsProps = {\n src?: string; // URL that returns JSON: Array<{ src, srclang, label, default? }>\n data?: Array<{ src: string; srclang: string; label: string; default?: boolean }>; // inline captions, bypasses fetch\n};\n\nexport type ThumbnailProps = {\n /** Single URL (legacy). Use urls for adaptive resolution. */\n src?: string;\n /** Map of width label to URL: { \"320w\": \"...\", \"640w\": \"...\", \"1280w\": \"...\", \"1920w\": \"...\" } */\n urls?: Record<string, string>;\n};\n\nexport type StoryboardFrameProps = {\n start: number;\n end: number;\n image: string;\n x?: number;\n y?: number;\n w?: number;\n h?: number;\n};\n\nexport type StoryboardResolution = {\n /** VTT content with sprite URLs already resolved (no temp S3 upload needed) */\n vttText?: string | null;\n spriteUrl: string;\n tileW: number;\n tileH: number;\n cols: number;\n rows?: number | null;\n};\n\nexport type StoryboardProps = {\n /** Legacy: single VTT URL */\n src?: string;\n fallbackImage?: string;\n width?: number;\n height?: number;\n /** Multi-resolution storyboards from post-worker: { \"180p\": {...}, \"480p\": {...} } */\n resolutions?: Record<string, StoryboardResolution>;\n children?: ReactNode;\n};\n\ntype ParsedStoryboard = Omit<StoryboardProps, \"children\"> & {\n frames: StoryboardFrameProps[];\n};\n\ntype ResolvedCaption = {\n src: string;\n srclang: string;\n label: string;\n default?: boolean;\n};\n\nexport type ChaptersProps = {\n src?: string; // URL that returns JSON: Array<{ startTime, title, endTime? }>\n data?: Array<{ startTime: number; title: string; endTime?: number }>;\n};\n\ntype ResolvedChapter = {\n startTime: number;\n title: string;\n endTime?: number;\n};\n\nexport type AgeRatingProps = {\n /** The age_ratings JSON from the file: { US: \"PG-13\", BR: \"14\", EU: \"PEGI 16\" } */\n data?: Record<string, string>;\n /** BCP-47 locale like \"en-US\", \"pt-BR\", \"de-DE\" — picks the right region key */\n locale?: string;\n /** Custom lookup for display info per region+code: { title, description, imageUrl } */\n lookup?: Record<string, { title?: string; description?: string; imageUrl?: string }>;\n};\n\nexport type RatingProps = {\n /** Aggregate counts */\n counts?: { LOVE?: number; LIKE?: number; DISLIKE?: number };\n /** Current user's reaction */\n userReaction?: \"LOVE\" | \"LIKE\" | \"DISLIKE\" | null;\n /** Called when user clicks a reaction button */\n onReact?: (reaction: \"LOVE\" | \"LIKE\" | \"DISLIKE\" | null) => void;\n};\n\ntype ParsedVideoChildren = {\n sources: SourceProps[];\n captionsSrc?: string;\n captionsData?: Array<{ src: string; srclang: string; label: string; default?: boolean }>;\n chaptersSrc?: string;\n chaptersData?: ResolvedChapter[];\n thumbnailSrc?: string;\n thumbnailUrls?: Record<string, string>;\n storyboard?: ParsedStoryboard;\n ageRating?: AgeRatingProps;\n rating?: RatingProps;\n};\n\ntype QualityOption = {\n id: string;\n label: string;\n type: \"auto\" | \"hls\" | \"dash\";\n index?: number;\n};\n\ntype VideoProps = {\n title?: string;\n description?: string;\n children: ReactNode;\n className?: string;\n autoHideControls?: boolean;\n defaultVolume?: number;\n maxHeight?: string | number;\n /** Fixed height — disables aspect-ratio so the player stays at exactly this height regardless of video dimensions */\n fixedHeight?: string | number;\n};\n\ntype WebkitVideoElement = HTMLVideoElement & {\n webkitDisplayingFullscreen?: boolean;\n webkitEnterFullscreen?: () => void;\n webkitExitFullscreen?: () => void;\n};\n\ntype FullscreenCapableElement = HTMLDivElement & {\n webkitRequestFullscreen?: () => Promise<void> | void;\n};\n\ntype FullscreenCapableDocument = Document & {\n webkitFullscreenElement?: Element | null;\n webkitExitFullscreen?: () => Promise<void> | void;\n};\n\nconst AUTO_QUALITY: QualityOption = {\n id: \"auto\",\n label: \"Auto\",\n type: \"auto\",\n};\n\nconst PLAYBACK_SPEEDS = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 2];\n\ntype SettingsTab =\n | \"root\"\n | \"quality\"\n | \"subtitles\"\n | \"subtitles-style\"\n | \"audio\"\n | \"playback\";\n\ntype SubtitleStyle = {\n track: string; // srclang or \"off\"\n size: \"small\" | \"medium\" | \"large\" | \"xlarge\";\n color: \"white\" | \"yellow\" | \"cyan\";\n bg: \"none\" | \"semi\" | \"solid\";\n};\n\nexport function Source(_props: SourceProps) {\n return null;\n}\nSource.displayName = \"SiloSource\";\n\nexport function Captions(_props: CaptionsProps) {\n return null;\n}\nCaptions.displayName = \"SiloCaptions\";\n\nexport function Chapters(_props: ChaptersProps) {\n return null;\n}\nChapters.displayName = \"SiloChapters\";\n\nexport function VideoThumbnail(_props: ThumbnailProps) {\n return null;\n}\nVideoThumbnail.displayName = \"SiloVideoThumbnail\";\n\nexport function Storyboard(_props: StoryboardProps) {\n return null;\n}\nStoryboard.displayName = \"SiloStoryboard\";\n\nexport function StoryboardFrame(_props: StoryboardFrameProps) {\n return null;\n}\nStoryboardFrame.displayName = \"SiloStoryboardFrame\";\n\nexport function AgeRating(_props: AgeRatingProps) {\n return null;\n}\nAgeRating.displayName = \"SiloAgeRating\";\n\nexport function Rating(_props: RatingProps) {\n return null;\n}\nRating.displayName = \"SiloRating\";\n\nexport function Video({\n title,\n description,\n children,\n className,\n autoHideControls = true,\n defaultVolume = 0.72,\n maxHeight,\n fixedHeight,\n}: VideoProps) {\n const parsed = useMemo(() => parseVideoChildren(children), [children]);\n\n const [captions, setCaptions] = useState<ResolvedCaption[]>([]);\n const [chapters, setChapters] = useState<ResolvedChapter[]>([]);\n const [poster, setPoster] = useState<string | undefined>(undefined);\n\n const captionsSourceRef = useRef<string>(\"\");\n\n // Resolve captions — either from inline data or by fetching src URL\n useEffect(() => {\n // Identify the caption \"source key\" — src URL or first srclang from inline data\n const sourceKey = parsed.captionsSrc ?? parsed.captionsData?.[0]?.srclang ?? \"\";\n\n function applyResolved(data: ResolvedCaption[]) {\n const resolved = data.map((c, i) => ({ ...c, default: c.default ?? i === 0 }));\n setCaptions(resolved);\n // Auto-activate only when the caption source changes (new file/language), not on every content update\n if (captionsSourceRef.current !== sourceKey) {\n captionsSourceRef.current = sourceKey;\n const defaultTrack = resolved.find((c) => c.default);\n if (defaultTrack) {\n setSubtitleMode(defaultTrack.srclang);\n setSubtitleStyle((st) => ({ ...st, track: defaultTrack.srclang }));\n }\n }\n }\n\n if (parsed.captionsData) {\n applyResolved(parsed.captionsData);\n return;\n }\n if (!parsed.captionsSrc) { setCaptions([]); return; }\n let cancelled = false;\n fetch(parsed.captionsSrc, { cache: \"no-store\" })\n .then((r) => r.json())\n .then((data: ResolvedCaption[]) => {\n if (!cancelled && Array.isArray(data)) applyResolved(data);\n })\n .catch(() => { if (!cancelled) setCaptions([]); });\n return () => { cancelled = true; };\n }, [parsed.captionsSrc, parsed.captionsData]);\n\n // Resolve chapters — either from inline data or by fetching src URL\n useEffect(() => {\n if (parsed.chaptersData) {\n setChapters(parsed.chaptersData);\n return;\n }\n if (!parsed.chaptersSrc) { setChapters([]); return; }\n let cancelled = false;\n fetch(parsed.chaptersSrc, { cache: \"no-store\" })\n .then((r) => r.json())\n .then((data: ResolvedChapter[]) => {\n if (!cancelled && Array.isArray(data)) setChapters(data);\n })\n .catch(() => { if (!cancelled) setChapters([]); });\n return () => { cancelled = true; };\n }, [parsed.chaptersSrc, parsed.chaptersData]);\n\n const initialSourceIndex = useMemo(() => {\n const index = parsed.sources.findIndex((source) => source.default);\n return index >= 0 ? index : 0;\n }, [parsed.sources]);\n\n const initialSubtitleMode = useMemo(() => {\n const track = captions.find((c) => c.default);\n return track?.srclang ?? \"off\";\n }, [captions]);\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const chromeRef = useRef<HTMLDivElement | null>(null);\n const playerRef = useRef<HTMLDivElement | null>(null);\n const showAgeRatingRef = useRef<(() => void) | null>(null);\n const videoRef = useRef<HTMLVideoElement | null>(null);\n const progressRef = useRef<HTMLDivElement | null>(null);\n\n const hlsRef = useRef<any>(null);\n const dashRef = useRef<any>(null);\n const hideTimerRef = useRef<number | null>(null);\n\n const [sourceIndex, setSourceIndex] = useState(initialSourceIndex);\n const [qualities, setQualities] = useState<QualityOption[]>([AUTO_QUALITY]);\n const [selectedQuality, setSelectedQuality] = useState(\"auto\");\n const [audioTracks, setAudioTracks] = useState<\n { id: number; label: string }[]\n >([]);\n const [selectedAudio, setSelectedAudio] = useState<number>(0);\n const [settingsOpen, setSettingsOpen] = useState(false);\n const [settingsVisible, setSettingsVisible] = useState(false);\n\n const [settingsTab, setSettingsTab] = useState<SettingsTab>(\"root\");\n const [playbackRate, setPlaybackRate] = useState(1);\n const [subtitleStyle, setSubtitleStyle] = useState<SubtitleStyle>({\n track: initialSubtitleMode,\n size: \"medium\",\n color: \"white\",\n bg: \"semi\",\n });\n\n const [subtitleMode, setSubtitleMode] = useState(initialSubtitleMode);\n const [activeCue, setActiveCue] = useState<string | null>(null);\n const [storyboardSheetSize, setStoryboardSheetSize] = useState<{ w: number; h: number } | null>(null);\n const storyboardSheetUrlRef = useRef<string>(\"\");\n\n const [storyboardCues, setStoryboardCues] = useState<StoryboardFrameProps[]>([]);\n // Multi-resolution storyboard state — loaded cues per resolution key\n const storyboardCacheRef = useRef<Map<string, StoryboardFrameProps[]>>(new Map());\n // Which resolution is currently active for preview\n const [activeStoryboardRes, setActiveStoryboardRes] = useState<string | null>(null);\n // Preloaded sprite images (by URL) so they don't flash on first hover\n const preloadedSpritesRef = useRef<Set<string>>(new Set());\n\n // Rating state — internal so clicks don't re-render the parent and restart the video\n const [ratingCounts, setRatingCounts] = useState<{ LOVE: number; LIKE: number; DISLIKE: number }>(\n () => ({ LOVE: parsed.rating?.counts?.LOVE ?? 0, LIKE: parsed.rating?.counts?.LIKE ?? 0, DISLIKE: parsed.rating?.counts?.DISLIKE ?? 0 })\n );\n const [userReaction, setUserReaction] = useState<\"LOVE\" | \"LIKE\" | \"DISLIKE\" | null>(parsed.rating?.userReaction ?? null);\n const userReactionRef = useRef(userReaction);\n userReactionRef.current = userReaction;\n // Sync counts/userReaction when parent provides them for the first time (async load)\n const ratingInitializedRef = useRef(false);\n const incomingCounts = parsed.rating?.counts;\n const incomingUserReaction = parsed.rating?.userReaction;\n useEffect(() => {\n if (ratingInitializedRef.current) return;\n if (!incomingCounts && incomingUserReaction === undefined) return;\n ratingInitializedRef.current = true;\n if (incomingCounts) {\n setRatingCounts({ LOVE: incomingCounts.LOVE ?? 0, LIKE: incomingCounts.LIKE ?? 0, DISLIKE: incomingCounts.DISLIKE ?? 0 });\n }\n if (incomingUserReaction !== undefined) {\n setUserReaction(incomingUserReaction ?? null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [incomingCounts?.LOVE, incomingCounts?.LIKE, incomingCounts?.DISLIKE, incomingUserReaction]);\n // Keep a stable ref to the latest onReact callback so we don't need it in deps\n const onReactRef = useRef<RatingProps[\"onReact\"]>(parsed.rating?.onReact);\n onReactRef.current = parsed.rating?.onReact;\n\n const [preview, setPreview] = useState<{\n cue: StoryboardFrameProps;\n left: number;\n time: number;\n } | null>(null);\n\n const [duration, setDuration] = useState(0);\n const [currentTime, setCurrentTime] = useState(0);\n const [bufferedTime, setBufferedTime] = useState(0);\n\n const [isDragging, setIsDragging] = useState(false);\n const [isHoveringProgress, setIsHoveringProgress] = useState(false);\n const dragPointerIdRef = useRef<number | null>(null);\n const [isPlaying, setIsPlaying] = useState(false);\n const [hasPlayed, setHasPlayed] = useState(false);\n const ageRatingTlRef = useRef<gsap.core.Timeline | null>(null);\n const ageRatingPauseTimerRef = useRef<number | null>(null);\n const ageRatingWrapRef = useRef<HTMLDivElement | null>(null);\n const ageRatingIconRef = useRef<HTMLDivElement | null>(null);\n const ageRatingTextRef = useRef<HTMLDivElement | null>(null);\n const [clickIcon, setClickIcon] = useState<\"play\" | \"pause\" | null>(null);\n const clickIconTimerRef = useRef<number | null>(null);\n const clickIconRef = useRef<HTMLDivElement | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [controlsVisible, setControlsVisible] = useState(true);\n const settingsPanelRef = useRef<HTMLDivElement | null>(null);\n const settingsContentRef = useRef<HTMLDivElement | null>(null);\n const progressTrackRef = useRef<HTMLDivElement | null>(null);\n const progressThumbRef = useRef<HTMLDivElement | null>(null);\n const [volume, setVolume] = useState(defaultVolume);\n const [isMuted, setIsMuted] = useState(false);\n const [isFullscreen, setIsFullscreen] = useState(false);\n const [playerHeight, setPlayerHeight] = useState(0);\n const [playerWidth, setPlayerWidth] = useState(0);\n\n // Thumbnail: pick best available URL based on player width and network quality\n useEffect(() => {\n const urls = parsed.thumbnailUrls;\n if (!urls || Object.keys(urls).length === 0) {\n setPoster(parsed.thumbnailSrc ?? undefined);\n return;\n }\n const sorted = Object.entries(urls)\n .map(([label, url]) => ({ px: parseInt(label.replace(\"w\", \"\"), 10) || 0, url }))\n .filter((e) => e.px > 0)\n .sort((a, b) => a.px - b.px);\n if (sorted.length === 0) { setPoster(parsed.thumbnailSrc ?? undefined); return; }\n const dpr = typeof window !== \"undefined\" ? window.devicePixelRatio ?? 1 : 1;\n const conn = typeof navigator !== \"undefined\" ? (navigator as any).connection : null;\n const connFactor = conn?.effectiveType === \"4g\" ? 1 : conn?.effectiveType === \"3g\" ? 0.5 : 0.25;\n const targetPx = (playerWidth || 640) * dpr * (conn ? connFactor : 1);\n const best = sorted.find((e) => e.px >= targetPx) ?? sorted[sorted.length - 1]!;\n setPoster(best.url);\n }, [parsed.thumbnailUrls, parsed.thumbnailSrc, playerWidth]);\n\n const activeSource = parsed.sources[sourceIndex] ?? parsed.sources[0] ?? null;\n\n const progressPercent = duration ? (currentTime / duration) * 100 : 0;\n const bufferedPercent = duration ? (bufferedTime / duration) * 100 : 0;\n\n const destroyMediaEngines = useCallback(() => {\n if (hlsRef.current) {\n hlsRef.current.destroy();\n hlsRef.current = null;\n }\n\n if (dashRef.current) {\n dashRef.current.reset();\n dashRef.current = null;\n }\n }, []);\n\n const applySubtitleMode = useCallback((mode: string) => {\n const video = videoRef.current;\n if (!video) return;\n\n // Use \"hidden\" instead of \"showing\" — we render cues ourselves for full style control\n let activeTrack: TextTrack | null = null;\n Array.from(video.textTracks).forEach((track) => {\n if (track.kind === \"metadata\") return; // don't touch metadata tracks (storyboard)\n const enabled = mode !== \"off\" && track.language === mode;\n track.mode = enabled ? \"hidden\" : \"disabled\";\n if (enabled) activeTrack = track;\n });\n // Always clear the previous track's cue when switching. Disabling a track\n // stops its \"cuechange\" from firing, so the old caption would otherwise stay\n // frozen on screen. Then seed the new track's current cue immediately so the\n // switch shows the right caption without waiting for the next cue boundary.\n if (!activeTrack) {\n setActiveCue(null);\n return;\n }\n const cues = (activeTrack as TextTrack).activeCues;\n const cue = cues && cues.length > 0 ? (cues[0] as VTTCue) : null;\n setActiveCue(cue ? cue.text.replace(/<[^>]*>/g, \"\") : null);\n }, []);\n\n const showControlsTemporarily = useCallback(() => {\n setControlsVisible(true);\n\n if (hideTimerRef.current) {\n window.clearTimeout(hideTimerRef.current);\n }\n\n const video = videoRef.current;\n\n if (autoHideControls && video && !video.paused) {\n hideTimerRef.current = window.setTimeout(() => {\n setControlsVisible(false);\n }, 2400);\n }\n\n // when paused, show age rating on interaction (mouse move / touch / focus)\n if (video?.paused) {\n showAgeRatingRef.current?.();\n }\n }, [autoHideControls]);\n\n useEffect(() => {\n if (!containerRef.current) return;\n\n gsap.fromTo(\n containerRef.current,\n {\n opacity: 0,\n y: 36,\n scale: 0.985,\n filter: \"blur(10px)\",\n },\n {\n opacity: 1,\n y: 0,\n scale: 1,\n filter: \"blur(0px)\",\n duration: 0.85,\n ease: \"power3.out\",\n },\n );\n }, []);\n\n // settingsOpen = mounted in DOM; settingsVisible = used only to trigger GSAP (open/close driven imperatively)\n const openSettings = useCallback(() => {\n setSettingsOpen(true);\n setSettingsTab(\"root\");\n setSettingsVisible(true);\n }, []);\n\n const closeSettings = useCallback(() => {\n const panel = settingsPanelRef.current;\n if (panel) {\n gsap.killTweensOf(panel);\n gsap.to(panel, {\n opacity: 0,\n y: 8,\n scale: 0.97,\n duration: 0.18,\n ease: \"power2.in\",\n onComplete: () => {\n setSettingsOpen(false);\n setSettingsVisible(false);\n },\n });\n } else {\n setSettingsOpen(false);\n setSettingsVisible(false);\n }\n }, []);\n\n // GSAP: animate settings panel open\n useEffect(() => {\n if (!settingsOpen) return;\n const panel = settingsPanelRef.current;\n if (!panel) return;\n gsap.killTweensOf(panel);\n gsap.fromTo(\n panel,\n { opacity: 0, y: 8, scale: 0.97 },\n { opacity: 1, y: 0, scale: 1, duration: 0.2, ease: \"power2.out\" },\n );\n }, [settingsOpen]);\n\n // GSAP: animate settings sub-menu slide-in on tab change\n useEffect(() => {\n const el = settingsContentRef.current;\n if (!el) return;\n gsap.killTweensOf(el);\n gsap.fromTo(\n el,\n { opacity: 0, x: 12 },\n { opacity: 1, x: 0, duration: 0.18, ease: \"power2.out\" },\n );\n }, [settingsTab]);\n\n // GSAP: controls chrome fade + cursor hide when controls hidden while playing\n useEffect(() => {\n const el = chromeRef.current;\n const player = playerRef.current;\n if (!el) return;\n gsap.killTweensOf(el);\n gsap.to(el, {\n opacity: controlsVisible ? 1 : 0,\n duration: 0.2,\n ease: \"power1.inOut\",\n });\n el.style.pointerEvents = controlsVisible ? \"\" : \"none\";\n if (player) {\n player.style.cursor = controlsVisible ? \"\" : \"none\";\n }\n }, [controlsVisible]);\n\n // GSAP: click icon fade\n useEffect(() => {\n const el = clickIconRef.current;\n if (!el) return;\n gsap.killTweensOf(el);\n if (clickIcon) {\n gsap.to(el, { opacity: 1, duration: 0.08, ease: \"power1.in\" });\n } else {\n gsap.to(el, { opacity: 0, duration: 0.45, ease: \"power1.out\" });\n }\n }, [clickIcon]);\n\n // GSAP: progress bar track + thumb + chapter markers on hover/drag state\n useEffect(() => {\n const track = progressTrackRef.current;\n const thumb = progressThumbRef.current;\n const container = progressRef.current;\n const targetH = isDragging ? 7 : isHoveringProgress ? 5 : 3;\n const targetW = isDragging ? 18 : isHoveringProgress ? 14 : 10;\n if (track) {\n gsap.killTweensOf(track);\n gsap.to(track, { height: targetH, duration: 0.15, ease: \"power1.inOut\" });\n }\n if (thumb) {\n gsap.killTweensOf(thumb);\n gsap.to(thumb, { width: targetW, height: targetW, duration: 0.2, ease: \"back.out(1.7)\" });\n }\n if (container) {\n const markers = container.querySelectorAll(\"[data-chapter-marker]\");\n markers.forEach((el) => {\n gsap.killTweensOf(el);\n gsap.to(el, { height: targetH, duration: 0.15, ease: \"power1.inOut\" });\n });\n }\n }, [isDragging, isHoveringProgress]);\n\n // controls visibility handled via GSAP effect above\n\n useEffect(() => {\n if (sourceIndex >= parsed.sources.length) {\n setSourceIndex(initialSourceIndex);\n }\n }, [sourceIndex, parsed.sources.length, initialSourceIndex]);\n\n useEffect(() => {\n if (\n subtitleMode !== \"off\" &&\n !captions.some((subtitle) => subtitle.srclang === subtitleMode)\n ) {\n setSubtitleMode(initialSubtitleMode);\n }\n }, [subtitleMode, captions, initialSubtitleMode]);\n\n\n useEffect(() => {\n const video = videoRef.current;\n if (!video) return;\n\n const syncTime = () => {\n setCurrentTime(video.currentTime || 0);\n\n if (video.buffered.length > 0) {\n setBufferedTime(video.buffered.end(video.buffered.length - 1));\n }\n };\n\n const syncDuration = () => {\n setDuration(Number.isFinite(video.duration) ? video.duration : 0);\n applySubtitleMode(subtitleMode);\n };\n\n const hideAgeRating = () => {\n const wrap = ageRatingWrapRef.current;\n if (!wrap) return;\n if (ageRatingTlRef.current) ageRatingTlRef.current.kill();\n gsap.to(wrap, { opacity: 0, duration: 0.4, ease: \"power2.inOut\" });\n };\n\n const showAgeRating = () => {\n if (!parsed.ageRating?.data) return;\n const wrap = ageRatingWrapRef.current;\n const icon = ageRatingIconRef.current;\n const text = ageRatingTextRef.current;\n if (!wrap) return;\n\n if (ageRatingTlRef.current) ageRatingTlRef.current.kill();\n\n const HOLD = 12;\n const tl = gsap.timeline({ delay: 0.6 });\n\n // gradient bg fade in\n tl.fromTo(wrap, { opacity: 0 }, { opacity: 1, duration: 0.5, ease: \"power2.out\" });\n\n // icon pop with elastic overshoot\n if (icon) {\n tl.fromTo(\n icon,\n { opacity: 0, scale: 0.7 },\n { opacity: 1, scale: 1, duration: 0.55, ease: \"back.out(1.6)\" },\n \"-=0.2\",\n );\n }\n\n // text slides in from left\n if (text) {\n tl.fromTo(\n text,\n { opacity: 0, x: -10 },\n { opacity: 1, x: 0, duration: 0.4, ease: \"power2.out\" },\n \"-=0.25\",\n );\n }\n\n // hold then fade everything out\n tl.to({}, { duration: HOLD });\n tl.to(wrap, { opacity: 0, duration: 0.7, ease: \"power2.inOut\" });\n\n ageRatingTlRef.current = tl;\n };\n\n showAgeRatingRef.current = showAgeRating;\n\n const onPlay = () => {\n setIsPlaying(true);\n if (ageRatingPauseTimerRef.current) {\n window.clearTimeout(ageRatingPauseTimerRef.current);\n ageRatingPauseTimerRef.current = null;\n }\n setHasPlayed((prev) => {\n if (!prev) showAgeRating();\n return true;\n });\n showControlsTemporarily();\n };\n\n const onPause = () => {\n setIsPlaying(false);\n setControlsVisible(true);\n hideAgeRating();\n if (parsed.ageRating?.data) {\n if (ageRatingPauseTimerRef.current) window.clearTimeout(ageRatingPauseTimerRef.current);\n ageRatingPauseTimerRef.current = window.setTimeout(() => {\n showAgeRating();\n ageRatingPauseTimerRef.current = null;\n }, 60 * 1000);\n }\n };\n\n const onWaiting = () => setIsLoading(true);\n const onCanPlay = () => setIsLoading(false);\n const onEnded = () => setControlsVisible(true);\n\n video.addEventListener(\"timeupdate\", syncTime);\n video.addEventListener(\"progress\", syncTime);\n video.addEventListener(\"loadedmetadata\", syncDuration);\n video.addEventListener(\"durationchange\", syncDuration);\n video.addEventListener(\"play\", onPlay);\n video.addEventListener(\"pause\", onPause);\n video.addEventListener(\"waiting\", onWaiting);\n video.addEventListener(\"canplay\", onCanPlay);\n video.addEventListener(\"ended\", onEnded);\n\n return () => {\n video.removeEventListener(\"timeupdate\", syncTime);\n video.removeEventListener(\"progress\", syncTime);\n video.removeEventListener(\"loadedmetadata\", syncDuration);\n video.removeEventListener(\"durationchange\", syncDuration);\n video.removeEventListener(\"play\", onPlay);\n video.removeEventListener(\"pause\", onPause);\n video.removeEventListener(\"waiting\", onWaiting);\n video.removeEventListener(\"canplay\", onCanPlay);\n video.removeEventListener(\"ended\", onEnded);\n if (ageRatingTlRef.current) ageRatingTlRef.current.kill();\n if (ageRatingPauseTimerRef.current) window.clearTimeout(ageRatingPauseTimerRef.current);\n };\n }, [applySubtitleMode, subtitleMode, showControlsTemporarily]);\n\n useEffect(() => {\n const video = videoRef.current;\n if (!video) return;\n\n video.volume = volume;\n video.muted = isMuted || volume === 0;\n }, [volume, isMuted]);\n\n useEffect(() => {\n applySubtitleMode(subtitleMode);\n if (subtitleMode === \"off\") setActiveCue(null);\n }, [subtitleMode, applySubtitleMode]);\n\n // Apply playback rate\n useEffect(() => {\n const video = videoRef.current;\n if (!video) return;\n video.playbackRate = playbackRate;\n }, [playbackRate]);\n\n // Read active cue from native track and expose it for custom rendering\n const subtitleModeRef = useRef(subtitleMode);\n useEffect(() => {\n subtitleModeRef.current = subtitleMode;\n }, [subtitleMode]);\n\n useEffect(() => {\n const video = videoRef.current;\n if (!video) return;\n\n const onCueChange = () => {\n const mode = subtitleModeRef.current;\n if (mode === \"off\") {\n setActiveCue(null);\n return;\n }\n const track = Array.from(video.textTracks).find(\n (t) => t.language === mode && t.kind !== \"metadata\",\n );\n if (!track || !track.activeCues || track.activeCues.length === 0) {\n setActiveCue(null);\n return;\n }\n const cue = track.activeCues[0] as VTTCue;\n setActiveCue(cue.text.replace(/<[^>]*>/g, \"\"));\n };\n\n const bindTracks = () => {\n Array.from(video.textTracks).forEach((t) => {\n if (t.kind === \"metadata\") return;\n t.removeEventListener(\"cuechange\", onCueChange);\n t.addEventListener(\"cuechange\", onCueChange);\n });\n applySubtitleMode(subtitleModeRef.current);\n };\n\n bindTracks();\n video.textTracks.addEventListener(\"addtrack\", bindTracks);\n return () => {\n video.textTracks.removeEventListener(\"addtrack\", bindTracks);\n Array.from(video.textTracks).forEach((t) =>\n t.removeEventListener(\"cuechange\", onCueChange),\n );\n };\n }, []);\n\n useEffect(() => {\n const video = videoRef.current as WebkitVideoElement | null;\n\n const onFullscreenChange = () => {\n const doc = document as FullscreenCapableDocument;\n const nativeFullscreen = Boolean(\n document.fullscreenElement || doc.webkitFullscreenElement,\n );\n const iosVideoFullscreen = Boolean(video?.webkitDisplayingFullscreen);\n setIsFullscreen(nativeFullscreen || iosVideoFullscreen);\n };\n\n document.addEventListener(\"fullscreenchange\", onFullscreenChange);\n document.addEventListener(\n \"webkitfullscreenchange\",\n onFullscreenChange as EventListener,\n );\n video?.addEventListener(\n \"webkitbeginfullscreen\",\n onFullscreenChange as EventListener,\n );\n video?.addEventListener(\n \"webkitendfullscreen\",\n onFullscreenChange as EventListener,\n );\n\n return () => {\n document.removeEventListener(\"fullscreenchange\", onFullscreenChange);\n document.removeEventListener(\n \"webkitfullscreenchange\",\n onFullscreenChange as EventListener,\n );\n video?.removeEventListener(\n \"webkitbeginfullscreen\",\n onFullscreenChange as EventListener,\n );\n video?.removeEventListener(\n \"webkitendfullscreen\",\n onFullscreenChange as EventListener,\n );\n };\n }, []);\n\n useEffect(() => {\n const player = playerRef.current;\n if (!player) return;\n const ro = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n setPlayerHeight(entry.contentRect.height);\n setPlayerWidth(entry.contentRect.width);\n }\n });\n ro.observe(player);\n return () => ro.disconnect();\n }, []);\n\n // Storyboard loading — supports both legacy single VTT and multi-resolution\n useEffect(() => {\n let cancelled = false;\n\n async function loadStoryboard() {\n if (!parsed.storyboard) { setStoryboardCues([]); setActiveStoryboardRes(null); return; }\n\n // Inline frames take priority\n if (parsed.storyboard.frames.length > 0) {\n setStoryboardCues(parsed.storyboard.frames);\n return;\n }\n\n // Multi-resolution path: load lowest resolution immediately\n const resolutions = parsed.storyboard.resolutions;\n if (resolutions && Object.keys(resolutions).length > 0) {\n storyboardCacheRef.current.clear();\n preloadedSpritesRef.current.clear();\n\n // Resolution priority: lowest first for initial load\n const RES_ORDER = [\"180p\", \"240p\", \"360p\", \"480p\", \"default\"];\n const keys = Object.keys(resolutions).sort((a, b) => {\n const ai = RES_ORDER.indexOf(a); const bi = RES_ORDER.indexOf(b);\n return (ai === -1 ? 99 : ai) - (bi === -1 ? 99 : bi);\n });\n\n // Load each resolution and cache it\n const loadRes = async (key: string) => {\n if (cancelled) return;\n const res = resolutions[key];\n if (!res) return;\n let cues: StoryboardFrameProps[] = [];\n if (res.vttText) {\n cues = parseStoryboardVtt(res.vttText, res.spriteUrl);\n } else {\n // Fallback: single-image cue spanning entire video\n cues = [{ start: 0, end: Number.MAX_SAFE_INTEGER, image: res.spriteUrl, w: res.tileW, h: res.tileH }];\n }\n storyboardCacheRef.current.set(key, cues);\n // Preload sprite image\n if (!preloadedSpritesRef.current.has(res.spriteUrl)) {\n preloadedSpritesRef.current.add(res.spriteUrl);\n const img = new window.Image();\n img.src = res.spriteUrl;\n }\n return cues;\n };\n\n // Load lowest res immediately, show it\n const firstKey = keys[0]!;\n const firstCues = await loadRes(firstKey);\n if (!cancelled && firstCues) {\n setStoryboardCues(firstCues);\n setActiveStoryboardRes(firstKey);\n }\n\n // Load remaining resolutions in background\n for (const key of keys.slice(1)) {\n await loadRes(key);\n }\n return;\n }\n\n // Legacy single VTT src\n if (!parsed.storyboard.src) {\n setStoryboardCues([]);\n return;\n }\n try {\n const response = await fetch(parsed.storyboard.src);\n if (!response.ok) throw new Error(\"Storyboard not found\");\n const text = await response.text();\n const cues = parseStoryboardVtt(text, new URL(parsed.storyboard.src, window.location.href).href);\n if (!cancelled) setStoryboardCues(cues);\n } catch {\n if (!cancelled && parsed.storyboard.fallbackImage) {\n setStoryboardCues([{\n start: 0, end: Number.MAX_SAFE_INTEGER,\n image: parsed.storyboard.fallbackImage,\n w: parsed.storyboard.width ?? 160, h: parsed.storyboard.height ?? 90,\n }]);\n }\n }\n }\n\n loadStoryboard();\n return () => { cancelled = true; };\n }, [parsed.storyboard]);\n\n useEffect(() => {\n const video = videoRef.current;\n let cancelled = false;\n\n if (!video || !activeSource) {\n setIsLoading(false);\n return;\n }\n\n destroyMediaEngines();\n\n setIsLoading(true);\n setCurrentTime(0);\n setBufferedTime(0);\n setDuration(0);\n setSelectedQuality(\"auto\");\n setQualities([AUTO_QUALITY]);\n setAudioTracks([]);\n setSelectedAudio(0);\n closeSettings();\n\n video.pause();\n video.removeAttribute(\"src\");\n video.load();\n\n const sourceType = inferSourceType(activeSource);\n\n if (sourceType === \"dash\") {\n void (async () => {\n try {\n const dashModule = await import(\"dashjs\");\n if (cancelled) return;\n\n const dashjs = dashModule as any;\n const dash = dashjs.MediaPlayer().create();\n dashRef.current = dash;\n\n dash.updateSettings({\n streaming: {\n abr: {\n autoSwitchBitrate: {\n video: true,\n },\n },\n },\n });\n\n dash.on(dashjs.MediaPlayer.events.STREAM_INITIALIZED, () => {\n const bitrates = dash.getBitrateInfoListFor(\"video\") ?? [];\n\n setQualities([\n AUTO_QUALITY,\n ...bitrates.map((item: any, index: number) => ({\n id: `dash-${index}`,\n label: item.height\n ? `${item.height}p`\n : `${Math.round((item.bitrate ?? 0) / 1000)} kbps`,\n type: \"dash\" as const,\n index,\n })),\n ]);\n\n setIsLoading(false);\n });\n\n dash.on(dashjs.MediaPlayer.events.ERROR, () => {\n console.error(\"[Silo] MPEG-DASH playback failed\");\n setIsLoading(false);\n });\n\n dash.initialize(video, activeSource.src, false);\n } catch {\n if (!cancelled) {\n console.error(\"[Silo] MPEG-DASH player load failed\");\n setIsLoading(false);\n }\n }\n })();\n\n return () => {\n cancelled = true;\n destroyMediaEngines();\n };\n }\n\n if (sourceType === \"hls\") {\n void (async () => {\n try {\n const HlsModule = await import(\"hls.js\");\n if (cancelled) return;\n\n const Hls = HlsModule.default;\n\n if (Hls.isSupported()) {\n const hls = new Hls({\n enableWorker: true,\n maxBufferLength: 10,\n maxMaxBufferLength: 20,\n maxBufferSize: 20 * 1000 * 1000,\n });\n\n hlsRef.current = hls;\n\n hls.loadSource(activeSource.src);\n hls.attachMedia(video);\n\n hls.on(Hls.Events.MANIFEST_PARSED, (_: any, data: any) => {\n const levels = data.levels ?? hls.levels ?? [];\n setQualities([\n AUTO_QUALITY,\n ...levels.map((level: any, index: number) => ({\n id: `hls-${index}`,\n label:\n level.name ??\n (level.height ? `${level.height}p` : `${index + 1}`),\n type: \"hls\" as const,\n index,\n })),\n ]);\n\n const tracks: any[] = hls.audioTracks ?? [];\n if (tracks.length > 1) {\n setAudioTracks(\n tracks.map((t: any, i: number) => ({\n id: i,\n label: t.name ?? t.lang ?? `Track ${i + 1}`,\n })),\n );\n setSelectedAudio(hls.audioTrack ?? 0);\n }\n\n setIsLoading(false);\n });\n\n hls.on(Hls.Events.AUDIO_TRACKS_UPDATED, (_: any, data: any) => {\n const tracks: any[] = data.audioTracks ?? [];\n if (tracks.length > 1) {\n setAudioTracks(\n tracks.map((t: any, i: number) => ({\n id: i,\n label: t.name ?? t.lang ?? `Track ${i + 1}`,\n })),\n );\n }\n });\n\n hls.on(Hls.Events.ERROR, (_: any, data: any) => {\n if (!data.fatal) return;\n\n if (data.type === Hls.ErrorTypes.MEDIA_ERROR) {\n hls.recoverMediaError();\n return;\n }\n\n console.error(\"[Silo] HLS playback failed\");\n setIsLoading(false);\n });\n\n return;\n }\n\n if (video.canPlayType(\"application/vnd.apple.mpegurl\")) {\n video.src = activeSource.src;\n video.load();\n setIsLoading(false);\n return;\n }\n\n console.error(\"[Silo] HLS not supported in this browser\");\n setIsLoading(false);\n } catch {\n if (!cancelled) {\n console.error(\"[Silo] HLS player load failed\");\n setIsLoading(false);\n }\n }\n })();\n\n return () => {\n cancelled = true;\n destroyMediaEngines();\n };\n }\n\n video.src = activeSource.src;\n video.load();\n setIsLoading(false);\n\n return () => {\n cancelled = true;\n video.removeAttribute(\"src\");\n video.load();\n };\n }, [activeSource, destroyMediaEngines]);\n\n const togglePlay = useCallback(async () => {\n const video = videoRef.current;\n if (!video) return;\n\n const wasPaused = video.paused;\n\n try {\n if (wasPaused) {\n // Wait for enough data if the browser isn't ready (e.g. after a seek)\n if (video.readyState < HTMLMediaElement.HAVE_FUTURE_DATA) {\n await new Promise<void>((resolve) => {\n const onReady = () => { video.removeEventListener(\"canplay\", onReady); resolve(); };\n video.addEventListener(\"canplay\", onReady);\n });\n }\n await video.play();\n } else {\n video.pause();\n }\n if (clickIconTimerRef.current)\n window.clearTimeout(clickIconTimerRef.current);\n setClickIcon(wasPaused ? \"play\" : \"pause\");\n clickIconTimerRef.current = window.setTimeout(\n () => setClickIcon(null),\n 600,\n );\n } catch {\n // Autoplay policy or seek-in-progress — silently ignore\n }\n }, []);\n\n const seekRelative = useCallback((seconds: number) => {\n const video = videoRef.current;\n if (!video) return;\n\n video.currentTime = Math.max(\n 0,\n Math.min(video.currentTime + seconds, video.duration || 0),\n );\n }, []);\n\n const toggleFullscreen = useCallback(async () => {\n const player = playerRef.current as FullscreenCapableElement | null;\n const video = videoRef.current as WebkitVideoElement | null;\n const doc = document as FullscreenCapableDocument;\n\n if (!player && !video) return;\n\n try {\n const nativeFullscreen = Boolean(\n document.fullscreenElement || doc.webkitFullscreenElement,\n );\n const iosVideoFullscreen = Boolean(video?.webkitDisplayingFullscreen);\n\n if (nativeFullscreen || iosVideoFullscreen) {\n if (document.fullscreenElement && document.exitFullscreen) {\n await document.exitFullscreen();\n return;\n }\n\n if (doc.webkitExitFullscreen) {\n await doc.webkitExitFullscreen();\n return;\n }\n\n if (video?.webkitExitFullscreen) {\n video.webkitExitFullscreen();\n return;\n }\n\n return;\n }\n\n if (player?.requestFullscreen) {\n await player.requestFullscreen();\n return;\n }\n\n if (player?.webkitRequestFullscreen) {\n await player.webkitRequestFullscreen();\n return;\n }\n\n if (video?.webkitEnterFullscreen) {\n video.webkitEnterFullscreen();\n return;\n }\n\n if (video?.requestFullscreen) {\n await video.requestFullscreen();\n return;\n }\n\n throw new Error(\"Fullscreen unavailable\");\n } catch {\n console.error(\"[Silo] Fullscreen toggle failed\");\n }\n }, []);\n\n const changeAudio = useCallback((trackId: number) => {\n setSelectedAudio(trackId);\n closeSettings();\n if (hlsRef.current) {\n hlsRef.current.audioTrack = trackId;\n }\n }, [closeSettings]);\n\n const changeQuality = useCallback(\n (qualityId: string) => {\n const option = qualities.find((quality) => quality.id === qualityId);\n if (!option) return;\n\n setSelectedQuality(qualityId);\n closeSettings();\n\n if (option.type === \"auto\") {\n if (hlsRef.current) {\n hlsRef.current.currentLevel = -1;\n }\n\n if (dashRef.current) {\n dashRef.current.updateSettings({\n streaming: {\n abr: {\n autoSwitchBitrate: {\n video: true,\n },\n },\n },\n });\n }\n\n return;\n }\n\n if (option.type === \"hls\" && hlsRef.current && option.index != null) {\n hlsRef.current.currentLevel = option.index;\n return;\n }\n\n if (option.type === \"dash\" && dashRef.current && option.index != null) {\n dashRef.current.updateSettings({\n streaming: {\n abr: {\n autoSwitchBitrate: {\n video: false,\n },\n },\n },\n });\n\n dashRef.current.setQualityFor(\"video\", option.index);\n }\n },\n [qualities, closeSettings],\n );\n\n const seekFromPointer = useCallback(\n (clientX: number) => {\n const video = videoRef.current;\n const progress = progressRef.current;\n if (!video || !progress || !duration) return;\n const rect = progress.getBoundingClientRect();\n const x = Math.max(0, Math.min(clientX - rect.left, rect.width));\n const nextTime = (x / rect.width) * duration;\n video.currentTime = nextTime;\n setCurrentTime(nextTime);\n },\n [duration],\n );\n\n // Adaptive storyboard resolution — upgrade to highest loaded res when hovering progress bar\n const upgradeStoryboardResolution = useCallback((hoverTime: number) => {\n const resolutions = parsed.storyboard?.resolutions;\n if (!resolutions || storyboardCacheRef.current.size === 0) return;\n\n const RES_ORDER = [\"480p\", \"360p\", \"240p\", \"180p\", \"default\"];\n const conn = typeof navigator !== \"undefined\" ? (navigator as any).connection : null;\n // On slow connections cap at 240p for mouse hover\n const maxRes = conn?.effectiveType === \"2g\" ? \"180p\" : conn?.effectiveType === \"3g\" ? \"240p\" : \"480p\";\n const maxIdx = RES_ORDER.indexOf(maxRes);\n\n for (let i = 0; i <= maxIdx; i++) {\n const key = RES_ORDER[i]!;\n if (storyboardCacheRef.current.has(key)) {\n if (activeStoryboardRes !== key) {\n setStoryboardCues(storyboardCacheRef.current.get(key)!);\n setActiveStoryboardRes(key);\n // Preload sprite image at new resolution\n const spriteUrl = resolutions[key]?.spriteUrl;\n if (spriteUrl && !preloadedSpritesRef.current.has(spriteUrl)) {\n preloadedSpritesRef.current.add(spriteUrl);\n const img = new window.Image();\n img.src = spriteUrl;\n }\n }\n break;\n }\n }\n\n // Preload sprites around hover time for the best available resolution\n const bestKey = [...storyboardCacheRef.current.keys()].sort((a, b) => {\n const order = [\"480p\", \"360p\", \"240p\", \"180p\", \"default\"];\n return order.indexOf(a) - order.indexOf(b);\n })[0];\n if (bestKey) {\n const cues = storyboardCacheRef.current.get(bestKey) ?? [];\n // Find 3 cues around hoverTime and preload their sprites\n const nearIdx = cues.findIndex((c) => c.start > hoverTime);\n const window2 = cues.slice(Math.max(0, nearIdx - 2), nearIdx + 3);\n for (const c of window2) {\n if (!preloadedSpritesRef.current.has(c.image)) {\n preloadedSpritesRef.current.add(c.image);\n const img = new window.Image();\n img.src = c.image;\n }\n }\n }\n }, [parsed.storyboard?.resolutions, activeStoryboardRes]);\n\n // Preload storyboard tiles around currentTime (video playhead) at low resolution\n useEffect(() => {\n const resolutions = parsed.storyboard?.resolutions;\n if (!resolutions || storyboardCacheRef.current.size === 0 || !duration) return;\n\n // Use lowest available resolution for background preload around playhead\n const RES_ORDER = [\"180p\", \"240p\", \"360p\", \"480p\", \"default\"];\n const lowestKey = RES_ORDER.find((k) => storyboardCacheRef.current.has(k));\n if (!lowestKey) return;\n\n const cues = storyboardCacheRef.current.get(lowestKey) ?? [];\n const playheadIdx = cues.findIndex((c) => c.start > currentTime);\n // Preload 5 cues ahead and 2 behind the playhead\n const nearby = cues.slice(Math.max(0, playheadIdx - 2), playheadIdx + 6);\n for (const c of nearby) {\n if (!preloadedSpritesRef.current.has(c.image)) {\n preloadedSpritesRef.current.add(c.image);\n const img = new window.Image();\n img.src = c.image;\n }\n }\n }, [Math.floor(currentTime / 10), parsed.storyboard?.resolutions, duration]); // check every 10s\n\n const updatePreview = useCallback(\n (clientX: number) => {\n const progress = progressRef.current;\n if (!progress || !duration || storyboardCues.length === 0) {\n setPreview(null);\n return;\n }\n const rect = progress.getBoundingClientRect();\n const x = Math.max(0, Math.min(clientX - rect.left, rect.width));\n const time = (x / rect.width) * duration;\n\n // Upgrade to higher resolution when mouse is on the progress bar\n upgradeStoryboardResolution(time);\n\n const cue = findStoryboardCue(storyboardCues, time);\n if (!cue) {\n setPreview(null);\n return;\n }\n setPreview({\n cue,\n time,\n left: Math.max(80, Math.min(x, rect.width - 80)),\n });\n },\n [duration, storyboardCues, upgradeStoryboardResolution],\n );\n\n const handleProgressPointerMove = useCallback(\n (event: PointerEvent<HTMLDivElement>) => {\n updatePreview(event.clientX);\n if (isDragging) seekFromPointer(event.clientX);\n },\n [isDragging, seekFromPointer, updatePreview],\n );\n\n const handleProgressPointerEnter = useCallback(() => {\n setIsHoveringProgress(true);\n }, []);\n\n const handleProgressPointerLeave = useCallback(() => {\n setIsHoveringProgress(false);\n if (!isDragging) {\n setPreview(null);\n // Downgrade back to lowest resolution when mouse leaves the progress bar\n const resolutions = parsed.storyboard?.resolutions;\n if (resolutions && storyboardCacheRef.current.size > 0) {\n const RES_ORDER = [\"180p\", \"240p\", \"360p\", \"480p\", \"default\"];\n const lowestKey = RES_ORDER.find((k) => storyboardCacheRef.current.has(k));\n if (lowestKey && activeStoryboardRes !== lowestKey) {\n setStoryboardCues(storyboardCacheRef.current.get(lowestKey)!);\n setActiveStoryboardRes(lowestKey);\n }\n }\n }\n }, [isDragging, parsed.storyboard?.resolutions, activeStoryboardRes]);\n\n const handleProgressPointerDown = useCallback(\n (event: PointerEvent<HTMLDivElement>) => {\n const progress = progressRef.current;\n if (!progress) return;\n progress.setPointerCapture(event.pointerId);\n dragPointerIdRef.current = event.pointerId;\n setIsDragging(true);\n seekFromPointer(event.clientX);\n updatePreview(event.clientX);\n },\n [seekFromPointer, updatePreview],\n );\n\n const handleProgressPointerUp = useCallback(\n (event: PointerEvent<HTMLDivElement>) => {\n if (dragPointerIdRef.current === event.pointerId) {\n setIsDragging(false);\n dragPointerIdRef.current = null;\n setPreview(null);\n }\n },\n [],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const target = event.target as HTMLElement;\n const tagName = target.tagName.toLowerCase();\n\n if ([\"input\", \"select\", \"button\"].includes(tagName)) {\n return;\n }\n\n if (event.key === \" \") {\n event.preventDefault();\n togglePlay();\n }\n\n if (event.key === \"ArrowRight\") {\n seekRelative(10);\n }\n\n if (event.key === \"ArrowLeft\") {\n seekRelative(-10);\n }\n\n if (event.key.toLowerCase() === \"f\") {\n toggleFullscreen();\n }\n\n if (event.key.toLowerCase() === \"m\") {\n setIsMuted((value) => !value);\n }\n },\n [seekRelative, toggleFullscreen, togglePlay],\n );\n\n if (!activeSource) {\n return (\n <div className=\"rounded-xl border border-red-200 bg-red-50 p-4 text-sm text-red-700\">\n O componente Video precisa de pelo menos um <code>{\"<Source />\"}</code>.\n </div>\n );\n }\n\n return (\n <div\n ref={containerRef}\n className={`@container mx-auto w-full max-w-6xl${className ?? \"\"}`}\n >\n <div\n ref={playerRef}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n onMouseMove={showControlsTemporarily}\n onMouseLeave={() => {\n closeSettings();\n if (isPlaying && autoHideControls) {\n setControlsVisible(false);\n }\n }}\n onBlur={(e) => {\n // Close menus when focus leaves the player entirely\n if (!e.currentTarget.contains(e.relatedTarget as Node)) {\n closeSettings();\n }\n }}\n onTouchStart={showControlsTemporarily}\n onTouchMove={showControlsTemporarily}\n className=\"relative w-full overflow-hidden rounded-[14px] bg-black shadow-[0_30px_90px_rgba(15,15,15,0.22)] outline-none ring-1 ring-black/5\"\n style={\n fixedHeight\n ? {\n height:\n typeof fixedHeight === \"number\"\n ? `${fixedHeight}px`\n : fixedHeight,\n }\n : maxHeight\n ? {\n maxHeight:\n typeof maxHeight === \"number\"\n ? `${maxHeight}px`\n : maxHeight,\n aspectRatio: \"16/9\",\n }\n : { aspectRatio: \"16/9\" }\n }\n >\n <video\n ref={videoRef}\n className={`h-full w-full ${isFullscreen ? \"object-contain\" : \"object-cover\"}`}\n playsInline\n preload=\"metadata\"\n crossOrigin=\"anonymous\"\n >\n {captions.map((subtitle) => (\n <track\n key={`${activeSource.src}-${subtitle.srclang}-${subtitle.src}`}\n kind=\"subtitles\"\n src={subtitle.src}\n srcLang={subtitle.srclang}\n label={subtitle.label}\n default={subtitle.default}\n />\n ))}\n {parsed.storyboard?.src && (\n <track\n kind=\"metadata\"\n label=\"thumbnails\"\n src={parsed.storyboard.src}\n />\n )}\n </video>\n\n {/* Poster overlay — shown only before first play */}\n {poster && !hasPlayed && (\n <img\n src={poster}\n aria-hidden\n className=\"pointer-events-none absolute inset-0 h-full w-full object-contain bg-black\"\n />\n )}\n\n {/* Age rating overlay — driven by GSAP timeline, always mounted */}\n {parsed.ageRating?.data && (() => {\n const ar = parsed.ageRating!;\n const regionKey = resolveAgeRatingRegion(ar.locale, ar.data!);\n if (!regionKey) return null;\n const code = ar.data![regionKey];\n const lookupKey = `${regionKey}:${code}`;\n const info = ar.lookup?.[lookupKey];\n return (\n <div\n ref={ageRatingWrapRef}\n className=\"pointer-events-none absolute inset-0 z-20 flex items-start justify-start\"\n style={{\n opacity: 0,\n background: \"linear-gradient(135deg, rgba(0,0,0,0.85) 0%, rgba(0,0,0,0.4) 40%, transparent 65%)\",\n }}\n >\n <div className=\"flex items-center gap-3.5 px-5 pt-5 @sm:px-7 @sm:pt-7\">\n <div ref={ageRatingIconRef} style={{ opacity: 0 }}>\n {info?.imageUrl ? (\n <img src={info.imageUrl} alt={code} className=\"h-14 w-auto object-contain @sm:h-16 drop-shadow-[0_2px_8px_rgba(0,0,0,0.6)]\" />\n ) : (\n <span className=\"flex h-14 min-w-14 items-center justify-center rounded-md border-2 border-white/40 px-2 text-lg font-bold text-white @sm:h-16 @sm:min-w-16 @sm:text-xl drop-shadow-[0_2px_8px_rgba(0,0,0,0.6)]\">\n {code}\n </span>\n )}\n </div>\n {(info?.title || info?.description) && (\n <div ref={ageRatingTextRef} className=\"flex flex-col gap-0.5\" style={{ opacity: 0 }}>\n {info.title && <span className=\"text-sm font-semibold text-white @sm:text-base drop-shadow-[0_1px_4px_rgba(0,0,0,0.8)]\">{info.title}</span>}\n {info.description && <span className=\"text-xs text-white/70 leading-snug max-w-56 @sm:text-sm @sm:max-w-72 drop-shadow-[0_1px_4px_rgba(0,0,0,0.8)]\">{info.description}</span>}\n </div>\n )}\n </div>\n </div>\n );\n })()}\n\n {/* Click feedback / action icon — no background, shows briefly only on action */}\n <div\n ref={clickIconRef}\n className=\"pointer-events-none absolute inset-0 z-10 grid place-items-center\"\n style={{ opacity: 0 }}\n >\n <span className=\"grid size-10 place-items-center text-white drop-shadow-[0_2px_12px_rgba(0,0,0,0.8)] @sm:size-14 @lg:size-16\">\n {clickIcon === \"pause\" ? (\n <Pause className=\"size-7 @sm:size-9 @lg:size-11\" fill=\"white\" />\n ) : (\n <Play\n className=\"ml-0.5 size-7 @sm:size-9 @lg:size-11\"\n fill=\"white\"\n />\n )}\n </span>\n </div>\n\n {isLoading && (\n <div className=\"pointer-events-none absolute inset-0 z-20 grid place-items-center bg-black/10\">\n <div className=\"size-9 animate-spin rounded-full border-2 border-white/25 border-t-white\" />\n </div>\n )}\n\n\n <div\n ref={chromeRef}\n onClick={togglePlay}\n className={`absolute inset-0 z-30 flex flex-col ${\n isFullscreen ? \"justify-between\" : \"justify-end\"\n }`}\n >\n {/* Top gradient — only in fullscreen */}\n {isFullscreen && (\n <div className=\"pointer-events-none absolute inset-x-0 top-0 h-32 bg-linear-to-b from-black/70 to-transparent\" />\n )}\n {/* Bottom gradient */}\n <div className=\"pointer-events-none absolute inset-x-0 bottom-0 h-40 bg-linear-to-t from-black/80 to-transparent\" />\n\n {isFullscreen && (\n <header\n onClick={(e) => e.stopPropagation()}\n className=\"relative z-10 flex items-start px-4 pt-4 text-white @sm:px-7 @sm:pt-7 @lg:px-9 @lg:pt-8\"\n >\n <div>\n {title && (\n <h1\n className=\"text-sm font-bold tracking-wide @sm:text-base @md:text-lg @lg:text-xl\"\n style={{ textShadow: \"0 1px 6px rgba(0,0,0,0.6)\" }}\n >\n {title}\n </h1>\n )}\n\n {description && (\n <p className=\"mt-1 text-xs font-medium text-white/85 @sm:text-sm\">\n {description}\n </p>\n )}\n </div>\n </header>\n )}\n\n <footer\n onClick={(e) => e.stopPropagation()}\n className=\"relative z-10 px-4 pb-4 text-white\"\n >\n {/* Settings panel — nested, one sub-menu at a time */}\n {settingsOpen && (\n <>\n <div\n className=\"fixed inset-0 z-70\"\n onClick={closeSettings}\n />\n <div\n ref={settingsPanelRef}\n className=\"absolute bottom-full right-2 z-70 mb-2 overflow-hidden rounded-2xl bg-[#1c1c1e]/95 shadow-2xl backdrop-blur-xl ring-1 ring-white/10\"\n style={{\n width:\n Math.min(\n 224,\n Math.max(180, (playerWidth || 640) * 0.22),\n ) + \"px\",\n opacity: 0,\n }}\n >\n <div ref={settingsContentRef}>\n {/* Root menu */}\n {settingsTab === \"root\" && (\n <div>\n {(\n [\n {\n id: \"quality\" as SettingsTab,\n label: \"Qualidade\",\n value:\n qualities.find((q) => q.id === selectedQuality)\n ?.label ?? \"Auto\",\n },\n ...(captions.length > 0\n ? [\n {\n id: \"subtitles\" as SettingsTab,\n label: \"Legendas\",\n value:\n subtitleStyle.track === \"off\"\n ? \"Desligado\"\n : (captions.find(\n (s) =>\n s.srclang === subtitleStyle.track,\n )?.label ?? subtitleStyle.track),\n },\n ]\n : []),\n ...(audioTracks.length > 1\n ? [\n {\n id: \"audio\" as SettingsTab,\n label: \"Áudio\",\n value:\n audioTracks.find(\n (t) => t.id === selectedAudio,\n )?.label ?? \"\",\n },\n ]\n : []),\n {\n id: \"playback\" as SettingsTab,\n label: \"Velocidade\",\n value:\n playbackRate === 1\n ? \"Normal\"\n : `${playbackRate}×`,\n },\n ] as { id: SettingsTab; label: string; value: string }[]\n ).map((item) => (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => setSettingsTab(item.id)}\n className=\"flex w-full items-center justify-between gap-3 px-4 py-3 text-sm transition hover:bg-white/8 first:pt-3.5 last:pb-3.5\"\n >\n <span className=\"text-white/80\">{item.label}</span>\n <span className=\"flex items-center gap-1.5 text-xs text-white/40\">\n {item.value}\n <svg\n className=\"size-3 opacity-50\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M4.5 3l3 3-3 3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n </button>\n ))}\n </div>\n )}\n\n {/* Quality sub-menu */}\n {settingsTab === \"quality\" && (\n <div>\n <button\n type=\"button\"\n onClick={() => setSettingsTab(\"root\")}\n className=\"flex w-full items-center gap-2 border-b border-white/8 px-4 py-3 text-xs font-semibold text-white/50 transition hover:text-white\"\n >\n <svg\n className=\"size-3.5\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M7.5 3L4.5 6l3 3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n Qualidade\n </button>\n <div className=\"py-1.5\">\n {[...qualities].reverse().map((quality) => (\n <button\n key={quality.id}\n type=\"button\"\n onClick={() => {\n changeQuality(quality.id);\n setSettingsTab(\"root\");\n }}\n className=\"flex w-full items-center gap-3 px-4 py-2.5 text-sm transition hover:bg-white/8\"\n >\n <svg\n className={`size-4 shrink-0 ${selectedQuality === quality.id ? \"text-white\" : \"text-transparent\"}`}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M3 8l3.5 3.5L13 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <span\n className={\n selectedQuality === quality.id\n ? \"font-semibold text-white\"\n : \"text-white/55\"\n }\n >\n {quality.label}\n {quality.id === \"auto\" ? \" (ABR)\" : \"\"}\n </span>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Subtitles sub-menu */}\n {settingsTab === \"subtitles\" && (\n <div>\n <button\n type=\"button\"\n onClick={() => setSettingsTab(\"root\")}\n className=\"flex w-full items-center gap-2 border-b border-white/8 px-4 py-3 text-xs font-semibold text-white/50 transition hover:text-white\"\n >\n <svg\n className=\"size-3.5\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M7.5 3L4.5 6l3 3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n Legendas\n </button>\n <div className=\"py-1.5\">\n {[\n { srclang: \"off\", label: \"Desligado\" },\n ...captions,\n ].map((s) => (\n <button\n key={s.srclang}\n type=\"button\"\n onClick={() => {\n const next =\n s.srclang === \"off\" ? \"off\" : s.srclang;\n setSubtitleMode(next);\n setSubtitleStyle((st) => ({\n ...st,\n track: next,\n }));\n }}\n className=\"flex w-full items-center gap-3 px-4 py-2.5 text-sm transition hover:bg-white/8\"\n >\n <svg\n className={`size-4 shrink-0 ${subtitleStyle.track === s.srclang ? \"text-white\" : \"text-transparent\"}`}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M3 8l3.5 3.5L13 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <span\n className={\n subtitleStyle.track === s.srclang\n ? \"font-semibold text-white\"\n : \"text-white/55\"\n }\n >\n {s.label}\n </span>\n </button>\n ))}\n </div>\n {subtitleStyle.track !== \"off\" && (\n <button\n type=\"button\"\n onClick={() => setSettingsTab(\"subtitles-style\")}\n className=\"flex w-full items-center justify-between gap-3 border-t border-white/8 px-4 py-3 text-sm transition hover:bg-white/8\"\n >\n <span className=\"text-white/60\">Aparência</span>\n <svg\n className=\"size-3 opacity-50\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M4.5 3l3 3-3 3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n )}\n </div>\n )}\n\n {/* Subtitles style sub-menu */}\n {settingsTab === \"subtitles-style\" && (\n <div>\n <button\n type=\"button\"\n onClick={() => setSettingsTab(\"subtitles\")}\n className=\"flex w-full items-center gap-2 border-b border-white/8 px-4 py-3 text-xs font-semibold text-white/50 transition hover:text-white\"\n >\n <svg\n className=\"size-3.5\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M7.5 3L4.5 6l3 3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n Aparência\n </button>\n <div className=\"px-4 py-3 flex flex-col gap-3\">\n {/* Size */}\n <div>\n <p className=\"mb-1.5 text-xs font-semibold text-white/40 uppercase tracking-wide\">\n Tamanho\n </p>\n <div className=\"flex gap-1.5\">\n {(\n [\"small\", \"medium\", \"large\", \"xlarge\"] as const\n ).map((s) => (\n <button\n key={s}\n type=\"button\"\n onClick={() =>\n setSubtitleStyle((st) => ({ ...st, size: s }))\n }\n className={`flex-1 rounded-lg py-1.5 text-xs font-medium transition${subtitleStyle.size === s ? \"bg-white/20 text-white\" : \"text-white/45 hover:bg-white/10\"}`}\n >\n {s === \"small\"\n ? \"P\"\n : s === \"medium\"\n ? \"M\"\n : s === \"large\"\n ? \"G\"\n : \"GG\"}\n </button>\n ))}\n </div>\n </div>\n {/* Color */}\n <div>\n <p className=\"mb-1.5 text-xs font-semibold text-white/40 uppercase tracking-wide\">\n Cor\n </p>\n <div className=\"flex gap-1.5\">\n {(\n [\n [\"white\", \"Branco\", \"#fff\"],\n [\"yellow\", \"Amarelo\", \"#facc15\"],\n [\"cyan\", \"Ciano\", \"#22d3ee\"],\n ] as const\n ).map(([val, label, color]) => (\n <button\n key={val}\n type=\"button\"\n onClick={() =>\n setSubtitleStyle((st) => ({\n ...st,\n color: val,\n }))\n }\n className={`flex-1 rounded-lg py-1.5 text-xs font-medium transition ring-1${subtitleStyle.color === val ? \"ring-white/40\" : \"ring-transparent hover:ring-white/15\"}`}\n style={{ color }}\n >\n {label}\n </button>\n ))}\n </div>\n </div>\n {/* Background */}\n <div>\n <p className=\"mb-1.5 text-xs font-semibold text-white/40 uppercase tracking-wide\">\n Fundo\n </p>\n <div className=\"flex gap-1.5\">\n {(\n [\n [\"none\", \"Nenhum\"],\n [\"semi\", \"Semi\"],\n [\"solid\", \"Sólido\"],\n ] as const\n ).map(([val, label]) => (\n <button\n key={val}\n type=\"button\"\n onClick={() =>\n setSubtitleStyle((st) => ({ ...st, bg: val }))\n }\n className={`flex-1 rounded-lg py-1.5 text-xs font-medium transition${subtitleStyle.bg === val ? \"bg-white/20 text-white\" : \"text-white/45 hover:bg-white/10\"}`}\n >\n {label}\n </button>\n ))}\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* Audio sub-menu */}\n {settingsTab === \"audio\" && (\n <div>\n <button\n type=\"button\"\n onClick={() => setSettingsTab(\"root\")}\n className=\"flex w-full items-center gap-2 border-b border-white/8 px-4 py-3 text-xs font-semibold text-white/50 transition hover:text-white\"\n >\n <svg\n className=\"size-3.5\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M7.5 3L4.5 6l3 3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n Áudio\n </button>\n <div className=\"py-1.5\">\n {audioTracks.map((track) => (\n <button\n key={track.id}\n type=\"button\"\n onClick={() => {\n changeAudio(track.id);\n setSettingsTab(\"root\");\n }}\n className=\"flex w-full items-center gap-3 px-4 py-2.5 text-sm transition hover:bg-white/8\"\n >\n <svg\n className={`size-4 shrink-0 ${selectedAudio === track.id ? \"text-white\" : \"text-transparent\"}`}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M3 8l3.5 3.5L13 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <span\n className={\n selectedAudio === track.id\n ? \"font-semibold text-white\"\n : \"text-white/55\"\n }\n >\n {track.label}\n </span>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Playback speed sub-menu */}\n {settingsTab === \"playback\" && (\n <div>\n <button\n type=\"button\"\n onClick={() => setSettingsTab(\"root\")}\n className=\"flex w-full items-center gap-2 border-b border-white/8 px-4 py-3 text-xs font-semibold text-white/50 transition hover:text-white\"\n >\n <svg\n className=\"size-3.5\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M7.5 3L4.5 6l3 3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n Velocidade\n </button>\n <div className=\"py-1.5\">\n {PLAYBACK_SPEEDS.map((speed) => (\n <button\n key={speed}\n type=\"button\"\n onClick={() => {\n setPlaybackRate(speed);\n closeSettings();\n }}\n className=\"flex w-full items-center gap-3 px-4 py-2.5 text-sm transition hover:bg-white/8\"\n >\n <svg\n className={`size-4 shrink-0 ${playbackRate === speed ? \"text-white\" : \"text-transparent\"}`}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M3 8l3.5 3.5L13 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <span\n className={\n playbackRate === speed\n ? \"font-semibold text-white\"\n : \"text-white/55\"\n }\n >\n {speed === 1 ? \"Normal\" : `${speed}×`}\n </span>\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n </>\n )}\n\n <div\n ref={progressRef}\n onPointerMove={handleProgressPointerMove}\n onPointerEnter={handleProgressPointerEnter}\n onPointerLeave={handleProgressPointerLeave}\n onPointerDown={handleProgressPointerDown}\n onPointerUp={handleProgressPointerUp}\n className=\"relative mb-2 h-8 cursor-pointer overflow-visible\"\n >\n {/* Track */}\n <div\n ref={progressTrackRef}\n className=\"absolute left-0 right-0 top-1/2 -translate-y-1/2 overflow-hidden rounded-full bg-white/18\"\n style={{\n height: \"3px\",\n }}\n >\n <div\n className=\"absolute inset-y-0 left-0 rounded-full bg-white/28\"\n style={{ width: `${bufferedPercent}%` }}\n />\n <div\n className=\"absolute inset-y-0 left-0 rounded-full bg-white\"\n style={{ width: `${progressPercent}%`, transition: \"width 0.05s linear\" }}\n />\n </div>\n {/* Thumb */}\n <div\n ref={progressThumbRef}\n className=\"pointer-events-none absolute rounded-full bg-white shadow-[0_1px_6px_rgba(0,0,0,0.5)]\"\n style={{\n top: \"50%\",\n left: `${progressPercent}%`,\n transform: \"translate(-50%, -50%)\",\n width: \"10px\",\n height: \"10px\",\n }}\n />\n\n {/* Chapter markers */}\n {chapters.length > 0 && duration > 0 && chapters.map((ch, i) => (\n <div\n key={i}\n data-chapter-marker\n className=\"pointer-events-none absolute top-1/2 -translate-y-1/2 w-0.5 rounded-full bg-white/50\"\n style={{ left: `${(ch.startTime / duration) * 100}%`, height: \"3px\" }}\n />\n ))}\n\n {/* Storyboard preview — anchored above the timeline */}\n {preview && (() => {\n const frameW = preview.cue.w ?? 160;\n const frameH = preview.cue.h ?? 90;\n // Fixed width, height follows frame aspect ratio\n const thumbW = 200;\n const thumbH = Math.round(thumbW * (frameH / frameW));\n const scale = thumbW / frameW;\n const isSprite = preview.cue.x != null && preview.cue.y != null;\n return (\n <div\n className=\"pointer-events-none absolute flex flex-col items-center gap-1\"\n style={{\n bottom: \"calc(100% + 6px)\",\n left: preview.left,\n transform: \"translateX(-50%)\",\n zIndex: 80,\n }}\n >\n <div\n className=\"overflow-hidden rounded-lg shadow-2xl ring-1 ring-white/20\"\n style={{ width: thumbW, height: thumbH, flexShrink: 0 }}\n >\n {isSprite ? (\n // Sprite: need full sheet dimensions to compute backgroundSize correctly.\n // Load them once from the image's natural size.\n (() => {\n const imgUrl = preview.cue.image;\n if (storyboardSheetUrlRef.current !== imgUrl) {\n storyboardSheetUrlRef.current = imgUrl;\n const img = new window.Image();\n img.onload = () => setStoryboardSheetSize({ w: img.naturalWidth, h: img.naturalHeight });\n img.src = imgUrl;\n }\n if (!storyboardSheetSize) return null;\n const bsW = storyboardSheetSize.w * scale;\n const bsH = storyboardSheetSize.h * scale;\n return (\n <div\n style={{\n width: thumbW,\n height: thumbH,\n backgroundImage: `url(${imgUrl})`,\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: `-${(preview.cue.x ?? 0) * scale}px -${(preview.cue.y ?? 0) * scale}px`,\n backgroundSize: `${bsW}px ${bsH}px`,\n }}\n />\n );\n })()\n ) : (\n <img\n src={preview.cue.image}\n alt=\"\"\n style={{ width: thumbW, height: thumbH, objectFit: \"cover\", objectPosition: \"center\", display: \"block\" }}\n />\n )}\n </div>\n <div\n className=\"flex items-center gap-1.5 rounded-md px-2 py-0.5 text-[11px] font-semibold text-white/90\"\n style={{ background: \"rgba(0,0,0,0.55)\", backdropFilter: \"blur(6px)\" }}\n >\n <span className=\"tabular-nums\">{formatTime(preview.time)}</span>\n {(() => {\n const ch = [...chapters].reverse().find((c) => c.startTime <= preview.time);\n return ch ? (\n <>\n <span className=\"text-white/40\">·</span>\n <span className=\"max-w-36 truncate\">{ch.title}</span>\n </>\n ) : null;\n })()}\n </div>\n </div>\n );\n })()}\n </div>\n\n <div className=\"flex items-center justify-between gap-2\">\n {/* LEFT group: play/pause | time */}\n <div className=\"flex items-center gap-1.5 @sm:gap-2\">\n <button\n type=\"button\"\n onClick={togglePlay}\n className=\"grid size-8 place-items-center rounded-full text-white transition hover:bg-white/10 @sm:size-9\"\n aria-label={isPlaying ? \"Pause\" : \"Play\"}\n >\n {isPlaying ? (\n <Pause className=\"size-4 @sm:size-5\" fill=\"white\" />\n ) : (\n <Play className=\"ml-0.5 size-4 @sm:size-5\" fill=\"white\" />\n )}\n </button>\n\n <span className=\"text-[11px] font-medium tabular-nums text-white/80\">\n {formatTime(currentTime)}\n <span className=\"text-white/30\">/</span>\n <span className=\"text-white/45\">{formatTime(duration)}</span>\n </span>\n {(() => {\n if (chapters.length === 0) return null;\n const ch = [...chapters].reverse().find((c) => currentTime >= c.startTime);\n return ch ? (\n <span className=\"hidden max-w-40 truncate text-[11px] text-white/50 @sm:block\">\n {ch.title}\n </span>\n ) : null;\n })()}\n </div>\n\n {/* RIGHT group: rating | volume | captions | settings | fullscreen */}\n <div className=\"flex items-center gap-0.5 @sm:gap-1\">\n {/* Inline rating buttons — state is internal so clicks don't re-render the parent */}\n {parsed.rating && (() => {\n const REACTIONS: Array<{ key: \"LOVE\" | \"LIKE\" | \"DISLIKE\"; emoji: string }> = [\n { key: \"LOVE\", emoji: \"❤️\" },\n { key: \"LIKE\", emoji: \"👍\" },\n { key: \"DISLIKE\", emoji: \"👎\" },\n ];\n return (\n <>\n {REACTIONS.map(({ key, emoji }) => {\n const count = ratingCounts[key] ?? 0;\n const active = userReaction === key;\n return (\n <button\n key={key}\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n const next = active ? null : key;\n setUserReaction(next);\n setRatingCounts((prev) => {\n const updated = { ...prev };\n const prev_reaction = userReactionRef.current;\n if (active) updated[key] = Math.max(0, (updated[key] ?? 0) - 1);\n else {\n if (prev_reaction) updated[prev_reaction] = Math.max(0, (updated[prev_reaction] ?? 0) - 1);\n updated[key] = (updated[key] ?? 0) + 1;\n }\n return updated;\n });\n onReactRef.current?.(next);\n }}\n className={`flex items-center gap-0.5 rounded px-1.5 py-1 text-[11px] transition hover:bg-white/10 ${active ? \"opacity-100\" : \"opacity-50 hover:opacity-80\"}`}\n aria-label={key.toLowerCase()}\n aria-pressed={active}\n >\n <span>{emoji}</span>\n {count > 0 && <span className=\"text-white/70 tabular-nums\">{count}</span>}\n </button>\n );\n })}\n <div className=\"mx-0.5 h-4 w-px bg-white/20 @md:mx-1\" />\n </>\n );\n })()}\n\n {/* Volume: mute button always visible, custom slider appears on group hover */}\n <VolumeSlider\n volume={isMuted ? 0 : volume}\n onMuteToggle={() => setIsMuted((v) => !v)}\n onVolumeChange={(v) => { setVolume(v); setIsMuted(v === 0); }}\n isMuted={isMuted}\n />\n\n <div className=\"mx-0.5 h-4 w-px bg-white/20 @md:mx-1\" />\n\n {captions.length > 0 && (\n <button\n type=\"button\"\n onClick={() => {\n const next = subtitleMode === \"off\" ? (captions[0]?.srclang ?? \"off\") : \"off\";\n setSubtitleMode(next);\n setSubtitleStyle((st) => ({ ...st, track: next }));\n }}\n className={`grid size-8 place-items-center rounded transition hover:text-white/80 @sm:size-10 ${subtitleMode !== \"off\" ? \"text-white\" : \"text-white/60\"}`}\n aria-label=\"Captions\"\n >\n <CaptionsIcon className=\"size-4 @sm:size-5\" />\n </button>\n )}\n\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => settingsOpen ? closeSettings() : openSettings()}\n className={`grid size-8 place-items-center rounded transition hover:text-white/80 @sm:size-10 ${settingsOpen ? \"text-white\" : \"text-white/60\"}`}\n aria-label=\"Settings\"\n >\n <Settings className=\"size-4 @sm:size-5\" />\n </button>\n </div>\n\n <button\n type=\"button\"\n onClick={toggleFullscreen}\n className=\"grid size-8 place-items-center text-white/60 transition hover:scale-110 hover:text-white/80 @sm:size-10\"\n aria-label={isFullscreen ? \"Exit fullscreen\" : \"Fullscreen\"}\n >\n {isFullscreen ? (\n <Minimize className=\"size-4 @sm:size-5\" />\n ) : (\n <Maximize className=\"size-4 @sm:size-5\" />\n )}\n </button>\n </div>\n </div>\n </footer>\n </div>\n\n\n {/* Subtitles — size scales with player height so it looks right in fullscreen */}\n {activeCue && (\n <div\n className={`pointer-events-none absolute inset-x-0 z-40 flex justify-center px-4 transition-all duration-200${\n controlsVisible\n ? \"bottom-20 @sm:bottom-24 @lg:bottom-28\"\n : \"bottom-4 @sm:bottom-6\"\n }`}\n >\n <div\n className=\"max-w-[80%] rounded-lg px-4 py-1.5 text-center font-medium leading-snug\"\n style={{\n fontSize: (() => {\n // Base size scales with player height: ~2.8% of height, clamped per size option\n const base = Math.max(12, Math.min(playerHeight * 0.028, 32));\n if (subtitleStyle.size === \"small\") return `${base * 0.75}px`;\n if (subtitleStyle.size === \"large\") return `${base * 1.35}px`;\n if (subtitleStyle.size === \"xlarge\") return `${base * 1.8}px`;\n return `${base}px`; // medium\n })(),\n color:\n subtitleStyle.color === \"yellow\"\n ? \"#facc15\"\n : subtitleStyle.color === \"cyan\"\n ? \"#22d3ee\"\n : \"#ffffff\",\n backgroundColor:\n subtitleStyle.bg === \"none\"\n ? \"transparent\"\n : subtitleStyle.bg === \"solid\"\n ? \"rgba(0,0,0,0.9)\"\n : \"rgba(0,0,0,0.55)\",\n backdropFilter:\n subtitleStyle.bg === \"semi\" ? \"blur(6px)\" : undefined,\n textShadow:\n subtitleStyle.bg === \"none\"\n ? \"0 1px 8px rgba(0,0,0,1), 0 0 16px rgba(0,0,0,0.9)\"\n : \"0 1px 3px rgba(0,0,0,0.5)\",\n }}\n >\n {activeCue}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport const VideoPlayer = Video;\n\nfunction SettingsItem({\n children,\n active,\n onClick,\n}: {\n children: ReactNode;\n active: boolean;\n onClick: () => void;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={`flex w-full items-center gap-2 px-4 py-2.5 text-left text-base font-medium transition hover:bg-white/10${active ? \"text-white\" : \"text-white/55\"}`}\n >\n <span\n className={`size-1.5 rounded-full${active ? \"bg-white\" : \"bg-transparent\"}`}\n />\n {children}\n </button>\n );\n}\n\nfunction VolumeSlider({\n volume,\n isMuted,\n onMuteToggle,\n onVolumeChange,\n}: {\n volume: number;\n isMuted: boolean;\n onMuteToggle: () => void;\n onVolumeChange: (v: number) => void;\n}) {\n const [hovered, setHovered] = useState(false);\n const [dragging, setDragging] = useState(false);\n const trackRef = useRef<HTMLDivElement>(null);\n const sliderWrapRef = useRef<HTMLDivElement>(null);\n const railRef = useRef<HTMLDivElement>(null);\n const thumbRef = useRef<HTMLDivElement>(null);\n const expanded = hovered || dragging;\n\n const seek = useCallback((clientX: number) => {\n const track = trackRef.current;\n if (!track) return;\n const rect = track.getBoundingClientRect();\n const v = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\n onVolumeChange(v);\n }, [onVolumeChange]);\n\n const onPointerDown = useCallback((e: React.PointerEvent) => {\n e.currentTarget.setPointerCapture(e.pointerId);\n setDragging(true);\n seek(e.clientX);\n }, [seek]);\n\n const onPointerMove = useCallback((e: React.PointerEvent) => {\n if (dragging) seek(e.clientX);\n }, [dragging, seek]);\n\n const onPointerUp = useCallback(() => setDragging(false), []);\n\n // GSAP: animate slider expand/collapse\n useEffect(() => {\n const wrap = sliderWrapRef.current;\n if (!wrap) return;\n gsap.killTweensOf(wrap);\n gsap.to(wrap, {\n width: expanded ? 64 : 0,\n opacity: expanded ? 1 : 0,\n duration: 0.2,\n ease: \"power2.inOut\",\n });\n }, [expanded]);\n\n // GSAP: animate rail height + thumb size on hover/drag\n useEffect(() => {\n const rail = railRef.current;\n const thumb = thumbRef.current;\n const targetRailH = dragging ? 5 : hovered ? 4 : 3;\n const targetThumbSize = dragging ? 14 : hovered ? 11 : 0;\n if (rail) {\n gsap.killTweensOf(rail);\n gsap.to(rail, { height: targetRailH, duration: 0.15, ease: \"power1.inOut\" });\n }\n if (thumb) {\n gsap.killTweensOf(thumb);\n gsap.to(thumb, { width: targetThumbSize, height: targetThumbSize, duration: 0.15, ease: \"power1.inOut\" });\n }\n }, [dragging, hovered]);\n\n const fillPercent = volume * 100;\n\n return (\n <div\n className=\"flex items-center\"\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => { if (!dragging) setHovered(false); }}\n >\n <button\n type=\"button\"\n onClick={onMuteToggle}\n className=\"grid size-8 place-items-center text-white/70 transition hover:text-white @sm:size-9\"\n aria-label={isMuted ? \"Unmute\" : \"Mute\"}\n >\n {isMuted || volume === 0 ? (\n <VolumeX className=\"size-4 @sm:size-5\" />\n ) : (\n <Volume2 className=\"size-4 @sm:size-5\" />\n )}\n </button>\n\n {/* Custom track */}\n <div\n ref={sliderWrapRef}\n style={{\n width: \"0px\",\n opacity: 0,\n overflow: \"hidden\",\n }}\n >\n <div\n ref={trackRef}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n className=\"relative mx-1 flex h-7 cursor-pointer items-center\"\n style={{ width: \"52px\" }}\n >\n {/* Rail */}\n <div\n ref={railRef}\n className=\"absolute inset-x-0 rounded-full bg-white/20\"\n style={{ height: \"3px\" }}\n >\n {/* Fill */}\n <div\n className=\"absolute inset-y-0 left-0 rounded-full bg-white\"\n style={{ width: `${fillPercent}%` }}\n />\n </div>\n {/* Thumb */}\n <div\n ref={thumbRef}\n className=\"pointer-events-none absolute top-1/2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-white shadow-md\"\n style={{\n left: `${fillPercent}%`,\n width: \"0px\",\n height: \"0px\",\n }}\n />\n </div>\n </div>\n </div>\n );\n}\n\n// Maps BCP-47 locale prefixes to region keys stored in age_ratings JSON\nconst LOCALE_TO_REGION: Record<string, string> = {\n \"en-US\": \"US\", \"en-CA\": \"CA\",\n \"pt-BR\": \"BR\",\n \"de\": \"EU\", \"fr\": \"EU\", \"es\": \"EU\", \"it\": \"EU\", \"nl\": \"EU\", \"pl\": \"EU\",\n \"de-DE\": \"EU\", \"fr-FR\": \"EU\", \"es-ES\": \"EU\", \"it-IT\": \"EU\",\n \"ja\": \"JP\", \"ja-JP\": \"JP\",\n \"ko\": \"KR\", \"ko-KR\": \"KR\",\n \"en-AU\": \"AU\",\n};\n\nfunction resolveAgeRatingRegion(locale: string | undefined, data: Record<string, string>): string | undefined {\n if (!locale) return Object.keys(data)[0];\n // Exact match first\n if (LOCALE_TO_REGION[locale] && data[LOCALE_TO_REGION[locale]]) return LOCALE_TO_REGION[locale];\n // Language prefix match (e.g. \"pt\" from \"pt-BR\")\n const lang = locale.split(\"-\")[0] ?? \"\";\n const fromLang = LOCALE_TO_REGION[lang];\n if (fromLang && data[fromLang]) return fromLang;\n // Fallback: first key in data\n return Object.keys(data)[0];\n}\n\nfunction parseVideoChildren(children: ReactNode): ParsedVideoChildren {\n const parsed: ParsedVideoChildren = {\n sources: [],\n };\n\n function dn(child: React.ReactElement): string {\n return (child.type as any)?.displayName ?? (child.type as any)?.name ?? \"\";\n }\n\n React.Children.forEach(children, (child) => {\n if (!React.isValidElement(child)) return;\n\n const name = dn(child);\n\n if (child.type === Source || name === \"SiloSource\") {\n const element = child as ReactElement<SourceProps>;\n parsed.sources.push(element.props);\n }\n\n if (child.type === Captions || name === \"SiloCaptions\") {\n const element = child as ReactElement<CaptionsProps>;\n if (element.props.data) {\n parsed.captionsData = element.props.data;\n } else if (element.props.src) {\n parsed.captionsSrc = element.props.src;\n }\n }\n\n if (child.type === Chapters || name === \"SiloChapters\") {\n const element = child as ReactElement<ChaptersProps>;\n if (element.props.data) {\n parsed.chaptersData = element.props.data;\n } else if (element.props.src) {\n parsed.chaptersSrc = element.props.src;\n }\n }\n\n if (child.type === VideoThumbnail || name === \"SiloVideoThumbnail\") {\n const element = child as ReactElement<ThumbnailProps>;\n if (element.props.urls) parsed.thumbnailUrls = element.props.urls;\n if (element.props.src) parsed.thumbnailSrc = element.props.src;\n }\n\n if (child.type === AgeRating || name === \"SiloAgeRating\") {\n const element = child as ReactElement<AgeRatingProps>;\n parsed.ageRating = element.props;\n }\n\n if (child.type === Rating || name === \"SiloRating\") {\n const element = child as ReactElement<RatingProps>;\n parsed.rating = element.props;\n }\n\n if (child.type === Storyboard || name === \"SiloStoryboard\") {\n const element = child as ReactElement<StoryboardProps>;\n const frames: StoryboardFrameProps[] = [];\n\n React.Children.forEach(element.props.children, (frameChild) => {\n if (!React.isValidElement(frameChild)) return;\n const fn2 = dn(frameChild);\n if (\n frameChild.type !== StoryboardFrame &&\n fn2 !== \"SiloStoryboardFrame\"\n )\n return;\n\n const frameElement = frameChild as ReactElement<StoryboardFrameProps>;\n frames.push(frameElement.props);\n });\n\n parsed.storyboard = {\n ...(element.props.src !== undefined && { src: element.props.src }),\n ...(element.props.fallbackImage !== undefined && { fallbackImage: element.props.fallbackImage }),\n ...(element.props.width !== undefined && { width: element.props.width }),\n ...(element.props.height !== undefined && { height: element.props.height }),\n ...(element.props.resolutions !== undefined && { resolutions: element.props.resolutions }),\n frames,\n };\n }\n });\n\n return parsed;\n}\n\nfunction inferSourceType(source: SourceProps): VideoSourceType {\n if (source.type) return source.type;\n\n const src = source.src.toLowerCase();\n\n if (src.includes(\".mpd\") || src.includes(\"/dash\")) return \"dash\";\n if (src.includes(\".m3u8\") || src.includes(\"/hls\")) return \"hls\";\n\n return \"file\";\n}\n\nfunction findStoryboardCue(cues: StoryboardFrameProps[], time: number) {\n if (cues.length === 0) return null;\n // Find the last cue whose start is <= time (floor to nearest previous frame)\n let best: StoryboardFrameProps | null = null;\n for (const cue of cues) {\n if (cue.start <= time) best = cue;\n else break;\n }\n return best;\n}\n\nfunction parseStoryboardVtt(\n text: string,\n baseUrl: string,\n): StoryboardFrameProps[] {\n const lines = text\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean);\n\n const cues: StoryboardFrameProps[] = [];\n\n for (let index = 0; index < lines.length; index++) {\n const line = lines[index];\n if (!line || !line.includes(\"-->\")) continue;\n\n const parts = line.split(/\\s+-->\\s+/);\n const startRaw = parts[0];\n const endRaw = parts[1];\n const imageLine = lines[index + 1];\n\n if (!startRaw || !endRaw || !imageLine) continue;\n\n const image = parseStoryboardImageLine(imageLine, baseUrl);\n\n cues.push({\n start: parseVttTimestamp(startRaw),\n end: parseVttTimestamp(endRaw),\n ...image,\n });\n }\n\n return cues;\n}\n\nfunction parseStoryboardImageLine(line: string, baseUrl: string) {\n const splitIndex = line.indexOf(\"#xywh=\");\n const imageRaw = splitIndex >= 0 ? line.slice(0, splitIndex) : line;\n const xywhRaw = splitIndex >= 0 ? line.slice(splitIndex + 6) : null;\n const image = new URL(imageRaw, baseUrl).href;\n\n if (!xywhRaw) {\n return { image };\n }\n\n const [x, y, w, h] = xywhRaw.split(\",\").map(Number);\n\n return {\n image,\n ...(x !== undefined && !isNaN(x) && { x }),\n ...(y !== undefined && !isNaN(y) && { y }),\n ...(w !== undefined && !isNaN(w) && { w }),\n ...(h !== undefined && !isNaN(h) && { h }),\n };\n}\n\nfunction parseVttTimestamp(value: string) {\n const normalized = value.replace(\",\", \".\");\n const parts = normalized.split(\":\").map(Number);\n\n if (parts.length === 3) {\n return (parts[0] ?? 0) * 3600 + (parts[1] ?? 0) * 60 + (parts[2] ?? 0);\n }\n\n if (parts.length === 2) {\n return (parts[0] ?? 0) * 60 + (parts[1] ?? 0);\n }\n\n return Number(normalized) || 0;\n}\n\nfunction formatTime(seconds: number) {\n if (!Number.isFinite(seconds)) return \"0:00\";\n\n const safeSeconds = Math.max(0, Math.floor(seconds));\n const hours = Math.floor(safeSeconds / 3600);\n const minutes = Math.floor((safeSeconds % 3600) / 60);\n const secs = safeSeconds % 60;\n\n if (hours > 0) {\n return `${hours}:${String(minutes).padStart(2, \"0\")}:${String(secs).padStart(2, \"0\")}`;\n }\n\n return `${minutes}:${String(secs).padStart(2, \"0\")}`;\n}\n","\"use client\";\n\nimport { useState, type CSSProperties } from \"react\";\nimport { useSignedUrl } from \"@geekapps/silo-nextjs\";\n\nexport interface AvatarProps {\n /** Silo file key for the avatar image */\n fileKey?: string | null;\n /** Bucket the file is in */\n bucket?: string;\n /** Fallback initials when no image is available */\n initials?: string;\n /** Avatar size in px (default: 40) */\n size?: number;\n /** Border radius — \"full\" for circle, \"md\" for rounded square (default: \"full\") */\n shape?: \"full\" | \"md\" | \"sm\";\n className?: string;\n style?: CSSProperties;\n alt?: string;\n}\n\nconst RADIUS: Record<string, string> = { full: \"9999px\", md: \"12px\", sm: \"6px\" };\n\nexport function Avatar({\n fileKey,\n bucket,\n initials,\n size = 40,\n shape = \"full\",\n className = \"\",\n style,\n alt = \"avatar\",\n}: AvatarProps) {\n const { url } = useSignedUrl(fileKey ?? null);\n const [error, setError] = useState(false);\n\n const base: CSSProperties = {\n width: size,\n height: size,\n borderRadius: RADIUS[shape],\n fontSize: size * 0.38,\n flexShrink: 0,\n ...style,\n };\n\n if (url && !error) {\n return (\n <span\n className={`overflow-hidden inline-flex items-center justify-center bg-slate-200 text-slate-500 select-none font-semibold${className}`}\n style={base}\n >\n <img\n src={url}\n alt={alt}\n className=\"w-full h-full object-cover block\"\n onError={() => setError(true)}\n />\n </span>\n );\n }\n\n return (\n <span\n className={`overflow-hidden inline-flex items-center justify-center bg-slate-200 text-slate-500 select-none font-semibold${className}`}\n style={base}\n aria-label={alt}\n >\n {initials ? initials.slice(0, 2).toUpperCase() : \"?\"}\n </span>\n );\n}\n","\"use client\";\n\nimport { useState, type CSSProperties } from \"react\";\nimport { useSignedUrl } from \"@geekapps/silo-nextjs\";\n\nexport interface ThumbnailProps {\n /** Silo file key — required unless src is provided directly */\n fileKey?: string;\n /** Bucket the file is in */\n bucket?: string;\n /** Pre-resolved direct URL — skips the signed-URL fetch when provided (e.g. for public files) */\n src?: string | null;\n /** MIME type — used to render a video thumbnail placeholder for video files */\n mimeType?: string;\n /** Width in px or CSS string (default: \"100%\") */\n width?: number | string;\n /** Height in px or CSS string (default: 160) */\n height?: number | string;\n /** Object fit (default: \"cover\") */\n fit?: CSSProperties[\"objectFit\"];\n /** Border radius (default: \"12px\") */\n borderRadius?: string;\n /** Rendered while the URL is loading */\n placeholder?: React.ReactNode;\n className?: string;\n style?: CSSProperties;\n alt?: string;\n}\n\nexport function Thumbnail({\n fileKey,\n bucket,\n mimeType,\n src,\n width = \"100%\",\n height = 160,\n fit = \"cover\",\n borderRadius = \"12px\",\n placeholder,\n className = \"\",\n style,\n alt = \"thumbnail\",\n}: ThumbnailProps) {\n const { url: signedUrl, loading: signedLoading } = useSignedUrl(src != null ? null : fileKey);\n const url = src ?? signedUrl;\n const loading = src != null ? false : signedLoading;\n const [error, setError] = useState(false);\n\n const isVideo = mimeType?.startsWith(\"video/\");\n\n const wrapper: CSSProperties = {\n width,\n height,\n borderRadius,\n overflow: \"hidden\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: \"#f1f5f9\",\n position: \"relative\",\n flexShrink: 0,\n ...style,\n };\n\n if (loading) {\n return (\n <span className={className} style={wrapper}>\n {placeholder ?? <span className=\"text-[12px] text-slate-400\">...</span>}\n </span>\n );\n }\n\n if (error || !url) {\n return (\n <span className={className} style={wrapper}>\n <span className=\"text-[28px]\">{isVideo ? \"🎬\" : \"🖼️\"}</span>\n </span>\n );\n }\n\n if (isVideo) {\n return (\n <span className={className} style={wrapper}>\n <video\n src={url}\n style={{ width: \"100%\", height: \"100%\", objectFit: fit, display: \"block\" }}\n muted\n preload=\"metadata\"\n onError={() => setError(true)}\n />\n <span className=\"absolute inset-0 flex items-center justify-center pointer-events-none\">\n <span className=\"text-[24px] opacity-85\">▶</span>\n </span>\n </span>\n );\n }\n\n return (\n <span className={className} style={wrapper}>\n <img\n src={url}\n alt={alt}\n style={{ width: \"100%\", height: \"100%\", objectFit: fit, display: \"block\" }}\n onError={() => setError(true)}\n />\n </span>\n );\n}\n","\"use client\";\n\nimport { type CSSProperties, type ReactNode } from \"react\";\nimport { useSignedUrl } from \"@geekapps/silo-nextjs\";\n\nexport interface BackgroundProps {\n /** Silo file key for the background image */\n fileKey: string;\n /** Bucket the file is in */\n bucket?: string;\n /** CSS background-size (default: \"cover\") */\n size?: CSSProperties[\"backgroundSize\"];\n /** CSS background-position (default: \"center\") */\n position?: CSSProperties[\"backgroundPosition\"];\n /** Overlay color with opacity, e.g. \"rgba(0,0,0,0.4)\" */\n overlay?: string;\n children?: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function Background({\n fileKey,\n bucket,\n size = \"cover\",\n position = \"center\",\n overlay,\n children,\n className = \"\",\n style,\n}: BackgroundProps) {\n const { url } = useSignedUrl(fileKey);\n\n const wrapper: CSSProperties = {\n position: \"relative\",\n backgroundImage: url ? `url(${url})` : undefined,\n backgroundSize: size,\n backgroundPosition: position,\n backgroundRepeat: \"no-repeat\",\n ...style,\n };\n\n return (\n <div className={className} style={wrapper}>\n {overlay && (\n <div\n aria-hidden\n className=\"absolute inset-0 pointer-events-none\"\n style={{ background: overlay }}\n />\n )}\n {children && (\n <div className=\"relative z-10\">\n {children}\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { type CSSProperties } from \"react\";\nimport { getFileIcon } from \"../utils/format.js\";\nimport { formatBytes } from \"../utils/format.js\";\n\nexport interface FileIconProps {\n /** MIME type of the file */\n mimeType: string;\n /** Original file name */\n name?: string;\n /** File size in bytes */\n size?: number;\n /** Icon size in px (default: 40) */\n iconSize?: number;\n /** Show file name below icon */\n showName?: boolean;\n /** Show file size below icon */\n showSize?: boolean;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function FileIcon({\n mimeType,\n name,\n size,\n iconSize = 40,\n showName = false,\n showSize = false,\n className = \"\",\n style,\n}: FileIconProps) {\n const icon = getFileIcon(mimeType);\n const ext = name?.split(\".\").pop()?.toUpperCase();\n\n return (\n <span\n className={`inline-flex flex-col items-center gap-1${className}`}\n style={style}\n >\n <span style={{ fontSize: iconSize, lineHeight: 1 }}>{icon}</span>\n {ext && (\n <span\n className=\"font-bold text-slate-500 uppercase tracking-wide\"\n style={{ fontSize: iconSize * 0.22 }}\n >\n {ext}\n </span>\n )}\n {showName && name && (\n <span\n className=\"text-xs text-slate-900 overflow-hidden text-ellipsis whitespace-nowrap text-center\"\n style={{ maxWidth: iconSize * 3 }}\n title={name}\n >\n {name}\n </span>\n )}\n {showSize && size !== undefined && (\n <span className=\"text-[11px] text-slate-500\">\n {formatBytes(size)}\n </span>\n )}\n </span>\n );\n}\n","\"use client\";\n\nimport { type CSSProperties } from \"react\";\nimport { useFileStatus } from \"@geekapps/silo-nextjs\";\nimport { FileIcon } from \"./FileIcon.js\";\nimport { Thumbnail } from \"./Thumbnail.js\";\nimport { ProgressBar } from \"./ProgressBar.js\";\nimport { formatBytes } from \"../utils/format.js\";\n\nexport interface FileCardProps {\n fileId: string;\n pollInterval?: number;\n actions?: Array<\"preview\" | \"copy-url\" | \"download\" | \"delete\">;\n onPreview?: (fileId: string) => void;\n onCopyUrl?: (url: string) => void;\n onDelete?: (fileId: string) => void;\n className?: string;\n style?: CSSProperties;\n}\n\nconst STATUS_LABEL: Record<string, string> = {\n CREATED: \"Created\",\n UPLOADING: \"Uploading\",\n INGESTING: \"Ingesting\",\n PROCESSING: \"Processing\",\n READY: \"Ready\",\n FAILED: \"Failed\",\n CANCELLED: \"Cancelled\",\n};\n\nconst STATUS_COLOR: Record<string, string> = {\n READY: \"#22c55e\",\n FAILED: \"#ef4444\",\n CANCELLED: \"#ef4444\",\n};\n\nfunction statusColor(status: string): string {\n return STATUS_COLOR[status] ?? \"#6366f1\";\n}\n\nfunction isProcessing(status: string): boolean {\n return [\"CREATED\", \"UPLOADING\", \"INGESTING\", \"PROCESSING\"].includes(status);\n}\n\nexport function FileCard({\n fileId,\n pollInterval = 3000,\n actions = [\"preview\", \"copy-url\"],\n onPreview,\n onCopyUrl,\n onDelete,\n className = \"\",\n style,\n}: FileCardProps) {\n const { file, loading } = useFileStatus(fileId, { pollInterval });\n\n if (loading && !file) {\n return (\n <div\n className={`flex flex-col rounded-xl border border-slate-200 bg-slate-50 overflow-hidden w-[220px] p-4${className}`}\n style={style}\n >\n <span className=\"text-[13px] text-slate-400\">Loading...</span>\n </div>\n );\n }\n\n if (!file) return null;\n\n const status = (file as unknown as { status: string }).status;\n const isImg = file.mimeType.startsWith(\"image/\");\n const isVid = file.mimeType.startsWith(\"video/\");\n const showThumb = isImg || isVid;\n const progress = (file as unknown as { progress?: number }).progress ?? null;\n const ext = file.originalName.split(\".\").pop()?.toUpperCase();\n\n return (\n <div\n className={`flex flex-col rounded-xl border border-slate-200 bg-slate-50 overflow-hidden w-[220px]${className}`}\n style={style}\n >\n {/* Thumbnail / Icon area */}\n <div className=\"relative h-[130px] bg-slate-100 shrink-0\">\n {showThumb ? (\n <Thumbnail\n fileKey={file.key}\n mimeType={file.mimeType}\n width=\"100%\"\n height={130}\n borderRadius=\"0\"\n style={{ display: \"block\" }}\n />\n ) : (\n <div className=\"h-full flex items-center justify-center\">\n <FileIcon mimeType={file.mimeType} name={file.originalName} iconSize={44} />\n </div>\n )}\n\n <span\n className=\"absolute top-2 right-2 text-[10px] font-bold tracking-[0.05em] py-0.5 px-2 rounded-full backdrop-blur-sm bg-black/55\"\n style={{ color: statusColor(status) }}\n >\n {STATUS_LABEL[status] ?? status}\n </span>\n\n {ext && (\n <span className=\"absolute top-2 left-2 text-[9px] font-bold tracking-[0.06em] py-0.5 px-1.5 rounded-md backdrop-blur-sm bg-black/45 text-white uppercase\">\n {ext}\n </span>\n )}\n </div>\n\n {/* Body */}\n <div className=\"px-3 py-2.5 flex flex-col gap-1\">\n <span\n className=\"text-[13px] font-semibold text-slate-900 overflow-hidden text-ellipsis whitespace-nowrap\"\n title={file.originalName}\n >\n {file.originalName}\n </span>\n <span className=\"text-[11px] text-slate-400\">\n {formatBytes(file.size)}\n {file.metadata?.width && file.metadata?.height\n ? ` · ${file.metadata.width}×${file.metadata.height}`\n : \"\"}\n {file.metadata?.duration\n ? ` · ${Math.round(file.metadata.duration)}s`\n : \"\"}\n </span>\n\n {isProcessing(status) && (\n <div className=\"mt-1\">\n <ProgressBar progress={progress ?? 0} />\n <span className=\"text-[10px] text-slate-400 mt-0.5 block\">\n {STATUS_LABEL[status]}\n {progress != null ? ` · ${progress}%` : \"\"}\n </span>\n </div>\n )}\n\n {actions.length > 0 && (\n <div className=\"flex gap-1.5 mt-1.5 flex-wrap\">\n {actions.includes(\"preview\") && onPreview && (\n <button\n className=\"inline-flex items-center justify-center gap-1.5 text-xs font-semibold py-1 px-3 rounded-lg border border-slate-200 bg-transparent text-slate-900 cursor-pointer transition-colors hover:bg-slate-100\"\n onClick={() => onPreview(fileId)}\n >\n Preview\n </button>\n )}\n {actions.includes(\"copy-url\") && onCopyUrl && (\n <button\n className=\"inline-flex items-center justify-center gap-1.5 text-xs font-semibold py-1 px-3 rounded-lg border border-slate-200 bg-transparent text-slate-900 cursor-pointer transition-colors hover:bg-slate-100\"\n onClick={() => {\n const url = `${file.key}`;\n navigator.clipboard.writeText(url).catch(() => undefined);\n onCopyUrl(url);\n }}\n >\n Copy URL\n </button>\n )}\n {actions.includes(\"delete\") && onDelete && (\n <button\n className=\"inline-flex items-center justify-center gap-1.5 text-xs font-semibold py-1 px-3 rounded-lg border-transparent bg-red-500/10 text-red-500 cursor-pointer transition-colors hover:bg-red-500/20\"\n onClick={() => onDelete(fileId)}\n >\n Delete\n </button>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { useEffect, type KeyboardEvent } from \"react\";\nimport { useFileStatus, useSignedUrl } from \"@geekapps/silo-nextjs\";\nimport { FileIcon } from \"./FileIcon.js\";\nimport { ProgressBar } from \"./ProgressBar.js\";\nimport { formatBytes } from \"../utils/format.js\";\n\nexport interface FilePreviewProps {\n fileId: string | null;\n onClose: () => void;\n pollInterval?: number;\n}\n\nconst STATUS_LABEL: Record<string, string> = {\n CREATED: \"Created\",\n UPLOADING: \"Uploading\",\n INGESTING: \"Ingesting\",\n PROCESSING: \"Processing\",\n READY: \"Ready\",\n FAILED: \"Failed\",\n CANCELLED: \"Cancelled\",\n};\n\nfunction isProcessing(status: string) {\n return [\"CREATED\", \"UPLOADING\", \"INGESTING\", \"PROCESSING\"].includes(status);\n}\n\nfunction formatDate(iso: string) {\n return new Date(iso).toLocaleString(undefined, { dateStyle: \"medium\", timeStyle: \"short\" });\n}\n\nexport function FilePreview({ fileId, onClose, pollInterval = 3000 }: FilePreviewProps) {\n const { file, loading } = useFileStatus(fileId ?? undefined, {\n ...(fileId ? { pollInterval } : {}),\n });\n\n const status = (file as unknown as { status?: string })?.status ?? \"\";\n const { url } = useSignedUrl(file?.key ?? null);\n\n useEffect(() => {\n const handler = (e: globalThis.KeyboardEvent) => { if (e.key === \"Escape\") onClose(); };\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n }, [onClose]);\n\n if (!fileId) return null;\n\n const isImg = file?.mimeType.startsWith(\"image/\");\n const isVid = file?.mimeType.startsWith(\"video/\");\n const progress = (file as unknown as { progress?: number })?.progress ?? null;\n\n return (\n <>\n {/* Backdrop */}\n <div\n className=\"fixed inset-0 z-[1000] bg-black/60 backdrop-blur-md\"\n onClick={onClose}\n aria-hidden\n />\n\n {/* Dialog */}\n <div\n className=\"fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 z-[1001] w-[min(92vw,560px)] max-h-[90vh] flex flex-col rounded-2xl bg-white shadow-[0_24px_80px_rgba(0,0,0,0.35)] overflow-hidden\"\n role=\"dialog\"\n aria-modal\n aria-label={file?.originalName ?? \"File preview\"}\n onKeyDown={(e: KeyboardEvent) => { if (e.key === \"Escape\") onClose(); }}\n >\n {/* Header */}\n <div className=\"flex items-center gap-3 px-5 py-4 border-b border-slate-200\">\n <span className=\"flex-1 text-[14px] font-semibold text-slate-900 overflow-hidden text-ellipsis whitespace-nowrap\">\n {file?.originalName ?? \"Loading...\"}\n </span>\n <button\n className=\"bg-none border-none cursor-pointer text-base text-slate-400 leading-none p-0.5 px-1 shrink-0 hover:text-slate-600 transition-colors\"\n onClick={onClose}\n aria-label=\"Close\"\n >\n ✕\n </button>\n </div>\n\n {/* Preview area */}\n <div className=\"flex-1 flex items-center justify-center bg-[#0f0f0f] min-h-[240px] relative\">\n {loading && !file && (\n <span className=\"text-[13px] text-slate-400\">Loading...</span>\n )}\n\n {file && isImg && url && (\n <img\n src={url}\n alt={file.originalName}\n className=\"max-w-full max-h-[420px] object-contain block\"\n />\n )}\n\n {file && isVid && url && (\n <video\n src={url}\n controls\n className=\"max-w-full max-h-[420px] block\"\n />\n )}\n\n {file && !isImg && !isVid && (\n <div className=\"flex flex-col items-center gap-3 p-10\">\n <FileIcon mimeType={file.mimeType} name={file.originalName} iconSize={64} />\n <span className=\"text-[13px] text-slate-400\">No preview available</span>\n </div>\n )}\n\n {file && isProcessing(status) && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center gap-3 bg-black/65\">\n <span className=\"text-white text-[14px] font-semibold\">{STATUS_LABEL[status]}</span>\n <div className=\"w-[200px]\">\n <ProgressBar progress={progress ?? 0} />\n </div>\n {progress != null && (\n <span className=\"text-[12px] text-slate-400\">{progress}%</span>\n )}\n </div>\n )}\n </div>\n\n {/* Metadata */}\n {file && (\n <div className=\"px-5 py-3.5 border-t border-slate-200 flex flex-col gap-2\">\n <div className=\"grid gap-x-4 gap-y-1.5 items-baseline\" style={{ gridTemplateColumns: \"auto 1fr\" }}>\n <MetaRow label=\"Size\" value={formatBytes(file.size)} />\n <MetaRow label=\"Type\" value={file.mimeType} />\n <MetaRow label=\"Bucket\" value={(file as unknown as { bucketName?: string }).bucketName ?? file.bucket} />\n <MetaRow label=\"Status\" value={STATUS_LABEL[status] ?? status} highlight={status === \"READY\"} />\n {file.metadata?.width && <MetaRow label=\"Dimensions\" value={`${file.metadata.width}×${file.metadata.height}`} />}\n {file.metadata?.duration && <MetaRow label=\"Duration\" value={`${Math.round(file.metadata.duration)}s`} />}\n {file.metadata?.videoCodec && <MetaRow label=\"Codec\" value={file.metadata.videoCodec} />}\n <MetaRow label=\"Uploaded\" value={formatDate(file.createdAt)} />\n </div>\n\n <div className=\"flex gap-1.5 flex-wrap mt-1\">\n {file.metadata?.hasHls && <Badge>HLS</Badge>}\n {file.metadata?.hasAv1 && <Badge>AV1</Badge>}\n {file.isPrivate ? <Badge muted>Private</Badge> : <Badge>Public</Badge>}\n </div>\n\n {url && (\n <button\n className=\"w-full inline-flex items-center justify-center gap-1.5 text-xs font-semibold py-1.5 px-3 rounded-lg border border-slate-200 bg-transparent text-slate-900 cursor-pointer transition-colors hover:bg-slate-100 mt-1\"\n onClick={() => navigator.clipboard.writeText(url).catch(() => undefined)}\n >\n Copy URL\n </button>\n )}\n </div>\n )}\n </div>\n </>\n );\n}\n\nfunction MetaRow({ label, value, highlight }: { label: string; value: string; highlight?: boolean }) {\n return (\n <>\n <span className=\"text-[11px] text-slate-400 font-medium\">{label}</span>\n <span className={`text-[12px]${highlight ? \"text-green-500 font-semibold\" : \"text-slate-900\"}`}>\n {value}\n </span>\n </>\n );\n}\n\nfunction Badge({ children, muted }: { children: React.ReactNode; muted?: boolean }) {\n return (\n <span\n className={`inline-flex text-[10px] font-bold tracking-[0.05em] py-0.5 px-2 rounded-full border border-slate-200${\n muted ? \"text-slate-400\" : \"text-indigo-500\"\n }`}\n >\n {children}\n </span>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/theme.ts","../src/components/DropZone.tsx","../src/components/ProgressBar.tsx","../src/components/ImageOptions.tsx","../src/utils/format.ts","../src/ImageUploader.tsx","../src/components/VideoOptions.tsx","../src/VideoUploader.tsx","../src/FileUploader.tsx","../src/MediaUploader.tsx","../src/VideoPlayer.tsx","../src/components/Avatar.tsx","../src/components/Thumbnail.tsx","../src/components/Background.tsx","../src/components/FileIcon.tsx","../src/components/FileCard.tsx","../src/components/FilePreview.tsx"],"names":["jsx","jsxs","useState","useCallback","uploadLabel","useMultipartUpload","Fragment","DEFAULT_VIDEO_OPTS","createInitialVideoOpts","useRef","CaptionsIcon","useSignedUrl","STATUS_LABEL","isProcessing","useFileStatus","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["import type { SiloTheme } from \"../types.js\";\n\nexport const defaultTheme: Required<SiloTheme> = {\n borderColor: \"#e2e8f0\",\n borderColorActive: \"#6366f1\",\n backgroundColor: \"#f8fafc\",\n backgroundColorHover: \"#f1f5f9\",\n textColor: \"#0f172a\",\n textColorMuted: \"#64748b\",\n accentColor: \"#6366f1\",\n accentColorHover: \"#4f46e5\",\n errorColor: \"#ef4444\",\n successColor: \"#22c55e\",\n borderRadius: \"12px\",\n fontFamily: \"inherit\",\n};\n\nexport function resolveTheme(theme?: SiloTheme): Required<SiloTheme> {\n return { ...defaultTheme, ...theme };\n}\n\nexport function themeToVars(theme: Required<SiloTheme>): Record<string, string> {\n return {\n \"--silo-border\": theme.borderColor,\n \"--silo-border-active\": theme.borderColorActive,\n \"--silo-bg\": theme.backgroundColor,\n \"--silo-bg-hover\": theme.backgroundColorHover,\n \"--silo-text\": theme.textColor,\n \"--silo-text-muted\": theme.textColorMuted,\n \"--silo-accent\": theme.accentColor,\n \"--silo-accent-hover\": theme.accentColorHover,\n \"--silo-error\": theme.errorColor,\n \"--silo-success\": theme.successColor,\n \"--silo-radius\": theme.borderRadius,\n \"--silo-font\": theme.fontFamily,\n };\n}\n","\"use client\";\n\nimport {\n useState,\n useRef,\n useCallback,\n type DragEvent,\n type ChangeEvent,\n type ReactNode,\n type CSSProperties,\n} from \"react\";\nimport type { SiloTheme } from \"../types.js\";\nimport { resolveTheme, themeToVars } from \"../utils/theme.js\";\n\ninterface DropZoneProps {\n accept?: string;\n multiple?: boolean;\n disabled?: boolean;\n maxSize?: number;\n onFiles: (files: File[]) => void;\n onError?: (error: Error) => void;\n className?: string;\n style?: CSSProperties;\n theme?: SiloTheme;\n children: ReactNode;\n}\n\nexport function DropZone({\n accept,\n multiple = false,\n disabled = false,\n maxSize,\n onFiles,\n onError,\n className = \"\",\n style,\n theme,\n children,\n}: DropZoneProps) {\n const [dragging, setDragging] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const t = resolveTheme(theme);\n const vars = themeToVars(t);\n\n const validate = useCallback(\n (files: File[]): File[] => {\n return files.filter((f) => {\n if (maxSize && f.size > maxSize) {\n onError?.(new Error(`File \"${f.name}\" exceeds max size of ${maxSize} bytes`));\n return false;\n }\n return true;\n });\n },\n [maxSize, onError]\n );\n\n const handleDrop = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n setDragging(false);\n if (disabled) return;\n const files = Array.from(e.dataTransfer.files);\n const valid = validate(files);\n if (valid.length) onFiles(valid);\n },\n [disabled, validate, onFiles]\n );\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(e.target.files ?? []);\n const valid = validate(files);\n if (valid.length) onFiles(valid);\n e.target.value = \"\";\n },\n [validate, onFiles]\n );\n\n const rootStyle: CSSProperties = {\n ...vars as CSSProperties,\n border: `2px dashed ${dragging ? \"var(--silo-border-active)\" : \"var(--silo-border)\"}`,\n borderRadius: \"var(--silo-radius)\",\n background: dragging ? \"var(--silo-bg-hover)\" : \"var(--silo-bg)\",\n color: \"var(--silo-text)\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n opacity: disabled ? 0.5 : 1,\n outline: \"none\",\n transition: \"border-color 150ms, background 150ms\",\n ...style,\n };\n\n return (\n <div\n className={className}\n style={rootStyle}\n onDragOver={(e) => { e.preventDefault(); if (!disabled) setDragging(true); }}\n onDragLeave={() => setDragging(false)}\n onDrop={handleDrop}\n onClick={() => !disabled && inputRef.current?.click()}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onKeyDown={(e) => { if (e.key === \"Enter\" || e.key === \" \") inputRef.current?.click(); }}\n aria-label=\"Upload area\"\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n className=\"hidden\"\n onChange={handleChange}\n disabled={disabled}\n />\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport type { CSSProperties } from \"react\";\n\ninterface ProgressBarProps {\n progress: number;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function ProgressBar({ progress, className = \"\", style }: ProgressBarProps) {\n return (\n <div\n className={className}\n style={{ height: 4, borderRadius: 9999, background: \"var(--silo-border, #e2e8f0)\", overflow: \"hidden\", ...style }}\n role=\"progressbar\"\n aria-valuenow={progress}\n aria-valuemin={0}\n aria-valuemax={100}\n >\n <div\n style={{ height: \"100%\", borderRadius: 9999, background: \"var(--silo-accent, #6366f1)\", width: `${progress}%`, transition: \"width 200ms linear\" }}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport type { CSSProperties } from \"react\";\nimport type { ImageUploadOptions } from \"@geekapps/silo-nextjs\";\n\nconst FORMATS = [\n { value: \"webp\", label: \"WebP\", hint: \"Melhor custo-benefício\" },\n { value: \"avif\", label: \"AVIF\", hint: \"Máxima compressão\" },\n { value: \"jpeg\", label: \"JPEG\", hint: \"Compatibilidade universal\" },\n { value: \"png\", label: \"PNG\", hint: \"Sem perda\" },\n];\n\ninterface ImageOptionsProps {\n value: ImageUploadOptions;\n onChange: (opts: ImageUploadOptions) => void;\n style?: CSSProperties;\n}\n\nexport function ImageOptions({ value, onChange, style }: ImageOptionsProps) {\n const fmt = value.format ?? \"webp\";\n const optimize = value.optimize ?? true;\n\n return (\n <div className=\"flex flex-col gap-2.5\" style={style}>\n <div>\n <div style={{ fontSize: 11, fontWeight: 700, textTransform: \"uppercase\", letterSpacing: \"0.05em\", marginBottom: 6, color: \"rgba(255,255,255,0.4)\" }}>\n Formato de saída\n </div>\n <div className=\"flex gap-1.5 flex-wrap\">\n {FORMATS.map((f) => (\n <button\n key={f.value}\n type=\"button\"\n onClick={() => onChange({ ...value, format: f.value as NonNullable<ImageUploadOptions[\"format\"]> })}\n title={f.hint}\n style={fmt === f.value\n ? { border: \"1px solid #6366f1\", background: \"#6366f1\", color: \"#fff\", padding: \"4px 12px\", borderRadius: 6, fontSize: 12, fontWeight: 600, cursor: \"pointer\" }\n : { border: \"1px solid rgba(255,255,255,0.2)\", background: \"rgba(255,255,255,0.06)\", color: \"rgba(255,255,255,0.8)\", padding: \"4px 12px\", borderRadius: 6, fontSize: 12, fontWeight: 600, cursor: \"pointer\" }\n }\n >\n {f.label}\n </button>\n ))}\n </div>\n </div>\n\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, cursor: \"pointer\", userSelect: \"none\" }} onClick={() => onChange({ ...value, optimize: !optimize })}>\n <span style={{ position: \"relative\", display: \"inline-block\", width: 36, height: 20, borderRadius: 10, flexShrink: 0, cursor: \"pointer\", background: optimize ? \"#6366f1\" : \"rgba(255,255,255,0.15)\", transition: \"background 150ms\" }}>\n <span style={{ position: \"absolute\", top: 2, left: optimize ? 18 : 2, width: 16, height: 16, borderRadius: \"50%\", background: \"#fff\", boxShadow: \"0 1px 3px rgba(0,0,0,.3)\", transition: \"left 150ms\" }} />\n </span>\n <span style={{ fontSize: 12, fontWeight: 500, color: \"rgba(255,255,255,0.85)\" }}>Otimizar tamanho</span>\n <span style={{ fontSize: 11, color: \"rgba(255,255,255,0.45)\" }}>{optimize ? \"Qualidade 85 — menor tamanho\" : \"Qualidade máxima\"}</span>\n </div>\n </div>\n );\n}\n","export function formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 ** 2) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 ** 3) return `${(bytes / 1024 ** 2).toFixed(1)} MB`;\n return `${(bytes / 1024 ** 3).toFixed(2)} GB`;\n}\n\nexport function getFileIcon(mimeType: string): string {\n if (mimeType.startsWith(\"image/\")) return \"🖼️\";\n if (mimeType.startsWith(\"video/\")) return \"🎬\";\n if (mimeType.startsWith(\"audio/\")) return \"🎵\";\n if (mimeType === \"application/pdf\") return \"📄\";\n if (mimeType.includes(\"spreadsheet\") || mimeType.includes(\"excel\")) return \"📊\";\n if (mimeType.includes(\"presentation\") || mimeType.includes(\"powerpoint\")) return \"📑\";\n if (mimeType.includes(\"word\") || mimeType.includes(\"document\")) return \"📝\";\n if (mimeType.includes(\"zip\") || mimeType.includes(\"tar\") || mimeType.includes(\"gzip\")) return \"📦\";\n return \"📎\";\n}\n","\"use client\";\n\nimport { useState, useCallback, type CSSProperties } from \"react\";\nimport { useMultipartUpload } from \"@geekapps/silo-nextjs\";\nimport type { ImageUploadOptions } from \"@geekapps/silo-nextjs\";\nimport type { ImageUploaderProps } from \"./types.js\";\nimport { DropZone } from \"./components/DropZone.js\";\nimport { ProgressBar } from \"./components/ProgressBar.js\";\nimport { ImageOptions } from \"./components/ImageOptions.js\";\nimport { formatBytes } from \"./utils/format.js\";\nimport { resolveTheme, themeToVars } from \"./utils/theme.js\";\n\nfunction uploadLabel(status: string, progress: number): string {\n if (status === \"preparing\") return \"Preparando…\";\n if (status === \"completing\") return \"Concluindo…\";\n if (progress < 30) return \"Iniciando envio…\";\n if (progress < 70) return \"Enviando imagem…\";\n if (progress < 95) return \"Quase lá…\";\n return \"Finalizando…\";\n}\n\nexport function ImageUploader({\n bucket,\n expiresIn,\n onUpload,\n onError,\n className = \"\",\n style,\n disabled = false,\n maxSize,\n accept = \"image/*\",\n showPreview = true,\n showImageOptions = false,\n image,\n theme,\n renderIcon,\n renderProgress,\n renderSuccess,\n renderError,\n children,\n}: ImageUploaderProps) {\n const { state, upload, pause, resume, abort, reset } = useMultipartUpload(bucket);\n const [preview, setPreview] = useState<string | null>(null);\n const [imageOpts, setImageOpts] = useState<ImageUploadOptions>(image ?? { format: \"webp\", optimize: true });\n const [stagedFile, setStagedFile] = useState<File | null>(null);\n const t = resolveTheme(theme);\n const vars = themeToVars(t);\n\n const doUpload = useCallback(async (file: File, opts: ImageUploadOptions) => {\n if (showPreview) setPreview(URL.createObjectURL(file));\n try {\n const result = await upload(file, { ...(bucket !== undefined && { bucket }), image: opts });\n if (result) onUpload?.(result);\n } catch (err) {\n onError?.(err instanceof Error ? err : new Error(String(err)));\n }\n }, [upload, bucket, onUpload, onError, showPreview]);\n\n const handleFiles = useCallback(async (files: File[]) => {\n const file = files[0];\n if (!file) return;\n if (showImageOptions) {\n setStagedFile(file);\n if (showPreview) setPreview(URL.createObjectURL(file));\n } else {\n await doUpload(file, image ?? imageOpts);\n }\n }, [showImageOptions, image, imageOpts, doUpload, showPreview]);\n\n const containerStyle: CSSProperties = {\n ...vars as CSSProperties,\n ...style,\n };\n\n const isUploading = state.status === \"uploading\" || state.status === \"preparing\" || state.status === \"completing\";\n const progress = state.status === \"uploading\" ? state.progress : state.status === \"completing\" ? 99 : 0;\n const isPaused = state.status === \"idle\" && preview !== null && !stagedFile;\n\n if (state.status === \"error\" && renderError) return <div className=\"flex flex-col gap-3 w-full\" style={containerStyle}>{renderError(state.error, reset)}</div>;\n if (state.status === \"done\" && renderSuccess) return <div className=\"flex flex-col gap-3 w-full\" style={containerStyle}>{renderSuccess(state.result)}</div>;\n\n return (\n <div className={`flex flex-col gap-3 w-full${className ? ` ${className}` : \"\"}`} style={containerStyle}>\n <DropZone\n {...(accept !== undefined && { accept })}\n {...(maxSize !== undefined && { maxSize })}\n {...(onError !== undefined && { onError })}\n {...(theme !== undefined && { theme })}\n disabled={disabled || isUploading}\n onFiles={handleFiles}\n style={{ padding: \"32px 24px\", textAlign: \"center\" }}\n >\n {preview && !isUploading && !stagedFile ? (\n <div className=\"flex flex-col items-center gap-2\">\n <img src={preview} alt=\"Pré-visualização\" className=\"max-w-full max-h-[200px] rounded-lg object-contain\" />\n <span className=\"text-[12px] text-slate-400\">Clique ou arraste para trocar a imagem</span>\n </div>\n ) : (\n <div className=\"flex flex-col items-center gap-2\">\n {renderIcon ? renderIcon() : (\n <svg width=\"40\" height=\"40\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" className=\"text-slate-400 opacity-50\">\n <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\" />\n </svg>\n )}\n {children ?? (\n <>\n <span className=\"text-slate-900 font-bold text-[15px]\">Arraste sua imagem aqui</span>\n <span className=\"text-slate-500 text-[13px]\">ou clique para escolher do seu dispositivo</span>\n {maxSize && <span className=\"text-slate-400 text-[12px]\">Tamanho máximo: {formatBytes(maxSize)}</span>}\n </>\n )}\n </div>\n )}\n </DropZone>\n\n {showImageOptions && stagedFile && !isUploading && state.status !== \"done\" && (\n <>\n {preview && (\n <div className=\"border border-slate-200 rounded-xl overflow-hidden\">\n <img src={preview} alt=\"Pré-visualização\" className=\"w-full max-h-[200px] object-contain block bg-slate-50\" />\n </div>\n )}\n <div className=\"border border-slate-200 rounded-xl overflow-hidden\">\n <div className=\"px-3.5 py-2 bg-slate-100 text-[12px] font-bold text-slate-500 tracking-[0.04em]\">🖼️ Configurações de imagem</div>\n <ImageOptions value={imageOpts} onChange={setImageOpts} style={{ padding: \"12px 14px\" }} />\n </div>\n <div className=\"flex gap-2\">\n <button\n className=\"inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border border-slate-200 bg-transparent text-slate-900 cursor-pointer transition-colors hover:bg-slate-100\"\n onClick={() => { setStagedFile(null); setPreview(null); }}\n >\n Cancelar\n </button>\n <button\n className=\"flex-1 inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border-transparent bg-indigo-500 text-white cursor-pointer transition-opacity hover:opacity-90\"\n onClick={() => { const f = stagedFile; setStagedFile(null); void doUpload(f, imageOpts); }}\n >\n Enviar imagem\n </button>\n </div>\n </>\n )}\n\n {isUploading && (\n renderProgress ? renderProgress(progress) : (\n <div className=\"flex flex-col gap-2 px-3 py-4 bg-slate-50 rounded-xl border border-slate-200\">\n <div className=\"flex justify-between items-center\">\n <span className=\"text-[13px] font-semibold text-slate-900\">{uploadLabel(state.status, progress)}</span>\n <span className=\"text-[13px] font-bold text-indigo-500\">{progress}%</span>\n </div>\n <ProgressBar progress={progress} />\n </div>\n )\n )}\n\n {isPaused && (\n <div className=\"flex gap-2\">\n <button\n className=\"flex-1 inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border-transparent bg-emerald-500 text-white cursor-pointer hover:opacity-90\"\n onClick={() => resume({ ...(bucket !== undefined && { bucket }), image: imageOpts })}\n >\n ▶ Retomar envio\n </button>\n <button\n className=\"inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border border-slate-200 bg-transparent text-slate-900 cursor-pointer hover:bg-slate-100\"\n onClick={() => { abort(); setPreview(null); }}\n >\n Cancelar\n </button>\n </div>\n )}\n\n {state.status === \"done\" && !renderSuccess && (\n <div className=\"flex items-center gap-3 px-4 py-3.5 bg-green-500/[0.08] rounded-xl border border-green-500/20\">\n <span className=\"text-2xl\">✅</span>\n <div className=\"flex-1\">\n <div className=\"font-bold text-sm text-green-700\">Imagem enviada com sucesso!</div>\n <div className=\"text-[12px] text-slate-400 mt-0.5\">{formatBytes(state.result.size)}</div>\n </div>\n <button\n className=\"inline-flex items-center justify-center text-xs font-semibold py-1 px-2.5 rounded-lg border border-green-500/30 text-green-700 bg-transparent cursor-pointer hover:bg-green-500/10 shrink-0\"\n onClick={() => { reset(); setPreview(null); }}\n >\n Enviar outra\n </button>\n </div>\n )}\n\n {state.status === \"error\" && !renderError && (\n <div className=\"flex items-center gap-3 px-4 py-3.5 bg-red-500/[0.07] rounded-xl border border-red-500/20\">\n <span className=\"text-[22px]\">⚠️</span>\n <div className=\"flex-1\">\n <div className=\"font-bold text-[13px] text-red-500\">Não foi possível enviar a imagem</div>\n <div className=\"text-[12px] text-slate-400 mt-0.5\">{state.error.message}</div>\n </div>\n <button\n className=\"inline-flex items-center justify-center text-xs font-semibold py-1 px-2.5 rounded-lg border border-red-500/30 text-red-500 bg-transparent cursor-pointer hover:bg-red-500/10 shrink-0\"\n onClick={() => { reset(); setPreview(null); }}\n >\n Tentar novamente\n </button>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport type { CSSProperties } from \"react\";\nimport type { VideoUploadOptions } from \"@geekapps/silo-nextjs\";\n\nconst CODECS: { value: string; label: string; description: string; warning?: string }[] = [\n {\n value: \"h264\",\n label: \"H.264\",\n description: \"Compatibilidade universal — funciona em todos os players, browsers e Smart TVs.\",\n },\n {\n value: \"h265\",\n label: \"H.265\",\n description: \"50% menor que H.264 com a mesma qualidade. Requer player moderno (Chrome, Safari, Firefox).\",\n },\n {\n value: \"av1\",\n label: \"AV1\",\n description: \"Máxima eficiência — até 50% menor que H.265. Suportado no Chrome, Firefox e Safari 17+.\",\n warning: \"AV1 não é suportado em iPhones mais antigos (iOS < 16) e Smart TVs antigas.\",\n },\n];\n\nconst RESOLUTIONS = [\"144\", \"240\", \"360\", \"480\", \"720\", \"1080\", \"1440\", \"2160\"] as const;\nconst RESOLUTION_LABELS: Record<string, string> = {\n \"144\": \"144p\", \"240\": \"240p\", \"360\": \"360p\", \"480\": \"480p\",\n \"720\": \"720p\", \"1080\": \"1080p\", \"1440\": \"1440p\", \"2160\": \"4K\",\n};\n\ninterface VideoOptionsProps {\n value: VideoUploadOptions;\n onChange: (opts: VideoUploadOptions) => void;\n style?: CSSProperties;\n}\n\nfunction optBtnStyle(active: boolean): CSSProperties {\n return active\n ? { border: \"1px solid #6366f1\", background: \"#6366f1\", color: \"#fff\", padding: \"4px 10px\", borderRadius: 6, fontSize: 12, fontWeight: 600, cursor: \"pointer\", minWidth: 36 }\n : { border: \"1px solid rgba(255,255,255,0.2)\", background: \"rgba(255,255,255,0.06)\", color: \"rgba(255,255,255,0.8)\", padding: \"4px 10px\", borderRadius: 6, fontSize: 12, fontWeight: 600, cursor: \"pointer\", minWidth: 36 };\n}\n\nfunction Toggle({ checked, onToggle, label }: { checked: boolean; onToggle: () => void; label: string }) {\n return (\n <div style={{ display: \"inline-flex\", alignItems: \"center\", gap: 8, cursor: \"pointer\", userSelect: \"none\" }} onClick={onToggle}>\n <span style={{ position: \"relative\", display: \"inline-block\", width: 32, height: 18, borderRadius: 9, flexShrink: 0, cursor: \"pointer\", background: checked ? \"#6366f1\" : \"rgba(255,255,255,0.15)\", transition: \"background 150ms\" }}>\n <span style={{ position: \"absolute\", top: 2, left: checked ? 16 : 2, width: 14, height: 14, borderRadius: \"50%\", background: \"#fff\", boxShadow: \"0 1px 3px rgba(0,0,0,.3)\", transition: \"left 150ms\" }} />\n </span>\n <span style={{ fontSize: 12, fontWeight: 500, color: \"rgba(255,255,255,0.85)\" }}>{label}</span>\n </div>\n );\n}\n\nexport function VideoOptions({ value, onChange, style }: VideoOptionsProps) {\n const codec = value.codec ?? \"h264\";\n const transcoding = value.transcoding ?? \"auto\";\n const isAuto = transcoding === \"auto\";\n const selectedRes: string[] = isAuto ? [] : (transcoding as string[]);\n\n const selectedCodec = CODECS.find((c) => c.value === codec) ?? CODECS[0]!;\n\n type Res = \"144\" | \"240\" | \"360\" | \"480\" | \"720\" | \"1080\" | \"1440\" | \"2160\";\n function toggleRes(r: Res) {\n if (isAuto) { onChange({ ...value, transcoding: [r] }); return; }\n const next = selectedRes.includes(r) ? selectedRes.filter((x) => x !== r) : [...selectedRes, r];\n onChange({ ...value, transcoding: next.length === 0 ? \"auto\" : (next as Res[]) });\n }\n\n function toggleFeature(key: keyof VideoUploadOptions) {\n onChange({ ...value, [key]: !value[key] });\n }\n\n return (\n <div className=\"flex flex-col gap-3\" style={style}>\n {/* Codec */}\n <div>\n <div style={{ fontSize: 11, fontWeight: 700, textTransform: \"uppercase\", letterSpacing: \"0.05em\", marginBottom: 6, color: \"rgba(255,255,255,0.4)\" }}>Codec de vídeo</div>\n <div className=\"flex gap-1.5 flex-wrap\">\n {CODECS.map((c) => (\n <button key={c.value} type=\"button\"\n onClick={() => onChange({ ...value, codec: c.value as NonNullable<VideoUploadOptions[\"codec\"]> })}\n style={optBtnStyle(codec === c.value)}\n >\n {c.label}\n </button>\n ))}\n </div>\n {/* Description of selected codec */}\n <div style={{ marginTop: 6, fontSize: 11, color: \"rgba(255,255,255,0.45)\", lineHeight: 1.5 }}>\n {selectedCodec.description}\n </div>\n {/* Warning for AV1 */}\n {selectedCodec.warning && (\n <div style={{ marginTop: 5, display: \"flex\", alignItems: \"flex-start\", gap: 5, background: \"rgba(251,191,36,0.08)\", border: \"1px solid rgba(251,191,36,0.2)\", borderRadius: 6, padding: \"5px 8px\" }}>\n <span style={{ fontSize: 11, color: \"#fbbf24\", lineHeight: 1.5 }}>⚠ {selectedCodec.warning}</span>\n </div>\n )}\n </div>\n\n {/* Resolutions */}\n <div>\n <div style={{ fontSize: 11, fontWeight: 700, textTransform: \"uppercase\", letterSpacing: \"0.05em\", marginBottom: 6, color: \"rgba(255,255,255,0.4)\" }}>Resoluções</div>\n <div className=\"flex gap-1.5 flex-wrap\">\n <button type=\"button\" onClick={() => onChange({ ...value, transcoding: \"auto\" })} style={optBtnStyle(isAuto)}>Auto</button>\n {RESOLUTIONS.map((r) => (\n <button key={r} type=\"button\"\n onClick={() => toggleRes(r as Res)}\n style={optBtnStyle(!isAuto && selectedRes.includes(r))}\n >\n {RESOLUTION_LABELS[r]}\n </button>\n ))}\n </div>\n {isAuto && (\n <div style={{ marginTop: 6, fontSize: 11, color: \"rgba(255,255,255,0.35)\", lineHeight: 1.5 }}>\n Modo automático: gera todas as resoluções até a resolução original do vídeo.\n </div>\n )}\n </div>\n\n {/* Features */}\n <div>\n <div style={{ fontSize: 11, fontWeight: 700, textTransform: \"uppercase\", letterSpacing: \"0.05em\", marginBottom: 8, color: \"var(--silo-text-muted)\" }}>Recursos</div>\n <div className=\"flex flex-col gap-2\">\n <Toggle checked={value.thumbnails ?? true} onToggle={() => toggleFeature(\"thumbnails\")} label=\"Gerar thumbnails\" />\n <Toggle checked={value.storyboard ?? false} onToggle={() => toggleFeature(\"storyboard\")} label=\"Gerar storyboard\" />\n <Toggle checked={value.autoCaptions ?? false} onToggle={() => toggleFeature(\"autoCaptions\")} label=\"Legendas automáticas (IA)\" />\n <Toggle checked={value.separateAudio ?? false} onToggle={() => toggleFeature(\"separateAudio\")} label=\"Separar faixa de áudio\" />\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { useState, useCallback, type CSSProperties } from \"react\";\nimport { useMultipartUpload } from \"@geekapps/silo-nextjs\";\nimport type { VideoUploadOptions } from \"@geekapps/silo-nextjs\";\nimport type { VideoUploaderProps } from \"./types.js\";\nimport { DropZone } from \"./components/DropZone.js\";\nimport { ProgressBar } from \"./components/ProgressBar.js\";\nimport { VideoOptions } from \"./components/VideoOptions.js\";\nimport { formatBytes } from \"./utils/format.js\";\nimport { resolveTheme, themeToVars } from \"./utils/theme.js\";\n\nconst DEFAULT_VIDEO_OPTS: VideoUploadOptions = {\n thumbnails: true, storyboard: false, autoCaptions: false,\n separateAudio: false, codec: \"h264\", transcoding: \"auto\",\n};\n\nfunction createInitialVideoOpts(video?: VideoUploadOptions): VideoUploadOptions {\n return video ?? DEFAULT_VIDEO_OPTS;\n}\n\nfunction uploadLabel(status: string, progress: number): string {\n if (status === \"preparing\") return \"Preparando…\";\n if (status === \"completing\") return \"Concluindo envio…\";\n if (progress < 20) return \"Iniciando envio…\";\n if (progress < 50) return \"Enviando vídeo…\";\n if (progress < 80) return \"Ainda enviando…\";\n if (progress < 97) return \"Quase terminando…\";\n return \"Finalizando…\";\n}\n\nexport function VideoUploader({\n bucket,\n expiresIn,\n onUpload,\n onError,\n className = \"\",\n style,\n disabled = false,\n maxSize,\n accept = \"video/*\",\n showPreview = true,\n showVideoOptions = false,\n video,\n theme,\n renderIcon,\n renderProgress,\n renderSuccess,\n renderError,\n children,\n}: VideoUploaderProps) {\n const { state, upload, pause, resume, abort, reset } = useMultipartUpload(bucket);\n const [preview, setPreview] = useState<string | null>(null);\n const [videoOpts, setVideoOpts] = useState<VideoUploadOptions>(() => createInitialVideoOpts(video));\n const [stagedFile, setStagedFile] = useState<File | null>(null);\n const t = resolveTheme(theme);\n const vars = themeToVars(t);\n\n const doUpload = useCallback(async (file: File, opts: VideoUploadOptions) => {\n if (showPreview) setPreview(URL.createObjectURL(file));\n try {\n const result = await upload(file, { ...(bucket !== undefined && { bucket }), video: opts });\n if (result) onUpload?.(result);\n } catch (err) {\n onError?.(err instanceof Error ? err : new Error(String(err)));\n }\n }, [upload, bucket, onUpload, onError, showPreview]);\n\n const handleFiles = useCallback(async (files: File[]) => {\n const file = files[0];\n if (!file) return;\n if (showVideoOptions) {\n setVideoOpts(createInitialVideoOpts(video));\n setStagedFile(file);\n if (showPreview) setPreview(URL.createObjectURL(file));\n } else {\n await doUpload(file, video ?? videoOpts);\n }\n }, [showVideoOptions, video, videoOpts, doUpload, showPreview]);\n\n const containerStyle: CSSProperties = {\n ...vars as CSSProperties,\n ...style,\n };\n\n const isUploading = state.status === \"uploading\" || state.status === \"preparing\" || state.status === \"completing\";\n const progress = state.status === \"uploading\" ? state.progress : state.status === \"completing\" ? 99 : 0;\n const isPaused = state.status === \"idle\" && preview !== null && !stagedFile;\n\n if (state.status === \"error\" && renderError) return <div className=\"flex flex-col gap-3 w-full\" style={containerStyle}>{renderError(state.error, reset)}</div>;\n if (state.status === \"done\" && renderSuccess) return <div className=\"flex flex-col gap-3 w-full\" style={containerStyle}>{renderSuccess(state.result)}</div>;\n\n return (\n <div className={`flex flex-col gap-3 w-full${className ? ` ${className}` : \"\"}`} style={containerStyle}>\n <DropZone\n {...(accept !== undefined && { accept })}\n {...(maxSize !== undefined && { maxSize })}\n {...(onError !== undefined && { onError })}\n {...(theme !== undefined && { theme })}\n disabled={disabled || isUploading}\n onFiles={handleFiles}\n style={{ padding: \"32px 24px\", textAlign: \"center\" }}\n >\n {preview && !isUploading && !stagedFile ? (\n <div className=\"flex flex-col items-center gap-2\">\n <video src={preview} className=\"max-w-full max-h-[180px] rounded-lg\" muted playsInline />\n <span className=\"text-[12px] text-slate-400\">Clique ou arraste para trocar o vídeo</span>\n </div>\n ) : (\n <div className=\"flex flex-col items-center gap-2\">\n {renderIcon ? renderIcon() : (\n <svg width=\"40\" height=\"40\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" className=\"text-slate-400 opacity-50\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M15 10l4.553-2.069A1 1 0 0121 8.878v6.244a1 1 0 01-1.447.894L15 14M3 8a2 2 0 012-2h8a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2V8z\" />\n </svg>\n )}\n {children ?? (\n <>\n <span className=\"text-slate-900 font-bold text-[15px]\">Arraste seu vídeo aqui</span>\n <span className=\"text-slate-500 text-[13px]\">ou clique para escolher do seu dispositivo</span>\n <span className=\"text-slate-400 text-[12px]\">\n MP4, MOV, MKV, WebM{maxSize ? ` · Máx ${formatBytes(maxSize)}` : \"\"}\n </span>\n </>\n )}\n </div>\n )}\n </DropZone>\n\n {showVideoOptions && stagedFile && !isUploading && state.status !== \"done\" && (\n <>\n {preview && (\n <div className=\"border border-slate-200 rounded-xl overflow-hidden bg-black\">\n <video src={preview} className=\"w-full max-h-[200px] block\" muted playsInline controls />\n </div>\n )}\n <div className=\"border border-slate-200 rounded-xl overflow-hidden\">\n <div className=\"px-3.5 py-2 bg-slate-100 text-[12px] font-bold text-slate-500 tracking-[0.04em]\">🎬 Configurações de vídeo</div>\n <VideoOptions value={videoOpts} onChange={setVideoOpts} style={{ padding: \"12px 14px\" }} />\n </div>\n <div className=\"flex gap-2\">\n <button\n className=\"inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border border-slate-200 bg-transparent text-slate-900 cursor-pointer hover:bg-slate-100\"\n onClick={() => { setStagedFile(null); setPreview(null); setVideoOpts(createInitialVideoOpts(video)); }}\n >\n Cancelar\n </button>\n <button\n className=\"flex-1 inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border-transparent bg-indigo-500 text-white cursor-pointer hover:opacity-90\"\n onClick={() => { const f = stagedFile; setStagedFile(null); void doUpload(f, videoOpts); setVideoOpts(createInitialVideoOpts(video)); }}\n >\n Enviar vídeo\n </button>\n </div>\n </>\n )}\n\n {isUploading && (\n renderProgress ? renderProgress(progress) : (\n <div className=\"flex flex-col gap-2 px-3 py-4 bg-slate-50 rounded-xl border border-slate-200\">\n <div className=\"flex justify-between items-center\">\n <span className=\"text-[13px] font-semibold text-slate-900\">{uploadLabel(state.status, progress)}</span>\n <div className=\"flex gap-2 items-center\">\n <span className=\"text-[13px] font-bold text-indigo-500\">{progress}%</span>\n <button\n className=\"inline-flex items-center justify-center text-[11px] font-semibold py-0.5 px-2 rounded-lg border border-slate-200 bg-transparent text-slate-900 cursor-pointer hover:bg-slate-100\"\n onClick={pause}\n >\n Pausar\n </button>\n </div>\n </div>\n <ProgressBar progress={progress} />\n <span className=\"text-[11px] text-slate-400\">O processamento do vídeo começa automaticamente após o envio</span>\n </div>\n )\n )}\n\n {isPaused && (\n <div className=\"flex gap-2\">\n <button\n className=\"flex-1 inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border-transparent bg-emerald-500 text-white cursor-pointer hover:opacity-90\"\n onClick={() => resume({ ...(bucket !== undefined && { bucket }), video: videoOpts })}\n >\n ▶ Retomar envio\n </button>\n <button\n className=\"inline-flex items-center justify-center gap-1.5 text-sm font-bold py-2.5 px-4 rounded-xl border border-slate-200 bg-transparent text-slate-900 cursor-pointer hover:bg-slate-100\"\n onClick={() => { abort(); setPreview(null); }}\n >\n Cancelar\n </button>\n </div>\n )}\n\n {state.status === \"done\" && !renderSuccess && (\n <div className=\"flex flex-col gap-2 px-4 py-3.5 bg-green-500/[0.08] rounded-xl border border-green-500/20\">\n <div className=\"flex items-center gap-3\">\n <span className=\"text-2xl\">✅</span>\n <div className=\"flex-1\">\n <div className=\"font-bold text-sm text-green-700\">Vídeo enviado com sucesso!</div>\n <div className=\"text-[12px] text-slate-400 mt-0.5\">{formatBytes(state.result.size)}</div>\n </div>\n <button\n className=\"inline-flex items-center justify-center text-xs font-semibold py-1 px-2.5 rounded-lg border border-green-500/30 text-green-700 bg-transparent cursor-pointer hover:bg-green-500/10 shrink-0\"\n onClick={() => { reset(); setPreview(null); }}\n >\n Enviar outro\n </button>\n </div>\n <div className=\"text-[12px] text-slate-500 px-3 py-2 rounded-lg bg-green-500/[0.06] border border-green-500/15\">\n 🎬 Seu vídeo está sendo processado em segundo plano. Isso pode levar alguns minutos dependendo do tamanho.\n </div>\n </div>\n )}\n\n {state.status === \"error\" && !renderError && (\n <div className=\"flex items-center gap-3 px-4 py-3.5 bg-red-500/[0.07] rounded-xl border border-red-500/20\">\n <span className=\"text-[22px]\">⚠️</span>\n <div className=\"flex-1\">\n <div className=\"font-bold text-[13px] text-red-500\">Não foi possível enviar o vídeo</div>\n <div className=\"text-[12px] text-slate-400 mt-0.5\">{state.error.message}</div>\n </div>\n <button\n className=\"inline-flex items-center justify-center text-xs font-semibold py-1 px-2.5 rounded-lg border border-red-500/30 text-red-500 bg-transparent cursor-pointer hover:bg-red-500/10 shrink-0\"\n onClick={() => { reset(); setPreview(null); }}\n >\n Tentar novamente\n </button>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { useState, useCallback, type CSSProperties } from \"react\";\nimport { useMultipartUpload, useBatchUpload } from \"@geekapps/silo-nextjs\";\nimport type { ImageUploadOptions, VideoUploadOptions } from \"@geekapps/silo-nextjs\";\nimport type { FileUploaderProps } from \"./types.js\";\nimport { DropZone } from \"./components/DropZone.js\";\nimport { ProgressBar } from \"./components/ProgressBar.js\";\nimport { ImageOptions } from \"./components/ImageOptions.js\";\nimport { VideoOptions } from \"./components/VideoOptions.js\";\nimport { formatBytes, getFileIcon } from \"./utils/format.js\";\nimport { resolveTheme, themeToVars } from \"./utils/theme.js\";\n\nconst DEFAULT_VIDEO_OPTS: VideoUploadOptions = {\n thumbnails: true, storyboard: false, autoCaptions: false,\n separateAudio: false, codec: \"h264\", transcoding: \"auto\",\n};\n\nfunction createInitialImageOpts(image?: ImageUploadOptions): ImageUploadOptions {\n return image ?? { format: \"webp\", optimize: true };\n}\n\nfunction createInitialVideoOpts(video?: VideoUploadOptions): VideoUploadOptions {\n return video ?? DEFAULT_VIDEO_OPTS;\n}\n\nfunction uploadLabel(status: string, progress: number): string {\n if (status === \"preparing\") return \"Preparando…\";\n if (status === \"completing\") return \"Concluindo…\";\n if (progress < 30) return \"Iniciando envio…\";\n if (progress < 70) return \"Enviando…\";\n if (progress < 95) return \"Quase lá…\";\n return \"Finalizando…\";\n}\n\nexport function FileUploader({\n bucket,\n onUpload,\n onBatchUpload,\n onError,\n className = \"\",\n style,\n disabled = false,\n maxSize,\n accept,\n multiple = false,\n allowRename = false,\n showImageOptions = false,\n showVideoOptions = false,\n image,\n video,\n isPrivate,\n captionLanguages,\n chapterLanguages,\n theme,\n renderIcon,\n renderProgress,\n renderSuccess,\n renderError,\n children,\n}: FileUploaderProps) {\n const t = resolveTheme(theme);\n const vars = themeToVars(t);\n\n const containerStyle: CSSProperties = {\n ...vars as CSSProperties,\n ...style,\n };\n\n const single = useMultipartUpload(bucket);\n const batch = useBatchUpload();\n\n const [imageOpts, setImageOpts] = useState<ImageUploadOptions>(() => createInitialImageOpts(image));\n const [videoOpts, setVideoOpts] = useState<VideoUploadOptions>(() => createInitialVideoOpts(video));\n const [staged, setStaged] = useState<File[] | null>(null);\n const [renames, setRenames] = useState<Map<number, string>>(new Map());\n const [editingIndex, setEditingIndex] = useState<number | null>(null);\n\n function effectiveName(index: number, files: File[]): string {\n return renames.get(index) ?? files[index]?.name ?? \"\";\n }\n\n function setRename(index: number, name: string, files: File[]) {\n setRenames((prev) => {\n const next = new Map(prev);\n if (name.trim() && name.trim() !== files[index]?.name) next.set(index, name.trim());\n else next.delete(index);\n return next;\n });\n }\n\n function clearStaging() {\n setStaged(null);\n setRenames(new Map());\n setEditingIndex(null);\n setImageOpts(createInitialImageOpts(image));\n setVideoOpts(createInitialVideoOpts(video));\n }\n\n const doUpload = useCallback(async (files: File[], overrideImage?: ImageUploadOptions, overrideVideo?: VideoUploadOptions) => {\n const resolvedImage = overrideImage ?? imageOpts;\n const resolvedVideo = overrideVideo ?? videoOpts;\n const effectiveImage = showImageOptions ? resolvedImage : (image ?? resolvedImage);\n // When showVideoOptions is true the internal state drives the options, but\n // any extra keys on the `video` prop (e.g. enrich) must still be merged in.\n const effectiveVideo = showVideoOptions\n ? (video ? { ...resolvedVideo, ...video } : resolvedVideo)\n : (video ?? resolvedVideo);\n const videoWithLangs = (base?: VideoUploadOptions): VideoUploadOptions | undefined => {\n if (!captionLanguages?.length && !chapterLanguages?.length) return base;\n return {\n ...(base ?? {}),\n ...(captionLanguages?.length && { languages: captionLanguages }),\n ...(chapterLanguages?.length && { chapterLanguages }),\n };\n };\n\n if (multiple && files.length > 1) {\n try {\n const batchVideo = videoWithLangs(effectiveVideo);\n const results = await batch.upload(files, {\n ...(bucket !== undefined && { bucket }),\n image: effectiveImage,\n ...(batchVideo !== undefined && { video: batchVideo }),\n ...(isPrivate !== undefined && { isPrivate }),\n ...(captionLanguages?.length && { captionLanguages }),\n });\n onBatchUpload?.(results);\n results.forEach((r) => onUpload?.(r));\n } catch (err) {\n onError?.(err instanceof Error ? err : new Error(String(err)));\n }\n } else {\n const file = files[0];\n if (!file) return;\n try {\n const singleVideo = videoWithLangs(effectiveVideo);\n const result = await single.upload(file, {\n ...(bucket !== undefined && { bucket }),\n image: effectiveImage,\n ...(singleVideo !== undefined && { video: singleVideo }),\n ...(isPrivate !== undefined && { isPrivate }),\n });\n if (result) onUpload?.(result);\n } catch (err) {\n onError?.(err instanceof Error ? err : new Error(String(err)));\n }\n }\n }, [single, batch, multiple, bucket, image, video, isPrivate, captionLanguages, chapterLanguages, imageOpts, videoOpts, showImageOptions, showVideoOptions, onUpload, onBatchUpload, onError]);\n\n const handleFiles = useCallback(async (files: File[]) => {\n const needsStaging = allowRename\n || (showImageOptions && files.some((f) => f.type.startsWith(\"image/\")))\n || (showVideoOptions && files.some((f) => f.type.startsWith(\"video/\")));\n if (needsStaging) {\n setImageOpts(createInitialImageOpts(image));\n setVideoOpts(createInitialVideoOpts(video));\n setStaged(files);\n setRenames(new Map());\n }\n else await doUpload(files);\n }, [allowRename, showImageOptions, showVideoOptions, doUpload, image, video]);\n\n async function handleConfirmUpload() {\n if (!staged) return;\n const filesToUpload = staged.map((f, i) => {\n const name = effectiveName(i, staged);\n return name !== f.name ? new File([f], name, { type: f.type }) : f;\n });\n const snapshotImage = imageOpts;\n const snapshotVideo = videoOpts;\n clearStaging();\n await doUpload(filesToUpload, snapshotImage, snapshotVideo);\n }\n\n const isBatch = batch.state.files.length > 0;\n const isSingleUploading = single.state.status === \"uploading\" || single.state.status === \"preparing\" || single.state.status === \"completing\";\n const isBatchUploading = batch.state.status === \"uploading\" || batch.state.status === \"preparing\";\n const isUploading = isSingleUploading || isBatchUploading;\n const singleProgress = single.state.status === \"uploading\" ? single.state.progress : single.state.status === \"completing\" ? 99 : 0;\n\n if (single.state.status === \"error\" && renderError) return <div className=\"flex flex-col gap-3 w-full\" style={containerStyle}>{renderError(single.state.error, single.reset)}</div>;\n if (single.state.status === \"done\" && renderSuccess) return <div className=\"flex flex-col gap-3 w-full\" style={containerStyle}>{renderSuccess(single.state.result)}</div>;\n\n return (\n <div className={`flex flex-col gap-3 w-full${className ? ` ${className}` : \"\"}`} style={containerStyle}>\n\n {/* Drop zone */}\n {!isBatch && !staged && (\n <DropZone\n {...(accept !== undefined && { accept })}\n {...(maxSize !== undefined && { maxSize })}\n {...(onError !== undefined && { onError })}\n {...(theme !== undefined && { theme })}\n multiple={multiple}\n disabled={disabled || isUploading}\n onFiles={handleFiles}\n style={{ padding: \"28px 24px\", textAlign: \"center\" }}\n >\n <div className=\"flex flex-col items-center gap-2\">\n {renderIcon ? renderIcon() : (\n <svg width=\"40\" height=\"40\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" className=\"text-slate-400 opacity-50\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5m-13.5-9L12 3m0 0l4.5 4.5M12 3v13.5\" />\n </svg>\n )}\n {children ?? (\n <>\n <span style={{ color: \"var(--silo-text)\", fontWeight: 700, fontSize: 15 }}>\n {multiple ? \"Arraste seus arquivos aqui\" : \"Arraste seu arquivo aqui\"}\n </span>\n <span style={{ color: \"var(--silo-text-muted)\", fontSize: 13 }}>ou clique para escolher do seu dispositivo</span>\n {maxSize && <span style={{ color: \"var(--silo-text-muted)\", fontSize: 12 }}>Tamanho máximo: {formatBytes(maxSize)}</span>}\n </>\n )}\n </div>\n </DropZone>\n )}\n\n {/* Staging */}\n {staged && (\n <div className=\"flex flex-col gap-2\">\n <div style={{ color: \"var(--silo-text-muted)\", fontSize: 13, fontWeight: 600, marginBottom: 2 }}>\n {staged.length === 1 ? \"1 arquivo selecionado\" : `${staged.length} arquivos selecionados`}\n </div>\n\n {staged.map((f, i) => (\n <div key={i} style={{ display: \"flex\", alignItems: \"center\", gap: 10, padding: \"10px 12px\", background: \"var(--silo-bg)\", borderRadius: \"var(--silo-radius)\", border: \"1px solid var(--silo-border)\" }}>\n <span style={{ fontSize: 20, flexShrink: 0 }}>{getFileIcon(f.type)}</span>\n <div style={{ flex: 1, minWidth: 0 }}>\n {editingIndex === i ? (\n <input\n autoFocus\n type=\"text\"\n defaultValue={effectiveName(i, staged)}\n onBlur={(e) => { setRename(i, e.target.value, staged); setEditingIndex(null); }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") { setRename(i, e.currentTarget.value, staged); setEditingIndex(null); }\n if (e.key === \"Escape\") setEditingIndex(null);\n }}\n style={{ width: \"100%\", fontSize: 13, fontWeight: 500, border: \"1px solid var(--silo-accent)\", borderRadius: 6, padding: \"2px 8px\", outline: \"none\", background: \"var(--silo-bg)\", color: \"var(--silo-text)\" }}\n />\n ) : (\n <div\n style={{ fontSize: 13, fontWeight: 600, color: \"var(--silo-text)\", overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\", cursor: allowRename ? \"text\" : \"default\" }}\n onClick={() => allowRename && setEditingIndex(i)}\n title={allowRename ? \"Clique para renomear\" : undefined}\n >\n {effectiveName(i, staged)}\n {renames.has(i) && <span style={{ color: \"var(--silo-accent)\", marginLeft: 6, fontSize: 10, fontWeight: 700 }}>renomeado</span>}\n </div>\n )}\n <div style={{ fontSize: 11, color: \"var(--silo-text-muted)\", marginTop: 2 }}>{formatBytes(f.size)}</div>\n </div>\n {allowRename && (\n <button\n onClick={() => setEditingIndex(i)}\n title=\"Renomear\"\n style={{ color: \"var(--silo-text-muted)\", background: \"none\", border: \"none\", cursor: \"pointer\", fontSize: 14, padding: \"0 4px\", flexShrink: 0 }}\n >\n ✏️\n </button>\n )}\n <button\n onClick={() => { const next = staged.filter((_, j) => j !== i); if (next.length === 0) clearStaging(); else setStaged(next); }}\n style={{ color: \"var(--silo-text-muted)\", background: \"none\", border: \"none\", cursor: \"pointer\", fontSize: 18, padding: \"0 4px\", lineHeight: 1, flexShrink: 0 }}\n >\n ×\n </button>\n </div>\n ))}\n\n {showImageOptions && staged.some((f) => f.type.startsWith(\"image/\")) && (\n <div style={{ border: \"1px solid var(--silo-border)\", borderRadius: \"var(--silo-radius)\", overflow: \"hidden\" }}>\n <div style={{ padding: \"8px 14px\", background: \"var(--silo-bg-hover)\", fontSize: 12, fontWeight: 700, color: \"var(--silo-text-muted)\", letterSpacing: \"0.04em\" }}>🖼️ Configurações de imagem</div>\n <div style={{ padding: \"12px 14px\", background: \"var(--silo-bg)\" }}>\n <ImageOptions value={imageOpts} onChange={setImageOpts} />\n </div>\n </div>\n )}\n\n {showVideoOptions && staged.some((f) => f.type.startsWith(\"video/\")) && (\n <div style={{ border: \"1px solid var(--silo-border)\", borderRadius: \"var(--silo-radius)\", overflow: \"hidden\" }}>\n <div style={{ padding: \"8px 14px\", background: \"var(--silo-bg-hover)\", fontSize: 12, fontWeight: 700, color: \"var(--silo-text-muted)\", letterSpacing: \"0.04em\" }}>🎬 Configurações de vídeo</div>\n <div style={{ padding: \"12px 14px\", background: \"var(--silo-bg)\" }}>\n <VideoOptions value={videoOpts} onChange={setVideoOpts} />\n </div>\n </div>\n )}\n\n <div className=\"flex gap-2 mt-1\">\n <button\n onClick={clearStaging}\n style={{ display: \"inline-flex\", alignItems: \"center\", justifyContent: \"center\", gap: 6, fontSize: 14, fontWeight: 700, padding: \"10px 16px\", borderRadius: \"var(--silo-radius)\", border: \"1px solid var(--silo-border)\", background: \"transparent\", color: \"var(--silo-text)\", cursor: \"pointer\" }}\n >\n Cancelar\n </button>\n <button\n onClick={handleConfirmUpload}\n style={{ flex: 1, display: \"inline-flex\", alignItems: \"center\", justifyContent: \"center\", gap: 6, fontSize: 14, fontWeight: 700, padding: \"10px 16px\", borderRadius: \"var(--silo-radius)\", border: \"none\", background: \"var(--silo-accent)\", color: \"#fff\", cursor: \"pointer\" }}\n >\n {staged.length > 1 ? `Enviar ${staged.length} arquivos` : \"Enviar arquivo\"}\n </button>\n </div>\n </div>\n )}\n\n {/* Single upload progress */}\n {isSingleUploading && !isBatch && (\n renderProgress ? renderProgress(singleProgress) : (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8, padding: \"12px 16px\", background: \"var(--silo-bg)\", borderRadius: \"var(--silo-radius)\", border: \"1px solid var(--silo-border)\" }}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <span style={{ fontSize: 13, fontWeight: 600, color: \"var(--silo-text)\" }}>{uploadLabel(single.state.status, singleProgress)}</span>\n <span style={{ fontSize: 13, fontWeight: 700, color: \"var(--silo-accent)\" }}>{singleProgress}%</span>\n </div>\n <ProgressBar progress={singleProgress} />\n </div>\n )\n )}\n\n {/* Batch upload progress */}\n {isBatch && (\n <div className=\"flex flex-col gap-2\">\n {batch.state.files.map((f, i) => {\n const st = f.status;\n const p = st.status === \"uploading\" ? st.progress : st.status === \"paused\" ? st.progress : st.status === \"done\" ? 100 : st.status === \"completing\" ? 99 : 0;\n const isPaused = st.status === \"paused\";\n const isDone = st.status === \"done\";\n const isErr = st.status === \"error\";\n\n return (\n <div key={i} style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"stretch\", gap: 8, padding: \"12px 14px\", background: \"var(--silo-bg)\", borderRadius: \"var(--silo-radius)\", border: \"1px solid var(--silo-border)\" }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10 }}>\n <span style={{ fontSize: 18, flexShrink: 0 }}>{getFileIcon(f.file.type)}</span>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontSize: 13, fontWeight: 600, color: \"var(--silo-text)\", overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>{f.file.name}</div>\n <div style={{ fontSize: 11, color: \"var(--silo-text-muted)\" }}>{formatBytes(f.file.size)}</div>\n </div>\n {isDone && <span style={{ fontSize: 18, flexShrink: 0 }}>✅</span>}\n {isErr && <span style={{ fontSize: 12, fontWeight: 600, color: \"var(--silo-error)\", flexShrink: 0 }}>Erro no envio</span>}\n {!isDone && !isErr && (\n <span style={{ fontSize: 12, fontWeight: 700, flexShrink: 0, color: isPaused ? \"var(--silo-text-muted)\" : \"var(--silo-accent)\" }}>\n {isPaused ? \"Pausado\" : `${p}%`}\n </span>\n )}\n {!isDone && !isErr && f.fileId && (\n isPaused\n ? <button style={{ fontSize: 11, fontWeight: 600, padding: \"2px 10px\", borderRadius: 6, border: \"none\", background: \"#22c55e\", color: \"#fff\", cursor: \"pointer\" }} onClick={() => batch.resumeFile(f.fileId!)}>Retomar</button>\n : st.status === \"uploading\" ? <button style={{ fontSize: 11, fontWeight: 600, padding: \"2px 10px\", borderRadius: 6, border: \"1px solid var(--silo-border)\", background: \"transparent\", color: \"var(--silo-text)\", cursor: \"pointer\" }} onClick={() => batch.pauseFile(f.fileId!)}>Pausar</button> : null\n )}\n </div>\n {!isDone && !isErr && <ProgressBar progress={p} />}\n </div>\n );\n })}\n\n <div className=\"flex gap-2\">\n {batch.state.status !== \"done\" && (\n <button\n onClick={isBatchUploading ? batch.pauseAll : batch.resumeAll}\n style={{ flex: 1, display: \"inline-flex\", alignItems: \"center\", justifyContent: \"center\", gap: 6, fontSize: 14, fontWeight: 700, padding: \"10px 16px\", borderRadius: \"var(--silo-radius)\", border: \"none\", background: isBatchUploading ? \"#f59e0b\" : \"#22c55e\", color: \"#fff\", cursor: \"pointer\" }}\n >\n {isBatchUploading ? \"⏸ Pausar tudo\" : \"▶ Retomar tudo\"}\n </button>\n )}\n <button\n onClick={batch.state.status === \"done\" ? batch.reset : batch.abortAll}\n style={{ display: \"inline-flex\", alignItems: \"center\", justifyContent: \"center\", gap: 6, fontSize: 14, fontWeight: 700, padding: \"10px 16px\", borderRadius: \"var(--silo-radius)\", border: \"none\", background: batch.state.status === \"done\" ? \"var(--silo-accent)\" : \"#ef4444cc\", color: \"#fff\", cursor: \"pointer\" }}\n >\n {batch.state.status === \"done\" ? \"Enviar mais arquivos\" : \"Cancelar\"}\n </button>\n </div>\n\n {batch.state.status === \"done\" && (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10, padding: \"10px 12px\", background: \"rgba(34,197,94,0.08)\", borderRadius: \"var(--silo-radius)\", border: \"1px solid rgba(34,197,94,0.2)\" }}>\n <span style={{ fontSize: 20 }}>🎉</span>\n <span style={{ fontSize: 14, fontWeight: 600, color: \"#16a34a\" }}>\n {batch.state.files.length === 1 ? \"Arquivo enviado com sucesso!\" : `${batch.state.files.length} arquivos enviados com sucesso!`}\n </span>\n </div>\n )}\n </div>\n )}\n\n {/* Single done */}\n {single.state.status === \"done\" && !renderSuccess && (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 12, padding: \"14px 16px\", background: \"rgba(34,197,94,0.08)\", borderRadius: \"var(--silo-radius)\", border: \"1px solid rgba(34,197,94,0.2)\" }}>\n <span style={{ fontSize: 24 }}>✅</span>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontWeight: 700, fontSize: 14, color: \"#16a34a\" }}>Arquivo enviado com sucesso!</div>\n <div style={{ fontSize: 12, color: \"var(--silo-text-muted)\", marginTop: 2 }}>{formatBytes(single.state.result.size)}</div>\n </div>\n <button\n onClick={single.reset}\n style={{ display: \"inline-flex\", alignItems: \"center\", justifyContent: \"center\", fontSize: 12, fontWeight: 600, padding: \"4px 10px\", borderRadius: 6, border: \"1px solid rgba(34,197,94,0.3)\", color: \"#16a34a\", background: \"transparent\", cursor: \"pointer\", flexShrink: 0 }}\n >\n Enviar outro\n </button>\n </div>\n )}\n\n {/* Single error */}\n {single.state.status === \"error\" && !renderError && (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 12, padding: \"14px 16px\", background: \"rgba(239,68,68,0.07)\", borderRadius: \"var(--silo-radius)\", border: \"1px solid rgba(239,68,68,0.2)\" }}>\n <span style={{ fontSize: 22 }}>⚠️</span>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontWeight: 700, fontSize: 13, color: \"var(--silo-error)\" }}>Não foi possível enviar o arquivo</div>\n <div style={{ fontSize: 12, color: \"var(--silo-text-muted)\", marginTop: 2 }}>{single.state.error.message}</div>\n </div>\n <button\n onClick={single.reset}\n style={{ display: \"inline-flex\", alignItems: \"center\", justifyContent: \"center\", fontSize: 12, fontWeight: 600, padding: \"4px 10px\", borderRadius: 6, border: \"1px solid rgba(239,68,68,0.3)\", color: \"var(--silo-error)\", background: \"transparent\", cursor: \"pointer\", flexShrink: 0 }}\n >\n Tentar novamente\n </button>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { useState, type CSSProperties } from \"react\";\nimport type { MediaUploaderProps } from \"./types.js\";\nimport { ImageUploader } from \"./ImageUploader.js\";\nimport { VideoUploader } from \"./VideoUploader.js\";\nimport { FileUploader } from \"./FileUploader.js\";\nimport { resolveTheme, themeToVars } from \"./utils/theme.js\";\n\ntype Tab = \"image\" | \"video\" | \"file\";\n\nconst TAB_LABELS: Record<Tab, { label: string; icon: string }> = {\n image: { label: \"Imagem\", icon: \"🖼️\" },\n video: { label: \"Vídeo\", icon: \"🎬\" },\n file: { label: \"Arquivo\", icon: \"📎\" },\n};\n\nexport function MediaUploader({\n tabs = [\"image\", \"video\", \"file\"],\n defaultTab,\n imageProps,\n videoProps,\n fileProps,\n className = \"\",\n style,\n theme,\n onUpload,\n onBatchUpload,\n onError,\n ...shared\n}: MediaUploaderProps) {\n const [activeTab, setActiveTab] = useState<Tab>(defaultTab ?? tabs[0] ?? \"image\");\n const t = resolveTheme(theme);\n const vars = themeToVars(t);\n\n const containerStyle: CSSProperties = {\n ...vars as CSSProperties,\n ...style,\n };\n\n return (\n <div\n className={`flex flex-col w-full border border-slate-200 rounded-xl overflow-hidden bg-slate-50${className ? ` ${className}` : \"\"}`}\n style={containerStyle}\n >\n {/* Tab bar */}\n <div className=\"flex border-b border-slate-200\">\n {tabs.map((tab) => (\n <button\n key={tab}\n onClick={() => setActiveTab(tab)}\n className={`flex-1 flex items-center justify-center gap-1.5 py-2.5 px-2 bg-transparent border-none border-b-2 cursor-pointer text-[13px] transition-colors duration-150${\n activeTab === tab\n ? \"border-b-indigo-500 font-semibold text-indigo-500\"\n : \"border-b-transparent font-normal text-slate-400 hover:text-slate-600\"\n }`}\n style={{ borderBottom: `2px solid ${activeTab === tab ? \"#6366f1\" : \"transparent\"}` }}\n >\n <span>{TAB_LABELS[tab].icon}</span>\n <span>{TAB_LABELS[tab].label}</span>\n </button>\n ))}\n </div>\n\n {/* Tab content */}\n <div className=\"p-4\">\n {activeTab === \"image\" && (\n <ImageUploader\n {...shared}\n {...imageProps}\n {...(theme !== undefined && { theme })}\n {...(onUpload !== undefined && { onUpload })}\n {...(onError !== undefined && { onError })}\n />\n )}\n {activeTab === \"video\" && (\n <VideoUploader\n {...shared}\n {...videoProps}\n {...(theme !== undefined && { theme })}\n {...(onUpload !== undefined && { onUpload })}\n {...(onError !== undefined && { onError })}\n />\n )}\n {activeTab === \"file\" && (\n <FileUploader\n {...shared}\n {...fileProps}\n multiple\n {...(theme !== undefined && { theme })}\n {...(onUpload !== undefined && { onUpload })}\n {...(onBatchUpload !== undefined && { onBatchUpload })}\n {...(onError !== undefined && { onError })}\n />\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type {\n KeyboardEvent,\n PointerEvent,\n ReactElement,\n ReactNode,\n} from \"react\";\nimport gsap from \"gsap\";\nimport {\n Play,\n Pause,\n Volume2,\n VolumeX,\n Maximize,\n Minimize,\n Captions as CaptionsIcon,\n Settings,\n} from \"lucide-react\";\n\nexport type VideoSourceType = \"dash\" | \"hls\" | \"file\";\n\nexport type SourceProps = {\n id?: string;\n src: string;\n label?: string;\n type?: VideoSourceType;\n default?: boolean;\n};\n\nexport type CaptionsProps = {\n src?: string; // URL that returns JSON: Array<{ src, srclang, label, default? }>\n data?: Array<{ src: string; srclang: string; label: string; default?: boolean }>; // inline captions, bypasses fetch\n};\n\nexport type ThumbnailProps = {\n /** Single URL (legacy). Use urls for adaptive resolution. */\n src?: string;\n /** Map of width label to URL: { \"320w\": \"...\", \"640w\": \"...\", \"1280w\": \"...\", \"1920w\": \"...\" } */\n urls?: Record<string, string>;\n};\n\nexport type StoryboardFrameProps = {\n start: number;\n end: number;\n image: string;\n x?: number;\n y?: number;\n w?: number;\n h?: number;\n};\n\nexport type StoryboardResolution = {\n /** VTT content with sprite URLs already resolved (no temp S3 upload needed) */\n vttText?: string | null;\n spriteUrl: string;\n tileW: number;\n tileH: number;\n cols: number;\n rows?: number | null;\n};\n\nexport type StoryboardProps = {\n /** Legacy: single VTT URL */\n src?: string;\n fallbackImage?: string;\n width?: number;\n height?: number;\n /** Multi-resolution storyboards from post-worker: { \"180p\": {...}, \"480p\": {...} } */\n resolutions?: Record<string, StoryboardResolution>;\n children?: ReactNode;\n};\n\ntype ParsedStoryboard = Omit<StoryboardProps, \"children\"> & {\n frames: StoryboardFrameProps[];\n};\n\ntype ResolvedCaption = {\n src: string;\n srclang: string;\n label: string;\n default?: boolean;\n};\n\nexport type ChaptersProps = {\n src?: string; // URL that returns JSON: Array<{ startTime, title, endTime? }>\n data?: Array<{ startTime: number; title: string; endTime?: number }>;\n};\n\ntype ResolvedChapter = {\n startTime: number;\n title: string;\n endTime?: number;\n};\n\nexport type AgeRatingProps = {\n /** The age_ratings JSON from the file: { US: \"PG-13\", BR: \"14\", EU: \"PEGI 16\" } */\n data?: Record<string, string>;\n /** BCP-47 locale like \"en-US\", \"pt-BR\", \"de-DE\" — picks the right region key */\n locale?: string;\n /** Custom lookup for display info per region+code: { title, description, imageUrl } */\n lookup?: Record<string, { title?: string; description?: string; imageUrl?: string }>;\n};\n\nexport type RatingProps = {\n /** Aggregate counts */\n counts?: { LOVE?: number; LIKE?: number; DISLIKE?: number };\n /** Current user's reaction */\n userReaction?: \"LOVE\" | \"LIKE\" | \"DISLIKE\" | null;\n /** Called when user clicks a reaction button */\n onReact?: (reaction: \"LOVE\" | \"LIKE\" | \"DISLIKE\" | null) => void;\n};\n\ntype ParsedVideoChildren = {\n sources: SourceProps[];\n captionsSrc?: string;\n captionsData?: Array<{ src: string; srclang: string; label: string; default?: boolean }>;\n chaptersSrc?: string;\n chaptersData?: ResolvedChapter[];\n thumbnailSrc?: string;\n thumbnailUrls?: Record<string, string>;\n storyboard?: ParsedStoryboard;\n ageRating?: AgeRatingProps;\n rating?: RatingProps;\n};\n\ntype QualityOption = {\n id: string;\n label: string;\n type: \"auto\" | \"hls\" | \"dash\";\n index?: number;\n};\n\ntype VideoProps = {\n title?: string;\n description?: string;\n children: ReactNode;\n className?: string;\n autoHideControls?: boolean;\n defaultVolume?: number;\n maxHeight?: string | number;\n /** Fixed height — disables aspect-ratio so the player stays at exactly this height regardless of video dimensions */\n fixedHeight?: string | number;\n};\n\ntype WebkitVideoElement = HTMLVideoElement & {\n webkitDisplayingFullscreen?: boolean;\n webkitEnterFullscreen?: () => void;\n webkitExitFullscreen?: () => void;\n};\n\ntype FullscreenCapableElement = HTMLDivElement & {\n webkitRequestFullscreen?: () => Promise<void> | void;\n};\n\ntype FullscreenCapableDocument = Document & {\n webkitFullscreenElement?: Element | null;\n webkitExitFullscreen?: () => Promise<void> | void;\n};\n\nconst AUTO_QUALITY: QualityOption = {\n id: \"auto\",\n label: \"Auto\",\n type: \"auto\",\n};\n\nconst PLAYBACK_SPEEDS = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 2];\n\ntype SettingsTab =\n | \"root\"\n | \"quality\"\n | \"subtitles\"\n | \"subtitles-style\"\n | \"audio\"\n | \"playback\";\n\ntype SubtitleStyle = {\n track: string; // srclang or \"off\"\n size: \"small\" | \"medium\" | \"large\" | \"xlarge\";\n color: \"white\" | \"yellow\" | \"cyan\";\n bg: \"none\" | \"semi\" | \"solid\";\n};\n\nexport function Source(_props: SourceProps) {\n return null;\n}\nSource.displayName = \"SiloSource\";\n\nexport function Captions(_props: CaptionsProps) {\n return null;\n}\nCaptions.displayName = \"SiloCaptions\";\n\nexport function Chapters(_props: ChaptersProps) {\n return null;\n}\nChapters.displayName = \"SiloChapters\";\n\nexport function VideoThumbnail(_props: ThumbnailProps) {\n return null;\n}\nVideoThumbnail.displayName = \"SiloVideoThumbnail\";\n\nexport function Storyboard(_props: StoryboardProps) {\n return null;\n}\nStoryboard.displayName = \"SiloStoryboard\";\n\nexport function StoryboardFrame(_props: StoryboardFrameProps) {\n return null;\n}\nStoryboardFrame.displayName = \"SiloStoryboardFrame\";\n\nexport function AgeRating(_props: AgeRatingProps) {\n return null;\n}\nAgeRating.displayName = \"SiloAgeRating\";\n\nexport function Rating(_props: RatingProps) {\n return null;\n}\nRating.displayName = \"SiloRating\";\n\nexport function Video({\n title,\n description,\n children,\n className,\n autoHideControls = true,\n defaultVolume = 0.72,\n maxHeight,\n fixedHeight,\n}: VideoProps) {\n const parsed = useMemo(() => parseVideoChildren(children), [children]);\n\n const [captions, setCaptions] = useState<ResolvedCaption[]>([]);\n const [chapters, setChapters] = useState<ResolvedChapter[]>([]);\n const [poster, setPoster] = useState<string | undefined>(undefined);\n\n const captionsSourceRef = useRef<string>(\"\");\n\n // Resolve captions — either from inline data or by fetching src URL\n useEffect(() => {\n // Identify the caption \"source key\" — src URL or first srclang from inline data\n const sourceKey = parsed.captionsSrc ?? parsed.captionsData?.[0]?.srclang ?? \"\";\n\n function applyResolved(data: ResolvedCaption[]) {\n const resolved = data.map((c, i) => ({ ...c, default: c.default ?? i === 0 }));\n setCaptions(resolved);\n // Auto-activate only when the caption source changes (new file/language), not on every content update\n if (captionsSourceRef.current !== sourceKey) {\n captionsSourceRef.current = sourceKey;\n const defaultTrack = resolved.find((c) => c.default);\n if (defaultTrack) {\n setSubtitleMode(defaultTrack.srclang);\n setSubtitleStyle((st) => ({ ...st, track: defaultTrack.srclang }));\n }\n }\n }\n\n if (parsed.captionsData) {\n applyResolved(parsed.captionsData);\n return;\n }\n if (!parsed.captionsSrc) { setCaptions([]); return; }\n let cancelled = false;\n fetch(parsed.captionsSrc, { cache: \"no-store\" })\n .then((r) => r.json())\n .then((data: ResolvedCaption[]) => {\n if (!cancelled && Array.isArray(data)) applyResolved(data);\n })\n .catch(() => { if (!cancelled) setCaptions([]); });\n return () => { cancelled = true; };\n }, [parsed.captionsSrc, parsed.captionsData]);\n\n // Resolve chapters — either from inline data or by fetching src URL\n useEffect(() => {\n if (parsed.chaptersData) {\n setChapters(parsed.chaptersData);\n return;\n }\n if (!parsed.chaptersSrc) { setChapters([]); return; }\n let cancelled = false;\n fetch(parsed.chaptersSrc, { cache: \"no-store\" })\n .then((r) => r.json())\n .then((data: ResolvedChapter[]) => {\n if (!cancelled && Array.isArray(data)) setChapters(data);\n })\n .catch(() => { if (!cancelled) setChapters([]); });\n return () => { cancelled = true; };\n }, [parsed.chaptersSrc, parsed.chaptersData]);\n\n const initialSourceIndex = useMemo(() => {\n const index = parsed.sources.findIndex((source) => source.default);\n return index >= 0 ? index : 0;\n }, [parsed.sources]);\n\n const initialSubtitleMode = useMemo(() => {\n const track = captions.find((c) => c.default);\n return track?.srclang ?? \"off\";\n }, [captions]);\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const chromeRef = useRef<HTMLDivElement | null>(null);\n const playerRef = useRef<HTMLDivElement | null>(null);\n const showAgeRatingRef = useRef<(() => void) | null>(null);\n const videoRef = useRef<HTMLVideoElement | null>(null);\n const progressRef = useRef<HTMLDivElement | null>(null);\n\n const hlsRef = useRef<any>(null);\n const dashRef = useRef<any>(null);\n const hideTimerRef = useRef<number | null>(null);\n\n const [sourceIndex, setSourceIndex] = useState(initialSourceIndex);\n const [qualities, setQualities] = useState<QualityOption[]>([AUTO_QUALITY]);\n const [selectedQuality, setSelectedQuality] = useState(\"auto\");\n const [audioTracks, setAudioTracks] = useState<\n { id: number; label: string }[]\n >([]);\n const [selectedAudio, setSelectedAudio] = useState<number>(0);\n const [settingsOpen, setSettingsOpen] = useState(false);\n const [settingsVisible, setSettingsVisible] = useState(false);\n\n const [settingsTab, setSettingsTab] = useState<SettingsTab>(\"root\");\n const [playbackRate, setPlaybackRate] = useState(1);\n const [subtitleStyle, setSubtitleStyle] = useState<SubtitleStyle>({\n track: initialSubtitleMode,\n size: \"medium\",\n color: \"white\",\n bg: \"semi\",\n });\n\n const [subtitleMode, setSubtitleMode] = useState(initialSubtitleMode);\n const [activeCue, setActiveCue] = useState<string | null>(null);\n const [storyboardSheetSize, setStoryboardSheetSize] = useState<{ w: number; h: number } | null>(null);\n const storyboardSheetUrlRef = useRef<string>(\"\");\n\n const [storyboardCues, setStoryboardCues] = useState<StoryboardFrameProps[]>([]);\n // Multi-resolution storyboard state — loaded cues per resolution key\n const storyboardCacheRef = useRef<Map<string, StoryboardFrameProps[]>>(new Map());\n // Which resolution is currently active for preview\n const [activeStoryboardRes, setActiveStoryboardRes] = useState<string | null>(null);\n // Preloaded sprite images (by URL) so they don't flash on first hover\n const preloadedSpritesRef = useRef<Set<string>>(new Set());\n\n // Rating state — internal so clicks don't re-render the parent and restart the video\n const [ratingCounts, setRatingCounts] = useState<{ LOVE: number; LIKE: number; DISLIKE: number }>(\n () => ({ LOVE: parsed.rating?.counts?.LOVE ?? 0, LIKE: parsed.rating?.counts?.LIKE ?? 0, DISLIKE: parsed.rating?.counts?.DISLIKE ?? 0 })\n );\n const [userReaction, setUserReaction] = useState<\"LOVE\" | \"LIKE\" | \"DISLIKE\" | null>(parsed.rating?.userReaction ?? null);\n const userReactionRef = useRef(userReaction);\n userReactionRef.current = userReaction;\n // Sync counts/userReaction when parent provides them for the first time (async load)\n const ratingInitializedRef = useRef(false);\n const incomingCounts = parsed.rating?.counts;\n const incomingUserReaction = parsed.rating?.userReaction;\n useEffect(() => {\n if (ratingInitializedRef.current) return;\n if (!incomingCounts && incomingUserReaction === undefined) return;\n ratingInitializedRef.current = true;\n if (incomingCounts) {\n setRatingCounts({ LOVE: incomingCounts.LOVE ?? 0, LIKE: incomingCounts.LIKE ?? 0, DISLIKE: incomingCounts.DISLIKE ?? 0 });\n }\n if (incomingUserReaction !== undefined) {\n setUserReaction(incomingUserReaction ?? null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [incomingCounts?.LOVE, incomingCounts?.LIKE, incomingCounts?.DISLIKE, incomingUserReaction]);\n // Keep a stable ref to the latest onReact callback so we don't need it in deps\n const onReactRef = useRef<RatingProps[\"onReact\"]>(parsed.rating?.onReact);\n onReactRef.current = parsed.rating?.onReact;\n\n const [preview, setPreview] = useState<{\n cue: StoryboardFrameProps;\n left: number;\n time: number;\n } | null>(null);\n\n const [duration, setDuration] = useState(0);\n const [currentTime, setCurrentTime] = useState(0);\n const [bufferedTime, setBufferedTime] = useState(0);\n\n const [isDragging, setIsDragging] = useState(false);\n const [isHoveringProgress, setIsHoveringProgress] = useState(false);\n const dragPointerIdRef = useRef<number | null>(null);\n const [isPlaying, setIsPlaying] = useState(false);\n const [hasPlayed, setHasPlayed] = useState(false);\n const ageRatingTlRef = useRef<gsap.core.Timeline | null>(null);\n const ageRatingPauseTimerRef = useRef<number | null>(null);\n const ageRatingWrapRef = useRef<HTMLDivElement | null>(null);\n const ageRatingIconRef = useRef<HTMLDivElement | null>(null);\n const ageRatingTextRef = useRef<HTMLDivElement | null>(null);\n const [clickIcon, setClickIcon] = useState<\"play\" | \"pause\" | null>(null);\n const clickIconTimerRef = useRef<number | null>(null);\n const clickIconRef = useRef<HTMLDivElement | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [controlsVisible, setControlsVisible] = useState(true);\n const settingsPanelRef = useRef<HTMLDivElement | null>(null);\n const settingsContentRef = useRef<HTMLDivElement | null>(null);\n const progressTrackRef = useRef<HTMLDivElement | null>(null);\n const progressThumbRef = useRef<HTMLDivElement | null>(null);\n const [volume, setVolume] = useState(defaultVolume);\n const [isMuted, setIsMuted] = useState(false);\n const [isFullscreen, setIsFullscreen] = useState(false);\n const [playerHeight, setPlayerHeight] = useState(0);\n const [playerWidth, setPlayerWidth] = useState(0);\n\n // Thumbnail: pick best available URL based on player width and network quality\n useEffect(() => {\n const urls = parsed.thumbnailUrls;\n if (!urls || Object.keys(urls).length === 0) {\n setPoster(parsed.thumbnailSrc ?? undefined);\n return;\n }\n const sorted = Object.entries(urls)\n .map(([label, url]) => ({ px: parseInt(label.replace(\"w\", \"\"), 10) || 0, url }))\n .filter((e) => e.px > 0)\n .sort((a, b) => a.px - b.px);\n if (sorted.length === 0) { setPoster(parsed.thumbnailSrc ?? undefined); return; }\n const dpr = typeof window !== \"undefined\" ? window.devicePixelRatio ?? 1 : 1;\n const conn = typeof navigator !== \"undefined\" ? (navigator as any).connection : null;\n const connFactor = conn?.effectiveType === \"4g\" ? 1 : conn?.effectiveType === \"3g\" ? 0.5 : 0.25;\n const targetPx = (playerWidth || 640) * dpr * (conn ? connFactor : 1);\n const best = sorted.find((e) => e.px >= targetPx) ?? sorted[sorted.length - 1]!;\n setPoster(best.url);\n }, [parsed.thumbnailUrls, parsed.thumbnailSrc, playerWidth]);\n\n const activeSource = parsed.sources[sourceIndex] ?? parsed.sources[0] ?? null;\n\n const progressPercent = duration ? (currentTime / duration) * 100 : 0;\n const bufferedPercent = duration ? (bufferedTime / duration) * 100 : 0;\n\n const destroyMediaEngines = useCallback(() => {\n if (hlsRef.current) {\n hlsRef.current.destroy();\n hlsRef.current = null;\n }\n\n if (dashRef.current) {\n dashRef.current.reset();\n dashRef.current = null;\n }\n }, []);\n\n const applySubtitleMode = useCallback((mode: string) => {\n const video = videoRef.current;\n if (!video) return;\n\n // Use \"hidden\" instead of \"showing\" — we render cues ourselves for full style control\n let activeTrack: TextTrack | null = null;\n Array.from(video.textTracks).forEach((track) => {\n if (track.kind === \"metadata\") return; // don't touch metadata tracks (storyboard)\n const enabled = mode !== \"off\" && track.language === mode;\n track.mode = enabled ? \"hidden\" : \"disabled\";\n if (enabled) activeTrack = track;\n });\n // Always clear the previous track's cue when switching. Disabling a track\n // stops its \"cuechange\" from firing, so the old caption would otherwise stay\n // frozen on screen. Then seed the new track's current cue immediately so the\n // switch shows the right caption without waiting for the next cue boundary.\n if (!activeTrack) {\n setActiveCue(null);\n return;\n }\n const cues = (activeTrack as TextTrack).activeCues;\n const cue = cues && cues.length > 0 ? (cues[0] as VTTCue) : null;\n setActiveCue(cue ? cue.text.replace(/<[^>]*>/g, \"\") : null);\n }, []);\n\n const showControlsTemporarily = useCallback(() => {\n setControlsVisible(true);\n\n if (hideTimerRef.current) {\n window.clearTimeout(hideTimerRef.current);\n }\n\n const video = videoRef.current;\n\n if (autoHideControls && video && !video.paused) {\n hideTimerRef.current = window.setTimeout(() => {\n setControlsVisible(false);\n }, 2400);\n }\n\n // when paused, show age rating on interaction (mouse move / touch / focus)\n if (video?.paused) {\n showAgeRatingRef.current?.();\n }\n }, [autoHideControls]);\n\n useEffect(() => {\n if (!containerRef.current) return;\n\n gsap.fromTo(\n containerRef.current,\n {\n opacity: 0,\n y: 36,\n scale: 0.985,\n filter: \"blur(10px)\",\n },\n {\n opacity: 1,\n y: 0,\n scale: 1,\n filter: \"blur(0px)\",\n duration: 0.85,\n ease: \"power3.out\",\n },\n );\n }, []);\n\n // settingsOpen = mounted in DOM; settingsVisible = used only to trigger GSAP (open/close driven imperatively)\n const openSettings = useCallback(() => {\n setSettingsOpen(true);\n setSettingsTab(\"root\");\n setSettingsVisible(true);\n }, []);\n\n const closeSettings = useCallback(() => {\n const panel = settingsPanelRef.current;\n if (panel) {\n gsap.killTweensOf(panel);\n gsap.to(panel, {\n opacity: 0,\n y: 8,\n scale: 0.97,\n duration: 0.18,\n ease: \"power2.in\",\n onComplete: () => {\n setSettingsOpen(false);\n setSettingsVisible(false);\n },\n });\n } else {\n setSettingsOpen(false);\n setSettingsVisible(false);\n }\n }, []);\n\n // GSAP: animate settings panel open\n useEffect(() => {\n if (!settingsOpen) return;\n const panel = settingsPanelRef.current;\n if (!panel) return;\n gsap.killTweensOf(panel);\n gsap.fromTo(\n panel,\n { opacity: 0, y: 8, scale: 0.97 },\n { opacity: 1, y: 0, scale: 1, duration: 0.2, ease: \"power2.out\" },\n );\n }, [settingsOpen]);\n\n // GSAP: animate settings sub-menu slide-in on tab change\n useEffect(() => {\n const el = settingsContentRef.current;\n if (!el) return;\n gsap.killTweensOf(el);\n gsap.fromTo(\n el,\n { opacity: 0, x: 12 },\n { opacity: 1, x: 0, duration: 0.18, ease: \"power2.out\" },\n );\n }, [settingsTab]);\n\n // GSAP: controls chrome fade + cursor hide when controls hidden while playing\n useEffect(() => {\n const el = chromeRef.current;\n const player = playerRef.current;\n if (!el) return;\n gsap.killTweensOf(el);\n gsap.to(el, {\n opacity: controlsVisible ? 1 : 0,\n duration: 0.2,\n ease: \"power1.inOut\",\n });\n el.style.pointerEvents = controlsVisible ? \"\" : \"none\";\n if (player) {\n player.style.cursor = controlsVisible ? \"\" : \"none\";\n }\n }, [controlsVisible]);\n\n // GSAP: click icon fade\n useEffect(() => {\n const el = clickIconRef.current;\n if (!el) return;\n gsap.killTweensOf(el);\n if (clickIcon) {\n gsap.to(el, { opacity: 1, duration: 0.08, ease: \"power1.in\" });\n } else {\n gsap.to(el, { opacity: 0, duration: 0.45, ease: \"power1.out\" });\n }\n }, [clickIcon]);\n\n // GSAP: progress bar track + thumb + chapter markers on hover/drag state\n useEffect(() => {\n const track = progressTrackRef.current;\n const thumb = progressThumbRef.current;\n const container = progressRef.current;\n const targetH = isDragging ? 7 : isHoveringProgress ? 5 : 3;\n const targetW = isDragging ? 18 : isHoveringProgress ? 14 : 10;\n if (track) {\n gsap.killTweensOf(track);\n gsap.to(track, { height: targetH, duration: 0.15, ease: \"power1.inOut\" });\n }\n if (thumb) {\n gsap.killTweensOf(thumb);\n gsap.to(thumb, { width: targetW, height: targetW, duration: 0.2, ease: \"back.out(1.7)\" });\n }\n if (container) {\n const markers = container.querySelectorAll(\"[data-chapter-marker]\");\n markers.forEach((el) => {\n gsap.killTweensOf(el);\n gsap.to(el, { height: targetH, duration: 0.15, ease: \"power1.inOut\" });\n });\n }\n }, [isDragging, isHoveringProgress]);\n\n // controls visibility handled via GSAP effect above\n\n useEffect(() => {\n if (sourceIndex >= parsed.sources.length) {\n setSourceIndex(initialSourceIndex);\n }\n }, [sourceIndex, parsed.sources.length, initialSourceIndex]);\n\n useEffect(() => {\n if (\n subtitleMode !== \"off\" &&\n !captions.some((subtitle) => subtitle.srclang === subtitleMode)\n ) {\n setSubtitleMode(initialSubtitleMode);\n }\n }, [subtitleMode, captions, initialSubtitleMode]);\n\n\n useEffect(() => {\n const video = videoRef.current;\n if (!video) return;\n\n const syncTime = () => {\n setCurrentTime(video.currentTime || 0);\n\n if (video.buffered.length > 0) {\n setBufferedTime(video.buffered.end(video.buffered.length - 1));\n }\n };\n\n const syncDuration = () => {\n setDuration(Number.isFinite(video.duration) ? video.duration : 0);\n applySubtitleMode(subtitleMode);\n };\n\n const hideAgeRating = () => {\n const wrap = ageRatingWrapRef.current;\n if (!wrap) return;\n if (ageRatingTlRef.current) ageRatingTlRef.current.kill();\n gsap.to(wrap, { opacity: 0, duration: 0.4, ease: \"power2.inOut\" });\n };\n\n const showAgeRating = () => {\n if (!parsed.ageRating?.data) return;\n const wrap = ageRatingWrapRef.current;\n const icon = ageRatingIconRef.current;\n const text = ageRatingTextRef.current;\n if (!wrap) return;\n\n if (ageRatingTlRef.current) ageRatingTlRef.current.kill();\n\n const HOLD = 12;\n const tl = gsap.timeline({ delay: 0.6 });\n\n // gradient bg fade in\n tl.fromTo(wrap, { opacity: 0 }, { opacity: 1, duration: 0.5, ease: \"power2.out\" });\n\n // icon pop with elastic overshoot\n if (icon) {\n tl.fromTo(\n icon,\n { opacity: 0, scale: 0.7 },\n { opacity: 1, scale: 1, duration: 0.55, ease: \"back.out(1.6)\" },\n \"-=0.2\",\n );\n }\n\n // text slides in from left\n if (text) {\n tl.fromTo(\n text,\n { opacity: 0, x: -10 },\n { opacity: 1, x: 0, duration: 0.4, ease: \"power2.out\" },\n \"-=0.25\",\n );\n }\n\n // hold then fade everything out\n tl.to({}, { duration: HOLD });\n tl.to(wrap, { opacity: 0, duration: 0.7, ease: \"power2.inOut\" });\n\n ageRatingTlRef.current = tl;\n };\n\n showAgeRatingRef.current = showAgeRating;\n\n const onPlay = () => {\n setIsPlaying(true);\n if (ageRatingPauseTimerRef.current) {\n window.clearTimeout(ageRatingPauseTimerRef.current);\n ageRatingPauseTimerRef.current = null;\n }\n setHasPlayed((prev) => {\n if (!prev) showAgeRating();\n return true;\n });\n showControlsTemporarily();\n };\n\n const onPause = () => {\n setIsPlaying(false);\n setControlsVisible(true);\n hideAgeRating();\n if (parsed.ageRating?.data) {\n if (ageRatingPauseTimerRef.current) window.clearTimeout(ageRatingPauseTimerRef.current);\n ageRatingPauseTimerRef.current = window.setTimeout(() => {\n showAgeRating();\n ageRatingPauseTimerRef.current = null;\n }, 60 * 1000);\n }\n };\n\n const onWaiting = () => setIsLoading(true);\n const onCanPlay = () => setIsLoading(false);\n const onEnded = () => setControlsVisible(true);\n\n video.addEventListener(\"timeupdate\", syncTime);\n video.addEventListener(\"progress\", syncTime);\n video.addEventListener(\"loadedmetadata\", syncDuration);\n video.addEventListener(\"durationchange\", syncDuration);\n video.addEventListener(\"play\", onPlay);\n video.addEventListener(\"pause\", onPause);\n video.addEventListener(\"waiting\", onWaiting);\n video.addEventListener(\"canplay\", onCanPlay);\n video.addEventListener(\"ended\", onEnded);\n\n return () => {\n video.removeEventListener(\"timeupdate\", syncTime);\n video.removeEventListener(\"progress\", syncTime);\n video.removeEventListener(\"loadedmetadata\", syncDuration);\n video.removeEventListener(\"durationchange\", syncDuration);\n video.removeEventListener(\"play\", onPlay);\n video.removeEventListener(\"pause\", onPause);\n video.removeEventListener(\"waiting\", onWaiting);\n video.removeEventListener(\"canplay\", onCanPlay);\n video.removeEventListener(\"ended\", onEnded);\n if (ageRatingTlRef.current) ageRatingTlRef.current.kill();\n if (ageRatingPauseTimerRef.current) window.clearTimeout(ageRatingPauseTimerRef.current);\n };\n }, [applySubtitleMode, subtitleMode, showControlsTemporarily]);\n\n useEffect(() => {\n const video = videoRef.current;\n if (!video) return;\n\n video.volume = volume;\n video.muted = isMuted || volume === 0;\n }, [volume, isMuted]);\n\n useEffect(() => {\n applySubtitleMode(subtitleMode);\n if (subtitleMode === \"off\") setActiveCue(null);\n }, [subtitleMode, applySubtitleMode]);\n\n // Apply playback rate\n useEffect(() => {\n const video = videoRef.current;\n if (!video) return;\n video.playbackRate = playbackRate;\n }, [playbackRate]);\n\n // Read active cue from native track and expose it for custom rendering\n const subtitleModeRef = useRef(subtitleMode);\n useEffect(() => {\n subtitleModeRef.current = subtitleMode;\n }, [subtitleMode]);\n\n useEffect(() => {\n const video = videoRef.current;\n if (!video) return;\n\n const onCueChange = () => {\n const mode = subtitleModeRef.current;\n if (mode === \"off\") {\n setActiveCue(null);\n return;\n }\n const track = Array.from(video.textTracks).find(\n (t) => t.language === mode && t.kind !== \"metadata\",\n );\n if (!track || !track.activeCues || track.activeCues.length === 0) {\n setActiveCue(null);\n return;\n }\n const cue = track.activeCues[0] as VTTCue;\n setActiveCue(cue.text.replace(/<[^>]*>/g, \"\"));\n };\n\n const bindTracks = () => {\n Array.from(video.textTracks).forEach((t) => {\n if (t.kind === \"metadata\") return;\n t.removeEventListener(\"cuechange\", onCueChange);\n t.addEventListener(\"cuechange\", onCueChange);\n });\n applySubtitleMode(subtitleModeRef.current);\n };\n\n bindTracks();\n video.textTracks.addEventListener(\"addtrack\", bindTracks);\n return () => {\n video.textTracks.removeEventListener(\"addtrack\", bindTracks);\n Array.from(video.textTracks).forEach((t) =>\n t.removeEventListener(\"cuechange\", onCueChange),\n );\n };\n }, []);\n\n useEffect(() => {\n const video = videoRef.current as WebkitVideoElement | null;\n\n const onFullscreenChange = () => {\n const doc = document as FullscreenCapableDocument;\n const nativeFullscreen = Boolean(\n document.fullscreenElement || doc.webkitFullscreenElement,\n );\n const iosVideoFullscreen = Boolean(video?.webkitDisplayingFullscreen);\n setIsFullscreen(nativeFullscreen || iosVideoFullscreen);\n };\n\n document.addEventListener(\"fullscreenchange\", onFullscreenChange);\n document.addEventListener(\n \"webkitfullscreenchange\",\n onFullscreenChange as EventListener,\n );\n video?.addEventListener(\n \"webkitbeginfullscreen\",\n onFullscreenChange as EventListener,\n );\n video?.addEventListener(\n \"webkitendfullscreen\",\n onFullscreenChange as EventListener,\n );\n\n return () => {\n document.removeEventListener(\"fullscreenchange\", onFullscreenChange);\n document.removeEventListener(\n \"webkitfullscreenchange\",\n onFullscreenChange as EventListener,\n );\n video?.removeEventListener(\n \"webkitbeginfullscreen\",\n onFullscreenChange as EventListener,\n );\n video?.removeEventListener(\n \"webkitendfullscreen\",\n onFullscreenChange as EventListener,\n );\n };\n }, []);\n\n useEffect(() => {\n const player = playerRef.current;\n if (!player) return;\n const ro = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n setPlayerHeight(entry.contentRect.height);\n setPlayerWidth(entry.contentRect.width);\n }\n });\n ro.observe(player);\n return () => ro.disconnect();\n }, []);\n\n // Storyboard loading — supports both legacy single VTT and multi-resolution\n useEffect(() => {\n let cancelled = false;\n\n async function loadStoryboard() {\n if (!parsed.storyboard) { setStoryboardCues([]); setActiveStoryboardRes(null); return; }\n\n // Inline frames take priority\n if (parsed.storyboard.frames.length > 0) {\n setStoryboardCues(parsed.storyboard.frames);\n return;\n }\n\n // Multi-resolution path: load lowest resolution immediately\n const resolutions = parsed.storyboard.resolutions;\n if (resolutions && Object.keys(resolutions).length > 0) {\n storyboardCacheRef.current.clear();\n preloadedSpritesRef.current.clear();\n\n // Resolution priority: lowest first for initial load\n const RES_ORDER = [\"180p\", \"240p\", \"360p\", \"480p\", \"default\"];\n const keys = Object.keys(resolutions).sort((a, b) => {\n const ai = RES_ORDER.indexOf(a); const bi = RES_ORDER.indexOf(b);\n return (ai === -1 ? 99 : ai) - (bi === -1 ? 99 : bi);\n });\n\n // Load each resolution and cache it\n const loadRes = async (key: string) => {\n if (cancelled) return;\n const res = resolutions[key];\n if (!res) return;\n let cues: StoryboardFrameProps[] = [];\n if (res.vttText) {\n cues = parseStoryboardVtt(res.vttText, res.spriteUrl);\n } else {\n // Fallback: single-image cue spanning entire video\n cues = [{ start: 0, end: Number.MAX_SAFE_INTEGER, image: res.spriteUrl, w: res.tileW, h: res.tileH }];\n }\n storyboardCacheRef.current.set(key, cues);\n // Preload sprite image\n if (!preloadedSpritesRef.current.has(res.spriteUrl)) {\n preloadedSpritesRef.current.add(res.spriteUrl);\n const img = new window.Image();\n img.src = res.spriteUrl;\n }\n return cues;\n };\n\n // Load lowest res immediately, show it\n const firstKey = keys[0]!;\n const firstCues = await loadRes(firstKey);\n if (!cancelled && firstCues) {\n setStoryboardCues(firstCues);\n setActiveStoryboardRes(firstKey);\n }\n\n // Load remaining resolutions in background\n for (const key of keys.slice(1)) {\n await loadRes(key);\n }\n return;\n }\n\n // Legacy single VTT src\n if (!parsed.storyboard.src) {\n setStoryboardCues([]);\n return;\n }\n try {\n const response = await fetch(parsed.storyboard.src);\n if (!response.ok) throw new Error(\"Storyboard not found\");\n const text = await response.text();\n const cues = parseStoryboardVtt(text, new URL(parsed.storyboard.src, window.location.href).href);\n if (!cancelled) setStoryboardCues(cues);\n } catch {\n if (!cancelled && parsed.storyboard.fallbackImage) {\n setStoryboardCues([{\n start: 0, end: Number.MAX_SAFE_INTEGER,\n image: parsed.storyboard.fallbackImage,\n w: parsed.storyboard.width ?? 160, h: parsed.storyboard.height ?? 90,\n }]);\n }\n }\n }\n\n loadStoryboard();\n return () => { cancelled = true; };\n }, [parsed.storyboard]);\n\n useEffect(() => {\n const video = videoRef.current;\n let cancelled = false;\n\n if (!video || !activeSource) {\n setIsLoading(false);\n return;\n }\n\n destroyMediaEngines();\n\n setIsLoading(true);\n setCurrentTime(0);\n setBufferedTime(0);\n setDuration(0);\n setSelectedQuality(\"auto\");\n setQualities([AUTO_QUALITY]);\n setAudioTracks([]);\n setSelectedAudio(0);\n closeSettings();\n\n video.pause();\n video.removeAttribute(\"src\");\n video.load();\n\n const sourceType = inferSourceType(activeSource);\n\n if (sourceType === \"dash\") {\n void (async () => {\n try {\n const dashModule = await import(\"dashjs\");\n if (cancelled) return;\n\n const dashjs = dashModule as any;\n const dash = dashjs.MediaPlayer().create();\n dashRef.current = dash;\n\n dash.updateSettings({\n streaming: {\n abr: {\n autoSwitchBitrate: {\n video: true,\n },\n },\n },\n });\n\n dash.on(dashjs.MediaPlayer.events.STREAM_INITIALIZED, () => {\n const bitrates = dash.getBitrateInfoListFor(\"video\") ?? [];\n\n setQualities([\n AUTO_QUALITY,\n ...bitrates.map((item: any, index: number) => ({\n id: `dash-${index}`,\n label: item.height\n ? `${item.height}p`\n : `${Math.round((item.bitrate ?? 0) / 1000)} kbps`,\n type: \"dash\" as const,\n index,\n })),\n ]);\n\n setIsLoading(false);\n });\n\n dash.on(dashjs.MediaPlayer.events.ERROR, () => {\n console.error(\"[Silo] MPEG-DASH playback failed\");\n setIsLoading(false);\n });\n\n dash.initialize(video, activeSource.src, false);\n } catch {\n if (!cancelled) {\n console.error(\"[Silo] MPEG-DASH player load failed\");\n setIsLoading(false);\n }\n }\n })();\n\n return () => {\n cancelled = true;\n destroyMediaEngines();\n };\n }\n\n if (sourceType === \"hls\") {\n void (async () => {\n try {\n const HlsModule = await import(\"hls.js\");\n if (cancelled) return;\n\n const Hls = HlsModule.default;\n\n if (Hls.isSupported()) {\n const hls = new Hls({\n enableWorker: true,\n maxBufferLength: 10,\n maxMaxBufferLength: 20,\n maxBufferSize: 20 * 1000 * 1000,\n });\n\n hlsRef.current = hls;\n\n hls.loadSource(activeSource.src);\n hls.attachMedia(video);\n\n hls.on(Hls.Events.MANIFEST_PARSED, (_: any, data: any) => {\n const levels = data.levels ?? hls.levels ?? [];\n setQualities([\n AUTO_QUALITY,\n ...levels.map((level: any, index: number) => ({\n id: `hls-${index}`,\n label:\n level.name ??\n (level.height ? `${level.height}p` : `${index + 1}`),\n type: \"hls\" as const,\n index,\n })),\n ]);\n\n const tracks: any[] = hls.audioTracks ?? [];\n if (tracks.length > 1) {\n setAudioTracks(\n tracks.map((t: any, i: number) => ({\n id: i,\n label: t.name ?? t.lang ?? `Track ${i + 1}`,\n })),\n );\n setSelectedAudio(hls.audioTrack ?? 0);\n }\n\n setIsLoading(false);\n });\n\n hls.on(Hls.Events.AUDIO_TRACKS_UPDATED, (_: any, data: any) => {\n const tracks: any[] = data.audioTracks ?? [];\n if (tracks.length > 1) {\n setAudioTracks(\n tracks.map((t: any, i: number) => ({\n id: i,\n label: t.name ?? t.lang ?? `Track ${i + 1}`,\n })),\n );\n }\n });\n\n hls.on(Hls.Events.ERROR, (_: any, data: any) => {\n if (!data.fatal) return;\n\n if (data.type === Hls.ErrorTypes.MEDIA_ERROR) {\n hls.recoverMediaError();\n return;\n }\n\n console.error(\"[Silo] HLS playback failed\");\n setIsLoading(false);\n });\n\n return;\n }\n\n if (video.canPlayType(\"application/vnd.apple.mpegurl\")) {\n video.src = activeSource.src;\n video.load();\n setIsLoading(false);\n return;\n }\n\n console.error(\"[Silo] HLS not supported in this browser\");\n setIsLoading(false);\n } catch {\n if (!cancelled) {\n console.error(\"[Silo] HLS player load failed\");\n setIsLoading(false);\n }\n }\n })();\n\n return () => {\n cancelled = true;\n destroyMediaEngines();\n };\n }\n\n video.src = activeSource.src;\n video.load();\n setIsLoading(false);\n\n return () => {\n cancelled = true;\n video.removeAttribute(\"src\");\n video.load();\n };\n }, [activeSource, destroyMediaEngines]);\n\n const togglePlay = useCallback(async () => {\n const video = videoRef.current;\n if (!video) return;\n\n const wasPaused = video.paused;\n\n try {\n if (wasPaused) {\n // Wait for enough data if the browser isn't ready (e.g. after a seek)\n if (video.readyState < HTMLMediaElement.HAVE_FUTURE_DATA) {\n await new Promise<void>((resolve) => {\n const onReady = () => { video.removeEventListener(\"canplay\", onReady); resolve(); };\n video.addEventListener(\"canplay\", onReady);\n });\n }\n await video.play();\n } else {\n video.pause();\n }\n if (clickIconTimerRef.current)\n window.clearTimeout(clickIconTimerRef.current);\n setClickIcon(wasPaused ? \"play\" : \"pause\");\n clickIconTimerRef.current = window.setTimeout(\n () => setClickIcon(null),\n 600,\n );\n } catch {\n // Autoplay policy or seek-in-progress — silently ignore\n }\n }, []);\n\n const seekRelative = useCallback((seconds: number) => {\n const video = videoRef.current;\n if (!video) return;\n\n video.currentTime = Math.max(\n 0,\n Math.min(video.currentTime + seconds, video.duration || 0),\n );\n }, []);\n\n const toggleFullscreen = useCallback(async () => {\n const player = playerRef.current as FullscreenCapableElement | null;\n const video = videoRef.current as WebkitVideoElement | null;\n const doc = document as FullscreenCapableDocument;\n\n if (!player && !video) return;\n\n try {\n const nativeFullscreen = Boolean(\n document.fullscreenElement || doc.webkitFullscreenElement,\n );\n const iosVideoFullscreen = Boolean(video?.webkitDisplayingFullscreen);\n\n if (nativeFullscreen || iosVideoFullscreen) {\n if (document.fullscreenElement && document.exitFullscreen) {\n await document.exitFullscreen();\n return;\n }\n\n if (doc.webkitExitFullscreen) {\n await doc.webkitExitFullscreen();\n return;\n }\n\n if (video?.webkitExitFullscreen) {\n video.webkitExitFullscreen();\n return;\n }\n\n return;\n }\n\n if (player?.requestFullscreen) {\n await player.requestFullscreen();\n return;\n }\n\n if (player?.webkitRequestFullscreen) {\n await player.webkitRequestFullscreen();\n return;\n }\n\n if (video?.webkitEnterFullscreen) {\n video.webkitEnterFullscreen();\n return;\n }\n\n if (video?.requestFullscreen) {\n await video.requestFullscreen();\n return;\n }\n\n throw new Error(\"Fullscreen unavailable\");\n } catch {\n console.error(\"[Silo] Fullscreen toggle failed\");\n }\n }, []);\n\n const changeAudio = useCallback((trackId: number) => {\n setSelectedAudio(trackId);\n closeSettings();\n if (hlsRef.current) {\n hlsRef.current.audioTrack = trackId;\n }\n }, [closeSettings]);\n\n const changeQuality = useCallback(\n (qualityId: string) => {\n const option = qualities.find((quality) => quality.id === qualityId);\n if (!option) return;\n\n setSelectedQuality(qualityId);\n closeSettings();\n\n if (option.type === \"auto\") {\n if (hlsRef.current) {\n hlsRef.current.currentLevel = -1;\n }\n\n if (dashRef.current) {\n dashRef.current.updateSettings({\n streaming: {\n abr: {\n autoSwitchBitrate: {\n video: true,\n },\n },\n },\n });\n }\n\n return;\n }\n\n if (option.type === \"hls\" && hlsRef.current && option.index != null) {\n hlsRef.current.currentLevel = option.index;\n return;\n }\n\n if (option.type === \"dash\" && dashRef.current && option.index != null) {\n dashRef.current.updateSettings({\n streaming: {\n abr: {\n autoSwitchBitrate: {\n video: false,\n },\n },\n },\n });\n\n dashRef.current.setQualityFor(\"video\", option.index);\n }\n },\n [qualities, closeSettings],\n );\n\n const seekFromPointer = useCallback(\n (clientX: number) => {\n const video = videoRef.current;\n const progress = progressRef.current;\n if (!video || !progress || !duration) return;\n const rect = progress.getBoundingClientRect();\n const x = Math.max(0, Math.min(clientX - rect.left, rect.width));\n const nextTime = (x / rect.width) * duration;\n video.currentTime = nextTime;\n setCurrentTime(nextTime);\n },\n [duration],\n );\n\n // Adaptive storyboard resolution — upgrade to highest loaded res when hovering progress bar\n const upgradeStoryboardResolution = useCallback((hoverTime: number) => {\n const resolutions = parsed.storyboard?.resolutions;\n if (!resolutions || storyboardCacheRef.current.size === 0) return;\n\n const RES_ORDER = [\"480p\", \"360p\", \"240p\", \"180p\", \"default\"];\n const conn = typeof navigator !== \"undefined\" ? (navigator as any).connection : null;\n // On slow connections cap at 240p for mouse hover\n const maxRes = conn?.effectiveType === \"2g\" ? \"180p\" : conn?.effectiveType === \"3g\" ? \"240p\" : \"480p\";\n const maxIdx = RES_ORDER.indexOf(maxRes);\n\n for (let i = 0; i <= maxIdx; i++) {\n const key = RES_ORDER[i]!;\n if (storyboardCacheRef.current.has(key)) {\n if (activeStoryboardRes !== key) {\n setStoryboardCues(storyboardCacheRef.current.get(key)!);\n setActiveStoryboardRes(key);\n // Preload sprite image at new resolution\n const spriteUrl = resolutions[key]?.spriteUrl;\n if (spriteUrl && !preloadedSpritesRef.current.has(spriteUrl)) {\n preloadedSpritesRef.current.add(spriteUrl);\n const img = new window.Image();\n img.src = spriteUrl;\n }\n }\n break;\n }\n }\n\n // Preload sprites around hover time for the best available resolution\n const bestKey = [...storyboardCacheRef.current.keys()].sort((a, b) => {\n const order = [\"480p\", \"360p\", \"240p\", \"180p\", \"default\"];\n return order.indexOf(a) - order.indexOf(b);\n })[0];\n if (bestKey) {\n const cues = storyboardCacheRef.current.get(bestKey) ?? [];\n // Find 3 cues around hoverTime and preload their sprites\n const nearIdx = cues.findIndex((c) => c.start > hoverTime);\n const window2 = cues.slice(Math.max(0, nearIdx - 2), nearIdx + 3);\n for (const c of window2) {\n if (!preloadedSpritesRef.current.has(c.image)) {\n preloadedSpritesRef.current.add(c.image);\n const img = new window.Image();\n img.src = c.image;\n }\n }\n }\n }, [parsed.storyboard?.resolutions, activeStoryboardRes]);\n\n // Preload storyboard tiles around currentTime (video playhead) at low resolution\n useEffect(() => {\n const resolutions = parsed.storyboard?.resolutions;\n if (!resolutions || storyboardCacheRef.current.size === 0 || !duration) return;\n\n // Use lowest available resolution for background preload around playhead\n const RES_ORDER = [\"180p\", \"240p\", \"360p\", \"480p\", \"default\"];\n const lowestKey = RES_ORDER.find((k) => storyboardCacheRef.current.has(k));\n if (!lowestKey) return;\n\n const cues = storyboardCacheRef.current.get(lowestKey) ?? [];\n const playheadIdx = cues.findIndex((c) => c.start > currentTime);\n // Preload 5 cues ahead and 2 behind the playhead\n const nearby = cues.slice(Math.max(0, playheadIdx - 2), playheadIdx + 6);\n for (const c of nearby) {\n if (!preloadedSpritesRef.current.has(c.image)) {\n preloadedSpritesRef.current.add(c.image);\n const img = new window.Image();\n img.src = c.image;\n }\n }\n }, [Math.floor(currentTime / 10), parsed.storyboard?.resolutions, duration]); // check every 10s\n\n const updatePreview = useCallback(\n (clientX: number) => {\n const progress = progressRef.current;\n if (!progress || !duration || storyboardCues.length === 0) {\n setPreview(null);\n return;\n }\n const rect = progress.getBoundingClientRect();\n const x = Math.max(0, Math.min(clientX - rect.left, rect.width));\n const time = (x / rect.width) * duration;\n\n // Upgrade to higher resolution when mouse is on the progress bar\n upgradeStoryboardResolution(time);\n\n const cue = findStoryboardCue(storyboardCues, time);\n if (!cue) {\n setPreview(null);\n return;\n }\n setPreview({\n cue,\n time,\n left: Math.max(80, Math.min(x, rect.width - 80)),\n });\n },\n [duration, storyboardCues, upgradeStoryboardResolution],\n );\n\n const handleProgressPointerMove = useCallback(\n (event: PointerEvent<HTMLDivElement>) => {\n updatePreview(event.clientX);\n if (isDragging) seekFromPointer(event.clientX);\n },\n [isDragging, seekFromPointer, updatePreview],\n );\n\n const handleProgressPointerEnter = useCallback(() => {\n setIsHoveringProgress(true);\n }, []);\n\n const handleProgressPointerLeave = useCallback(() => {\n setIsHoveringProgress(false);\n if (!isDragging) {\n setPreview(null);\n // Downgrade back to lowest resolution when mouse leaves the progress bar\n const resolutions = parsed.storyboard?.resolutions;\n if (resolutions && storyboardCacheRef.current.size > 0) {\n const RES_ORDER = [\"180p\", \"240p\", \"360p\", \"480p\", \"default\"];\n const lowestKey = RES_ORDER.find((k) => storyboardCacheRef.current.has(k));\n if (lowestKey && activeStoryboardRes !== lowestKey) {\n setStoryboardCues(storyboardCacheRef.current.get(lowestKey)!);\n setActiveStoryboardRes(lowestKey);\n }\n }\n }\n }, [isDragging, parsed.storyboard?.resolutions, activeStoryboardRes]);\n\n const handleProgressPointerDown = useCallback(\n (event: PointerEvent<HTMLDivElement>) => {\n const progress = progressRef.current;\n if (!progress) return;\n progress.setPointerCapture(event.pointerId);\n dragPointerIdRef.current = event.pointerId;\n setIsDragging(true);\n seekFromPointer(event.clientX);\n updatePreview(event.clientX);\n },\n [seekFromPointer, updatePreview],\n );\n\n const handleProgressPointerUp = useCallback(\n (event: PointerEvent<HTMLDivElement>) => {\n if (dragPointerIdRef.current === event.pointerId) {\n setIsDragging(false);\n dragPointerIdRef.current = null;\n setPreview(null);\n }\n },\n [],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const target = event.target as HTMLElement;\n const tagName = target.tagName.toLowerCase();\n\n if ([\"input\", \"select\", \"button\"].includes(tagName)) {\n return;\n }\n\n if (event.key === \" \") {\n event.preventDefault();\n togglePlay();\n }\n\n if (event.key === \"ArrowRight\") {\n seekRelative(10);\n }\n\n if (event.key === \"ArrowLeft\") {\n seekRelative(-10);\n }\n\n if (event.key.toLowerCase() === \"f\") {\n toggleFullscreen();\n }\n\n if (event.key.toLowerCase() === \"m\") {\n setIsMuted((value) => !value);\n }\n },\n [seekRelative, toggleFullscreen, togglePlay],\n );\n\n if (!activeSource) {\n return (\n <div className=\"rounded-xl border border-red-200 bg-red-50 p-4 text-sm text-red-700\">\n O componente Video precisa de pelo menos um <code>{\"<Source />\"}</code>.\n </div>\n );\n }\n\n return (\n <div\n ref={containerRef}\n className={`@container mx-auto w-full max-w-6xl${className ?? \"\"}`}\n >\n <div\n ref={playerRef}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n onMouseMove={showControlsTemporarily}\n onMouseLeave={() => {\n closeSettings();\n if (isPlaying && autoHideControls) {\n setControlsVisible(false);\n }\n }}\n onBlur={(e) => {\n // Close menus when focus leaves the player entirely\n if (!e.currentTarget.contains(e.relatedTarget as Node)) {\n closeSettings();\n }\n }}\n onTouchStart={showControlsTemporarily}\n onTouchMove={showControlsTemporarily}\n className=\"relative w-full overflow-hidden rounded-[14px] bg-black shadow-[0_30px_90px_rgba(15,15,15,0.22)] outline-none ring-1 ring-black/5\"\n style={\n fixedHeight\n ? {\n height:\n typeof fixedHeight === \"number\"\n ? `${fixedHeight}px`\n : fixedHeight,\n }\n : maxHeight\n ? {\n maxHeight:\n typeof maxHeight === \"number\"\n ? `${maxHeight}px`\n : maxHeight,\n aspectRatio: \"16/9\",\n }\n : { aspectRatio: \"16/9\" }\n }\n >\n <video\n ref={videoRef}\n className={`h-full w-full ${isFullscreen ? \"object-contain\" : \"object-cover\"}`}\n playsInline\n preload=\"metadata\"\n crossOrigin=\"anonymous\"\n >\n {captions.map((subtitle) => (\n <track\n key={`${activeSource.src}-${subtitle.srclang}-${subtitle.src}`}\n kind=\"subtitles\"\n src={subtitle.src}\n srcLang={subtitle.srclang}\n label={subtitle.label}\n default={subtitle.default}\n />\n ))}\n {parsed.storyboard?.src && (\n <track\n kind=\"metadata\"\n label=\"thumbnails\"\n src={parsed.storyboard.src}\n />\n )}\n </video>\n\n {/* Poster overlay — shown only before first play */}\n {poster && !hasPlayed && (\n <img\n src={poster}\n aria-hidden\n className=\"pointer-events-none absolute inset-0 h-full w-full object-contain bg-black\"\n />\n )}\n\n {/* Age rating overlay — driven by GSAP timeline, always mounted */}\n {parsed.ageRating?.data && (() => {\n const ar = parsed.ageRating!;\n const regionKey = resolveAgeRatingRegion(ar.locale, ar.data!);\n if (!regionKey) return null;\n const code = ar.data![regionKey];\n const lookupKey = `${regionKey}:${code}`;\n const info = ar.lookup?.[lookupKey];\n return (\n <div\n ref={ageRatingWrapRef}\n className=\"pointer-events-none absolute inset-0 z-20 flex items-start justify-start\"\n style={{\n opacity: 0,\n background: \"linear-gradient(135deg, rgba(0,0,0,0.85) 0%, rgba(0,0,0,0.4) 40%, transparent 65%)\",\n }}\n >\n <div className=\"flex items-center gap-3.5 px-5 pt-5 @sm:px-7 @sm:pt-7\">\n <div ref={ageRatingIconRef} style={{ opacity: 0 }}>\n {info?.imageUrl ? (\n <img src={info.imageUrl} alt={code} className=\"h-14 w-auto object-contain @sm:h-16 drop-shadow-[0_2px_8px_rgba(0,0,0,0.6)]\" />\n ) : (\n <span className=\"flex h-14 min-w-14 items-center justify-center rounded-md border-2 border-white/40 px-2 text-lg font-bold text-white @sm:h-16 @sm:min-w-16 @sm:text-xl drop-shadow-[0_2px_8px_rgba(0,0,0,0.6)]\">\n {code}\n </span>\n )}\n </div>\n {(info?.title || info?.description) && (\n <div ref={ageRatingTextRef} className=\"flex flex-col gap-0.5\" style={{ opacity: 0 }}>\n {info.title && <span className=\"text-sm font-semibold text-white @sm:text-base drop-shadow-[0_1px_4px_rgba(0,0,0,0.8)]\">{info.title}</span>}\n {info.description && <span className=\"text-xs text-white/70 leading-snug max-w-56 @sm:text-sm @sm:max-w-72 drop-shadow-[0_1px_4px_rgba(0,0,0,0.8)]\">{info.description}</span>}\n </div>\n )}\n </div>\n </div>\n );\n })()}\n\n {/* Click feedback / action icon — no background, shows briefly only on action */}\n <div\n ref={clickIconRef}\n className=\"pointer-events-none absolute inset-0 z-10 grid place-items-center\"\n style={{ opacity: 0 }}\n >\n <span className=\"grid size-10 place-items-center text-white drop-shadow-[0_2px_12px_rgba(0,0,0,0.8)] @sm:size-14 @lg:size-16\">\n {clickIcon === \"pause\" ? (\n <Pause className=\"size-7 @sm:size-9 @lg:size-11\" fill=\"white\" />\n ) : (\n <Play\n className=\"ml-0.5 size-7 @sm:size-9 @lg:size-11\"\n fill=\"white\"\n />\n )}\n </span>\n </div>\n\n {isLoading && (\n <div className=\"pointer-events-none absolute inset-0 z-20 grid place-items-center bg-black/10\">\n <div className=\"size-9 animate-spin rounded-full border-2 border-white/25 border-t-white\" />\n </div>\n )}\n\n\n <div\n ref={chromeRef}\n onClick={togglePlay}\n className={`absolute inset-0 z-30 flex flex-col ${\n isFullscreen ? \"justify-between\" : \"justify-end\"\n }`}\n >\n {/* Top gradient — only in fullscreen */}\n {isFullscreen && (\n <div className=\"pointer-events-none absolute inset-x-0 top-0 h-32 bg-linear-to-b from-black/70 to-transparent\" />\n )}\n {/* Bottom gradient */}\n <div className=\"pointer-events-none absolute inset-x-0 bottom-0 h-40 bg-linear-to-t from-black/80 to-transparent\" />\n\n {isFullscreen && (\n <header\n onClick={(e) => e.stopPropagation()}\n className=\"relative z-10 flex items-start px-4 pt-4 text-white @sm:px-7 @sm:pt-7 @lg:px-9 @lg:pt-8\"\n >\n <div>\n {title && (\n <h1\n className=\"text-sm font-bold tracking-wide @sm:text-base @md:text-lg @lg:text-xl\"\n style={{ textShadow: \"0 1px 6px rgba(0,0,0,0.6)\" }}\n >\n {title}\n </h1>\n )}\n\n {description && (\n <p className=\"mt-1 text-xs font-medium text-white/85 @sm:text-sm\">\n {description}\n </p>\n )}\n </div>\n </header>\n )}\n\n <footer\n onClick={(e) => e.stopPropagation()}\n className=\"relative z-10 px-4 pb-4 text-white\"\n >\n {/* Settings panel — nested, one sub-menu at a time */}\n {settingsOpen && (\n <>\n <div\n className=\"fixed inset-0 z-70\"\n onClick={closeSettings}\n />\n <div\n ref={settingsPanelRef}\n className=\"absolute bottom-full right-2 z-70 mb-2 overflow-hidden rounded-2xl bg-[#1c1c1e]/95 shadow-2xl backdrop-blur-xl ring-1 ring-white/10\"\n style={{\n width:\n Math.min(\n 224,\n Math.max(180, (playerWidth || 640) * 0.22),\n ) + \"px\",\n opacity: 0,\n }}\n >\n <div ref={settingsContentRef}>\n {/* Root menu */}\n {settingsTab === \"root\" && (\n <div>\n {(\n [\n {\n id: \"quality\" as SettingsTab,\n label: \"Qualidade\",\n value:\n qualities.find((q) => q.id === selectedQuality)\n ?.label ?? \"Auto\",\n },\n ...(captions.length > 0\n ? [\n {\n id: \"subtitles\" as SettingsTab,\n label: \"Legendas\",\n value:\n subtitleStyle.track === \"off\"\n ? \"Desligado\"\n : (captions.find(\n (s) =>\n s.srclang === subtitleStyle.track,\n )?.label ?? subtitleStyle.track),\n },\n ]\n : []),\n ...(audioTracks.length > 1\n ? [\n {\n id: \"audio\" as SettingsTab,\n label: \"Áudio\",\n value:\n audioTracks.find(\n (t) => t.id === selectedAudio,\n )?.label ?? \"\",\n },\n ]\n : []),\n {\n id: \"playback\" as SettingsTab,\n label: \"Velocidade\",\n value:\n playbackRate === 1\n ? \"Normal\"\n : `${playbackRate}×`,\n },\n ] as { id: SettingsTab; label: string; value: string }[]\n ).map((item) => (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => setSettingsTab(item.id)}\n className=\"flex w-full items-center justify-between gap-3 px-4 py-3 text-sm transition hover:bg-white/8 first:pt-3.5 last:pb-3.5\"\n >\n <span className=\"text-white/80\">{item.label}</span>\n <span className=\"flex items-center gap-1.5 text-xs text-white/40\">\n {item.value}\n <svg\n className=\"size-3 opacity-50\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M4.5 3l3 3-3 3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n </button>\n ))}\n </div>\n )}\n\n {/* Quality sub-menu */}\n {settingsTab === \"quality\" && (\n <div>\n <button\n type=\"button\"\n onClick={() => setSettingsTab(\"root\")}\n className=\"flex w-full items-center gap-2 border-b border-white/8 px-4 py-3 text-xs font-semibold text-white/50 transition hover:text-white\"\n >\n <svg\n className=\"size-3.5\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M7.5 3L4.5 6l3 3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n Qualidade\n </button>\n <div className=\"py-1.5\">\n {[...qualities].reverse().map((quality) => (\n <button\n key={quality.id}\n type=\"button\"\n onClick={() => {\n changeQuality(quality.id);\n setSettingsTab(\"root\");\n }}\n className=\"flex w-full items-center gap-3 px-4 py-2.5 text-sm transition hover:bg-white/8\"\n >\n <svg\n className={`size-4 shrink-0 ${selectedQuality === quality.id ? \"text-white\" : \"text-transparent\"}`}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M3 8l3.5 3.5L13 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <span\n className={\n selectedQuality === quality.id\n ? \"font-semibold text-white\"\n : \"text-white/55\"\n }\n >\n {quality.label}\n {quality.id === \"auto\" ? \" (ABR)\" : \"\"}\n </span>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Subtitles sub-menu */}\n {settingsTab === \"subtitles\" && (\n <div>\n <button\n type=\"button\"\n onClick={() => setSettingsTab(\"root\")}\n className=\"flex w-full items-center gap-2 border-b border-white/8 px-4 py-3 text-xs font-semibold text-white/50 transition hover:text-white\"\n >\n <svg\n className=\"size-3.5\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M7.5 3L4.5 6l3 3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n Legendas\n </button>\n <div className=\"py-1.5\">\n {[\n { srclang: \"off\", label: \"Desligado\" },\n ...captions,\n ].map((s) => (\n <button\n key={s.srclang}\n type=\"button\"\n onClick={() => {\n const next =\n s.srclang === \"off\" ? \"off\" : s.srclang;\n setSubtitleMode(next);\n setSubtitleStyle((st) => ({\n ...st,\n track: next,\n }));\n }}\n className=\"flex w-full items-center gap-3 px-4 py-2.5 text-sm transition hover:bg-white/8\"\n >\n <svg\n className={`size-4 shrink-0 ${subtitleStyle.track === s.srclang ? \"text-white\" : \"text-transparent\"}`}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M3 8l3.5 3.5L13 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <span\n className={\n subtitleStyle.track === s.srclang\n ? \"font-semibold text-white\"\n : \"text-white/55\"\n }\n >\n {s.label}\n </span>\n </button>\n ))}\n </div>\n {subtitleStyle.track !== \"off\" && (\n <button\n type=\"button\"\n onClick={() => setSettingsTab(\"subtitles-style\")}\n className=\"flex w-full items-center justify-between gap-3 border-t border-white/8 px-4 py-3 text-sm transition hover:bg-white/8\"\n >\n <span className=\"text-white/60\">Aparência</span>\n <svg\n className=\"size-3 opacity-50\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M4.5 3l3 3-3 3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n )}\n </div>\n )}\n\n {/* Subtitles style sub-menu */}\n {settingsTab === \"subtitles-style\" && (\n <div>\n <button\n type=\"button\"\n onClick={() => setSettingsTab(\"subtitles\")}\n className=\"flex w-full items-center gap-2 border-b border-white/8 px-4 py-3 text-xs font-semibold text-white/50 transition hover:text-white\"\n >\n <svg\n className=\"size-3.5\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M7.5 3L4.5 6l3 3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n Aparência\n </button>\n <div className=\"px-4 py-3 flex flex-col gap-3\">\n {/* Size */}\n <div>\n <p className=\"mb-1.5 text-xs font-semibold text-white/40 uppercase tracking-wide\">\n Tamanho\n </p>\n <div className=\"flex gap-1.5\">\n {(\n [\"small\", \"medium\", \"large\", \"xlarge\"] as const\n ).map((s) => (\n <button\n key={s}\n type=\"button\"\n onClick={() =>\n setSubtitleStyle((st) => ({ ...st, size: s }))\n }\n className={`flex-1 rounded-lg py-1.5 text-xs font-medium transition${subtitleStyle.size === s ? \"bg-white/20 text-white\" : \"text-white/45 hover:bg-white/10\"}`}\n >\n {s === \"small\"\n ? \"P\"\n : s === \"medium\"\n ? \"M\"\n : s === \"large\"\n ? \"G\"\n : \"GG\"}\n </button>\n ))}\n </div>\n </div>\n {/* Color */}\n <div>\n <p className=\"mb-1.5 text-xs font-semibold text-white/40 uppercase tracking-wide\">\n Cor\n </p>\n <div className=\"flex gap-1.5\">\n {(\n [\n [\"white\", \"Branco\", \"#fff\"],\n [\"yellow\", \"Amarelo\", \"#facc15\"],\n [\"cyan\", \"Ciano\", \"#22d3ee\"],\n ] as const\n ).map(([val, label, color]) => (\n <button\n key={val}\n type=\"button\"\n onClick={() =>\n setSubtitleStyle((st) => ({\n ...st,\n color: val,\n }))\n }\n className={`flex-1 rounded-lg py-1.5 text-xs font-medium transition ring-1${subtitleStyle.color === val ? \"ring-white/40\" : \"ring-transparent hover:ring-white/15\"}`}\n style={{ color }}\n >\n {label}\n </button>\n ))}\n </div>\n </div>\n {/* Background */}\n <div>\n <p className=\"mb-1.5 text-xs font-semibold text-white/40 uppercase tracking-wide\">\n Fundo\n </p>\n <div className=\"flex gap-1.5\">\n {(\n [\n [\"none\", \"Nenhum\"],\n [\"semi\", \"Semi\"],\n [\"solid\", \"Sólido\"],\n ] as const\n ).map(([val, label]) => (\n <button\n key={val}\n type=\"button\"\n onClick={() =>\n setSubtitleStyle((st) => ({ ...st, bg: val }))\n }\n className={`flex-1 rounded-lg py-1.5 text-xs font-medium transition${subtitleStyle.bg === val ? \"bg-white/20 text-white\" : \"text-white/45 hover:bg-white/10\"}`}\n >\n {label}\n </button>\n ))}\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* Audio sub-menu */}\n {settingsTab === \"audio\" && (\n <div>\n <button\n type=\"button\"\n onClick={() => setSettingsTab(\"root\")}\n className=\"flex w-full items-center gap-2 border-b border-white/8 px-4 py-3 text-xs font-semibold text-white/50 transition hover:text-white\"\n >\n <svg\n className=\"size-3.5\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M7.5 3L4.5 6l3 3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n Áudio\n </button>\n <div className=\"py-1.5\">\n {audioTracks.map((track) => (\n <button\n key={track.id}\n type=\"button\"\n onClick={() => {\n changeAudio(track.id);\n setSettingsTab(\"root\");\n }}\n className=\"flex w-full items-center gap-3 px-4 py-2.5 text-sm transition hover:bg-white/8\"\n >\n <svg\n className={`size-4 shrink-0 ${selectedAudio === track.id ? \"text-white\" : \"text-transparent\"}`}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M3 8l3.5 3.5L13 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <span\n className={\n selectedAudio === track.id\n ? \"font-semibold text-white\"\n : \"text-white/55\"\n }\n >\n {track.label}\n </span>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Playback speed sub-menu */}\n {settingsTab === \"playback\" && (\n <div>\n <button\n type=\"button\"\n onClick={() => setSettingsTab(\"root\")}\n className=\"flex w-full items-center gap-2 border-b border-white/8 px-4 py-3 text-xs font-semibold text-white/50 transition hover:text-white\"\n >\n <svg\n className=\"size-3.5\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M7.5 3L4.5 6l3 3\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n Velocidade\n </button>\n <div className=\"py-1.5\">\n {PLAYBACK_SPEEDS.map((speed) => (\n <button\n key={speed}\n type=\"button\"\n onClick={() => {\n setPlaybackRate(speed);\n closeSettings();\n }}\n className=\"flex w-full items-center gap-3 px-4 py-2.5 text-sm transition hover:bg-white/8\"\n >\n <svg\n className={`size-4 shrink-0 ${playbackRate === speed ? \"text-white\" : \"text-transparent\"}`}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M3 8l3.5 3.5L13 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <span\n className={\n playbackRate === speed\n ? \"font-semibold text-white\"\n : \"text-white/55\"\n }\n >\n {speed === 1 ? \"Normal\" : `${speed}×`}\n </span>\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n </>\n )}\n\n <div\n ref={progressRef}\n onPointerMove={handleProgressPointerMove}\n onPointerEnter={handleProgressPointerEnter}\n onPointerLeave={handleProgressPointerLeave}\n onPointerDown={handleProgressPointerDown}\n onPointerUp={handleProgressPointerUp}\n className=\"relative mb-2 h-8 cursor-pointer overflow-visible\"\n >\n {/* Track */}\n <div\n ref={progressTrackRef}\n className=\"absolute left-0 right-0 top-1/2 -translate-y-1/2 overflow-hidden rounded-full bg-white/18\"\n style={{\n height: \"3px\",\n }}\n >\n <div\n className=\"absolute inset-y-0 left-0 rounded-full bg-white/28\"\n style={{ width: `${bufferedPercent}%` }}\n />\n <div\n className=\"absolute inset-y-0 left-0 rounded-full bg-white\"\n style={{ width: `${progressPercent}%`, transition: \"width 0.05s linear\" }}\n />\n </div>\n {/* Thumb */}\n <div\n ref={progressThumbRef}\n className=\"pointer-events-none absolute rounded-full bg-white shadow-[0_1px_6px_rgba(0,0,0,0.5)]\"\n style={{\n top: \"50%\",\n left: `${progressPercent}%`,\n transform: \"translate(-50%, -50%)\",\n width: \"10px\",\n height: \"10px\",\n }}\n />\n\n {/* Chapter markers */}\n {chapters.length > 0 && duration > 0 && chapters.map((ch, i) => (\n <div\n key={i}\n data-chapter-marker\n className=\"pointer-events-none absolute top-1/2 -translate-y-1/2 w-0.5 rounded-full bg-white/50\"\n style={{ left: `${(ch.startTime / duration) * 100}%`, height: \"3px\" }}\n />\n ))}\n\n {/* Storyboard preview — anchored above the timeline */}\n {preview && (() => {\n const frameW = preview.cue.w ?? 160;\n const frameH = preview.cue.h ?? 90;\n // Fixed width, height follows frame aspect ratio\n const thumbW = 200;\n const thumbH = Math.round(thumbW * (frameH / frameW));\n const scale = thumbW / frameW;\n const isSprite = preview.cue.x != null && preview.cue.y != null;\n return (\n <div\n className=\"pointer-events-none absolute flex flex-col items-center gap-1\"\n style={{\n bottom: \"calc(100% + 6px)\",\n left: preview.left,\n transform: \"translateX(-50%)\",\n zIndex: 80,\n }}\n >\n <div\n className=\"overflow-hidden rounded-lg shadow-2xl ring-1 ring-white/20\"\n style={{ width: thumbW, height: thumbH, flexShrink: 0 }}\n >\n {isSprite ? (\n // Sprite: need full sheet dimensions to compute backgroundSize correctly.\n // Load them once from the image's natural size.\n (() => {\n const imgUrl = preview.cue.image;\n if (storyboardSheetUrlRef.current !== imgUrl) {\n storyboardSheetUrlRef.current = imgUrl;\n const img = new window.Image();\n img.onload = () => setStoryboardSheetSize({ w: img.naturalWidth, h: img.naturalHeight });\n img.src = imgUrl;\n }\n if (!storyboardSheetSize) return null;\n const bsW = storyboardSheetSize.w * scale;\n const bsH = storyboardSheetSize.h * scale;\n return (\n <div\n style={{\n width: thumbW,\n height: thumbH,\n backgroundImage: `url(${imgUrl})`,\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: `-${(preview.cue.x ?? 0) * scale}px -${(preview.cue.y ?? 0) * scale}px`,\n backgroundSize: `${bsW}px ${bsH}px`,\n }}\n />\n );\n })()\n ) : (\n <img\n src={preview.cue.image}\n alt=\"\"\n style={{ width: thumbW, height: thumbH, objectFit: \"cover\", objectPosition: \"center\", display: \"block\" }}\n />\n )}\n </div>\n <div\n className=\"flex items-center gap-1.5 rounded-md px-2 py-0.5 text-[11px] font-semibold text-white/90\"\n style={{ background: \"rgba(0,0,0,0.55)\", backdropFilter: \"blur(6px)\" }}\n >\n <span className=\"tabular-nums\">{formatTime(preview.time)}</span>\n {(() => {\n const ch = [...chapters].reverse().find((c) => c.startTime <= preview.time);\n return ch ? (\n <>\n <span className=\"text-white/40\">·</span>\n <span className=\"max-w-36 truncate\">{ch.title}</span>\n </>\n ) : null;\n })()}\n </div>\n </div>\n );\n })()}\n </div>\n\n <div className=\"flex items-center justify-between gap-2\">\n {/* LEFT group: play/pause | time */}\n <div className=\"flex items-center gap-1.5 @sm:gap-2\">\n <button\n type=\"button\"\n onClick={togglePlay}\n className=\"grid size-8 place-items-center rounded-full text-white transition hover:bg-white/10 @sm:size-9\"\n aria-label={isPlaying ? \"Pause\" : \"Play\"}\n >\n {isPlaying ? (\n <Pause className=\"size-4 @sm:size-5\" fill=\"white\" />\n ) : (\n <Play className=\"ml-0.5 size-4 @sm:size-5\" fill=\"white\" />\n )}\n </button>\n\n <span className=\"text-[11px] font-medium tabular-nums text-white/80\">\n {formatTime(currentTime)}\n <span className=\"text-white/30\">/</span>\n <span className=\"text-white/45\">{formatTime(duration)}</span>\n </span>\n {(() => {\n if (chapters.length === 0) return null;\n const ch = [...chapters].reverse().find((c) => currentTime >= c.startTime);\n return ch ? (\n <span className=\"hidden max-w-40 truncate text-[11px] text-white/50 @sm:block\">\n {ch.title}\n </span>\n ) : null;\n })()}\n </div>\n\n {/* RIGHT group: rating | volume | captions | settings | fullscreen */}\n <div className=\"flex items-center gap-0.5 @sm:gap-1\">\n {/* Inline rating buttons — state is internal so clicks don't re-render the parent */}\n {parsed.rating && (() => {\n const REACTIONS: Array<{ key: \"LOVE\" | \"LIKE\" | \"DISLIKE\"; emoji: string }> = [\n { key: \"LOVE\", emoji: \"❤️\" },\n { key: \"LIKE\", emoji: \"👍\" },\n { key: \"DISLIKE\", emoji: \"👎\" },\n ];\n return (\n <>\n {REACTIONS.map(({ key, emoji }) => {\n const count = ratingCounts[key] ?? 0;\n const active = userReaction === key;\n return (\n <button\n key={key}\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n const next = active ? null : key;\n setUserReaction(next);\n setRatingCounts((prev) => {\n const updated = { ...prev };\n const prev_reaction = userReactionRef.current;\n if (active) updated[key] = Math.max(0, (updated[key] ?? 0) - 1);\n else {\n if (prev_reaction) updated[prev_reaction] = Math.max(0, (updated[prev_reaction] ?? 0) - 1);\n updated[key] = (updated[key] ?? 0) + 1;\n }\n return updated;\n });\n onReactRef.current?.(next);\n }}\n className={`flex items-center gap-0.5 rounded px-1.5 py-1 text-[11px] transition hover:bg-white/10 ${active ? \"opacity-100\" : \"opacity-50 hover:opacity-80\"}`}\n aria-label={key.toLowerCase()}\n aria-pressed={active}\n >\n <span>{emoji}</span>\n {count > 0 && <span className=\"text-white/70 tabular-nums\">{count}</span>}\n </button>\n );\n })}\n <div className=\"mx-0.5 h-4 w-px bg-white/20 @md:mx-1\" />\n </>\n );\n })()}\n\n {/* Volume: mute button always visible, custom slider appears on group hover */}\n <VolumeSlider\n volume={isMuted ? 0 : volume}\n onMuteToggle={() => setIsMuted((v) => !v)}\n onVolumeChange={(v) => { setVolume(v); setIsMuted(v === 0); }}\n isMuted={isMuted}\n />\n\n <div className=\"mx-0.5 h-4 w-px bg-white/20 @md:mx-1\" />\n\n {captions.length > 0 && (\n <button\n type=\"button\"\n onClick={() => {\n const next = subtitleMode === \"off\" ? (captions[0]?.srclang ?? \"off\") : \"off\";\n setSubtitleMode(next);\n setSubtitleStyle((st) => ({ ...st, track: next }));\n }}\n className={`grid size-8 place-items-center rounded transition hover:text-white/80 @sm:size-10 ${subtitleMode !== \"off\" ? \"text-white\" : \"text-white/60\"}`}\n aria-label=\"Captions\"\n >\n <CaptionsIcon className=\"size-4 @sm:size-5\" />\n </button>\n )}\n\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => settingsOpen ? closeSettings() : openSettings()}\n className={`grid size-8 place-items-center rounded transition hover:text-white/80 @sm:size-10 ${settingsOpen ? \"text-white\" : \"text-white/60\"}`}\n aria-label=\"Settings\"\n >\n <Settings className=\"size-4 @sm:size-5\" />\n </button>\n </div>\n\n <button\n type=\"button\"\n onClick={toggleFullscreen}\n className=\"grid size-8 place-items-center text-white/60 transition hover:scale-110 hover:text-white/80 @sm:size-10\"\n aria-label={isFullscreen ? \"Exit fullscreen\" : \"Fullscreen\"}\n >\n {isFullscreen ? (\n <Minimize className=\"size-4 @sm:size-5\" />\n ) : (\n <Maximize className=\"size-4 @sm:size-5\" />\n )}\n </button>\n </div>\n </div>\n </footer>\n </div>\n\n\n {/* Subtitles — size scales with player height so it looks right in fullscreen */}\n {activeCue && (\n <div\n className={`pointer-events-none absolute inset-x-0 z-40 flex justify-center px-4 transition-all duration-200${\n controlsVisible\n ? \"bottom-20 @sm:bottom-24 @lg:bottom-28\"\n : \"bottom-4 @sm:bottom-6\"\n }`}\n >\n <div\n className=\"max-w-[80%] rounded-lg px-4 py-1.5 text-center font-medium leading-snug\"\n style={{\n fontSize: (() => {\n // Base size scales with player height: ~2.8% of height, clamped per size option\n const base = Math.max(12, Math.min(playerHeight * 0.028, 32));\n if (subtitleStyle.size === \"small\") return `${base * 0.75}px`;\n if (subtitleStyle.size === \"large\") return `${base * 1.35}px`;\n if (subtitleStyle.size === \"xlarge\") return `${base * 1.8}px`;\n return `${base}px`; // medium\n })(),\n color:\n subtitleStyle.color === \"yellow\"\n ? \"#facc15\"\n : subtitleStyle.color === \"cyan\"\n ? \"#22d3ee\"\n : \"#ffffff\",\n backgroundColor:\n subtitleStyle.bg === \"none\"\n ? \"transparent\"\n : subtitleStyle.bg === \"solid\"\n ? \"rgba(0,0,0,0.9)\"\n : \"rgba(0,0,0,0.55)\",\n backdropFilter:\n subtitleStyle.bg === \"semi\" ? \"blur(6px)\" : undefined,\n textShadow:\n subtitleStyle.bg === \"none\"\n ? \"0 1px 8px rgba(0,0,0,1), 0 0 16px rgba(0,0,0,0.9)\"\n : \"0 1px 3px rgba(0,0,0,0.5)\",\n }}\n >\n {activeCue}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport const VideoPlayer = Video;\n\nfunction SettingsItem({\n children,\n active,\n onClick,\n}: {\n children: ReactNode;\n active: boolean;\n onClick: () => void;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={`flex w-full items-center gap-2 px-4 py-2.5 text-left text-base font-medium transition hover:bg-white/10${active ? \"text-white\" : \"text-white/55\"}`}\n >\n <span\n className={`size-1.5 rounded-full${active ? \"bg-white\" : \"bg-transparent\"}`}\n />\n {children}\n </button>\n );\n}\n\nfunction VolumeSlider({\n volume,\n isMuted,\n onMuteToggle,\n onVolumeChange,\n}: {\n volume: number;\n isMuted: boolean;\n onMuteToggle: () => void;\n onVolumeChange: (v: number) => void;\n}) {\n const [hovered, setHovered] = useState(false);\n const [dragging, setDragging] = useState(false);\n const trackRef = useRef<HTMLDivElement>(null);\n const sliderWrapRef = useRef<HTMLDivElement>(null);\n const railRef = useRef<HTMLDivElement>(null);\n const thumbRef = useRef<HTMLDivElement>(null);\n const expanded = hovered || dragging;\n\n const seek = useCallback((clientX: number) => {\n const track = trackRef.current;\n if (!track) return;\n const rect = track.getBoundingClientRect();\n const v = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\n onVolumeChange(v);\n }, [onVolumeChange]);\n\n const onPointerDown = useCallback((e: React.PointerEvent) => {\n e.currentTarget.setPointerCapture(e.pointerId);\n setDragging(true);\n seek(e.clientX);\n }, [seek]);\n\n const onPointerMove = useCallback((e: React.PointerEvent) => {\n if (dragging) seek(e.clientX);\n }, [dragging, seek]);\n\n const onPointerUp = useCallback(() => setDragging(false), []);\n\n // GSAP: animate slider expand/collapse\n useEffect(() => {\n const wrap = sliderWrapRef.current;\n if (!wrap) return;\n gsap.killTweensOf(wrap);\n gsap.to(wrap, {\n width: expanded ? 64 : 0,\n opacity: expanded ? 1 : 0,\n duration: 0.2,\n ease: \"power2.inOut\",\n });\n }, [expanded]);\n\n // GSAP: animate rail height + thumb size on hover/drag\n useEffect(() => {\n const rail = railRef.current;\n const thumb = thumbRef.current;\n const targetRailH = dragging ? 5 : hovered ? 4 : 3;\n const targetThumbSize = dragging ? 14 : hovered ? 11 : 0;\n if (rail) {\n gsap.killTweensOf(rail);\n gsap.to(rail, { height: targetRailH, duration: 0.15, ease: \"power1.inOut\" });\n }\n if (thumb) {\n gsap.killTweensOf(thumb);\n gsap.to(thumb, { width: targetThumbSize, height: targetThumbSize, duration: 0.15, ease: \"power1.inOut\" });\n }\n }, [dragging, hovered]);\n\n const fillPercent = volume * 100;\n\n return (\n <div\n className=\"flex items-center\"\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => { if (!dragging) setHovered(false); }}\n >\n <button\n type=\"button\"\n onClick={onMuteToggle}\n className=\"grid size-8 place-items-center text-white/70 transition hover:text-white @sm:size-9\"\n aria-label={isMuted ? \"Unmute\" : \"Mute\"}\n >\n {isMuted || volume === 0 ? (\n <VolumeX className=\"size-4 @sm:size-5\" />\n ) : (\n <Volume2 className=\"size-4 @sm:size-5\" />\n )}\n </button>\n\n {/* Custom track */}\n <div\n ref={sliderWrapRef}\n style={{\n width: \"0px\",\n opacity: 0,\n overflow: \"hidden\",\n }}\n >\n <div\n ref={trackRef}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n className=\"relative mx-1 flex h-7 cursor-pointer items-center\"\n style={{ width: \"52px\" }}\n >\n {/* Rail */}\n <div\n ref={railRef}\n className=\"absolute inset-x-0 rounded-full bg-white/20\"\n style={{ height: \"3px\" }}\n >\n {/* Fill */}\n <div\n className=\"absolute inset-y-0 left-0 rounded-full bg-white\"\n style={{ width: `${fillPercent}%` }}\n />\n </div>\n {/* Thumb */}\n <div\n ref={thumbRef}\n className=\"pointer-events-none absolute top-1/2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-white shadow-md\"\n style={{\n left: `${fillPercent}%`,\n width: \"0px\",\n height: \"0px\",\n }}\n />\n </div>\n </div>\n </div>\n );\n}\n\n// Maps BCP-47 locale prefixes to region keys stored in age_ratings JSON\nconst LOCALE_TO_REGION: Record<string, string> = {\n \"en-US\": \"US\", \"en-CA\": \"CA\",\n \"pt-BR\": \"BR\",\n \"de\": \"EU\", \"fr\": \"EU\", \"es\": \"EU\", \"it\": \"EU\", \"nl\": \"EU\", \"pl\": \"EU\",\n \"de-DE\": \"EU\", \"fr-FR\": \"EU\", \"es-ES\": \"EU\", \"it-IT\": \"EU\",\n \"ja\": \"JP\", \"ja-JP\": \"JP\",\n \"ko\": \"KR\", \"ko-KR\": \"KR\",\n \"en-AU\": \"AU\",\n};\n\nfunction resolveAgeRatingRegion(locale: string | undefined, data: Record<string, string>): string | undefined {\n if (!locale) return Object.keys(data)[0];\n // Exact match first\n if (LOCALE_TO_REGION[locale] && data[LOCALE_TO_REGION[locale]]) return LOCALE_TO_REGION[locale];\n // Language prefix match (e.g. \"pt\" from \"pt-BR\")\n const lang = locale.split(\"-\")[0] ?? \"\";\n const fromLang = LOCALE_TO_REGION[lang];\n if (fromLang && data[fromLang]) return fromLang;\n // Fallback: first key in data\n return Object.keys(data)[0];\n}\n\nfunction parseVideoChildren(children: ReactNode): ParsedVideoChildren {\n const parsed: ParsedVideoChildren = {\n sources: [],\n };\n\n function dn(child: React.ReactElement): string {\n return (child.type as any)?.displayName ?? (child.type as any)?.name ?? \"\";\n }\n\n React.Children.forEach(children, (child) => {\n if (!React.isValidElement(child)) return;\n\n const name = dn(child);\n\n if (child.type === Source || name === \"SiloSource\") {\n const element = child as ReactElement<SourceProps>;\n parsed.sources.push(element.props);\n }\n\n if (child.type === Captions || name === \"SiloCaptions\") {\n const element = child as ReactElement<CaptionsProps>;\n if (element.props.data) {\n parsed.captionsData = element.props.data;\n } else if (element.props.src) {\n parsed.captionsSrc = element.props.src;\n }\n }\n\n if (child.type === Chapters || name === \"SiloChapters\") {\n const element = child as ReactElement<ChaptersProps>;\n if (element.props.data) {\n parsed.chaptersData = element.props.data;\n } else if (element.props.src) {\n parsed.chaptersSrc = element.props.src;\n }\n }\n\n if (child.type === VideoThumbnail || name === \"SiloVideoThumbnail\") {\n const element = child as ReactElement<ThumbnailProps>;\n if (element.props.urls) parsed.thumbnailUrls = element.props.urls;\n if (element.props.src) parsed.thumbnailSrc = element.props.src;\n }\n\n if (child.type === AgeRating || name === \"SiloAgeRating\") {\n const element = child as ReactElement<AgeRatingProps>;\n parsed.ageRating = element.props;\n }\n\n if (child.type === Rating || name === \"SiloRating\") {\n const element = child as ReactElement<RatingProps>;\n parsed.rating = element.props;\n }\n\n if (child.type === Storyboard || name === \"SiloStoryboard\") {\n const element = child as ReactElement<StoryboardProps>;\n const frames: StoryboardFrameProps[] = [];\n\n React.Children.forEach(element.props.children, (frameChild) => {\n if (!React.isValidElement(frameChild)) return;\n const fn2 = dn(frameChild);\n if (\n frameChild.type !== StoryboardFrame &&\n fn2 !== \"SiloStoryboardFrame\"\n )\n return;\n\n const frameElement = frameChild as ReactElement<StoryboardFrameProps>;\n frames.push(frameElement.props);\n });\n\n parsed.storyboard = {\n ...(element.props.src !== undefined && { src: element.props.src }),\n ...(element.props.fallbackImage !== undefined && { fallbackImage: element.props.fallbackImage }),\n ...(element.props.width !== undefined && { width: element.props.width }),\n ...(element.props.height !== undefined && { height: element.props.height }),\n ...(element.props.resolutions !== undefined && { resolutions: element.props.resolutions }),\n frames,\n };\n }\n });\n\n return parsed;\n}\n\nfunction inferSourceType(source: SourceProps): VideoSourceType {\n if (source.type) return source.type;\n\n const src = source.src.toLowerCase();\n\n if (src.includes(\".mpd\") || src.includes(\"/dash\")) return \"dash\";\n if (src.includes(\".m3u8\") || src.includes(\"/hls\")) return \"hls\";\n\n return \"file\";\n}\n\nfunction findStoryboardCue(cues: StoryboardFrameProps[], time: number) {\n if (cues.length === 0) return null;\n // Find the last cue whose start is <= time (floor to nearest previous frame)\n let best: StoryboardFrameProps | null = null;\n for (const cue of cues) {\n if (cue.start <= time) best = cue;\n else break;\n }\n return best;\n}\n\nfunction parseStoryboardVtt(\n text: string,\n baseUrl: string,\n): StoryboardFrameProps[] {\n const lines = text\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean);\n\n const cues: StoryboardFrameProps[] = [];\n\n for (let index = 0; index < lines.length; index++) {\n const line = lines[index];\n if (!line || !line.includes(\"-->\")) continue;\n\n const parts = line.split(/\\s+-->\\s+/);\n const startRaw = parts[0];\n const endRaw = parts[1];\n const imageLine = lines[index + 1];\n\n if (!startRaw || !endRaw || !imageLine) continue;\n\n const image = parseStoryboardImageLine(imageLine, baseUrl);\n\n cues.push({\n start: parseVttTimestamp(startRaw),\n end: parseVttTimestamp(endRaw),\n ...image,\n });\n }\n\n return cues;\n}\n\nfunction parseStoryboardImageLine(line: string, baseUrl: string) {\n const splitIndex = line.indexOf(\"#xywh=\");\n const imageRaw = splitIndex >= 0 ? line.slice(0, splitIndex) : line;\n const xywhRaw = splitIndex >= 0 ? line.slice(splitIndex + 6) : null;\n const image = new URL(imageRaw, baseUrl).href;\n\n if (!xywhRaw) {\n return { image };\n }\n\n const [x, y, w, h] = xywhRaw.split(\",\").map(Number);\n\n return {\n image,\n ...(x !== undefined && !isNaN(x) && { x }),\n ...(y !== undefined && !isNaN(y) && { y }),\n ...(w !== undefined && !isNaN(w) && { w }),\n ...(h !== undefined && !isNaN(h) && { h }),\n };\n}\n\nfunction parseVttTimestamp(value: string) {\n const normalized = value.replace(\",\", \".\");\n const parts = normalized.split(\":\").map(Number);\n\n if (parts.length === 3) {\n return (parts[0] ?? 0) * 3600 + (parts[1] ?? 0) * 60 + (parts[2] ?? 0);\n }\n\n if (parts.length === 2) {\n return (parts[0] ?? 0) * 60 + (parts[1] ?? 0);\n }\n\n return Number(normalized) || 0;\n}\n\nfunction formatTime(seconds: number) {\n if (!Number.isFinite(seconds)) return \"0:00\";\n\n const safeSeconds = Math.max(0, Math.floor(seconds));\n const hours = Math.floor(safeSeconds / 3600);\n const minutes = Math.floor((safeSeconds % 3600) / 60);\n const secs = safeSeconds % 60;\n\n if (hours > 0) {\n return `${hours}:${String(minutes).padStart(2, \"0\")}:${String(secs).padStart(2, \"0\")}`;\n }\n\n return `${minutes}:${String(secs).padStart(2, \"0\")}`;\n}\n","\"use client\";\n\nimport { useState, type CSSProperties } from \"react\";\nimport { useSignedUrl } from \"@geekapps/silo-nextjs\";\n\nexport interface AvatarProps {\n /** Silo file key for the avatar image */\n fileKey?: string | null;\n /** Bucket the file is in */\n bucket?: string;\n /** Fallback initials when no image is available */\n initials?: string;\n /** Avatar size in px (default: 40) */\n size?: number;\n /** Border radius — \"full\" for circle, \"md\" for rounded square (default: \"full\") */\n shape?: \"full\" | \"md\" | \"sm\";\n className?: string;\n style?: CSSProperties;\n alt?: string;\n}\n\nconst RADIUS: Record<string, string> = { full: \"9999px\", md: \"12px\", sm: \"6px\" };\n\nexport function Avatar({\n fileKey,\n bucket,\n initials,\n size = 40,\n shape = \"full\",\n className = \"\",\n style,\n alt = \"avatar\",\n}: AvatarProps) {\n const { url } = useSignedUrl(fileKey ?? null);\n const [error, setError] = useState(false);\n\n const base: CSSProperties = {\n width: size,\n height: size,\n borderRadius: RADIUS[shape],\n fontSize: size * 0.38,\n flexShrink: 0,\n ...style,\n };\n\n if (url && !error) {\n return (\n <span\n className={`overflow-hidden inline-flex items-center justify-center bg-slate-200 text-slate-500 select-none font-semibold${className}`}\n style={base}\n >\n <img\n src={url}\n alt={alt}\n className=\"w-full h-full object-cover block\"\n onError={() => setError(true)}\n />\n </span>\n );\n }\n\n return (\n <span\n className={`overflow-hidden inline-flex items-center justify-center bg-slate-200 text-slate-500 select-none font-semibold${className}`}\n style={base}\n aria-label={alt}\n >\n {initials ? initials.slice(0, 2).toUpperCase() : \"?\"}\n </span>\n );\n}\n","\"use client\";\n\nimport { useState, type CSSProperties } from \"react\";\nimport { useSignedUrl } from \"@geekapps/silo-nextjs\";\n\nexport interface ThumbnailProps {\n /** Silo file key — required unless src is provided directly */\n fileKey?: string;\n /** Bucket the file is in */\n bucket?: string;\n /** Pre-resolved direct URL — skips the signed-URL fetch when provided (e.g. for public files) */\n src?: string | null;\n /** MIME type — used to render a video thumbnail placeholder for video files */\n mimeType?: string;\n /** Width in px or CSS string (default: \"100%\") */\n width?: number | string;\n /** Height in px or CSS string (default: 160) */\n height?: number | string;\n /** Object fit (default: \"cover\") */\n fit?: CSSProperties[\"objectFit\"];\n /** Border radius (default: \"12px\") */\n borderRadius?: string;\n /** Rendered while the URL is loading */\n placeholder?: React.ReactNode;\n className?: string;\n style?: CSSProperties;\n alt?: string;\n}\n\nexport function Thumbnail({\n fileKey,\n bucket,\n mimeType,\n src,\n width = \"100%\",\n height = 160,\n fit = \"cover\",\n borderRadius = \"12px\",\n placeholder,\n className = \"\",\n style,\n alt = \"thumbnail\",\n}: ThumbnailProps) {\n const { url: signedUrl, loading: signedLoading } = useSignedUrl(src != null ? null : fileKey);\n const url = src ?? signedUrl;\n const loading = src != null ? false : signedLoading;\n const [error, setError] = useState(false);\n\n const isVideo = mimeType?.startsWith(\"video/\");\n\n const wrapper: CSSProperties = {\n width,\n height,\n borderRadius,\n overflow: \"hidden\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: \"#f1f5f9\",\n position: \"relative\",\n flexShrink: 0,\n ...style,\n };\n\n if (loading) {\n return (\n <span className={className} style={wrapper}>\n {placeholder ?? <span className=\"text-[12px] text-slate-400\">...</span>}\n </span>\n );\n }\n\n if (error || !url) {\n return (\n <span className={className} style={wrapper}>\n <span className=\"text-[28px]\">{isVideo ? \"🎬\" : \"🖼️\"}</span>\n </span>\n );\n }\n\n if (isVideo) {\n return (\n <span className={className} style={wrapper}>\n <video\n src={url}\n style={{ width: \"100%\", height: \"100%\", objectFit: fit, display: \"block\" }}\n muted\n preload=\"metadata\"\n onError={() => setError(true)}\n />\n <span className=\"absolute inset-0 flex items-center justify-center pointer-events-none\">\n <span className=\"text-[24px] opacity-85\">▶</span>\n </span>\n </span>\n );\n }\n\n return (\n <span className={className} style={wrapper}>\n <img\n src={url}\n alt={alt}\n style={{ width: \"100%\", height: \"100%\", objectFit: fit, display: \"block\" }}\n onError={() => setError(true)}\n />\n </span>\n );\n}\n","\"use client\";\n\nimport { type CSSProperties, type ReactNode } from \"react\";\nimport { useSignedUrl } from \"@geekapps/silo-nextjs\";\n\nexport interface BackgroundProps {\n /** Silo file key for the background image */\n fileKey: string;\n /** Bucket the file is in */\n bucket?: string;\n /** CSS background-size (default: \"cover\") */\n size?: CSSProperties[\"backgroundSize\"];\n /** CSS background-position (default: \"center\") */\n position?: CSSProperties[\"backgroundPosition\"];\n /** Overlay color with opacity, e.g. \"rgba(0,0,0,0.4)\" */\n overlay?: string;\n children?: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function Background({\n fileKey,\n bucket,\n size = \"cover\",\n position = \"center\",\n overlay,\n children,\n className = \"\",\n style,\n}: BackgroundProps) {\n const { url } = useSignedUrl(fileKey);\n\n const wrapper: CSSProperties = {\n position: \"relative\",\n backgroundImage: url ? `url(${url})` : undefined,\n backgroundSize: size,\n backgroundPosition: position,\n backgroundRepeat: \"no-repeat\",\n ...style,\n };\n\n return (\n <div className={className} style={wrapper}>\n {overlay && (\n <div\n aria-hidden\n className=\"absolute inset-0 pointer-events-none\"\n style={{ background: overlay }}\n />\n )}\n {children && (\n <div className=\"relative z-10\">\n {children}\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { type CSSProperties } from \"react\";\nimport { getFileIcon } from \"../utils/format.js\";\nimport { formatBytes } from \"../utils/format.js\";\n\nexport interface FileIconProps {\n /** MIME type of the file */\n mimeType: string;\n /** Original file name */\n name?: string;\n /** File size in bytes */\n size?: number;\n /** Icon size in px (default: 40) */\n iconSize?: number;\n /** Show file name below icon */\n showName?: boolean;\n /** Show file size below icon */\n showSize?: boolean;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function FileIcon({\n mimeType,\n name,\n size,\n iconSize = 40,\n showName = false,\n showSize = false,\n className = \"\",\n style,\n}: FileIconProps) {\n const icon = getFileIcon(mimeType);\n const ext = name?.split(\".\").pop()?.toUpperCase();\n\n return (\n <span\n className={`inline-flex flex-col items-center gap-1${className}`}\n style={style}\n >\n <span style={{ fontSize: iconSize, lineHeight: 1 }}>{icon}</span>\n {ext && (\n <span\n className=\"font-bold text-slate-500 uppercase tracking-wide\"\n style={{ fontSize: iconSize * 0.22 }}\n >\n {ext}\n </span>\n )}\n {showName && name && (\n <span\n className=\"text-xs text-slate-900 overflow-hidden text-ellipsis whitespace-nowrap text-center\"\n style={{ maxWidth: iconSize * 3 }}\n title={name}\n >\n {name}\n </span>\n )}\n {showSize && size !== undefined && (\n <span className=\"text-[11px] text-slate-500\">\n {formatBytes(size)}\n </span>\n )}\n </span>\n );\n}\n","\"use client\";\n\nimport { type CSSProperties } from \"react\";\nimport { useFileStatus } from \"@geekapps/silo-nextjs\";\nimport { FileIcon } from \"./FileIcon.js\";\nimport { Thumbnail } from \"./Thumbnail.js\";\nimport { ProgressBar } from \"./ProgressBar.js\";\nimport { formatBytes } from \"../utils/format.js\";\n\nexport interface FileCardProps {\n fileId: string;\n pollInterval?: number;\n actions?: Array<\"preview\" | \"copy-url\" | \"download\" | \"delete\">;\n onPreview?: (fileId: string) => void;\n onCopyUrl?: (url: string) => void;\n onDelete?: (fileId: string) => void;\n className?: string;\n style?: CSSProperties;\n}\n\nconst STATUS_LABEL: Record<string, string> = {\n CREATED: \"Created\",\n UPLOADING: \"Uploading\",\n INGESTING: \"Ingesting\",\n PROCESSING: \"Processing\",\n READY: \"Ready\",\n FAILED: \"Failed\",\n CANCELLED: \"Cancelled\",\n};\n\nconst STATUS_COLOR: Record<string, string> = {\n READY: \"#22c55e\",\n FAILED: \"#ef4444\",\n CANCELLED: \"#ef4444\",\n};\n\nfunction statusColor(status: string): string {\n return STATUS_COLOR[status] ?? \"#6366f1\";\n}\n\nfunction isProcessing(status: string): boolean {\n return [\"CREATED\", \"UPLOADING\", \"INGESTING\", \"PROCESSING\"].includes(status);\n}\n\nexport function FileCard({\n fileId,\n pollInterval = 3000,\n actions = [\"preview\", \"copy-url\"],\n onPreview,\n onCopyUrl,\n onDelete,\n className = \"\",\n style,\n}: FileCardProps) {\n const { file, loading } = useFileStatus(fileId, { pollInterval });\n\n if (loading && !file) {\n return (\n <div\n className={`flex flex-col rounded-xl border border-slate-200 bg-slate-50 overflow-hidden w-[220px] p-4${className}`}\n style={style}\n >\n <span className=\"text-[13px] text-slate-400\">Loading...</span>\n </div>\n );\n }\n\n if (!file) return null;\n\n const status = (file as unknown as { status: string }).status;\n const isImg = file.mimeType.startsWith(\"image/\");\n const isVid = file.mimeType.startsWith(\"video/\");\n const showThumb = isImg || isVid;\n const progress = (file as unknown as { progress?: number }).progress ?? null;\n const ext = file.originalName.split(\".\").pop()?.toUpperCase();\n\n return (\n <div\n className={`flex flex-col rounded-xl border border-slate-200 bg-slate-50 overflow-hidden w-[220px]${className}`}\n style={style}\n >\n {/* Thumbnail / Icon area */}\n <div className=\"relative h-[130px] bg-slate-100 shrink-0\">\n {showThumb ? (\n <Thumbnail\n fileKey={file.key}\n mimeType={file.mimeType}\n width=\"100%\"\n height={130}\n borderRadius=\"0\"\n style={{ display: \"block\" }}\n />\n ) : (\n <div className=\"h-full flex items-center justify-center\">\n <FileIcon mimeType={file.mimeType} name={file.originalName} iconSize={44} />\n </div>\n )}\n\n <span\n className=\"absolute top-2 right-2 text-[10px] font-bold tracking-[0.05em] py-0.5 px-2 rounded-full backdrop-blur-sm bg-black/55\"\n style={{ color: statusColor(status) }}\n >\n {STATUS_LABEL[status] ?? status}\n </span>\n\n {ext && (\n <span className=\"absolute top-2 left-2 text-[9px] font-bold tracking-[0.06em] py-0.5 px-1.5 rounded-md backdrop-blur-sm bg-black/45 text-white uppercase\">\n {ext}\n </span>\n )}\n </div>\n\n {/* Body */}\n <div className=\"px-3 py-2.5 flex flex-col gap-1\">\n <span\n className=\"text-[13px] font-semibold text-slate-900 overflow-hidden text-ellipsis whitespace-nowrap\"\n title={file.originalName}\n >\n {file.originalName}\n </span>\n <span className=\"text-[11px] text-slate-400\">\n {formatBytes(file.size)}\n {file.metadata?.width && file.metadata?.height\n ? ` · ${file.metadata.width}×${file.metadata.height}`\n : \"\"}\n {file.metadata?.duration\n ? ` · ${Math.round(file.metadata.duration)}s`\n : \"\"}\n </span>\n\n {isProcessing(status) && (\n <div className=\"mt-1\">\n <ProgressBar progress={progress ?? 0} />\n <span className=\"text-[10px] text-slate-400 mt-0.5 block\">\n {STATUS_LABEL[status]}\n {progress != null ? ` · ${progress}%` : \"\"}\n </span>\n </div>\n )}\n\n {actions.length > 0 && (\n <div className=\"flex gap-1.5 mt-1.5 flex-wrap\">\n {actions.includes(\"preview\") && onPreview && (\n <button\n className=\"inline-flex items-center justify-center gap-1.5 text-xs font-semibold py-1 px-3 rounded-lg border border-slate-200 bg-transparent text-slate-900 cursor-pointer transition-colors hover:bg-slate-100\"\n onClick={() => onPreview(fileId)}\n >\n Preview\n </button>\n )}\n {actions.includes(\"copy-url\") && onCopyUrl && (\n <button\n className=\"inline-flex items-center justify-center gap-1.5 text-xs font-semibold py-1 px-3 rounded-lg border border-slate-200 bg-transparent text-slate-900 cursor-pointer transition-colors hover:bg-slate-100\"\n onClick={() => {\n const url = `${file.key}`;\n navigator.clipboard.writeText(url).catch(() => undefined);\n onCopyUrl(url);\n }}\n >\n Copy URL\n </button>\n )}\n {actions.includes(\"delete\") && onDelete && (\n <button\n className=\"inline-flex items-center justify-center gap-1.5 text-xs font-semibold py-1 px-3 rounded-lg border-transparent bg-red-500/10 text-red-500 cursor-pointer transition-colors hover:bg-red-500/20\"\n onClick={() => onDelete(fileId)}\n >\n Delete\n </button>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { useEffect, type KeyboardEvent } from \"react\";\nimport { useFileStatus, useSignedUrl } from \"@geekapps/silo-nextjs\";\nimport { FileIcon } from \"./FileIcon.js\";\nimport { ProgressBar } from \"./ProgressBar.js\";\nimport { formatBytes } from \"../utils/format.js\";\n\nexport interface FilePreviewProps {\n fileId: string | null;\n onClose: () => void;\n pollInterval?: number;\n}\n\nconst STATUS_LABEL: Record<string, string> = {\n CREATED: \"Created\",\n UPLOADING: \"Uploading\",\n INGESTING: \"Ingesting\",\n PROCESSING: \"Processing\",\n READY: \"Ready\",\n FAILED: \"Failed\",\n CANCELLED: \"Cancelled\",\n};\n\nfunction isProcessing(status: string) {\n return [\"CREATED\", \"UPLOADING\", \"INGESTING\", \"PROCESSING\"].includes(status);\n}\n\nfunction formatDate(iso: string) {\n return new Date(iso).toLocaleString(undefined, { dateStyle: \"medium\", timeStyle: \"short\" });\n}\n\nexport function FilePreview({ fileId, onClose, pollInterval = 3000 }: FilePreviewProps) {\n const { file, loading } = useFileStatus(fileId ?? undefined, {\n ...(fileId ? { pollInterval } : {}),\n });\n\n const status = (file as unknown as { status?: string })?.status ?? \"\";\n const { url } = useSignedUrl(file?.key ?? null);\n\n useEffect(() => {\n const handler = (e: globalThis.KeyboardEvent) => { if (e.key === \"Escape\") onClose(); };\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n }, [onClose]);\n\n if (!fileId) return null;\n\n const isImg = file?.mimeType.startsWith(\"image/\");\n const isVid = file?.mimeType.startsWith(\"video/\");\n const progress = (file as unknown as { progress?: number })?.progress ?? null;\n\n return (\n <>\n {/* Backdrop */}\n <div\n className=\"fixed inset-0 z-[1000] bg-black/60 backdrop-blur-md\"\n onClick={onClose}\n aria-hidden\n />\n\n {/* Dialog */}\n <div\n className=\"fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 z-[1001] w-[min(92vw,560px)] max-h-[90vh] flex flex-col rounded-2xl bg-white shadow-[0_24px_80px_rgba(0,0,0,0.35)] overflow-hidden\"\n role=\"dialog\"\n aria-modal\n aria-label={file?.originalName ?? \"File preview\"}\n onKeyDown={(e: KeyboardEvent) => { if (e.key === \"Escape\") onClose(); }}\n >\n {/* Header */}\n <div className=\"flex items-center gap-3 px-5 py-4 border-b border-slate-200\">\n <span className=\"flex-1 text-[14px] font-semibold text-slate-900 overflow-hidden text-ellipsis whitespace-nowrap\">\n {file?.originalName ?? \"Loading...\"}\n </span>\n <button\n className=\"bg-none border-none cursor-pointer text-base text-slate-400 leading-none p-0.5 px-1 shrink-0 hover:text-slate-600 transition-colors\"\n onClick={onClose}\n aria-label=\"Close\"\n >\n ✕\n </button>\n </div>\n\n {/* Preview area */}\n <div className=\"flex-1 flex items-center justify-center bg-[#0f0f0f] min-h-[240px] relative\">\n {loading && !file && (\n <span className=\"text-[13px] text-slate-400\">Loading...</span>\n )}\n\n {file && isImg && url && (\n <img\n src={url}\n alt={file.originalName}\n className=\"max-w-full max-h-[420px] object-contain block\"\n />\n )}\n\n {file && isVid && url && (\n <video\n src={url}\n controls\n className=\"max-w-full max-h-[420px] block\"\n />\n )}\n\n {file && !isImg && !isVid && (\n <div className=\"flex flex-col items-center gap-3 p-10\">\n <FileIcon mimeType={file.mimeType} name={file.originalName} iconSize={64} />\n <span className=\"text-[13px] text-slate-400\">No preview available</span>\n </div>\n )}\n\n {file && isProcessing(status) && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center gap-3 bg-black/65\">\n <span className=\"text-white text-[14px] font-semibold\">{STATUS_LABEL[status]}</span>\n <div className=\"w-[200px]\">\n <ProgressBar progress={progress ?? 0} />\n </div>\n {progress != null && (\n <span className=\"text-[12px] text-slate-400\">{progress}%</span>\n )}\n </div>\n )}\n </div>\n\n {/* Metadata */}\n {file && (\n <div className=\"px-5 py-3.5 border-t border-slate-200 flex flex-col gap-2\">\n <div className=\"grid gap-x-4 gap-y-1.5 items-baseline\" style={{ gridTemplateColumns: \"auto 1fr\" }}>\n <MetaRow label=\"Size\" value={formatBytes(file.size)} />\n <MetaRow label=\"Type\" value={file.mimeType} />\n <MetaRow label=\"Bucket\" value={(file as unknown as { bucketName?: string }).bucketName ?? file.bucket} />\n <MetaRow label=\"Status\" value={STATUS_LABEL[status] ?? status} highlight={status === \"READY\"} />\n {file.metadata?.width && <MetaRow label=\"Dimensions\" value={`${file.metadata.width}×${file.metadata.height}`} />}\n {file.metadata?.duration && <MetaRow label=\"Duration\" value={`${Math.round(file.metadata.duration)}s`} />}\n {file.metadata?.videoCodec && <MetaRow label=\"Codec\" value={file.metadata.videoCodec} />}\n <MetaRow label=\"Uploaded\" value={formatDate(file.createdAt)} />\n </div>\n\n <div className=\"flex gap-1.5 flex-wrap mt-1\">\n {file.metadata?.hasHls && <Badge>HLS</Badge>}\n {file.metadata?.hasAv1 && <Badge>AV1</Badge>}\n {file.isPrivate ? <Badge muted>Private</Badge> : <Badge>Public</Badge>}\n </div>\n\n {url && (\n <button\n className=\"w-full inline-flex items-center justify-center gap-1.5 text-xs font-semibold py-1.5 px-3 rounded-lg border border-slate-200 bg-transparent text-slate-900 cursor-pointer transition-colors hover:bg-slate-100 mt-1\"\n onClick={() => navigator.clipboard.writeText(url).catch(() => undefined)}\n >\n Copy URL\n </button>\n )}\n </div>\n )}\n </div>\n </>\n );\n}\n\nfunction MetaRow({ label, value, highlight }: { label: string; value: string; highlight?: boolean }) {\n return (\n <>\n <span className=\"text-[11px] text-slate-400 font-medium\">{label}</span>\n <span className={`text-[12px]${highlight ? \"text-green-500 font-semibold\" : \"text-slate-900\"}`}>\n {value}\n </span>\n </>\n );\n}\n\nfunction Badge({ children, muted }: { children: React.ReactNode; muted?: boolean }) {\n return (\n <span\n className={`inline-flex text-[10px] font-bold tracking-[0.05em] py-0.5 px-2 rounded-full border border-slate-200${\n muted ? \"text-slate-400\" : \"text-indigo-500\"\n }`}\n >\n {children}\n </span>\n );\n}\n"]}
|