@@ -40,6 +40,10 @@ import type {
4040export type RangeConfig = {
4141 editable ?: boolean ;
4242 draggableTrack ?: boolean ;
43+ /** Set min count when `editable` */
44+ minCount ?: number ;
45+ /** Set max count when `editable` */
46+ maxCount ?: number ;
4347} ;
4448
4549export interface SliderProps < ValueType = number | number [ ] > {
@@ -59,6 +63,7 @@ export interface SliderProps<ValueType = number | number[]> {
5963
6064 // Value
6165 range ?: boolean | RangeConfig ;
66+ /** @deprecated Use `range.minCount` or `range.maxCount` to handle this */
6267 count ?: number ;
6368 min ?: number ;
6469 max ?: number ;
@@ -185,7 +190,7 @@ const Slider = React.forwardRef<SliderRef, SliderProps<number | number[]>>((prop
185190 } , [ reverse , vertical ] ) ;
186191
187192 // ============================ Range =============================
188- const [ rangeEnabled , rangeEditable , rangeDraggableTrack ] = useRange ( range ) ;
193+ const [ rangeEnabled , rangeEditable , rangeDraggableTrack , minCount , maxCount ] = useRange ( range ) ;
189194
190195 const mergedMin = React . useMemo ( ( ) => ( isFinite ( min ) ? min : 0 ) , [ min ] ) ;
191196 const mergedMax = React . useMemo ( ( ) => ( isFinite ( max ) ? max : 100 ) , [ max ] ) ;
@@ -312,17 +317,19 @@ const Slider = React.forwardRef<SliderRef, SliderProps<number | number[]>>((prop
312317 } ) ;
313318
314319 const onDelete = ( index : number ) => {
315- if ( ! disabled && rangeEditable ) {
316- const cloneNextValues = [ ... rawValues ] ;
317- cloneNextValues . splice ( index , 1 ) ;
320+ if ( disabled || ! rangeEditable || rawValues . length <= minCount ) {
321+ return ;
322+ }
318323
319- onBeforeChange ?. ( getTriggerValue ( cloneNextValues ) ) ;
320- triggerChange ( cloneNextValues ) ;
324+ const cloneNextValues = [ ... rawValues ] ;
325+ cloneNextValues . splice ( index , 1 ) ;
321326
322- const nextFocusIndex = Math . max ( 0 , index - 1 ) ;
323- handlesRef . current . hideHelp ( ) ;
324- handlesRef . current . focus ( nextFocusIndex ) ;
325- }
327+ onBeforeChange ?.( getTriggerValue ( cloneNextValues ) ) ;
328+ triggerChange ( cloneNextValues ) ;
329+
330+ const nextFocusIndex = Math . max ( 0 , index - 1 ) ;
331+ handlesRef . current . hideHelp ( ) ;
332+ handlesRef . current . focus ( nextFocusIndex ) ;
326333 } ;
327334
328335 const [ draggingIndex , draggingValue , draggingDelete , cacheValues , onStartDrag ] = useDrag (
@@ -336,6 +343,7 @@ const Slider = React.forwardRef<SliderRef, SliderProps<number | number[]>>((prop
336343 finishChange ,
337344 offsetValues ,
338345 rangeEditable ,
346+ minCount ,
339347 ) ;
340348
341349 /**
@@ -365,7 +373,7 @@ const Slider = React.forwardRef<SliderRef, SliderProps<number | number[]>>((prop
365373
366374 let focusIndex = valueIndex ;
367375
368- if ( rangeEditable && valueDist !== 0 ) {
376+ if ( rangeEditable && valueDist !== 0 && ( ! maxCount || rawValues . length < maxCount ) ) {
369377 cloneNextValues . splice ( valueBeforeIndex + 1 , 0 , newValue ) ;
370378 focusIndex = valueBeforeIndex + 1 ;
371379 } else {
0 commit comments