@v-c/slider 1.0.0 → 1.0.1
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/Slider.cjs +1 -1
- package/dist/Slider.d.ts +35 -10
- package/dist/Slider.js +52 -44
- package/package.json +1 -1
- package/src/Slider.tsx +14 -4
package/dist/Slider.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a=require("vue"),oe=require("@v-c/util/dist/isEqual"),P=require("@v-c/util/dist/warning"),J=require("classnames"),se=require("./context.cjs"),ce=require("./Handles/index.cjs"),ie=require("./hooks/useDrag.cjs"),de=require("./hooks/useOffset.cjs"),fe=require("./hooks/useRange.cjs"),ve=require("./Marks/index.cjs"),ge=require("./Steps/index.cjs"),be=require("./Tracks/index.cjs");function he(){return{prefixCls:{type:String,default:"vc-slider"},className:String,classNames:Object,styles:Object,id:String,disabled:{type:Boolean,default:!1},keyboard:{type:Boolean,default:!0},autoFocus:Boolean,min:{type:Number,default:0},max:{type:Number,default:100},step:{type:Number,default:1},value:[Number,Array],defaultValue:[Number,Array],range:[Boolean,Object],count:Number,allowCross:{type:Boolean,default:!0},pushable:{type:[Boolean,Number],default:!1},reverse:Boolean,vertical:Boolean,included:{type:Boolean,default:!0},startPoint:Number,trackStyle:[Object,Array],handleStyle:[Object,Array],railStyle:Object,dotStyle:[Object,Function],activeDotStyle:[Object,Function],marks:Object,dots:Boolean,handleRender:Function,activeHandleRender:Function,track:{type:Boolean,default:!0},tabIndex:{type:[Number,Array],default:0},ariaLabelForHandle:[String,Array],ariaLabelledByForHandle:[String,Array],ariaRequired:Boolean,ariaValueTextFormatterForHandle:[Function,Array]}}const me=a.defineComponent({name:"Slider",props:{...he()},emits:["focus","blur","change","beforeChange","afterChange","changeComplete"],setup(t,{attrs:$,emit:f,expose:K}){const C=a.ref(),R=a.ref(),E=a.shallowRef("ltr");a.watch([()=>t.reverse,()=>t.vertical],([e,l])=>{l?E.value=e?"ttb":"btt":E.value=e?"rtl":"ltr"},{immediate:!0});const b=a.shallowRef(0),V=a.shallowRef(100),p=a.shallowRef(1),
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a=require("vue"),oe=require("@v-c/util/dist/isEqual"),P=require("@v-c/util/dist/warning"),J=require("classnames"),se=require("./context.cjs"),ce=require("./Handles/index.cjs"),ie=require("./hooks/useDrag.cjs"),de=require("./hooks/useOffset.cjs"),fe=require("./hooks/useRange.cjs"),ve=require("./Marks/index.cjs"),ge=require("./Steps/index.cjs"),be=require("./Tracks/index.cjs");function he(){return{prefixCls:{type:String,default:"vc-slider"},className:String,classNames:Object,styles:Object,id:String,disabled:{type:Boolean,default:!1},keyboard:{type:Boolean,default:!0},autoFocus:Boolean,min:{type:Number,default:0},max:{type:Number,default:100},step:{type:Number,default:1},value:[Number,Array],defaultValue:[Number,Array],range:[Boolean,Object],count:Number,allowCross:{type:Boolean,default:!0},pushable:{type:[Boolean,Number],default:!1},reverse:Boolean,vertical:Boolean,included:{type:Boolean,default:!0},startPoint:Number,trackStyle:[Object,Array],handleStyle:[Object,Array],railStyle:Object,dotStyle:[Object,Function],activeDotStyle:[Object,Function],marks:Object,dots:Boolean,handleRender:Function,activeHandleRender:Function,track:{type:Boolean,default:!0},tabIndex:{type:[Number,Array],default:0},ariaLabelForHandle:[String,Array],ariaLabelledByForHandle:[String,Array],ariaRequired:Boolean,ariaValueTextFormatterForHandle:[Function,Array],onFocus:Function,onBlur:Function,onChange:Function,onBeforeChange:Function,onAfterChange:Function,onChangeComplete:Function}}const me=a.defineComponent({name:"Slider",props:{...he()},emits:["focus","blur","change","beforeChange","afterChange","changeComplete"],setup(t,{attrs:$,emit:f,expose:K}){const C=a.ref(),R=a.ref(),E=a.shallowRef("ltr");a.watch([()=>t.reverse,()=>t.vertical],([e,l])=>{l?E.value=e?"ttb":"btt":E.value=e?"rtl":"ltr"},{immediate:!0});const b=a.shallowRef(0),V=a.shallowRef(100),p=a.shallowRef(1),B=a.ref([]),x=a.ref(t.defaultValue||t.value),u=a.ref([]),o=a.ref(),F=a.ref();a.watchEffect(()=>{const{range:e,min:l,max:n,step:s,pushable:i,marks:h,allowCross:S,value:v,count:g}=t,[c,m,H,j,I]=fe.default(e);o.value={rangeEnabled:c,rangeEditable:m,rangeDraggableTrack:H,minCount:j,maxCount:I},b.value=isFinite(l)?l:0,V.value=isFinite(n)?n:100,p.value=s!==null&&s<=0?1:s;const M=a.computed(()=>typeof i=="boolean"?i?p.value:!1:i>=0?i:!1);B.value=Object.keys(h||{}).map(y=>{const d=h?.[y],r={value:Number(y)};return d&&typeof d=="object"&&!a.isVNode(d)&&("label"in d||"style"in d)?(r.style=d.style,r.label=d.label):r.label=d,r}).filter(({label:y})=>y||typeof y=="number").sort((y,d)=>y.value-d.value);const[A,O]=de.default(b.value,V.value,p.value,B.value,S,M.value);F.value={formatValue:A,offsetValues:O},v!==void 0&&(x.value=v);const re=a.computed(()=>{const y=x.value===null||x.value===void 0?[]:Array.isArray(x.value)?x.value:[x.value],[d=b.value]=y;let r=x.value===null?[]:[d];if(c){if(r=[...y],g||x.value===void 0){const N=g>=0?g+1:2;for(r=r.slice(0,N);r.length<N;)r.push(r[r.length-1]??b.value)}r.sort((N,T)=>N-T)}return r.forEach((N,T)=>{r[T]=A(N)}),r});u.value=re.value});const k=e=>o.value.rangeEnabled?e:e[0],q=e=>{const l=[...e].sort((n,s)=>n-s);oe(l,u.value,!0)||f("change",k(l)),x.value=l},L=e=>{e&&C.value?.hideHelp();const l=k(u.value);t.onAfterChange&&(f("afterChange",l),P(!1,"[vc-slider] `onAfterChange` is deprecated. Please use `onChangeComplete` instead.")),f("changeComplete",l)},Q=e=>{if(t.disabled||!o.value.rangeEditable||u.value.length<=o.value.minCount)return;const l=[...u.value];l.splice(e,1),f("beforeChange",k(l)),q(l);const n=Math.max(0,e-1);C.value?.hideHelp(),C.value?.focus(n)},[_,U,W,z,X]=ie.default(R,E,u,b,V,F.value.formatValue,q,L,F.value.offsetValues,o.value.rangeEditable,o.value.minCount),Y=(e,l)=>{if(!t.disabled){const n=[...u.value];let s=0,i=0,h=V.value-b.value;u.value.forEach((g,c)=>{const m=Math.abs(e-g);m<=h&&(h=m,s=c),g<e&&(i=c)});let S=s;o.value.rangeEditable&&h!==0&&(!o.value.maxCount||u.value.length<o.value.maxCount)?(n.splice(i+1,0,e),S=i+1):n[s]=e,o.value.rangeEnabled&&!u.value.length&&t.count===void 0&&n.push(e);const v=k(n);f("beforeChange",v),q(n),l?(document.activeElement?.blur?.(),C.value?.focus(S),X(l,S,n)):(t.onAfterChange&&(f("afterChange",v),P(!1,"[vc-slider] `onAfterChange` is deprecated. Please use `onChangeComplete` instead.")),f("changeComplete",v))}},Z=e=>{e.preventDefault();const{width:l,height:n,left:s,top:i,bottom:h,right:S}=R.value.getBoundingClientRect(),{clientX:v,clientY:g}=e;let c;switch(E.value){case"btt":c=(h-g)/n;break;case"ttb":c=(g-i)/n;break;case"rtl":c=(S-v)/l;break;default:c=(v-s)/l}const m=b.value+c*(V.value-b.value);console.log("click",m,F.value.formatValue(m)),Y(F.value.formatValue(m),e)},w=a.ref(null),ee=(e,l)=>{if(!t.disabled){const n=F.value.offsetValues(u.value,e,l);f("beforeChange",k(u.value)),q(n.values),w.value=n.value}};a.watchEffect(()=>{if(w.value!==null){const e=u.value.indexOf(w.value);e>=0&&C.value?.focus(e)}w.value=null});const ae=a.computed(()=>o.value.rangeDraggableTrack&&p.value===null?(process.env.NODE_ENV!=="production"&&P(!1,"`draggableTrack` is not supported when `step` is `null`."),!1):o.value.rangeDraggableTrack),G=(e,l)=>{console.log("onStartMove-valueIndex",l),X(e,l),f("beforeChange",k(u.value))},le=a.computed(()=>_.value!==-1);a.watchEffect(()=>{if(!le.value){const e=u.value.lastIndexOf(U.value);C.value?.focus(e)}});const D=a.computed(()=>[...z.value].sort((e,l)=>e-l)),[te,ne]=a.computed(()=>o.value.rangeEnabled?[D.value[0],D.value[D.value.length-1]]:[b.value,D.value[0]]).value;K({focus:()=>{C.value?.focus(0)},blur:()=>{const{activeElement:e}=document;R.value?.contains(e)&&e?.blur()}}),a.watchEffect(()=>{t.autoFocus&&C.value?.focus(0)});const ue=a.computed(()=>({min:b,max:V,direction:E,disabled:t.disabled,keyboard:t.keyboard,step:p,included:t.included,includedStart:te,includedEnd:ne,range:o.value.rangeEnabled,tabIndex:t.tabIndex,ariaLabelForHandle:t.ariaLabelForHandle,ariaLabelledByForHandle:t.ariaLabelledByForHandle,ariaRequired:t.ariaRequired,ariaValueTextFormatterForHandle:t.ariaValueTextFormatterForHandle,styles:t.styles||{},classNames:t.classNames||{}}));return se.useProviderSliderContext(ue.value),()=>{const{prefixCls:e="vc-slider",id:l,disabled:n=!1,vertical:s,startPoint:i,trackStyle:h,handleStyle:S,railStyle:v,dotStyle:g,activeDotStyle:c,dots:m,handleRender:H,activeHandleRender:j,track:I,classNames:M,styles:A}=t;return a.createVNode("div",{ref:R,class:J(e,[$.class],{[`${e}-disabled`]:n,[`${e}-vertical`]:s,[`${e}-horizontal`]:!s,[`${e}-with-marks`]:B.value.length}),style:$.style,onMousedown:Z,id:l},[a.createVNode("div",{class:J(`${e}-rail`,M?.rail),style:{...v,...A?.rail}},null),I&&a.createVNode(be.default,{prefixCls:e,trackStyle:h,values:u.value,startPoint:i,onStartMove:ae.value?G:void 0},null),a.createVNode(ge.default,{prefixCls:e,marks:B.value,dots:m,style:g,activeStyle:c},null),a.createVNode(ce.default,{ref:C,prefixCls:e,handleStyle:S,values:z.value,draggingIndex:_.value,draggingDelete:W.value,onStartMove:G,onOffsetChange:ee,onFocus:O=>f("focus",O),onBlur:O=>f("blur",O),handleRender:H,activeHandleRender:j,onChangeComplete:L,onDelete:o.value.rangeEditable?Q:()=>{}},null),a.createVNode(ve.default,{prefixCls:e,marks:B.value,onClick:Y},null)])}}});exports.default=me;
|
package/dist/Slider.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export interface RangeConfig {
|
|
|
9
9
|
/** Set max count when `editable` */
|
|
10
10
|
maxCount?: number;
|
|
11
11
|
}
|
|
12
|
+
type ValueType = number | number[];
|
|
12
13
|
declare function sliderProps(): {
|
|
13
14
|
prefixCls: {
|
|
14
15
|
type: StringConstructor;
|
|
@@ -39,8 +40,8 @@ declare function sliderProps(): {
|
|
|
39
40
|
type: NumberConstructor;
|
|
40
41
|
default: number;
|
|
41
42
|
};
|
|
42
|
-
value: PropType<
|
|
43
|
-
defaultValue: PropType<
|
|
43
|
+
value: PropType<ValueType>;
|
|
44
|
+
defaultValue: PropType<ValueType>;
|
|
44
45
|
range: PropType<boolean | RangeConfig>;
|
|
45
46
|
count: NumberConstructor;
|
|
46
47
|
allowCross: {
|
|
@@ -72,13 +73,21 @@ declare function sliderProps(): {
|
|
|
72
73
|
default: boolean;
|
|
73
74
|
};
|
|
74
75
|
tabIndex: {
|
|
75
|
-
type: PropType<
|
|
76
|
+
type: PropType<ValueType>;
|
|
76
77
|
default: number;
|
|
77
78
|
};
|
|
78
79
|
ariaLabelForHandle: PropType<string | string[]>;
|
|
79
80
|
ariaLabelledByForHandle: PropType<string | string[]>;
|
|
80
81
|
ariaRequired: BooleanConstructor;
|
|
81
82
|
ariaValueTextFormatterForHandle: PropType<AriaValueFormat | AriaValueFormat[]>;
|
|
83
|
+
onFocus: PropType<(e: FocusEvent) => void>;
|
|
84
|
+
onBlur: PropType<(e: FocusEvent) => void>;
|
|
85
|
+
onChange: PropType<(value: ValueType) => void>;
|
|
86
|
+
/** @deprecated It's always better to use `onChange` instead */
|
|
87
|
+
onBeforeChange: PropType<(value: ValueType) => void>;
|
|
88
|
+
/** @deprecated Use `onChangeComplete` instead */
|
|
89
|
+
onAfterChange: PropType<(value: ValueType) => void>;
|
|
90
|
+
onChangeComplete: PropType<(value: ValueType) => void>;
|
|
82
91
|
};
|
|
83
92
|
export type SliderProps = Partial<ExtractPropTypes<ReturnType<typeof sliderProps>>>;
|
|
84
93
|
export interface SliderRef {
|
|
@@ -115,8 +124,8 @@ declare const _default: import('vue').DefineComponent<ExtractPropTypes<{
|
|
|
115
124
|
type: NumberConstructor;
|
|
116
125
|
default: number;
|
|
117
126
|
};
|
|
118
|
-
value: PropType<
|
|
119
|
-
defaultValue: PropType<
|
|
127
|
+
value: PropType<ValueType>;
|
|
128
|
+
defaultValue: PropType<ValueType>;
|
|
120
129
|
range: PropType<boolean | RangeConfig>;
|
|
121
130
|
count: NumberConstructor;
|
|
122
131
|
allowCross: {
|
|
@@ -148,13 +157,21 @@ declare const _default: import('vue').DefineComponent<ExtractPropTypes<{
|
|
|
148
157
|
default: boolean;
|
|
149
158
|
};
|
|
150
159
|
tabIndex: {
|
|
151
|
-
type: PropType<
|
|
160
|
+
type: PropType<ValueType>;
|
|
152
161
|
default: number;
|
|
153
162
|
};
|
|
154
163
|
ariaLabelForHandle: PropType<string | string[]>;
|
|
155
164
|
ariaLabelledByForHandle: PropType<string | string[]>;
|
|
156
165
|
ariaRequired: BooleanConstructor;
|
|
157
166
|
ariaValueTextFormatterForHandle: PropType<AriaValueFormat | AriaValueFormat[]>;
|
|
167
|
+
onFocus: PropType<(e: FocusEvent) => void>;
|
|
168
|
+
onBlur: PropType<(e: FocusEvent) => void>;
|
|
169
|
+
onChange: PropType<(value: ValueType) => void>;
|
|
170
|
+
/** @deprecated It's always better to use `onChange` instead */
|
|
171
|
+
onBeforeChange: PropType<(value: ValueType) => void>;
|
|
172
|
+
/** @deprecated Use `onChangeComplete` instead */
|
|
173
|
+
onAfterChange: PropType<(value: ValueType) => void>;
|
|
174
|
+
onChangeComplete: PropType<(value: ValueType) => void>;
|
|
158
175
|
}>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("focus" | "changeComplete" | "blur" | "change" | "beforeChange" | "afterChange")[], "focus" | "changeComplete" | "blur" | "change" | "beforeChange" | "afterChange", import('vue').PublicProps, Readonly<ExtractPropTypes<{
|
|
159
176
|
prefixCls: {
|
|
160
177
|
type: StringConstructor;
|
|
@@ -185,8 +202,8 @@ declare const _default: import('vue').DefineComponent<ExtractPropTypes<{
|
|
|
185
202
|
type: NumberConstructor;
|
|
186
203
|
default: number;
|
|
187
204
|
};
|
|
188
|
-
value: PropType<
|
|
189
|
-
defaultValue: PropType<
|
|
205
|
+
value: PropType<ValueType>;
|
|
206
|
+
defaultValue: PropType<ValueType>;
|
|
190
207
|
range: PropType<boolean | RangeConfig>;
|
|
191
208
|
count: NumberConstructor;
|
|
192
209
|
allowCross: {
|
|
@@ -218,13 +235,21 @@ declare const _default: import('vue').DefineComponent<ExtractPropTypes<{
|
|
|
218
235
|
default: boolean;
|
|
219
236
|
};
|
|
220
237
|
tabIndex: {
|
|
221
|
-
type: PropType<
|
|
238
|
+
type: PropType<ValueType>;
|
|
222
239
|
default: number;
|
|
223
240
|
};
|
|
224
241
|
ariaLabelForHandle: PropType<string | string[]>;
|
|
225
242
|
ariaLabelledByForHandle: PropType<string | string[]>;
|
|
226
243
|
ariaRequired: BooleanConstructor;
|
|
227
244
|
ariaValueTextFormatterForHandle: PropType<AriaValueFormat | AriaValueFormat[]>;
|
|
245
|
+
onFocus: PropType<(e: FocusEvent) => void>;
|
|
246
|
+
onBlur: PropType<(e: FocusEvent) => void>;
|
|
247
|
+
onChange: PropType<(value: ValueType) => void>;
|
|
248
|
+
/** @deprecated It's always better to use `onChange` instead */
|
|
249
|
+
onBeforeChange: PropType<(value: ValueType) => void>;
|
|
250
|
+
/** @deprecated Use `onChangeComplete` instead */
|
|
251
|
+
onAfterChange: PropType<(value: ValueType) => void>;
|
|
252
|
+
onChangeComplete: PropType<(value: ValueType) => void>;
|
|
228
253
|
}>> & Readonly<{
|
|
229
254
|
onFocus?: ((...args: any[]) => any) | undefined;
|
|
230
255
|
onChangeComplete?: ((...args: any[]) => any) | undefined;
|
|
@@ -240,7 +265,7 @@ declare const _default: import('vue').DefineComponent<ExtractPropTypes<{
|
|
|
240
265
|
reverse: boolean;
|
|
241
266
|
disabled: boolean;
|
|
242
267
|
keyboard: boolean;
|
|
243
|
-
tabIndex:
|
|
268
|
+
tabIndex: ValueType;
|
|
244
269
|
ariaRequired: boolean;
|
|
245
270
|
vertical: boolean;
|
|
246
271
|
included: boolean;
|
package/dist/Slider.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent as de, ref as
|
|
1
|
+
import { defineComponent as de, ref as F, shallowRef as T, watch as ve, watchEffect as w, computed as S, isVNode as fe, createVNode as B } from "vue";
|
|
2
2
|
import ge from "@v-c/util/dist/isEqual";
|
|
3
3
|
import X from "@v-c/util/dist/warning";
|
|
4
4
|
import W from "classnames";
|
|
@@ -8,9 +8,9 @@ import he from "./hooks/useDrag.js";
|
|
|
8
8
|
import ye from "./hooks/useOffset.js";
|
|
9
9
|
import Ce from "./hooks/useRange.js";
|
|
10
10
|
import xe from "./Marks/index.js";
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
function
|
|
11
|
+
import Fe from "./Steps/index.js";
|
|
12
|
+
import Se from "./Tracks/index.js";
|
|
13
|
+
function ke() {
|
|
14
14
|
return {
|
|
15
15
|
prefixCls: {
|
|
16
16
|
type: String,
|
|
@@ -80,13 +80,21 @@ function pe() {
|
|
|
80
80
|
ariaLabelForHandle: [String, Array],
|
|
81
81
|
ariaLabelledByForHandle: [String, Array],
|
|
82
82
|
ariaRequired: Boolean,
|
|
83
|
-
ariaValueTextFormatterForHandle: [Function, Array]
|
|
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
|
|
84
92
|
};
|
|
85
93
|
}
|
|
86
94
|
const Me = /* @__PURE__ */ de({
|
|
87
95
|
name: "Slider",
|
|
88
96
|
props: {
|
|
89
|
-
...
|
|
97
|
+
...ke()
|
|
90
98
|
},
|
|
91
99
|
emits: ["focus", "blur", "change", "beforeChange", "afterChange", "changeComplete"],
|
|
92
100
|
setup(l, {
|
|
@@ -94,13 +102,13 @@ const Me = /* @__PURE__ */ de({
|
|
|
94
102
|
emit: d,
|
|
95
103
|
expose: Z
|
|
96
104
|
}) {
|
|
97
|
-
const y =
|
|
105
|
+
const y = F(), A = F(), E = T("ltr");
|
|
98
106
|
ve([() => l.reverse, () => l.vertical], ([e, a]) => {
|
|
99
|
-
a ?
|
|
107
|
+
a ? E.value = e ? "ttb" : "btt" : E.value = e ? "rtl" : "ltr";
|
|
100
108
|
}, {
|
|
101
109
|
immediate: !0
|
|
102
110
|
});
|
|
103
|
-
const g = T(0),
|
|
111
|
+
const g = T(0), k = T(100), O = T(1), D = F([]), C = F(l.defaultValue || l.value), n = F([]), r = F(), p = F();
|
|
104
112
|
w(() => {
|
|
105
113
|
const {
|
|
106
114
|
range: e,
|
|
@@ -119,8 +127,8 @@ const Me = /* @__PURE__ */ de({
|
|
|
119
127
|
rangeDraggableTrack: L,
|
|
120
128
|
minCount: P,
|
|
121
129
|
maxCount: $
|
|
122
|
-
}, g.value = isFinite(a) ? a : 0,
|
|
123
|
-
const q =
|
|
130
|
+
}, g.value = isFinite(a) ? a : 0, k.value = isFinite(t) ? t : 100, O.value = o !== null && o <= 0 ? 1 : o;
|
|
131
|
+
const q = S(() => typeof i == "boolean" ? i ? O.value : !1 : i >= 0 ? i : !1);
|
|
124
132
|
D.value = Object.keys(b || {}).map((h) => {
|
|
125
133
|
const c = b?.[h], u = {
|
|
126
134
|
value: Number(h)
|
|
@@ -129,12 +137,12 @@ const Me = /* @__PURE__ */ de({
|
|
|
129
137
|
}).filter(({
|
|
130
138
|
label: h
|
|
131
139
|
}) => h || typeof h == "number").sort((h, c) => h.value - c.value);
|
|
132
|
-
const [M, H] = ye(g.value,
|
|
133
|
-
|
|
140
|
+
const [M, H] = ye(g.value, k.value, O.value, D.value, x, q.value);
|
|
141
|
+
p.value = {
|
|
134
142
|
formatValue: M,
|
|
135
143
|
offsetValues: H
|
|
136
144
|
}, v !== void 0 && (C.value = v);
|
|
137
|
-
const ce =
|
|
145
|
+
const ce = S(() => {
|
|
138
146
|
const h = C.value === null || C.value === void 0 ? [] : Array.isArray(C.value) ? C.value : [C.value], [c = g.value] = h;
|
|
139
147
|
let u = C.value === null ? [] : [c];
|
|
140
148
|
if (s) {
|
|
@@ -151,32 +159,32 @@ const Me = /* @__PURE__ */ de({
|
|
|
151
159
|
});
|
|
152
160
|
n.value = ce.value;
|
|
153
161
|
});
|
|
154
|
-
const
|
|
162
|
+
const V = (e) => r.value.rangeEnabled ? e : e[0], R = (e) => {
|
|
155
163
|
const a = [...e].sort((t, o) => t - o);
|
|
156
|
-
ge(a, n.value, !0) || d("change",
|
|
164
|
+
ge(a, n.value, !0) || d("change", V(a)), C.value = a;
|
|
157
165
|
}, _ = (e) => {
|
|
158
166
|
e && y.value?.hideHelp();
|
|
159
|
-
const a =
|
|
167
|
+
const a = V(n.value);
|
|
160
168
|
l.onAfterChange && (d("afterChange", a), X(!1, "[vc-slider] `onAfterChange` is deprecated. Please use `onChangeComplete` instead.")), d("changeComplete", a);
|
|
161
169
|
}, ee = (e) => {
|
|
162
170
|
if (l.disabled || !r.value.rangeEditable || n.value.length <= r.value.minCount)
|
|
163
171
|
return;
|
|
164
172
|
const a = [...n.value];
|
|
165
|
-
a.splice(e, 1), d("beforeChange",
|
|
173
|
+
a.splice(e, 1), d("beforeChange", V(a)), R(a);
|
|
166
174
|
const t = Math.max(0, e - 1);
|
|
167
175
|
y.value?.hideHelp(), y.value?.focus(t);
|
|
168
|
-
}, [G, ae, le, J, K] = he(
|
|
176
|
+
}, [G, ae, le, J, K] = he(A, E, n, g, k, p.value.formatValue, R, _, p.value.offsetValues, r.value.rangeEditable, r.value.minCount), Q = (e, a) => {
|
|
169
177
|
if (!l.disabled) {
|
|
170
178
|
const t = [...n.value];
|
|
171
|
-
let o = 0, i = 0, b =
|
|
179
|
+
let o = 0, i = 0, b = k.value - g.value;
|
|
172
180
|
n.value.forEach((f, s) => {
|
|
173
181
|
const m = Math.abs(e - f);
|
|
174
182
|
m <= b && (b = m, o = s), f < e && (i = s);
|
|
175
183
|
});
|
|
176
184
|
let x = o;
|
|
177
185
|
r.value.rangeEditable && b !== 0 && (!r.value.maxCount || n.value.length < r.value.maxCount) ? (t.splice(i + 1, 0, e), x = i + 1) : t[o] = e, r.value.rangeEnabled && !n.value.length && l.count === void 0 && t.push(e);
|
|
178
|
-
const v =
|
|
179
|
-
d("beforeChange", v),
|
|
186
|
+
const v = V(t);
|
|
187
|
+
d("beforeChange", v), R(t), a ? (document.activeElement?.blur?.(), y.value?.focus(x), K(a, x, t)) : (l.onAfterChange && (d("afterChange", v), X(!1, "[vc-slider] `onAfterChange` is deprecated. Please use `onChangeComplete` instead.")), d("changeComplete", v));
|
|
180
188
|
}
|
|
181
189
|
}, te = (e) => {
|
|
182
190
|
e.preventDefault();
|
|
@@ -187,12 +195,12 @@ const Me = /* @__PURE__ */ de({
|
|
|
187
195
|
top: i,
|
|
188
196
|
bottom: b,
|
|
189
197
|
right: x
|
|
190
|
-
} =
|
|
198
|
+
} = A.value.getBoundingClientRect(), {
|
|
191
199
|
clientX: v,
|
|
192
200
|
clientY: f
|
|
193
201
|
} = e;
|
|
194
202
|
let s;
|
|
195
|
-
switch (
|
|
203
|
+
switch (E.value) {
|
|
196
204
|
case "btt":
|
|
197
205
|
s = (b - f) / t;
|
|
198
206
|
break;
|
|
@@ -205,12 +213,12 @@ const Me = /* @__PURE__ */ de({
|
|
|
205
213
|
default:
|
|
206
214
|
s = (v - o) / a;
|
|
207
215
|
}
|
|
208
|
-
const m = g.value + s * (
|
|
209
|
-
console.log("click", m,
|
|
210
|
-
}, j =
|
|
216
|
+
const m = g.value + s * (k.value - g.value);
|
|
217
|
+
console.log("click", m, p.value.formatValue(m)), Q(p.value.formatValue(m), e);
|
|
218
|
+
}, j = F(null), ne = (e, a) => {
|
|
211
219
|
if (!l.disabled) {
|
|
212
|
-
const t =
|
|
213
|
-
d("beforeChange",
|
|
220
|
+
const t = p.value.offsetValues(n.value, e, a);
|
|
221
|
+
d("beforeChange", V(n.value)), R(t.values), j.value = t.value;
|
|
214
222
|
}
|
|
215
223
|
};
|
|
216
224
|
w(() => {
|
|
@@ -220,16 +228,16 @@ const Me = /* @__PURE__ */ de({
|
|
|
220
228
|
}
|
|
221
229
|
j.value = null;
|
|
222
230
|
});
|
|
223
|
-
const ue =
|
|
224
|
-
console.log("onStartMove-valueIndex", a), K(e, a), d("beforeChange",
|
|
225
|
-
}, re =
|
|
231
|
+
const ue = S(() => r.value.rangeDraggableTrack && O.value === null ? (process.env.NODE_ENV !== "production" && X(!1, "`draggableTrack` is not supported when `step` is `null`."), !1) : r.value.rangeDraggableTrack), U = (e, a) => {
|
|
232
|
+
console.log("onStartMove-valueIndex", a), K(e, a), d("beforeChange", V(n.value));
|
|
233
|
+
}, re = S(() => G.value !== -1);
|
|
226
234
|
w(() => {
|
|
227
235
|
if (!re.value) {
|
|
228
236
|
const e = n.value.lastIndexOf(ae.value);
|
|
229
237
|
y.value?.focus(e);
|
|
230
238
|
}
|
|
231
239
|
});
|
|
232
|
-
const I =
|
|
240
|
+
const I = S(() => [...J.value].sort((e, a) => e - a)), [oe, se] = S(() => r.value.rangeEnabled ? [I.value[0], I.value[I.value.length - 1]] : [g.value, I.value[0]]).value;
|
|
233
241
|
Z({
|
|
234
242
|
focus: () => {
|
|
235
243
|
y.value?.focus(0);
|
|
@@ -238,15 +246,15 @@ const Me = /* @__PURE__ */ de({
|
|
|
238
246
|
const {
|
|
239
247
|
activeElement: e
|
|
240
248
|
} = document;
|
|
241
|
-
|
|
249
|
+
A.value?.contains(e) && e?.blur();
|
|
242
250
|
}
|
|
243
251
|
}), w(() => {
|
|
244
252
|
l.autoFocus && y.value?.focus(0);
|
|
245
253
|
});
|
|
246
|
-
const ie =
|
|
254
|
+
const ie = S(() => ({
|
|
247
255
|
min: g,
|
|
248
|
-
max:
|
|
249
|
-
direction:
|
|
256
|
+
max: k,
|
|
257
|
+
direction: E,
|
|
250
258
|
disabled: l.disabled,
|
|
251
259
|
keyboard: l.keyboard,
|
|
252
260
|
step: O,
|
|
@@ -285,8 +293,8 @@ const Me = /* @__PURE__ */ de({
|
|
|
285
293
|
classNames: q,
|
|
286
294
|
styles: M
|
|
287
295
|
} = l;
|
|
288
|
-
return
|
|
289
|
-
ref:
|
|
296
|
+
return B("div", {
|
|
297
|
+
ref: A,
|
|
290
298
|
class: W(e, [Y.class], {
|
|
291
299
|
[`${e}-disabled`]: t,
|
|
292
300
|
[`${e}-vertical`]: o,
|
|
@@ -296,25 +304,25 @@ const Me = /* @__PURE__ */ de({
|
|
|
296
304
|
style: Y.style,
|
|
297
305
|
onMousedown: te,
|
|
298
306
|
id: a
|
|
299
|
-
}, [
|
|
307
|
+
}, [B("div", {
|
|
300
308
|
class: W(`${e}-rail`, q?.rail),
|
|
301
309
|
style: {
|
|
302
310
|
...v,
|
|
303
311
|
...M?.rail
|
|
304
312
|
}
|
|
305
|
-
}, null), $ &&
|
|
313
|
+
}, null), $ && B(Se, {
|
|
306
314
|
prefixCls: e,
|
|
307
315
|
trackStyle: b,
|
|
308
316
|
values: n.value,
|
|
309
317
|
startPoint: i,
|
|
310
318
|
onStartMove: ue.value ? U : void 0
|
|
311
|
-
}, null),
|
|
319
|
+
}, null), B(Fe, {
|
|
312
320
|
prefixCls: e,
|
|
313
321
|
marks: D.value,
|
|
314
322
|
dots: m,
|
|
315
323
|
style: f,
|
|
316
324
|
activeStyle: s
|
|
317
|
-
}, null),
|
|
325
|
+
}, null), B(me, {
|
|
318
326
|
ref: y,
|
|
319
327
|
prefixCls: e,
|
|
320
328
|
handleStyle: x,
|
|
@@ -330,7 +338,7 @@ const Me = /* @__PURE__ */ de({
|
|
|
330
338
|
onChangeComplete: _,
|
|
331
339
|
onDelete: r.value.rangeEditable ? ee : () => {
|
|
332
340
|
}
|
|
333
|
-
}, null),
|
|
341
|
+
}, null), B(xe, {
|
|
334
342
|
prefixCls: e,
|
|
335
343
|
marks: D.value,
|
|
336
344
|
onClick: Q
|
package/package.json
CHANGED
package/src/Slider.tsx
CHANGED
|
@@ -30,6 +30,8 @@ export interface RangeConfig {
|
|
|
30
30
|
maxCount?: number
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
type ValueType = number | number[]
|
|
34
|
+
|
|
33
35
|
function sliderProps() {
|
|
34
36
|
return {
|
|
35
37
|
prefixCls: { type: String, default: 'vc-slider' },
|
|
@@ -43,8 +45,8 @@ function sliderProps() {
|
|
|
43
45
|
min: { type: Number, default: 0 },
|
|
44
46
|
max: { type: Number, default: 100 },
|
|
45
47
|
step: { type: Number, default: 1 },
|
|
46
|
-
value: [Number, Array] as PropType<
|
|
47
|
-
defaultValue: [Number, Array] as PropType<
|
|
48
|
+
value: [Number, Array] as PropType<ValueType>,
|
|
49
|
+
defaultValue: [Number, Array] as PropType<ValueType>,
|
|
48
50
|
range: [Boolean, Object] as PropType<boolean | RangeConfig>,
|
|
49
51
|
count: Number,
|
|
50
52
|
allowCross: { type: Boolean, default: true },
|
|
@@ -63,11 +65,19 @@ function sliderProps() {
|
|
|
63
65
|
handleRender: Function,
|
|
64
66
|
activeHandleRender: Function,
|
|
65
67
|
track: { type: Boolean, default: true },
|
|
66
|
-
tabIndex: { type: [Number, Array] as PropType<
|
|
68
|
+
tabIndex: { type: [Number, Array] as PropType<ValueType>, default: 0 },
|
|
67
69
|
ariaLabelForHandle: [String, Array] as PropType<string | string[]>,
|
|
68
70
|
ariaLabelledByForHandle: [String, Array] as PropType<string | string[]>,
|
|
69
71
|
ariaRequired: Boolean,
|
|
70
72
|
ariaValueTextFormatterForHandle: [Function, Array] as PropType<AriaValueFormat | AriaValueFormat[]>,
|
|
73
|
+
onFocus: Function as PropType<(e: FocusEvent) => void>,
|
|
74
|
+
onBlur: Function as PropType<(e: FocusEvent) => void>,
|
|
75
|
+
onChange: Function as PropType<(value: ValueType) => void>,
|
|
76
|
+
/** @deprecated It's always better to use `onChange` instead */
|
|
77
|
+
onBeforeChange: Function as PropType<(value: ValueType) => void>,
|
|
78
|
+
/** @deprecated Use `onChangeComplete` instead */
|
|
79
|
+
onAfterChange: Function as PropType<(value: ValueType) => void>,
|
|
80
|
+
onChangeComplete: Function as PropType<(value: ValueType) => void>,
|
|
71
81
|
}
|
|
72
82
|
}
|
|
73
83
|
export type SliderProps = Partial<ExtractPropTypes<ReturnType<typeof sliderProps>>>
|
|
@@ -102,7 +112,7 @@ export default defineComponent({
|
|
|
102
112
|
const mergedStep = shallowRef(1)
|
|
103
113
|
const markList = ref<InternalMarkObj[]>([])
|
|
104
114
|
|
|
105
|
-
const mergedValue = ref<
|
|
115
|
+
const mergedValue = ref<ValueType>(props.defaultValue! || props.value!)
|
|
106
116
|
const rawValues = ref<number[] | ComputedRef<number[]>>([])
|
|
107
117
|
const getRange = ref()
|
|
108
118
|
const getOffset = ref()
|