@zendeskgarden/container-slider
Version:
Containers relating to Slider in the Garden Design System
82 lines (81 loc) • 3.44 kB
TypeScript
/**
* Copyright Zendesk, Inc.
*
* Use of this source code is governed under the Apache License, Version 2.0
* found at http://www.apache.org/licenses/LICENSE-2.0.
*/
import { HTMLProps, ReactNode, RefObject } from 'react';
export interface IUseSliderProps<T = Element, M = HTMLElement> {
/** Provides ref access to the underlying track element */
trackRef: RefObject<T>;
/** Provides ref access to the underlying minimum thumb element */
minThumbRef: RefObject<M>;
/** Provides ref access to the underlying maximum thumb element */
maxThumbRef: RefObject<M>;
/** Determines the starting minimum value for an uncontrolled slider */
defaultMinValue?: number;
/** Determines the starting maximum value for an uncontrolled slider */
defaultMaxValue?: number;
/** Determines current minimum value of a controlled slider */
minValue?: number;
/** Determines current maximum value of a controlled slider */
maxValue?: number;
/**
* Handles slider value changes
*
* @param {number} [value.minValue] The updated minimum value
* @param {number} [value.maxValue] The updated maximum value
*/
onChange?: (values: {
minValue?: number;
maxValue?: number;
}) => void;
/** Sets the minimum permitted value */
min?: number;
/** Sets the maximum permitted value */
max?: number;
/** Defines the stepping interval */
step?: number;
/** Defines the jumping interval for keyboard page up/down navigation. Defaults to `step`. */
jump?: number;
/** Indicates that the slider is not interactive */
disabled?: boolean;
/** Determines right-to-left layout */
rtl?: boolean;
/** Sets the environment where the slider is rendered */
environment?: Document;
}
export interface IUseSliderReturnValue {
getTrackProps: <T extends Element>(props?: HTMLProps<T>) => HTMLProps<T>;
getMinThumbProps: <T extends Element>(props: Omit<HTMLProps<T>, 'aria-label'> & {
'aria-label': NonNullable<HTMLProps<T>['aria-label']>;
}) => HTMLProps<T>;
getMaxThumbProps: <T extends Element>(props: Omit<HTMLProps<T>, 'aria-label'> & {
'aria-label': NonNullable<HTMLProps<T>['aria-label']>;
}) => HTMLProps<T>;
trackRect: DOMRect;
minValue: number;
maxValue: number;
}
export interface ISliderContainerProps<T = Element, M = HTMLElement> extends IUseSliderProps<T, M> {
/**
* Provides slider render prop functions and values
*
* @param {function} [options.getTrackProps] Track props getter
* @param {function} [options.getMinThumbProps] Minimum thumb props getter
* @param {function} [options.getMaxThumbProps] Maximum thumb props getter
* @param {object} [options.trackRect] Current size and position of the track
* @param {number} [options.minValue] Current minimum value
* @param {number} [options.maxValue] Current maximum value
*/
render?: (options: {
getTrackProps: IUseSliderReturnValue['getTrackProps'];
getMinThumbProps: IUseSliderReturnValue['getMinThumbProps'];
getMaxThumbProps: IUseSliderReturnValue['getMaxThumbProps'];
trackRect: IUseSliderReturnValue['trackRect'];
minValue: IUseSliderReturnValue['minValue'];
maxValue: IUseSliderProps['maxValue'];
}) => ReactNode;
/** @ignore */
children?: (options: IUseSliderReturnValue) => ReactNode;
}