import type { PropsWithChildren } from 'react'; import { VideoProvider } from '@videojs/react-preview'; import clsx from 'clsx'; import { useEffect, useMemo, useRef } from 'react'; import { Link as LinkPrimitive, Redirect, Route, Switch, useLocation } from 'wouter'; import { VideoElement } from './components'; import { SkinLayout } from './components/SkinLayout'; import { useMediaQuery } from './hooks'; import CustomBaseUISkin from './skins/custom/base-ui/CustomBaseUISkin'; import customBaseUISkinSource from './skins/custom/base-ui/CustomBaseUISkin?raw'; import CustomNativeSkin from './skins/custom/native/CustomNativeSkin'; import customNativeSkinSource from './skins/custom/native/CustomNativeSkin?raw'; import FrostedSkinEjected from './skins/ejected/frosted/FrostedSkin'; import frostedSkinEjectedSource from './skins/ejected/frosted/FrostedSkin?raw'; import MinimalSkinEjected from './skins/ejected/minimal/MinimalSkin'; import minimalSkinEjectedSource from './skins/ejected/minimal/MinimalSkin?raw'; import FrostedSkin from './skins/imported/FrostedSkin'; import frostedSkinSource from './skins/imported/FrostedSkin?raw'; import MinimalSkin from './skins/imported/MinimalSkin'; import minimalSkinSource from './skins/imported/MinimalSkin?raw'; import './globals.css'; type NavigationSectionProps = PropsWithChildren<{ title: string; }>; function NavigationSection(props: NavigationSectionProps): JSX.Element { return (
{props.title}
); } type LinkProps = PropsWithChildren<{ to: string; }>; function Link(props: LinkProps): JSX.Element { return ( clsx('flex px-3.5 py-2 rounded-lg transition-colors text-sm', { 'text-zinc-600 hover:bg-zinc-100 dark:text-zinc-400 dark:hover:bg-zinc-700': !isActive, 'bg-zinc-200/60 text-zinc-900 dark:bg-zinc-200': isActive, })} /> ); } export default function App(): JSX.Element { const skinProps = useMemo(() => ({ className: 'aspect-video shadow-lg shadow-black/15', children: , }), []); const isDesktop = useMediaQuery('(min-width: 768px)'); const navigationRef = useRef(null); useEffect(() => { if (isDesktop) { navigationRef.current?.removeAttribute('popover'); } else { navigationRef.current?.setAttribute('popover', 'auto'); } }, [isDesktop]); const [location] = useLocation(); useEffect(() => { try { navigationRef.current?.hidePopover(); } catch {} }, [location]); return (
} /> } /> } /> } /> } /> } />
); }