@v-c/slider 1.0.3 → 1.0.5

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.
Files changed (76) hide show
  1. package/dist/Handles/Handle.cjs +191 -1
  2. package/dist/Handles/Handle.d.ts +4 -4
  3. package/dist/Handles/Handle.js +187 -204
  4. package/dist/Handles/index.cjs +108 -1
  5. package/dist/Handles/index.d.ts +1 -1
  6. package/dist/Handles/index.js +105 -120
  7. package/dist/Marks/Mark.cjs +51 -1
  8. package/dist/Marks/Mark.d.ts +2 -2
  9. package/dist/Marks/Mark.js +48 -39
  10. package/dist/Marks/index.cjs +39 -1
  11. package/dist/Marks/index.d.ts +2 -2
  12. package/dist/Marks/index.js +36 -32
  13. package/dist/Slider.cjs +557 -1
  14. package/dist/Slider.d.ts +53 -267
  15. package/dist/Slider.js +551 -352
  16. package/dist/Steps/Dot.cjs +52 -1
  17. package/dist/Steps/Dot.d.ts +2 -2
  18. package/dist/Steps/Dot.js +49 -38
  19. package/dist/Steps/index.cjs +64 -1
  20. package/dist/Steps/index.d.ts +2 -2
  21. package/dist/Steps/index.js +61 -41
  22. package/dist/Tracks/Track.cjs +74 -1
  23. package/dist/Tracks/Track.js +70 -81
  24. package/dist/Tracks/index.cjs +70 -1
  25. package/dist/Tracks/index.js +66 -82
  26. package/dist/_virtual/rolldown_runtime.cjs +21 -0
  27. package/dist/context.cjs +39 -1
  28. package/dist/context.d.ts +13 -7
  29. package/dist/context.js +29 -24
  30. package/dist/hooks/useDrag.cjs +160 -1
  31. package/dist/hooks/useDrag.d.ts +2 -2
  32. package/dist/hooks/useDrag.js +155 -86
  33. package/dist/hooks/useOffset.cjs +124 -1
  34. package/dist/hooks/useOffset.d.ts +2 -1
  35. package/dist/hooks/useOffset.js +122 -110
  36. package/dist/hooks/useRange.cjs +21 -1
  37. package/dist/hooks/useRange.js +18 -9
  38. package/dist/index.cjs +6 -1
  39. package/dist/index.d.ts +1 -0
  40. package/dist/index.js +4 -4
  41. package/dist/interface.cjs +0 -1
  42. package/dist/interface.js +0 -1
  43. package/dist/util.cjs +32 -1
  44. package/dist/util.js +27 -26
  45. package/package.json +18 -10
  46. package/docs/TooltipSlider.tsx +0 -94
  47. package/docs/assets/anim.less +0 -63
  48. package/docs/assets/bootstrap.less +0 -163
  49. package/docs/assets/index.less +0 -337
  50. package/docs/debug.vue +0 -59
  51. package/docs/editable.vue +0 -58
  52. package/docs/handle.vue +0 -51
  53. package/docs/marks.vue +0 -104
  54. package/docs/multiple.vue +0 -50
  55. package/docs/range.vue +0 -224
  56. package/docs/slider.stories.vue +0 -45
  57. package/docs/sliderDemo.vue +0 -283
  58. package/docs/vertical.vue +0 -135
  59. package/src/Handles/Handle.tsx +0 -232
  60. package/src/Handles/index.tsx +0 -132
  61. package/src/Marks/Mark.tsx +0 -40
  62. package/src/Marks/index.tsx +0 -40
  63. package/src/Slider.tsx +0 -602
  64. package/src/Steps/Dot.tsx +0 -40
  65. package/src/Steps/index.tsx +0 -54
  66. package/src/Tracks/Track.tsx +0 -89
  67. package/src/Tracks/index.tsx +0 -92
  68. package/src/context.ts +0 -65
  69. package/src/hooks/useDrag.ts +0 -243
  70. package/src/hooks/useOffset.ts +0 -272
  71. package/src/hooks/useRange.ts +0 -24
  72. package/src/index.ts +0 -8
  73. package/src/interface.ts +0 -17
  74. package/src/util.ts +0 -41
  75. package/vite.config.ts +0 -18
  76. package/vitest.config.ts +0 -11
