ll-package
Version:
2 lines (1 loc) • 7.54 kB
JavaScript
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const M=require("../../../../@babel/runtime/helpers/esm/extends.js"),S=require("vue"),P=require("../../_util/classNames.js"),h=require("../../_util/vue-types/index.js"),O=require("../../_util/BaseMixin.js"),T=require("../../_util/props-util/index.js"),I=require("./common/Track.js"),G=require("./common/createSlider.js"),p=require("./utils.js"),q=require("../../_util/props-util/initDefaultProps.js"),b=e=>{let{value:t,handle:n,bounds:s,props:a}=e;const{allowCross:r,pushable:o}=a,l=Number(o),i=p.ensureValueInRange(t,a);let u=i;return!r&&n!=null&&s!==void 0&&(n>0&&i<=s[n-1]+l&&(u=s[n-1]+l),n<s.length-1&&i>=s[n+1]-l&&(u=s[n+1]-l)),p.ensureValuePrecision(u,a)},w={defaultValue:h.default.arrayOf(h.default.number),value:h.default.arrayOf(h.default.number),count:Number,pushable:h.withUndefined(h.default.oneOfType([h.default.looseBool,h.default.number])),allowCross:{type:Boolean,default:void 0},disabled:{type:Boolean,default:void 0},reverse:{type:Boolean,default:void 0},tabindex:h.default.arrayOf(h.default.number),prefixCls:String,min:Number,max:Number,autofocus:{type:Boolean,default:void 0},ariaLabelGroupForHandles:Array,ariaLabelledByGroupForHandles:Array,ariaValueTextFormatterGroupForHandles:Array,draggableTrack:{type:Boolean,default:void 0}},L=S.defineComponent({compatConfig:{MODE:3},name:"Range",mixins:[O.default],inheritAttrs:!1,props:q.default(w,{count:1,allowCross:!0,pushable:!1,tabindex:[],draggableTrack:!1,ariaLabelGroupForHandles:[],ariaLabelledByGroupForHandles:[],ariaValueTextFormatterGroupForHandles:[]}),emits:["beforeChange","afterChange","change"],displayName:"Range",data(){const{count:e,min:t,max:n}=this,s=Array(...Array(e+1)).map(()=>t),a=T.hasProp(this,"defaultValue")?this.defaultValue:s;let{value:r}=this;r===void 0&&(r=a);const o=r.map((i,u)=>b({value:i,handle:u,props:this.$props}));return{sHandle:null,recent:o[0]===n?0:o.length-1,bounds:o}},watch:{value:{handler(e){const{bounds:t}=this;this.setChangeValue(e||t)},deep:!0},min(){const{value:e}=this;this.setChangeValue(e||this.bounds)},max(){const{value:e}=this;this.setChangeValue(e||this.bounds)}},methods:{setChangeValue(e){const{bounds:t}=this;let n=e.map((s,a)=>b({value:s,handle:a,bounds:t,props:this.$props}));if(t.length===n.length){if(n.every((s,a)=>s===t[a]))return null}else n=e.map((s,a)=>b({value:s,handle:a,props:this.$props}));if(this.setState({bounds:n}),e.some(s=>p.isValueOutOfRange(s,this.$props))){const s=e.map(a=>p.ensureValueInRange(a,this.$props));this.$emit("change",s)}},onChange(e){if(!T.hasProp(this,"value"))this.setState(e);else{const a={};["sHandle","recent"].forEach(r=>{e[r]!==void 0&&(a[r]=e[r])}),Object.keys(a).length&&this.setState(a)}const s=M.default(M.default({},this.$data),e).bounds;this.$emit("change",s)},positionGetValue(e){const t=this.getValue(),n=this.calcValueByPos(e),s=this.getClosestBound(n),a=this.getBoundNeedMoving(n,s),r=t[a];if(n===r)return null;const o=[...t];return o[a]=n,o},onStart(e){const{bounds:t}=this;this.$emit("beforeChange",t);const n=this.calcValueByPos(e);this.startValue=n,this.startPosition=e;const s=this.getClosestBound(n);this.prevMovedHandleIndex=this.getBoundNeedMoving(n,s),this.setState({sHandle:this.prevMovedHandleIndex,recent:this.prevMovedHandleIndex});const a=t[this.prevMovedHandleIndex];if(n===a)return;const r=[...t];r[this.prevMovedHandleIndex]=n,this.onChange({bounds:r})},onEnd(e){const{sHandle:t}=this;this.removeDocumentEvents(),t||(this.dragTrack=!1),(t!==null||e)&&this.$emit("afterChange",this.bounds),this.setState({sHandle:null})},onMove(e,t,n,s){p.pauseEvent(e);const{$data:a,$props:r}=this,o=r.max||100,l=r.min||0;if(n){let m=r.vertical?-t:t;m=r.reverse?-m:m;const v=o-Math.max(...s),H=l-Math.min(...s),y=Math.min(Math.max(m/(this.getSliderLength()/100),H),v),x=s.map(f=>Math.floor(Math.max(Math.min(f+y,o),l)));a.bounds.map((f,V)=>f===x[V]).some(f=>!f)&&this.onChange({bounds:x});return}const{bounds:i,sHandle:u}=this,d=this.calcValueByPos(t),g=i[u];d!==g&&this.moveTo(d)},onKeyboard(e){const{reverse:t,vertical:n}=this.$props,s=p.getKeyboardValueMutator(e,n,t);if(s){p.pauseEvent(e);const{bounds:a,sHandle:r}=this,o=a[r===null?this.recent:r],l=s(o,this.$props),i=b({value:l,handle:r,bounds:a,props:this.$props});if(i===o)return;this.moveTo(i,!0)}},getClosestBound(e){const{bounds:t}=this;let n=0;for(let s=1;s<t.length-1;s+=1)e>=t[s]&&(n=s);return Math.abs(t[n+1]-e)<Math.abs(t[n]-e)&&(n+=1),n},getBoundNeedMoving(e,t){const{bounds:n,recent:s}=this;let a=t;const r=n[t+1]===n[t];return r&&n[s]===n[t]&&(a=s),r&&e!==n[t+1]&&(a=e<n[t+1]?t:t+1),a},getLowerBound(){return this.bounds[0]},getUpperBound(){const{bounds:e}=this;return e[e.length-1]},getPoints(){const{marks:e,step:t,min:n,max:s}=this,a=this.internalPointsCache;if(!a||a.marks!==e||a.step!==t){const r=M.default({},e);if(t!==null)for(let l=n;l<=s;l+=t)r[l]=l;const o=Object.keys(r).map(parseFloat);o.sort((l,i)=>l-i),this.internalPointsCache={marks:e,step:t,points:o}}return this.internalPointsCache.points},moveTo(e,t){const n=[...this.bounds],{sHandle:s,recent:a}=this,r=s===null?a:s;n[r]=e;let o=r;this.$props.pushable!==!1?this.pushSurroundingHandles(n,o):this.$props.allowCross&&(n.sort((l,i)=>l-i),o=n.indexOf(e)),this.onChange({recent:o,sHandle:o,bounds:n}),t&&(this.$emit("afterChange",n),this.setState({},()=>{this.handlesRefs[o].focus()}),this.onEnd())},pushSurroundingHandles(e,t){const n=e[t],{pushable:s}=this,a=Number(s);let r=0;if(e[t+1]-n<a&&(r=1),n-e[t-1]<a&&(r=-1),r===0)return;const o=t+r,l=r*(e[o]-n);this.pushHandle(e,o,r,a-l)||(e[t]=e[o]-r*a)},pushHandle(e,t,n,s){const a=e[t];let r=e[t];for(;n*(r-a)<s;){if(!this.pushHandleOnePoint(e,t,n))return e[t]=a,!1;r=e[t]}return!0},pushHandleOnePoint(e,t,n){const s=this.getPoints(),r=s.indexOf(e[t])+n;if(r>=s.length||r<0)return!1;const o=t+n,l=s[r],{pushable:i}=this,u=Number(i),d=n*(e[o]-l);return this.pushHandle(e,o,n,u-d)?(e[t]=l,!0):!1},trimAlignValue(e){const{sHandle:t,bounds:n}=this;return b({value:e,handle:t,bounds:n,props:this.$props})},ensureValueNotConflict(e,t,n){let{allowCross:s,pushable:a}=n;const r=this.$data||{},{bounds:o}=r;if(e=e===void 0?r.sHandle:e,a=Number(a),!s&&e!=null&&o!==void 0){if(e>0&&t<=o[e-1]+a)return o[e-1]+a;if(e<o.length-1&&t>=o[e+1]-a)return o[e+1]-a}return t},getTrack(e){let{bounds:t,prefixCls:n,reverse:s,vertical:a,included:r,offsets:o,trackStyle:l}=e;return t.slice(0,-1).map((i,u)=>{const d=u+1,g=P.default({[`${n}-track`]:!0,[`${n}-track-${d}`]:!0});return S.createVNode(I.default,{class:g,vertical:a,reverse:s,included:r,offset:o[d-1],length:o[d]-o[d-1],style:l[u],key:d},null)})},renderSlider(){const{sHandle:e,bounds:t,prefixCls:n,vertical:s,included:a,disabled:r,min:o,max:l,reverse:i,handle:u,defaultHandle:d,trackStyle:g,handleStyle:m,tabindex:v,ariaLabelGroupForHandles:H,ariaLabelledByGroupForHandles:y,ariaValueTextFormatterGroupForHandles:x}=this,f=u||d,V=t.map($=>this.calcOffset($)),C=`${n}-handle`,F=t.map(($,c)=>{let B=v[c]||0;(r||v[c]===null)&&(B=null);const N=e===c;return f({class:P.default({[C]:!0,[`${C}-${c+1}`]:!0,[`${C}-dragging`]:N}),prefixCls:n,vertical:s,dragging:N,offset:V[c],value:$,index:c,tabindex:B,min:o,max:l,reverse:i,disabled:r,style:m[c],ref:k=>this.saveHandle(c,k),onFocus:this.onFocus,onBlur:this.onBlur,ariaLabel:H[c],ariaLabelledBy:y[c],ariaValueTextFormatter:x[c]})});return{tracks:this.getTrack({bounds:t,prefixCls:n,reverse:i,vertical:s,included:a,offsets:V,trackStyle:g}),handles:F}}}}),A=G.default(L);exports.default=A;