@@ -41,6 +41,7 @@ const [createSliderContext, createSliderScope] = createContextScope(SLIDER_NAME,
41
41
] ) ;
42
42
43
43
type SliderContextValue = {
44
+ name ?: string ;
44
45
disabled ?: boolean ;
45
46
min : number ;
46
47
max : number ;
@@ -90,13 +91,9 @@ const Slider = React.forwardRef<SliderElement, SliderProps>(
90
91
inverted = false ,
91
92
...sliderProps
92
93
} = props ;
93
- const [ slider , setSlider ] = React . useState < HTMLSpanElement | null > ( null ) ;
94
- const composedRefs = useComposedRefs ( forwardedRef , ( node ) => setSlider ( node ) ) ;
95
94
const thumbRefs = React . useRef < SliderContextValue [ 'thumbs' ] > ( new Set ( ) ) ;
96
95
const valueIndexToChangeRef = React . useRef < number > ( 0 ) ;
97
96
const isHorizontal = orientation === 'horizontal' ;
98
- // We set this to true by default so that events bubble to forms without JS (SSR)
99
- const isFormControl = slider ? Boolean ( slider . closest ( 'form' ) ) : true ;
100
97
const SliderOrientation = isHorizontal ? SliderHorizontal : SliderVertical ;
101
98
102
99
const [ values = [ ] , setValues ] = useControllableState ( {
@@ -147,6 +144,7 @@ const Slider = React.forwardRef<SliderElement, SliderProps>(
147
144
return (
148
145
< SliderProvider
149
146
scope = { props . __scopeSlider }
147
+ name = { name }
150
148
disabled = { disabled }
151
149
min = { min }
152
150
max = { max }
@@ -161,7 +159,7 @@ const Slider = React.forwardRef<SliderElement, SliderProps>(
161
159
aria-disabled = { disabled }
162
160
data-disabled = { disabled ? '' : undefined }
163
161
{ ...sliderProps }
164
- ref = { composedRefs }
162
+ ref = { forwardedRef }
165
163
onPointerDown = { composeEventHandlers ( sliderProps . onPointerDown , ( ) => {
166
164
if ( ! disabled ) valuesBeforeSlideStartRef . current = values ;
167
165
} ) }
@@ -189,14 +187,6 @@ const Slider = React.forwardRef<SliderElement, SliderProps>(
189
187
/>
190
188
</ Collection . Slot >
191
189
</ Collection . Provider >
192
- { isFormControl &&
193
- values . map ( ( value , index ) => (
194
- < BubbleInput
195
- key = { index }
196
- name = { name ? name + ( values . length > 1 ? '[]' : '' ) : undefined }
197
- value = { value }
198
- />
199
- ) ) }
200
190
</ SliderProvider >
201
191
) ;
202
192
}
@@ -556,15 +546,18 @@ const SliderThumb = React.forwardRef<SliderThumbElement, SliderThumbProps>(
556
546
type SliderThumbImplElement = React . ElementRef < typeof Primitive . span > ;
557
547
interface SliderThumbImplProps extends PrimitiveSpanProps {
558
548
index : number ;
549
+ name ?: string ;
559
550
}
560
551
561
552
const SliderThumbImpl = React . forwardRef < SliderThumbImplElement , SliderThumbImplProps > (
562
553
( props : ScopedProps < SliderThumbImplProps > , forwardedRef ) => {
563
- const { __scopeSlider, index, ...thumbProps } = props ;
554
+ const { __scopeSlider, index, name , ...thumbProps } = props ;
564
555
const context = useSliderContext ( THUMB_NAME , __scopeSlider ) ;
565
556
const orientation = useSliderOrientationContext ( THUMB_NAME , __scopeSlider ) ;
566
557
const [ thumb , setThumb ] = React . useState < HTMLSpanElement | null > ( null ) ;
567
558
const composedRefs = useComposedRefs ( forwardedRef , ( node ) => setThumb ( node ) ) ;
559
+ // We set this to true by default so that events bubble to forms without JS (SSR)
560
+ const isFormControl = thumb ? Boolean ( thumb . closest ( 'form' ) ) : true ;
568
561
const size = useSize ( thumb ) ;
569
562
// We cast because index could be `-1` which would return undefined
570
563
const value = context . values [ index ] as number | undefined ;
@@ -618,6 +611,17 @@ const SliderThumbImpl = React.forwardRef<SliderThumbImplElement, SliderThumbImpl
618
611
} ) }
619
612
/>
620
613
</ Collection . ItemSlot >
614
+
615
+ { isFormControl && (
616
+ < BubbleInput
617
+ key = { index }
618
+ name = {
619
+ name ??
620
+ ( context . name ? context . name + ( context . values . length > 1 ? '[]' : '' ) : undefined )
621
+ }
622
+ value = { value }
623
+ />
624
+ ) }
621
625
</ span >
622
626
) ;
623
627
}
0 commit comments