@v-c/slider 1.0.0 → 1.0.2

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.
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("vue"),e=require("@v-c/util/dist/KeyCode"),B=require("classnames"),L=require("../context.cjs"),s=require("../util.cjs"),U=o.defineComponent({name:"Handle",props:{prefixCls:{type:String,required:!0},value:{type:Number,required:!0},valueIndex:{type:Number,required:!0},dragging:{type:Boolean,default:!1},draggingDelete:{type:Boolean,default:!1},onStartMove:{type:Function,required:!0},onDelete:{type:Function,required:!0},onOffsetChange:{type:Function,required:!0},onFocus:{type:Function,required:!0},onMouseenter:{type:Function,required:!0},render:Function,onChangeComplete:Function,mock:Boolean,classNames:Object,styles:Object},emits:["focus","mouseenter","startMove","delete","offsetChange","changeComplete"],setup(r,{attrs:F,emit:u,expose:q}){const{min:v,max:g,direction:t,disabled:d,keyboard:E,range:P,tabIndex:k,ariaLabelForHandle:D,ariaLabelledByForHandle:M,ariaRequired:N,ariaValueTextFormatterForHandle:O}=L.useInjectSlider(),i=o.ref({}),f=o.ref({}),b=o.ref({}),y=a=>{console.log("emit-start"),d||u("startMove",a,r.valueIndex)},S=a=>{console.log("emit-focus"),u("focus",a,r.valueIndex)},H=a=>{console.log("emit-enter"),u("mouseenter",a,r.valueIndex)},w=a=>{if(!d&&E){let n=null;switch(a.which||a.keyCode){case e.LEFT:n=t.value==="ltr"||t.value==="btt"?-1:1;break;case e.RIGHT:n=t.value==="ltr"||t.value==="btt"?1:-1;break;case e.UP:n=t.value!=="ttb"?1:-1;break;case e.DOWN:n=t.value!=="ttb"?-1:1;break;case e.HOME:n="min";break;case e.END:n="max";break;case e.PAGE_UP:n=2;break;case e.PAGE_DOWN:n=-2;break;case e.BACKSPACE:case e.DELETE:u("delete",a,r.valueIndex);break}n!==null&&(a.preventDefault(),u("offsetChange",n,r.valueIndex))}},T=a=>{switch(a.which||a.keyCode){case e.LEFT:case e.RIGHT:case e.UP:case e.DOWN:case e.HOME:case e.END:case e.PAGE_UP:case e.PAGE_DOWN:u("changeComplete");break}};return q({focus:()=>r.valueIndex}),()=>{const{prefixCls:a,value:n,valueIndex:l,onStartMove:$,onDelete:j,render:x,dragging:h,draggingDelete:m,onOffsetChange:R,onChangeComplete:W,onFocus:V,onMouseenter:z,styles:A,classNames:G,...C}=r,K=s.getDirectionStyle(t.value,n,v.value,g.value);l!==null?i.value={tabindex:d?null:s.getIndex(k,l),role:"slider","aria-valuemin":v.value,"aria-valuemax":g.value,"aria-valuenow":n,"aria-disabled":d,"aria-label":s.getIndex(D,l),"aria-labelledby":s.getIndex(M,l),"aria-required":s.getIndex(N,l),"aria-valuetext":s.getIndex(O,l)?.(n),"aria-orientation":t.value==="ltr"||t.value==="rtl"?"horizontal":"vertical",onMousedown:y,onTouchstart:y,onFocus:S,onMouseenter:H,onKeydown:w,onKeyup:T,...C}:i.value={...C};const c=`${a}-handle`;f.value=B(c,{[`${c}-${l+1}`]:l!==null&&P,[`${c}-dragging`]:h,[`${c}-dragging-delete`]:m},G?.handle),b.value={...K,...F.style,...A?.handle};const I=o.createVNode("div",o.mergeProps({class:f.value,style:b.value},i.value),null);if(x){const p={index:l,prefixCls:a,value:n,dragging:h,draggingDelete:m,node:I};console.log("render",p);const _=()=>x(p);return o.createVNode(_,null,null)}return I}}});exports.default=U;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("vue"),e=require("@v-c/util/dist/KeyCode"),B=require("classnames"),L=require("../context.cjs"),s=require("../util.cjs"),U=o.defineComponent({name:"Handle",props:{prefixCls:{type:String,required:!0},value:{type:Number,required:!0},valueIndex:{type:Number,required:!0},dragging:{type:Boolean,default:!1},draggingDelete:{type:Boolean,default:!1},onStartMove:{type:Function,required:!0},onDelete:{type:Function,required:!0},onOffsetChange:{type:Function,required:!0},onFocus:{type:Function,required:!0},onMouseenter:{type:Function,required:!0},render:Function,onChangeComplete:Function,mock:Boolean,classNames:Object,styles:Object},emits:["focus","mouseenter","startMove","delete","offsetChange","changeComplete"],setup(l,{attrs:p,emit:u,expose:F}){const{min:v,max:g,direction:t,disabled:d,keyboard:q,range:E,tabIndex:P,ariaLabelForHandle:k,ariaLabelledByForHandle:D,ariaRequired:M,ariaValueTextFormatterForHandle:N}=L.useInjectSlider(),c=o.ref({}),f=o.ref({}),b=o.ref({}),y=a=>{d||u("startMove",a,l.valueIndex)},O=a=>{u("focus",a,l.valueIndex)},S=a=>{u("mouseenter",a,l.valueIndex)},H=a=>{if(!d&&q){let n=null;switch(a.which||a.keyCode){case e.LEFT:n=t.value==="ltr"||t.value==="btt"?-1:1;break;case e.RIGHT:n=t.value==="ltr"||t.value==="btt"?1:-1;break;case e.UP:n=t.value!=="ttb"?1:-1;break;case e.DOWN:n=t.value!=="ttb"?-1:1;break;case e.HOME:n="min";break;case e.END:n="max";break;case e.PAGE_UP:n=2;break;case e.PAGE_DOWN:n=-2;break;case e.BACKSPACE:case e.DELETE:u("delete",a,l.valueIndex);break}n!==null&&(a.preventDefault(),u("offsetChange",n,l.valueIndex))}},w=a=>{switch(a.which||a.keyCode){case e.LEFT:case e.RIGHT:case e.UP:case e.DOWN:case e.HOME:case e.END:case e.PAGE_UP:case e.PAGE_DOWN:u("changeComplete");break}};return F({focus:()=>l.valueIndex}),()=>{const{prefixCls:a,value:n,valueIndex:r,onStartMove:$,onDelete:j,render:x,dragging:h,draggingDelete:C,onOffsetChange:R,onChangeComplete:W,onFocus:V,onMouseenter:z,styles:T,classNames:A,...I}=l,G=s.getDirectionStyle(t.value,n,v.value,g.value);r!==null?c.value={tabindex:d?null:s.getIndex(P,r),role:"slider","aria-valuemin":v.value,"aria-valuemax":g.value,"aria-valuenow":n,"aria-disabled":d,"aria-label":s.getIndex(k,r),"aria-labelledby":s.getIndex(D,r),"aria-required":s.getIndex(M,r),"aria-valuetext":s.getIndex(N,r)?.(n),"aria-orientation":t.value==="ltr"||t.value==="rtl"?"horizontal":"vertical",onMousedown:y,onTouchstart:y,onFocus:O,onMouseenter:S,onKeydown:H,onKeyup:w,...I}:c.value={...I};const i=`${a}-handle`;f.value=B(i,{[`${i}-${r+1}`]:r!==null&&E,[`${i}-dragging`]:h,[`${i}-dragging-delete`]:C},A?.handle),b.value={...G,...p.style,...T?.handle};const m=o.createVNode("div",o.mergeProps({class:f.value,style:b.value},c.value),null);if(x){const K={index:r,prefixCls:a,value:n,dragging:h,draggingDelete:C,node:m},_=()=>x(K);return o.createVNode(_,null,null)}return m}}});exports.default=U;
@@ -1,4 +1,4 @@
1
- import { defineComponent as L, ref as c, createVNode as I, mergeProps as R } from "vue";
1
+ import { defineComponent as L, ref as c, createVNode as F, mergeProps as R } from "vue";
2
2
  import e from "@v-c/util/dist/KeyCode";
