Skip to content

Releases: bladewindui/ui

v5.0.0

Choose a tag to compare

@mkocansey mkocansey released this 31 Aug 22:31

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).

v4.3.0

Choose a tag to compare

@mkocansey mkocansey released this 10 Aug 12:21

BladewindUI 4.3.0 adds descriptions and type-to-jump to <x-bladewind::select>, an animated underline for simple tabs, Laravel 13 support, and a batch of UI fixes. It also repairs the service provider declarations in the individual component packages — if you install single components rather than the full library, this release is a required upgrade.

composer require mkocansey/bladewind:^4.3

No breaking changes. Upgrading from 4.2.x is a drop-in.


✨ New

Select items can carry a description

Items now take an optional second line under the label. Descriptions are part of an item's searchable text, so filtering matches on them too.

{{-- manual items --}}
<x-bladewind::select name="plan">
    <x-bladewind::select.item value="pro" label="Pro"
                              description="Unlimited projects, priority support" />
    <x-bladewind::select.item value="free" label="Free"
                              description="One project, community support" />
</x-bladewind::select>

For data-driven selects, point description_key at the relevant key:

{{-- data: [ ["id" => 1, "name" => "Burkina Faso", "capital" => "Ouagadougou"], ... ] --}}
<x-bladewind::select name="country"
                     :data="$countries"
                     value_key="id"
                     label_key="name"
                     description_key="capital" />

Closes #255.

Type to jump to a select item

Typing a printable character while a select has focus jumps to the first item whose label starts with what you typed — without opening the dropdown. The buffer clears after a short pause, keystrokes inside the search box are ignored, and an item already chosen in a multiple select is not toggled off.

Arrow-key navigation now stops at either end of the list instead of running past it and writing an empty value.

Closes #474.

Simple tabs get a sliding underline

The per-heading bottom border on simple tabs is replaced by a single line that animates to the active heading. It positions itself on load, on resize, and — via ResizeObserver — when a tab group inside a modal, accordion, or another tab becomes visible for the first time. No markup changes needed.

Code inputs fill on paste

Pasting a multi-character code into an <x-bladewind::code> field distributes the characters across the boxes instead of dropping everything into the first one.

Laravel 13

illuminate/support now allows ^13.0, alongside ^10.0, ^11.0 and ^12.0.


🐛 Fixes

Dropmenu

  • Menus use fixed positioning with auto-flip, so they escape overflow: hidden ancestors instead of being clipped, and reposition on scroll and resize while open.
  • hide_after_click works again. Item clicks are bound once (no duplicate handlers on reopen) and the hide is deferred a tick so an inline onclick or a link navigation still runs. The attribute now accepts true, 1, "1" and "true".
  • Outside-click detection moved to mousedown and no longer mis-fires on the menu itself.

Toggle

  • Active colours render again. The peer-checked:bg-* classes were built by string interpolation, which Tailwind's JIT scanner cannot see; they are now a static map covering all supported colours.
  • The thumb stays inside the track at every bar size, with RTL handled.

Other components

  • Checkcards: checkmark alignment.
  • Rating: star alignment.
  • Icon: hidden icons stay hidden.
  • Input: lighter borders.
  • Number, progress bar: centred labels.

📦 Packaging

Service provider class names fixed in 35 split packages. The extra.laravel.providers entry in each component's own composer.json named a class that does not exist. The monorepo never exercises those entries — the root composer.json has its own list — so this was invisible to anyone installing the full library, and a boot-time fatal for anyone installing a component on its own (composer require mkocansey/bladewind-table and friends). A bin/validate-providers.php check now runs in CI and verifies all 92 declarations resolve.

Stale per-package public/ directories removed. Several packages shipped a second copy of a JS file that nothing ever published — the copy of select.js in packages/select/public had been missing a filter() fix for two releases. All published assets live in packages/core/public and are published by BladewindCoreServiceProvider under the bladewind-public tag. Every component requires bladewind-core, so installing a single component still gets the assets.

If you publish assets, re-publish after upgrading:

php artisan vendor:publish --tag=bladewind-public --force

Full changelog: mkocansey/bladewind@v4.2.1...4.3.0

v4.2.1

Choose a tag to compare

@mkocansey mkocansey released this 22 Jun 01:48

