@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 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),O=a.ref([]),x=a.ref(t.defaultValue||t.value),u=a.ref([]),o=a.ref(),k=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,A,j,I]=fe.default(e);o.value={rangeEnabled:c,rangeEditable:m,rangeDraggableTrack:A,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);O.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[H,B]=de.default(b.value,V.value,p.value,O.value,S,M.value);k.value={formatValue:H,offsetValues:B},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 F=g>=0?g+1:2;for(r=r.slice(0,F);r.length<F;)r.push(r[r.length-1]??b.value)}r.sort((F,T)=>F-T)}return r.forEach((F,T)=>{r[T]=H(F)}),r});u.value=re.value});const N=e=>o.value.rangeEnabled?e:e[0],q=e=>{const l=[...e].sort((n,s)=>n-s);oe(l,u.value,!0)||f("change",N(l)),x.value=l},L=e=>{e&&C.value?.hideHelp();const l=N(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",N(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,k.value.formatValue,q,L,k.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=N(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,k.value.formatValue(m)),Y(k.value.formatValue(m),e)},w=a.ref(null),ee=(e,l)=>{if(!t.disabled){const n=k.value.offsetValues(u.value,e,l);f("beforeChange",N(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",N(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:A,activeHandleRender:j,track:I,classNames:M,styles:H}=t;return a.createVNode("div",{ref:R,class:J(e,[$.class],{[`${e}-disabled`]:n,[`${e}-vertical`]:s,[`${e}-horizontal`]:!s,[`${e}-with-marks`]:O.value.length}),style:$.style,onMousedown:Z,id:l},[a.createVNode("div",{class:J(`${e}-rail`,M?.rail),style:{...v,...H?.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:O.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:B=>f("focus",B),onBlur:B=>f("blur",B),handleRender:A,activeHandleRender:j,onChangeComplete:L,onDelete:o.value.rangeEditable?Q:()=>{}},null),a.createVNode(ve.default,{prefixCls:e,marks:O.value,onClick:Y},null)])}}});exports.default=me;
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<number | number[]>;
43
- defaultValue: PropType<number | number[]>;
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<number | number[]>;
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<number | number[]>;
119
- defaultValue: PropType<number | number[]>;
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<number | number[]>;
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<number | number[]>;
189
- defaultValue: PropType<number | number[]>;
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<number | number[]>;
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: number | number[];
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 S, shallowRef as T, watch as ve, watchEffect as w, computed as k, isVNode as fe, createVNode as E } from "vue";
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 Se from "./Steps/index.js";
12
- import ke from "./Tracks/index.js";
13
- function pe() {
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
- ...pe()
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 = S(), R = S(), B = T("ltr");
105
+ const y = F(), A = F(), E = T("ltr");
98
106
  ve([() => l.reverse, () => l.vertical], ([e, a]) => {
99
- a ? B.value = e ? "ttb" : "btt" : B.value = e ? "rtl" : "ltr";
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), p = T(100), O = T(1), D = S([]), C = S(l.defaultValue || l.value), n = S([]), r = S(), V = S();
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, p.value = isFinite(t) ? t : 100, O.value = o !== null && o <= 0 ? 1 : o;
123
- const q = k(() => typeof i == "boolean" ? i ? O.value : !1 : i >= 0 ? i : !1);
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, p.value, O.value, D.value, x, q.value);
133
- V.value = {
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 = k(() => {
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 F = (e) => r.value.rangeEnabled ? e : e[0], A = (e) => {
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", F(a)), C.value = a;
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 = F(n.value);
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", F(a)), A(a);
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(R, B, n, g, p, V.value.formatValue, A, _, V.value.offsetValues, r.value.rangeEditable, r.value.minCount), Q = (e, a) => {
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 = p.value - g.value;
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 = F(t);
179
- d("beforeChange", v), A(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));
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
- } = R.value.getBoundingClientRect(), {
198
+ } = A.value.getBoundingClientRect(), {
191
199
  clientX: v,
192
200
  clientY: f
193
201
  } = e;
194
202
  let s;
195
- switch (B.value) {
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 * (p.value - g.value);
209
- console.log("click", m, V.value.formatValue(m)), Q(V.value.formatValue(m), e);
210
- }, j = S(null), ne = (e, a) => {
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 = V.value.offsetValues(n.value, e, a);
213
- d("beforeChange", F(n.value)), A(t.values), j.value = t.value;
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 = k(() => 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) => {
224
- console.log("onStartMove-valueIndex", a), K(e, a), d("beforeChange", F(n.value));
225
- }, re = k(() => G.value !== -1);
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 = k(() => [...J.value].sort((e, a) => e - a)), [oe, se] = k(() => r.value.rangeEnabled ? [I.value[0], I.value[I.value.length - 1]] : [g.value, I.value[0]]).value;
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
- R.value?.contains(e) && e?.blur();
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 = k(() => ({
254
+ const ie = S(() => ({
247
255
  min: g,
248
- max: p,
249
- direction: B,
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 E("div", {
289
- ref: R,
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
- }, [E("div", {
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), $ && E(ke, {
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), E(Se, {
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), E(me, {
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), E(xe, {
341
+ }, null), B(xe, {
334
342
  prefixCls: e,
335
343
  marks: D.value,
336
344
  onClick: Q
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@v-c/slider",
3
3
  "type": "module",
4
- "version": "1.0.0",
4
+ "version": "1.0.1",
5
5
  "description": "",
6
6
  "exports": {
7
7
  ".": {
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<number | number[]>,
47
- defaultValue: [Number, Array] as PropType<number | number[]>,
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<number | number[]>, default: 0 },
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<number | number[]>(props.defaultValue! || props.value!)
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()