|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import introVideo from '@/assets/videos/sam2_720px_dark.mp4'; |
|
|
import introVideoPoster from '@/assets/videos/sam2_video_poster.png'; |
|
|
import StaticVideoPlayer from '@/common/loading/StaticVideoPlayer'; |
|
|
import {borderRadius, fontSize, spacing} from '@/theme/tokens.stylex'; |
|
|
import stylex from '@stylexjs/stylex'; |
|
|
import {PropsWithChildren, ReactNode} from 'react'; |
|
|
import {Link} from 'react-router-dom'; |
|
|
|
|
|
const styles = stylex.create({ |
|
|
container: { |
|
|
backgroundColor: '#000', |
|
|
minHeight: '100%', |
|
|
}, |
|
|
content: { |
|
|
display: 'flex', |
|
|
flexDirection: 'column', |
|
|
gap: spacing[8], |
|
|
maxWidth: '36rem', |
|
|
marginHorizontal: 'auto', |
|
|
paddingVertical: { |
|
|
default: '6rem', |
|
|
'@media screen and (max-width: 768px)': '3rem', |
|
|
}, |
|
|
paddingHorizontal: spacing[8], |
|
|
color: '#fff', |
|
|
}, |
|
|
animationContainer: { |
|
|
display: 'flex', |
|
|
justifyContent: 'center', |
|
|
}, |
|
|
animation: { |
|
|
border: '2px solid white', |
|
|
borderRadius: borderRadius['xl'], |
|
|
maxWidth: 450, |
|
|
maxHeight: 450, |
|
|
height: '100%', |
|
|
overflow: 'hidden', |
|
|
'@media screen and (max-width: 768px)': { |
|
|
height: 300, |
|
|
width: 300, |
|
|
}, |
|
|
}, |
|
|
title: { |
|
|
textAlign: 'center', |
|
|
lineHeight: '2rem', |
|
|
fontSize: fontSize['2xl'], |
|
|
fontWeight: 400, |
|
|
}, |
|
|
description: { |
|
|
textAlign: 'center', |
|
|
color: '#A7B3BF', |
|
|
}, |
|
|
link: { |
|
|
textAlign: 'center', |
|
|
textDecorationLine: 'underline', |
|
|
color: '#A7B3BF', |
|
|
}, |
|
|
}); |
|
|
|
|
|
type Props = PropsWithChildren<{ |
|
|
title: string; |
|
|
description?: string | ReactNode; |
|
|
linkProps?: { |
|
|
to: string; |
|
|
label: string; |
|
|
}; |
|
|
}>; |
|
|
|
|
|
export default function LoadingStateScreen({ |
|
|
title, |
|
|
description, |
|
|
children, |
|
|
linkProps, |
|
|
}: Props) { |
|
|
return ( |
|
|
<div {...stylex.props(styles.container)}> |
|
|
<div {...stylex.props(styles.content)}> |
|
|
<div {...stylex.props(styles.animationContainer)}> |
|
|
<div {...stylex.props(styles.animation)}> |
|
|
<StaticVideoPlayer |
|
|
src={introVideo} |
|
|
aspectRatio="square" |
|
|
poster={introVideoPoster} |
|
|
muted={true} |
|
|
loop={true} |
|
|
autoPlay={true} |
|
|
playsInline={true} |
|
|
controls={false} |
|
|
/> |
|
|
</div> |
|
|
</div> |
|
|
<h2 {...stylex.props(styles.title)}>{title}</h2> |
|
|
{description != null && ( |
|
|
<div {...stylex.props(styles.description)}>{description}</div> |
|
|
)} |
|
|
{children} |
|
|
{linkProps != null && ( |
|
|
<Link to={linkProps.to} {...stylex.props(styles.link)}> |
|
|
{linkProps.label} |
|
|
</Link> |
|
|
)} |
|
|
</div> |
|
|
</div> |
|
|
); |
|
|
} |
|
|
|