This release adds three new components, input masking, and several packaging improvements since v4.1.0. (

New Components

  • Sortable — drag-and-drop sortable lists powered by SortableJS. Supports shared lists, cloning, drag handles, item filtering, multi-drag, and swap mode, with built-in form-submission/order persistence. mkocansey/bladewind-sortable
  • Popover — click/hover popovers with positioning and rich content. mkocansey/bladewind-popover
  • Tooltip — lightweight tooltips. mkocansey/bladewind-tooltip

New Features

  • Input masking on the Input component, modelled on the Alpine.js mask plugin:
    • Static templates with 9 (digit), a (letter), and * (alphanumeric) wildcards, e.g. mask="(999) 999-9999".
    • Dynamic masks via dynamicMask, including a built-in creditCard mask (Amex / Diners / Visa-style) that needs no JavaScript.
    • Money formatting via money="true" with configurable decimal/thousands separators and precision.

Changes & Improvements

  • Bell and Notification are now their own installable packages (mkocansey/bladewind-bell, mkocansey/bladewind-notification), previously bundled with the Alert package.
  • Public assets relocated to the core package (mkocansey/bladewind-core) and the compiled CSS rebuilt.
  • The required-field asterisk now only shows when a placeholder is present.
  • Added README files across all packages.
  • Build/dev dependency bumps (qs, express, serialize-javascript, terser-webpack-plugin).

Installation

composer require mkocansey/bladewind            # full library
composer require mkocansey/bladewind-sortable   # just the new Sortable component
composer require mkocansey/bladewind-popover
composer require mkocansey/bladewind-tooltip

After updating, republish assets to pick up the rebuilt CSS/JS:

php artisan vendor:publish --tag=bladewind-public --force

Full changelog: mkocansey/bladewind@v4.1.0...v4.2.1

v4.1.0

Choose a tag to compare

@mkocansey mkocansey released this 08 Jun 13:31

Individual component packages are now available

This release fixes the CI pipeline that splits each packages/* directory into its own installable repo. All 43 individual component packages (mkocansey/bladewind-button, mkocansey/bladewind-table, mkocansey/bladewind-accordion, etc.) are published and installable from Packagist**, alongside the full mkocansey/bladewind package.

If you only need a handful of components, you can now install just what you use:

composer require mkocansey/bladewind-accordion
composer require mkocansey/bladewind-table

…or pull in everything as before:

composer require mkocansey/bladewind

Fixed

  • Split-package publishing was silently broken since the restructuring. The GitHub Action responsible for mirroring each packages/* directory into its own repo was passing the access token through an input the action doesn't support, causing every job to report "success" while pushing nothing. Fixed by passing the token via the correct environment variable. (#3e07eda)
  • Split repos were never receiving version tags, so Packagist had no releases to register even once content started landing. The workflow now passes the triggering tag through to each split destination. (#13f84ae)

Removed

  • Permanently removed the workflow entry that would have split packages/meta into a repo named bladewind — that name belongs to this monorepo's own GitHub remote, and the entry being live caused a serious incident where the split action force-overwrote this repo's main branch with just three files.

Docs

  • Corrected RELEASING.md: fixed an incorrect repo-name reference and replaced an inaccurate claim about how mkocansey/bladewind resolves on Packagist with an accurate description of the architecture, plus a prominent warning against ever naming a split target bladewind. (#bcfca0a)

Internal

  • Bumped inter-package version constraints from ^4.0 to ^4.1 to start the next development iteration, per the standard monorepo-builder release flow. (#b49028b)

Full changelog: [v4.0.0...v4.1.0](https://github.com/mkocansey/bladewind/compare/v4.0.0...v4.1.0)

v3.3.0

Choose a tag to compare

@mkocansey mkocansey released this 01 Dec 15:05
5d3379d

Release Notes

Enhanced Button and Table Components with Icon Type Support

This release introduces improved support for icon types within the BladeWind components library. The following enhancements and changes have been made:

Improvements

  • Table Component
    • Added support for specifying icon types (solid or outline) on action buttons in data tables.
    • button_outline allows you to opt either for outlined or filled action buttons.
    • The action icons are now defined as an array instead of strings separated by pipes. The pipes approach will be supported till v4.0

Before...

$action_icons = [
    "icon:chat | tip:send message | color:green | click:sendMessage('{first_name}')",
    "icon:pencil | click:redirect('/user/{id}')",
    "icon:trash | color:red | click:deleteUser({id}, '{first_name}')",
];

Now...

$action_icons = [
    [
        'icon'  => 'chat',
        'icon_type' => 'solid',
        'tip'   => 'send message',
        'color' => 'green',
        'click' => "sendMessage('{first_name}')",
    ],
    [
        'icon'  => 'pencil',
        'click' => "redirect('/user/{id}')",
    ],
    [
        'icon'  => 'trash',
        'color' => 'red',
        'click' => "deleteUser({id}, '{first_name}')",
    ],
];
  • Card and Statistics Component
    • Both components have been refactored to support radius to change how rounded the components look.

v3.2.0

Choose a tag to compare

@mkocansey mkocansey released this 20 Nov 23:13
4f565e6

Release Notes

This release includes the following enhancements and improvements:

  • Table Component Enhancements:

    • Refined table styles in table.css and the Blade table component to improve appearance and consistency, ensuring a more polished and user-friendly interface.
    • The search input for searchable tables can now be placed anywhere else on the page. This allows you to place the input probably next to other components. #540
  • Accordion Improvements:

    • Introduced a new contentCanClose prop for accordion components, providing better control over content closing behavior.
  • Table OnClick Handling:

    • Refactored the table and table-icons components: Moved row onclick handlers to individual table cells for more granular event management, and now the onclick prop is also passed to table-icons. Action icons will no longer trigger custom onclick functions.

For more details, see the merged pull request: Merge development into main (#553) and the related commits:

Full Changelog: mkocansey/bladewind@v3.1.7...v3.2.0

v3.1.7

Choose a tag to compare

@mkocansey mkocansey released this 20 Nov 18:50
fbdae1a

Release Notes

Summary

This release introduces several UI improvements and new features across Bladewind components, focusing on enhanced customization, consistency, and flexibility. Key changes include the addition of configurable border radius options for cards and modals, improved shadow and border styling, advanced accordion spacing options, enhanced pagination with dynamic support, and various minor tweaks for usability and appearance.

Notable Changes

UI Customization and Consistency

  • Added a new getRadiusString helper function to standardize border radius classes.
  • Updated card and modal components to support configurable radius options for more consistent and customizable rounded corners.
  • Improved shadow and border colors for card and statistic components—visuals are more neutral and consistent.
  • Enhanced card component hover effects for a better user experience.

Accordion Component Enhancements

  • Introduced a noPadding option for accordion components to allow more control over internal spacing.
  • Adjusted internal padding and updated property naming for "can open multiple" functionality to improve consistency.

Minor Component Updates

  • Updated placeholder rendering in the filepicker component to display a required icon when appropriate by @ntbutler-nbcs.
  • Tweaked icon and spacing styles in accordion items for better appearance.
  • Added more Tailwind border radius classes to the precompiled CSS for expanded styling support.

Configuration Updates

  • Default border radius settings for buttons, cards, and modals in config/bladewind.php have been updated to match new customization options.

Full Changelog: mkocansey/bladewind@v3.1.6...v3.1.7

v3.1.6

Choose a tag to compare

@mkocansey mkocansey released this 27 Oct 12:41
e5cd988

Release Notes

This release includes important bug fixes and improvements for file handling and table action parsing in Blade components.

File Picker Plugin Registration Improvements

  • FilePond image plugins, including FilePondPluginImageExifOrientation, are now registered only when $hasImageFiles is true.
  • This prevents unnecessary plugin loading and reduces the risk of errors in file picker functionality.
  • Relevant changes: resources/views/components/filepicker.blade.php

Table Action Parsing and Modal Placeholder Fixes

  • Action strings in tables are now split using explode(':', $this_action, 2), limiting the split to two parts. This ensures parameters containing colons are parsed correctly, preventing modal action errors.
  • The build_click function has been updated to accurately match and replace modal placeholder values wrapped in single quotes, improving data binding for table actions.
  • Relevant changes: resources/views/components/table.blade.php

New Contributors

Full Changelog: mkocansey/bladewind@v3.1.5...v3.1.6

v3.1.5

Choose a tag to compare

@mkocansey mkocansey released this 24 Aug 20:22
909dd31

Release Notes

JavaScript: Select Component Filtering and Reset Logic

  • Added a skipReset property to the BladewindSelect class for more granular control over reset behavior during filtering.
  • Updated the filter method signature to accept a skipReset parameter.
  • Refactored the select method to prevent unnecessary instantiation and resetting of related select components via the new skipReset flag.
  • Blade component usage now passes the skipReset argument (false) to the filter method for correct UI reset behavior.

Blade: Table Component Row Interactivity

  • Table row rendering now adds a cursor-pointer class and an onclick handler when the $onclick variable is set, making rows clickable for improved UX.
  • A temporary @dump($row) statement is included for debugging and inspecting row data during development.

For the complete list of changes and code details, see the merged PR: #532.

Other Changes

Full Changelog: mkocansey/bladewind@v3.1.4...v3.1.5

v3.1.4

Choose a tag to compare

@mkocansey mkocansey released this 27 Jul 21:17
31cea05

Release Notes

The updates include improvements and cleanups across JavaScript, CSS, and Blade components to enhance consistency, styling, accessibility, and dark mode support throughout the BladewindUI library.

Key Changes

JavaScript

  • Refactor: Removed unused changeCss calls from public/js/select.js for cleaner code.
  • Improvement: Updated the labelTemplate function to better support dark mode and refine SVG icon styling.

CSS

  • Input & Select Styling:

    • Replaced text-slate/border-slate with text-gray/border-gray for better design consistency.
    • Improved dark mode styling for inputs and selects, adjusting opacity and colors.
  • Table Styling:

    • Enhanced borders and hover effects in dark mode.
    • Improved text and background colors for readability.
  • Tabs Styling:

    • Refined border and text colors in dark mode.
    • Increased font size for better accessibility.

Blade Components

  • Button & Checkbox:

    • Added dark mode-specific text and border colors for better appearance.
  • Modal & Pagination:

    • Improved overflow handling.
    • Adjusted borders for dark mode.
  • Select:

    • Improved focus and placeholder text styles for dark mode.

User Experience Improvements

  • Consistent styling and color use across all components.
  • Better accessibility and readability, especially in dark mode.
  • Codebase cleanup for easier future maintenance.

Additional Information

  • This is a summary of the most recent merged PR. There are 278 merged PRs in total for this repository.
  • To view more merged PRs, see: All merged PRs in mkocansey/bladewind
  • The results above are incomplete due to GitHub API limits; for full history, use the link above.