@therealtinhtute/baroiplayer 1.2.0 → 2.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +91 -73
- package/dist/components/icons/index.d.ts +36 -0
- package/dist/components/icons/index.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/ArrowLeftIcon.d.ts +4 -0
- package/dist/components/icons/svg-icons/ArrowLeftIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/ArrowRightIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/ArrowRightIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/AudioIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/AudioIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/BackwardIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/BackwardIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/CameraIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/CameraIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/CheckIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/CheckIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/EnablePiPIcon.d.ts +4 -0
- package/dist/components/icons/svg-icons/EnablePiPIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/ForwardIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/ForwardIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/FullscreenEnterIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/FullscreenEnterIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/FullscreenExitIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/FullscreenExitIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/LoadingIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/LoadingIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/PauseIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/PauseIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/PlayIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/PlayIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/PlaybackSpeedIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/PlaybackSpeedIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/QualityIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/QualityIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/SettingsIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/SettingsIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/SliderIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/SliderIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/SubtitleIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/SubtitleIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/SubtitleOffIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/SubtitleOffIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/UnPiPIcon.d.ts +4 -0
- package/dist/components/icons/svg-icons/UnPiPIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/VolumeMutedIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/VolumeMutedIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/VolumeOneIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/VolumeOneIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/VolumeThreeIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/VolumeThreeIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/VolumeTwoIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/VolumeTwoIcon.d.ts.map +1 -0
- package/dist/components/variants/gradient/gradient-audio.d.ts +13 -0
- package/dist/components/variants/gradient/gradient-audio.d.ts.map +1 -0
- package/dist/components/variants/gradient/gradient-controls.d.ts +4 -0
- package/dist/components/variants/gradient/gradient-controls.d.ts.map +1 -0
- package/dist/components/variants/gradient/gradient-glyphs.d.ts +30 -0
- package/dist/components/variants/gradient/gradient-glyphs.d.ts.map +1 -0
- package/dist/components/variants/gradient/gradient-video.d.ts +16 -0
- package/dist/components/variants/gradient/gradient-video.d.ts.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -112
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +786 -6271
- package/dist/index.mjs.map +1 -1
- package/dist/package.json +3 -0
- package/package.json +110 -108
- package/src/components/variants/gradient/gradient-audio.tsx +47 -0
- package/src/components/variants/gradient/gradient-controls.tsx +254 -0
- package/src/components/variants/gradient/gradient-glyphs.test.tsx +69 -0
- package/src/components/variants/gradient/gradient-glyphs.tsx +129 -0
- package/src/components/variants/gradient/gradient-skin.css +211 -0
- package/src/components/variants/gradient/gradient-video.tsx +70 -0
- package/src/index.ts +5 -198
- package/src/test/accessibility-utils.ts +0 -59
- package/dist/context/media.js +0 -2
- package/dist/context/media.js.map +0 -1
- package/dist/context/media.mjs +0 -15
- package/dist/context/media.mjs.map +0 -1
- package/dist/context/store.js +0 -2
- package/dist/context/store.js.map +0 -1
- package/dist/context/store.mjs +0 -5
- package/dist/context/store.mjs.map +0 -1
- package/dist/context-BYwDoSRX.js +0 -1172
- package/dist/context-BYwDoSRX.js.map +0 -1
- package/dist/context-eNS62_ac.cjs +0 -23
- package/dist/context-eNS62_ac.cjs.map +0 -1
- package/dist/core-events-B1iM2F46.cjs +0 -2
- package/dist/core-events-B1iM2F46.cjs.map +0 -1
- package/dist/core-events-DunPHKRE.js +0 -484
- package/dist/core-events-DunPHKRE.js.map +0 -1
- package/dist/core-plugins-By-4-kGs.cjs +0 -2
- package/dist/core-plugins-By-4-kGs.cjs.map +0 -1
- package/dist/core-plugins-DSBWcTuX.js +0 -821
- package/dist/core-plugins-DSBWcTuX.js.map +0 -1
- package/dist/core.js +0 -37
- package/dist/core.js.map +0 -1
- package/dist/core.mjs +0 -1233
- package/dist/core.mjs.map +0 -1
- package/dist/enhanced-components-B_l3cist.js +0 -1142
- package/dist/enhanced-components-B_l3cist.js.map +0 -1
- package/dist/enhanced-components-BspFs9OO.cjs +0 -2
- package/dist/enhanced-components-BspFs9OO.cjs.map +0 -1
- package/dist/hooks-BXwI8QG6.cjs +0 -4
- package/dist/hooks-BXwI8QG6.cjs.map +0 -1
- package/dist/hooks-Bpi-jDiO.js +0 -1816
- package/dist/hooks-Bpi-jDiO.js.map +0 -1
- package/dist/minimal-components-C4z900Ro.js +0 -1926
- package/dist/minimal-components-C4z900Ro.js.map +0 -1
- package/dist/minimal-components-v4qBp6jv.cjs +0 -2
- package/dist/minimal-components-v4qBp6jv.cjs.map +0 -1
- package/dist/minimal-components.css +0 -1
- package/dist/mona-loading.gif +0 -0
- package/dist/performance-monitor-C5k6FDXw.js +0 -301
- package/dist/performance-monitor-C5k6FDXw.js.map +0 -1
- package/dist/performance-monitor-lJmuUjQQ.cjs +0 -2
- package/dist/performance-monitor-lJmuUjQQ.cjs.map +0 -1
- package/dist/utils-CFOue_9K.cjs +0 -9
- package/dist/utils-CFOue_9K.cjs.map +0 -1
- package/dist/utils-Dzpl2ArK.js +0 -2844
- package/dist/utils-Dzpl2ArK.js.map +0 -1
- package/dist/utils.js +0 -2
- package/dist/utils.js.map +0 -1
- package/dist/utils.mjs +0 -11
- package/dist/utils.mjs.map +0 -1
- package/src/adapters/videojs-adapter.tsx +0 -470
- package/src/assets/mona-loading.gif +0 -0
- package/src/components/AnimateLoading.tsx +0 -107
- package/src/components/LoadingState.tsx +0 -239
- package/src/components/__tests__/media-player-accessibility.test.tsx +0 -510
- package/src/components/__tests__/media-player-react19.test.tsx +0 -457
- package/src/components/accessibility/keyboard-help-overlay.tsx +0 -207
- package/src/components/audio-player.tsx +0 -85
- package/src/components/basic/index.ts +0 -37
- package/src/components/enhanced/advanced-features.tsx +0 -311
- package/src/components/enhanced/debug-panel.tsx +0 -448
- package/src/components/enhanced/enhanced-controls.tsx +0 -597
- package/src/components/enhanced/enhanced-media-player.tsx +0 -566
- package/src/components/enhanced/error-handling.tsx +0 -338
- package/src/components/enhanced/index.ts +0 -39
- package/src/components/enhanced/media-player-enhanced.tsx +0 -383
- package/src/components/examples/basic-video-player.tsx +0 -50
- package/src/components/examples/custom-controls-example.tsx +0 -63
- package/src/components/examples/enhanced-controls-example.tsx +0 -100
- package/src/components/examples/enhanced-media-player-example.tsx +0 -302
- package/src/components/examples/loading-states-demo.tsx +0 -142
- package/src/components/examples/react-19-demo.tsx +0 -353
- package/src/components/examples/volume-orientation-demo.tsx +0 -106
- package/src/components/icon-demo.tsx +0 -196
- package/src/components/legacy.tsx +0 -87
- package/src/components/media-metadata-display.tsx +0 -99
- package/src/components/media-player-audio.tsx +0 -39
- package/src/components/media-player-controls.tsx +0 -223
- package/src/components/media-player-error.tsx +0 -163
- package/src/components/media-player-fullscreen.tsx +0 -109
- package/src/components/media-player-hls.tsx +0 -111
- package/src/components/media-player-loading.tsx +0 -76
- package/src/components/media-player-play.tsx +0 -75
- package/src/components/media-player-root.tsx +0 -338
- package/src/components/media-player-seek.tsx +0 -168
- package/src/components/media-player-time.tsx +0 -99
- package/src/components/media-player-tooltip.tsx +0 -58
- package/src/components/media-player-video.tsx +0 -54
- package/src/components/media-player-volume.tsx +0 -155
- package/src/components/media-player.tsx +0 -292
- package/src/components/media-suspense.tsx +0 -344
- package/src/components/player-settings-form.tsx +0 -158
- package/src/components/react-player-wrapper.tsx +0 -651
- package/src/components/simple-video-player.tsx +0 -62
- package/src/components/ui/blur-poster.tsx +0 -93
- package/src/components/ui/empty-state.tsx +0 -91
- package/src/components/ui/enhanced-seek-bar.tsx +0 -254
- package/src/components/ui/error-state.tsx +0 -124
- package/src/components/ui/fullscreen-button.tsx +0 -81
- package/src/components/ui/loading-skeleton.tsx +0 -107
- package/src/components/ui/media-resource-preloader.tsx +0 -458
- package/src/components/ui/offline-message.tsx +0 -98
- package/src/components/ui/play-button.tsx +0 -99
- package/src/components/ui/seek-bar.tsx +0 -191
- package/src/components/ui/time-display.tsx +0 -61
- package/src/components/ui/volume-control.tsx +0 -190
- package/src/components/unified/base-media-player.tsx +0 -252
- package/src/components/unified/media-player.tsx +0 -75
- package/src/components/variants/minimal/AccessibleMinimalPlayer.tsx +0 -587
- package/src/components/variants/minimal/EnhancedMinimalMediaPlayer.tsx +0 -573
- package/src/components/variants/minimal/MinimalControls.tsx +0 -124
- package/src/components/variants/minimal/MinimalLoading.tsx +0 -28
- package/src/components/variants/minimal/MinimalMediaPlayer.tsx +0 -318
- package/src/components/variants/minimal/MinimalOverlay.tsx +0 -58
- package/src/components/variants/minimal/MinimalPlayButton.tsx +0 -56
- package/src/components/variants/minimal/MinimalSeekBar.tsx +0 -140
- package/src/components/variants/minimal/MinimalVolumeControl.tsx +0 -75
- package/src/components/variants/minimal/SimpleMinimalPlayer.tsx +0 -206
- package/src/components/variants/minimal/components/CenterPlayButton.tsx +0 -22
- package/src/components/variants/minimal/components/ControlBar.tsx +0 -142
- package/src/components/variants/minimal/components/EnhancedSettingsMenu.tsx +0 -412
- package/src/components/variants/minimal/components/PlaybackControls.tsx +0 -46
- package/src/components/variants/minimal/components/RightControls.tsx +0 -164
- package/src/components/variants/minimal/components/SeekBar.tsx +0 -127
- package/src/components/variants/minimal/components/SettingsDropdown.tsx +0 -68
- package/src/components/variants/minimal/components/SubtitleDisplay.tsx +0 -21
- package/src/components/variants/minimal/components/TimeDisplay.tsx +0 -15
- package/src/components/variants/minimal/components/VideoElement.tsx +0 -33
- package/src/components/variants/minimal/components/VolumeControl.tsx +0 -220
- package/src/components/variants/minimal/index.ts +0 -23
- package/src/components/video-player.tsx +0 -100
- package/src/context/__tests__/media-store.test.ts +0 -509
- package/src/context/error-handling.ts +0 -398
- package/src/context/media-context.tsx +0 -254
- package/src/context/media-provider.tsx +0 -264
- package/src/context/media-store.ts +0 -387
- package/src/context/persistence.ts +0 -462
- package/src/core/events/event-system.ts +0 -448
- package/src/core/events/hooks.ts +0 -325
- package/src/core/events/index.ts +0 -22
- package/src/core/events/middleware.ts +0 -286
- package/src/core/index.ts +0 -22
- package/src/core/optimization/bundle-optimizer.tsx +0 -312
- package/src/core/performance/cicd.ts +0 -98
- package/src/core/performance/index.ts +0 -38
- package/src/core/performance/media-loading-optimizer.ts +0 -544
- package/src/core/performance/performance-budgets.ts +0 -437
- package/src/core/performance/performance-monitor.tsx +0 -488
- package/src/core/performance/performance-testing.ts +0 -461
- package/src/core/plugins/__tests__/registry.test.ts +0 -595
- package/src/core/plugins/base-plugin.ts +0 -225
- package/src/core/plugins/enhanced-plugin-system.ts +0 -435
- package/src/core/plugins/examples/analytics-plugin.ts +0 -241
- package/src/core/plugins/index.ts +0 -39
- package/src/core/plugins/registry.ts +0 -546
- package/src/core/plugins/types.ts +0 -169
- package/src/core/plugins/utils.ts +0 -317
- package/src/core/progressive-loading.tsx +0 -331
- package/src/core/providers/enhanced-hls-provider.ts +0 -307
- package/src/core/providers/lazy-provider.tsx +0 -14
- package/src/core/providers/service-provider.tsx +0 -164
- package/src/core/utils.tsx +0 -34
- package/src/features/media-session/media-session-manager.ts +0 -411
- package/src/features/picture-in-picture/pip-manager.ts +0 -428
- package/src/features/playlist/playlist-manager.ts +0 -626
- package/src/features/subtitles/subtitle-manager.ts +0 -435
- package/src/features/subtitles/subtitle-parser.ts +0 -284
- package/src/features/thumbnails/thumbnail-generator.ts +0 -528
- package/src/hooks/__tests__/currentTime-fix.test.ts +0 -149
- package/src/hooks/__tests__/use-media-player.test.ts +0 -712
- package/src/hooks/__tests__/use-media-state.test.tsx +0 -316
- package/src/hooks/accessibility/index.ts +0 -27
- package/src/hooks/accessibility/use-accessibility-preferences.ts +0 -190
- package/src/hooks/accessibility/use-focus-management.ts +0 -183
- package/src/hooks/accessibility/use-keyboard-shortcuts.ts +0 -152
- package/src/hooks/accessibility/use-screen-reader.ts +0 -212
- package/src/hooks/core/index.ts +0 -47
- package/src/hooks/legacy.ts +0 -21
- package/src/hooks/use-buffer-health.ts +0 -218
- package/src/hooks/use-enhanced-media-player.ts +0 -575
- package/src/hooks/use-focus-trap.tsx +0 -162
- package/src/hooks/use-intelligent-preloading.ts +0 -387
- package/src/hooks/use-keyboard-controls.ts +0 -115
- package/src/hooks/use-keyboard-shortcuts.ts +0 -255
- package/src/hooks/use-media-actions.ts +0 -184
- package/src/hooks/use-media-metadata.ts +0 -91
- package/src/hooks/use-media-optimistic.ts +0 -264
- package/src/hooks/use-media-player.ts +0 -343
- package/src/hooks/use-media-state.ts +0 -194
- package/src/hooks/use-memory-optimization.ts +0 -360
- package/src/hooks/use-network-status.ts +0 -124
- package/src/hooks/use-optimistic-controls.ts +0 -95
- package/src/hooks/use-optimized-media.ts +0 -283
- package/src/hooks/use-smart-preload.ts +0 -229
- package/src/hooks/use-touch-gestures.ts +0 -461
- package/src/hooks/useEnhancedSubtitles.ts +0 -258
- package/src/hooks/useKeyboardShortcuts.ts +0 -106
- package/src/hooks/useMediaControls.ts +0 -52
- package/src/hooks/useScreenshot.ts +0 -61
- package/src/hooks/useSubtitles.ts +0 -91
- package/src/hooks/useVideoPlayer.ts +0 -278
- package/src/icons/components/FullscreenIcon.tsx +0 -36
- package/src/icons/components/SettingsIcon.tsx +0 -37
- package/src/icons/components/animated/LoadingIcon.tsx +0 -27
- package/src/icons/components/animated/PlayPauseIcon.tsx +0 -42
- package/src/icons/components/media/PauseIcon.tsx +0 -38
- package/src/icons/components/media/PlayIcon.tsx +0 -37
- package/src/icons/components/volume/VolumeIcon.tsx +0 -38
- package/src/icons/components/volume/VolumeOffIcon.tsx +0 -38
- package/src/icons/index.ts +0 -56
- package/src/icons/provider.tsx +0 -58
- package/src/icons/types.ts +0 -60
- package/src/index-enhanced.ts +0 -35
- package/src/index-legacy.ts +0 -324
- package/src/index.css +0 -102
- package/src/lib/__tests__/async-utils.test.ts +0 -291
- package/src/lib/async-utils.ts +0 -194
- package/src/lib/deprecation.ts +0 -51
- package/src/lib/format-time.ts +0 -37
- package/src/lib/index.ts +0 -4
- package/src/lib/utils.ts +0 -6
- package/src/styles/globals.css +0 -462
- package/src/styles/minimal-player.css +0 -621
- package/src/styles/pixel-art.css +0 -41
- package/src/styles/videojs.css +0 -100
- package/src/types/events.ts +0 -47
- package/src/types/formats.ts +0 -79
- package/src/types/index.ts +0 -203
- package/src/types/videojs-plugins.d.ts +0 -14
|
@@ -1,302 +0,0 @@
|
|
|
1
|
-
"use client"
|
|
2
|
-
|
|
3
|
-
import { useState } from "react"
|
|
4
|
-
import { cn } from "../../lib/utils"
|
|
5
|
-
import { MediaPlayer } from "../media-player"
|
|
6
|
-
import { PlayButton } from "../ui/play-button"
|
|
7
|
-
import { SeekBar } from "../ui/seek-bar"
|
|
8
|
-
import { TimeDisplay } from "../ui/time-display"
|
|
9
|
-
import { VolumeControl } from "../ui/volume-control"
|
|
10
|
-
|
|
11
|
-
interface EnhancedMediaPlayerProps {
|
|
12
|
-
src: string | string[]
|
|
13
|
-
className?: string
|
|
14
|
-
title?: string
|
|
15
|
-
description?: string
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export function EnhancedMediaPlayerExample({
|
|
19
|
-
src,
|
|
20
|
-
className,
|
|
21
|
-
title = "Sample Media",
|
|
22
|
-
description = "Demonstrating the new BaroiPlayer design system"
|
|
23
|
-
}: EnhancedMediaPlayerProps) {
|
|
24
|
-
const [isControlsVisible, setIsControlsVisible] = useState(true)
|
|
25
|
-
|
|
26
|
-
return (
|
|
27
|
-
<div className={cn("mx-auto w-full max-w-4xl space-y-6", className)}>
|
|
28
|
-
{/* Media Player Title */}
|
|
29
|
-
<div className="space-y-2">
|
|
30
|
-
<h2 className="font-semibold text-[color:var(--color-text-primary)] text-fluid-xl">
|
|
31
|
-
{title}
|
|
32
|
-
</h2>
|
|
33
|
-
<p className="text-[color:var(--color-text-secondary)] text-fluid-sm">{description}</p>
|
|
34
|
-
</div>
|
|
35
|
-
|
|
36
|
-
{/* Enhanced Media Player with Custom Controls */}
|
|
37
|
-
<div
|
|
38
|
-
className={cn(
|
|
39
|
-
"group relative",
|
|
40
|
-
"hover:shadow-2xl hover:shadow-[color:var(--color-brand-primary)]/10",
|
|
41
|
-
"transition-all duration-500 ease-out"
|
|
42
|
-
)}
|
|
43
|
-
onMouseEnter={() => setIsControlsVisible(true)}
|
|
44
|
-
onMouseLeave={() => setIsControlsVisible(false)}>
|
|
45
|
-
<MediaPlayer src={src} customControls={true}>
|
|
46
|
-
{({ state, controls }) => (
|
|
47
|
-
<>
|
|
48
|
-
{/* Main Control Overlay */}
|
|
49
|
-
<div
|
|
50
|
-
className={cn(
|
|
51
|
-
"absolute inset-0 z-20 flex items-center justify-center",
|
|
52
|
-
"transition-all duration-300",
|
|
53
|
-
state.isLoading && "pointer-events-none"
|
|
54
|
-
)}>
|
|
55
|
-
<div
|
|
56
|
-
className={cn(
|
|
57
|
-
"relative",
|
|
58
|
-
"transition-all duration-300 ease-out",
|
|
59
|
-
"hover:scale-105"
|
|
60
|
-
)}>
|
|
61
|
-
<PlayButton
|
|
62
|
-
isPlaying={state.isPlaying}
|
|
63
|
-
onToggle={controls.toggle}
|
|
64
|
-
disabled={state.isLoading}
|
|
65
|
-
size="xl"
|
|
66
|
-
className={cn(
|
|
67
|
-
"transform transition-all duration-300",
|
|
68
|
-
!isControlsVisible && !state.isLoading && "scale-75 opacity-60",
|
|
69
|
-
isControlsVisible && "scale-100 opacity-100"
|
|
70
|
-
)}
|
|
71
|
-
/>
|
|
72
|
-
</div>
|
|
73
|
-
</div>
|
|
74
|
-
|
|
75
|
-
{/* Bottom Control Panel */}
|
|
76
|
-
<div
|
|
77
|
-
className={cn(
|
|
78
|
-
"absolute right-0 bottom-0 left-0 z-30",
|
|
79
|
-
"glass-strong border-[color:var(--media-border)]/30 border-t",
|
|
80
|
-
"transition-all duration-300 ease-out",
|
|
81
|
-
!isControlsVisible && "translate-y-full opacity-0",
|
|
82
|
-
isControlsVisible && "translate-y-0 opacity-100"
|
|
83
|
-
)}>
|
|
84
|
-
{/* Seek Bar Container */}
|
|
85
|
-
<div className="-mt-2 px-4">
|
|
86
|
-
<SeekBar
|
|
87
|
-
currentTime={state.currentTime}
|
|
88
|
-
duration={state.duration}
|
|
89
|
-
buffered={state.buffered}
|
|
90
|
-
onSeek={controls.seek}
|
|
91
|
-
className="w-full"
|
|
92
|
-
/>
|
|
93
|
-
</div>
|
|
94
|
-
|
|
95
|
-
{/* Main Controls Row */}
|
|
96
|
-
<div
|
|
97
|
-
className={cn(
|
|
98
|
-
"flex items-center justify-between gap-4 p-4",
|
|
99
|
-
"media-md:px-8 media-sm:px-6"
|
|
100
|
-
)}>
|
|
101
|
-
{/* Left Side - Playback Controls */}
|
|
102
|
-
<div className="flex items-center gap-3 media-sm:gap-4">
|
|
103
|
-
<PlayButton
|
|
104
|
-
isPlaying={state.isPlaying}
|
|
105
|
-
onToggle={controls.toggle}
|
|
106
|
-
disabled={state.isLoading}
|
|
107
|
-
size="md"
|
|
108
|
-
/>
|
|
109
|
-
|
|
110
|
-
<div className="media-sm:block hidden">
|
|
111
|
-
<TimeDisplay
|
|
112
|
-
currentTime={state.currentTime}
|
|
113
|
-
duration={state.duration}
|
|
114
|
-
className="font-mono text-fluid-sm"
|
|
115
|
-
/>
|
|
116
|
-
</div>
|
|
117
|
-
</div>
|
|
118
|
-
|
|
119
|
-
{/* Center - Media Information */}
|
|
120
|
-
<div className={cn("media-md:block hidden flex-1 text-center", "space-y-1")}>
|
|
121
|
-
<p className="truncate font-medium text-[color:var(--media-text)] text-fluid-sm">
|
|
122
|
-
{title}
|
|
123
|
-
</p>
|
|
124
|
-
{state.duration > 0 && (
|
|
125
|
-
<div className="text-[color:var(--media-text-secondary)] text-xs">
|
|
126
|
-
{Math.round((state.currentTime / state.duration) * 100)}% complete
|
|
127
|
-
</div>
|
|
128
|
-
)}
|
|
129
|
-
</div>
|
|
130
|
-
|
|
131
|
-
{/* Right Side - Volume & Settings */}
|
|
132
|
-
<div className="flex items-center gap-3 media-sm:gap-4">
|
|
133
|
-
<div className="media-sm:block hidden">
|
|
134
|
-
<VolumeControl
|
|
135
|
-
volume={state.volume}
|
|
136
|
-
isMuted={state.isMuted}
|
|
137
|
-
onVolumeChange={controls.setVolume}
|
|
138
|
-
onToggleMute={controls.toggleMute}
|
|
139
|
-
size="md"
|
|
140
|
-
/>
|
|
141
|
-
</div>
|
|
142
|
-
|
|
143
|
-
{/* Fullscreen Button */}
|
|
144
|
-
<button
|
|
145
|
-
onClick={controls.toggleFullscreen}
|
|
146
|
-
className={cn(
|
|
147
|
-
"group glass-strong media-control relative",
|
|
148
|
-
"size-10 touch-manipulation rounded-xl contain-layout",
|
|
149
|
-
"bg-[color:var(--media-control-bg)] backdrop-blur-sm",
|
|
150
|
-
"border border-[color:var(--media-border)]/30",
|
|
151
|
-
"text-[color:var(--media-text)] transition-all duration-300",
|
|
152
|
-
"hover:bg-[color:var(--media-control-hover)]",
|
|
153
|
-
"hover:border-[color:var(--media-border)]/50",
|
|
154
|
-
"hover:-translate-y-0.5 hover:scale-105",
|
|
155
|
-
"active:translate-y-0 active:scale-100",
|
|
156
|
-
"focus-ring"
|
|
157
|
-
)}
|
|
158
|
-
aria-label="Enter fullscreen">
|
|
159
|
-
<svg
|
|
160
|
-
className="m-auto size-5 transition-transform duration-200 group-hover:scale-110"
|
|
161
|
-
fill="none"
|
|
162
|
-
stroke="currentColor"
|
|
163
|
-
viewBox="0 0 24 24">
|
|
164
|
-
<path
|
|
165
|
-
strokeLinecap="round"
|
|
166
|
-
strokeLinejoin="round"
|
|
167
|
-
strokeWidth={2}
|
|
168
|
-
d="M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4"
|
|
169
|
-
/>
|
|
170
|
-
</svg>
|
|
171
|
-
</button>
|
|
172
|
-
</div>
|
|
173
|
-
</div>
|
|
174
|
-
|
|
175
|
-
{/* Mobile Time Display */}
|
|
176
|
-
<div className="media-sm:hidden px-4 pb-3">
|
|
177
|
-
<TimeDisplay
|
|
178
|
-
currentTime={state.currentTime}
|
|
179
|
-
duration={state.duration}
|
|
180
|
-
className="text-center font-mono text-sm"
|
|
181
|
-
/>
|
|
182
|
-
</div>
|
|
183
|
-
</div>
|
|
184
|
-
|
|
185
|
-
{/* Loading State Overlay */}
|
|
186
|
-
{state.isLoading && (
|
|
187
|
-
<div
|
|
188
|
-
className={cn(
|
|
189
|
-
"absolute inset-0 z-40 flex items-center justify-center",
|
|
190
|
-
"glass animate-enter rounded-lg",
|
|
191
|
-
"bg-[color:var(--media-bg)]/20 backdrop-blur-sm"
|
|
192
|
-
)}>
|
|
193
|
-
<div className="space-y-4 text-center text-[color:var(--media-text)]">
|
|
194
|
-
<div className="relative">
|
|
195
|
-
<div
|
|
196
|
-
className={cn(
|
|
197
|
-
"size-16 animate-spin rounded-full border-2",
|
|
198
|
-
"border-[color:var(--color-brand-accent)]/30",
|
|
199
|
-
"border-t-[color:var(--color-brand-accent)]"
|
|
200
|
-
)}></div>
|
|
201
|
-
<div
|
|
202
|
-
className={cn(
|
|
203
|
-
"absolute inset-0 size-16 rounded-full",
|
|
204
|
-
"bg-gradient-to-r from-[color:var(--color-brand-primary)] to-[color:var(--color-brand-accent)]",
|
|
205
|
-
"animate-pulse opacity-20 blur-lg"
|
|
206
|
-
)}></div>
|
|
207
|
-
</div>
|
|
208
|
-
<p className="font-medium text-[color:var(--media-text-secondary)] text-fluid-base">
|
|
209
|
-
Loading {title}...
|
|
210
|
-
</p>
|
|
211
|
-
</div>
|
|
212
|
-
</div>
|
|
213
|
-
)}
|
|
214
|
-
|
|
215
|
-
{/* Error State */}
|
|
216
|
-
{state.error && (
|
|
217
|
-
<div
|
|
218
|
-
className={cn(
|
|
219
|
-
"absolute inset-0 z-40 flex items-center justify-center",
|
|
220
|
-
"glass-strong animate-enter rounded-lg",
|
|
221
|
-
"bg-[color:var(--color-error)]/10 backdrop-blur-md"
|
|
222
|
-
)}>
|
|
223
|
-
<div className="mx-auto max-w-sm space-y-4 p-6 text-center text-[color:var(--media-text)]">
|
|
224
|
-
<div className="mx-auto w-fit rounded-full bg-[color:var(--color-error)]/20 p-4">
|
|
225
|
-
<svg
|
|
226
|
-
className="size-8 text-[color:var(--color-error)]"
|
|
227
|
-
fill="none"
|
|
228
|
-
viewBox="0 0 24 24"
|
|
229
|
-
stroke="currentColor">
|
|
230
|
-
<path
|
|
231
|
-
strokeLinecap="round"
|
|
232
|
-
strokeLinejoin="round"
|
|
233
|
-
strokeWidth={2}
|
|
234
|
-
d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z"
|
|
235
|
-
/>
|
|
236
|
-
</svg>
|
|
237
|
-
</div>
|
|
238
|
-
<div>
|
|
239
|
-
<h3 className="mb-2 font-semibold text-fluid-lg">Playback Error</h3>
|
|
240
|
-
<p className="text-[color:var(--media-text-secondary)] text-fluid-sm">
|
|
241
|
-
{state.error}
|
|
242
|
-
</p>
|
|
243
|
-
</div>
|
|
244
|
-
<button
|
|
245
|
-
onClick={() => window.location.reload()}
|
|
246
|
-
className={cn(
|
|
247
|
-
"rounded-lg px-6 py-2 font-medium transition-all duration-200",
|
|
248
|
-
"bg-[color:var(--color-brand-primary)] text-[color:var(--media-text)]",
|
|
249
|
-
"hover:scale-105 hover:bg-[color:var(--color-brand-accent)]",
|
|
250
|
-
"focus-ring active:scale-95"
|
|
251
|
-
)}>
|
|
252
|
-
Try Again
|
|
253
|
-
</button>
|
|
254
|
-
</div>
|
|
255
|
-
</div>
|
|
256
|
-
)}
|
|
257
|
-
</>
|
|
258
|
-
)}
|
|
259
|
-
</MediaPlayer>
|
|
260
|
-
</div>
|
|
261
|
-
|
|
262
|
-
{/* Design System Showcase */}
|
|
263
|
-
<div className="grid grid-cols-1 media-lg:grid-cols-3 media-sm:grid-cols-2 gap-4">
|
|
264
|
-
<div className="glass-strong space-y-3 rounded-xl border border-[color:var(--glass-border-medium)] p-6">
|
|
265
|
-
<h3 className="font-semibold text-[color:var(--color-text-primary)] text-fluid-base">
|
|
266
|
-
Modern Colors
|
|
267
|
-
</h3>
|
|
268
|
-
<p className="text-[color:var(--color-text-secondary)] text-fluid-sm">
|
|
269
|
-
OKLCH color space for vivid, accessible colors across all displays.
|
|
270
|
-
</p>
|
|
271
|
-
<div className="flex gap-2">
|
|
272
|
-
<div className="h-4 w-4 rounded-full bg-[color:var(--color-brand-primary)] shadow-sm"></div>
|
|
273
|
-
<div className="h-4 w-4 rounded-full bg-[color:var(--color-brand-accent)] shadow-sm"></div>
|
|
274
|
-
<div className="h-4 w-4 rounded-full bg-[color:var(--color-brand-highlight)] shadow-sm"></div>
|
|
275
|
-
</div>
|
|
276
|
-
</div>
|
|
277
|
-
|
|
278
|
-
<div className="glass-strong space-y-3 rounded-xl border border-[color:var(--glass-border-medium)] p-6">
|
|
279
|
-
<h3 className="font-semibold text-[color:var(--color-text-primary)] text-fluid-base">
|
|
280
|
-
Container Queries
|
|
281
|
-
</h3>
|
|
282
|
-
<p className="text-[color:var(--color-text-secondary)] text-fluid-sm">
|
|
283
|
-
Responsive design based on container size, not just viewport.
|
|
284
|
-
</p>
|
|
285
|
-
<div className="font-mono text-[color:var(--color-text-tertiary)] text-xs">
|
|
286
|
-
@container (min-width: 480px)
|
|
287
|
-
</div>
|
|
288
|
-
</div>
|
|
289
|
-
|
|
290
|
-
<div className="glass-strong media-lg:col-span-1 media-sm:col-span-2 space-y-3 rounded-xl border border-[color:var(--glass-border-medium)] p-6">
|
|
291
|
-
<h3 className="font-semibold text-[color:var(--color-text-primary)] text-fluid-base">
|
|
292
|
-
Smooth Animations
|
|
293
|
-
</h3>
|
|
294
|
-
<p className="text-[color:var(--color-text-secondary)] text-fluid-sm">
|
|
295
|
-
Performance-optimized with CSS containment and modern easing.
|
|
296
|
-
</p>
|
|
297
|
-
<div className="h-1 w-8 animate-pulse rounded-full bg-gradient-to-r from-[color:var(--color-brand-primary)] to-[color:var(--color-brand-accent)]"></div>
|
|
298
|
-
</div>
|
|
299
|
-
</div>
|
|
300
|
-
</div>
|
|
301
|
-
)
|
|
302
|
-
}
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
"use client"
|
|
2
|
-
|
|
3
|
-
import React, { useState } from "react"
|
|
4
|
-
import { cn } from "../../lib/utils"
|
|
5
|
-
import { AnimateLoadingWrapper, LoadingState } from "../LoadingState"
|
|
6
|
-
import { SimpleMinimalPlayer } from "../variants/minimal/SimpleMinimalPlayer"
|
|
7
|
-
|
|
8
|
-
export function LoadingStatesDemo() {
|
|
9
|
-
const [showCustomLoading, setShowCustomLoading] = useState(false)
|
|
10
|
-
const [loadingVariant, setLoadingVariant] = useState<"animate" | "spinner" | "dots" | "skeleton">(
|
|
11
|
-
"animate"
|
|
12
|
-
)
|
|
13
|
-
|
|
14
|
-
// Custom loading component example
|
|
15
|
-
const CustomLoadingComponent = ({
|
|
16
|
-
context
|
|
17
|
-
}: { context: "initial" | "seeking" | "buffering" }) => (
|
|
18
|
-
<div className="flex flex-col items-center gap-4 text-white">
|
|
19
|
-
<div className="h-16 w-16 animate-pulse rounded-full bg-gradient-to-r from-cyan-500 to-blue-500" />
|
|
20
|
-
<p className="font-medium text-sm">Custom {context} loader</p>
|
|
21
|
-
</div>
|
|
22
|
-
)
|
|
23
|
-
|
|
24
|
-
return (
|
|
25
|
-
<div className="min-h-screen bg-gray-950 p-8">
|
|
26
|
-
<div className="mx-auto max-w-6xl space-y-8">
|
|
27
|
-
<div className="text-center">
|
|
28
|
-
<h1 className="mb-4 font-bold text-3xl text-white">Loading States Demo</h1>
|
|
29
|
-
<p className="mb-6 text-gray-400">
|
|
30
|
-
Demonstrating the new AnimateLoading integration with context-aware loading text
|
|
31
|
-
</p>
|
|
32
|
-
</div>
|
|
33
|
-
|
|
34
|
-
{/* Loading state examples */}
|
|
35
|
-
<div className="mb-8 grid grid-cols-1 gap-6 md:grid-cols-3">
|
|
36
|
-
<div className="relative h-40 overflow-hidden rounded-lg bg-black">
|
|
37
|
-
<AnimateLoadingWrapper context="initial" />
|
|
38
|
-
<p className="absolute bottom-2 left-2 text-white/60 text-xs">Initial Loading</p>
|
|
39
|
-
</div>
|
|
40
|
-
|
|
41
|
-
<div className="relative h-40 overflow-hidden rounded-lg bg-black">
|
|
42
|
-
<AnimateLoadingWrapper context="seeking" />
|
|
43
|
-
<p className="absolute bottom-2 left-2 text-white/60 text-xs">Seeking</p>
|
|
44
|
-
</div>
|
|
45
|
-
|
|
46
|
-
<div className="relative h-40 overflow-hidden rounded-lg bg-black">
|
|
47
|
-
<AnimateLoadingWrapper context="buffering" />
|
|
48
|
-
<p className="absolute bottom-2 left-2 text-white/60 text-xs">Buffering</p>
|
|
49
|
-
</div>
|
|
50
|
-
</div>
|
|
51
|
-
|
|
52
|
-
{/* Controls */}
|
|
53
|
-
<div className="mb-6 flex justify-center gap-4">
|
|
54
|
-
<div className="flex items-center gap-2">
|
|
55
|
-
<label className="text-sm text-white">Loading Variant:</label>
|
|
56
|
-
<select
|
|
57
|
-
value={loadingVariant}
|
|
58
|
-
onChange={(e) => setLoadingVariant(e.target.value as any)}
|
|
59
|
-
className="rounded border border-gray-700 bg-gray-800 px-3 py-1 text-white">
|
|
60
|
-
<option value="animate">Animate (Default)</option>
|
|
61
|
-
<option value="spinner">Spinner</option>
|
|
62
|
-
<option value="dots">Dots</option>
|
|
63
|
-
<option value="skeleton">Skeleton</option>
|
|
64
|
-
</select>
|
|
65
|
-
</div>
|
|
66
|
-
|
|
67
|
-
<button
|
|
68
|
-
onClick={() => setShowCustomLoading(!showCustomLoading)}
|
|
69
|
-
className={cn(
|
|
70
|
-
"rounded-lg px-4 py-2 transition-colors",
|
|
71
|
-
showCustomLoading
|
|
72
|
-
? "bg-cyan-600 text-white"
|
|
73
|
-
: "bg-gray-800 text-gray-300 hover:bg-gray-700"
|
|
74
|
-
)}>
|
|
75
|
-
{showCustomLoading ? "Using Custom" : "Use Custom"} Loading
|
|
76
|
-
</button>
|
|
77
|
-
</div>
|
|
78
|
-
|
|
79
|
-
{/* Video Player with loading states */}
|
|
80
|
-
<div className="space-y-4">
|
|
81
|
-
<h2 className="font-semibold text-white text-xl">Live Player Example</h2>
|
|
82
|
-
|
|
83
|
-
<div className="aspect-video overflow-hidden rounded-lg bg-black">
|
|
84
|
-
<SimpleMinimalPlayer
|
|
85
|
-
src="https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"
|
|
86
|
-
poster="https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/images/BigBuckBunny.jpg"
|
|
87
|
-
crossOrigin="anonymous"
|
|
88
|
-
showLoadingState={true}
|
|
89
|
-
loadingComponent={showCustomLoading ? CustomLoadingComponent : undefined}
|
|
90
|
-
loadingProps={{
|
|
91
|
-
variant: showCustomLoading ? undefined : loadingVariant,
|
|
92
|
-
size: "sm",
|
|
93
|
-
message: showCustomLoading ? undefined : "Custom message..."
|
|
94
|
-
}}
|
|
95
|
-
/>
|
|
96
|
-
</div>
|
|
97
|
-
|
|
98
|
-
<div className="rounded-lg bg-gray-900 p-4">
|
|
99
|
-
<h3 className="mb-2 font-medium text-white">Features:</h3>
|
|
100
|
-
<ul className="space-y-1 text-gray-300 text-sm">
|
|
101
|
-
<li>• AnimateLoading from UI package as default</li>
|
|
102
|
-
<li>• Context-aware loading messages</li>
|
|
103
|
-
<li>• No blur backdrop for better performance</li>
|
|
104
|
-
<li>• Customizable text size based on size prop</li>
|
|
105
|
-
<li>• Support for custom loading components</li>
|
|
106
|
-
<li>• Fallback to other variants (spinner, dots, skeleton)</li>
|
|
107
|
-
</ul>
|
|
108
|
-
</div>
|
|
109
|
-
|
|
110
|
-
<div className="rounded-lg bg-gray-900 p-4">
|
|
111
|
-
<h3 className="mb-2 font-medium text-white">Usage:</h3>
|
|
112
|
-
<pre className="overflow-x-auto text-green-400 text-sm">
|
|
113
|
-
<code>{`// Default with AnimateLoading
|
|
114
|
-
<SimpleMinimalPlayer
|
|
115
|
-
src="video.mp4"
|
|
116
|
-
showLoadingState={true}
|
|
117
|
-
/>
|
|
118
|
-
|
|
119
|
-
// Custom loading component
|
|
120
|
-
<SimpleMinimalPlayer
|
|
121
|
-
src="video.mp4"
|
|
122
|
-
loadingComponent={CustomLoader}
|
|
123
|
-
loadingProps={{
|
|
124
|
-
size: "sm",
|
|
125
|
-
message: "Please wait..."
|
|
126
|
-
}}
|
|
127
|
-
/>
|
|
128
|
-
|
|
129
|
-
// Use different variant
|
|
130
|
-
<SimpleMinimalPlayer
|
|
131
|
-
src="video.mp4"
|
|
132
|
-
loadingProps={{
|
|
133
|
-
variant: "spinner"
|
|
134
|
-
}}
|
|
135
|
-
/>`}</code>
|
|
136
|
-
</pre>
|
|
137
|
-
</div>
|
|
138
|
-
</div>
|
|
139
|
-
</div>
|
|
140
|
-
</div>
|
|
141
|
-
)
|
|
142
|
-
}
|