Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Nova Phone Field Laravel Package

bissolli/nova-phone-field

A Laravel Nova phone field that renders an international telephone input with country flag selector, automatic formatting, and validation. Stores numbers in E.164 and drops into Nova resources with minimal setup.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Feature scoping for admin-side phone capture. The package adds a masked, country-code-aware phone input to Laravel Nova resources — lead forms, customer profiles, support tickets. It is back-office data-entry polish, not a customer-facing capability. Scope it as a small UX line item, not a "phone number support" epic.
  • Build vs. buy vs. fork. MIT-licensed, one line to integrate, so it wins on day-one cost. But with 31 stars, zero dependents, and a release history consisting only of a 2019 Laravel 6.0 compatibility bump, the honest comparison isn't "package vs. nothing" — it's "package vs. ~60 lines of our own Nova field wrapping a maintained phone library." Framing it that way makes the three-year maintenance cost visible in the decision rather than surfacing it mid-sprint.
  • Roadmap gate against our actual Nova version. The description claims Nova 4 support; every artifact says otherwise (last release 2019, compiled Vue assets from the Nova 2/3 era, single compat bump to Laravel 6). Treat the vendor claim as unverified marketing copy. The decision this drives is binary: on Laravel 6 / Nova 2 it's a trial-able convenience; on Laravel 7+ or Nova 4/5 it's a stop signal — a Composer resolution error is an answer, not an obstacle to bypass with --ignore-platform-reqs.
  • Data-quality investment, decided in the same breath. The mask is cosmetic and client-side. The field does not validate, normalize, or guarantee E.164 storage. If phone numbers feed search, deduplication, CRM sync, or outbound dialing, then adopting this package commits us to a separate server-side normalization and validation step (e.g. propaganistas/laravel-phone behind a fillUsing() callback or mutator). Budget that work now — it is not optional scope.
  • Risk acceptance recorded explicitly. Adoption should be logged as an accepted maintenance risk with a named owner, a compatibility-test gate against our exact Nova version, and a fallback plan for the next framework upgrade. Without those three, this isn't a decision — it's an unowned liability on the roadmap.
  • Coverage commitments to sales/support. The country-code → mask map is hardcoded in the package's JS with no config file. Before anyone promises "supports international numbers" in a spec, verify the regions we actually sell into appear in that map. Adding a region means editing vendor code.

When to Consider This Package

Consider it only when all of the following hold:

  • We are on the Laravel 6 / Nova 2 line — or we've already decided to fork and own the Vue component.
  • The use case is internal back-office entry, where formatting improves operator speed and reduces inconsistent input.
  • Server-side validation and E.164 normalization are being added independently; the field is a UI hint only.
  • Phone data does not drive compliance, KYC, fraud checks, or customer-facing verification without separate controls.
  • We can spike it against our real Nova version this week, watch the browser console for silent mask-binding failures, and pin versions.
  • There is an assigned owner and a documented fork/patch path.

Look elsewhere when any of these are true:

  • We are on Laravel 7+ or Nova 4/5 — the Vue 3 toolchain and pre-compiled assets will likely mount but silently fail to bind the mask.
  • We need current-version compatibility guarantees, JS dependency security patching, accessibility review, or any support path.
  • We need robust validation and normalization as first-class capabilities rather than a bolt-on.
  • Phone numbers are customer-facing, compliance-sensitive, or a system-of-record field.
  • The required country coverage exceeds the 2019 hardcoded mask map.

The preferred alternative in those cases: a thin custom Nova field over a maintained phone library (intl-tel-input, propaganistas/laravel-phone, giggsey/libphonenumber-for-php). Slightly more up-front effort, materially lower ownership cost over three years.

How to Pitch It (Stakeholders)

To executives: This is a small, free, MIT-licensed add-on that formats phone-number input in our internal admin screens as the operator types a country code. It is cheap to try and could shave friction from lead management and support workflows. It is explicitly not a platform component: adoption is minimal, nobody else depends on it, and it has not seen substantive development since 2019 — the only change since then added Laravel 6 support. Its own README claims Nova 4 compatibility, which our engineering review could not corroborate. Recommendation: approve a short engineering spike, not a commitment. Adopt only if it works cleanly on our exact Nova version and we formally accept ownership; otherwise build a small internal field over a maintained phone library — marginally more up front, far less over three years.

To engineering: Treat v0.0.4 as a compatibility ceiling, not a revival — it confirms Laravel 6 and implies Nova 2.x only, with compiled Vue assets from the Nova 2/3 era. Plan for a fork rather than direct Composer adoption on modern stacks. Isolate the field behind a single resource helper so it's swappable, keep every bit of validation and E.164 normalization server-side, and assert on normalized values in tests — not masked strings, which will churn every time the bundled patterns change or we fork them. During the spike, check the browser console first: the classic failure is a component that mounts but never binds the mask, rendering as a plain text box. Normalize on write via fillUsing() or a model mutator so sorting and querying run against clean E.164, never the masked display string.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console