Ask AI about this page

Introduction

The Select component is a versatile, accessible dropdown selection component with advanced features like search, multi-selection, and customizable styling. It provides a modern alternative to native select elements with enhanced user experience and seamless Livewire integration.

Installation

Use the fluxtor artisan command to install the select component easily:

php artisan fluxtor:install select

Once installed, you can use the <x-ui.select /> component in any Blade view.

Usage

Bind To Livewire

To use with Livewire you only need to use wire:model="property" to bind your input state:

<x-ui.select 
    wire:model="country"
    label="Select Country" 
    placeholder="Choose a country..."
    >
        <x-ui.select.option value="us">United States</x-ui.select.option>
        <x-ui.select.option value="uk">United Kingdom</x-ui.select.option>
        <x-ui.select.option value="ca">Canada</x-ui.select.option>
        <x-ui.select.option value="au">Australia</x-ui.select.option>
        <x-ui.select.option value="de">Germany</x-ui.select.option>
        <x-ui.select.option value="fr">France</x-ui.select.option>
</x-ui.select>

Using it within Blade & Alpine

You can use it outside Livewire with just Alpine (and Blade):

<div x-data="{ country: '' }">
    <x-ui.select 
        x-model="country"
        label="Select Country" 
        placeholder="Choose a country..."
        >
            <x-ui.select.option value="us">United States</x-ui.select.option>
            <x-ui.select.option value="uk">United Kingdom</x-ui.select.option>
            <x-ui.select.option value="ca">Canada</x-ui.select.option>
            <x-ui.select.option value="au">Australia</x-ui.select.option>
            <x-ui.select.option value="de">Germany</x-ui.select.option>
            <x-ui.select.option value="fr">France</x-ui.select.option>
    </x-ui.select>
</div>

Basic Select

Select Country

<x-ui.select 
    label="Select Country" 
    placeholder="Choose a country..."
    wire:model="selectedCountry">
        <x-ui.select.option value="us">United States</x-ui.select.option>
        <x-ui.select.option value="uk">United Kingdom</x-ui.select.option>
        <x-ui.select.option value="ca">Canada</x-ui.select.option>
        <x-ui.select.option value="au">Australia</x-ui.select.option>
        <x-ui.select.option value="de">Germany</x-ui.select.option>
        <x-ui.select.option value="fr">France</x-ui.select.option>
</x-ui.select>

Select with Icons

Enhance the select with leading icons and option-specific icons for better visual communication.

Select Status

<x-ui.select 
    label="Select Status" 
    placeholder="Choose status..."
    icon="flag"
    wire:model="selectedStatus">
        <x-ui.select.option value="active" icon="check-circle">Active</x-ui.select.option>
        <x-ui.select.option value="pending" icon="clock">Pending</x-ui.select.option>
        <x-ui.select.option value="inactive" icon="x-circle">Inactive</x-ui.select.option>
        <x-ui.select.option value="archived" icon="archive-box">Archived</x-ui.select.option>
</x-ui.select>

Searchable Select

Add search functionality to easily find options in large lists.

Search Cities

Search through cities worldwide

<x-ui.select 
    label="Search Cities" 
    placeholder="Find a city..."
    icon="map-pin"
    searchable
    description="Search through cities worldwide"
    wire:model="selectedCity">
        <x-ui.select.option value="nyc">New York City</x-ui.select.option>
        <x-ui.select.option value="london">London</x-ui.select.option>
        <x-ui.select.option value="paris">Paris</x-ui.select.option>
        <x-ui.select.option value="tokyo">Tokyo</x-ui.select.option>
        <x-ui.select.option value="sydney">Sydney</x-ui.select.option>
        <x-ui.select.option value="berlin">Berlin</x-ui.select.option>
</x-ui.select>

Multiple Selection

Allow users to select multiple options with visual feedback.

Select Skills

Select all skills that apply

<x-ui.select 
    label="Select Skills" 
    placeholder="Choose your skills..."
    icon="academic-cap"
    multiple
    clearable
    description="Select all skills that apply"
    wire:model="selectedSkills">
        <x-ui.select.option value="php" icon="code-bracket">PHP</x-ui.select.option>
        <x-ui.select.option value="javascript" icon="bolt">JavaScript</x-ui.select.option>
        <x-ui.select.option value="python" icon="variable">Python</x-ui.select.option>
        <x-ui.select.option value="react" icon="cube">React</x-ui.select.option>
        <x-ui.select.option value="vue" icon="sparkles">Vue.js</x-ui.select.option>
        <x-ui.select.option value="laravel" icon="academic-cap">Laravel</x-ui.select.option>
</x-ui.select>reduxui

Searchable Multiple Selection

Combine search functionality with multiple selection for the best user experience.

Select Team Members

Search and select team members

<x-ui.select 
    label="Select Team Members" 
    placeholder="Search and select members..."
    icon="users"
    searchable
    multiple
    clearable
    description="Search and select team members"
    wire:model="selectedMembers">
        <x-ui.select.option value="john" icon="user">John Doe</x-ui.select.option>
        <x-ui.select.option value="jane" icon="user">Jane Smith</x-ui.select.option>
        <x-ui.select.option value="mike" icon="user">Mike Johnson</x-ui.select.option>
        <x-ui.select.option value="sarah" icon="user">Sarah Wilson</x-ui.select.option>
        <x-ui.select.option value="david" icon="user">David Brown</x-ui.select.option>
        <x-ui.select.option value="lisa" icon="user">Lisa Davis</x-ui.select.option>
