import React from "react"; import { Theme } from "../../themes"; export type SliderProps = { /** * The current value (controlled). */ value?: number | number[]; /** * The default value (uncontrolled). */ defaultValue?: number | number[]; /** * Handler that is called when the value changes. */ onChange?: (value: number | number[]) => void; /** * The minimum value of the slider. */ min?: number; /** * The maximum value of the slider. */ max?: number; /** * The step value of the slider. */ step?: number; /** * Whether the slider is disabled. */ disabled?: boolean; /** * Whether to show scale marks on the slider. */ showScale?: boolean; /** * Custom ID for the slider. If not provided, a unique ID will be generated. */ id?: string; /** * Additional CSS class name. */ className?: string; /** * Additional inline styles. */ style?: React.CSSProperties; /** * Accessible name for the slider. Use this when the slider has no visible label. */ "aria-label"?: string; /** * ID of the element that labels the slider. */ "aria-labelledby"?: string; /** * ID of the element that describes the slider. */ "aria-describedby"?: string; }; type BaseSliderComponentProps = { theme: Theme; }; export type SliderTrackProps = {}; export type SliderFillProps = { percentage: number; isDragging?: boolean; startPercentage?: number; }; export type SliderThumbProps = { percentage: number; isDragging: boolean; }; export type SliderScaleProps = BaseSliderComponentProps & { isOnFill: boolean; }; export type UseSliderProps = { value?: number | number[]; defaultValue?: number | number[]; onChange?: (value: number | number[]) => void; min: number; max: number; step: number; disabled?: boolean; }; export type UseSliderReturn = { currentValue: number | number[]; isDragging: boolean; trackRef: React.RefObject; thumbRef: React.RefObject; handleChange: (newValue: number | number[]) => void; handleMouseDown: (e: React.MouseEvent) => void; handleMouseMove: (e: MouseEvent) => void; handleMouseUp: (e: MouseEvent) => void; handleTouchStart: (e: React.TouchEvent) => void; handleTouchMove: (e: TouchEvent) => void; handleTouchEnd: (e: TouchEvent) => void; }; export type UseSliderScaleProps = { showScale: boolean; min: number; max: number; step: number; currentValue: number | number[]; }; export type UseSliderScaleReturn = { getScaleValues: () => number[]; isScaleOnFill: (scaleValue: number) => boolean; renderScale: () => React.ReactNode; }; export {};