anousss007/blatui
BlatUI brings shadcn/ui-style, WCAG AA accessible components to the BLAT stack (Blade, Laravel, Alpine, Tailwind). A CLI copies fully themeable, light/dark UI components, blocks, and charts directly into your app so you own and customize the code.
Full Changelog: https://github.com/anousss007/blatui/compare/v1.28.0...v1.28.1
Full Changelog: https://github.com/anousss007/blatui/compare/v1.27.0...v1.28.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.26.1...v1.27.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.26.0...v1.26.1
Full Changelog: https://github.com/anousss007/blatui/compare/v1.25.1...v1.26.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.25.0...v1.25.1
Full Changelog: https://github.com/anousss007/blatui/compare/v1.24.4...v1.25.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.24.3...v1.24.4
Full Changelog: https://github.com/anousss007/blatui/compare/v1.24.2...v1.24.3
mini-cart and notification-center could push a 320px page sideways. Both panels are w-80 — exactly 320px — so on the narrowest phones they were wider than the viewport once positioned, and the whole page scrolled horizontally. Capped at calc(100vw - 1rem).Found by a new test layer rather than by a user, which is the point of it.
Two suites added on top of the five that already drive every component in a real Chromium at every breakpoint:
tabs, navigation-menu, dock, data-table), as upstream shadcn/ui does — they are listed in the suite and printed on every run rather than hidden, and enforced normally from 375px up.23,508 checks across seven suites and eleven widths, verified to reproduce bit-for-bit between a laptop and a CI runner.
Full Changelog: https://github.com/anousss007/blatui/compare/v1.24.1...v1.24.2
mobileBreakpoint did not actually move the breakpoint (#17, reported by [@cmdevpe](https://github.com/cmdevpe)). 1.24.0 wired the prop to isMobile — which decides what the trigger toggles — but the two panels are painted by CSS, and that was still three static md: classes pinned to 768px. With mobile-breakpoint="1023px" at 900px the trigger flipped openMobile and nothing appeared: the JS said mobile while the CSS kept the rail docked and the drawer hidden.
The md: classes stay as the no-JS default, so the docked rail still paints with the page instead of popping in after Alpine boots; isMobile overrides them only when the two disagree — which is exactly what a breakpoint other than md means. The drawer is now gated on isMobile itself, so dragging a window past the breakpoint while it is open closes it rather than leaving it floating over the docked rail.
If you set mobile-breakpoint in 1.24.0, it did nothing for any value that would have changed anything. Update.
Full Changelog: https://github.com/anousss007/blatui/compare/v1.24.0...v1.24.1
The mobile sidebar drawer never appeared (#16, reported by [@cmdevpe](https://github.com/cmdevpe)). On a viewport below md, tapping <x-ui.sidebar-trigger> dimmed the page and showed nothing. Regression introduced in 1.21.0 — if your app has a mobile sidebar, update.
twMerge() writes the merged class back into the attribute bag it is called on rather than returning a copy, and sidebar renders a desktop root and a teleported mobile panel from that same bag — so the desktop root's hidden md:block leaked onto the mobile panel and made it display: none below md. The root branches now merge into a copy. Verified in a real browser: the drawer slides in, traps focus, and closes on Escape.
mobileBreakpoint on sidebar-provider. The off-canvas drawer was hardwired to (max-width: 767px), so at tablet widths the sidebar could only collapse to the icon rail, never hide:
<x-ui.sidebar-provider mobile-breakpoint="1023px">
A bare number is read as px; anything else is passed to matchMedia as written. Default unchanged.
Full notes in the CHANGELOG.
Full Changelog: https://github.com/anousss007/blatui/compare/v1.23.0...v1.24.0
Reported by [@cmdevpe](https://github.com/cmdevpe) (#15) — three gaps that only surface together, once a collapsed sidebar has enough items to scroll.
tooltip on sidebar-menu-button. Collapsed to the icon rail a button shows nothing but its icon:
<x-ui.sidebar-menu-button tooltip="Inbox" href="/inbox">
<x-lucide-inbox /><span>Inbox</span>
</x-ui.sidebar-menu-button>
Opt-in per button as in shadcn/ui, shown only while the rail is collapsed on desktop. The nav-main / nav-secondary blocks now pass it, so sidebar-07 demonstrates it. It is a visual affordance: the label <span> stays in the DOM when the button shrinks, so the accessible name never depended on it.
state on tooltip-content — the Alpine expression driving visibility, for tooltips living in a scope where open already means something else.
sidebar-content clipped both axes on the icon rail, making the last menu groups unreachable. Its scrollbar is hidden rather than given room, so the rail keeps its width and the size-8 buttons stop being squeezed against the track.collapsed is safe to read from nested Alpine scopes — a plain property synced with x-effect rather than a getter, whose this Alpine resolves against the reading scope.Full notes in the CHANGELOG.
Full Changelog: https://github.com/anousss007/blatui/compare/v1.22.0...v1.23.0
Both items come from [@cmdevpe](https://github.com/cmdevpe) running 1.21.0 against a real 181-file install — thanks.
blatui:update --ignore-whitespace (#11). If your project runs Pint or Prettier over resources/views, the formatter has rewritten the layout of every component you copied, and all of them read as changed — 21 of 31 in the first real-world run. Those are now counted separately as same content, reformatted, and the flag treats them as up to date.
php artisan blatui:update --dry-run --ignore-whitespace
The default stays byte-exact. The flag forgives layout only: reordered Tailwind classes or flipped quotes still read as drift, because nothing tells them apart from a real edit.
rem now tracks --spacing (#14) — the switch track height, the calendar day-cell size and both sidebar-provider widths. Identical at Tailwind's default --spacing: .25rem, so nothing moves unless you change the spacing scale.Full notes in the CHANGELOG.
Full Changelog: https://github.com/anousss007/blatui/compare/v1.21.0...v1.22.0
blatui:update — an update path for the components you already own. It diffs every installed file against the version this release ships and asks before touching anything that differs. --dry-run, --diff, --force, --no-backup; your copy is kept as .bak.
php artisan blatui:update --dry-run --diff
closeOnOverlay on dialog-content, sheet-content and drawer-content — a static backdrop for modals that shouldn't be discarded by a stray outside click. Escape and the close button stay wired.
The theme editor's Copy CSS now exports the status palette (--success/--warning/--info), --font-heading and the progress-indeterminate animation, which a pasted theme used to lose silently.
sonner emitted two class attributes, so classes you passed were dropped by the browser.<x-ui.sidebar> discarded its whole attribute bag (class, id, Alpine bindings) in the collapsible branch.block dependency of a remote registry item landed in components/ui.dev.Full notes in the CHANGELOG.
Full Changelog: https://github.com/anousss007/blatui/compare/v1.20.0...v1.21.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.19.0...v1.20.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.18.0...v1.19.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.17.1...v1.18.0
qr-code scaling. The SVG bound its viewBox via a plain :viewBox, which the HTML parser lowercases to viewbox — silently ignored since SVG's viewBox is case-sensitive. With no valid viewBox the code rendered at ~1px per module instead of filling size. Now bound with Alpine's .camel modifier (:view-box.camel="viewBox") so it scales to any size, crisp and scannable. Thanks @afiqiqmal for the diagnosis (#9).Full Changelog: https://github.com/anousss007/blatui/compare/v1.17.0...v1.17.1
Full Changelog: https://github.com/anousss007/blatui/compare/v1.15.3...v1.16.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.15.2...v1.15.3
Full Changelog: https://github.com/anousss007/blatui/compare/v1.15.1...v1.15.2
Full Changelog: https://github.com/anousss007/blatui/compare/v1.15.0...v1.15.1
wire:model on every form controlBlatUI components are Blade + Alpine, so they already render inside Livewire. This release wires wire:model through to their value with full two-way binding:
input, textarea, native select/checkbox) bind directly.[@entangle](https://github.com/entangle)($attributes->wire('model')) — select, combobox, autocomplete, switch, toggle, toggle-group, radio-group, checkbox, slider, rating, knob, number-input, color-picker, date-picker, datetime-picker, time-field, input-otp, tags-input, editable, markdown-editor.wire:model to their real input — file-upload (upload target), phone-input, segmented-control, mention-input, rich-text-editor, signature-pad..live / .blur / .debounce. Fully inert when Livewire isn't installed — plain Blade/Alpine projects are unaffected.📖 Guide: https://blatui.remix-it.com/docs/livewire
brand — logo/wordmark, optionally linked.profile — avatar + name/description, for account buttons and dropdown triggers.slider / date-picker / datetime-picker bind a single value in default mode; range modes submit via standard name[...] fields.Full Changelog: https://github.com/anousss007/blatui/compare/v1.14.1...v1.15.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.14.0...v1.14.1
Full Changelog: https://github.com/anousss007/blatui/compare/v1.13.2...v1.14.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.13.1...v1.13.2
Full Changelog: https://github.com/anousss007/blatui/compare/v1.13.0...v1.13.1
Full Changelog: https://github.com/anousss007/blatui/compare/v1.12.2...v1.13.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.12.1...v1.12.2
Full Changelog: https://github.com/anousss007/blatui/compare/v1.12.0...v1.12.1
Full Changelog: https://github.com/anousss007/blatui/compare/v1.11.0...v1.12.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.10.0...v1.11.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.9.2...v1.10.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.9.1...v1.9.2
Full Changelog: https://github.com/anousss007/blatui/compare/v1.9.0...v1.9.1
Full Changelog: https://github.com/anousss007/blatui/compare/v1.8.0...v1.9.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.7.0...v1.8.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.6.6...v1.7.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.6.5...v1.6.6
Full Changelog: https://github.com/anousss007/blatui/compare/v1.6.4...v1.6.5
Full Changelog: https://github.com/anousss007/blatui/compare/v1.6.3...v1.6.4
Full Changelog: https://github.com/anousss007/blatui/compare/v1.6.2...v1.6.3
Full Changelog: https://github.com/anousss007/blatui/compare/v1.6.1...v1.6.2
Full Changelog: https://github.com/anousss007/blatui/compare/v1.6.0...v1.6.1
Full Changelog: https://github.com/anousss007/blatui/compare/v1.5.0...v1.6.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.4.0...v1.5.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.3.2...v1.4.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.3.1...v1.3.2
Full Changelog: https://github.com/anousss007/blatui/compare/v1.3.0...v1.3.1
Theme-foundation and component enhancements shipped to consumers.
xs size + icon size scale (icon-xs / icon-sm / icon-lg).[data-input-style]: outline / fill / inset), a heading font token (--font-heading) decoupled from the body font, and more [data-font] webfont families.inputStyle + fontHeading and applies the matching data-* attributes.Install / update: composer require blatui/blatui
Full Changelog: https://github.com/anousss007/blatui/compare/v1.2.0...v1.3.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.1.0...v1.2.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.0.0...v1.1.0
Full Changelog: https://github.com/anousss007/blatui/compare/v1.0.0...v1.1.0
First release of the BlatUI Composer package — install with composer require blatui/blatui.
php artisan blatui:add <component> — copy a component family (+ deps) into resources/views/components/uiphp artisan blatui:list [component] — browse the 55 component familiesphp artisan blatui:init — doctor (packages, theme tokens, Alpine bootstrap)php artisan vendor:publish --tag=blatui-foundations — theme CSS + JS engineLaravel 11 / 12 / 13 · PHP 8.2+ · auto-discovered · MIT.
Demo & docs: https://github.com/anousss007/blat-ui
Full Changelog: https://github.com/anousss007/blatui/commits/v1.0.0
How can I help you explore Laravel packages today?