Video Player
- Stable
- WCAG 2.2 evidence
- RTL
A video with a poster, Nexera controls and captions. A shell around the native <video>: it calls play(), pause(), currentTime, volume, muted,
requestFullscreen() and requestPictureInPicture() and mirrors the element's events in its state. The library never
hosts or fetches media. Accessibility: a named region. Every control is a button or slider reachable by Tab (WCAG 2.1.1), with the
shortcuts K / Space, M, C, F and arrows while focus is inside the player only (2.1.4, never global). Captions come from
tracks (WebVTT), are toggled with C or the captions button and drawn in the Figma box (1.2.2). No autoplay with sound
(1.4.2); autoplay is muted and skipped with reduced motion, and pause is always one key away (2.2.2). Loading is
announced by the spinner (4.1.3) and errors as an alert. When the control that had focus disappears (the poster play
button once playback starts, the controls at the end), focus moves to the new primary action instead of being lost
(2.4.3). The spinner animates only when motion is allowed (2.3.3). Media colours are the same in Light and Dark; the
controls keep 3:1 over any frame (1.4.11). Consumer duties: captions and a transcript (1.2.1 to 1.2.5: audio description where the picture carries information),
the poster's text alternative through title / description, letting people stop an "Up next" timer, and translated
labels.
import { VideoPlayer } from "@nexera-ui/react";- 6
- examples
- 28
- props
- 10
- live controls
- 1
- platform
- 11
- WCAG criteria
- 1
- block uses it
Try every prop. Copy the code.
Change the props and the code updates. Check light and dark, LTR and RTL, and phone width.
import { VideoPlayer } from "@nexera-ui/react";
<VideoPlayer />Examples 5
The same examples as Storybook, rendered live. Open Code to copy one.
With up next
At the end: Replay and an "Up next" card. Let the 8-second sample play to the end.
import { VideoPlayer } from "@nexera-ui/react";
const SAMPLE_CAPTIONS = `data:text/vtt;charset=utf-8,${encodeURIComponent(
"WEBVTT\n\n00:00.000 --> 00:03.500\nWelcome to Acme.\n\n00:03.500 --> 00:08.000\nYou will meet your buddy on day two.\n",
)}`;
const POSTER = `data:image/svg+xml,${encodeURIComponent(
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 360"><rect width="640" height="360" fill="navajowhite"/>' +
'<circle cx="230" cy="170" r="48" fill="peru"/><circle cx="410" cy="170" r="48" fill="sienna"/>' +
'<rect x="160" y="230" width="140" height="130" rx="40" fill="peru"/><rect x="340" y="230" width="140" height="130" rx="40" fill="sienna"/></svg>',
)}`;
<VideoPlayer
title="Welcome to Acme: your first week"
description="0:08 · Onboarding"
src="data:video/webm;base64,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"
poster={POSTER}
tracks={[{ src: SAMPLE_CAPTIONS, srcLang: "en", label: "English", isDefault: true }]}
className="max-w-2xl"
upNext={{
title: "Leave and attendance basics",
countdown: "Up next",
thumbnail: <img src={POSTER} alt="" />,
onPress: () => undefined,
}}
/>;
Compact controls
controlsLayout="compact" for narrow players.
import { VideoPlayer } from "@nexera-ui/react";
const SAMPLE_CAPTIONS = `data:text/vtt;charset=utf-8,${encodeURIComponent(
"WEBVTT\n\n00:00.000 --> 00:03.500\nWelcome to Acme.\n\n00:03.500 --> 00:08.000\nYou will meet your buddy on day two.\n",
)}`;
const POSTER = `data:image/svg+xml,${encodeURIComponent(
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 360"><rect width="640" height="360" fill="navajowhite"/>' +
'<circle cx="230" cy="170" r="48" fill="peru"/><circle cx="410" cy="170" r="48" fill="sienna"/>' +
'<rect x="160" y="230" width="140" height="130" rx="40" fill="peru"/><rect x="340" y="230" width="140" height="130" rx="40" fill="sienna"/></svg>',
)}`;
<VideoPlayer
title="Welcome to Acme: your first week"
description="0:08 · Onboarding"
src="data:video/webm;base64,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"
poster={POSTER}
tracks={[{ src: SAMPLE_CAPTIONS, srcLang: "en", label: "English", isDefault: true }]}
className="max-w-sm"
controlsLayout="compact"
/>;
Loading
isLoading: a spinner announced as "Loading video" over a 60 % scrim.
import { VideoPlayer } from "@nexera-ui/react";
const SAMPLE_CAPTIONS = `data:text/vtt;charset=utf-8,${encodeURIComponent(
"WEBVTT\n\n00:00.000 --> 00:03.500\nWelcome to Acme.\n\n00:03.500 --> 00:08.000\nYou will meet your buddy on day two.\n",
)}`;
const POSTER = `data:image/svg+xml,${encodeURIComponent(
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 360"><rect width="640" height="360" fill="navajowhite"/>' +
'<circle cx="230" cy="170" r="48" fill="peru"/><circle cx="410" cy="170" r="48" fill="sienna"/>' +
'<rect x="160" y="230" width="140" height="130" rx="40" fill="peru"/><rect x="340" y="230" width="140" height="130" rx="40" fill="sienna"/></svg>',
)}`;
<VideoPlayer
title="Welcome to Acme: your first week"
description="0:08 · Onboarding"
src="data:video/webm;base64,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"
poster={POSTER}
tracks={[{ src: SAMPLE_CAPTIONS, srcLang: "en", label: "English", isDefault: true }]}
className="max-w-2xl"
isLoading
/>;
Error
isInvalid: announced as an alert, with Retry. The player also shows it when the media fails.
import { VideoPlayer } from "@nexera-ui/react";
const SAMPLE_CAPTIONS = `data:text/vtt;charset=utf-8,${encodeURIComponent(
"WEBVTT\n\n00:00.000 --> 00:03.500\nWelcome to Acme.\n\n00:03.500 --> 00:08.000\nYou will meet your buddy on day two.\n",
)}`;
const POSTER = `data:image/svg+xml,${encodeURIComponent(
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 360"><rect width="640" height="360" fill="navajowhite"/>' +
'<circle cx="230" cy="170" r="48" fill="peru"/><circle cx="410" cy="170" r="48" fill="sienna"/>' +
'<rect x="160" y="230" width="140" height="130" rx="40" fill="peru"/><rect x="340" y="230" width="140" height="130" rx="40" fill="sienna"/></svg>',
)}`;
<VideoPlayer
title="Welcome to Acme: your first week"
description="0:08 · Onboarding"
src="data:video/webm;base64,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"
poster={POSTER}
tracks={[{ src: SAMPLE_CAPTIONS, srcLang: "en", label: "English", isDefault: true }]}
className="max-w-2xl"
isInvalid
/>;
Fallback slot
Without a poster image the fallback slot shows on the poster.
import { VideoPlayer } from "@nexera-ui/react";
const SAMPLE_VIDEO =
"data:video/webm;base64,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";
export function FallbackSlot() {
return (
<VideoPlayer
title="Welcome to Acme: your first week"
description="0:08 · Onboarding"
src={SAMPLE_VIDEO}
className="max-w-2xl"
fallback={
<svg viewBox="0 0 640 360" preserveAspectRatio="xMidYMid slice">
<rect width="640" height="360" className="fill-status-warning-bg" />
<circle cx="320" cy="180" r="70" className="fill-status-warning-border" />
</svg>
}
/>
);
}
Props 28
Press "Try it" on a card to load that prop into the playground.
28 props shown
srcNexerastringVideo URL. The library never hosts or fetches media itself: pass a URL your app serves.
sourcesNexerareadonly VideoPlayerSource[]Several formats of the same video (<source> elements), tried in order.
posterNexerastringPoster image URL shown before playback.
fallbackNexeraReactNodeThe Figma Photo placeholder slot: shown in the poster state when there is no poster image. Decorative.
descriptionNexeraReactNodeSecond line under the title on the poster.
captionNexeraReactNodeCaption text to show above the controls, when you render captions yourself. Without it, the active cue of the captions track is shown while captions are on.
tracksNexerareadonly VideoPlayerTrack[]Captions and subtitles (<track> elements). With at least one, the captions toggle appears (C toggles it) and the
cues are drawn in the Figma Captions box. Required for prerecorded speech (WCAG 1.2.2).
upNextNexeraVideoPlayerUpNextThe "Up next" card of the ended state.
isLoadingNexerabooleanShows the loading state whatever the media does, for example while you fetch a signed URL. The player also shows it on its own while the media waits for data.
isInvalidNexerabooleanShows the error state whatever the media does, for example when your API refuses the video. The player also shows it on its own when the media fails to load.
autoPlayNexerabooleanStarts playback on load, always muted (no autoplay with sound, WCAG 1.4.2) and never when the user prefers reduced motion (2.2.2, 2.3.3). The controls let people pause and unmute.
loopNexerabooleanPlays again from the start at the end.
preloadNexera"none" | "metadata" | "auto"How much to load before playback (native preload).
crossOriginNexera"anonymous" | "use-credentials"CORS mode of the video and track requests (native crossOrigin); captions from another origin need it.
controlsLayoutNexera"full" | "compact"Controls layout: full, or compact for narrow players.
seekStepNexeranumberSeconds moved by the arrow keys and the back button.
keyboardShortcutsNexerabooleanKeyboard shortcuts while focus is in the player (K / Space, M, C, F, arrows); never global. false turns them off
(WCAG 2.1.4).
onPlayingChangeNexera(isPlaying: boolean) => voidCalled when playback starts (true) or stops (false).
onEndedNexera() => voidCalled when the video reaches its end.
onRetryNexera() => voidCalled when Retry is pressed. Without it, the player reloads the video and plays.
onSettingsPressNexera() => voidCalled when Settings is pressed (full controls): open your quality / speed menu. The button shows when set.
videoRefNexeraRef<HTMLVideoElement>Ref to the native <video>, for anything the player does not cover (playbackRate, textTracks, events).
labelsNexeraPartial<VideoPlayerLabels>Texts; English defaults. Translate them.
classNameNexerastringExtra classes for the root, merged last so they win over the defaults.
styleNexeraCSSPropertiesInline style for the root.
titleNexeraReactNodeTitle of the video, shown on the poster; it names the player. Title of the video, shown on the poster.
aria-labelNexerastringAccessible name; replaces the title as the player's name.
Accessible name of the player when there is no title. Translate it.
Accessible name; aria-labelledby wins.
aria-labelledbyNexerastringId(s) of element(s) that name the player; wins over title and aria-label.
Id(s) of element(s) that name the player; wins over aria-label.
Id(s) of visible element(s) that name the player.
* Required. React Aria props shown are the ones most apps use; the component accepts the rest of its React Aria props too.
Accessible by default.
Built on React Aria, and covered by the WCAG 2.2 evidence generated on every build.
WCAG 2.2 evidence
11 direct · 0 supporting- 1.1.1Non-text ContentLevel A · tested directly
- 1.2.2Captions (Prerecorded)Level A · tested directly
- 1.3.1Info and RelationshipsLevel A · tested directly
- 1.4.2Audio ControlLevel A · tested directly
- 2.1.1KeyboardLevel A · tested directly
- 2.1.4Character Key ShortcutsLevel A · tested directly
- 2.2.2Pause, Stop, HideLevel A · tested directly
- 2.3.3Animation from InteractionsLevel AAA · tested directly
- 2.4.3Focus OrderLevel A · tested directly
- 4.1.2Name, Role, ValueLevel A · tested directly
- 4.1.3Status MessagesLevel AA · tested directly
Fits any width.
Nexera components respond to the space they are given. Drag the corner of the frame, or pick a width.
Styling hooks
Pass className to add Tailwind classes (merged last). State is exposed as data attributes, so you can style it with variants like data-pressed:.
data-fullscreendata-hovereddata-pressed
<VideoPlayer className="data-fullscreen:opacity-90 shadow-sm" />Used in blocks
Related components
- CarouselA carousel: slides in a scroll-snap strip with Previous / Next, indicators and, when you opt in, automatic rotation with a visible pause button.
- CarouselControlsPrevious / Next buttons for a carousel, and optionally a button that stops and starts automatic rotation.
- CarouselIndicatorShows which slide of a carousel is current, and lets people jump to a slide.
- ImageA picture in a rounded frame with a fixed aspect ratio: Figma `State=Loading` (a `bg/sunken` frame with a shimmer), `Loaded` and `Error` ("Image unavailable") follow the load lifecycle of the `<img>`; they are not props.
- ImageTileA square picture in a gallery or picker, with overlay actions on hover and a selected state.
- VideoControlsThe control bar of a video: scrubber, play / pause, back, mute and volume, time, captions, settings, picture in picture and full screen, over a dark gradient.