</x-ui.select>

Validation States

Show different states for validation feedback.

Valid Selection

Invalid Selection

Please select a valid option

<!-- Valid state -->
<x-ui.select 
    label="Valid Selection" 
    placeholder="Choose option..."
    icon="check-circle"
    wire:model="validSelection">
        <x-ui.select.option value="option1">Valid Option 1</x-ui.select.option>
        <x-ui.select.option value="option2">Valid Option 2</x-ui.select.option>
</x-ui.select>

<!-- Invalid state -->
<x-ui.select 
    label="Invalid Selection" 
    placeholder="Choose option..."
    icon="exclamation-circle"
    invalid="true"
    description="Please select a valid option"
    wire:model="invalidSelection">
        <x-ui.select.option value="option1">Option 1</x-ui.select.option>
        <x-ui.select.option value="option2">Option 2</x-ui.select.option>
</x-ui.select>

Disabled State

Disabled Select

<x-ui.select 
    label="Disabled Select" 
    placeholder="This is disabled..."
    disabled
    wire:model="disabledValue">
        <x-ui.select.option value="option1">Option 1</x-ui.select.option>
        <x-ui.select.option value="option2">Option 2</x-ui.select.option>
</x-ui.select>

Customization

Custom Trigger Classes

Custom Styled

<x-ui.select 
    label="Custom Styled" 
    triggerClass="bg-blue-300!  border-blue-500! text-gray-800! focus:border-blue-500"
    placeholder="Choose option..."
    wire:model="customValue">
        <x-ui.select.option value="option1">Option 1</x-ui.select.option>
        <x-ui.select.option value="option2">Option 2</x-ui.select.option>
</x-ui.select>

Custom Option Icons

Priority Level

<x-ui.select 
    label="Priority Level" 
    placeholder="Select priority..."
    checkIcon="check-badge"
    wire:model="priority">
        <x-ui.select.option value="high" icon="exclamation-triangle" >High Priority</x-ui.select.option>
        <x-ui.select.option value="medium" icon="minus-circle">Medium Priority</x-ui.select.option>
        <x-ui.select.option value="low" icon="chevron-down">Low Priority</x-ui.select.option>
</x-ui.select>

Component Props

Select Component

Prop Name Type Default Required Description
name string wire:model No Name attribute (auto-detected from wire:model)
label string '' No Label text displayed above the select
placeholder string 'select...' No Placeholder text for the trigger button
description string '' No Helper text displayed below the select
variant string 'native' No Visual variant (currently only native supported)
error string '' No Error message to display
searchable boolean false No Whether to enable search functionality
filter boolean false No Whether to enable filtering (legacy prop)
multiple boolean false No Whether to allow multiple selections
clearable boolean false No Whether to show a clear button
disabled boolean false No Whether the select is disabled
icon string '' No Leading icon name
checkIcon string check No Icon shown when option is selected
checkIconClass string '' No Additional CSS classes for the check icon
iconTrailing string 'chevron-up-down' No Trailing icon name
invalid boolean null No Whether to show invalid/error state styling
triggerClass string '' No Additional CSS classes for the trigger button
slot mixed '' Yes Select options using <x-ui.select.option> components

Select Option Component

Prop Name Type Default Required Description
value string '' Yes Value of the option
label string null No Label for the option (defaults to slot content)
icon string '' No Leading icon for the option
iconClass string '' No Additional CSS classes for the option icon
slot mixed '' No Option content (used as value if no value specified)

Component Structure

The select component is built with multiple sub-components:

  • Main Component: <x-ui.select> - The wrapper component
  • Options Container: <x-ui.select.options> - Contains all option items
  • Option Item: <x-ui.select.option> - Individual selectable option
  • Trigger: <x-ui.select.trigger> - The clickable trigger button (internal)

Advanced Examples

Dynamic Options with Livewire

// In your Livewire component
public $selectedCategories = [];
public $categories = [
    'web' => 'Web Development',
    'mobile' => 'Mobile Development',
    'design' => 'UI/UX Design',
    'backend' => 'Backend Development',
];
<x-ui.select 
    label="Select Categories" 
    placeholder="Choose categories..."
    multiple
    searchable
    clearable
    wire:model="selectedCategories">
        @foreach($categories as $value => $label)
            <x-ui.select.option value="{{ $value }}">{{ $label }}</x-ui.select.option>
        @endforeach
</x-ui.select>

Conditional Options

<x-ui.select 
    label="Select Plan" 
    placeholder="Choose a plan..."
    wire:model="selectedPlan">
        <x-ui.select.option value="free" icon="gift">Free Plan</x-ui.select.option>
        <x-ui.select.option value="pro" icon="star">Pro Plan</x-ui.select.option>
        @if($user->isEnterprise())
            <x-ui.select.option value="enterprise" icon="building-office">Enterprise Plan</x-ui.select.option>
        @endif
</x-ui.select>

© FLuxtor Copyright 2024-2025. All rights reserved.