outl1ne/nova-currency-vat-field
A Laravel Nova field that combines currency input with VAT handling, letting you capture amounts and tax rates in a single form control. It formats values and supports configurable currencies, keeping billing, pricing, and invoicing data clean inside your Nova admin panels.
3.1.1 is a patch release with a single behavioral change: scroll-wheel interaction no longer mutates input values. There are no new configuration keys, no migrations, and no API surface changes, so upgrading is a composer update away.
composer require <vendor>/<package>:^3.1
php artisan vendor:publish --tag=<package>-config # only if you have not published before
Where to look first:
config/<package>.php — confirm whether any wheel/stepper-related defaults are exposed. 3.1.1 does not add an opt-in flag, so if you need the old behaviour you will be overriding it yourself.resources/views/vendor/<package>) — this is where the input markup lives if you have published views, and it is the surface most affected by the change.First use case: drop the package's input into an existing form and verify two things — typing still works, and hovering the field while scrolling a long page no longer silently rewrites the value. That second check is the whole point of 3.1.1 and is the fastest way to confirm the upgrade landed.
Treat inputs as display-first, edit-on-intent. With scroll-to-change removed, the natural pattern is: value is set by the user explicitly (typing, clicking steppers, picking from a dropdown), and incidental pointer movement over the field is inert. Build forms assuming the value only changes on a deliberate event.
Pair with server-side validation, not client-side trust. Because the wheel can no longer nudge a value by ±1 without the user noticing, validation rules that previously "never fired in practice" may now surface real input. Re-check numeric, min, max, and integer rules against actual user input rather than assuming the stepper kept things in range.
Livewire / Inertia integration. If you bind via wire:model or v-model, no change is required — but re-test debounced updates. A previously-noisy field that fired updated hooks on every wheel tick will now fire far less, which can actually simplify your listeners.
Stepper buttons as the explicit affordance. If your UI depended on scroll-to-increment as the primary way to adjust numbers, add visible +/- controls (or keep the package's built-in steppers). This is the migration path the release implicitly assumes.
Composition. Wrap the package input in your own Blade component so that if you later need a wheel handler back, you patch one file rather than every form:
{{-- resources/views/components/number-field.blade.php --}}
<x-dynamic-component :component="$component" {{ $attributes->merge(['inputmode' => 'decimal']) }} />
Testing pattern. Widget/E2E tests that simulated mouse.wheel() over a focused input to set a value will now fail. Replace them with fill() / type() plus explicit stepper clicks. This is the single most likely source of red CI after upgrading.
wheel, mousewheel, and onwheel handlers scoped to these inputs.blur-on-wheel or preventDefault shim.vendor:publish --force is required to pick up markup changes — and forcing will overwrite your edits. Diff first, then re-apply.php artisan config:clear (and view:clear if views are cached) before concluding the change did not take effect. Stale compiled views are the most common false negative here.3.1.x line, pin with ^3.1.1 if your test suite asserts on input values, so a future patch cannot shift behaviour under you unnoticed.How can I help you explore Laravel packages today?