Skip to content

Commit e0133c2

Browse files
committed
fix(VNumberInput): keep both controls enabled when empty
1 parent 451e7c3 commit e0133c2

2 files changed

Lines changed: 26 additions & 2 deletions

File tree

packages/vuetify/src/components/VNumberInput/VNumberInput.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,11 +180,13 @@ export const VNumberInput = genericComponent<VNumberInputSlots>()({
180180

181181
const canIncrease = computed(() => {
182182
if (controlsDisabled.value) return false
183-
return (model.value ?? 0) as number + props.step <= props.max
183+
if (model.value == null) return true
184+
return model.value + props.step <= props.max
184185
})
185186
const canDecrease = computed(() => {
186187
if (controlsDisabled.value) return false
187-
return (model.value ?? 0) as number - props.step >= props.min
188+
if (model.value == null) return true
189+
return model.value - props.step >= props.min
188190
})
189191

190192
const controlVariant = computed(() => {

packages/vuetify/src/components/VNumberInput/__tests__/VNumberInput.spec.browser.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,28 @@ describe('VNumberInput', () => {
224224
expect(model.value).toBe(-10)
225225
})
226226

227+
it('should have increment enabled when range is entirely negative', async () => {
228+
const model = ref(null)
229+
render(() =>
230+
<VNumberInput min={ -10 } max={ -2 } v-model={ model.value } />
231+
)
232+
233+
expect(screen.getByTestId('increment')).toBeEnabled()
234+
await userEvent.click(screen.getByTestId('increment'))
235+
expect(model.value).toBe(-2)
236+
})
237+
238+
it('should have decrement enabled when range is entirely positive', async () => {
239+
const model = ref(null)
240+
render(() =>
241+
<VNumberInput min={ 2 } max={ 10 } v-model={ model.value } />
242+
)
243+
244+
expect(screen.getByTestId('decrement')).toBeEnabled()
245+
await userEvent.click(screen.getByTestId('decrement'))
246+
expect(model.value).toBe(2)
247+
})
248+
227249
it('supports decimal step', async () => {
228250
const model = ref(0)
229251
render(() => (

0 commit comments

Comments
 (0)