hungnm28/livewire-form
Reusable Blade UI components for Laravel and Livewire apps, including form inputs, buttons, modals, asides, theme switching, and Tailwind/Alpine-powered interactions. Config, views, and assets are publishable for easy integration.
lf:: prefix covering the exact primitives that eat sprint capacity — inputs, selects, textareas, checkboxes, toggles, buttons, tables, modals, aside layouts, and light/dark/system theming. For a CRUD console, admin panel, onboarding flow, or settings page, this is a buy-and-wrap decision: adopt the primitives, keep business logic in-house, and redirect engineering effort to workflow and validation logic rather than restyling <input> elements for the fifth time.primary-*-driven and themed via a single config key ('theme' => 'orange'), this supports a roadmap decision to standardize on one Tailwind token palette instead of accumulating per-team one-off markup. Treat the package as the floor of your component library, not the ceiling.data-action="cycleTheme", Alpine themeSetting store) let you put dark mode and an app shell on the roadmap without a dedicated frontend project. It also exposes open-modal / close-modal DOM events, so modals can be driven from non-Livewire code paths.livewire-form-views, livewire-form-assets), and Livewire components can be mapped via an alias => class config array. That is a deliberate "extend, don't fork" contract — you localize divergence into published views and registered aliases, keeping the upstream dependency upgradeable.Adopt when:
tailwind.config.js content paths, and defining primary-* in your theme (or mapping it to an existing palette).assets.use_cdn_icons => false and bundle it yourself, which is the right call for any app with a CSP or performance budget.Look elsewhere when:
primary-* will fight the package rather than benefit from it.tailwind.config.js instructions are v3-shaped; the CSS-first v4 content configuration is undocumented here. Non-Tailwind stacks (Bootstrap, Bulma, DaisyUI, Flowbite) are a non-starter.Non-negotiable diligence before signing off:
composer test on a branch and inspect actual coverage — the README documents the command but not what it covers.wire:model binding plus @error surfacing) — this is the single highest-risk unstated assumption in the README.app.js expects matches Livewire's bundled Alpine. The README explicitly warns that overridden Livewire frontend assets will break interactive components.form.toogle, theme.toogle) as evidence of public-API churn. Do not build on aliases that are already deprecated on arrival.To executives — the one-paragraph case:
This is an MIT-licensed set of pre-built form and layout components for our Laravel/Livewire stack. The value is straightforward: it removes the routine UI work — inputs, tables, modals, page shell, dark mode — from every form-related feature we ship, so engineering time goes to logic and workflow instead of markup. It's free, it installs with one command, and it slots into the stack we already run. The honest caveat is maturity: it's a young, single-maintainer package with no adoption yet, so I'm recommending a bounded pilot on internal tooling — not customer-facing surfaces — with a pinned version. If the pilot pays off, we expand; if not, we've lost a few days, not a quarter. The pilot is the go/no-go gate, and I'll bring you the result before any broader commitment.
To engineering — the practical case:
We get
lf::-prefixed Blade components for form controls, buttons, tables, modals, asides, and a layout shell, plus Alpine-powered theme switching and modal events. It's Livewire-native —<x-lf::form.input wire:model="form.email" />just works — and it supports Laravel 10–13 and Livewire 3/4, so it won't block our upgrade path. The tradeoffs are real and I want them on the table: it hard-requires Tailwind and Alpine, it wantsprimary-*defined in our theme, it pulls Tabler Icons (we'll self-bundle withuse_cdn_icons => false), and we must add the package views to our Tailwindcontentglobs. We'll publish views locally so customization stays in our repo and upstream stays upgradeable. We pin the version, we run the test suite first, and we verify Livewire validation errors and modal focus behavior before it touches anything that matters. Treat it as scaffolding we own, not a dependency we trust.
What to commit to, concretely:
How can I help you explore Laravel packages today?