@livepeer-frameworks/player-react 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -9
- package/dist/cjs/_virtual/_rollupPluginBabelHelpers.js +359 -0
- package/dist/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
- package/dist/cjs/assets/logomark.svg.js +8 -0
- package/dist/cjs/assets/logomark.svg.js.map +1 -0
- package/dist/cjs/components/DevModePanel.js +826 -0
- package/dist/cjs/components/DevModePanel.js.map +1 -0
- package/dist/cjs/components/DvdLogo.js +200 -0
- package/dist/cjs/components/DvdLogo.js.map +1 -0
- package/dist/cjs/components/Icons.js +439 -0
- package/dist/cjs/components/Icons.js.map +1 -0
- package/dist/cjs/components/IdleScreen.js +587 -0
- package/dist/cjs/components/IdleScreen.js.map +1 -0
- package/dist/cjs/components/LoadingScreen.js +523 -0
- package/dist/cjs/components/LoadingScreen.js.map +1 -0
- package/dist/cjs/components/Player.js +420 -0
- package/dist/cjs/components/Player.js.map +1 -0
- package/dist/cjs/components/PlayerControls.js +798 -0
- package/dist/cjs/components/PlayerControls.js.map +1 -0
- package/dist/cjs/components/PlayerErrorBoundary.js +80 -0
- package/dist/cjs/components/PlayerErrorBoundary.js.map +1 -0
- package/dist/cjs/components/SeekBar.js +253 -0
- package/dist/cjs/components/SeekBar.js.map +1 -0
- package/dist/cjs/components/SkipIndicator.js +92 -0
- package/dist/cjs/components/SkipIndicator.js.map +1 -0
- package/dist/cjs/components/SpeedIndicator.js +43 -0
- package/dist/cjs/components/SpeedIndicator.js.map +1 -0
- package/dist/cjs/components/StatsPanel.js +202 -0
- package/dist/cjs/components/StatsPanel.js.map +1 -0
- package/dist/cjs/components/StreamStateOverlay.js +229 -0
- package/dist/cjs/components/StreamStateOverlay.js.map +1 -0
- package/dist/cjs/components/ThumbnailOverlay.js +86 -0
- package/dist/cjs/components/ThumbnailOverlay.js.map +1 -0
- package/dist/cjs/components/TitleOverlay.js +32 -0
- package/dist/cjs/components/TitleOverlay.js.map +1 -0
- package/dist/cjs/context/PlayerContext.js +46 -0
- package/dist/cjs/context/PlayerContext.js.map +1 -0
- package/dist/cjs/hooks/useMetaTrack.js +165 -0
- package/dist/cjs/hooks/useMetaTrack.js.map +1 -0
- package/dist/cjs/hooks/usePlaybackQuality.js +131 -0
- package/dist/cjs/hooks/usePlaybackQuality.js.map +1 -0
- package/dist/cjs/hooks/usePlayerController.js +518 -0
- package/dist/cjs/hooks/usePlayerController.js.map +1 -0
- package/dist/cjs/hooks/usePlayerSelection.js +90 -0
- package/dist/cjs/hooks/usePlayerSelection.js.map +1 -0
- package/dist/cjs/hooks/useStreamState.js +360 -0
- package/dist/cjs/hooks/useStreamState.js.map +1 -0
- package/dist/cjs/hooks/useTelemetry.js +120 -0
- package/dist/cjs/hooks/useTelemetry.js.map +1 -0
- package/dist/cjs/hooks/useViewerEndpoints.js +222 -0
- package/dist/cjs/hooks/useViewerEndpoints.js.map +1 -0
- package/dist/cjs/index.js +97 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/ui/badge.js +34 -0
- package/dist/cjs/ui/badge.js.map +1 -0
- package/dist/cjs/ui/button.js +74 -0
- package/dist/cjs/ui/button.js.map +1 -0
- package/dist/cjs/ui/context-menu.js +163 -0
- package/dist/cjs/ui/context-menu.js.map +1 -0
- package/dist/cjs/ui/slider.js +60 -0
- package/dist/cjs/ui/slider.js.map +1 -0
- package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +329 -0
- package/dist/esm/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
- package/dist/esm/assets/logomark.svg.js +4 -0
- package/dist/esm/assets/logomark.svg.js.map +1 -0
- package/dist/esm/components/DevModePanel.js +822 -0
- package/dist/esm/components/DevModePanel.js.map +1 -0
- package/dist/esm/components/DvdLogo.js +196 -0
- package/dist/esm/components/DvdLogo.js.map +1 -0
- package/dist/esm/components/Icons.js +421 -0
- package/dist/esm/components/Icons.js.map +1 -0
- package/dist/esm/components/IdleScreen.js +582 -0
- package/dist/esm/components/IdleScreen.js.map +1 -0
- package/dist/esm/components/LoadingScreen.js +519 -0
- package/dist/esm/components/LoadingScreen.js.map +1 -0
- package/dist/esm/components/Player.js +416 -0
- package/dist/esm/components/Player.js.map +1 -0
- package/dist/esm/components/PlayerControls.js +794 -0
- package/dist/esm/components/PlayerControls.js.map +1 -0
- package/dist/esm/components/PlayerErrorBoundary.js +76 -0
- package/dist/esm/components/PlayerErrorBoundary.js.map +1 -0
- package/dist/esm/components/SeekBar.js +249 -0
- package/dist/esm/components/SeekBar.js.map +1 -0
- package/dist/esm/components/SkipIndicator.js +88 -0
- package/dist/esm/components/SkipIndicator.js.map +1 -0
- package/dist/esm/components/SpeedIndicator.js +39 -0
- package/dist/esm/components/SpeedIndicator.js.map +1 -0
- package/dist/esm/components/StatsPanel.js +198 -0
- package/dist/esm/components/StatsPanel.js.map +1 -0
- package/dist/esm/components/StreamStateOverlay.js +224 -0
- package/dist/esm/components/StreamStateOverlay.js.map +1 -0
- package/dist/esm/components/ThumbnailOverlay.js +82 -0
- package/dist/esm/components/ThumbnailOverlay.js.map +1 -0
- package/dist/esm/components/TitleOverlay.js +28 -0
- package/dist/esm/components/TitleOverlay.js.map +1 -0
- package/dist/esm/context/PlayerContext.js +41 -0
- package/dist/esm/context/PlayerContext.js.map +1 -0
- package/dist/esm/hooks/useMetaTrack.js +163 -0
- package/dist/esm/hooks/useMetaTrack.js.map +1 -0
- package/dist/esm/hooks/usePlaybackQuality.js +129 -0
- package/dist/esm/hooks/usePlaybackQuality.js.map +1 -0
- package/dist/esm/hooks/usePlayerController.js +516 -0
- package/dist/esm/hooks/usePlayerController.js.map +1 -0
- package/dist/esm/hooks/usePlayerSelection.js +88 -0
- package/dist/esm/hooks/usePlayerSelection.js.map +1 -0
- package/dist/esm/hooks/useStreamState.js +358 -0
- package/dist/esm/hooks/useStreamState.js.map +1 -0
- package/dist/esm/hooks/useTelemetry.js +118 -0
- package/dist/esm/hooks/useTelemetry.js.map +1 -0
- package/dist/esm/hooks/useViewerEndpoints.js +220 -0
- package/dist/esm/hooks/useViewerEndpoints.js.map +1 -0
- package/dist/esm/index.js +23 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/ui/badge.js +31 -0
- package/dist/esm/ui/badge.js.map +1 -0
- package/dist/esm/ui/button.js +52 -0
- package/dist/esm/ui/button.js.map +1 -0
- package/dist/esm/ui/context-menu.js +132 -0
- package/dist/esm/ui/context-menu.js.map +1 -0
- package/dist/esm/ui/slider.js +38 -0
- package/dist/esm/ui/slider.js.map +1 -0
- package/dist/types/components/DvdLogo.d.ts +1 -1
- package/dist/types/components/Icons.d.ts +1 -1
- package/dist/types/components/Player.d.ts +1 -1
- package/dist/types/components/PlayerErrorBoundary.d.ts +2 -1
- package/dist/types/components/StreamStateOverlay.d.ts +2 -2
- package/dist/types/components/SubtitleRenderer.d.ts +2 -2
- package/dist/types/context/PlayerContext.d.ts +2 -2
- package/dist/types/context/index.d.ts +2 -2
- package/dist/types/hooks/useMetaTrack.d.ts +3 -3
- package/dist/types/hooks/usePlaybackQuality.d.ts +2 -2
- package/dist/types/hooks/usePlayerController.d.ts +26 -3
- package/dist/types/hooks/usePlayerSelection.d.ts +1 -1
- package/dist/types/hooks/useStreamState.d.ts +1 -1
- package/dist/types/hooks/useTelemetry.d.ts +1 -1
- package/dist/types/hooks/useViewerEndpoints.d.ts +3 -3
- package/dist/types/index.d.ts +28 -28
- package/dist/types/types.d.ts +3 -3
- package/dist/types/ui/select.d.ts +1 -1
- package/package.json +22 -14
- package/src/components/DevModePanel.tsx +244 -143
- package/src/components/DvdLogo.tsx +1 -1
- package/src/components/Icons.tsx +105 -25
- package/src/components/IdleScreen.tsx +262 -128
- package/src/components/LoadingScreen.tsx +169 -151
- package/src/components/LogoOverlay.tsx +3 -6
- package/src/components/Player.tsx +126 -59
- package/src/components/PlayerControls.tsx +384 -272
- package/src/components/PlayerErrorBoundary.tsx +7 -13
- package/src/components/SeekBar.tsx +96 -88
- package/src/components/SkipIndicator.tsx +2 -12
- package/src/components/SpeedIndicator.tsx +2 -11
- package/src/components/StatsPanel.tsx +31 -22
- package/src/components/StreamStateOverlay.tsx +105 -49
- package/src/components/SubtitleRenderer.tsx +29 -29
- package/src/components/ThumbnailOverlay.tsx +5 -6
- package/src/components/TitleOverlay.tsx +2 -8
- package/src/context/PlayerContext.tsx +4 -8
- package/src/context/index.ts +3 -3
- package/src/hooks/useMetaTrack.ts +27 -27
- package/src/hooks/usePlaybackQuality.ts +3 -3
- package/src/hooks/usePlayerController.ts +246 -138
- package/src/hooks/usePlayerSelection.ts +6 -6
- package/src/hooks/useStreamState.ts +51 -56
- package/src/hooks/useTelemetry.ts +18 -3
- package/src/hooks/useViewerEndpoints.ts +34 -23
- package/src/index.tsx +36 -28
- package/src/types.ts +8 -8
- package/src/ui/badge.tsx +6 -5
- package/src/ui/button.tsx +9 -8
- package/src/ui/context-menu.tsx +42 -61
- package/src/ui/select.tsx +13 -7
- package/src/ui/slider.tsx +18 -29
- package/dist/types/components/players/DashJsPlayer.d.ts +0 -18
- package/dist/types/components/players/HlsJsPlayer.d.ts +0 -18
- package/dist/types/components/players/MewsWsPlayer/index.d.ts +0 -18
- package/dist/types/components/players/MistPlayer.d.ts +0 -20
- package/dist/types/components/players/MistWebRTCPlayer/index.d.ts +0 -20
- package/dist/types/components/players/NativePlayer.d.ts +0 -19
- package/dist/types/components/players/VideoJsPlayer.d.ts +0 -18
- package/src/components/players/DashJsPlayer.tsx +0 -56
- package/src/components/players/HlsJsPlayer.tsx +0 -56
- package/src/components/players/MewsWsPlayer/index.tsx +0 -56
- package/src/components/players/MistPlayer.tsx +0 -60
- package/src/components/players/MistWebRTCPlayer/index.tsx +0 -59
- package/src/components/players/NativePlayer.tsx +0 -58
- package/src/components/players/VideoJsPlayer.tsx +0 -56
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DevModePanel.js","sources":["../../../../src/components/DevModePanel.tsx"],"sourcesContent":["import React, { useState, useCallback, useMemo, useEffect, useRef } from \"react\";\nimport {\n cn,\n globalPlayerManager,\n QualityMonitor,\n type StreamInfo,\n type MistStreamInfo,\n type PlaybackMode,\n} from \"@livepeer-frameworks/player-core\";\n\n/** Short labels for source types */\nconst SOURCE_TYPE_LABELS: Record<string, string> = {\n \"html5/application/vnd.apple.mpegurl\": \"HLS\",\n \"dash/video/mp4\": \"DASH\",\n \"html5/video/mp4\": \"MP4\",\n \"html5/video/webm\": \"WebM\",\n whep: \"WHEP\",\n \"mist/html\": \"Mist\",\n \"mist/legacy\": \"Auto\",\n \"ws/video/mp4\": \"MEWS\",\n};\n\nexport interface DevModePanelProps {\n /** Callback when user selects a combo (one-shot selection) */\n onSettingsChange: (settings: {\n forcePlayer?: string;\n forceType?: string;\n forceSource?: number;\n }) => void;\n /** Current playback mode */\n playbackMode?: PlaybackMode;\n /** Callback when playback mode changes */\n onModeChange?: (mode: PlaybackMode) => void;\n /** Callback to force player reload */\n onReload?: () => void;\n /** Stream info for getting all combinations (sources + tracks from MistServer) */\n streamInfo?: StreamInfo | null;\n /** MistServer stream metadata including tracks */\n mistStreamInfo?: MistStreamInfo | null;\n /** Current player info */\n currentPlayer?: {\n name: string;\n shortname: string;\n } | null;\n /** Current source info */\n currentSource?: {\n url: string;\n type: string;\n } | null;\n /** Video element for stats */\n videoElement?: HTMLVideoElement | null;\n /** Protocol/node info */\n protocol?: string;\n nodeId?: string;\n /** Whether the panel toggle is visible (hover state) */\n isVisible?: boolean;\n /** Controlled open state (if provided, component is controlled) */\n isOpen?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (isOpen: boolean) => void;\n}\n\n/**\n * DevModePanel - Advanced Settings overlay for testing player configurations\n * Similar to MistPlayer's skin: \"dev\" mode\n */\nconst DevModePanel: React.FC<DevModePanelProps> = ({\n onSettingsChange,\n playbackMode = \"auto\",\n onModeChange,\n onReload,\n streamInfo,\n mistStreamInfo,\n currentPlayer,\n currentSource,\n videoElement,\n protocol,\n nodeId,\n isVisible: _isVisible = true,\n isOpen: controlledIsOpen,\n onOpenChange,\n}) => {\n // Support both controlled and uncontrolled modes\n const [internalIsOpen, setInternalIsOpen] = useState(false);\n const isOpen = controlledIsOpen !== undefined ? controlledIsOpen : internalIsOpen;\n const setIsOpen = useCallback(\n (value: boolean) => {\n if (onOpenChange) {\n onOpenChange(value);\n } else {\n setInternalIsOpen(value);\n }\n },\n [onOpenChange]\n );\n const [activeTab, setActiveTab] = useState<\"config\" | \"stats\">(\"config\");\n const [, setCurrentComboIndex] = useState(0);\n const [hoveredComboIndex, setHoveredComboIndex] = useState<number | null>(null);\n const [tooltipAbove, setTooltipAbove] = useState(false);\n const [showDisabledPlayers, setShowDisabledPlayers] = useState(false);\n const comboListRef = useRef<HTMLDivElement>(null);\n\n // Quality monitoring for playback score\n const qualityMonitorRef = useRef<QualityMonitor | null>(null);\n const [playbackScore, setPlaybackScore] = useState<number>(1.0);\n const [qualityScore, setQualityScore] = useState<number>(100);\n const [stallCount, setStallCount] = useState<number>(0);\n const [frameDropRate, setFrameDropRate] = useState<number>(0);\n\n // Player-specific stats (from getStats())\n const [playerStats, setPlayerStats] = useState<any>(null);\n const statsIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n // Start/stop quality monitoring based on video element\n useEffect(() => {\n if (videoElement && isOpen) {\n if (!qualityMonitorRef.current) {\n qualityMonitorRef.current = new QualityMonitor({\n sampleInterval: 500,\n onSample: (quality) => {\n setQualityScore(quality.score);\n setStallCount(quality.stallCount);\n setFrameDropRate(quality.frameDropRate);\n // Get playback score from monitor\n if (qualityMonitorRef.current) {\n setPlaybackScore(qualityMonitorRef.current.getPlaybackScore());\n }\n },\n });\n }\n qualityMonitorRef.current.start(videoElement);\n }\n\n return () => {\n if (qualityMonitorRef.current) {\n qualityMonitorRef.current.stop();\n }\n };\n }, [videoElement, isOpen]);\n\n // Poll player-specific stats when stats tab is open\n useEffect(() => {\n if (isOpen && activeTab === \"stats\") {\n const pollStats = async () => {\n try {\n const player = globalPlayerManager.getCurrentPlayer();\n if (player && player.getStats) {\n const stats = await player.getStats();\n if (stats) {\n setPlayerStats(stats);\n }\n }\n } catch {\n // Ignore errors\n }\n };\n\n // Poll immediately and then every 500ms\n pollStats();\n statsIntervalRef.current = setInterval(pollStats, 500);\n\n return () => {\n if (statsIntervalRef.current) {\n clearInterval(statsIntervalRef.current);\n statsIntervalRef.current = null;\n }\n };\n }\n }, [isOpen, activeTab]);\n\n // Get all player-source combinations with scores (including incompatible)\n // Uses cached results from PlayerManager - won't recompute if data unchanged\n const allCombinations = useMemo(() => {\n if (!streamInfo) return [];\n try {\n // getAllCombinations now includes all combos (compatible + incompatible)\n // and uses content-based caching - won't spam on every render\n return globalPlayerManager.getAllCombinations(streamInfo, playbackMode);\n } catch {\n return [];\n }\n }, [streamInfo, playbackMode]);\n\n // For backward compatibility (Next Option only cycles compatible)\n const combinations = useMemo(() => {\n return allCombinations.filter((c) => c.compatible);\n }, [allCombinations]);\n\n // Find current active combo index based on current player/source (in allCombinations)\n const activeComboIndex = useMemo(() => {\n if (!currentPlayer || !currentSource || allCombinations.length === 0) return -1;\n return allCombinations.findIndex(\n (c) => c.player === currentPlayer.shortname && c.sourceType === currentSource.type\n );\n }, [currentPlayer, currentSource, allCombinations]);\n\n // Find index in compatible-only list for Next Option cycling\n const activeCompatibleIndex = useMemo(() => {\n if (!currentPlayer || !currentSource || combinations.length === 0) return -1;\n return combinations.findIndex(\n (c) => c.player === currentPlayer.shortname && c.sourceType === currentSource.type\n );\n }, [currentPlayer, currentSource, combinations]);\n\n const handleReload = useCallback(() => {\n // Just trigger reload - controller manages the state\n onReload?.();\n }, [onReload]);\n\n const handleNextCombo = useCallback(() => {\n if (combinations.length === 0) return;\n\n // Start from active combo or 0, then move to next (only cycles compatible)\n const startIdx = activeCompatibleIndex >= 0 ? activeCompatibleIndex : -1;\n const nextIdx = (startIdx + 1) % combinations.length;\n const combo = combinations[nextIdx];\n\n setCurrentComboIndex(nextIdx);\n onSettingsChange({\n forcePlayer: combo.player,\n forceType: combo.sourceType,\n forceSource: combo.sourceIndex,\n });\n }, [combinations, activeCompatibleIndex, onSettingsChange]);\n\n const handleSelectCombo = useCallback(\n (index: number) => {\n const combo = allCombinations[index];\n if (!combo) return;\n\n // Allow selecting even incompatible combos in dev mode (for testing)\n setCurrentComboIndex(index);\n onSettingsChange({\n forcePlayer: combo.player,\n forceType: combo.sourceType,\n forceSource: combo.sourceIndex,\n });\n },\n [allCombinations, onSettingsChange]\n );\n\n // Video stats - poll periodically when stats tab is open\n const [stats, setStats] = useState<{\n resolution: string;\n buffered: string;\n playbackRate: string;\n currentTime: string;\n duration: string;\n readyState: number;\n networkState: number;\n } | null>(null);\n\n useEffect(() => {\n if (!isOpen || activeTab !== \"stats\") return;\n\n const updateStats = () => {\n // Get fresh video element from player manager\n const player = globalPlayerManager.getCurrentPlayer();\n const v = player?.getVideoElement() || videoElement;\n if (!v) {\n setStats(null);\n return;\n }\n setStats({\n resolution: `${v.videoWidth}x${v.videoHeight}`,\n buffered:\n v.buffered.length > 0\n ? (v.buffered.end(v.buffered.length - 1) - v.currentTime).toFixed(1)\n : \"0\",\n playbackRate: v.playbackRate.toFixed(2),\n currentTime: v.currentTime.toFixed(1),\n duration: isFinite(v.duration) ? v.duration.toFixed(1) : \"live\",\n readyState: v.readyState,\n networkState: v.networkState,\n });\n };\n\n updateStats();\n const interval = setInterval(updateStats, 500);\n return () => clearInterval(interval);\n }, [isOpen, activeTab, videoElement]);\n\n // Panel is only rendered when open (no floating toggle button)\n if (!isOpen) {\n return null;\n }\n\n return (\n <div className=\"fw-dev-panel\">\n {/* Header with tabs */}\n <div className=\"fw-dev-header\">\n <button\n type=\"button\"\n onClick={() => setActiveTab(\"config\")}\n className={cn(\"fw-dev-tab\", activeTab === \"config\" && \"fw-dev-tab--active\")}\n >\n Config\n </button>\n <button\n type=\"button\"\n onClick={() => setActiveTab(\"stats\")}\n className={cn(\"fw-dev-tab\", activeTab === \"stats\" && \"fw-dev-tab--active\")}\n >\n Stats\n </button>\n <div className=\"fw-dev-spacer\" />\n <button\n type=\"button\"\n onClick={() => setIsOpen(false)}\n className=\"fw-dev-close\"\n aria-label=\"Close dev mode panel\"\n >\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n >\n <path d=\"M2 2l8 8M10 2l-8 8\" />\n </svg>\n </button>\n </div>\n\n {/* Config Tab */}\n {activeTab === \"config\" && (\n <div ref={comboListRef} className=\"fw-dev-body\">\n {/* Current State */}\n <div className=\"fw-dev-section\">\n <div className=\"fw-dev-label\">Active</div>\n <div className=\"fw-dev-value\">\n {currentPlayer?.name || \"None\"} <span className=\"fw-dev-value-arrow\">→</span>{\" \"}\n {SOURCE_TYPE_LABELS[currentSource?.type || \"\"] || currentSource?.type || \"—\"}\n </div>\n {nodeId && <div className=\"fw-dev-value-muted\">Node: {nodeId}</div>}\n </div>\n\n {/* Playback Mode Selector */}\n <div className=\"fw-dev-section\">\n <div className=\"fw-dev-label\">Playback Mode</div>\n <div className=\"fw-dev-mode-group\">\n {([\"auto\", \"low-latency\", \"quality\"] as const).map((mode) => (\n <button\n key={mode}\n type=\"button\"\n onClick={() => onModeChange?.(mode)}\n className={cn(\n \"fw-dev-mode-btn\",\n playbackMode === mode && \"fw-dev-mode-btn--active\"\n )}\n >\n {mode === \"low-latency\"\n ? \"Low Lat\"\n : mode.charAt(0).toUpperCase() + mode.slice(1)}\n </button>\n ))}\n </div>\n <div className=\"fw-dev-mode-desc\">\n {playbackMode === \"auto\" && \"Balanced: MP4/WS → WHEP → HLS\"}\n {playbackMode === \"low-latency\" && \"WHEP/WebRTC first (<1s delay)\"}\n {playbackMode === \"quality\" && \"MP4/WS first, HLS fallback\"}\n </div>\n </div>\n\n {/* Action buttons */}\n <div className=\"fw-dev-actions\">\n <button type=\"button\" onClick={handleReload} className=\"fw-dev-action-btn\">\n Reload\n </button>\n <button type=\"button\" onClick={handleNextCombo} className=\"fw-dev-action-btn\">\n Next Option\n </button>\n </div>\n\n {/* Combo list */}\n <div className=\"fw-dev-section\" style={{ padding: 0, borderBottom: 0 }}>\n <div className=\"fw-dev-list-header\">\n <span className=\"fw-dev-list-title\">Player Options ({combinations.length})</span>\n {allCombinations.length > combinations.length && (\n <button\n type=\"button\"\n onClick={() => setShowDisabledPlayers(!showDisabledPlayers)}\n className=\"fw-dev-list-toggle\"\n >\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className={cn(\"fw-dev-chevron\", showDisabledPlayers && \"fw-dev-chevron--open\")}\n >\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n {showDisabledPlayers ? \"Hide\" : \"Show\"} disabled (\n {allCombinations.length - combinations.length})\n </button>\n )}\n </div>\n {allCombinations.length === 0 ? (\n <div className=\"fw-dev-list-empty\">No stream info available</div>\n ) : (\n <div>\n {allCombinations.map((combo, index) => {\n // Codec-incompatible items always show (with warning), MIME-incompatible hide in \"disabled\"\n const isCodecIncompat = (combo as any).codecIncompatible === true;\n if (!combo.compatible && !isCodecIncompat && !showDisabledPlayers) return null;\n\n const isActive = activeComboIndex === index;\n const typeLabel =\n SOURCE_TYPE_LABELS[combo.sourceType] || combo.sourceType.split(\"/\").pop();\n\n // Determine score class\n const getScoreClass = () => {\n if (!combo.compatible && !isCodecIncompat)\n return \"fw-dev-combo-score--disabled\";\n if (isCodecIncompat) return \"fw-dev-combo-score--low\";\n if (combo.score >= 2) return \"fw-dev-combo-score--high\";\n if (combo.score >= 1.5) return \"fw-dev-combo-score--mid\";\n return \"fw-dev-combo-score--low\";\n };\n\n // Determine rank class\n const getRankClass = () => {\n if (isActive) return \"fw-dev-combo-rank--active\";\n if (!combo.compatible && !isCodecIncompat) return \"fw-dev-combo-rank--disabled\";\n if (isCodecIncompat) return \"fw-dev-combo-rank--warn\";\n return \"\";\n };\n\n // Determine type class\n const getTypeClass = () => {\n if (!combo.compatible && !isCodecIncompat) return \"fw-dev-combo-type--disabled\";\n if (isCodecIncompat) return \"fw-dev-combo-type--warn\";\n return \"\";\n };\n\n return (\n <div\n key={`${combo.player}-${combo.sourceType}`}\n onMouseEnter={(e) => {\n setHoveredComboIndex(index);\n if (comboListRef.current) {\n const container = comboListRef.current;\n const row = e.currentTarget;\n const containerRect = container.getBoundingClientRect();\n const rowRect = row.getBoundingClientRect();\n const relativePosition =\n (rowRect.top - containerRect.top) / containerRect.height;\n setTooltipAbove(relativePosition > 0.6);\n }\n }}\n onMouseLeave={() => setHoveredComboIndex(null)}\n className=\"fw-dev-combo\"\n >\n <button\n type=\"button\"\n onClick={() => handleSelectCombo(index)}\n className={cn(\n \"fw-dev-combo-btn\",\n isActive && \"fw-dev-combo-btn--active\",\n !combo.compatible && !isCodecIncompat && \"fw-dev-combo-btn--disabled\",\n isCodecIncompat && \"fw-dev-combo-btn--codec-warn\"\n )}\n >\n {/* Rank */}\n <span className={cn(\"fw-dev-combo-rank\", getRankClass())}>\n {combo.compatible ? index + 1 : isCodecIncompat ? \"⚠\" : \"—\"}\n </span>\n {/* Player + Protocol */}\n <span className=\"fw-dev-combo-name\">\n {combo.playerName} <span className=\"fw-dev-combo-arrow\">→</span>{\" \"}\n <span className={cn(\"fw-dev-combo-type\", getTypeClass())}>\n {typeLabel}\n </span>\n </span>\n {/* Score */}\n <span className={cn(\"fw-dev-combo-score\", getScoreClass())}>\n {combo.score.toFixed(2)}\n </span>\n </button>\n\n {/* Score breakdown tooltip */}\n {hoveredComboIndex === index && (\n <div\n className={cn(\n \"fw-dev-tooltip\",\n tooltipAbove ? \"fw-dev-tooltip--above\" : \"fw-dev-tooltip--below\"\n )}\n >\n {/* Full player/source info */}\n <div className=\"fw-dev-tooltip-header\">\n <div className=\"fw-dev-tooltip-title\">{combo.playerName}</div>\n <div className=\"fw-dev-tooltip-subtitle\">{combo.sourceType}</div>\n {combo.scoreBreakdown?.trackTypes &&\n combo.scoreBreakdown.trackTypes.length > 0 && (\n <div className=\"fw-dev-tooltip-tracks\">\n Tracks:{\" \"}\n <span className=\"fw-dev-tooltip-value\">\n {combo.scoreBreakdown.trackTypes.join(\", \")}\n </span>\n </div>\n )}\n </div>\n {combo.compatible && combo.scoreBreakdown ? (\n <>\n <div className=\"fw-dev-tooltip-score\">\n Score: {combo.score.toFixed(2)}\n </div>\n <div className=\"fw-dev-tooltip-row\">\n Tracks [{combo.scoreBreakdown.trackTypes.join(\", \")}]:{\" \"}\n <span className=\"fw-dev-tooltip-value\">\n {combo.scoreBreakdown.trackScore.toFixed(2)}\n </span>{\" \"}\n <span className=\"fw-dev-tooltip-weight\">\n x{combo.scoreBreakdown.weights.tracks}\n </span>\n </div>\n <div className=\"fw-dev-tooltip-row\">\n Priority:{\" \"}\n <span className=\"fw-dev-tooltip-value\">\n {combo.scoreBreakdown.priorityScore.toFixed(2)}\n </span>{\" \"}\n <span className=\"fw-dev-tooltip-weight\">\n x{combo.scoreBreakdown.weights.priority}\n </span>\n </div>\n <div className=\"fw-dev-tooltip-row\">\n Source:{\" \"}\n <span className=\"fw-dev-tooltip-value\">\n {combo.scoreBreakdown.sourceScore.toFixed(2)}\n </span>{\" \"}\n <span className=\"fw-dev-tooltip-weight\">\n x{combo.scoreBreakdown.weights.source}\n </span>\n </div>\n {combo.scoreBreakdown.reliabilityScore !== undefined && (\n <div className=\"fw-dev-tooltip-row\">\n Reliability:{\" \"}\n <span className=\"fw-dev-tooltip-value\">\n {combo.scoreBreakdown.reliabilityScore.toFixed(2)}\n </span>{\" \"}\n <span className=\"fw-dev-tooltip-weight\">\n x{combo.scoreBreakdown.weights.reliability ?? 0}\n </span>\n </div>\n )}\n {combo.scoreBreakdown.modeBonus !== undefined &&\n combo.scoreBreakdown.modeBonus !== 0 && (\n <div className=\"fw-dev-tooltip-row\">\n Mode ({playbackMode}):{\" \"}\n <span className=\"fw-dev-tooltip-bonus\">\n +{combo.scoreBreakdown.modeBonus.toFixed(2)}\n </span>{\" \"}\n <span className=\"fw-dev-tooltip-weight\">\n x{combo.scoreBreakdown.weights.mode ?? 0}\n </span>\n </div>\n )}\n {combo.scoreBreakdown.routingBonus !== undefined &&\n combo.scoreBreakdown.routingBonus !== 0 && (\n <div className=\"fw-dev-tooltip-row\">\n Routing:{\" \"}\n <span\n className={\n combo.scoreBreakdown.routingBonus > 0\n ? \"fw-dev-tooltip-bonus\"\n : \"fw-dev-tooltip-penalty\"\n }\n >\n {combo.scoreBreakdown.routingBonus > 0 ? \"+\" : \"\"}\n {combo.scoreBreakdown.routingBonus.toFixed(2)}\n </span>{\" \"}\n <span className=\"fw-dev-tooltip-weight\">\n x{combo.scoreBreakdown.weights.routing ?? 0}\n </span>\n </div>\n )}\n </>\n ) : (\n <div className=\"fw-dev-tooltip-error\">\n {combo.incompatibleReason || \"Incompatible\"}\n </div>\n )}\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* Stats Tab */}\n {activeTab === \"stats\" && (\n <div className=\"fw-dev-body\">\n {/* Playback Rate */}\n <div className=\"fw-dev-section\">\n <div className=\"fw-dev-label\">Playback Rate</div>\n <div className=\"fw-dev-rate\">\n <div\n className={cn(\n \"fw-dev-rate-value\",\n playbackScore >= 0.95 && playbackScore <= 1.05\n ? \"fw-dev-stat-value--good\"\n : playbackScore > 1.05\n ? \"fw-dev-stat-value--accent\"\n : playbackScore >= 0.75\n ? \"fw-dev-stat-value--warn\"\n : \"fw-dev-stat-value--bad\"\n )}\n >\n {playbackScore.toFixed(2)}×\n </div>\n <div className=\"fw-dev-rate-status\">\n {playbackScore >= 0.95 && playbackScore <= 1.05\n ? \"realtime\"\n : playbackScore > 1.05\n ? \"catching up\"\n : playbackScore >= 0.75\n ? \"slightly slow\"\n : \"stalling\"}\n </div>\n </div>\n <div className=\"fw-dev-rate-stats\">\n <span\n className={\n qualityScore >= 75 ? \"fw-dev-stat-value--good\" : \"fw-dev-stat-value--bad\"\n }\n >\n Quality: {qualityScore}/100\n </span>\n <span\n className={stallCount === 0 ? \"fw-dev-stat-value--good\" : \"fw-dev-stat-value--warn\"}\n >\n Stalls: {stallCount}\n </span>\n <span\n className={frameDropRate < 1 ? \"fw-dev-stat-value--good\" : \"fw-dev-stat-value--bad\"}\n >\n Drops: {frameDropRate.toFixed(1)}%\n </span>\n </div>\n </div>\n\n {/* Video Stats */}\n {stats ? (\n <div>\n <div className=\"fw-dev-stat\">\n <span className=\"fw-dev-stat-label\">Resolution</span>\n <span className=\"fw-dev-stat-value\">{stats.resolution}</span>\n </div>\n <div className=\"fw-dev-stat\">\n <span className=\"fw-dev-stat-label\">Buffer</span>\n <span className=\"fw-dev-stat-value\">{stats.buffered}s</span>\n </div>\n <div className=\"fw-dev-stat\">\n <span className=\"fw-dev-stat-label\">Playback Rate</span>\n <span className=\"fw-dev-stat-value\">{stats.playbackRate}x</span>\n </div>\n <div className=\"fw-dev-stat\">\n <span className=\"fw-dev-stat-label\">Time</span>\n <span className=\"fw-dev-stat-value\">\n {stats.currentTime} / {stats.duration}\n </span>\n </div>\n <div className=\"fw-dev-stat\">\n <span className=\"fw-dev-stat-label\">Ready State</span>\n <span className=\"fw-dev-stat-value\">{stats.readyState}</span>\n </div>\n <div className=\"fw-dev-stat\">\n <span className=\"fw-dev-stat-label\">Network State</span>\n <span className=\"fw-dev-stat-value\">{stats.networkState}</span>\n </div>\n {protocol && (\n <div className=\"fw-dev-stat\">\n <span className=\"fw-dev-stat-label\">Protocol</span>\n <span className=\"fw-dev-stat-value\">{protocol}</span>\n </div>\n )}\n {nodeId && (\n <div className=\"fw-dev-stat\">\n <span className=\"fw-dev-stat-label\">Node ID</span>\n <span className=\"fw-dev-stat-value truncate\" style={{ maxWidth: \"150px\" }}>\n {nodeId}\n </span>\n </div>\n )}\n </div>\n ) : (\n <div className=\"fw-dev-list-empty\">No video element available</div>\n )}\n\n {/* Player-specific Stats (HLS.js / WebRTC) */}\n {playerStats && (\n <div>\n <div className=\"fw-dev-list-header fw-dev-section-header\">\n <span className=\"fw-dev-list-title\">\n {playerStats.type === \"hls\"\n ? \"HLS.js Stats\"\n : playerStats.type === \"webrtc\"\n ? \"WebRTC Stats\"\n : \"Player Stats\"}\n </span>\n </div>\n\n {/* HLS-specific stats */}\n {playerStats.type === \"hls\" && (\n <>\n <div className=\"fw-dev-stat\">\n <span className=\"fw-dev-stat-label\">Bitrate</span>\n <span className=\"fw-dev-stat-value--accent\">\n {playerStats.currentBitrate > 0\n ? `${Math.round(playerStats.currentBitrate / 1000)} kbps`\n : \"N/A\"}\n </span>\n </div>\n <div className=\"fw-dev-stat\">\n <span className=\"fw-dev-stat-label\">Bandwidth Est.</span>\n <span className=\"fw-dev-stat-value\">\n {playerStats.bandwidthEstimate > 0\n ? `${Math.round(playerStats.bandwidthEstimate / 1000)} kbps`\n : \"N/A\"}\n </span>\n </div>\n <div className=\"fw-dev-stat\">\n <span className=\"fw-dev-stat-label\">Level</span>\n <span className=\"fw-dev-stat-value\">\n {playerStats.currentLevel >= 0 ? playerStats.currentLevel : \"Auto\"} /{\" \"}\n {playerStats.levels?.length || 0}\n </span>\n </div>\n {playerStats.latency !== undefined && (\n <div className=\"fw-dev-stat\">\n <span className=\"fw-dev-stat-label\">Latency</span>\n <span\n className={\n playerStats.latency > 5000\n ? \"fw-dev-stat-value--warn\"\n : \"fw-dev-stat-value\"\n }\n >\n {Math.round(playerStats.latency)} ms\n </span>\n </div>\n )}\n </>\n )}\n\n {/* WebRTC-specific stats */}\n {playerStats.type === \"webrtc\" && (\n <>\n {playerStats.video && (\n <>\n <div className=\"fw-dev-stat\">\n <span className=\"fw-dev-stat-label\">Video Bitrate</span>\n <span className=\"fw-dev-stat-value--accent\">\n {playerStats.video.bitrate > 0\n ? `${Math.round(playerStats.video.bitrate / 1000)} kbps`\n : \"N/A\"}\n </span>\n </div>\n <div className=\"fw-dev-stat\">\n <span className=\"fw-dev-stat-label\">FPS</span>\n <span className=\"fw-dev-stat-value\">\n {Math.round(playerStats.video.framesPerSecond || 0)}\n </span>\n </div>\n <div className=\"fw-dev-stat\">\n <span className=\"fw-dev-stat-label\">Frames</span>\n <span className=\"fw-dev-stat-value\">\n {playerStats.video.framesDecoded} decoded,{\" \"}\n <span\n className={\n playerStats.video.frameDropRate > 1\n ? \"fw-dev-stat-value--bad\"\n : \"fw-dev-stat-value--good\"\n }\n >\n {playerStats.video.framesDropped} dropped\n </span>\n </span>\n </div>\n <div className=\"fw-dev-stat\">\n <span className=\"fw-dev-stat-label\">Packet Loss</span>\n <span\n className={\n playerStats.video.packetLossRate > 1\n ? \"fw-dev-stat-value--bad\"\n : \"fw-dev-stat-value--good\"\n }\n >\n {playerStats.video.packetLossRate.toFixed(2)}%\n </span>\n </div>\n <div className=\"fw-dev-stat\">\n <span className=\"fw-dev-stat-label\">Jitter</span>\n <span\n className={\n playerStats.video.jitter > 30\n ? \"fw-dev-stat-value--warn\"\n : \"fw-dev-stat-value\"\n }\n >\n {playerStats.video.jitter.toFixed(1)} ms\n </span>\n </div>\n <div className=\"fw-dev-stat\">\n <span className=\"fw-dev-stat-label\">Jitter Buffer</span>\n <span className=\"fw-dev-stat-value\">\n {playerStats.video.jitterBufferDelay.toFixed(1)} ms\n </span>\n </div>\n </>\n )}\n {playerStats.network && (\n <div className=\"fw-dev-stat\">\n <span className=\"fw-dev-stat-label\">RTT</span>\n <span\n className={\n playerStats.network.rtt > 200\n ? \"fw-dev-stat-value--warn\"\n : \"fw-dev-stat-value\"\n }\n >\n {Math.round(playerStats.network.rtt)} ms\n </span>\n </div>\n )}\n </>\n )}\n </div>\n )}\n\n {/* MistServer Track Info */}\n {mistStreamInfo?.meta?.tracks && Object.keys(mistStreamInfo.meta.tracks).length > 0 && (\n <div>\n <div className=\"fw-dev-list-header fw-dev-section-header\">\n <span className=\"fw-dev-list-title\">\n Tracks ({Object.keys(mistStreamInfo.meta.tracks).length})\n </span>\n </div>\n {Object.entries(mistStreamInfo.meta.tracks).map(([id, track]) => (\n <div key={id} className=\"fw-dev-track\">\n <div className=\"fw-dev-track-header\">\n <span\n className={cn(\n \"fw-dev-track-badge\",\n track.type === \"video\"\n ? \"fw-dev-track-badge--video\"\n : track.type === \"audio\"\n ? \"fw-dev-track-badge--audio\"\n : \"fw-dev-track-badge--other\"\n )}\n >\n {track.type}\n </span>\n <span className=\"fw-dev-track-codec\">{track.codec}</span>\n <span className=\"fw-dev-track-id\">#{id}</span>\n </div>\n <div className=\"fw-dev-track-meta\">\n {track.type === \"video\" && track.width && track.height && (\n <span>\n {track.width}×{track.height}\n </span>\n )}\n {track.bps && <span>{Math.round(track.bps / 1000)} kbps</span>}\n {track.fpks && <span>{Math.round(track.fpks / 1000)} fps</span>}\n {track.type === \"audio\" && track.channels && <span>{track.channels}ch</span>}\n {track.type === \"audio\" && track.rate && <span>{track.rate} Hz</span>}\n {track.lang && <span>{track.lang}</span>}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* Debug: Show if mistStreamInfo is missing tracks */}\n {mistStreamInfo &&\n (!mistStreamInfo.meta?.tracks ||\n Object.keys(mistStreamInfo.meta.tracks).length === 0) && (\n <div className=\"fw-dev-no-tracks\">\n <span className=\"fw-dev-no-tracks-text\">\n No track data available\n {mistStreamInfo.type && (\n <span className=\"fw-dev-no-tracks-type\">({mistStreamInfo.type})</span>\n )}\n </span>\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport default DevModePanel;\n"],"names":["SOURCE_TYPE_LABELS","whep","DevModePanel","_ref","_playerStats$levels","_mistStreamInfo$meta","_mistStreamInfo$meta2","onSettingsChange","_ref$playbackMode","playbackMode","onModeChange","onReload","streamInfo","mistStreamInfo","currentPlayer","currentSource","videoElement","protocol","nodeId","isVisible","_isVisible","controlledIsOpen","isOpen","onOpenChange","_useState","useState","_useState2","_slicedToArray","internalIsOpen","setInternalIsOpen","undefined","setIsOpen","useCallback","value","_useState3","_useState4","activeTab","setActiveTab","_useState5","_useState6","setCurrentComboIndex","_useState7","_useState8","hoveredComboIndex","setHoveredComboIndex","_useState9","_useState0","tooltipAbove","setTooltipAbove","_useState1","_useState10","showDisabledPlayers","setShowDisabledPlayers","comboListRef","useRef","qualityMonitorRef","_useState11","_useState12","playbackScore","setPlaybackScore","_useState13","_useState14","qualityScore","setQualityScore","_useState15","_useState16","stallCount","setStallCount","_useState17","_useState18","frameDropRate","setFrameDropRate","_useState19","_useState20","playerStats","setPlayerStats","statsIntervalRef","useEffect","current","QualityMonitor","sampleInterval","onSample","quality","score","getPlaybackScore","start","stop","pollStats","_ref2","_asyncToGenerator","_regenerator","m","_callee","player","_stats","w","_context","p","n","globalPlayerManager","getCurrentPlayer","getStats","stats","v","a","apply","arguments","setInterval","clearInterval","allCombinations","useMemo","getAllCombinations","_unused2","combinations","filter","c","compatible","activeComboIndex","length","findIndex","shortname","sourceType","type","activeCompatibleIndex","handleReload","handleNextCombo","startIdx","nextIdx","combo","forcePlayer","forceType","forceSource","sourceIndex","handleSelectCombo","index","_useState21","_useState22","setStats","updateStats","getVideoElement","resolution","concat","videoWidth","videoHeight","buffered","end","currentTime","toFixed","playbackRate","duration","isFinite","readyState","networkState","interval","_jsxs","className","children","_jsx","onClick","cn","width","height","viewBox","fill","stroke","strokeWidth","d","ref","name","map","mode","charAt","toUpperCase","slice","style","padding","borderBottom","_combo$scoreBreakdown","_combo$scoreBreakdown2","_combo$scoreBreakdown3","_combo$scoreBreakdown4","isCodecIncompat","codecIncompatible","isActive","typeLabel","split","pop","getScoreClass","getRankClass","getTypeClass","onMouseEnter","e","container","row","currentTarget","containerRect","getBoundingClientRect","rowRect","relativePosition","top","onMouseLeave","playerName","scoreBreakdown","trackTypes","join","_Fragment","trackScore","weights","tracks","priorityScore","priority","sourceScore","source","reliabilityScore","reliability","modeBonus","routingBonus","routing","incompatibleReason","maxWidth","currentBitrate","Math","round","bandwidthEstimate","currentLevel","levels","latency","video","bitrate","framesPerSecond","framesDecoded","framesDropped","packetLossRate","jitter","jitterBufferDelay","network","rtt","meta","Object","keys","entries","_ref3","_ref4","id","track","codec","bps","fpks","channels","rate","lang"],"mappings":"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"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.js');
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
var React = require('react');
|
|
8
|
+
|
|
9
|
+
var ORIGINAL_WIDTH = 153;
|
|
10
|
+
var ORIGINAL_HEIGHT = 69;
|
|
11
|
+
var ASPECT_RATIO = ORIGINAL_WIDTH / ORIGINAL_HEIGHT;
|
|
12
|
+
var COLORS = ["#7aa2f7", "#bb9af7", "#9ece6a", "#73daca", "#7dcfff", "#f7768e", "#e0af68", "#2ac3de"];
|
|
13
|
+
var pickNextColor = function pickNextColor(current) {
|
|
14
|
+
if (COLORS.length === 0) {
|
|
15
|
+
return current !== null && current !== void 0 ? current : "#ffffff";
|
|
16
|
+
}
|
|
17
|
+
if (COLORS.length === 1) {
|
|
18
|
+
return COLORS[0];
|
|
19
|
+
}
|
|
20
|
+
var next;
|
|
21
|
+
do {
|
|
22
|
+
next = COLORS[Math.floor(Math.random() * COLORS.length)];
|
|
23
|
+
} while (next === current);
|
|
24
|
+
return next;
|
|
25
|
+
};
|
|
26
|
+
var DvdLogo = function DvdLogo(_ref) {
|
|
27
|
+
var parentRef = _ref.parentRef,
|
|
28
|
+
_ref$scale = _ref.scale,
|
|
29
|
+
scale = _ref$scale === void 0 ? 0.15 : _ref$scale;
|
|
30
|
+
var _useState = React.useState({
|
|
31
|
+
top: 0,
|
|
32
|
+
left: 0
|
|
33
|
+
}),
|
|
34
|
+
_useState2 = _rollupPluginBabelHelpers.slicedToArray(_useState, 2),
|
|
35
|
+
position = _useState2[0],
|
|
36
|
+
setPosition = _useState2[1];
|
|
37
|
+
var positionRef = React.useRef(position);
|
|
38
|
+
React.useEffect(function () {
|
|
39
|
+
positionRef.current = position;
|
|
40
|
+
}, [position]);
|
|
41
|
+
var _useState3 = React.useState({
|
|
42
|
+
width: ORIGINAL_WIDTH,
|
|
43
|
+
height: ORIGINAL_HEIGHT
|
|
44
|
+
}),
|
|
45
|
+
_useState4 = _rollupPluginBabelHelpers.slicedToArray(_useState3, 2),
|
|
46
|
+
dimensions = _useState4[0],
|
|
47
|
+
setDimensions = _useState4[1];
|
|
48
|
+
var dimensionsRef = React.useRef(dimensions);
|
|
49
|
+
React.useEffect(function () {
|
|
50
|
+
dimensionsRef.current = dimensions;
|
|
51
|
+
}, [dimensions]);
|
|
52
|
+
var velocityRef = React.useRef({
|
|
53
|
+
x: 1.8,
|
|
54
|
+
y: 1.6
|
|
55
|
+
});
|
|
56
|
+
var _useState5 = React.useState(pickNextColor()),
|
|
57
|
+
_useState6 = _rollupPluginBabelHelpers.slicedToArray(_useState5, 2),
|
|
58
|
+
color = _useState6[0],
|
|
59
|
+
setColor = _useState6[1];
|
|
60
|
+
var recalculateDimensions = React.useCallback(function () {
|
|
61
|
+
var parent = parentRef.current;
|
|
62
|
+
if (!parent) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
var parentWidth = parent.clientWidth;
|
|
66
|
+
var parentHeight = parent.clientHeight;
|
|
67
|
+
if (parentWidth === 0 || parentHeight === 0) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
var maxWidth = parentWidth * scale;
|
|
71
|
+
var maxHeight = parentHeight * scale;
|
|
72
|
+
var width = maxWidth;
|
|
73
|
+
var height = width / ASPECT_RATIO;
|
|
74
|
+
if (height > maxHeight) {
|
|
75
|
+
height = maxHeight;
|
|
76
|
+
width = height * ASPECT_RATIO;
|
|
77
|
+
}
|
|
78
|
+
var nextDimensions = {
|
|
79
|
+
width: Math.max(20, width),
|
|
80
|
+
height: Math.max(20, height)
|
|
81
|
+
};
|
|
82
|
+
dimensionsRef.current = nextDimensions;
|
|
83
|
+
setDimensions(nextDimensions);
|
|
84
|
+
var maxTop = Math.max(0, parentHeight - nextDimensions.height);
|
|
85
|
+
var maxLeft = Math.max(0, parentWidth - nextDimensions.width);
|
|
86
|
+
var startPosition = {
|
|
87
|
+
top: Math.random() * maxTop,
|
|
88
|
+
left: Math.random() * maxLeft
|
|
89
|
+
};
|
|
90
|
+
positionRef.current = startPosition;
|
|
91
|
+
setPosition(startPosition);
|
|
92
|
+
var baseSpeed = Math.max(1.2, Math.min(nextDimensions.width, nextDimensions.height) / 70);
|
|
93
|
+
velocityRef.current = {
|
|
94
|
+
x: baseSpeed * (Math.random() > 0.5 ? 1 : -1),
|
|
95
|
+
y: baseSpeed * (Math.random() > 0.5 ? 1 : -1)
|
|
96
|
+
};
|
|
97
|
+
}, [parentRef, scale]);
|
|
98
|
+
React.useEffect(function () {
|
|
99
|
+
if (!parentRef.current) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
recalculateDimensions();
|
|
103
|
+
if (typeof ResizeObserver !== "undefined") {
|
|
104
|
+
var observer = new ResizeObserver(function () {
|
|
105
|
+
return recalculateDimensions();
|
|
106
|
+
});
|
|
107
|
+
observer.observe(parentRef.current);
|
|
108
|
+
return function () {
|
|
109
|
+
return observer.disconnect();
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
var onResize = function onResize() {
|
|
113
|
+
return recalculateDimensions();
|
|
114
|
+
};
|
|
115
|
+
window.addEventListener("resize", onResize);
|
|
116
|
+
return function () {
|
|
117
|
+
return window.removeEventListener("resize", onResize);
|
|
118
|
+
};
|
|
119
|
+
}, [parentRef, recalculateDimensions]);
|
|
120
|
+
React.useEffect(function () {
|
|
121
|
+
var animationFrame;
|
|
122
|
+
var lastTimestamp = performance.now();
|
|
123
|
+
var _animate = function animate(timestamp) {
|
|
124
|
+
var parent = parentRef.current;
|
|
125
|
+
var dims = dimensionsRef.current;
|
|
126
|
+
if (!parent || dims.width === 0 || dims.height === 0) {
|
|
127
|
+
animationFrame = requestAnimationFrame(_animate);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
var deltaMs = timestamp - lastTimestamp;
|
|
131
|
+
lastTimestamp = timestamp;
|
|
132
|
+
var speedMultiplier = Math.min(deltaMs / 16, 2);
|
|
133
|
+
var maxTop = parent.clientHeight - dims.height;
|
|
134
|
+
var maxLeft = parent.clientWidth - dims.width;
|
|
135
|
+
var _positionRef$current = positionRef.current,
|
|
136
|
+
top = _positionRef$current.top,
|
|
137
|
+
left = _positionRef$current.left;
|
|
138
|
+
var _velocityRef$current = velocityRef.current,
|
|
139
|
+
x = _velocityRef$current.x,
|
|
140
|
+
y = _velocityRef$current.y;
|
|
141
|
+
var bounced = false;
|
|
142
|
+
top += y * speedMultiplier;
|
|
143
|
+
left += x * speedMultiplier;
|
|
144
|
+
if (top <= 0 || top >= maxTop) {
|
|
145
|
+
y = -y;
|
|
146
|
+
top = Math.max(0, Math.min(maxTop, top));
|
|
147
|
+
bounced = true;
|
|
148
|
+
}
|
|
149
|
+
if (left <= 0 || left >= maxLeft) {
|
|
150
|
+
x = -x;
|
|
151
|
+
left = Math.max(0, Math.min(maxLeft, left));
|
|
152
|
+
bounced = true;
|
|
153
|
+
}
|
|
154
|
+
velocityRef.current = {
|
|
155
|
+
x: x,
|
|
156
|
+
y: y
|
|
157
|
+
};
|
|
158
|
+
var nextPosition = {
|
|
159
|
+
top: top,
|
|
160
|
+
left: left
|
|
161
|
+
};
|
|
162
|
+
positionRef.current = nextPosition;
|
|
163
|
+
setPosition(nextPosition);
|
|
164
|
+
if (bounced) {
|
|
165
|
+
setColor(function (current) {
|
|
166
|
+
return pickNextColor(current);
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
animationFrame = requestAnimationFrame(_animate);
|
|
170
|
+
};
|
|
171
|
+
animationFrame = requestAnimationFrame(_animate);
|
|
172
|
+
return function () {
|
|
173
|
+
return cancelAnimationFrame(animationFrame);
|
|
174
|
+
};
|
|
175
|
+
}, [parentRef]);
|
|
176
|
+
return jsxRuntime.jsx("div", {
|
|
177
|
+
className: "fw-player-dvd",
|
|
178
|
+
style: {
|
|
179
|
+
top: "".concat(position.top, "px"),
|
|
180
|
+
left: "".concat(position.left, "px"),
|
|
181
|
+
width: "".concat(dimensions.width, "px"),
|
|
182
|
+
height: "".concat(dimensions.height, "px")
|
|
183
|
+
},
|
|
184
|
+
children: jsxRuntime.jsx("svg", {
|
|
185
|
+
width: "100%",
|
|
186
|
+
height: "100%",
|
|
187
|
+
viewBox: "0 0 153 69",
|
|
188
|
+
fill: color,
|
|
189
|
+
className: "select-none",
|
|
190
|
+
children: jsxRuntime.jsx("g", {
|
|
191
|
+
children: jsxRuntime.jsx("path", {
|
|
192
|
+
d: "M140.186,63.52h-1.695l-0.692,5.236h-0.847l0.77-5.236h-1.693l0.076-0.694h4.158L140.186,63.52L140.186,63.52z M146.346,68.756h-0.848v-4.545l0,0l-2.389,4.545l-1-4.545l0,0l-1.462,4.545h-0.771l1.924-5.931h0.695l0.924,4.006l2.078-4.006 h0.848V68.756L146.346,68.756z M126.027,0.063H95.352c0,0-8.129,9.592-9.654,11.434c-8.064,9.715-9.523,12.32-9.779,13.02 c0.063-0.699-0.256-3.304-3.686-13.148C71.282,8.7,68.359,0.062,68.359,0.062H57.881V0L32.35,0.063H13.169l-1.97,8.131 l14.543,0.062h3.365c9.336,0,15.055,3.747,13.467,10.354c-1.717,7.24-9.91,10.416-18.545,10.416h-3.24l4.191-17.783H10.502 L4.34,37.219h20.578c15.432,0,30.168-8.13,32.709-18.608c0.508-1.906,0.443-6.67-0.764-9.527c0-0.127-0.063-0.191-0.127-0.444 c-0.064-0.063-0.127-0.509,0.127-0.571c0.128-0.062,0.383,0.189,0.445,0.254c0.127,0.317,0.19,0.57,0.19,0.57l13.083,36.965 l33.344-37.6h14.1h3.365c9.337,0,15.055,3.747,13.528,10.354c-1.778,7.24-9.972,10.416-18.608,10.416h-3.238l4.191-17.783h-14.481 l-6.159,25.976h20.576c15.434,0,30.232-8.13,32.709-18.608C152.449,8.193,141.523,0.063,126.027,0.063L126.027,0.063z M71.091,45.981c-39.123,0-70.816,4.512-70.816,10.035c0,5.59,31.693,10.034,70.816,10.034c39.121,0,70.877-4.444,70.877-10.034 C141.968,50.493,110.212,45.981,71.091,45.981L71.091,45.981z M68.55,59.573c-8.956,0-16.196-1.523-16.196-3.365 c0-1.84,7.239-3.303,16.196-3.303c8.955,0,16.195,1.463,16.195,3.303C84.745,58.050,77.505,59.573,68.55,59.573L68.55,59.573z"
|
|
193
|
+
})
|
|
194
|
+
})
|
|
195
|
+
})
|
|
196
|
+
});
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
exports.default = DvdLogo;
|
|
200
|
+
//# sourceMappingURL=DvdLogo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DvdLogo.js","sources":["../../../../src/components/DvdLogo.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\nimport type { DvdLogoProps } from \"../types\";\n\ntype Point = { top: number; left: number };\ntype Velocity = { x: number; y: number };\ntype Size = { width: number; height: number };\n\nconst ORIGINAL_WIDTH = 153;\nconst ORIGINAL_HEIGHT = 69;\nconst ASPECT_RATIO = ORIGINAL_WIDTH / ORIGINAL_HEIGHT;\n\nconst COLORS = [\n \"#7aa2f7\",\n \"#bb9af7\",\n \"#9ece6a\",\n \"#73daca\",\n \"#7dcfff\",\n \"#f7768e\",\n \"#e0af68\",\n \"#2ac3de\",\n];\n\nconst pickNextColor = (current?: string): string => {\n if (COLORS.length === 0) {\n return current ?? \"#ffffff\";\n }\n\n if (COLORS.length === 1) {\n return COLORS[0];\n }\n\n let next: string;\n do {\n next = COLORS[Math.floor(Math.random() * COLORS.length)];\n } while (next === current);\n\n return next;\n};\n\nconst DvdLogo: React.FC<DvdLogoProps> = ({ parentRef, scale = 0.15 }) => {\n const [position, setPosition] = useState<Point>({ top: 0, left: 0 });\n const positionRef = useRef<Point>(position);\n useEffect(() => {\n positionRef.current = position;\n }, [position]);\n\n const [dimensions, setDimensions] = useState<Size>({\n width: ORIGINAL_WIDTH,\n height: ORIGINAL_HEIGHT,\n });\n const dimensionsRef = useRef<Size>(dimensions);\n useEffect(() => {\n dimensionsRef.current = dimensions;\n }, [dimensions]);\n\n const velocityRef = useRef<Velocity>({ x: 1.8, y: 1.6 });\n const [color, setColor] = useState<string>(pickNextColor());\n\n const recalculateDimensions = React.useCallback(() => {\n const parent = parentRef.current;\n if (!parent) {\n return;\n }\n\n const parentWidth = parent.clientWidth;\n const parentHeight = parent.clientHeight;\n if (parentWidth === 0 || parentHeight === 0) {\n return;\n }\n\n const maxWidth = parentWidth * scale;\n const maxHeight = parentHeight * scale;\n\n let width = maxWidth;\n let height = width / ASPECT_RATIO;\n\n if (height > maxHeight) {\n height = maxHeight;\n width = height * ASPECT_RATIO;\n }\n\n const nextDimensions: Size = {\n width: Math.max(20, width),\n height: Math.max(20, height),\n };\n\n dimensionsRef.current = nextDimensions;\n setDimensions(nextDimensions);\n\n const maxTop = Math.max(0, parentHeight - nextDimensions.height);\n const maxLeft = Math.max(0, parentWidth - nextDimensions.width);\n\n const startPosition: Point = {\n top: Math.random() * maxTop,\n left: Math.random() * maxLeft,\n };\n\n positionRef.current = startPosition;\n setPosition(startPosition);\n\n const baseSpeed = Math.max(1.2, Math.min(nextDimensions.width, nextDimensions.height) / 70);\n velocityRef.current = {\n x: baseSpeed * (Math.random() > 0.5 ? 1 : -1),\n y: baseSpeed * (Math.random() > 0.5 ? 1 : -1),\n };\n }, [parentRef, scale]);\n\n useEffect(() => {\n if (!parentRef.current) {\n return;\n }\n\n recalculateDimensions();\n\n if (typeof ResizeObserver !== \"undefined\") {\n const observer = new ResizeObserver(() => recalculateDimensions());\n observer.observe(parentRef.current);\n return () => observer.disconnect();\n }\n\n const onResize = () => recalculateDimensions();\n window.addEventListener(\"resize\", onResize);\n return () => window.removeEventListener(\"resize\", onResize);\n }, [parentRef, recalculateDimensions]);\n\n useEffect(() => {\n let animationFrame: number;\n let lastTimestamp = performance.now();\n\n const animate = (timestamp: number) => {\n const parent = parentRef.current;\n const dims = dimensionsRef.current;\n\n if (!parent || dims.width === 0 || dims.height === 0) {\n animationFrame = requestAnimationFrame(animate);\n return;\n }\n\n const deltaMs = timestamp - lastTimestamp;\n lastTimestamp = timestamp;\n const speedMultiplier = Math.min(deltaMs / 16, 2);\n\n const maxTop = parent.clientHeight - dims.height;\n const maxLeft = parent.clientWidth - dims.width;\n\n let { top, left } = positionRef.current;\n let { x, y } = velocityRef.current;\n let bounced = false;\n\n top += y * speedMultiplier;\n left += x * speedMultiplier;\n\n if (top <= 0 || top >= maxTop) {\n y = -y;\n top = Math.max(0, Math.min(maxTop, top));\n bounced = true;\n }\n\n if (left <= 0 || left >= maxLeft) {\n x = -x;\n left = Math.max(0, Math.min(maxLeft, left));\n bounced = true;\n }\n\n velocityRef.current = { x, y };\n const nextPosition = { top, left };\n positionRef.current = nextPosition;\n setPosition(nextPosition);\n\n if (bounced) {\n setColor((current) => pickNextColor(current));\n }\n\n animationFrame = requestAnimationFrame(animate);\n };\n\n animationFrame = requestAnimationFrame(animate);\n\n return () => cancelAnimationFrame(animationFrame);\n }, [parentRef]);\n\n return (\n <div\n className=\"fw-player-dvd\"\n style={{\n top: `${position.top}px`,\n left: `${position.left}px`,\n width: `${dimensions.width}px`,\n height: `${dimensions.height}px`,\n }}\n >\n <svg width=\"100%\" height=\"100%\" viewBox=\"0 0 153 69\" fill={color} className=\"select-none\">\n <g>\n <path d=\"M140.186,63.52h-1.695l-0.692,5.236h-0.847l0.77-5.236h-1.693l0.076-0.694h4.158L140.186,63.52L140.186,63.52z M146.346,68.756h-0.848v-4.545l0,0l-2.389,4.545l-1-4.545l0,0l-1.462,4.545h-0.771l1.924-5.931h0.695l0.924,4.006l2.078-4.006 h0.848V68.756L146.346,68.756z M126.027,0.063H95.352c0,0-8.129,9.592-9.654,11.434c-8.064,9.715-9.523,12.32-9.779,13.02 c0.063-0.699-0.256-3.304-3.686-13.148C71.282,8.7,68.359,0.062,68.359,0.062H57.881V0L32.35,0.063H13.169l-1.97,8.131 l14.543,0.062h3.365c9.336,0,15.055,3.747,13.467,10.354c-1.717,7.24-9.91,10.416-18.545,10.416h-3.24l4.191-17.783H10.502 L4.34,37.219h20.578c15.432,0,30.168-8.13,32.709-18.608c0.508-1.906,0.443-6.67-0.764-9.527c0-0.127-0.063-0.191-0.127-0.444 c-0.064-0.063-0.127-0.509,0.127-0.571c0.128-0.062,0.383,0.189,0.445,0.254c0.127,0.317,0.19,0.57,0.19,0.57l13.083,36.965 l33.344-37.6h14.1h3.365c9.337,0,15.055,3.747,13.528,10.354c-1.778,7.24-9.972,10.416-18.608,10.416h-3.238l4.191-17.783h-14.481 l-6.159,25.976h20.576c15.434,0,30.232-8.13,32.709-18.608C152.449,8.193,141.523,0.063,126.027,0.063L126.027,0.063z M71.091,45.981c-39.123,0-70.816,4.512-70.816,10.035c0,5.59,31.693,10.034,70.816,10.034c39.121,0,70.877-4.444,70.877-10.034 C141.968,50.493,110.212,45.981,71.091,45.981L71.091,45.981z M68.55,59.573c-8.956,0-16.196-1.523-16.196-3.365 c0-1.84,7.239-3.303,16.196-3.303c8.955,0,16.195,1.463,16.195,3.303C84.745,58.050,77.505,59.573,68.55,59.573L68.55,59.573z\" />\n </g>\n </svg>\n </div>\n );\n};\n\nexport default DvdLogo;\n"],"names":["ORIGINAL_WIDTH","ORIGINAL_HEIGHT","ASPECT_RATIO","COLORS","pickNextColor","current","length","next","Math","floor","random","DvdLogo","_ref","parentRef","_ref$scale","scale","_useState","useState","top","left","_useState2","_slicedToArray","position","setPosition","positionRef","useRef","useEffect","_useState3","width","height","_useState4","dimensions","setDimensions","dimensionsRef","velocityRef","x","y","_useState5","_useState6","color","setColor","recalculateDimensions","React","useCallback","parent","parentWidth","clientWidth","parentHeight","clientHeight","maxWidth","maxHeight","nextDimensions","max","maxTop","maxLeft","startPosition","baseSpeed","min","ResizeObserver","observer","observe","disconnect","onResize","window","addEventListener","removeEventListener","animationFrame","lastTimestamp","performance","now","animate","timestamp","dims","requestAnimationFrame","deltaMs","speedMultiplier","_positionRef$current","_velocityRef$current","bounced","nextPosition","cancelAnimationFrame","_jsx","className","style","concat","children","viewBox","fill","d"],"mappings":"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"}
|