Skip to content

v5.0.0

Latest

Choose a tag to compare

@mkocansey mkocansey released this 31 Aug 22:31
· 1 commit to main since this release

v5.0.0

This consolidates everything since the last published release, 4.3.0. Two versions
shipped to Packagist in between — 4.4.0 and 4.5.0 — but neither got a GitHub
Release of its own, so their changes (including the package rename) are folded in
here too.

Breaking changes

The Composer package name changed, twice: mkocansey/bladewindbladewindui/bladewindui (4.4.0) → bladewindui/ui (4.5.0).
Nothing else moved — the PHP namespace, the x-bladewind:: Blade namespace, the
bladewind config key, and the public/vendor/bladewind asset path are all
untouched, so existing markup and config need no changes. Both old names keep
working via metapackage shims; update your composer.json whenever you like:

- "mkocansey/bladewind": "^4.3"
+ "bladewindui/ui": "^5.0"

The one thing that does break silently: a hardcoded vendor path, most commonly
a Tailwind v4 @source directive.

-@source '../../vendor/mkocansey/bladewind/packages';
+@source '../../vendor/bladewindui/ui/packages';

Miss this and the build still succeeds — it just stops generating the utility
classes scanned from BladeWind's own templates, and styles quietly disappear. Check
any deploy script, asset pipeline, or IDE helper config that references the old
path too. Full details in docs/migration/README.md.

Buttons now emit a real type attribute. Previously the type was written
through {{ }}, which escapes quotes, so the rendered markup was
type="button" — not a valid HTML type keyword, so every button fell
back to the browser default of type="submit". A BladeWind <button> inside a
<form> submitted that form on click regardless of can_submit. This is now
fixed: buttons only submit a form when can_submit="true" is set. If you were
relying on the old (accidental) submit behavior, add can_submit="true" explicitly.

New components

  • Calendar — inline month, week, and day views for displaying and selecting
    dates or events, distinct from the form-bound Datepicker. Supports none,
    single, and multiple selection modes, a real hour grid for week/day view with
    timed and all-day events, an inbuilt event details drawer, and a highlight-today
    toggle.
  • Data Grid — a higher-level companion to Table with column sorting,
    filtering, selection, sticky headers, and both client-side and server-driven
    pagination.
  • Command Palette — a keyboard-first, searchable action launcher with grouped
    actions, shortcuts, empty states, and asynchronous results.
  • Drawer, Breadcrumbs, Stepper, and Sidebar (navigation) also
    shipped in 4.5.0.

New features

  • Form components resolve old() and validation errors themselves. input,
    textarea, select, checkbox, radio, datepicker, and filepicker now
    take fill_from_old and show_validation_error props (both default false,
    configurable globally) instead of every field wiring value/error state by hand.
  • New input-group component for attaching a button or select to an input,
    handling the corner radius and border collapse that used to be done by hand.
  • icon gains a size prop, card gains a padding scale
    (nonelarge, or any Tailwind utility), and the shared radius helper gains
    more named values — replacing a long tail of ! utility overrides consumers
    were reaching for.
  • table gains a :columns model and an empty-state slot; pagination
    now consumes a Laravel paginator directly; statistic gains tones, trend
    direction, hints, and progress.
  • @bladewindScripts Blade directive replaces hand-picking <script src>
    tags per layout. All JS helpers are now also exported on window, so the
    shims consumers used to write for inline handlers are no longer needed.
  • A Preflight-free CSS build (bladewind-ui-no-preflight.min.css) for apps
    that already ship their own Tailwind reset, alongside the full bundle.
  • The shipped CSS is hardened against a host theme — every custom property a
    component rule reads now carries a literal fallback, so an app that resets
    Tailwind's theme tokens doesn't silently break BladeWind's own styling.
  • !important removed from every component rule (78 declarations across
    button, input, table, and tabs). Consumers can now override component styles
    with ordinary CSS; verified backward compatible rule-by-rule against the
    previous bundle.
  • Popover, the select popup, and tooltip no longer clip inside a scrolling
    ancestor
    (the classic case: a wide table's overflow-x-auto wrapper). All
    three now position against the trigger's screen rect and reposition on scroll,
    matching the fix Dropmenu already had.
  • Accessibility pass: ARIA semantics for select, dropmenu, alert, buttons,
    tabs, toggle, rating, accordion, slider, and checkcards, plus keyboard
    navigation for tabs and the rating slider.
  • Laravel 13 is now an allowed dependency.

Fixes

  • Dropmenu, Popover, and Notification scripts could silently vanish after the
    first render
    in any long-lived PHP process (Octane, PHP-FPM worker reuse, or
    a single test run rendering more than one instance) — include_once dedupes
    by file path for the life of the process, not per request. Switched to the
    same @once-scoped <script src> pattern Datepicker already used correctly.
  • Snake_case props no longer leak as literal HTML attributes. has_shadow="false"
    and similar previously rendered onto the root element as-is; worst case was
    button.circle leaking show_focus_ring, title, onclick, and an empty
    href (which resolves to the current page).
  • Dark mode specificity fixed for two components that ignored it.
  • Table's empty-state markup fixed.
  • A couple of defects in the shared core JS helpers fixed, including domEls()
    returning false instead of an empty list when nothing matched a selector —
    which could throw partway through page load and silently skip everything
    after it, including the new window exports above.

Internal

Command Palette and Data Grid were rebuilt as anonymous Blade components (no
behavior change) to match the rest of the library's convention rather than
Sidebar's now-deprecated pattern. A new browser-driven test tier (Playwright)
covers geometry that render-only tests can't — popup clipping, focus traps,
viewport edges — and compiled-CSS assertions now guard against the bundle
drifting from its sources.


Every package still shares one version number across all split repos
(composer require bladewindui/calendar, bladewindui/data-grid,
bladewindui/command-palette, etc., or bladewindui/ui for the full install).