feat(html): add slider element (#655)

This commit is contained in:
rahim
2026-02-28 20:13:08 -08:00
committed by GitHub
parent 010e93ff34
commit d5df0150b3
14 changed files with 638 additions and 6 deletions
@@ -2,11 +2,8 @@ import { clamp, roundToStep } from '@videojs/utils/number';
import { defaults } from '@videojs/utils/object';
import type { NonNullableObject } from '@videojs/utils/types';
export interface SliderProps {
/** Minimum value of the slider range. */
min?: number | undefined;
/** Maximum value of the slider range. */
max?: number | undefined;
/** Shared configuration for all slider variants. */
export interface SliderBaseProps {
/** Step increment for value changes (arrow keys). */
step?: number | undefined;
/** Large step increment (Page Up/Down keys). */
@@ -19,6 +16,15 @@ export interface SliderProps {
thumbAlignment?: 'center' | 'edge' | undefined;
}
export interface SliderProps extends SliderBaseProps {
/** Current slider value. */
value?: number | undefined;
/** Minimum value of the slider range. */
min?: number | undefined;
/** Maximum value of the slider range. */
max?: number | undefined;
}
/** Current pointer/drag interaction state, typically provided by a DOM controller. */
export interface SliderInteraction {
/** Pointer position as a percentage of the track (0100). */
@@ -56,6 +62,7 @@ export interface SliderState {
export class SliderCore {
static readonly defaultProps: NonNullableObject<SliderProps> = {
value: 0,
min: 0,
max: 100,
step: 1,
@@ -17,6 +17,7 @@ describe('SliderCore', () => {
describe('defaultProps', () => {
it('has expected defaults', () => {
expect(SliderCore.defaultProps).toEqual({
value: 0,
min: 0,
max: 100,
step: 1,