Video
Atom
Plays a clip with an optional poster: tap to play inline, or full transport controls (the platform's own on iOS and Android, the kit's bar on the web), with boolean fit, autoplay, loop and muted props.
Playground
Every control sets a real prop of VideoProps. The JSX below updates as you go.
Web
iOS
Android
JSX · VideoProps
Variants
3 examples from src/atoms/video/video.md, each rendered live from its own JSX.
Anatomy
1
Frame
2
Poster
3
Play control
4
Scrubber
Dimmed parts appear only in some states or variants.
Props
16 props on VideoProps, grouped as they are declared in source. Required props are marked *.
Accessibility and keyboard
Keyboard
Enter
Activates
Space
Activates
Tab
Moves focus on
Semantics
Roles
button
image
img
ARIA on web
aria-hidden
aria-label
Below the platform minimum, the touch area grows to 44 pt on iOS and 48 dp on Android without moving the layout.
From the docs
autoplay starts a clip once it is ready unless the system asks to reduce motion; browsers autoplay only muted clips, and this site's own policy blocks autoplay, so the examples here play on tap. Name every clip with accessibilityLabel: its controls are announced as "Play", "Pause", "Seek" and "Mute" followed by that name. Playback runs through the optional expo-video peer; without it the frame keeps its size and poster in a labeled frame.
Platform skins
The playground's props on each platform: same tree, native shapes, type and touch sizes.
Usage
Give it a source (a { uri }, or a bundled asset from require), an optional poster shown until the clip's first frame is on screen, and the clip's aspectRatio (width over height, 16 / 9 by default): the frame fills its parent's width at that ratio and letterboxes the picture on black, inside the v4 hand-off's frame: a 14 px corner on a hairline (radius picks a step of the kit's scale instead). Without controls it is an inline player: the whole picture is one play and pause control, a play emblem sits over the paused picture, and a spinner shows while the clip loads. With controls each platform shows transport its own way: iOS and Android hand the frame to their own player controls, and the web draws the kit's control bar under the picture, with play and pause, the elapsed time, a seek slider, the length, mute, and full screen.
autoplay starts a clip once it is ready unless the system asks to reduce motion; browsers autoplay only muted clips, and this site's own policy blocks autoplay, so the examples here play on tap. Name every clip with accessibilityLabel: its controls are announced as "Play", "Pause", "Seek" and "Mute" followed by that name. Playback runs through the optional expo-video peer; without it the frame keeps its size and poster in a labeled frame.
Tokens
Read from the playground render. Values follow the scheme and the ion hue.
--cyan
--fd
--fm
--ft
--ion
--ln