Components
Segmented Control
An iOS-style segmented control for picking one option from a small set.
php artisan blatui:add segmented-control
<x-ui.segmented-control
name="view"
value="list"
:options="[
['value' => 'list', 'label' => 'List'],
['value' => 'grid', 'label' => 'Grid'],
['value' => 'board', 'label' => 'Board'],
]"
/>
Sizes
@php
$options = [
['value' => 'day', 'label' => 'Day'],
['value' => 'week', 'label' => 'Week'],
['value' => 'month', 'label' => 'Month'],
];
@endphp
<div class="flex flex-col items-start gap-3">
<x-ui.segmented-control size="sm" value="week" :options="$options" />
<x-ui.segmented-control value="week" :options="$options" />
<x-ui.segmented-control size="lg" value="week" :options="$options" />
</div>
With Icons
<x-ui.segmented-control
name="layout"
value="grid"
:options="[
['value' => 'list', 'label' => 'List', 'icon' => 'list'],
['value' => 'grid', 'label' => 'Grid', 'icon' => 'layout-grid'],
['value' => 'board', 'label' => 'Board', 'icon' => 'columns-3'],
]"
/>
Using with Livewire
wire:model
The examples above are the frontend (Blade + Alpine) usage. Inside a Livewire component, bind
wire:model for two-way
state — same component, no wrappers.
Full Livewire guide →
app/Livewire/Demo.php
use Livewire\Component;
class Demo extends Component
{
public string $view = 'list';
public function render()
{
return view('livewire.demo');
}
}
resources/views/livewire/demo.blade.php
<x-ui.segmented-control wire:model="view" :options="['list' => 'List', 'grid' => 'Grid']" />
API Reference
Props, slots and exposed methods for
<x-ui.segmented-control>.
Props
| Prop | Type | Default | Description |
|---|---|---|---|
options* |
array
|
[]
|
The segments to render. Each entry may be a plain string (used as both value and label) or an associative array with value, label, and an optional icon. See Each option below. |
value |
string
|
— | The value of the segment that starts selected, matched against each option's value. |
name |
string
|
— | Form field name for the underlying radio group; the selection submits with a form. A random name is generated when omitted. |
size |
string
|
'default'
|
Height and padding of the control.
sm
default
lg
|
disabled |
bool
|
false
|
Disables every segment so the selection cannot change. |
* Required.
Each option
| Prop | Type | Default | Description |
|---|---|---|---|
value* |
string
|
— | The submitted value for this segment. Falls back to label when omitted. |
label |
string
|
— | Visible text for the segment. Falls back to value when omitted. |
icon |
string
|
— | Optional Lucide icon name (e.g. "list") shown before the label. |