mirror of
https://github.com/zoriya/v10.git
synced 2026-08-16 02:45:09 +00:00
feat(example/react): improvements to react examples (#210)
This commit is contained in:
@@ -7,7 +7,7 @@ import { formatDisplayTime, shallowEqual } from '@videojs/utils';
|
||||
import { useMediaSelector } from '@/store';
|
||||
import { toConnectedComponent } from '../utils/component-factory';
|
||||
|
||||
export function useCurrentTimeDisplayState(_props: any): {
|
||||
export function useCurrentTimeDisplayState(_props?: any): {
|
||||
currentTime: number;
|
||||
duration: number;
|
||||
} {
|
||||
|
||||
@@ -9,7 +9,7 @@ import { useMemo } from 'react';
|
||||
import { useMediaSelector, useMediaStore } from '@/store';
|
||||
import { toConnectedComponent } from '../utils/component-factory';
|
||||
|
||||
export function useFullscreenButtonState(_props: any): {
|
||||
export function useFullscreenButtonState(_props?: any): {
|
||||
fullscreen: boolean;
|
||||
requestEnterFullscreen: () => void;
|
||||
requestExitFullscreen: () => void;
|
||||
|
||||
@@ -9,7 +9,7 @@ import { useMemo } from 'react';
|
||||
import { useMediaSelector, useMediaStore } from '@/store';
|
||||
import { toConnectedComponent } from '../utils/component-factory';
|
||||
|
||||
export function useMuteButtonState(_props: any): {
|
||||
export function useMuteButtonState(_props?: any): {
|
||||
volumeLevel: string;
|
||||
muted: boolean;
|
||||
requestMute: () => void;
|
||||
|
||||
@@ -9,7 +9,7 @@ import { useMemo } from 'react';
|
||||
import { useMediaSelector, useMediaStore } from '@/store';
|
||||
import { toConnectedComponent } from '../utils/component-factory';
|
||||
|
||||
export function usePlayButtonState(_props: any): {
|
||||
export function usePlayButtonState(_props?: any): {
|
||||
paused: boolean;
|
||||
requestPlay: () => void;
|
||||
requestPause: () => void;
|
||||
|
||||
@@ -27,8 +27,8 @@ interface TimeSliderRenderProps extends React.ComponentProps<'div'> {
|
||||
// ROOT COMPONENT
|
||||
// ============================================================================
|
||||
|
||||
export function useTimeSliderRootState(props: TimeSliderProps): TimeSliderState {
|
||||
const { orientation = 'horizontal' } = props;
|
||||
export function useTimeSliderRootState(props?: TimeSliderProps): TimeSliderState {
|
||||
const { orientation = 'horizontal' } = props ?? {};
|
||||
const mediaStore = useMediaStore();
|
||||
const mediaState = useMediaSelector(timeSliderStateDefinition.stateTransform, shallowEqual);
|
||||
const mediaMethods = useMemo(() => timeSliderStateDefinition.createRequestMethods(mediaStore.dispatch), [mediaStore]);
|
||||
|
||||
@@ -28,8 +28,8 @@ interface VolumeSliderRenderProps extends React.ComponentProps<'div'> {
|
||||
// ROOT COMPONENT
|
||||
// ============================================================================
|
||||
|
||||
export function useVolumeSliderRootState(props: VolumeSliderProps): VolumeSliderState {
|
||||
const { orientation = 'horizontal' } = props;
|
||||
export function useVolumeSliderRootState(props?: VolumeSliderProps): VolumeSliderState {
|
||||
const { orientation = 'horizontal' } = props ?? {};
|
||||
const mediaStore = useMediaStore();
|
||||
const mediaState = useMediaSelector(volumeSliderStateDefinition.stateTransform, shallowEqual);
|
||||
const mediaMethods = useMemo(() => volumeSliderStateDefinition.createRequestMethods(mediaStore.dispatch), [mediaStore]);
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
'use client';
|
||||
|
||||
export { CurrentTimeDisplay } from './components/CurrentTimeDisplay';
|
||||
export { CurrentTimeDisplay, useCurrentTimeDisplayState } from './components/CurrentTimeDisplay';
|
||||
export { DurationDisplay } from './components/DurationDisplay';
|
||||
export { FullscreenButton } from './components/FullscreenButton';
|
||||
export { FullscreenButton, useFullscreenButtonState } from './components/FullscreenButton';
|
||||
export { HlsVideo } from './components/HlsVideo';
|
||||
export { MediaContainer, useMediaContainerRef } from './components/MediaContainer';
|
||||
export { MuteButton } from './components/MuteButton';
|
||||
export { PlayButton } from './components/PlayButton';
|
||||
export { MuteButton, useMuteButtonState } from './components/MuteButton';
|
||||
export { PlayButton, usePlayButtonState } from './components/PlayButton';
|
||||
export { Popover } from './components/Popover';
|
||||
export { PreviewTimeDisplay } from './components/PreviewTimeDisplay';
|
||||
export { TimeSlider } from './components/TimeSlider';
|
||||
export { TimeSlider, useTimeSliderRootState } from './components/TimeSlider';
|
||||
export { Tooltip } from './components/Tooltip';
|
||||
export { Video } from './components/Video';
|
||||
export { VolumeSlider } from './components/VolumeSlider';
|
||||
export { useVolumeSliderRootState, VolumeSlider } from './components/VolumeSlider';
|
||||
export * from './skins';
|
||||
export * from '@/store';
|
||||
|
||||
@@ -24,7 +24,7 @@ const styles: FrostedSkinStyles = {
|
||||
'vjs:[&_video]:w-full vjs:[&_video]:h-full',
|
||||
),
|
||||
Overlay: cn(
|
||||
'vjs:opacity-0 vjs:delay-500 vjs:duration-300 vjs:rounded-[inherit] vjs:absolute vjs:inset-0 vjs:pointer-events-none vjs:bg-gradient-to-t vjs:from-black/50 vjs:via-black/20 vjs:to-transparent vjs:transition-opacity vjs:backdrop-saturate-150 vjs:backdrop-brightness-90',
|
||||
'vjs:opacity-0 vjs:delay-500 vjs:duration-300 vjs:rounded-[inherit] vjs:absolute vjs:inset-0 vjs:pointer-events-none vjs:bg-linear-to-t vjs:from-black/50 vjs:via-black/20 vjs:to-transparent vjs:transition-opacity vjs:backdrop-saturate-150 vjs:backdrop-brightness-90',
|
||||
// ------------------------------------
|
||||
// FIXME: This is crude temporary logic, we'll improve it later I guess with a [data-show-controls] attribute or something?
|
||||
'vjs:has-[+.controls_[data-paused]]:opacity-100 vjs:has-[+.controls_[data-paused]]:delay-0 vjs:has-[+.controls_[data-paused]]:duration-100',
|
||||
@@ -55,7 +55,7 @@ const styles: FrostedSkinStyles = {
|
||||
// ------------------------------------
|
||||
// FIXME: Temporary hide/show logic, related to above.
|
||||
'vjs:scale-90 vjs:opacity-0 vjs:blur-sm vjs:delay-500 vjs:duration-300',
|
||||
'vjs:has-[[data-paused]]:scale-100 vjs:has-[[data-paused]]:opacity-100 vjs:has-[[data-paused]]:blur-none vjs:has-[[data-paused]]:delay-0 vjs:has-[[data-paused]]:duration-100',
|
||||
'vjs:has-data-paused:scale-100 vjs:has-data-paused:opacity-100 vjs:has-data-paused:blur-none vjs:has-data-paused:delay-0 vjs:has-data-paused:duration-100',
|
||||
'vjs:has-[[aria-expanded="true"]]:scale-100 vjs:has-[[aria-expanded="true"]]:opacity-100 vjs:has-[[aria-expanded="true"]]:blur-none vjs:has-[[aria-expanded="true"]]:delay-0 vjs:has-[[aria-expanded="true"]]:duration-100',
|
||||
'vjs:group-hover/root:scale-100 vjs:group-hover/root:opacity-100 vjs:group-hover/root:blur-none vjs:group-hover/root:delay-0 vjs:group-hover/root:duration-100',
|
||||
// ------------------------------------
|
||||
|
||||
@@ -24,7 +24,7 @@ const styles: MinimalSkinStyles = {
|
||||
),
|
||||
Overlay: cn(
|
||||
'vjs:absolute vjs:inset-0 vjs:rounded-[inherit] vjs:pointer-events-none',
|
||||
'vjs:bg-gradient-to-t vjs:from-black/70 vjs:via-black/50 vjs:via-[7.5rem] vjs:to-transparent',
|
||||
'vjs:bg-linear-to-t vjs:from-black/70 vjs:via-black/50 vjs:via-[7.5rem] vjs:to-transparent',
|
||||
'vjs:opacity-0 vjs:delay-500 vjs:duration-300',
|
||||
// High contrast mode
|
||||
'vjs:contrast-more:from-black/75',
|
||||
@@ -46,7 +46,7 @@ const styles: MinimalSkinStyles = {
|
||||
// ------------------------------------
|
||||
// FIXME: Temporary hide/show logic
|
||||
'vjs:translate-y-full vjs:opacity-0 vjs:blur-sm vjs:delay-500 vjs:duration-300',
|
||||
'vjs:has-[[data-paused]]:translate-y-0 vjs:has-[[data-paused]]:opacity-100 vjs:has-[[data-paused]]:blur-none vjs:has-[[data-paused]]:delay-0 vjs:has-[[data-paused]]:duration-75',
|
||||
'vjs:has-data-paused:translate-y-0 vjs:has-data-paused:opacity-100 vjs:has-data-paused:blur-none vjs:has-data-paused:delay-0 vjs:has-data-paused:duration-75',
|
||||
'vjs:has-[[aria-expanded="true"]]:translate-y-0 vjs:has-[[aria-expanded="true"]]:opacity-100 vjs:has-[[aria-expanded="true"]]:blur-none vjs:has-[[aria-expanded="true"]]:delay-0 vjs:has-[[aria-expanded="true"]]:duration-75',
|
||||
'vjs:group-hover/root:translate-y-0 vjs:group-hover/root:opacity-100 vjs:group-hover/root:blur-none vjs:group-hover/root:delay-0 vjs:group-hover/root:duration-75',
|
||||
// ------------------------------------
|
||||
@@ -112,8 +112,8 @@ const styles: MinimalSkinStyles = {
|
||||
),
|
||||
SliderTrack: cn(
|
||||
'vjs:relative vjs:select-none vjs:rounded-[inherit] vjs:bg-white/10',
|
||||
'vjs:data-[orientation=horizontal]:w-full vjs:data-[orientation=horizontal]:h-[0.1875rem]',
|
||||
'vjs:data-[orientation=vertical]:w-[0.1875rem]',
|
||||
'vjs:data-[orientation=horizontal]:w-full vjs:data-[orientation=horizontal]:h-0.75',
|
||||
'vjs:data-[orientation=vertical]:w-0.75',
|
||||
'vjs:-outline-offset-2 vjs:group-focus-visible/slider:outline-2 vjs:group-focus-visible/slider:outline-offset-6 vjs:group-focus-visible/slider:outline-white',
|
||||
),
|
||||
SliderProgress: cn('vjs:bg-white vjs:rounded-[inherit]'),
|
||||
|
||||
Reference in New Issue
Block a user