UNPKG

@7sage/vidstack

Version:

UI component library for building high-quality, accessible video and audio experiences on the web.

392 lines (332 loc) 11.4 kB
/* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Sliders * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-slider) { --width: var(--media-slider-width, 100%); --height: var(--media-slider-height, 48px); --thumb-size: var(--media-slider-thumb-size, 15px); --thumb-focus-size: var(--media-slider-focused-thumb-size, calc(var(--thumb-size) * 1.1)); --track-width: var(--media-slider-track-width, 100%); --track-height: var(--media-slider-track-height, 5px); --track-focus-width: var(--media-slider-focused-track-width, var(--track-width)); --track-focus-height: var(--media-slider-focused-track-height, calc(var(--track-height) * 1.25)); display: inline-flex; align-items: center; width: var(--width); height: var(--height); /** Prevent thumb flowing out of slider. */ margin: 0 calc(var(--thumb-size) / 2); position: relative; contain: layout style; outline: none; pointer-events: auto; cursor: pointer; user-select: none; touch-action: none; -webkit-user-select: none; -webkit-tap-highlight-color: transparent; } :where(.vds-slider[aria-hidden='true']) { display: none !important; } :where(.vds-slider[aria-disabled='true']) { cursor: unset; } :where(.vds-slider:focus) { outline: none; } :where(.vds-slider:not([data-chapters])[data-focus], .vds-slider:not([data-chapters]):focus-visible) :where(.vds-slider-track) { box-shadow: var(--media-focus-ring); } :where(.vds-slider .vds-slider-track) { z-index: 0; position: absolute; width: var(--track-width); height: var(--track-height); top: 50%; left: 0; border-radius: var(--media-slider-track-border-radius, 2px); transform: translateY(-50%) translateZ(0); background-color: var(--media-slider-track-bg, rgb(255 255 255 / 0.3)); contain: strict; } :where(.vds-slider[data-focus], .vds-slider:focus-visible) :where(.vds-slider-track) { outline-offset: var(--thumb-size); } :where(.vds-slider:not([data-chapters])[data-active] .vds-slider-track) { width: var(--track-focus-width); height: var(--track-focus-height); } :where(.vds-slider .vds-slider-track-fill) { z-index: 2; /** above track and track progress. */ background-color: var(--media-slider-track-fill-bg, var(--media-brand)); width: var(--slider-fill, 0%); will-change: width; } :where(.vds-slider .vds-slider-thumb) { position: absolute; top: 50%; left: var(--slider-fill); opacity: 0; contain: layout size style; width: var(--thumb-size); height: var(--thumb-size); border: var(--media-slider-thumb-border, 1px solid #cacaca); border-radius: var(--media-slider-thumb-border-radius, 9999px); background-color: var(--media-slider-thumb-bg, #fff); transform: translate(-50%, -50%) translateZ(0); transition: opacity 0.15s ease-in; pointer-events: none; will-change: left; z-index: 2; /** above track fill. */ } :where(.vds-slider[data-dragging], .vds-slider[data-focus], .vds-slider:focus-visible) :where(.vds-slider-thumb) { box-shadow: var(--media-slider-focused-thumb-shadow, 0 0 0 4px hsla(0, 0%, 100%, 0.4)); } :where(.vds-slider[data-active] .vds-slider-thumb) { opacity: 1; transition: var(--media-slider-thumb-transition, opacity 0.2s ease-in, box-shadow 0.2s ease); } :where(.vds-slider[data-dragging] .vds-slider-thumb) { width: var(--thumb-focus-size); height: var(--thumb-focus-size); } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Slider Value * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-slider-value) { display: inline-block; contain: content; font-size: 14px; font-family: var(--media-font-family, sans-serif); } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Slider Thumbnail * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-slider-thumbnail) { display: block; contain: content; box-sizing: border-box; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Slider Video * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-slider-video) { background-color: black; box-sizing: border-box; contain: content; display: inline-block; border: var(--media-thumbnail-border, 1px solid white); } :where(.vds-slider-video video) { display: block; height: auto; width: 156px; } /* Temporarily hide video while loading. */ :where(.vds-slider-video[data-loading]) { opacity: 0; } /* Hide video if it fails to load. */ :where(.vds-slider-video[data-hidden], .vds-slider-video[data-hidden] video) { display: none; width: 0px; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Previews * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-slider .vds-slider-preview) { display: flex; flex-direction: column; align-items: center; opacity: 0; background-color: var(--media-slider-preview-bg); border-radius: var(--media-slider-preview-border-radius, 2px); pointer-events: none; transition: opacity 0.2s ease-out; will-change: left, opacity; contain: layout paint style; } :where(.vds-slider-preview[data-visible]) { opacity: 1; transition: opacity 0.2s ease-in; } .vds-slider-value { background-color: var(--media-slider-value-bg, black); border-radius: var(--media-slider-value-border-radius, 2px); border: var(--media-slider-value-border); color: var(--media-slider-value-color, white); padding: var(--media-slider-value-padding, 1px 10px); } :where( .vds-slider-video:not([data-hidden]) + .vds-slider-chapter-title, .vds-slider-thumbnail:not([data-hidden]) + .vds-slider-chapter-title ) { margin-top: var(--media-slider-chapter-title-gap, 6px); } :where( .vds-slider-video:not([data-hidden]) + .vds-slider-value, .vds-slider-thumbnail:not([data-hidden]) + .vds-slider-value, .vds-slider-chapter-title + .vds-slider-value ) { margin-top: var(--media-slider-value-gap, 2px); } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Vertical Sliders * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-slider[aria-orientation='vertical']) { --width: var(--media-slider-width, 48px); --height: var(--media-slider-height, 100%); --track-width: var(--media-slider-track-width, 4px); --track-height: var(--media-slider-track-height, 100%); --track-focus-width: var(--media-slider-focused-track-width, calc(var(--track-width) * 1.25)); --track-focus-height: var(--media-slider-focused-track-height, var(--track-height)); /** Prevent thumb flowing out of slider. */ margin: calc(var(--thumb-size) / 2) 0; } :where(.vds-slider[aria-orientation='vertical'] .vds-slider-track) { top: unset; bottom: 0; left: 50%; transform: translateX(-50%) translateZ(0); } :where(.vds-slider[aria-orientation='vertical'] .vds-slider-track-fill) { width: var(--track-width); height: var(--slider-fill); will-change: height; transform: translateX(-50%) translateZ(0); } :where(.vds-slider[aria-orientation='vertical'] .vds-slider-progress) { top: unset; bottom: 0; width: var(--track-width); height: var(--slider-progress, 0%); will-change: height; } :where(.vds-slider[aria-orientation='vertical'] .vds-slider-thumb) { top: unset; bottom: var(--slider-fill); left: 50%; will-change: bottom; transform: translate(-50%, 50%) translateZ(0); } :where(.vds-slider[aria-orientation='vertical'] .vds-slider-preview) { will-change: bottom, opacity; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Time Slider * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where([data-live] .vds-time-slider .vds-slider-track-fill) { background-color: var(--media-slider-track-fill-live-bg, #dc2626); } :where(.vds-time-slider .vds-slider-progress) { z-index: 1; /** above track. */ left: 0; width: var(--slider-progress, 0%); will-change: width; background-color: var(--media-slider-track-progress-bg, rgb(255 255 255 / 0.5)); } :where([data-media-player]:not([data-can-play]) .vds-time-slider .vds-slider-value) { display: none; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Slider Steps * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-slider-steps) { display: flex; align-items: center; justify-content: space-between; width: 100%; height: 100%; position: absolute; top: 0; left: 0; } :where(.vds-slider-step) { width: var(--media-slider-step-width, 2.5px); height: calc(var(--track-height) + 1px); background-color: var(--media-slider-step-color, rgb(124, 124, 124)); opacity: 0; transition: opacity 0.3s ease; } :where(.vds-slider[data-active] .vds-slider-step) { opacity: 1; } /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Slider Chapters * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ :where(.vds-time-slider .vds-slider-chapters) { position: relative; display: flex; align-items: center; width: 100%; height: 100%; contain: layout style; border-radius: var(--media-slider-track-border-radius, 1px); } :where(.vds-slider[data-focus], .vds-slider:focus-visible) :where(.vds-slider-chapters) { box-shadow: var(--media-focus-ring); height: var(--track-height); } :where(.vds-time-slider .vds-slider-chapter) { margin-right: 2px; } :where(.vds-time-slider .vds-slider-chapter:last-child) { margin-right: 0; } :where(.vds-time-slider .vds-slider-chapter) { position: relative; display: flex; align-items: center; width: 100%; height: 100%; will-change: height, transform; contain: layout style; border-radius: var(--media-slider-track-border-radius, 1px); } :where(.vds-time-slider .vds-slider-chapter .vds-slider-track-fill) { width: var(--chapter-fill, 0%); will-change: width; } :where(.vds-time-slider .vds-slider-chapter .vds-slider-progress) { width: var(--chapter-progress, 0%); will-change: width; } @media (hover: hover) and (pointer: fine) { :where(.vds-time-slider:hover .vds-slider-chapters) { contain: strict; } :where(.vds-time-slider .vds-slider-chapter:hover:not(:only-of-type)) { transform: var(--media-slider-chapter-hover-transform, scaleY(2)); transition: var( --media-slider-chapter-hover-transition, transform 0.1s cubic-bezier(0.4, 0, 1, 1) ); } } :where(.vds-time-slider .vds-slider-chapter-title) { font-family: var(--media-font-family, sans-serif); font-size: var(--media-slider-chapter-title-font-size, 14px); color: var(--media-slider-chapter-title-color, #f5f5f5); background-color: var(--media-slider-chapter-title-bg); }