@v-c/input-number 1.0.6 → 1.0.7

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.
@@ -12,6 +12,20 @@ import omit from "@v-c/util/dist/omit";
12
12
  function _isSlot(s) {
13
13
  return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
14
14
  }
15
+ /** Accumulated wheel distance that adds up to a single step. */
16
+ var WHEEL_STEP_DISTANCE = 100;
17
+ var WHEEL_LINE_HEIGHT = 40;
18
+ var WHEEL_PAGE_HEIGHT = 800;
19
+ /** Idle gap after which a new wheel gesture starts from scratch. */
20
+ var WHEEL_DELTA_RESET_INTERVAL = 200;
21
+ /** Normalize `deltaY` to pixels — browsers may report it in lines or pages. */
22
+ function getWheelDeltaY(event) {
23
+ switch (event.deltaMode) {
24
+ case 1: return event.deltaY * WHEEL_LINE_HEIGHT;
25
+ case 2: return event.deltaY * WHEEL_PAGE_HEIGHT;
26
+ default: return event.deltaY;
27
+ }
28
+ }
15
29
  var defaults = {
16
30
  prefixCls: "vc-input-number",
17
31
  step: 1,
@@ -227,20 +241,43 @@ var InputNumber = /* @__PURE__ */ defineComponent((props, { attrs, slots, expose
227
241
  shiftKeyRef.value = false;
228
242
  props.onKeyUp?.(event);
229
243
  };
244
+ let wheelDelta = 0;
245
+ let wheelTimestamp = 0;
246
+ const resetWheel = () => {
247
+ wheelDelta = 0;
248
+ wheelTimestamp = 0;
249
+ };
250
+ const onInternalWheel = (event) => {
251
+ const delta = getWheelDeltaY(event);
252
+ if (!delta) return;
253
+ const eventTimestamp = event.timeStamp || Date.now();
254
+ if (eventTimestamp - wheelTimestamp > WHEEL_DELTA_RESET_INTERVAL) wheelDelta = 0;
255
+ wheelTimestamp = eventTimestamp;
256
+ if (wheelDelta && Math.sign(wheelDelta) !== Math.sign(delta)) wheelDelta = 0;
257
+ wheelDelta += delta;
258
+ if (Math.abs(wheelDelta) >= WHEEL_STEP_DISTANCE) {
259
+ onInternalStep(wheelDelta < 0, "wheel");
260
+ wheelDelta -= Math.sign(wheelDelta) * WHEEL_STEP_DISTANCE;
261
+ }
262
+ };
230
263
  watchEffect((onCleanup) => {
231
264
  if (props.changeOnWheel && focus.value && inputRef.value) {
232
265
  const onWheel = (event) => {
233
- onInternalStep(event.deltaY < 0, "wheel");
266
+ onInternalWheel(event);
234
267
  event.preventDefault();
235
268
  };
236
269
  inputRef.value.addEventListener("wheel", onWheel, { passive: false });
237
- onCleanup(() => inputRef.value?.removeEventListener("wheel", onWheel));
270
+ onCleanup(() => {
271
+ inputRef.value?.removeEventListener("wheel", onWheel);
272
+ resetWheel();
273
+ });
238
274
  }
239
275
  });
240
276
  const onBlur = (e) => {
241
277
  if (props.changeOnBlur ?? true) flushInputValue(false);
242
278
  focus.value = false;
243
279
  userTypingRef.value = false;
280
+ resetWheel();
244
281
  props.onBlur?.(e);
245
282
  };
246
283
  const onFocus = (e) => {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@v-c/input-number",
3
3
  "type": "module",
4
- "version": "1.0.6",
4
+ "version": "1.0.7",
5
5
  "description": "",
6
6
  "license": "MIT",
7
7
  "homepage": "https://github.com/antdv-next/vue-components/tree/next/packages/input-number",
@@ -31,8 +31,8 @@
31
31
  },
32
32
  "dependencies": {
33
33
  "@v-c/input": "^1.1.1",
34
- "@v-c/util": "^1.0.21",
35
- "@v-c/mini-decimal": "^1.0.1"
34
+ "@v-c/mini-decimal": "^1.0.1",
35
+ "@v-c/util": "^1.1.0"
36
36
  },
37
37
  "scripts": {
38
38
  "build": "vite build",