@geekapps/silo-elements-nextjs 0.2.34 → 0.2.36

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/VideoPlayer.tsx"],"names":[],"mappings":"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","file":"VideoPlayer.js","sourcesContent":["\"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,\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 SourcesProps = {\n children: ReactNode;\n};\n\nexport type SubtitleProps = {\n src: string;\n srclang: string;\n label: string;\n default?: boolean;\n};\n\nexport type SubtitlesProps = {\n children: ReactNode;\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 StoryboardProps = {\n src?: string;\n fallbackImage?: string;\n width?: number;\n height?: number;\n children?: ReactNode;\n};\n\ntype ParsedStoryboard = Omit<StoryboardProps, \"children\"> & {\n frames: StoryboardFrameProps[];\n};\n\ntype ParsedVideoChildren = {\n sources: SourceProps[];\n subtitles: SubtitleProps[];\n storyboard?: ParsedStoryboard;\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 poster?: 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 = \"root\" | \"quality\" | \"subtitles\" | \"subtitles-style\" | \"audio\" | \"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 Sources(_props: SourcesProps) {\n return null;\n}\nSources.displayName = \"SiloSources\";\n\nexport function Source(_props: SourceProps) {\n return null;\n}\nSource.displayName = \"SiloSource\";\n\nexport function Subtitles(_props: SubtitlesProps) {\n return null;\n}\nSubtitles.displayName = \"SiloSubtitles\";\n\nexport function Subtitle(_props: SubtitleProps) {\n return null;\n}\nSubtitle.displayName = \"SiloSubtitle\";\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 Video({\n title,\n description,\n poster,\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 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 = parsed.subtitles.find((subtitle) => subtitle.default);\n return track?.srclang ?? \"off\";\n }, [parsed.subtitles]);\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<{ id: number; label: string }[]>([]);\n const [selectedAudio, setSelectedAudio] = useState<number>(0);\n const [settingsOpen, setSettingsOpen] = useState(false);\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 [storyboardCues, setStoryboardCues] = useState<StoryboardFrameProps[]>(\n [],\n );\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 dragPointerIdRef = useRef<number | null>(null);\n const [isPlaying, setIsPlaying] = useState(false);\n const [hasPlayed, setHasPlayed] = useState(false);\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 const [error, setError] = useState<string | null>(null);\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 Array.from(video.textTracks).forEach((track) => {\n if (track.kind === \"metadata\") return; // don't touch metadata tracks (storyboard)\n track.mode = mode !== \"off\" && track.language === mode ? \"hidden\" : \"disabled\";\n });\n if (mode === \"off\") setActiveCue(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 // 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 !parsed.subtitles.some((subtitle) => subtitle.srclang === subtitleMode)\n ) {\n setSubtitleMode(initialSubtitleMode);\n }\n }, [subtitleMode, parsed.subtitles, initialSubtitleMode]);\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(true);\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(() => { subtitleModeRef.current = subtitleMode; }, [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\") { setActiveCue(null); return; }\n const track = Array.from(video.textTracks).find((t) => t.language === mode && t.kind !== \"metadata\");\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 };\n\n bindTracks();\n video.textTracks.addEventListener(\"addtrack\", bindTracks);\n return () => {\n video.textTracks.removeEventListener(\"addtrack\", bindTracks);\n Array.from(video.textTracks).forEach((t) => t.removeEventListener(\"cuechange\", onCueChange));\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(document.fullscreenElement || doc.webkitFullscreenElement);\n const iosVideoFullscreen = Boolean(video?.webkitDisplayingFullscreen);\n setIsFullscreen(nativeFullscreen || iosVideoFullscreen);\n };\n\n document.addEventListener(\"fullscreenchange\", onFullscreenChange);\n document.addEventListener(\"webkitfullscreenchange\", onFullscreenChange as EventListener);\n video?.addEventListener(\"webkitbeginfullscreen\", onFullscreenChange as EventListener);\n video?.addEventListener(\"webkitendfullscreen\", onFullscreenChange as EventListener);\n\n return () => {\n document.removeEventListener(\"fullscreenchange\", onFullscreenChange);\n document.removeEventListener(\"webkitfullscreenchange\", onFullscreenChange as EventListener);\n video?.removeEventListener(\"webkitbeginfullscreen\", onFullscreenChange as EventListener);\n video?.removeEventListener(\"webkitendfullscreen\", onFullscreenChange as EventListener);\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) { setPlayerHeight(entry.contentRect.height); setPlayerWidth(entry.contentRect.width); }\n });\n ro.observe(player);\n return () => ro.disconnect();\n }, []);\n\n useEffect(() => {\n let cancelled = false;\n\n async function loadStoryboard() {\n if (!parsed.storyboard) {\n setStoryboardCues([]);\n return;\n }\n\n if (parsed.storyboard.frames.length > 0) {\n setStoryboardCues(parsed.storyboard.frames);\n return;\n }\n\n if (!parsed.storyboard.src) {\n setStoryboardCues([]);\n return;\n }\n\n try {\n const response = await fetch(parsed.storyboard.src);\n\n if (!response.ok) {\n throw new Error(\"Storyboard not found\");\n }\n\n const text = await response.text();\n const cues = parseStoryboardVtt(\n text,\n new URL(parsed.storyboard.src, window.location.href).href,\n );\n\n if (!cancelled) {\n setStoryboardCues(cues);\n }\n } catch {\n if (!cancelled && parsed.storyboard.fallbackImage) {\n setStoryboardCues([\n {\n start: 0,\n end: Number.MAX_SAFE_INTEGER,\n image: parsed.storyboard.fallbackImage,\n w: parsed.storyboard.width ?? 160,\n h: parsed.storyboard.height ?? 90,\n },\n ]);\n }\n }\n }\n\n loadStoryboard();\n\n return () => {\n cancelled = true;\n };\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 setError(null);\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 setSettingsOpen(false);\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 setError(\"Não foi possível reproduzir o stream MPEG-DASH.\");\n setIsLoading(false);\n });\n\n dash.initialize(video, activeSource.src, false);\n } catch {\n if (!cancelled) {\n setError(\"Não foi possível carregar o player MPEG-DASH.\");\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: 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(tracks.map((t: any, i: number) => ({\n id: i,\n label: t.name ?? t.lang ?? `Track ${i + 1}`,\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(tracks.map((t: any, i: number) => ({\n id: i,\n label: t.name ?? t.lang ?? `Track ${i + 1}`,\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 setError(\"Não foi possível reproduzir o stream HLS.\");\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 setError(\"Este navegador não suporta HLS.\");\n setIsLoading(false);\n } catch {\n if (!cancelled) {\n setError(\"Não foi possível carregar o player HLS.\");\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 try {\n const wasPaused = video.paused;\n if (wasPaused) {\n await video.play();\n } else {\n video.pause();\n }\n if (clickIconTimerRef.current) window.clearTimeout(clickIconTimerRef.current);\n setClickIcon(wasPaused ? \"play\" : \"pause\");\n clickIconTimerRef.current = window.setTimeout(() => setClickIcon(null), 600);\n } catch {\n setError(\"O navegador bloqueou a reprodução automática.\");\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(document.fullscreenElement || doc.webkitFullscreenElement);\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 setError(\"Não foi possível alterar o modo fullscreen.\");\n }\n }, []);\n\n const changeAudio = useCallback((trackId: number) => {\n setSelectedAudio(trackId);\n setSettingsOpen(false);\n if (hlsRef.current) {\n hlsRef.current.audioTrack = trackId;\n }\n }, []);\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 setSettingsOpen(false);\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],\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 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 const cue = findStoryboardCue(storyboardCues, time);\n if (!cue) { setPreview(null); return; }\n setPreview({ cue, time, left: Math.max(80, Math.min(x, rect.width - 80)) });\n },\n [duration, storyboardCues],\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 handleProgressPointerLeave = useCallback(() => {\n if (!isDragging) setPreview(null);\n }, [isDragging]);\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{\" \"}\n <code>{\"<Source />\"}</code>.\n </div>\n );\n }\n\n return (\n <div\n ref={containerRef}\n className={`@container mx-auto w-full max-w-6xl ${className ?? \"\"}`}\n >\n <div\n ref={playerRef}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n onMouseMove={showControlsTemporarily}\n onMouseLeave={() => {\n if (isPlaying && autoHideControls) {\n setControlsVisible(false);\n }\n }}\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={fixedHeight\n ? { height: typeof fixedHeight === \"number\" ? `${fixedHeight}px` : fixedHeight }\n : maxHeight\n ? { maxHeight: typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight, aspectRatio: \"16/9\" }\n : { aspectRatio: \"16/9\" }}\n >\n <video\n ref={videoRef}\n className=\"h-full w-full object-contain\"\n playsInline\n preload=\"metadata\"\n crossOrigin=\"anonymous\"\n >\n {parsed.subtitles.map((subtitle) => (\n <track\n key={`${activeSource.src}-${subtitle.srclang}`}\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 {/* 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={{ opacity: clickIcon ? 1 : 0, transition: clickIcon ? \"opacity 0.08s ease-in\" : \"opacity 0.45s ease-out\" }}\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-5 @sm:size-7 @lg:size-8\" />\n ) : (\n <Play className=\"ml-0.5 size-5 @sm:size-7 @lg:size-8\" />\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 {error && (\n <div className=\"absolute inset-x-8 top-1/2 z-40 -translate-y-1/2 rounded-2xl border border-white/10 bg-black/75 p-5 text-center text-sm text-white shadow-2xl backdrop-blur-xl\">\n {error}\n </div>\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 onClick={(e) => e.stopPropagation()} 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 <div>\n {title && (\n <h1 className=\"text-sm font-bold tracking-wide @sm:text-base @md:text-lg @lg:text-xl\" style={{ textShadow: \"0 1px 6px rgba(0,0,0,0.6)\" }}>\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 onClick={(e) => e.stopPropagation()} className=\"relative z-10 px-4 pb-4 text-white\">\n {/* Settings panel — nested, one sub-menu at a time */}\n {settingsOpen && (\n <>\n <div className=\"fixed inset-0 z-70\" onClick={() => setSettingsOpen(false)} />\n <div 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\" style={{ width: Math.min(224, Math.max(180, (playerWidth || 640) * 0.22)) + \"px\", animation: \"spFadeIn 0.15s ease\" }}>\n\n {/* Root menu */}\n {settingsTab === \"root\" && (\n <div>\n {([\n { id: \"quality\" as SettingsTab, label: \"Qualidade\", value: qualities.find((q) => q.id === selectedQuality)?.label ?? \"Auto\" },\n ...(parsed.subtitles.length > 0 ? [{ id: \"subtitles\" as SettingsTab, label: \"Legendas\", value: subtitleStyle.track === \"off\" ? \"Desligado\" : parsed.subtitles.find((s) => s.srclang === subtitleStyle.track)?.label ?? subtitleStyle.track }] : []),\n ...(audioTracks.length > 1 ? [{ id: \"audio\" as SettingsTab, label: \"Áudio\", value: audioTracks.find((t) => t.id === selectedAudio)?.label ?? \"\" }] : []),\n { id: \"playback\" as SettingsTab, label: \"Velocidade\", value: playbackRate === 1 ? \"Normal\" : `${playbackRate}×` },\n ] as { id: SettingsTab; label: string; value: string }[]).map((item) => (\n <button key={item.id} type=\"button\" 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 className=\"size-3 opacity-50\" viewBox=\"0 0 12 12\" fill=\"none\"><path d=\"M4.5 3l3 3-3 3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>\n </span>\n </button>\n ))}\n </div>\n )}\n\n {/* Quality sub-menu */}\n {settingsTab === \"quality\" && (\n <div>\n <button type=\"button\" 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 className=\"size-3.5\" viewBox=\"0 0 12 12\" fill=\"none\"><path d=\"M7.5 3L4.5 6l3 3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>\n Qualidade\n </button>\n <div className=\"py-1.5\">\n {[...qualities].reverse().map((quality) => (\n <button key={quality.id} type=\"button\" onClick={() => { changeQuality(quality.id); setSettingsTab(\"root\"); }}\n className=\"flex w-full items-center gap-3 px-4 py-2.5 text-sm transition hover:bg-white/8\"\n >\n <svg className={`size-4 shrink-0 ${selectedQuality === quality.id ? \"text-white\" : \"text-transparent\"}`} viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M3 8l3.5 3.5L13 4.5\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>\n <span className={selectedQuality === quality.id ? \"font-semibold text-white\" : \"text-white/55\"}>\n {quality.label}{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 type=\"button\" 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 className=\"size-3.5\" viewBox=\"0 0 12 12\" fill=\"none\"><path d=\"M7.5 3L4.5 6l3 3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>\n Legendas\n </button>\n <div className=\"py-1.5\">\n {[{ srclang: \"off\", label: \"Desligado\" }, ...parsed.subtitles].map((s) => (\n <button key={s.srclang} type=\"button\"\n onClick={() => { const next = s.srclang === \"off\" ? \"off\" : s.srclang; setSubtitleMode(next); setSubtitleStyle((st) => ({ ...st, track: next })); }}\n className=\"flex w-full items-center gap-3 px-4 py-2.5 text-sm transition hover:bg-white/8\"\n >\n <svg className={`size-4 shrink-0 ${subtitleStyle.track === s.srclang ? \"text-white\" : \"text-transparent\"}`} viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M3 8l3.5 3.5L13 4.5\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>\n <span className={subtitleStyle.track === s.srclang ? \"font-semibold text-white\" : \"text-white/55\"}>{s.label}</span>\n </button>\n ))}\n </div>\n {subtitleStyle.track !== \"off\" && (\n <button type=\"button\" 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 className=\"size-3 opacity-50\" viewBox=\"0 0 12 12\" fill=\"none\"><path d=\"M4.5 3l3 3-3 3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>\n </button>\n )}\n </div>\n )}\n\n {/* Subtitles style sub-menu */}\n {settingsTab === \"subtitles-style\" && (\n <div>\n <button type=\"button\" 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 className=\"size-3.5\" viewBox=\"0 0 12 12\" fill=\"none\"><path d=\"M7.5 3L4.5 6l3 3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></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\">Tamanho</p>\n <div className=\"flex gap-1.5\">\n {([\"small\",\"medium\",\"large\",\"xlarge\"] as const).map((s) => (\n <button key={s} type=\"button\" onClick={() => setSubtitleStyle((st) => ({ ...st, size: s }))}\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\" ? \"P\" : s === \"medium\" ? \"M\" : s === \"large\" ? \"G\" : \"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\">Cor</p>\n <div className=\"flex gap-1.5\">\n {([[\"white\",\"Branco\",\"#fff\"],[\"yellow\",\"Amarelo\",\"#facc15\"],[\"cyan\",\"Ciano\",\"#22d3ee\"]] as const).map(([val, label, color]) => (\n <button key={val} type=\"button\" onClick={() => setSubtitleStyle((st) => ({ ...st, color: val }))}\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\">Fundo</p>\n <div className=\"flex gap-1.5\">\n {([[\"none\",\"Nenhum\"],[\"semi\",\"Semi\"],[\"solid\",\"Sólido\"]] as const).map(([val, label]) => (\n <button key={val} type=\"button\" onClick={() => setSubtitleStyle((st) => ({ ...st, bg: val }))}\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 type=\"button\" 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 className=\"size-3.5\" viewBox=\"0 0 12 12\" fill=\"none\"><path d=\"M7.5 3L4.5 6l3 3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>\n Áudio\n </button>\n <div className=\"py-1.5\">\n {audioTracks.map((track) => (\n <button key={track.id} type=\"button\" onClick={() => { changeAudio(track.id); setSettingsTab(\"root\"); }}\n className=\"flex w-full items-center gap-3 px-4 py-2.5 text-sm transition hover:bg-white/8\"\n >\n <svg className={`size-4 shrink-0 ${selectedAudio === track.id ? \"text-white\" : \"text-transparent\"}`} viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M3 8l3.5 3.5L13 4.5\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>\n <span className={selectedAudio === track.id ? \"font-semibold text-white\" : \"text-white/55\"}>{track.label}</span>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Playback speed sub-menu */}\n {settingsTab === \"playback\" && (\n <div>\n <button type=\"button\" 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 className=\"size-3.5\" viewBox=\"0 0 12 12\" fill=\"none\"><path d=\"M7.5 3L4.5 6l3 3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>\n Velocidade\n </button>\n <div className=\"py-1.5\">\n {PLAYBACK_SPEEDS.map((speed) => (\n <button key={speed} type=\"button\" onClick={() => { setPlaybackRate(speed); setSettingsOpen(false); setSettingsTab(\"root\"); }}\n className=\"flex w-full items-center gap-3 px-4 py-2.5 text-sm transition hover:bg-white/8\"\n >\n <svg className={`size-4 shrink-0 ${playbackRate === speed ? \"text-white\" : \"text-transparent\"}`} viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M3 8l3.5 3.5L13 4.5\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>\n <span className={playbackRate === speed ? \"font-semibold text-white\" : \"text-white/55\"}>{speed === 1 ? \"Normal\" : `${speed}×`}</span>\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n <style>{`@keyframes spFadeIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}`}</style>\n </>\n )}\n\n <div\n ref={progressRef}\n onPointerMove={handleProgressPointerMove}\n onPointerLeave={handleProgressPointerLeave}\n onPointerDown={handleProgressPointerDown}\n onPointerUp={handleProgressPointerUp}\n className=\"group relative mb-3 h-7 cursor-pointer\"\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/22 transition-[height] duration-150\"\n style={{ height: isDragging ? \"6px\" : \"3px\" }}\n >\n <div className=\"absolute inset-y-0 left-0 rounded-full bg-white/30\" style={{ width: `${bufferedPercent}%` }} />\n <div className=\"absolute inset-y-0 left-0 rounded-full bg-white/90\" style={{ width: `${progressPercent}%` }} />\n </div>\n {/* Thumb dot — always visible, grows on hover/drag */}\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 transition-[width,height] duration-100 group-hover:size-4\"\n style={{\n left: `${progressPercent}%`,\n width: isDragging ? \"16px\" : \"10px\",\n height: isDragging ? \"16px\" : \"10px\",\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 bg-white/15 text-white backdrop-blur-sm ring-1 ring-white/15 transition hover:bg-white/25 @sm:size-9\"\n aria-label={isPlaying ? \"Pause\" : \"Play\"}\n >\n {isPlaying ? (\n <Pause className=\"size-4 @sm:size-5\" />\n ) : (\n <Play className=\"ml-0.5 size-4 @sm:size-5\" />\n )}\n </button>\n\n <span className=\"text-[11px] font-medium tabular-nums text-white/80\">\n {formatTime(currentTime)}<span className=\"text-white/30\">/</span><span className=\"text-white/45\">{formatTime(duration)}</span>\n </span>\n </div>\n\n {/* RIGHT group: volume | captions | settings | fullscreen */}\n <div className=\"flex items-center gap-0.5 @sm:gap-1\">\n {/* Volume: mute button always visible, slider appears on group hover */}\n <div className=\"group flex items-center\">\n <button\n type=\"button\"\n onClick={() => setIsMuted((value) => !value)}\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 <div className=\"w-0 overflow-hidden transition-all duration-200 group-hover:w-16 @md:group-hover:w-20\">\n <input\n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.01\"\n value={isMuted ? 0 : volume}\n onChange={(event) => {\n const nextVolume = Number(event.target.value);\n setVolume(nextVolume);\n setIsMuted(nextVolume === 0);\n }}\n className=\"h-1 w-14 accent-white @md:w-20\"\n aria-label=\"Audio level\"\n />\n </div>\n </div>\n\n <div className=\"mx-0.5 h-4 w-px bg-white/20 @md:mx-1\" />\n\n {parsed.subtitles.length > 0 && (\n <button\n type=\"button\"\n onClick={() => setSubtitleMode((m) => m === \"off\" ? (parsed.subtitles[0]?.srclang ?? \"off\") : \"off\")}\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 <Captions className=\"size-4 @sm:size-5\" />\n </button>\n )}\n\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => { setSettingsOpen((v) => !v); setSettingsTab(\"root\"); }}\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 ? <Minimize className=\"size-4 @sm:size-5\" /> : <Maximize className=\"size-4 @sm:size-5\" />}\n </button>\n </div>\n </div>\n </footer>\n </div>\n\n\n {/* Storyboard preview — at player root so z-index is not limited by chrome stacking context */}\n {preview && (() => {\n const srcW = preview.cue.w ?? 160;\n const srcH = preview.cue.h ?? 90;\n const thumbW = Math.max(140, Math.round((playerWidth || 640) * 0.13));\n const thumbH = Math.round(thumbW * (srcH / srcW));\n const scale = thumbW / srcW;\n const isSprite = preview.cue.x != null && preview.cue.y != null;\n return (\n <div\n className=\"pointer-events-none absolute z-60 -translate-x-1/2 -translate-y-2 overflow-hidden rounded-xl shadow-2xl ring-1 ring-white/15\"\n style={{ bottom: controlsVisible ? \"80px\" : \"20px\", left: preview.left, transition: \"bottom 0.2s\" }}\n >\n {isSprite ? (\n <div style={{ width: thumbW, height: thumbH, overflow: \"hidden\" }}>\n <div style={{\n width: srcW,\n height: srcH,\n backgroundImage: `url(${preview.cue.image})`,\n backgroundPosition: `-${preview.cue.x ?? 0}px -${preview.cue.y ?? 0}px`,\n backgroundSize: \"auto\",\n backgroundRepeat: \"no-repeat\",\n transform: `scale(${scale})`,\n transformOrigin: \"top left\",\n }} />\n </div>\n ) : (\n <div style={{\n width: thumbW,\n height: thumbH,\n backgroundImage: `url(${preview.cue.image})`,\n backgroundSize: \"cover\",\n backgroundPosition: \"center\",\n backgroundRepeat: \"no-repeat\",\n }} />\n )}\n </div>\n );\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: subtitleStyle.color === \"yellow\" ? \"#facc15\" : subtitleStyle.color === \"cyan\" ? \"#22d3ee\" : \"#ffffff\",\n backgroundColor: subtitleStyle.bg === \"none\" ? \"transparent\" : subtitleStyle.bg === \"solid\" ? \"rgba(0,0,0,0.9)\" : \"rgba(0,0,0,0.55)\",\n backdropFilter: subtitleStyle.bg === \"semi\" ? \"blur(6px)\" : undefined,\n textShadow: subtitleStyle.bg === \"none\" ? \"0 1px 8px rgba(0,0,0,1), 0 0 16px rgba(0,0,0,0.9)\" : \"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\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 className={`size-1.5 rounded-full ${active ? \"bg-white\" : \"bg-transparent\"}`} />\n {children}\n </button>\n );\n}\n\nfunction parseVideoChildren(children: ReactNode): ParsedVideoChildren {\n const parsed: ParsedVideoChildren = {\n sources: [],\n subtitles: [],\n };\n\n function isType(child: React.ReactElement, fn: { displayName?: string }) {\n if (child.type === fn) return true;\n return (child.type as any)?.displayName === fn.displayName && !!fn.displayName;\n }\n\n React.Children.forEach(children, (child) => {\n if (!React.isValidElement(child)) return;\n\n if (isType(child, Sources)) {\n const element = child as ReactElement<SourcesProps>;\n\n React.Children.forEach(element.props.children, (sourceChild) => {\n if (!React.isValidElement(sourceChild)) return;\n if (!isType(sourceChild, Source)) return;\n\n const sourceElement = sourceChild as ReactElement<SourceProps>;\n parsed.sources.push(sourceElement.props);\n });\n }\n\n if (isType(child, Subtitles)) {\n const element = child as ReactElement<SubtitlesProps>;\n\n React.Children.forEach(element.props.children, (subtitleChild) => {\n if (!React.isValidElement(subtitleChild)) return;\n if (!isType(subtitleChild, Subtitle)) return;\n\n const subtitleElement = subtitleChild as ReactElement<SubtitleProps>;\n parsed.subtitles.push(subtitleElement.props);\n });\n }\n\n if (isType(child, Storyboard)) {\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 if (!isType(frameChild, StoryboardFrame)) 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 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 return cues.find((cue) => time >= cue.start && time <= cue.end) ?? null;\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"]}
1
+ {"version":3,"sources":["../src/VideoPlayer.tsx"],"names":[],"mappings":"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","file":"VideoPlayer.js","sourcesContent":["\"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,\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 SourcesProps = {\n children: ReactNode;\n};\n\nexport type SubtitleProps = {\n src: string;\n srclang: string;\n label: string;\n default?: boolean;\n};\n\nexport type SubtitlesProps = {\n children: ReactNode;\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 StoryboardProps = {\n src?: string;\n fallbackImage?: string;\n width?: number;\n height?: number;\n children?: ReactNode;\n};\n\ntype ParsedStoryboard = Omit<StoryboardProps, \"children\"> & {\n frames: StoryboardFrameProps[];\n};\n\ntype ParsedVideoChildren = {\n sources: SourceProps[];\n subtitles: SubtitleProps[];\n storyboard?: ParsedStoryboard;\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 poster?: 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 = \"root\" | \"quality\" | \"subtitles\" | \"subtitles-style\" | \"audio\" | \"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 Sources(_props: SourcesProps) {\n return null;\n}\nSources.displayName = \"SiloSources\";\n\nexport function Source(_props: SourceProps) {\n return null;\n}\nSource.displayName = \"SiloSource\";\n\nexport function Subtitles(_props: SubtitlesProps) {\n return null;\n}\nSubtitles.displayName = \"SiloSubtitles\";\n\nexport function Subtitle(_props: SubtitleProps) {\n return null;\n}\nSubtitle.displayName = \"SiloSubtitle\";\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 Video({\n title,\n description,\n poster,\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 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 = parsed.subtitles.find((subtitle) => subtitle.default);\n return track?.srclang ?? \"off\";\n }, [parsed.subtitles]);\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<{ id: number; label: string }[]>([]);\n const [selectedAudio, setSelectedAudio] = useState<number>(0);\n const [settingsOpen, setSettingsOpen] = useState(false);\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 [storyboardCues, setStoryboardCues] = useState<StoryboardFrameProps[]>(\n [],\n );\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 dragPointerIdRef = useRef<number | null>(null);\n const [isPlaying, setIsPlaying] = useState(false);\n const [hasPlayed, setHasPlayed] = useState(false);\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 const [error, setError] = useState<string | null>(null);\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 Array.from(video.textTracks).forEach((track) => {\n if (track.kind === \"metadata\") return; // don't touch metadata tracks (storyboard)\n track.mode = mode !== \"off\" && track.language === mode ? \"hidden\" : \"disabled\";\n });\n if (mode === \"off\") setActiveCue(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 // 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 !parsed.subtitles.some((subtitle) => subtitle.srclang === subtitleMode)\n ) {\n setSubtitleMode(initialSubtitleMode);\n }\n }, [subtitleMode, parsed.subtitles, initialSubtitleMode]);\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(true);\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(() => { subtitleModeRef.current = subtitleMode; }, [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\") { setActiveCue(null); return; }\n const track = Array.from(video.textTracks).find((t) => t.language === mode && t.kind !== \"metadata\");\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 };\n\n bindTracks();\n video.textTracks.addEventListener(\"addtrack\", bindTracks);\n return () => {\n video.textTracks.removeEventListener(\"addtrack\", bindTracks);\n Array.from(video.textTracks).forEach((t) => t.removeEventListener(\"cuechange\", onCueChange));\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(document.fullscreenElement || doc.webkitFullscreenElement);\n const iosVideoFullscreen = Boolean(video?.webkitDisplayingFullscreen);\n setIsFullscreen(nativeFullscreen || iosVideoFullscreen);\n };\n\n document.addEventListener(\"fullscreenchange\", onFullscreenChange);\n document.addEventListener(\"webkitfullscreenchange\", onFullscreenChange as EventListener);\n video?.addEventListener(\"webkitbeginfullscreen\", onFullscreenChange as EventListener);\n video?.addEventListener(\"webkitendfullscreen\", onFullscreenChange as EventListener);\n\n return () => {\n document.removeEventListener(\"fullscreenchange\", onFullscreenChange);\n document.removeEventListener(\"webkitfullscreenchange\", onFullscreenChange as EventListener);\n video?.removeEventListener(\"webkitbeginfullscreen\", onFullscreenChange as EventListener);\n video?.removeEventListener(\"webkitendfullscreen\", onFullscreenChange as EventListener);\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) { setPlayerHeight(entry.contentRect.height); setPlayerWidth(entry.contentRect.width); }\n });\n ro.observe(player);\n return () => ro.disconnect();\n }, []);\n\n useEffect(() => {\n let cancelled = false;\n\n async function loadStoryboard() {\n if (!parsed.storyboard) {\n setStoryboardCues([]);\n return;\n }\n\n if (parsed.storyboard.frames.length > 0) {\n setStoryboardCues(parsed.storyboard.frames);\n return;\n }\n\n if (!parsed.storyboard.src) {\n setStoryboardCues([]);\n return;\n }\n\n try {\n const response = await fetch(parsed.storyboard.src);\n\n if (!response.ok) {\n throw new Error(\"Storyboard not found\");\n }\n\n const text = await response.text();\n const cues = parseStoryboardVtt(\n text,\n new URL(parsed.storyboard.src, window.location.href).href,\n );\n\n if (!cancelled) {\n setStoryboardCues(cues);\n }\n } catch {\n if (!cancelled && parsed.storyboard.fallbackImage) {\n setStoryboardCues([\n {\n start: 0,\n end: Number.MAX_SAFE_INTEGER,\n image: parsed.storyboard.fallbackImage,\n w: parsed.storyboard.width ?? 160,\n h: parsed.storyboard.height ?? 90,\n },\n ]);\n }\n }\n }\n\n loadStoryboard();\n\n return () => {\n cancelled = true;\n };\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 setError(null);\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 setSettingsOpen(false);\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 setError(\"Não foi possível reproduzir o stream MPEG-DASH.\");\n setIsLoading(false);\n });\n\n dash.initialize(video, activeSource.src, false);\n } catch {\n if (!cancelled) {\n setError(\"Não foi possível carregar o player MPEG-DASH.\");\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: 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(tracks.map((t: any, i: number) => ({\n id: i,\n label: t.name ?? t.lang ?? `Track ${i + 1}`,\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(tracks.map((t: any, i: number) => ({\n id: i,\n label: t.name ?? t.lang ?? `Track ${i + 1}`,\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 setError(\"Não foi possível reproduzir o stream HLS.\");\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 setError(\"Este navegador não suporta HLS.\");\n setIsLoading(false);\n } catch {\n if (!cancelled) {\n setError(\"Não foi possível carregar o player HLS.\");\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 try {\n const wasPaused = video.paused;\n if (wasPaused) {\n await video.play();\n } else {\n video.pause();\n }\n if (clickIconTimerRef.current) window.clearTimeout(clickIconTimerRef.current);\n setClickIcon(wasPaused ? \"play\" : \"pause\");\n clickIconTimerRef.current = window.setTimeout(() => setClickIcon(null), 600);\n } catch {\n setError(\"O navegador bloqueou a reprodução automática.\");\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(document.fullscreenElement || doc.webkitFullscreenElement);\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 setError(\"Não foi possível alterar o modo fullscreen.\");\n }\n }, []);\n\n const changeAudio = useCallback((trackId: number) => {\n setSelectedAudio(trackId);\n setSettingsOpen(false);\n if (hlsRef.current) {\n hlsRef.current.audioTrack = trackId;\n }\n }, []);\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 setSettingsOpen(false);\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],\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 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 const cue = findStoryboardCue(storyboardCues, time);\n if (!cue) { setPreview(null); return; }\n setPreview({ cue, time, left: Math.max(80, Math.min(x, rect.width - 80)) });\n },\n [duration, storyboardCues],\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 handleProgressPointerLeave = useCallback(() => {\n if (!isDragging) setPreview(null);\n }, [isDragging]);\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{\" \"}\n <code>{\"<Source />\"}</code>.\n </div>\n );\n }\n\n return (\n <div\n ref={containerRef}\n className={`@container mx-auto w-full max-w-6xl ${className ?? \"\"}`}\n >\n <div\n ref={playerRef}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n onMouseMove={showControlsTemporarily}\n onMouseLeave={() => {\n if (isPlaying && autoHideControls) {\n setControlsVisible(false);\n }\n }}\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={fixedHeight\n ? { height: typeof fixedHeight === \"number\" ? `${fixedHeight}px` : fixedHeight }\n : maxHeight\n ? { maxHeight: typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight, aspectRatio: \"16/9\" }\n : { aspectRatio: \"16/9\" }}\n >\n <video\n ref={videoRef}\n className=\"h-full w-full object-contain\"\n playsInline\n preload=\"metadata\"\n crossOrigin=\"anonymous\"\n >\n {parsed.subtitles.map((subtitle) => (\n <track\n key={`${activeSource.src}-${subtitle.srclang}`}\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 {/* 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={{ opacity: clickIcon ? 1 : 0, transition: clickIcon ? \"opacity 0.08s ease-in\" : \"opacity 0.45s ease-out\" }}\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-5 @sm:size-7 @lg:size-8\" />\n ) : (\n <Play className=\"ml-0.5 size-5 @sm:size-7 @lg:size-8\" />\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 {error && (\n <div className=\"absolute inset-x-8 top-1/2 z-40 -translate-y-1/2 rounded-2xl border border-white/10 bg-black/75 p-5 text-center text-sm text-white shadow-2xl backdrop-blur-xl\">\n {error}\n </div>\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 onClick={(e) => e.stopPropagation()} 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 <div>\n {title && (\n <h1 className=\"text-sm font-bold tracking-wide @sm:text-base @md:text-lg @lg:text-xl\" style={{ textShadow: \"0 1px 6px rgba(0,0,0,0.6)\" }}>\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 onClick={(e) => e.stopPropagation()} className=\"relative z-10 px-4 pb-4 text-white\">\n {/* Settings panel — nested, one sub-menu at a time */}\n {settingsOpen && (\n <>\n <div className=\"fixed inset-0 z-70\" onClick={() => setSettingsOpen(false)} />\n <div 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\" style={{ width: Math.min(224, Math.max(180, (playerWidth || 640) * 0.22)) + \"px\", animation: \"spFadeIn 0.15s ease\" }}>\n\n {/* Root menu */}\n {settingsTab === \"root\" && (\n <div>\n {([\n { id: \"quality\" as SettingsTab, label: \"Qualidade\", value: qualities.find((q) => q.id === selectedQuality)?.label ?? \"Auto\" },\n ...(parsed.subtitles.length > 0 ? [{ id: \"subtitles\" as SettingsTab, label: \"Legendas\", value: subtitleStyle.track === \"off\" ? \"Desligado\" : parsed.subtitles.find((s) => s.srclang === subtitleStyle.track)?.label ?? subtitleStyle.track }] : []),\n ...(audioTracks.length > 1 ? [{ id: \"audio\" as SettingsTab, label: \"Áudio\", value: audioTracks.find((t) => t.id === selectedAudio)?.label ?? \"\" }] : []),\n { id: \"playback\" as SettingsTab, label: \"Velocidade\", value: playbackRate === 1 ? \"Normal\" : `${playbackRate}×` },\n ] as { id: SettingsTab; label: string; value: string }[]).map((item) => (\n <button key={item.id} type=\"button\" 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 className=\"size-3 opacity-50\" viewBox=\"0 0 12 12\" fill=\"none\"><path d=\"M4.5 3l3 3-3 3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>\n </span>\n </button>\n ))}\n </div>\n )}\n\n {/* Quality sub-menu */}\n {settingsTab === \"quality\" && (\n <div>\n <button type=\"button\" 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 className=\"size-3.5\" viewBox=\"0 0 12 12\" fill=\"none\"><path d=\"M7.5 3L4.5 6l3 3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>\n Qualidade\n </button>\n <div className=\"py-1.5\">\n {[...qualities].reverse().map((quality) => (\n <button key={quality.id} type=\"button\" onClick={() => { changeQuality(quality.id); setSettingsTab(\"root\"); }}\n className=\"flex w-full items-center gap-3 px-4 py-2.5 text-sm transition hover:bg-white/8\"\n >\n <svg className={`size-4 shrink-0 ${selectedQuality === quality.id ? \"text-white\" : \"text-transparent\"}`} viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M3 8l3.5 3.5L13 4.5\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>\n <span className={selectedQuality === quality.id ? \"font-semibold text-white\" : \"text-white/55\"}>\n {quality.label}{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 type=\"button\" 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 className=\"size-3.5\" viewBox=\"0 0 12 12\" fill=\"none\"><path d=\"M7.5 3L4.5 6l3 3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>\n Legendas\n </button>\n <div className=\"py-1.5\">\n {[{ srclang: \"off\", label: \"Desligado\" }, ...parsed.subtitles].map((s) => (\n <button key={s.srclang} type=\"button\"\n onClick={() => { const next = s.srclang === \"off\" ? \"off\" : s.srclang; setSubtitleMode(next); setSubtitleStyle((st) => ({ ...st, track: next })); }}\n className=\"flex w-full items-center gap-3 px-4 py-2.5 text-sm transition hover:bg-white/8\"\n >\n <svg className={`size-4 shrink-0 ${subtitleStyle.track === s.srclang ? \"text-white\" : \"text-transparent\"}`} viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M3 8l3.5 3.5L13 4.5\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>\n <span className={subtitleStyle.track === s.srclang ? \"font-semibold text-white\" : \"text-white/55\"}>{s.label}</span>\n </button>\n ))}\n </div>\n {subtitleStyle.track !== \"off\" && (\n <button type=\"button\" 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 className=\"size-3 opacity-50\" viewBox=\"0 0 12 12\" fill=\"none\"><path d=\"M4.5 3l3 3-3 3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>\n </button>\n )}\n </div>\n )}\n\n {/* Subtitles style sub-menu */}\n {settingsTab === \"subtitles-style\" && (\n <div>\n <button type=\"button\" 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 className=\"size-3.5\" viewBox=\"0 0 12 12\" fill=\"none\"><path d=\"M7.5 3L4.5 6l3 3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></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\">Tamanho</p>\n <div className=\"flex gap-1.5\">\n {([\"small\",\"medium\",\"large\",\"xlarge\"] as const).map((s) => (\n <button key={s} type=\"button\" onClick={() => setSubtitleStyle((st) => ({ ...st, size: s }))}\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\" ? \"P\" : s === \"medium\" ? \"M\" : s === \"large\" ? \"G\" : \"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\">Cor</p>\n <div className=\"flex gap-1.5\">\n {([[\"white\",\"Branco\",\"#fff\"],[\"yellow\",\"Amarelo\",\"#facc15\"],[\"cyan\",\"Ciano\",\"#22d3ee\"]] as const).map(([val, label, color]) => (\n <button key={val} type=\"button\" onClick={() => setSubtitleStyle((st) => ({ ...st, color: val }))}\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\">Fundo</p>\n <div className=\"flex gap-1.5\">\n {([[\"none\",\"Nenhum\"],[\"semi\",\"Semi\"],[\"solid\",\"Sólido\"]] as const).map(([val, label]) => (\n <button key={val} type=\"button\" onClick={() => setSubtitleStyle((st) => ({ ...st, bg: val }))}\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 type=\"button\" 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 className=\"size-3.5\" viewBox=\"0 0 12 12\" fill=\"none\"><path d=\"M7.5 3L4.5 6l3 3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>\n Áudio\n </button>\n <div className=\"py-1.5\">\n {audioTracks.map((track) => (\n <button key={track.id} type=\"button\" onClick={() => { changeAudio(track.id); setSettingsTab(\"root\"); }}\n className=\"flex w-full items-center gap-3 px-4 py-2.5 text-sm transition hover:bg-white/8\"\n >\n <svg className={`size-4 shrink-0 ${selectedAudio === track.id ? \"text-white\" : \"text-transparent\"}`} viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M3 8l3.5 3.5L13 4.5\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>\n <span className={selectedAudio === track.id ? \"font-semibold text-white\" : \"text-white/55\"}>{track.label}</span>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Playback speed sub-menu */}\n {settingsTab === \"playback\" && (\n <div>\n <button type=\"button\" 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 className=\"size-3.5\" viewBox=\"0 0 12 12\" fill=\"none\"><path d=\"M7.5 3L4.5 6l3 3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>\n Velocidade\n </button>\n <div className=\"py-1.5\">\n {PLAYBACK_SPEEDS.map((speed) => (\n <button key={speed} type=\"button\" onClick={() => { setPlaybackRate(speed); setSettingsOpen(false); setSettingsTab(\"root\"); }}\n className=\"flex w-full items-center gap-3 px-4 py-2.5 text-sm transition hover:bg-white/8\"\n >\n <svg className={`size-4 shrink-0 ${playbackRate === speed ? \"text-white\" : \"text-transparent\"}`} viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M3 8l3.5 3.5L13 4.5\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>\n <span className={playbackRate === speed ? \"font-semibold text-white\" : \"text-white/55\"}>{speed === 1 ? \"Normal\" : `${speed}×`}</span>\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n <style>{`@keyframes spFadeIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}`}</style>\n </>\n )}\n\n <div\n ref={progressRef}\n onPointerMove={handleProgressPointerMove}\n onPointerLeave={handleProgressPointerLeave}\n onPointerDown={handleProgressPointerDown}\n onPointerUp={handleProgressPointerUp}\n className=\"group relative mb-3 h-7 cursor-pointer\"\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/22 transition-[height] duration-150\"\n style={{ height: isDragging ? \"6px\" : \"3px\" }}\n >\n <div className=\"absolute inset-y-0 left-0 rounded-full bg-white/30\" style={{ width: `${bufferedPercent}%` }} />\n <div className=\"absolute inset-y-0 left-0 rounded-full bg-white/90\" style={{ width: `${progressPercent}%` }} />\n </div>\n {/* Thumb dot — always visible, grows on hover/drag */}\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 transition-[width,height] duration-100 group-hover:size-4\"\n style={{\n left: `${progressPercent}%`,\n width: isDragging ? \"16px\" : \"10px\",\n height: isDragging ? \"16px\" : \"10px\",\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 bg-white/15 text-white backdrop-blur-sm ring-1 ring-white/15 transition hover:bg-white/25 @sm:size-9\"\n aria-label={isPlaying ? \"Pause\" : \"Play\"}\n >\n {isPlaying ? (\n <Pause className=\"size-4 @sm:size-5\" />\n ) : (\n <Play className=\"ml-0.5 size-4 @sm:size-5\" />\n )}\n </button>\n\n <span className=\"text-[11px] font-medium tabular-nums text-white/80\">\n {formatTime(currentTime)}<span className=\"text-white/30\">/</span><span className=\"text-white/45\">{formatTime(duration)}</span>\n </span>\n </div>\n\n {/* RIGHT group: volume | captions | settings | fullscreen */}\n <div className=\"flex items-center gap-0.5 @sm:gap-1\">\n {/* Volume: mute button always visible, slider appears on group hover */}\n <div className=\"group flex items-center\">\n <button\n type=\"button\"\n onClick={() => setIsMuted((value) => !value)}\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 <div className=\"w-0 overflow-hidden transition-all duration-200 group-hover:w-16 @md:group-hover:w-20\">\n <input\n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.01\"\n value={isMuted ? 0 : volume}\n onChange={(event) => {\n const nextVolume = Number(event.target.value);\n setVolume(nextVolume);\n setIsMuted(nextVolume === 0);\n }}\n className=\"h-1 w-14 accent-white @md:w-20\"\n aria-label=\"Audio level\"\n />\n </div>\n </div>\n\n <div className=\"mx-0.5 h-4 w-px bg-white/20 @md:mx-1\" />\n\n {parsed.subtitles.length > 0 && (\n <button\n type=\"button\"\n onClick={() => setSubtitleMode((m) => m === \"off\" ? (parsed.subtitles[0]?.srclang ?? \"off\") : \"off\")}\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 <Captions className=\"size-4 @sm:size-5\" />\n </button>\n )}\n\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => { setSettingsOpen((v) => !v); setSettingsTab(\"root\"); }}\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 ? <Minimize className=\"size-4 @sm:size-5\" /> : <Maximize className=\"size-4 @sm:size-5\" />}\n </button>\n </div>\n </div>\n </footer>\n </div>\n\n\n {/* Storyboard preview — at player root so z-index is not limited by chrome stacking context */}\n {preview && (() => {\n const srcW = preview.cue.w ?? 160;\n const srcH = preview.cue.h ?? 90;\n const thumbW = Math.max(140, Math.round((playerWidth || 640) * 0.13));\n const thumbH = Math.round(thumbW * (srcH / srcW));\n const scale = thumbW / srcW;\n const isSprite = preview.cue.x != null && preview.cue.y != null;\n return (\n <div\n className=\"pointer-events-none absolute z-60 -translate-x-1/2 -translate-y-2 overflow-hidden rounded-xl shadow-2xl ring-1 ring-white/15\"\n style={{ bottom: controlsVisible ? \"80px\" : \"20px\", left: preview.left, transition: \"bottom 0.2s\" }}\n >\n {isSprite ? (\n <div style={{ width: thumbW, height: thumbH, overflow: \"hidden\" }}>\n <div style={{\n width: srcW,\n height: srcH,\n backgroundImage: `url(${preview.cue.image})`,\n backgroundPosition: `-${preview.cue.x ?? 0}px -${preview.cue.y ?? 0}px`,\n backgroundSize: \"auto\",\n backgroundRepeat: \"no-repeat\",\n transform: `scale(${scale})`,\n transformOrigin: \"top left\",\n }} />\n </div>\n ) : (\n <div style={{\n width: thumbW,\n height: thumbH,\n backgroundImage: `url(${preview.cue.image})`,\n backgroundSize: \"cover\",\n backgroundPosition: \"center\",\n backgroundRepeat: \"no-repeat\",\n }} />\n )}\n </div>\n );\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: subtitleStyle.color === \"yellow\" ? \"#facc15\" : subtitleStyle.color === \"cyan\" ? \"#22d3ee\" : \"#ffffff\",\n backgroundColor: subtitleStyle.bg === \"none\" ? \"transparent\" : subtitleStyle.bg === \"solid\" ? \"rgba(0,0,0,0.9)\" : \"rgba(0,0,0,0.55)\",\n backdropFilter: subtitleStyle.bg === \"semi\" ? \"blur(6px)\" : undefined,\n textShadow: subtitleStyle.bg === \"none\" ? \"0 1px 8px rgba(0,0,0,1), 0 0 16px rgba(0,0,0,0.9)\" : \"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\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 className={`size-1.5 rounded-full ${active ? \"bg-white\" : \"bg-transparent\"}`} />\n {children}\n </button>\n );\n}\n\nfunction parseVideoChildren(children: ReactNode): ParsedVideoChildren {\n const parsed: ParsedVideoChildren = {\n sources: [],\n subtitles: [],\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 === Sources || name === \"SiloSources\") {\n const element = child as ReactElement<SourcesProps>;\n\n React.Children.forEach(element.props.children, (sourceChild) => {\n if (!React.isValidElement(sourceChild)) return;\n const sn = dn(sourceChild);\n if (sourceChild.type !== Source && sn !== \"SiloSource\") return;\n\n const sourceElement = sourceChild as ReactElement<SourceProps>;\n parsed.sources.push(sourceElement.props);\n });\n }\n\n if (child.type === Subtitles || name === \"SiloSubtitles\") {\n const element = child as ReactElement<SubtitlesProps>;\n\n React.Children.forEach(element.props.children, (subtitleChild) => {\n if (!React.isValidElement(subtitleChild)) return;\n const sn = dn(subtitleChild);\n if (subtitleChild.type !== Subtitle && sn !== \"SiloSubtitle\") return;\n\n const subtitleElement = subtitleChild as ReactElement<SubtitleProps>;\n parsed.subtitles.push(subtitleElement.props);\n });\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 (frameChild.type !== StoryboardFrame && fn2 !== \"SiloStoryboardFrame\") 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 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 return cues.find((cue) => time >= cue.start && time <= cue.end) ?? null;\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"]}
@@ -2,6 +2,6 @@ import * as react from 'react';
2
2
  import { VideoUploaderProps } from './types.js';
3
3
  import '@geekapps/silo-nextjs';
4
4
 
5
- declare function VideoUploader({ bucket, expiresIn, visibility, onUpload, onError, className, style, disabled, maxSize, accept, showPreview, showVideoOptions, video, theme, renderIcon, renderProgress, renderSuccess, renderError, children, }: VideoUploaderProps): react.JSX.Element;
5
+ declare function VideoUploader({ bucket, expiresIn, onUpload, onError, className, style, disabled, maxSize, accept, showPreview, showVideoOptions, video, theme, renderIcon, renderProgress, renderSuccess, renderError, children, }: VideoUploaderProps): react.JSX.Element;
6
6
 
7
7
  export { VideoUploader };