Skip to content

Commit 9db3654

Browse files
authored
feat(NumberField): support invertWheelChange to invert the wheel change behavior (#1935)
* fix(NumberField): correct wheel change behavior * chore(tests): update tests for wheel events * feat: support `invertWheelChange` to invert the wheel change behavior
1 parent 0c29baa commit 9db3654

File tree

4 files changed

+34
-3
lines changed

4 files changed

+34
-3
lines changed

docs/content/meta/NumberFieldRoot.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@
4444
'type': 'string',
4545
'required': false
4646
},
47+
{
48+
'name': 'invertWheelChange',
49+
'description': '<p>When <code>true</code>, inverts the direction of the wheel change.</p>\n',
50+
'type': 'boolean',
51+
'required': false
52+
},
4753
{
4854
'name': 'locale',
4955
'description': '<p>The locale to use for formatting dates</p>\n',

packages/core/src/NumberField/NumberField.test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,27 @@ describe('numberField', () => {
130130
deltaY: 100, // Positive value for scrolling down
131131
})
132132
expect(input.value).toBe('11')
133+
await fireEvent.wheel(input, {
134+
deltaY: -100, // Negative value for scrolling up
135+
})
136+
expect(input.value).toBe('10')
137+
})
138+
139+
it('should invert update value when `invertWheelChange` is `true`', async () => {
140+
const { input } = setup({
141+
defaultValue: 10,
142+
invertWheelChange: true,
143+
})
144+
input.focus()
145+
expect(input.value).toBe('10')
146+
await fireEvent.wheel(input, {
147+
deltaY: 100, // Positive value for scrolling down
148+
})
149+
expect(input.value).toBe('9')
150+
await fireEvent.wheel(input, {
151+
deltaY: -100, // Negative value for scrolling up
152+
})
153+
expect(input.value).toBe('10')
133154
})
134155

135156
it('should not update value when `disableWheelChange` is `true`', async () => {

packages/core/src/NumberField/NumberFieldInput.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ function handleWheelEvent(event: WheelEvent) {
3535
3636
event.preventDefault()
3737
if (event.deltaY > 0)
38-
rootContext.handleIncrease()
38+
rootContext.invertWheelChange.value ? rootContext.handleDecrease() : rootContext.handleIncrease()
3939
else if (event.deltaY < 0)
40-
rootContext.handleDecrease()
40+
rootContext.invertWheelChange.value ? rootContext.handleIncrease() : rootContext.handleDecrease()
4141
}
4242
4343
onMounted(() => {

packages/core/src/NumberField/NumberFieldRoot.vue

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ export interface NumberFieldRootProps extends PrimitiveProps, FormFieldProps {
2525
disabled?: boolean
2626
/** When `true`, prevents the value from changing on wheel scroll. */
2727
disableWheelChange?: boolean
28+
/** When `true`, inverts the direction of the wheel change. */
29+
invertWheelChange?: boolean
2830
/** Id of the element */
2931
id?: string
3032
}
@@ -46,6 +48,7 @@ interface NumberFieldRootContext {
4648
applyInputValue: (val: string) => void
4749
disabled: Ref<boolean>
4850
disableWheelChange: Ref<boolean>
51+
invertWheelChange: Ref<boolean>
4952
max: Ref<number | undefined>
5053
min: Ref<number | undefined>
5154
isDecreaseDisabled: Ref<boolean>
@@ -72,7 +75,7 @@ const props = withDefaults(defineProps<NumberFieldRootProps>(), {
7275
stepSnapping: true,
7376
})
7477
const emits = defineEmits<NumberFieldRootEmits>()
75-
const { disabled, disableWheelChange, min, max, step, stepSnapping, formatOptions, id, locale: propLocale } = toRefs(props)
78+
const { disabled, disableWheelChange, invertWheelChange, min, max, step, stepSnapping, formatOptions, id, locale: propLocale } = toRefs(props)
7679
7780
const modelValue = useVModel(props, 'modelValue', emits, {
7881
defaultValue: props.defaultValue,
@@ -191,6 +194,7 @@ provideNumberFieldRootContext({
191194
applyInputValue,
192195
disabled,
193196
disableWheelChange,
197+
invertWheelChange,
194198
max,
195199
min,
196200
isDecreaseDisabled,

0 commit comments

Comments
 (0)