Skip to content

ReferenceDialogs

media-dialog

A modal dialog for application content, including players opened from a thumbnail

Import

import '@videojs/html/ui/dialog';
import '@videojs/html/ui/dialog-backdrop';
import '@videojs/html/ui/dialog-popup';
import '@videojs/html/ui/dialog-title';
import '@videojs/html/ui/dialog-description';
import '@videojs/html/ui/dialog-close';

Anatomy

<button commandfor="video-dialog">Open video</button>
<media-dialog id="video-dialog">
  <media-dialog-backdrop></media-dialog-backdrop>
  <media-dialog-popup>
    <media-dialog-title></media-dialog-title>
    <media-dialog-description></media-dialog-description>
    <media-dialog-close></media-dialog-close>
  </media-dialog-popup>
</media-dialog>

Behavior

<media-dialog> provides the modal interaction and accessibility behavior while your application supplies the content and styling. It is the general-purpose replacement for a ModalDialog use case such as opening a player from a thumbnail.

Place a button immediately before media-dialog, or connect them explicitly with commandfor and an id. You can also set the dialog’s open property directly. The root provides state without creating a layout box; media-dialog-backdrop and media-dialog-popup are sibling surfaces. The element dispatches open-change when its state changes and open-change-complete after the popup transition finishes.

The close part and Escape close the dialog. Other buttons inside the dialog, including player controls, do not close it.

Your application decides what opening and closing mean for the media. The example starts playback after opening and pauses it as soon as the dialog closes. Handle the promise returned by play(), since browsers can reject autoplay when it is not allowed.

Use <media-alert-dialog> for urgent messages that require acknowledgement. <media-error-dialog> is the player-error specialization. Both use the same dialog behavior.

Styling

Use the open and transition data attributes to style the modal and its animations:

Attribute Description
data-open Present while the dialog is open, including its closing transition
data-starting-style Present at the start of the opening transition
data-ending-style Present during the closing transition
media-dialog-backdrop:not([data-open]),
media-dialog-popup:not([data-open]) {
  display: none;
}

media-dialog-backdrop[data-starting-style],
media-dialog-backdrop[data-ending-style],
media-dialog-popup[data-starting-style],
media-dialog-popup[data-ending-style] {
  opacity: 0;
}

Accessibility

The popup uses role="dialog" and aria-modal="true". Include <media-dialog-title> so the dialog always has an accessible name. <media-dialog-description> is optional. These parts receive generated IDs connected through aria-labelledby and aria-describedby. The trigger receives aria-haspopup, aria-controls, and aria-expanded.

When the dialog opens, focus moves to an element with autofocus, the first focusable element, or the popup itself. Tab and Shift + Tab keep focus within the dialog, and content outside the dialog becomes inert. Closing restores focus to the trigger, or to the element that was focused before the dialog opened.

Dialogs inside the same player container share modal coordination. Opening one closes the current dialog and dismisses any open menu, tooltip, or popover before focus moves into the new popup.

Examples

Player modal

Open the video from its thumbnail. Playback starts when the dialog opens and pauses when it closes.

Video title A video opened from a thumbnail. Close
<div class="html-dialog-basic">
  <button class="html-dialog-basic__trigger" type="button" commandfor="html-video-dialog">
    <img src="https://image.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/thumbnail.jpg" alt="" />
    <span>Play the video</span>
  </button>
  <media-dialog id="html-video-dialog">
    <media-dialog-backdrop class="html-dialog-basic__backdrop"></media-dialog-backdrop>
    <media-dialog-popup class="html-dialog-basic__dialog">
      <div class="html-dialog-basic__popup">
        <media-dialog-title class="html-dialog-basic__title">Video title</media-dialog-title>
        <media-dialog-description class="html-dialog-basic__description">
          A video opened from a thumbnail.
        </media-dialog-description>
        <media-dialog-close class="html-dialog-basic__close">Close</media-dialog-close>
        <video-player>
          <media-container>
            <video src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4" controls muted playsinline></video>
          </media-container>
        </video-player>
      </div>
    </media-dialog-popup>
  </media-dialog>
</div>

API Reference

media-dialog

Manages dialog state and provides it to the compound parts.

Props

PropTypeDefaultDetails
closeOnEscape
attribute close-on-escape
booleantrue
defaultOpen
attribute default-open
booleanfalse
openbooleanfalse

State

State is reflected as data attributes for CSS styling.

PropertyTypeDetails
transitionStartingboolean
transitionEndingboolean
openboolean
status'idle' | 'starting' | 'ending'
titleIdstring | undefined
descriptionIdstring | undefined

Data attributes

AttributeDescription
data-openPresent when the dialog is open.
data-starting-stylePresent during the open transition.
data-ending-stylePresent during the close transition.

Events

EventDescription
open-change
open-change-complete

media-dialog-backdrop

Presentational backdrop that reflects its owning dialog's state.

Data attributes

AttributeDescription
data-openPresent when the dialog is open.
data-starting-stylePresent during the open transition.
data-ending-stylePresent during the close transition.

media-dialog-close

Button that closes its owning dialog; the element itself takes role="button" and keyboard focus.

Data attributes

AttributeDescription
data-openPresent when the dialog is open.
data-starting-stylePresent during the open transition.
data-ending-stylePresent during the close transition.

media-dialog-description

Text announced as its owning dialog's description. The element takes the id that the popup's aria-describedby points to.

Semantic popup that owns focus management and dialog transition completion.

AttributeDescription
data-openPresent when the dialog is open.
data-starting-stylePresent during the open transition.
data-ending-stylePresent during the close transition.

media-dialog-title

Text that labels its owning dialog. The element takes the id that the popup's aria-labelledby points to.