@v-c/slider 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Handles/Handle.cjs +1 -1
- package/dist/Handles/Handle.d.ts +14 -2
- package/dist/Handles/Handle.js +9 -7
- package/dist/Handles/index.cjs +1 -1
- package/dist/Handles/index.d.ts +20 -4
- package/dist/Handles/index.js +6 -2
- package/dist/Slider.cjs +1 -1
- package/dist/Slider.d.ts +25 -14
- package/dist/Slider.js +2 -2
- package/dist/Tracks/Track.cjs +1 -1
- package/dist/Tracks/Track.js +2 -2
- package/dist/hooks/useOffset.cjs +1 -1
- package/dist/hooks/useOffset.d.ts +1 -1
- package/dist/hooks/useOffset.js +76 -63
- package/docs/debug.vue +1 -2
- package/docs/editable.vue +3 -4
- package/docs/handle.vue +11 -5
- package/docs/marks.vue +20 -10
- package/docs/multiple.vue +1 -5
- package/docs/range.vue +25 -12
- package/docs/sliderDemo.vue +33 -17
- package/docs/vertical.vue +25 -12
- package/package.json +1 -1
- package/src/Handles/Handle.tsx +10 -1
- package/src/Handles/index.tsx +10 -2
- package/src/Slider.tsx +17 -8
- package/src/Tracks/Track.tsx +2 -2
- package/src/hooks/useOffset.ts +48 -40
package/docs/handle.vue
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import type { CSSProperties } from 'vue'
|
|
3
3
|
import Slider from '@v-c/slider'
|
|
4
|
+
import { ref } from 'vue'
|
|
4
5
|
import TooltipSlider, { HandleRender } from './TooltipSlider.tsx'
|
|
5
6
|
|
|
7
|
+
const data1 = ref(3)
|
|
8
|
+
const data2 = ref(3)
|
|
9
|
+
const data3 = ref(20)
|
|
10
|
+
const data4 = ref([3, 10])
|
|
11
|
+
const data5 = ref(3)
|
|
6
12
|
const wrapperStyle: CSSProperties = {
|
|
7
13
|
width: '400px',
|
|
8
14
|
margin: '50px',
|
|
@@ -13,29 +19,29 @@ const wrapperStyle: CSSProperties = {
|
|
|
13
19
|
<div>
|
|
14
20
|
<div :style="wrapperStyle">
|
|
15
21
|
<p>Slider with custom handle</p>
|
|
16
|
-
<Slider :
|
|
22
|
+
<Slider v-model:value="data1" :min="0" :max="20" :handle-render="HandleRender" />
|
|
17
23
|
</div>
|
|
18
24
|
<div :style="wrapperStyle">
|
|
19
25
|
<p>Reversed Slider with custom handle</p>
|
|
20
|
-
<Slider :min="0" :max="20" reverse :
|
|
26
|
+
<Slider v-model:value="data2" :min="0" :max="20" reverse :handle-render="HandleRender" />
|
|
21
27
|
</div>
|
|
22
28
|
<div :style="wrapperStyle">
|
|
23
29
|
<p>Slider with fixed values</p>
|
|
24
|
-
<Slider :
|
|
30
|
+
<Slider v-model:value="data3" :min="20" :marks="{ 20: 20, 40: 40, 100: 100 }" :step="null" />
|
|
25
31
|
</div>
|
|
26
32
|
<div :style="wrapperStyle">
|
|
27
33
|
<p>Range with custom tooltip</p>
|
|
28
34
|
<TooltipSlider
|
|
35
|
+
v-model:value="data4"
|
|
29
36
|
range
|
|
30
37
|
:min="0"
|
|
31
38
|
:max="20"
|
|
32
|
-
:default-value="[3, 10]"
|
|
33
39
|
:tip-formatter="(value) => (`${value}!`)"
|
|
34
40
|
/>
|
|
35
41
|
</div>
|
|
36
42
|
<div :style="wrapperStyle">
|
|
37
43
|
<p>Keyboard events disabled</p>
|
|
38
|
-
<Slider :
|
|
44
|
+
<Slider v-model:value="data5" :keyboard="false" />
|
|
39
45
|
</div>
|
|
40
46
|
</div>
|
|
41
47
|
</template>
|
package/docs/marks.vue
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import type { CSSProperties } from 'vue'
|
|
3
3
|
import Slider from '@v-c/slider'
|
|
4
|
+
import { ref } from 'vue'
|
|
5
|
+
|
|
6
|
+
const data1 = ref(20)
|
|
7
|
+
const data2 = ref([-10, 0])
|
|
8
|
+
const data3 = ref(20)
|
|
9
|
+
const data4 = ref(20)
|
|
10
|
+
const data5 = ref(20)
|
|
11
|
+
const data6 = ref(20)
|
|
12
|
+
const data7 = ref([20, 25, 35, 40])
|
|
13
|
+
const data8 = ref([20, 40])
|
|
4
14
|
|
|
5
15
|
const style: CSSProperties = {
|
|
6
16
|
width: '400px',
|
|
@@ -21,8 +31,8 @@ const marks = {
|
|
|
21
31
|
},
|
|
22
32
|
}
|
|
23
33
|
|
|
24
|
-
function log(value) {
|
|
25
|
-
console.log(value)
|
|
34
|
+
function log(value: unknown) {
|
|
35
|
+
console.log(value)
|
|
26
36
|
}
|
|
27
37
|
</script>
|
|
28
38
|
|
|
@@ -31,10 +41,10 @@ function log(value) {
|
|
|
31
41
|
<div :style="style">
|
|
32
42
|
<p>Slider with marks, `step=null`</p>
|
|
33
43
|
<Slider
|
|
44
|
+
v-model:value="data1"
|
|
34
45
|
:min="-10"
|
|
35
46
|
:marks="marks"
|
|
36
47
|
:step="null"
|
|
37
|
-
:default-value="20"
|
|
38
48
|
@change="log"
|
|
39
49
|
@change-complete="(v) => console.log('AfterChange', v)"
|
|
40
50
|
>
|
|
@@ -52,11 +62,11 @@ function log(value) {
|
|
|
52
62
|
<div :style="style">
|
|
53
63
|
<p>Range Slider with marks, `step=null`, pushable, draggableTrack</p>
|
|
54
64
|
<Slider
|
|
65
|
+
v-model:value="data2"
|
|
55
66
|
range
|
|
56
67
|
:min="-10"
|
|
57
68
|
:marks="marks"
|
|
58
69
|
:step="null"
|
|
59
|
-
:default-value="[-10, 0]"
|
|
60
70
|
:allow-cross="false"
|
|
61
71
|
pushable
|
|
62
72
|
@change="log"
|
|
@@ -66,29 +76,29 @@ function log(value) {
|
|
|
66
76
|
|
|
67
77
|
<div :style="style">
|
|
68
78
|
<p>Slider with marks and steps</p>
|
|
69
|
-
<Slider dots :min="-10" :marks="marks" :step="10"
|
|
79
|
+
<Slider v-model:value="data3" dots :min="-10" :marks="marks" :step="10" @change="log" />
|
|
70
80
|
</div>
|
|
71
81
|
<div :style="style">
|
|
72
82
|
<p>Reversed Slider with marks and steps</p>
|
|
73
|
-
<Slider dots reverse :min="-10" :marks="marks" :step="10"
|
|
83
|
+
<Slider v-model:value="data4" dots reverse :min="-10" :marks="marks" :step="10" @change="log" />
|
|
74
84
|
</div>
|
|
75
85
|
|
|
76
86
|
<div :style="style">
|
|
77
87
|
<p>Slider with marks, `included=false`</p>
|
|
78
|
-
<Slider :min="-10" :marks="marks" :included="false"
|
|
88
|
+
<Slider v-model:value="data5" :min="-10" :marks="marks" :included="false" />
|
|
79
89
|
</div>
|
|
80
90
|
<div :style="style">
|
|
81
91
|
<p>Slider with marks and steps, `included=false`</p>
|
|
82
|
-
<Slider :min="-10" :marks="marks" :step="10" :included="false"
|
|
92
|
+
<Slider v-model:value="data6" :min="-10" :marks="marks" :step="10" :included="false" />
|
|
83
93
|
</div>
|
|
84
94
|
|
|
85
95
|
<div :style="style">
|
|
86
96
|
<p>Range with marks</p>
|
|
87
|
-
<Slider range :min="-10" :marks="marks"
|
|
97
|
+
<Slider v-model:value="data7" range :min="-10" :marks="marks" @change="log" />
|
|
88
98
|
</div>
|
|
89
99
|
<div :style="style">
|
|
90
100
|
<p>Range with marks and steps</p>
|
|
91
|
-
<Slider range :min="-10" :marks="marks" :step="10"
|
|
101
|
+
<Slider v-model:value="data8" range :min="-10" :marks="marks" :step="10" @change="log" />
|
|
92
102
|
</div>
|
|
93
103
|
</div>
|
|
94
104
|
</template>
|
package/docs/multiple.vue
CHANGED
|
@@ -8,10 +8,6 @@ const style: CSSProperties = {
|
|
|
8
8
|
margin: '50px',
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
// const NodeWrapper = ({ children }: { children: React.ReactElement }) => {
|
|
12
|
-
// return <div>{React.cloneElement(children, {}, <div>TOOLTIP</div>)}</div>;
|
|
13
|
-
// };
|
|
14
|
-
|
|
15
11
|
function NodeWrapper(props: any): VNode {
|
|
16
12
|
return h('div', {}, [
|
|
17
13
|
h('slot', {}, { default: () => props.node }),
|
|
@@ -28,10 +24,10 @@ const state = ref([0, 50, 80])
|
|
|
28
24
|
<div>
|
|
29
25
|
<div :style="style">
|
|
30
26
|
<Slider
|
|
27
|
+
v-model:value="state"
|
|
31
28
|
range
|
|
32
29
|
:min="0"
|
|
33
30
|
:max="100"
|
|
34
|
-
:value="state"
|
|
35
31
|
:styles="{
|
|
36
32
|
tracks: {
|
|
37
33
|
background: `linear-gradient(to right, blue, red)`,
|
package/docs/range.vue
CHANGED
|
@@ -3,6 +3,19 @@ import type { CSSProperties } from 'vue'
|
|
|
3
3
|
import Slider from '@v-c/slider'
|
|
4
4
|
import { reactive, ref } from 'vue'
|
|
5
5
|
|
|
6
|
+
const data1 = ref([0, 20])
|
|
7
|
+
const data2 = ref([0, 20])
|
|
8
|
+
const data3 = ref([20, 20])
|
|
9
|
+
const data4 = ref([20, 40])
|
|
10
|
+
const data5 = ref([0, 20])
|
|
11
|
+
const data6 = ref([20, 40, 60, 80])
|
|
12
|
+
const data7 = ref([20, 40, 60, 80])
|
|
13
|
+
const data10 = ref([20, 50])
|
|
14
|
+
const data11 = ref([20, 40, 60, 80])
|
|
15
|
+
const data12 = ref([0, 40])
|
|
16
|
+
const data13 = ref([0, 40])
|
|
17
|
+
const data14 = ref([0, 20, 30, 40, 50])
|
|
18
|
+
|
|
6
19
|
const style: CSSProperties = {
|
|
7
20
|
width: '400px',
|
|
8
21
|
margin: '50px',
|
|
@@ -82,23 +95,23 @@ function handlePureRenderRangeChange(value: any) {
|
|
|
82
95
|
<div>
|
|
83
96
|
<div :style="style">
|
|
84
97
|
<p>Basic Range,`allowCross=false`</p>
|
|
85
|
-
<Slider range :allow-cross="false"
|
|
98
|
+
<Slider v-model:value="data1" range :allow-cross="false" @change="log" />
|
|
86
99
|
</div>
|
|
87
100
|
<div :style="style">
|
|
88
101
|
<p>Basic reverse Range`</p>
|
|
89
|
-
<Slider range :allow-cross="false"
|
|
102
|
+
<Slider v-model:value="data2" range :allow-cross="false" reverse @change="log" />
|
|
90
103
|
</div>
|
|
91
104
|
<div :style="style">
|
|
92
105
|
<p>Basic Range,`step=20` </p>
|
|
93
|
-
<Slider
|
|
106
|
+
<Slider v-model:value="data3" range :step="20" @before-change="log" />
|
|
94
107
|
</div>
|
|
95
108
|
<div :style="style">
|
|
96
109
|
<p>Basic Range,`step=20, dots` </p>
|
|
97
|
-
<Slider range dots :step="20"
|
|
110
|
+
<Slider v-model:value="data4" range dots :step="20" @change-complete="log" />
|
|
98
111
|
</div>
|
|
99
112
|
<div :style="style">
|
|
100
113
|
<p>Basic Range,disabled</p>
|
|
101
|
-
<Slider range :allow-cross="false"
|
|
114
|
+
<Slider v-model:value="data5" range :allow-cross="false" disabled @change="log" />
|
|
102
115
|
</div>
|
|
103
116
|
<div :style="style">
|
|
104
117
|
<p>Controlled Range</p>
|
|
@@ -125,14 +138,14 @@ function handlePureRenderRangeChange(value: any) {
|
|
|
125
138
|
</div>
|
|
126
139
|
<div :style="style">
|
|
127
140
|
<p>Multi Range, count=3 and pushable=true</p>
|
|
128
|
-
<Slider
|
|
141
|
+
<Slider v-model:value="data6" range :count="3" pushable />
|
|
129
142
|
</div>
|
|
130
143
|
<div :style="style">
|
|
131
144
|
<p>Multi Range with custom track and handle style and pushable</p>
|
|
132
145
|
<Slider
|
|
146
|
+
v-model:value="data7"
|
|
133
147
|
range
|
|
134
148
|
:count="3"
|
|
135
|
-
:default-value="[20, 40, 60, 80]"
|
|
136
149
|
pushable
|
|
137
150
|
:track-style="[{ backgroundColor: 'red' }, { backgroundColor: 'green' }]"
|
|
138
151
|
:handle-style="[{ backgroundColor: 'yellow' }, { backgroundColor: 'gray' }]"
|
|
@@ -167,8 +180,8 @@ function handlePureRenderRangeChange(value: any) {
|
|
|
167
180
|
<br>
|
|
168
181
|
<br>
|
|
169
182
|
<Slider
|
|
183
|
+
v-model:value="data10"
|
|
170
184
|
range
|
|
171
|
-
:default-value="[20, 50]"
|
|
172
185
|
:min="dynamicBounds.min"
|
|
173
186
|
:max="dynamicBounds.max"
|
|
174
187
|
@change="onDynamicSliderChange"
|
|
@@ -178,32 +191,32 @@ function handlePureRenderRangeChange(value: any) {
|
|
|
178
191
|
<div :style="style">
|
|
179
192
|
<p>Range as child component</p>
|
|
180
193
|
<Slider
|
|
194
|
+
v-model:value="data11"
|
|
181
195
|
range
|
|
182
|
-
:default-value="[20, 40, 60, 80]"
|
|
183
196
|
:allow-cross="false"
|
|
184
197
|
@change="handlePureRenderRangeChange"
|
|
185
198
|
/>
|
|
186
199
|
</div>
|
|
187
200
|
<div :style="style">
|
|
188
201
|
<p>draggableTrack two points</p>
|
|
189
|
-
<Slider :range="{ draggableTrack: true }" :allow-cross="false"
|
|
202
|
+
<Slider v-model:value="data12" :range="{ draggableTrack: true }" :allow-cross="false" @change="log" />
|
|
190
203
|
</div>
|
|
191
204
|
<div :style="style">
|
|
192
205
|
<p>draggableTrack two points(reverse)</p>
|
|
193
206
|
<Slider
|
|
207
|
+
v-model:value="data13"
|
|
194
208
|
:range="{ draggableTrack: true }"
|
|
195
209
|
:allow-cross="false"
|
|
196
210
|
reverse
|
|
197
|
-
:default-value="[0, 40]"
|
|
198
211
|
@change="log"
|
|
199
212
|
/>
|
|
200
213
|
</div>
|
|
201
214
|
<div :style="style">
|
|
202
215
|
<p>draggableTrack multiple points</p>
|
|
203
216
|
<Slider
|
|
217
|
+
v-model:value="data14"
|
|
204
218
|
:range="{ draggableTrack: true }"
|
|
205
219
|
:allow-cross="false"
|
|
206
|
-
:default-value="[0, 20, 30, 40, 50]"
|
|
207
220
|
@change="log"
|
|
208
221
|
/>
|
|
209
222
|
</div>
|
package/docs/sliderDemo.vue
CHANGED
|
@@ -80,6 +80,22 @@ function onDynamicStepChange(e: any) {
|
|
|
80
80
|
dynamicStep.value = +e.target.value || 1
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
+
// 新增的data refs用于替换default-value
|
|
84
|
+
const data1 = ref(50)
|
|
85
|
+
const data2 = ref(100)
|
|
86
|
+
const data3 = ref(100)
|
|
87
|
+
const data4 = ref(30)
|
|
88
|
+
|
|
89
|
+
const data5 = ref(50)
|
|
90
|
+
const data6 = ref(30)
|
|
91
|
+
const data7 = ref(30)
|
|
92
|
+
const data8 = ref(30)
|
|
93
|
+
const data9 = ref(50)
|
|
94
|
+
const data10 = ref(null)
|
|
95
|
+
const data11 = ref(null)
|
|
96
|
+
const data12 = ref(20)
|
|
97
|
+
const data13 = ref(0)
|
|
98
|
+
|
|
83
99
|
const labelStyle = { minWidth: '60px', display: 'inline-block' }
|
|
84
100
|
const inputStyle = { marginBottom: '10px' }
|
|
85
101
|
</script>
|
|
@@ -88,33 +104,33 @@ const inputStyle = { marginBottom: '10px' }
|
|
|
88
104
|
<div>
|
|
89
105
|
<div :style="style">
|
|
90
106
|
<p>Basic Slider</p>
|
|
91
|
-
<Slider @change="log" />
|
|
107
|
+
<Slider v-model:value="data5" @change="log" />
|
|
92
108
|
</div>
|
|
93
109
|
<div :style="style">
|
|
94
110
|
<p>Basic Slider, `startPoint=50`</p>
|
|
95
|
-
<Slider :start-point="50" @change="log" />
|
|
111
|
+
<Slider v-model:value="data9" :start-point="50" @change="log" />
|
|
96
112
|
</div>
|
|
97
113
|
<div :style="style">
|
|
98
114
|
<p>Slider reverse</p>
|
|
99
|
-
<Slider reverse :min="20" :max="60" @change="log" />
|
|
115
|
+
<Slider v-model:value="data13" reverse :min="20" :max="60" @change="log" />
|
|
100
116
|
</div>
|
|
101
117
|
<div :style="style">
|
|
102
118
|
<p>Basic Slider,`step=20`</p>
|
|
103
|
-
<Slider :
|
|
119
|
+
<Slider v-model:value="data1" :step="20" @before-change="log" />
|
|
104
120
|
</div>
|
|
105
121
|
<div :style="style">
|
|
106
122
|
<p>Basic Slider,`step=20, dots`</p>
|
|
107
|
-
<Slider
|
|
123
|
+
<Slider v-model:value="data2" dots :step="20" @change-complete="log" />
|
|
108
124
|
</div>
|
|
109
125
|
<div :style="style">
|
|
110
126
|
<p>
|
|
111
|
-
Basic Slider,`step=20, dots, dotStyle={"borderColor: 'orange'"}, activeDotStyle=
|
|
112
|
-
{"borderColor: 'yellow'"}`
|
|
127
|
+
Basic Slider,`step=20, dots, dotStyle={"borderColor: 'orange'"}, activeDotStyle= {"borderColor: 'yellow'"}`
|
|
113
128
|
</p>
|
|
129
|
+
/>
|
|
114
130
|
<Slider
|
|
131
|
+
v-model:value="data3"
|
|
115
132
|
dots
|
|
116
133
|
:step="20"
|
|
117
|
-
:default-value="100"
|
|
118
134
|
:dot-style="{ borderColor: 'orange' }"
|
|
119
135
|
:active-dot-style="{ borderColor: 'yellow' }"
|
|
120
136
|
@change-complete="log"
|
|
@@ -133,7 +149,7 @@ const inputStyle = { marginBottom: '10px' }
|
|
|
133
149
|
Slider with custom handle and track style.<strong>(old api, will be deprecated)</strong>
|
|
134
150
|
</p>
|
|
135
151
|
<Slider
|
|
136
|
-
:
|
|
152
|
+
v-model:value="data4"
|
|
137
153
|
:rail-style="{ backgroundColor: 'red', height: 10 }"
|
|
138
154
|
:track-style="{ backgroundColor: 'blue', height: 10 }"
|
|
139
155
|
:handle-style="{
|
|
@@ -151,7 +167,7 @@ const inputStyle = { marginBottom: '10px' }
|
|
|
151
167
|
Slider with custom handle and track style.<strong>(The recommended new api)</strong>
|
|
152
168
|
</p>
|
|
153
169
|
<Slider
|
|
154
|
-
:
|
|
170
|
+
v-model:value="data6"
|
|
155
171
|
:track-style="{ backgroundColor: 'blue', height: 10 }"
|
|
156
172
|
:handle-style="{
|
|
157
173
|
borderColor: 'blue',
|
|
@@ -170,7 +186,7 @@ const inputStyle = { marginBottom: '10px' }
|
|
|
170
186
|
<strong>(The recommended new api)</strong>
|
|
171
187
|
</p>
|
|
172
188
|
<Slider
|
|
173
|
-
:
|
|
189
|
+
v-model:value="data4"
|
|
174
190
|
:track-style="{ backgroundColor: 'blue', height: 10 }"
|
|
175
191
|
reverse
|
|
176
192
|
:handle-style="{
|
|
@@ -186,16 +202,16 @@ const inputStyle = { marginBottom: '10px' }
|
|
|
186
202
|
</div>
|
|
187
203
|
<div :style="style">
|
|
188
204
|
<p>Basic Slider, disabled</p>
|
|
189
|
-
<Slider disabled @change="log" />
|
|
205
|
+
<Slider v-model:value="data12" disabled @change="log" />
|
|
190
206
|
</div>
|
|
191
207
|
<div :style="style">
|
|
192
208
|
<p>Controlled Slider</p>
|
|
193
|
-
<Slider :value="
|
|
209
|
+
<Slider v-model:value="data5" />
|
|
194
210
|
</div>
|
|
195
211
|
<div :style="style">
|
|
196
212
|
<p>Customized Slider</p>
|
|
197
213
|
<Slider
|
|
198
|
-
:value="customizedValue"
|
|
214
|
+
v-model:value="customizedValue"
|
|
199
215
|
@change="onCustomizedSliderChange"
|
|
200
216
|
@change-complete="onCustomizedSliderAfterChange"
|
|
201
217
|
/>
|
|
@@ -204,7 +220,7 @@ const inputStyle = { marginBottom: '10px' }
|
|
|
204
220
|
<p>Slider with null value and reset button</p>
|
|
205
221
|
<div>
|
|
206
222
|
<Slider
|
|
207
|
-
:value="nullableSliderValue"
|
|
223
|
+
v-model:value="nullableSliderValue"
|
|
208
224
|
@change="onNullableSliderChange"
|
|
209
225
|
@change-complete="onNullableSliderAfterChange"
|
|
210
226
|
/>
|
|
@@ -216,7 +232,7 @@ const inputStyle = { marginBottom: '10px' }
|
|
|
216
232
|
<div :style="style">
|
|
217
233
|
<p>Range Slider with null value and reset button</p>
|
|
218
234
|
<div>
|
|
219
|
-
<Slider
|
|
235
|
+
<Slider v-model:value="nullableRangeValue" range @change="setNullableRangeValue" />
|
|
220
236
|
<button type="button" @click="resetNullableRange">
|
|
221
237
|
Reset
|
|
222
238
|
</button>
|
|
@@ -255,7 +271,7 @@ const inputStyle = { marginBottom: '10px' }
|
|
|
255
271
|
<br>
|
|
256
272
|
<br>
|
|
257
273
|
<Slider
|
|
258
|
-
:value="dynamicValue"
|
|
274
|
+
v-model:value="dynamicValue"
|
|
259
275
|
:min="dynamicMin"
|
|
260
276
|
:max="dynamicMax"
|
|
261
277
|
:step="dynamicStep"
|
package/docs/vertical.vue
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import type { CSSProperties } from 'vue'
|
|
3
3
|
import Slider from '@v-c/slider'
|
|
4
|
+
import { ref } from 'vue'
|
|
4
5
|
|
|
5
6
|
const style: CSSProperties = {
|
|
6
7
|
float: 'left',
|
|
@@ -28,8 +29,20 @@ const marks = {
|
|
|
28
29
|
},
|
|
29
30
|
}
|
|
30
31
|
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
// 创建响应式数据
|
|
33
|
+
const data1 = ref(20)
|
|
34
|
+
const data2 = ref(20)
|
|
35
|
+
const data3 = ref(20)
|
|
36
|
+
const data4 = ref(20)
|
|
37
|
+
const data5 = ref(20)
|
|
38
|
+
const data6 = ref(20)
|
|
39
|
+
const data7 = ref([20, 40])
|
|
40
|
+
const data8 = ref([20, 40])
|
|
41
|
+
const data9 = ref([20, 40])
|
|
42
|
+
const data10 = ref([20, 40])
|
|
43
|
+
|
|
44
|
+
function log(value: unknown) {
|
|
45
|
+
console.log(value)
|
|
33
46
|
}
|
|
34
47
|
</script>
|
|
35
48
|
|
|
@@ -37,80 +50,80 @@ function log(value) {
|
|
|
37
50
|
<div :style="parentStyle">
|
|
38
51
|
<div :style="style">
|
|
39
52
|
<p>Slider with marks, `step=null`</p>
|
|
40
|
-
<Slider vertical :min="-10" :marks="marks" :step="null"
|
|
53
|
+
<Slider v-model:value="data1" vertical :min="-10" :marks="marks" :step="null" @change="log" />
|
|
41
54
|
</div>
|
|
42
55
|
<div :style="style">
|
|
43
56
|
<p>Slider with marks, `step=null` and `startPoint=0`</p>
|
|
44
57
|
<Slider
|
|
58
|
+
v-model:value="data2"
|
|
45
59
|
vertical
|
|
46
60
|
:min="-10"
|
|
47
61
|
:start-point="0"
|
|
48
62
|
:marks="marks"
|
|
49
63
|
:step="null"
|
|
50
|
-
:default-value="20"
|
|
51
64
|
@change="log"
|
|
52
65
|
/>
|
|
53
66
|
</div>
|
|
54
67
|
<div :style="style">
|
|
55
68
|
<p>Reverse Slider with marks, `step=null`</p>
|
|
56
69
|
<Slider
|
|
70
|
+
v-model:value="data3"
|
|
57
71
|
vertical
|
|
58
72
|
:min="-10"
|
|
59
73
|
:marks="marks"
|
|
60
74
|
:step="null"
|
|
61
|
-
:default-value="20"
|
|
62
75
|
reverse
|
|
63
76
|
@change="log"
|
|
64
77
|
/>
|
|
65
78
|
</div>
|
|
66
79
|
<div :style="style">
|
|
67
80
|
<p>Slider with marks and steps</p>
|
|
68
|
-
<Slider vertical dots :min="-10" :marks="marks" :step="10"
|
|
81
|
+
<Slider v-model:value="data4" vertical dots :min="-10" :marks="marks" :step="10" @change="log" />
|
|
69
82
|
</div>
|
|
70
83
|
<div :style="style">
|
|
71
84
|
<p>Slider with marks, `included=false`</p>
|
|
72
|
-
<Slider vertical :min="-10" :marks="marks" :included="false"
|
|
85
|
+
<Slider v-model:value="data5" vertical :min="-10" :marks="marks" :included="false" />
|
|
73
86
|
</div>
|
|
74
87
|
<div :style="style">
|
|
75
88
|
<p>Slider with marks and steps, `included=false`</p>
|
|
76
|
-
<Slider vertical :min="-10" :marks="marks" :step="10" :included="false"
|
|
89
|
+
<Slider v-model:value="data6" vertical :min="-10" :marks="marks" :step="10" :included="false" />
|
|
77
90
|
</div>
|
|
78
91
|
<div :style="style">
|
|
79
92
|
<p>Range with marks</p>
|
|
80
|
-
<Slider range vertical :min="-10" :marks="marks"
|
|
93
|
+
<Slider v-model:value="data7" range vertical :min="-10" :marks="marks" @change="log" />
|
|
81
94
|
</div>
|
|
82
95
|
<div :style="style">
|
|
83
96
|
<p>Range with marks and steps</p>
|
|
84
97
|
<Slider
|
|
98
|
+
v-model:value="data8"
|
|
85
99
|
range
|
|
86
100
|
vertical
|
|
87
101
|
:min="-10"
|
|
88
102
|
:marks="marks"
|
|
89
103
|
:step="10"
|
|
90
|
-
:default-value="[20, 40]"
|
|
91
104
|
@change="log"
|
|
92
105
|
/>
|
|
93
106
|
</div>
|
|
94
107
|
<div :style="style">
|
|
95
108
|
<p>Range with marks and draggableTrack</p>
|
|
96
109
|
<Slider
|
|
110
|
+
v-model:value="data9"
|
|
97
111
|
:range="{ draggableTrack: true }"
|
|
98
112
|
vertical
|
|
99
113
|
:min="-10"
|
|
100
114
|
:marks="marks"
|
|
101
|
-
:default-value="[20, 40]"
|
|
102
115
|
@change="log"
|
|
103
116
|
/>
|
|
104
117
|
</div>
|
|
105
118
|
<div :style="style">
|
|
106
119
|
<p>Range with marks and draggableTrack(reverse)</p>
|
|
107
120
|
<Slider
|
|
121
|
+
v-model:value="data10"
|
|
108
122
|
:range="{ draggableTrack: true }"
|
|
109
123
|
vertical
|
|
110
124
|
reverse
|
|
111
125
|
:min="-10"
|
|
112
126
|
:marks="marks"
|
|
113
|
-
:default-value="[20, 40]"
|
|
114
127
|
@change="log"
|
|
115
128
|
/>
|
|
116
129
|
</div>
|
package/package.json
CHANGED
package/src/Handles/Handle.tsx
CHANGED
|
@@ -6,6 +6,15 @@ import { defineComponent, ref } from 'vue'
|
|
|
6
6
|
import { useInjectSlider } from '../context'
|
|
7
7
|
import { getDirectionStyle, getIndex } from '../util'
|
|
8
8
|
|
|
9
|
+
export interface RenderProps {
|
|
10
|
+
index: number
|
|
11
|
+
prefixCls: string
|
|
12
|
+
value: number
|
|
13
|
+
dragging: boolean
|
|
14
|
+
draggingDelete: boolean
|
|
15
|
+
node: any
|
|
16
|
+
}
|
|
17
|
+
|
|
9
18
|
export default defineComponent({
|
|
10
19
|
name: 'Handle',
|
|
11
20
|
props: {
|
|
@@ -19,7 +28,7 @@ export default defineComponent({
|
|
|
19
28
|
onOffsetChange: { type: Function as PropType<(value: number | 'min' | 'max', valueIndex: number) => void>, required: true },
|
|
20
29
|
onFocus: { type: Function as PropType<(e: FocusEvent, index: number) => void>, required: true },
|
|
21
30
|
onMouseenter: { type: Function as PropType<(e: MouseEvent, index: number) => void>, required: true },
|
|
22
|
-
render: Function,
|
|
31
|
+
render: { type: Function as PropType<(v: RenderProps) => any> },
|
|
23
32
|
onChangeComplete: Function as PropType<() => void>,
|
|
24
33
|
mock: Boolean,
|
|
25
34
|
classNames: Object as PropType<SliderClassNames>,
|
package/src/Handles/index.tsx
CHANGED
|
@@ -4,6 +4,14 @@ import { defineComponent, ref } from 'vue'
|
|
|
4
4
|
import { getIndex } from '../util'
|
|
5
5
|
import Handle from './Handle'
|
|
6
6
|
|
|
7
|
+
export interface RenderProps {
|
|
8
|
+
index: number
|
|
9
|
+
prefixCls: string
|
|
10
|
+
value: number
|
|
11
|
+
dragging: boolean
|
|
12
|
+
draggingDelete: boolean
|
|
13
|
+
node: any
|
|
14
|
+
}
|
|
7
15
|
export interface HandlesRef {
|
|
8
16
|
focus: (index: number) => void
|
|
9
17
|
hideHelp: VoidFunction
|
|
@@ -20,8 +28,8 @@ export default defineComponent({
|
|
|
20
28
|
onFocus: { type: Function as PropType<(e: FocusEvent) => void> },
|
|
21
29
|
onBlur: { type: Function as PropType<(e: FocusEvent) => void> },
|
|
22
30
|
onDelete: { type: Function as PropType<(index: number) => void>, required: true },
|
|
23
|
-
handleRender: Function,
|
|
24
|
-
activeHandleRender: Function,
|
|
31
|
+
handleRender: { type: Function as PropType<(props: RenderProps) => any> },
|
|
32
|
+
activeHandleRender: { type: Function as PropType<(props: RenderProps) => any> },
|
|
25
33
|
draggingIndex: { type: Number, default: -1 },
|
|
26
34
|
draggingDelete: { type: Boolean, default: false },
|
|
27
35
|
onChangeComplete: Function as PropType<() => void>,
|
package/src/Slider.tsx
CHANGED
|
@@ -30,6 +30,15 @@ export interface RangeConfig {
|
|
|
30
30
|
maxCount?: number
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
export interface RenderProps {
|
|
34
|
+
index: number
|
|
35
|
+
prefixCls: string
|
|
36
|
+
value: number
|
|
37
|
+
dragging: boolean
|
|
38
|
+
draggingDelete: boolean
|
|
39
|
+
node: any
|
|
40
|
+
}
|
|
41
|
+
|
|
33
42
|
type ValueType = number | number[]
|
|
34
43
|
|
|
35
44
|
function sliderProps() {
|
|
@@ -44,8 +53,8 @@ function sliderProps() {
|
|
|
44
53
|
autoFocus: Boolean,
|
|
45
54
|
min: { type: Number, default: 0 },
|
|
46
55
|
max: { type: Number, default: 100 },
|
|
47
|
-
step: { type: Number, default: 1 },
|
|
48
|
-
value: [Number, Array] as PropType<ValueType>,
|
|
56
|
+
step: { type: [Number, null], default: 1 },
|
|
57
|
+
value: [Number, Array, null] as PropType<ValueType | null>,
|
|
49
58
|
defaultValue: [Number, Array] as PropType<ValueType>,
|
|
50
59
|
range: [Boolean, Object] as PropType<boolean | RangeConfig>,
|
|
51
60
|
count: Number,
|
|
@@ -62,8 +71,8 @@ function sliderProps() {
|
|
|
62
71
|
activeDotStyle: [Object, Function] as PropType<Record<string, any> | ((dotValue: number) => Record<string, any>)>,
|
|
63
72
|
marks: Object as PropType<Record<string | number, any | MarkObj>>,
|
|
64
73
|
dots: Boolean,
|
|
65
|
-
handleRender: Function
|
|
66
|
-
activeHandleRender: Function
|
|
74
|
+
handleRender: Function as PropType<(props: RenderProps) => any>,
|
|
75
|
+
activeHandleRender: Function as PropType<(props: RenderProps) => any>,
|
|
67
76
|
track: { type: Boolean, default: true },
|
|
68
77
|
tabIndex: { type: [Number, Array] as PropType<ValueType>, default: 0 },
|
|
69
78
|
ariaLabelForHandle: [String, Array] as PropType<string | string[]>,
|
|
@@ -94,7 +103,7 @@ export default defineComponent({
|
|
|
94
103
|
},
|
|
95
104
|
emits: ['focus', 'blur', 'change', 'beforeChange', 'afterChange', 'changeComplete'],
|
|
96
105
|
slots: Object as SlotsType<{
|
|
97
|
-
mark: ({ point: number, label: unknown }) => any
|
|
106
|
+
mark: ({ point, label }: { point: number, label: unknown }) => any
|
|
98
107
|
}>,
|
|
99
108
|
setup(props, { attrs, emit, expose, slots }) {
|
|
100
109
|
const handlesRef = ref<HandlesRef>()
|
|
@@ -112,10 +121,10 @@ export default defineComponent({
|
|
|
112
121
|
|
|
113
122
|
const mergedMin = shallowRef(0)
|
|
114
123
|
const mergedMax = shallowRef(100)
|
|
115
|
-
const mergedStep = shallowRef(1)
|
|
124
|
+
const mergedStep = shallowRef<number | null>(1)
|
|
116
125
|
const markList = ref<InternalMarkObj[]>([])
|
|
117
126
|
|
|
118
|
-
const mergedValue = ref<ValueType>(props.defaultValue! || props.value!)
|
|
127
|
+
const mergedValue = ref<ValueType | null>(props.defaultValue! || props.value!)
|
|
119
128
|
const rawValues = ref<number[] | ComputedRef<number[]>>([])
|
|
120
129
|
const getRange = ref()
|
|
121
130
|
const getOffset = ref()
|
|
@@ -210,7 +219,7 @@ export default defineComponent({
|
|
|
210
219
|
: [mergedValue.value]
|
|
211
220
|
|
|
212
221
|
const [val0 = mergedMin.value] = valueList
|
|
213
|
-
let returnValues = mergedValue.value === null ? [] : [val0]
|
|
222
|
+
let returnValues: number[] = mergedValue.value === null ? [] : [val0]
|
|
214
223
|
|
|
215
224
|
// Format as range
|
|
216
225
|
if (rangeEnabled) {
|