vlados/cascader
A cascading dropdown for Laravel Livewire and Alpine.js, inspired by Ant Design's Cascader. It renders a two-column desktop dropdown with search and a mobile bottom sheet, supports light and dark mode, two-level option arrays, and standard wire:model binding.
wire:model binding was completely broken — the Blade template passed modelValue to the Alpine component, which still expected the old selectedValue/initialText params, so the entangle object was discarded and selections never synced to Livewire. The Alpine component now owns a single modelValue (with selectedValue as a deprecated alias), derives the trigger label from the options, and follows server-side value changes. (#1)IconResolver — icon names and colors were concatenated into the template string passed to Blade::render() and into style attributes. Blade components now render through x-dynamic-component with values passed as data, icon names are validated, and colors are sanitized. Rendered icons are also memoized per request. (#2)wire:model modifier chains (e.g. wire:model.live.debounce.500ms) are detected correctly and no longer leak onto the root element. (#4)labelField now takes priority over a hard-coded label key; values like 0 can be selected and confirmed. (#7)resize/scroll listeners are removed on component destroy, fixing a leak with wire:navigate. (#8)color-mix()), and the wrong dialog remaining open when crossing the mobile breakpoint. (#9)selected-text prop works again and the deprecated wire-model prop binds again as a fallback; both had been silently ignored. Prefer the standard wire:model attribute. (#1)alpine:init when Alpine has not started yet. (#11)composer.json declares illuminate/view/illuminate/contracts, real author metadata and Packagist keywords. (#10)How can I help you explore Laravel packages today?