1
1
import React , { useState } from "react" ;
2
2
3
+ const NumInput = ( {
4
+ value,
5
+ onChange,
6
+ } : {
7
+ value : number ;
8
+ onChange : ( value : number ) => void ;
9
+ } ) => {
10
+ return (
11
+ < div className = "flex items-center space-x-2" >
12
+ < input
13
+ type = "number"
14
+ className = "w-10 border border-gray-300 rounded"
15
+ value = { value }
16
+ onChange = { ( e ) => onChange ( Number ( e . target . value ) ) }
17
+ />
18
+ </ div >
19
+ ) ;
20
+ } ;
21
+
3
22
export const RangeSlider = ( {
4
23
defaultValue = [ 0 , 100 ] ,
5
24
onChange,
25
+ min = 0 ,
26
+ max = 500 ,
6
27
} : {
7
28
defaultValue : [ number , number ] ;
8
29
onChange ?: ( value : [ number , number ] ) => void ;
30
+ min ?: number ;
31
+ max ?: number ;
9
32
} ) => {
10
33
const [ modelSizeRange , setModelSizeRange ] = useState ( defaultValue ) ;
11
34
const [ initialRange ] = useState ( defaultValue ) ; // 初始值
@@ -28,27 +51,41 @@ export const RangeSlider = ({
28
51
< input
29
52
type = "range"
30
53
className = "w-full"
31
- min = { 0 }
32
- max = { 500 }
54
+ min = { min }
55
+ max = { max }
33
56
value = { modelSizeRange [ 0 ] }
34
57
onChange = { ( e ) =>
35
58
setModelSizeRange ( [ Number ( e . target . value ) , modelSizeRange [ 1 ] ] )
36
59
}
37
60
/>
38
- < span className = "text-sm font-medium" > { modelSizeRange [ 0 ] } </ span >
61
+ < span className = "text-sm font-medium" >
62
+ < NumInput
63
+ value = { modelSizeRange [ 0 ] }
64
+ onChange = { ( value ) =>
65
+ setModelSizeRange ( [ value , modelSizeRange [ 1 ] ] )
66
+ }
67
+ />
68
+ </ span >
39
69
</ div >
40
70
< div className = "flex items-center space-x-2 mt-2" >
41
71
< input
42
72
type = "range"
43
73
className = "w-full"
44
- min = { 0 }
45
- max = { 500 }
74
+ min = { min }
75
+ max = { max }
46
76
value = { modelSizeRange [ 1 ] }
47
77
onChange = { ( e ) =>
48
78
setModelSizeRange ( [ modelSizeRange [ 0 ] , Number ( e . target . value ) ] )
49
79
}
50
80
/>
51
- < span className = "text-sm font-medium" > { modelSizeRange [ 1 ] } </ span >
81
+ < span className = "text-sm font-medium" >
82
+ < NumInput
83
+ value = { modelSizeRange [ 1 ] }
84
+ onChange = { ( value ) =>
85
+ setModelSizeRange ( [ modelSizeRange [ 0 ] , value ] )
86
+ }
87
+ />
88
+ </ span >
52
89
</ div >
53
90
</ div >
54
91
0 commit comments