@geekapps/silo-elements-nextjs 0.2.65 → 0.2.67

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/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: \"var(--silo-text-muted)\" }}>\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 var(--silo-accent)\", background: \"var(--silo-accent)\", color: \"#fff\", padding: \"4px 12px\", borderRadius: 6, fontSize: 12, fontWeight: 600, cursor: \"pointer\" }\n : { border: \"1px solid var(--silo-border)\", background: \"transparent\", color: \"var(--silo-text)\", 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 <label className=\"flex items-center gap-2 cursor-pointer select-none\">\n <span\n onClick={() => onChange({ ...value, optimize: !optimize })}\n style={{ position: \"relative\", display: \"inline-block\", width: 36, height: 20, borderRadius: 10, flexShrink: 0, cursor: \"pointer\", background: optimize ? \"var(--silo-accent)\" : \"var(--silo-border)\", transition: \"background 150ms\" }}\n >\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,.2)\", transition: \"left 150ms\" }} />\n </span>\n <span style={{ fontSize: 12, fontWeight: 500, color: \"var(--silo-text)\" }}>Otimizar tamanho</span>\n <span style={{ fontSize: 11, color: \"var(--silo-text-muted)\" }}>{optimize ? \"Qualidade 85 — menor tamanho\" : \"Qualidade máxima\"}</span>\n </label>\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 var(--silo-accent)\", background: \"var(--silo-accent)\", color: \"#fff\", padding: \"4px 10px\", borderRadius: 6, fontSize: 12, fontWeight: 600, cursor: \"pointer\" }\n : { border: \"1px solid var(--silo-border)\", background: \"transparent\", color: \"var(--silo-text)\", padding: \"4px 10px\", borderRadius: 6, fontSize: 12, fontWeight: 600, cursor: \"pointer\" };\n}\n\nfunction Toggle({ checked, onToggle, label }: { checked: boolean; onToggle: () => void; label: string }) {\n return (\n <label style={{ display: \"inline-flex\", alignItems: \"center\", gap: 6, cursor: \"pointer\", userSelect: \"none\", fontSize: 12, color: \"var(--silo-text)\", fontWeight: 500 }} onClick={onToggle}>\n <span style={{ position: \"relative\", display: \"inline-block\", width: 32, height: 18, borderRadius: 9, flexShrink: 0, cursor: \"pointer\", background: checked ? \"var(--silo-accent)\" : \"var(--silo-border)\", 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,.2)\", transition: \"left 150ms\" }} />\n </span>\n {label}\n </label>\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: \"var(--silo-text-muted)\" }}>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: \"var(--silo-text-muted)\" }}>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 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 if (multiple && files.length > 1) {\n try {\n const results = await batch.upload(files, {\n ...(bucket !== undefined && { bucket }),\n image: effectiveImage,\n video: effectiveVideo,\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 result = await single.upload(file, {\n ...(bucket !== undefined && { bucket }),\n image: effectiveImage,\n video: effectiveVideo,\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, 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 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 const settingsCloseTimerRef = useRef<number | null>(null);\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 [ageRatingOverlay, setAgeRatingOverlay] = useState(false);\n const ageRatingTimerRef = useRef<number | null>(null);\n const [clickIcon, setClickIcon] = useState<\"play\" | \"pause\" | null>(null);\n const clickIconTimerRef = useRef<number | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [controlsVisible, setControlsVisible] = useState(true);\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 }, [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 = CSS visible state (for transition in/out)\n const openSettings = useCallback(() => {\n setSettingsOpen(true);\n setSettingsTab(\"root\");\n window.setTimeout(() => setSettingsVisible(true), 10);\n }, []);\n\n const closeSettings = useCallback(() => {\n setSettingsVisible(false);\n if (settingsCloseTimerRef.current) window.clearTimeout(settingsCloseTimerRef.current);\n settingsCloseTimerRef.current = window.setTimeout(() => setSettingsOpen(false), 200);\n }, []);\n\n // controls visibility handled via CSS transition on the chrome div\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 onPlay = () => {\n setIsPlaying(true);\n setHasPlayed((prev) => {\n if (!prev && parsed.ageRating?.data) {\n setAgeRatingOverlay(true);\n if (ageRatingTimerRef.current) window.clearTimeout(ageRatingTimerRef.current);\n ageRatingTimerRef.current = window.setTimeout(() => setAgeRatingOverlay(false), 4000);\n }\n return true;\n });\n showControlsTemporarily();\n };\n\n const onPause = () => {\n setIsPlaying(false);\n setControlsVisible(true);\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 };\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 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 <style>{`@keyframes silo-fade-out{0%{opacity:1}70%{opacity:1}100%{opacity:0}}`}</style>\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 — appears for 4s on first play */}\n {ageRatingOverlay && 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 className=\"pointer-events-none absolute inset-0 z-40 flex items-start justify-start p-4\"\n style={{ animation: \"silo-fade-out 4s forwards\" }}\n >\n <div className=\"flex items-center gap-2.5 rounded-lg px-3 py-2\" style={{ background: \"rgba(0,0,0,0.72)\", backdropFilter: \"blur(8px)\" }}>\n {info?.imageUrl ? (\n <img src={info.imageUrl} alt={code} className=\"h-10 w-auto object-contain\" />\n ) : (\n <span className=\"flex h-10 min-w-10 items-center justify-center rounded border border-white/30 px-1.5 text-sm font-bold text-white\">\n {code}\n </span>\n )}\n {(info?.title || info?.description) && (\n <div className=\"flex flex-col\">\n {info.title && <span className=\"text-xs font-semibold text-white\">{info.title}</span>}\n {info.description && <span className=\"text-[10px] text-white/60 leading-tight max-w-48\">{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 className=\"pointer-events-none absolute inset-0 z-10 grid place-items-center\"\n style={{\n opacity: clickIcon ? 1 : 0,\n transition: clickIcon\n ? \"opacity 0.08s ease-in\"\n : \"opacity 0.45s ease-out\",\n }}\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 transition-opacity duration-200 ${\n isFullscreen ? \"justify-between\" : \"justify-end\"\n } ${controlsVisible ? \"opacity-100\" : \"opacity-0 pointer-events-none\"}`}\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 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: settingsVisible ? 1 : 0,\n transform: settingsVisible ? \"translateY(0) scale(1)\" : \"translateY(8px) scale(0.97)\",\n transition: \"opacity 0.18s ease, transform 0.18s ease\",\n }}\n >\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 </>\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 className=\"absolute left-0 right-0 top-1/2 -translate-y-1/2 overflow-hidden rounded-full bg-white/18\"\n style={{\n height: isDragging ? \"7px\" : isHoveringProgress ? \"5px\" : \"3px\",\n transition: \"height 0.15s ease\",\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 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: isDragging ? \"18px\" : isHoveringProgress ? \"14px\" : \"10px\",\n height: isDragging ? \"18px\" : isHoveringProgress ? \"14px\" : \"10px\",\n transition: \"width 0.2s cubic-bezier(0.34,1.56,0.64,1), height 0.2s cubic-bezier(0.34,1.56,0.64,1)\",\n }}\n />\n\n {/* Chapter markers */}\n {chapters.length > 0 && duration > 0 && chapters.map((ch, i) => (\n <div\n key={i}\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: isDragging ? \"7px\" : isHoveringProgress ? \"5px\" : \"3px\", transition: \"height 0.15s ease\" }}\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 <span\n className=\"rounded-md px-2 py-0.5 text-[11px] font-semibold tabular-nums text-white/90\"\n style={{ background: \"rgba(0,0,0,0.55)\", backdropFilter: \"blur(6px)\" }}\n >\n {formatTime(preview.time)}\n </span>\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 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 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 style={{\n width: expanded ? \"64px\" : \"0px\",\n opacity: expanded ? 1 : 0,\n transition: \"width 0.2s ease, opacity 0.2s ease\",\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 className=\"absolute inset-x-0 rounded-full bg-white/20\"\n style={{\n height: dragging ? \"5px\" : hovered ? \"4px\" : \"3px\",\n transition: \"height 0.15s ease\",\n }}\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 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: dragging ? \"14px\" : hovered ? \"11px\" : \"0px\",\n height: dragging ? \"14px\" : hovered ? \"11px\" : \"0px\",\n transition: \"width 0.15s ease, height 0.15s ease\",\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 = [\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 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 if (multiple && files.length > 1) {\n try {\n const results = await batch.upload(files, {\n ...(bucket !== undefined && { bucket }),\n image: effectiveImage,\n video: effectiveVideo,\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 result = await single.upload(file, {\n ...(bucket !== undefined && { bucket }),\n image: effectiveImage,\n video: effectiveVideo,\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, 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 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 const settingsCloseTimerRef = useRef<number | null>(null);\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 [ageRatingOverlay, setAgeRatingOverlay] = useState(false);\n const ageRatingTimerRef = useRef<number | null>(null);\n const [clickIcon, setClickIcon] = useState<\"play\" | \"pause\" | null>(null);\n const clickIconTimerRef = useRef<number | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [controlsVisible, setControlsVisible] = useState(true);\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 }, [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 = CSS visible state (for transition in/out)\n const openSettings = useCallback(() => {\n setSettingsOpen(true);\n setSettingsTab(\"root\");\n window.setTimeout(() => setSettingsVisible(true), 10);\n }, []);\n\n const closeSettings = useCallback(() => {\n setSettingsVisible(false);\n if (settingsCloseTimerRef.current) window.clearTimeout(settingsCloseTimerRef.current);\n settingsCloseTimerRef.current = window.setTimeout(() => setSettingsOpen(false), 200);\n }, []);\n\n // controls visibility handled via CSS transition on the chrome div\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 onPlay = () => {\n setIsPlaying(true);\n setHasPlayed((prev) => {\n if (!prev && parsed.ageRating?.data) {\n setAgeRatingOverlay(true);\n if (ageRatingTimerRef.current) window.clearTimeout(ageRatingTimerRef.current);\n ageRatingTimerRef.current = window.setTimeout(() => setAgeRatingOverlay(false), 4000);\n }\n return true;\n });\n showControlsTemporarily();\n };\n\n const onPause = () => {\n setIsPlaying(false);\n setControlsVisible(true);\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 };\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 <style>{`@keyframes silo-fade-out{0%{opacity:1}70%{opacity:1}100%{opacity:0}}`}</style>\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 — appears for 4s on first play */}\n {ageRatingOverlay && 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 className=\"pointer-events-none absolute inset-0 z-40 flex items-start justify-start p-4\"\n style={{ animation: \"silo-fade-out 4s forwards\" }}\n >\n <div className=\"flex items-center gap-2.5 rounded-lg px-3 py-2\" style={{ background: \"rgba(0,0,0,0.72)\", backdropFilter: \"blur(8px)\" }}>\n {info?.imageUrl ? (\n <img src={info.imageUrl} alt={code} className=\"h-10 w-auto object-contain\" />\n ) : (\n <span className=\"flex h-10 min-w-10 items-center justify-center rounded border border-white/30 px-1.5 text-sm font-bold text-white\">\n {code}\n </span>\n )}\n {(info?.title || info?.description) && (\n <div className=\"flex flex-col\">\n {info.title && <span className=\"text-xs font-semibold text-white\">{info.title}</span>}\n {info.description && <span className=\"text-[10px] text-white/60 leading-tight max-w-48\">{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 className=\"pointer-events-none absolute inset-0 z-10 grid place-items-center\"\n style={{\n opacity: clickIcon ? 1 : 0,\n transition: clickIcon\n ? \"opacity 0.08s ease-in\"\n : \"opacity 0.45s ease-out\",\n }}\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 transition-opacity duration-200 ${\n isFullscreen ? \"justify-between\" : \"justify-end\"\n } ${controlsVisible ? \"opacity-100\" : \"opacity-0 pointer-events-none\"}`}\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 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: settingsVisible ? 1 : 0,\n transform: settingsVisible ? \"translateY(0) scale(1)\" : \"translateY(8px) scale(0.97)\",\n transition: \"opacity 0.18s ease, transform 0.18s ease\",\n }}\n >\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 </>\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 className=\"absolute left-0 right-0 top-1/2 -translate-y-1/2 overflow-hidden rounded-full bg-white/18\"\n style={{\n height: isDragging ? \"7px\" : isHoveringProgress ? \"5px\" : \"3px\",\n transition: \"height 0.15s ease\",\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 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: isDragging ? \"18px\" : isHoveringProgress ? \"14px\" : \"10px\",\n height: isDragging ? \"18px\" : isHoveringProgress ? \"14px\" : \"10px\",\n transition: \"width 0.2s cubic-bezier(0.34,1.56,0.64,1), height 0.2s cubic-bezier(0.34,1.56,0.64,1)\",\n }}\n />\n\n {/* Chapter markers */}\n {chapters.length > 0 && duration > 0 && chapters.map((ch, i) => (\n <div\n key={i}\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: isDragging ? \"7px\" : isHoveringProgress ? \"5px\" : \"3px\", transition: \"height 0.15s ease\" }}\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 <span\n className=\"rounded-md px-2 py-0.5 text-[11px] font-semibold tabular-nums text-white/90\"\n style={{ background: \"rgba(0,0,0,0.55)\", backdropFilter: \"blur(6px)\" }}\n >\n {formatTime(preview.time)}\n </span>\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 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 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 style={{\n width: expanded ? \"64px\" : \"0px\",\n opacity: expanded ? 1 : 0,\n transition: \"width 0.2s ease, opacity 0.2s ease\",\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 className=\"absolute inset-x-0 rounded-full bg-white/20\"\n style={{\n height: dragging ? \"5px\" : hovered ? \"4px\" : \"3px\",\n transition: \"height 0.15s ease\",\n }}\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 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: dragging ? \"14px\" : hovered ? \"11px\" : \"0px\",\n height: dragging ? \"14px\" : hovered ? \"11px\" : \"0px\",\n transition: \"width 0.15s ease, height 0.15s ease\",\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"]}