package/dist/Slider.js CHANGED
@@ -1,353 +1,552 @@
1
- import { defineComponent as ve, ref as F, shallowRef as w, watch as fe, watchEffect as M, computed as S, isVNode as ge, createVNode as N } from "vue";
2
- import be from "@v-c/util/dist/isEqual";
3
- import X from "@v-c/util/dist/warning";
4
- import W from "classnames";
5
- import { useProviderSliderContext as me } from "./context.js";
6
- import he from "./Handles/index.js";
7
- import ye from "./hooks/useDrag.js";
8
- import Ce from "./hooks/useOffset.js";
9
- import xe from "./hooks/useRange.js";
10
- import Fe from "./Marks/index.js";
11
- import Se from "./Steps/index.js";
12
- import ke from "./Tracks/index.js";
13
- function pe() {
14
- return {
15
- prefixCls: {
16
- type: String,
17
- default: "vc-slider"
18
- },
19
- className: String,
20
- classNames: Object,
21
- styles: Object,
22
- id: String,
23
- disabled: {
24
- type: Boolean,
25
- default: !1
26
- },
27
- keyboard: {
28
- type: Boolean,
29
- default: !0
30
- },
31
- autoFocus: Boolean,
32
- min: {
33
- type: Number,
34
- default: 0
35
- },
36
- max: {
37
- type: Number,
38
- default: 100
39
- },
40
- step: {
41
- type: [Number, null],
42
- default: 1
43
- },
44
- value: [Number, Array, null],
45
- defaultValue: [Number, Array],
46
- range: [Boolean, Object],
47
- count: Number,
48
- allowCross: {
49
- type: Boolean,
50
- default: !0
51
- },
52
- pushable: {
53
- type: [Boolean, Number],
54
- default: !1
55
- },
56
- reverse: Boolean,
57
- vertical: Boolean,
58
- included: {
59
- type: Boolean,
60
- default: !0
61
- },
62
- startPoint: Number,
63
- trackStyle: [Object, Array],
64
- handleStyle: [Object, Array],
65
- railStyle: Object,
66
- dotStyle: [Object, Function],
67
- activeDotStyle: [Object, Function],
68
- marks: Object,
69
- dots: Boolean,
70
- handleRender: Function,
71
- activeHandleRender: Function,
72
- track: {
73
- type: Boolean,
74
- default: !0
75
- },
76
- tabIndex: {
77
- type: [Number, Array],
78
- default: 0
79
- },
80
- ariaLabelForHandle: [String, Array],
81
- ariaLabelledByForHandle: [String, Array],
82
- ariaRequired: Boolean,
83
- ariaValueTextFormatterForHandle: [Function, Array],
84
- onFocus: Function,
85
- onBlur: Function,
86
- onChange: Function,
87
- /** @deprecated It's always better to use `onChange` instead */
88
- onBeforeChange: Function,
89
- /** @deprecated Use `onChangeComplete` instead */
90
- onAfterChange: Function,
91
- onChangeComplete: Function
92
- };
93
- }
94
- const we = /* @__PURE__ */ ve({
95
- name: "Slider",
96
- props: {
97
- ...pe()
98
- },
99
- emits: ["focus", "blur", "change", "beforeChange", "afterChange", "changeComplete"],
100
- slots: Object,
101
- setup(l, {
102
- attrs: Y,
103
- emit: d,
104
- expose: Z,
105
- slots: ee
106
- }) {
107
- const h = F(), A = F(), B = w("ltr");
108
- fe([() => l.reverse, () => l.vertical], ([e, a]) => {
109
- a ? B.value = e ? "ttb" : "btt" : B.value = e ? "rtl" : "ltr";
110
- }, {
111
- immediate: !0
112
- });
113
- const g = w(0), k = w(100), E = w(1), O = F([]), y = F(l.defaultValue || l.value), n = F([]), r = F(), D = F();
114
- M(() => {
115
- const {
116
- range: e,
117
- min: a,
118
- max: t,
119
- step: o,
120
- pushable: i,
121
- marks: b,
122
- allowCross: C,
123
- value: v,
124
- count: f
125
- } = l, [s, x, L, P, $] = xe(e);
126
- r.value = {
127
- rangeEnabled: s,
128
- rangeEditable: x,
129
- rangeDraggableTrack: L,
130
- minCount: P,
131
- maxCount: $
132
- }, g.value = isFinite(a) ? a : 0, k.value = isFinite(t) ? t : 100, E.value = o !== null && o <= 0 ? 1 : o;
133
- const q = S(() => typeof i == "boolean" ? i ? E.value : !1 : i >= 0 ? i : !1);
134
- O.value = Object.keys(b || {}).map((m) => {
135
- const c = b?.[m], u = {
136
- value: Number(m)
137
- };
138
- return c && typeof c == "object" && !ge(c) && ("label" in c || "style" in c) ? (u.style = c.style, u.label = c.label) : u.label = c, u;
139
- }).filter(({
140
- label: m
141
- }) => m || typeof m == "number").sort((m, c) => m.value - c.value);
142
- const [T, H] = Ce(g.value, k.value, E.value, O.value, C, q.value);
143
- D.value = {
144
- formatValue: T,
145
- offsetValues: H
146
- }, v !== void 0 && (y.value = v);
147
- const de = S(() => {
148
- const m = y.value === null || y.value === void 0 ? [] : Array.isArray(y.value) ? y.value : [y.value], [c = g.value] = m;
149
- let u = y.value === null ? [] : [c];
150
- if (s) {
151
- if (u = [...m], f || y.value === void 0) {
152
- const V = f >= 0 ? f + 1 : 2;
153
- for (u = u.slice(0, V); u.length < V; )
154
- u.push(u[u.length - 1] ?? g.value);
155
- }
156
- u.sort((V, z) => V - z);
157
- }
158
- return u.forEach((V, z) => {
159
- u[z] = T(V);
160
- }), u;
161
- });
162
- n.value = de.value;
163
- });
164
- const p = (e) => r.value.rangeEnabled ? e : e[0], R = (e) => {
165
- const a = [...e].sort((t, o) => t - o);
166
- be(a, n.value, !0) || d("change", p(a)), y.value = a;
167
- }, _ = (e) => {
168
- e && h.value?.hideHelp();
169
- const a = p(n.value);
170
- l.onAfterChange && (d("afterChange", a), X(!1, "[vc-slider] `onAfterChange` is deprecated. Please use `onChangeComplete` instead.")), d("changeComplete", a);
171
- }, ae = (e) => {
172
- if (l.disabled || !r.value.rangeEditable || n.value.length <= r.value.minCount)
173
- return;
174
- const a = [...n.value];
175
- a.splice(e, 1), d("beforeChange", p(a)), R(a);
176
- const t = Math.max(0, e - 1);
177
- h.value?.hideHelp(), h.value?.focus(t);
178
- }, [G, le, te, J, K] = ye(A, B, n, g, k, D.value.formatValue, R, _, D.value.offsetValues, r.value.rangeEditable, r.value.minCount), Q = (e, a) => {
179
- if (!l.disabled) {
180
- const t = [...n.value];
181
- let o = 0, i = 0, b = k.value - g.value;
182
- n.value.forEach((f, s) => {
183
- const x = Math.abs(e - f);
184
- x <= b && (b = x, o = s), f < e && (i = s);
185
- });
186
- let C = o;
187
- r.value.rangeEditable && b !== 0 && (!r.value.maxCount || n.value.length < r.value.maxCount) ? (t.splice(i + 1, 0, e), C = i + 1) : t[o] = e, r.value.rangeEnabled && !n.value.length && l.count === void 0 && t.push(e);
188
- const v = p(t);
189
- d("beforeChange", v), R(t), a ? (document.activeElement?.blur?.(), h.value?.focus(C), K(a, C, t)) : (l.onAfterChange && (d("afterChange", v), X(!1, "[vc-slider] `onAfterChange` is deprecated. Please use `onChangeComplete` instead.")), d("changeComplete", v));
190
- }
191
- }, ne = (e) => {
192
- e.preventDefault();
193
- const {
194
- width: a,
195
- height: t,
196
- left: o,
197
- top: i,
198
- bottom: b,
199
- right: C
200
- } = A.value.getBoundingClientRect(), {
201
- clientX: v,
202
- clientY: f
203
- } = e;
204
- let s;
205
- switch (B.value) {
206
- case "btt":
207
- s = (b - f) / t;
208
- break;
209
- case "ttb":
210
- s = (f - i) / t;
211
- break;
212
- case "rtl":
213
- s = (C - v) / a;
214
- break;
215
- default:
216
- s = (v - o) / a;
217
- }
218
- const x = g.value + s * (k.value - g.value);
219
- Q(D.value.formatValue(x), e);
220
- }, j = F(null), ue = (e, a) => {
221
- if (!l.disabled) {
222
- const t = D.value.offsetValues(n.value, e, a);
223
- d("beforeChange", p(n.value)), R(t.values), j.value = t.value;
224
- }
225
- };
226
- M(() => {
227
- if (j.value !== null) {
228
- const e = n.value.indexOf(j.value);
229
- e >= 0 && h.value?.focus(e);
230
- }
231
- j.value = null;
232
- });
233
- const re = S(() => r.value.rangeDraggableTrack && E.value === null ? (process.env.NODE_ENV !== "production" && X(!1, "`draggableTrack` is not supported when `step` is `null`."), !1) : r.value.rangeDraggableTrack), U = (e, a) => {
234
- K(e, a), d("beforeChange", p(n.value));
235
- }, oe = S(() => G.value !== -1);
236
- M(() => {
237
- if (!oe.value) {
238
- const e = n.value.lastIndexOf(le.value);
239
- h.value?.focus(e);
240
- }
241
- });
242
- const I = S(() => [...J.value].sort((e, a) => e - a)), [se, ie] = S(() => r.value.rangeEnabled ? [I.value[0], I.value[I.value.length - 1]] : [g.value, I.value[0]]).value;
243
- Z({
244
- focus: () => {
245
- h.value?.focus(0);
246
- },
247
- blur: () => {
248
- const {
249
- activeElement: e
250
- } = document;
251
- A.value?.contains(e) && e?.blur();
252
- }
253
- }), M(() => {
254
- l.autoFocus && h.value?.focus(0);
255
- });
256
- const ce = S(() => ({
257
- min: g,
258
- max: k,
259
- direction: B,
260
- disabled: l.disabled,
261
- keyboard: l.keyboard,
262
- step: E,
263
- included: l.included,
264
- includedStart: se,
265
- includedEnd: ie,
266
- range: r.value.rangeEnabled,
267
- tabIndex: l.tabIndex,
268
- ariaLabelForHandle: l.ariaLabelForHandle,
269
- ariaLabelledByForHandle: l.ariaLabelledByForHandle,
270
- ariaRequired: l.ariaRequired,
271
- ariaValueTextFormatterForHandle: l.ariaValueTextFormatterForHandle,
272
- styles: l.styles || {},
273
- classNames: l.classNames || {}
274
- }));
275
- return me(ce.value), () => {
276
- const {
277
- prefixCls: e = "vc-slider",
278
- id: a,
279
- // Status
280
- disabled: t = !1,
281
- vertical: o,
282
- // Style
283
- startPoint: i,
284
- trackStyle: b,
285
- handleStyle: C,
286
- railStyle: v,
287
- dotStyle: f,
288
- activeDotStyle: s,
289
- // Decorations
290
- dots: x,
291
- handleRender: L,
292
- activeHandleRender: P,
293
- // Components
294
- track: $,
295
- classNames: q,
296
- styles: T
297
- } = l;
298
- return N("div", {
299
- ref: A,
300
- class: W(e, [Y.class], {
301
- [`${e}-disabled`]: t,
302
- [`${e}-vertical`]: o,
303
- [`${e}-horizontal`]: !o,
304
- [`${e}-with-marks`]: O.value.length
305
- }),
306
- style: Y.style,
307
- onMousedown: ne,
308
- id: a
309
- }, [N("div", {
310
- class: W(`${e}-rail`, q?.rail),
311
- style: {
312
- ...v,
313
- ...T?.rail
314
- }
315
- }, null), $ && N(ke, {
316
- prefixCls: e,
317
- trackStyle: b,
318
- values: n.value,
319
- startPoint: i,
320
- onStartMove: re.value ? U : void 0
321
- }, null), N(Se, {
322
- prefixCls: e,
323
- marks: O.value,
324
- dots: x,
325
- style: f,
326
- activeStyle: s
327
- }, null), N(he, {
328
- ref: h,
329
- prefixCls: e,
330
- handleStyle: C,
331
- values: J.value,
332
- draggingIndex: G.value,
333
- draggingDelete: te.value,
334
- onStartMove: U,
335
- onOffsetChange: ue,
336
- onFocus: (H) => d("focus", H),
337
- onBlur: (H) => d("blur", H),
338
- handleRender: L,
339
- activeHandleRender: P,
340
- onChangeComplete: _,
341
- onDelete: r.value.rangeEditable ? ae : () => {
342
- }
343
- }, null), N(Fe, {
344
- prefixCls: e,
345
- marks: O.value,
346
- onClick: Q
347
- }, ee)]);
348
- };
349
- }
350
- });
351
- export {
352
- we as default
1
+ import { useProviderSliderContext } from "./context.js";
2
+ import Handles_default from "./Handles/index.js";
3
+ import useDrag_default from "./hooks/useDrag.js";
4
+ import useOffset from "./hooks/useOffset.js";
5
+ import useRange from "./hooks/useRange.js";
6
+ import Marks_default from "./Marks/index.js";
7
+ import Steps_default from "./Steps/index.js";
8
+ import Tracks_default from "./Tracks/index.js";
9
+ import { computed, createVNode, defineComponent, isVNode, mergeDefaults, ref, shallowRef, watch } from "vue";
10
+ import { classNames } from "@v-c/util";
11
+ import isEqual from "@v-c/util/dist/isEqual";
12
+ import warning from "@v-c/util/dist/warning";
13
+ var sliderDefaults = {
14
+ prefixCls: "vc-slider",
15
+ keyboard: true,
16
+ disabled: false,
17
+ min: 0,
18
+ max: 100,
19
+ step: 1,
20
+ allowCross: true,
21
+ pushable: false,
22
+ included: true,
23
+ tabIndex: 0,
24
+ track: true
353
25
  };
26
+ var Slider_default = /* @__PURE__ */ defineComponent((props, { attrs, slots, emit, expose }) => {
27
+ const prefixCls = computed(() => props.prefixCls ?? sliderDefaults.prefixCls);
28
+ const disabled = computed(() => props.disabled ?? sliderDefaults.disabled);
29
+ const keyboard = computed(() => props.keyboard ?? sliderDefaults.keyboard);
30
+ const included = computed(() => props.included ?? sliderDefaults.included);
31
+ const tabIndex = computed(() => props.tabIndex ?? sliderDefaults.tabIndex);
32
+ const allowCross = computed(() => props.allowCross ?? sliderDefaults.allowCross);
33
+ const direction = computed(() => {
34
+ if (props.vertical) return props.reverse ? "ttb" : "btt";
35
+ return props.reverse ? "rtl" : "ltr";
36
+ });
37
+ const rangeConfig = computed(() => {
38
+ const [rangeEnabled$1, rangeEditable$1, rangeDraggableTrack$1, minCount$1, maxCount$1] = useRange(props.range);
39
+ return {
40
+ rangeEnabled: rangeEnabled$1,
41
+ rangeEditable: rangeEditable$1,
42
+ rangeDraggableTrack: rangeDraggableTrack$1,
43
+ minCount: minCount$1,
44
+ maxCount: maxCount$1
45
+ };
46
+ });
47
+ const rangeEnabled = computed(() => rangeConfig.value.rangeEnabled);
48
+ const rangeEditable = computed(() => rangeConfig.value.rangeEditable);
49
+ const rangeDraggableTrack = computed(() => rangeConfig.value.rangeDraggableTrack);
50
+ const minCount = computed(() => rangeConfig.value.minCount ?? 0);
51
+ const maxCount = computed(() => rangeConfig.value.maxCount);
52
+ const mergedMin = computed(() => Number.isFinite(props.min ?? 0) ? props.min ?? 0 : 0);
53
+ const mergedMax = computed(() => Number.isFinite(props.max ?? 100) ? props.max ?? 100 : 100);
54
+ const mergedStep = computed(() => {
55
+ const step = props.step ?? sliderDefaults.step;
56
+ if (step !== null && step <= 0) return 1;
57
+ return step;
58
+ });
59
+ const mergedPush = computed(() => {
60
+ const pushable = props.pushable ?? sliderDefaults.pushable;
61
+ if (typeof pushable === "boolean") return pushable ? mergedStep.value : false;
62
+ return pushable >= 0 ? pushable : false;
63
+ });
64
+ const markList = computed(() => {
65
+ return Object.keys(props.marks || {}).map((key) => {
66
+ const mark = props.marks?.[key];
67
+ const markObj = { value: Number(key) };
68
+ if (mark && typeof mark === "object" && !isVNode(mark) && ("label" in mark || "style" in mark)) {
69
+ markObj.style = mark.style;
70
+ markObj.label = mark.label;
71
+ } else markObj.label = mark;
72
+ return markObj;
73
+ }).filter(({ label }) => label || typeof label === "number").sort((a, b) => a.value - b.value);
74
+ });
75
+ const [formatValue, offsetValues] = useOffset(mergedMin, mergedMax, mergedStep, markList, allowCross, mergedPush);
76
+ const formatValueRef = computed(() => formatValue);
77
+ const offsetValuesRef = computed(() => offsetValues);
78
+ const mergedValue = shallowRef(props.value !== void 0 ? props.value : props.defaultValue);
79
+ watch(() => props.value, (val) => {
80
+ if (val !== void 0) mergedValue.value = val;
81
+ });
82
+ const rawValues = computed(() => {
83
+ const valueList = mergedValue.value === null || mergedValue.value === void 0 ? [] : Array.isArray(mergedValue.value) ? mergedValue.value : [mergedValue.value];
84
+ const [val0 = mergedMin.value] = valueList;
85
+ let returnValues = mergedValue.value === null ? [] : [val0];
86
+ if (rangeEnabled.value) {
87
+ returnValues = [...valueList];
88
+ if (typeof props.count === "number" || mergedValue.value === void 0) {
89
+ const pointCount = typeof props.count === "number" && props.count >= 0 ? props.count + 1 : 2;
90
+ returnValues = returnValues.slice(0, pointCount);
91
+ while (returnValues.length < pointCount) returnValues.push(returnValues[returnValues.length - 1] ?? mergedMin.value);
92
+ }
93
+ returnValues.sort((a, b) => a - b);
94
+ }
95
+ returnValues.forEach((val, index) => {
96
+ returnValues[index] = formatValue(val);
97
+ });
98
+ return returnValues;
99
+ });
100
+ const handlesRef = ref();
101
+ const containerRef = ref();
102
+ const getTriggerValue = (triggerValues) => rangeEnabled.value ? triggerValues : triggerValues[0];
103
+ const triggerChange = (nextValues) => {
104
+ const cloneNextValues = [...nextValues].sort((a, b) => a - b);
105
+ if (!isEqual(cloneNextValues, rawValues.value, true)) {
106
+ const triggerValue = getTriggerValue(cloneNextValues);
107
+ emit("change", triggerValue);
108
+ props.onChange?.(triggerValue);
109
+ }
110
+ mergedValue.value = cloneNextValues;
111
+ };
112
+ const finishChange = (draggingDelete$1) => {
113
+ if (draggingDelete$1) handlesRef.value?.hideHelp();
114
+ const finishValue = getTriggerValue(rawValues.value);
115
+ emit("afterChange", finishValue);
116
+ props.onAfterChange?.(finishValue);
117
+ warning(!props.onAfterChange, "[vc-slider] `onAfterChange` is deprecated. Please use `onChangeComplete` instead.");
118
+ emit("changeComplete", finishValue);
119
+ props.onChangeComplete?.(finishValue);
120
+ };
121
+ const onDelete = (index) => {
122
+ if (disabled.value || !rangeEditable.value || rawValues.value.length <= minCount.value) return;
123
+ const cloneNextValues = [...rawValues.value];
124
+ cloneNextValues.splice(index, 1);
125
+ const triggerValue = getTriggerValue(cloneNextValues);
126
+ emit("beforeChange", triggerValue);
127
+ props.onBeforeChange?.(triggerValue);
128
+ triggerChange(cloneNextValues);
129
+ const nextFocusIndex = Math.max(0, index - 1);
130
+ handlesRef.value?.hideHelp();
131
+ handlesRef.value?.focus(nextFocusIndex);
132
+ };
133
+ const [draggingIndex, draggingValue, draggingDelete, cacheValues, onStartDrag] = useDrag_default(containerRef, direction, rawValues, mergedMin, mergedMax, formatValueRef, triggerChange, finishChange, offsetValuesRef, rangeEditable, minCount);
134
+ const changeToCloseValue = (newValue, e) => {
135
+ if (!disabled.value) {
136
+ const cloneNextValues = [...rawValues.value];
137
+ let valueIndex = 0;
138
+ let valueBeforeIndex = 0;
139
+ let valueDist = mergedMax.value - mergedMin.value;
140
+ rawValues.value.forEach((val, index) => {
141
+ const dist = Math.abs(newValue - val);
142
+ if (dist <= valueDist) {
143
+ valueDist = dist;
144
+ valueIndex = index;
145
+ }
146
+ if (val < newValue) valueBeforeIndex = index;
147
+ });
148
+ let focusIndex = valueIndex;
149
+ if (rangeEditable.value && valueDist !== 0 && (!maxCount.value || rawValues.value.length < maxCount.value)) {
150
+ cloneNextValues.splice(valueBeforeIndex + 1, 0, newValue);
151
+ focusIndex = valueBeforeIndex + 1;
152
+ } else cloneNextValues[valueIndex] = newValue;
153
+ if (rangeEnabled.value && !rawValues.value.length && props.count === void 0) cloneNextValues.push(newValue);
154
+ const nextValue = getTriggerValue(cloneNextValues);
155
+ props.onBeforeChange?.(nextValue);
156
+ triggerChange(cloneNextValues);
157
+ if (e) {
158
+ document.activeElement?.blur?.();
159
+ handlesRef.value?.focus(focusIndex);
160
+ onStartDrag(e, focusIndex, cloneNextValues);
161
+ } else {
162
+ props.onAfterChange?.(nextValue);
163
+ warning(!props.onAfterChange, "[vc-slider] `onAfterChange` is deprecated. Please use `onChangeComplete` instead.");
164
+ emit("changeComplete", nextValue);
165
+ props.onChangeComplete?.(nextValue);
166
+ }
167
+ }
168
+ };
169
+ const onSliderMouseDown = (e) => {
170
+ e.preventDefault();
171
+ const rect = containerRef.value?.getBoundingClientRect();
172
+ if (!rect) return;
173
+ const { width, height, left, top, bottom, right } = rect;
174
+ const { clientX, clientY } = e;
175
+ let percent;
176
+ switch (direction.value) {
177
+ case "btt":
178
+ percent = (bottom - clientY) / height;
179
+ break;
180
+ case "ttb":
181
+ percent = (clientY - top) / height;
182
+ break;
183
+ case "rtl":
184
+ percent = (right - clientX) / width;
185
+ break;
186
+ default: percent = (clientX - left) / width;
187
+ }
188
+ changeToCloseValue(formatValue(mergedMin.value + percent * (mergedMax.value - mergedMin.value)), e);
189
+ };
190
+ const keyboardValue = shallowRef(null);
191
+ const onHandleOffsetChange = (offset, valueIndex) => {
192
+ if (!disabled.value) {
193
+ const next = offsetValues(rawValues.value, offset, valueIndex);
194
+ const currentValue = getTriggerValue(rawValues.value);
195
+ emit("beforeChange", currentValue);
196
+ props.onBeforeChange?.(currentValue);
197
+ triggerChange(next.values);
198
+ keyboardValue.value = next.value;
199
+ }
200
+ };
201
+ watch(keyboardValue, (val) => {
202
+ if (val !== null) {
203
+ const valueIndex = rawValues.value.indexOf(val);
204
+ if (valueIndex >= 0) handlesRef.value?.focus(valueIndex);
205
+ }
206
+ keyboardValue.value = null;
207
+ });
208
+ const mergedDraggableTrack = computed(() => {
209
+ if (rangeDraggableTrack.value && mergedStep.value === null) {
210
+ if (process.env.NODE_ENV !== "production") warning(false, "`draggableTrack` is not supported when `step` is `null`.");
211
+ return false;
212
+ }
213
+ return rangeDraggableTrack.value;
214
+ });
215
+ const onStartMove = (e, valueIndex) => {
216
+ onStartDrag(e, valueIndex);
217
+ const triggerValue = getTriggerValue(rawValues.value);
218
+ emit("beforeChange", triggerValue);
219
+ props.onBeforeChange?.(triggerValue);
220
+ };
221
+ watch(computed(() => draggingIndex.value !== -1), (isDragging) => {
222
+ if (!isDragging && draggingValue.value !== null && draggingValue.value !== void 0) {
223
+ const valueIndex = rawValues.value.lastIndexOf(draggingValue.value);
224
+ if (valueIndex >= 0) handlesRef.value?.focus(valueIndex);
225
+ }
226
+ });
227
+ const sortedCacheValues = computed(() => [...cacheValues.value].sort((a, b) => a - b));
228
+ const includedRange = computed(() => {
229
+ if (!rangeEnabled.value) return [mergedMin.value, sortedCacheValues.value[0] ?? mergedMin.value];
230
+ if (!sortedCacheValues.value.length) return [mergedMin.value, mergedMin.value];
231
+ return [sortedCacheValues.value[0], sortedCacheValues.value[sortedCacheValues.value.length - 1]];
232
+ });
233
+ const includedStart = computed(() => includedRange.value[0]);
234
+ const includedEnd = computed(() => includedRange.value[1]);
235
+ expose({
236
+ focus: () => {
237
+ handlesRef.value?.focus(0);
238
+ },
239
+ blur: () => {
240
+ const { activeElement } = document;
241
+ if (containerRef.value?.contains(activeElement)) activeElement?.blur();
242
+ }
243
+ });
244
+ watch(() => props.autoFocus, (autoFocus) => {
245
+ if (autoFocus) handlesRef.value?.focus(0);
246
+ }, { immediate: true });
247
+ useProviderSliderContext(computed(() => ({
248
+ min: mergedMin.value,
249
+ max: mergedMax.value,
250
+ direction: direction.value,
251
+ disabled: disabled.value,
252
+ keyboard: keyboard.value,
253
+ step: mergedStep.value,
254
+ included: included.value,
255
+ includedStart: includedStart.value,
256
+ includedEnd: includedEnd.value,
257
+ range: rangeEnabled.value,
258
+ tabIndex: tabIndex.value,
259
+ ariaLabelForHandle: props.ariaLabelForHandle,
260
+ ariaLabelledByForHandle: props.ariaLabelledByForHandle,
261
+ ariaRequired: props.ariaRequired,
262
+ ariaValueTextFormatterForHandle: props.ariaValueTextFormatterForHandle,
263
+ styles: props.styles || {},
264
+ classNames: props.classNames || {}
265
+ })));
266
+ return () => {
267
+ const { id, startPoint, trackStyle, handleStyle, railStyle, dotStyle, activeDotStyle, dots, handleRender, activeHandleRender } = props;
268
+ const mergedClassName = classNames(prefixCls.value, props.className, attrs.class, {
269
+ [`${prefixCls.value}-disabled`]: disabled.value,
270
+ [`${prefixCls.value}-vertical`]: props.vertical,
271
+ [`${prefixCls.value}-horizontal`]: !props.vertical,
272
+ [`${prefixCls.value}-with-marks`]: markList.value.length
273
+ });
274
+ const mergedStyle = {
275
+ ...props.style,
276
+ ...attrs.style
277
+ };
278
+ return createVNode("div", {
279
+ "ref": containerRef,
280
+ "class": mergedClassName,
281
+ "style": mergedStyle,
282
+ "onMousedown": onSliderMouseDown,
283
+ "id": id
284
+ }, [
285
+ createVNode("div", {
286
+ "class": classNames(`${prefixCls.value}-rail`, props.classNames?.rail),
287
+ "style": {
288
+ ...railStyle,
289
+ ...props.styles?.rail
290
+ }
291
+ }, null),
292
+ props.track !== false && createVNode(Tracks_default, {
293
+ "prefixCls": prefixCls.value,
294
+ "trackStyle": trackStyle,
295
+ "values": rawValues.value,
296
+ "startPoint": startPoint,
297
+ "onStartMove": mergedDraggableTrack.value ? onStartMove : void 0
298
+ }, null),
299
+ createVNode(Steps_default, {
300
+ "prefixCls": prefixCls.value,
301
+ "marks": markList.value,
302
+ "dots": dots,
303
+ "style": dotStyle,
304
+ "activeStyle": activeDotStyle
305
+ }, null),
306
+ createVNode(Handles_default, {
307
+ "ref": handlesRef,
308
+ "prefixCls": prefixCls.value,
309
+ "handleStyle": handleStyle,
310
+ "values": cacheValues.value,
311
+ "draggingIndex": draggingIndex.value,
312
+ "draggingDelete": draggingDelete.value,
313
+ "onStartMove": onStartMove,
314
+ "onOffsetChange": onHandleOffsetChange,
315
+ "onFocus": (e) => {
316
+ props.onFocus?.(e);
317
+ },
318
+ "onBlur": (e) => {
319
+ props.onBlur?.(e);
320
+ },
321
+ "handleRender": handleRender,
322
+ "activeHandleRender": activeHandleRender,
323
+ "onChangeComplete": finishChange,
324
+ "onDelete": rangeEditable.value ? onDelete : () => {}
325
+ }, null),
326
+ createVNode(Marks_default, {
327
+ "prefixCls": prefixCls.value,
328
+ "marks": markList.value,
329
+ "onClick": changeToCloseValue
330
+ }, slots)
331
+ ]);
332
+ };
333
+ }, { props: /* @__PURE__ */ mergeDefaults({
334
+ prefixCls: {
335
+ type: String,
336
+ required: false,
337
+ default: void 0
338
+ },
339
+ className: {
340
+ type: String,
341
+ required: false,
342
+ default: void 0
343
+ },
344
+ style: {
345
+ type: null,
346
+ required: false,
347
+ default: void 0
348
+ },
349
+ classNames: {
350
+ type: Object,
351
+ required: false,
352
+ default: void 0
353
+ },
354
+ styles: {
355
+ type: Object,
356
+ required: false,
357
+ default: void 0
358
+ },
359
+ id: {
360
+ type: String,
361
+ required: false,
362
+ default: void 0
363
+ },
364
+ disabled: {
365
+ type: Boolean,
366
+ required: false,
367
+ default: void 0
368
+ },
369
+ keyboard: {
370
+ type: Boolean,
371
+ required: false,
372
+ default: void 0
373
+ },
374
+ autoFocus: {
375
+ type: Boolean,
376
+ required: false,
377
+ default: void 0
378
+ },
379
+ onFocus: {
380
+ type: Function,
381
+ required: false,
382
+ default: void 0
383
+ },
384
+ onBlur: {
385
+ type: Function,
386
+ required: false,
387
+ default: void 0
388
+ },
389
+ range: {
390
+ type: [Boolean, Object],
391
+ required: false,
392
+ default: void 0
393
+ },
394
+ count: {
395
+ type: Number,
396
+ required: false,
397
+ default: void 0
398
+ },
399
+ min: {
400
+ type: Number,
401
+ required: false,
402
+ default: void 0
403
+ },
404
+ max: {
405
+ type: Number,
406
+ required: false,
407
+ default: void 0
408
+ },
409
+ step: {
410
+ type: [Number, null],
411
+ required: false,
412
+ default: void 0
413
+ },
414
+ value: {
415
+ type: null,
416
+ required: false,
417
+ default: void 0
418
+ },
419
+ defaultValue: {
420
+ type: null,
421
+ required: false,
422
+ default: void 0
423
+ },
424
+ onChange: {
425
+ type: Function,
426
+ required: false,
427
+ default: void 0
428
+ },
429
+ onBeforeChange: {
430
+ type: Function,
431
+ required: false,
432
+ default: void 0
433
+ },
434
+ onAfterChange: {
435
+ type: Function,
436
+ required: false,
437
+ default: void 0
438
+ },
439
+ onChangeComplete: {
440
+ type: Function,
441
+ required: false,
442
+ default: void 0
443
+ },
444
+ allowCross: {
445
+ type: Boolean,
446
+ required: false,
447
+ default: void 0
448
+ },
449
+ pushable: {
450
+ type: [Boolean, Number],
451
+ required: false,
452
+ default: void 0
453
+ },
454
+ reverse: {
455
+ type: Boolean,
456
+ required: false,
457
+ default: void 0
458
+ },
459
+ vertical: {
460
+ type: Boolean,
461
+ required: false,
462
+ default: void 0
463
+ },
464
+ included: {
465
+ type: Boolean,
466
+ required: false,
467
+ default: void 0
468
+ },
469
+ startPoint: {
470
+ type: Number,
471
+ required: false,
472
+ default: void 0
473
+ },
474
+ trackStyle: {
475
+ type: null,
476
+ required: false,
477
+ default: void 0
478
+ },
479
+ handleStyle: {
480
+ type: null,
481
+ required: false,
482
+ default: void 0
483
+ },
484
+ railStyle: {
485
+ type: null,
486
+ required: false,
487
+ default: void 0
488
+ },
489
+ dotStyle: {
490
+ type: Function,
491
+ required: false,
492
+ skipCheck: true,
493
+ default: void 0
494
+ },
495
+ activeDotStyle: {
496
+ type: Function,
497
+ required: false,
498
+ skipCheck: true,
499
+ default: void 0
500
+ },
501
+ marks: {
502
+ type: Object,
503
+ required: false,
504
+ default: void 0
505
+ },
506
+ dots: {
507
+ type: Boolean,
508
+ required: false,
509
+ default: void 0
510
+ },
511
+ handleRender: {
512
+ type: Function,
513
+ required: false,
514
+ default: void 0
515
+ },
516
+ activeHandleRender: {
517
+ type: Function,
518
+ required: false,
519
+ default: void 0
520
+ },
521
+ track: {
522
+ type: Boolean,
523
+ required: false,
524
+ default: void 0
525
+ },
526
+ tabIndex: {
527
+ type: [Number, Array],
528
+ required: false,
529
+ default: void 0
530
+ },
531
+ ariaLabelForHandle: {
532
+ type: [String, Array],
533
+ required: false,
534
+ default: void 0
535
+ },
536
+ ariaLabelledByForHandle: {
537
+ type: [String, Array],
538
+ required: false,
539
+ default: void 0
540
+ },
541
+ ariaRequired: {
542
+ type: Boolean,
543
+ required: false,
544
+ default: void 0
545
+ },
546
+ ariaValueTextFormatterForHandle: {
547
+ type: [Function, Array],
548
+ required: false,
549
+ default: void 0
550
+ }
551
+ }, sliderDefaults) });
552
+ export { Slider_default as default };