3
3
  import U from "classnames";
4
4
  import { useInjectSlider as $ } from "../context.js";
@@ -53,31 +53,31 @@ const te = /* @__PURE__ */ L({
53
53
  styles: Object
54
54
  },
55
55
  emits: ["focus", "mouseenter", "startMove", "delete", "offsetChange", "changeComplete"],
56
- setup(o, {
57
- attrs: E,
58
- emit: r,
59
- expose: k
56
+ setup(l, {
57
+ attrs: I,
58
+ emit: o,
59
+ expose: E
60
60
  }) {
61
61
  const {
62
62
  min: v,
63
63
  max: f,
64
64
  direction: t,
65
65
  disabled: s,
66
- keyboard: D,
67
- range: N,
68
- tabIndex: P,
69
- ariaLabelForHandle: M,
70
- ariaLabelledByForHandle: q,
71
- ariaRequired: O,
72
- ariaValueTextFormatterForHandle: H
73
- } = $(), i = c({}), g = c({}), m = c({}), b = (a) => {
74
- console.log("emit-start"), s || r("startMove", a, o.valueIndex);
66
+ keyboard: k,
67
+ range: D,
68
+ tabIndex: N,
69
+ ariaLabelForHandle: P,
70
+ ariaLabelledByForHandle: M,
71
+ ariaRequired: q,
72
+ ariaValueTextFormatterForHandle: O
73
+ } = $(), i = c({}), g = c({}), b = c({}), m = (a) => {
74
+ s || o("startMove", a, l.valueIndex);
75
+ }, H = (a) => {
76
+ o("focus", a, l.valueIndex);
75
77
  }, S = (a) => {
76
- console.log("emit-focus"), r("focus", a, o.valueIndex);
78
+ o("mouseenter", a, l.valueIndex);
77
79
  }, w = (a) => {
78
- console.log("emit-enter"), r("mouseenter", a, o.valueIndex);
79
- }, T = (a) => {
80
- if (!s && D) {
80
+ if (!s && k) {
81
81
  let n = null;
82
82
  switch (a.which || a.keyCode) {
83
83
  case e.LEFT:
@@ -108,12 +108,12 @@ const te = /* @__PURE__ */ L({
108
108
  break;
109
109
  case e.BACKSPACE:
110
110
  case e.DELETE:
111
- r("delete", a, o.valueIndex);
111
+ o("delete", a, l.valueIndex);
112
112
  break;
113
113
  }
114
- n !== null && (a.preventDefault(), r("offsetChange", n, o.valueIndex));
114
+ n !== null && (a.preventDefault(), o("offsetChange", n, l.valueIndex));
115
115
  }
116
- }, A = (a) => {
116
+ }, T = (a) => {
117
117
  switch (a.which || a.keyCode) {
118
118
  case e.LEFT:
119
119
  case e.RIGHT:
@@ -123,17 +123,17 @@ const te = /* @__PURE__ */ L({
123
123
  case e.END:
124
124
  case e.PAGE_UP:
125
125
  case e.PAGE_DOWN:
126
- r("changeComplete");
126
+ o("changeComplete");
127
127
  break;
128
128
  }
129
129
  };
130
- return k({
131
- focus: () => o.valueIndex
130
+ return E({
131
+ focus: () => l.valueIndex
132
132
  }), () => {
133
133
  const {
134
134
  prefixCls: a,
135
135
  value: n,
136
- valueIndex: l,
136
+ valueIndex: r,
137
137
  onStartMove: _,
138
138
  onDelete: j,
139
139
  render: y,
@@ -143,56 +143,56 @@ const te = /* @__PURE__ */ L({
143
143
  onChangeComplete: z,
144
144
  onFocus: J,
145
145
  onMouseenter: Q,
146
- styles: G,
147
- classNames: K,
146
+ styles: A,
147
+ classNames: G,
148
148
  ...x
149
- } = o, B = W(t.value, n, v.value, f.value);
150
- l !== null ? i.value = {
151
- tabindex: s ? null : u(P, l),
149
+ } = l, K = W(t.value, n, v.value, f.value);
150
+ r !== null ? i.value = {
151
+ tabindex: s ? null : u(N, r),
152
152
  role: "slider",
153
153
  "aria-valuemin": v.value,
154
154
  "aria-valuemax": f.value,
155
155
  "aria-valuenow": n,
156
156
  "aria-disabled": s,
157
- "aria-label": u(M, l),
158
- "aria-labelledby": u(q, l),
159
- "aria-required": u(O, l),
160
- "aria-valuetext": u(H, l)?.(n),
157
+ "aria-label": u(P, r),
158
+ "aria-labelledby": u(M, r),
159
+ "aria-required": u(q, r),
160
+ "aria-valuetext": u(O, r)?.(n),
161
161
  "aria-orientation": t.value === "ltr" || t.value === "rtl" ? "horizontal" : "vertical",
162
- onMousedown: b,
163
- onTouchstart: b,
164
- onFocus: S,
165
- onMouseenter: w,
166
- onKeydown: T,
167
- onKeyup: A,
162
+ onMousedown: m,
163
+ onTouchstart: m,
164
+ onFocus: H,
165
+ onMouseenter: S,
166
+ onKeydown: w,
167
+ onKeyup: T,
168
168
  ...x
169
169
  } : i.value = {
170
170
  ...x
171
171
  };
172
172
  const d = `${a}-handle`;
173
173
  g.value = U(d, {
174
- [`${d}-${l + 1}`]: l !== null && N,
174
+ [`${d}-${r + 1}`]: r !== null && D,
175
175
  [`${d}-dragging`]: h,
176
176
  [`${d}-dragging-delete`]: p
177
- }, K?.handle), m.value = {
178
- ...B,
179
- ...E.style,
180
- ...G?.handle
177
+ }, G?.handle), b.value = {
178
+ ...K,
179
+ ...I.style,
180
+ ...A?.handle
181
181
  };
182
- const C = I("div", R({
182
+ const C = F("div", R({
183
183
  class: g.value,
184
- style: m.value
184
+ style: b.value
185
185
  }, i.value), null);
186
186
  if (y) {
187
- const F = {
188
- index: l,
187
+ const B = {
188
+ index: r,
189
189
  prefixCls: a,
190
190
  value: n,
191
191
  dragging: h,
192
192
  draggingDelete: p,
193
193
  node: C
194
194
  };
195
- return console.log("render", F), I(() => y(F), null, null);
195
+ return F(() => y(B), null, null);
196
196
  }
197
197
  return C;
198
198
  };
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("vue"),l=require("./Mark.cjs");function a(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!o.isVNode(e)}const f=(e,{emit:n})=>{const{prefixCls:s,marks:c=[]}=e,i=`${s}-mark`;return c.length?o.createVNode("div",{class:i},[c.map(({value:t,style:u,label:r})=>o.createVNode(l.default,{key:t,prefixCls:i,style:u,value:t,onClick:()=>n("click",t)},a(r)?r:{default:()=>[r]}))]):null};exports.default=f;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("vue"),u=require("./Mark.cjs"),d=(l,{emit:o,slots:a})=>{const{prefixCls:c,marks:r=[]}=l,t=`${c}-mark`;return r.length?i.createVNode("div",{class:t},[r.map(({value:e,style:n,label:s})=>i.createVNode(u.default,{key:e,prefixCls:t,style:n,value:e,onClick:()=>o("click",e)},{default:()=>[a.mark?.({point:e,label:s})||s]}))]):null};exports.default=d;
@@ -1,31 +1,32 @@
1
- import { createVNode as i, isVNode as l } from "vue";
2
- import a from "./Mark.js";
3
- function p(t) {
4
- return typeof t == "function" || Object.prototype.toString.call(t) === "[object Object]" && !l(t);
5
- }
6
- const u = (t, {
7
- emit: n
1
+ import { createVNode as o } from "vue";
2
+ import c from "./Mark.js";
3
+ const p = (i, {
4
+ emit: a,
5
+ slots: k
8
6
  }) => {
9
7
  const {
10
- prefixCls: s,
11
- marks: e = []
12
- } = t, c = `${s}-mark`;
13
- return e.length ? i("div", {
14
- class: c
15
- }, [e.map(({
8
+ prefixCls: m,
9
+ marks: t = []
10
+ } = i, s = `${m}-mark`;
11
+ return t.length ? o("div", {
12
+ class: s
13
+ }, [t.map(({
16
14
  value: r,
17
- style: f,
18
- label: o
19
- }) => i(a, {
15
+ style: n,
16
+ label: e
17
+ }) => o(c, {
20
18
  key: r,
21
- prefixCls: c,
22
- style: f,
19
+ prefixCls: s,
20
+ style: n,
23
21
  value: r,
24
- onClick: () => n("click", r)
25
- }, p(o) ? o : {
26
- default: () => [o]
22
+ onClick: () => a("click", r)
23
+ }, {
24
+ default: () => [k.mark?.({
25
+ point: r,
26
+ label: e
27
+ }) || e]
27
28
  }))]) : null;
28
29
  };
29
30
  export {
30
- u as default
31
+ p as default
31
32
  };
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"),se=require("@v-c/util/dist/isEqual"),P=require("@v-c/util/dist/warning"),J=require("classnames"),ce=require("./context.cjs"),ie=require("./Handles/index.cjs"),de=require("./hooks/useDrag.cjs"),fe=require("./hooks/useOffset.cjs"),ve=require("./hooks/useRange.cjs"),ge=require("./Marks/index.cjs"),be=require("./Steps/index.cjs"),he=require("./Tracks/index.cjs");function me(){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 ye=a.defineComponent({name:"Slider",props:{...me()},emits:["focus","blur","change","beforeChange","afterChange","changeComplete"],slots:Object,setup(t,{attrs:$,emit:f,expose:K,slots:Q}){const y=a.ref(),R=a.ref(),k=a.shallowRef("ltr");a.watch([()=>t.reverse,()=>t.vertical],([e,l])=>{l?k.value=e?"ttb":"btt":k.value=e?"rtl":"ltr"},{immediate:!0});const b=a.shallowRef(0),S=a.shallowRef(100),E=a.shallowRef(1),p=a.ref([]),C=a.ref(t.defaultValue||t.value),u=a.ref([]),o=a.ref(),B=a.ref();a.watchEffect(()=>{const{range:e,min:l,max:n,step:s,pushable:i,marks:h,allowCross:x,value:v,count:g}=t,[c,F,H,j,I]=ve.default(e);o.value={rangeEnabled:c,rangeEditable:F,rangeDraggableTrack:H,minCount:j,maxCount:I},b.value=isFinite(l)?l:0,S.value=isFinite(n)?n:100,E.value=s!==null&&s<=0?1:s;const M=a.computed(()=>typeof i=="boolean"?i?E.value:!1:i>=0?i:!1);p.value=Object.keys(h||{}).map(m=>{const d=h?.[m],r={value:Number(m)};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:m})=>m||typeof m=="number").sort((m,d)=>m.value-d.value);const[A,O]=fe.default(b.value,S.value,E.value,p.value,x,M.value);B.value={formatValue:A,offsetValues:O},v!==void 0&&(C.value=v);const oe=a.computed(()=>{const m=C.value===null||C.value===void 0?[]:Array.isArray(C.value)?C.value:[C.value],[d=b.value]=m;let r=C.value===null?[]:[d];if(c){if(r=[...m],g||C.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=oe.value});const V=e=>o.value.rangeEnabled?e:e[0],q=e=>{const l=[...e].sort((n,s)=>n-s);se(l,u.value,!0)||f("change",V(l)),C.value=l},L=e=>{e&&y.value?.hideHelp();const l=V(u.value);t.onAfterChange&&(f("afterChange",l),P(!1,"[vc-slider] `onAfterChange` is deprecated. Please use `onChangeComplete` instead.")),f("changeComplete",l)},U=e=>{if(t.disabled||!o.value.rangeEditable||u.value.length<=o.value.minCount)return;const l=[...u.value];l.splice(e,1),f("beforeChange",V(l)),q(l);const n=Math.max(0,e-1);y.value?.hideHelp(),y.value?.focus(n)},[_,W,Z,z,X]=de.default(R,k,u,b,S,B.value.formatValue,q,L,B.value.offsetValues,o.value.rangeEditable,o.value.minCount),Y=(e,l)=>{if(!t.disabled){const n=[...u.value];let s=0,i=0,h=S.value-b.value;u.value.forEach((g,c)=>{const F=Math.abs(e-g);F<=h&&(h=F,s=c),g<e&&(i=c)});let x=s;o.value.rangeEditable&&h!==0&&(!o.value.maxCount||u.value.length<o.value.maxCount)?(n.splice(i+1,0,e),x=i+1):n[s]=e,o.value.rangeEnabled&&!u.value.length&&t.count===void 0&&n.push(e);const v=V(n);f("beforeChange",v),q(n),l?(document.activeElement?.blur?.(),y.value?.focus(x),X(l,x,n)):(t.onAfterChange&&(f("afterChange",v),P(!1,"[vc-slider] `onAfterChange` is deprecated. Please use `onChangeComplete` instead.")),f("changeComplete",v))}},ee=e=>{e.preventDefault();const{width:l,height:n,left:s,top:i,bottom:h,right:x}=R.value.getBoundingClientRect(),{clientX:v,clientY:g}=e;let c;switch(k.value){case"btt":c=(h-g)/n;break;case"ttb":c=(g-i)/n;break;case"rtl":c=(x-v)/l;break;default:c=(v-s)/l}const F=b.value+c*(S.value-b.value);Y(B.value.formatValue(F),e)},w=a.ref(null),ae=(e,l)=>{if(!t.disabled){const n=B.value.offsetValues(u.value,e,l);f("beforeChange",V(u.value)),q(n.values),w.value=n.value}};a.watchEffect(()=>{if(w.value!==null){const e=u.value.indexOf(w.value);e>=0&&y.value?.focus(e)}w.value=null});const le=a.computed(()=>o.value.rangeDraggableTrack&&E.value===null?(process.env.NODE_ENV!=="production"&&P(!1,"`draggableTrack` is not supported when `step` is `null`."),!1):o.value.rangeDraggableTrack),G=(e,l)=>{X(e,l),f("beforeChange",V(u.value))},te=a.computed(()=>_.value!==-1);a.watchEffect(()=>{if(!te.value){const e=u.value.lastIndexOf(W.value);y.value?.focus(e)}});const D=a.computed(()=>[...z.value].sort((e,l)=>e-l)),[ne,ue]=a.computed(()=>o.value.rangeEnabled?[D.value[0],D.value[D.value.length-1]]:[b.value,D.value[0]]).value;K({focus:()=>{y.value?.focus(0)},blur:()=>{const{activeElement:e}=document;R.value?.contains(e)&&e?.blur()}}),a.watchEffect(()=>{t.autoFocus&&y.value?.focus(0)});const re=a.computed(()=>({min:b,max:S,direction:k,disabled:t.disabled,keyboard:t.keyboard,step:E,included:t.included,includedStart:ne,includedEnd:ue,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 ce.useProviderSliderContext(re.value),()=>{const{prefixCls:e="vc-slider",id:l,disabled:n=!1,vertical:s,startPoint:i,trackStyle:h,handleStyle:x,railStyle:v,dotStyle:g,activeDotStyle:c,dots:F,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`]:p.value.length}),style:$.style,onMousedown:ee,id:l},[a.createVNode("div",{class:J(`${e}-rail`,M?.rail),style:{...v,...A?.rail}},null),I&&a.createVNode(he.default,{prefixCls:e,trackStyle:h,values:u.value,startPoint:i,onStartMove:le.value?G:void 0},null),a.createVNode(be.default,{prefixCls:e,marks:p.value,dots:F,style:g,activeStyle:c},null),a.createVNode(ie.default,{ref:y,prefixCls:e,handleStyle:x,values:z.value,draggingIndex:_.value,draggingDelete:Z.value,onStartMove:G,onOffsetChange:ae,onFocus:O=>f("focus",O),onBlur:O=>f("blur",O),handleRender:H,activeHandleRender:j,onChangeComplete:L,onDelete:o.value.rangeEditable?U:()=>{}},null),a.createVNode(ge.default,{prefixCls:e,marks:p.value,onClick:Y},Q)])}}});exports.default=ye;
package/dist/Slider.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ExtractPropTypes, PropType } from 'vue';
1
+ import { ExtractPropTypes, PropType, SlotsType } from 'vue';
2
2
  import { AriaValueFormat, SliderClassNames, SliderStyles } from './interface';
3
3
  import { MarkObj } from './Marks';
4
4
  export interface RangeConfig {
@@ -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;
@@ -249,5 +274,7 @@ declare const _default: import('vue').DefineComponent<ExtractPropTypes<{
249
274
  allowCross: boolean;
250
275
  pushable: number | boolean;
251
276
  dots: boolean;
252
- }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
277
+ }, SlotsType<{
278
+ mark: ({ point: number, label: unknown }: any) => any;
279
+ }>, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
253
280
  export default _default;