LaralCN-UI copy-and-own Blade components

Forms

switch

Toggle switch (Alpine-powered) with optional hidden form input.

Preview

CLI

php artisan ui:add switch

Dependencies

  • npm: alpinejs
  • composer: gehrisandro/tailwind-merge-laravel

Source

@props([
    'name' => null,
    'checked' => false,
    'value' => '1',
])

@php
    $classes = \TailwindMerge\Laravel\Facades\TailwindMerge::merge(
        'peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 ring-offset-background',
        $attributes->get('class'),
    );
@endphp

<button type="button" role="switch" x-data="{ on: @js((bool) $checked) }" x-on:click="on = !on"
    x-bind:aria-checked="on.toString()"
    x-bind:class="on ? 'bg-primary' : 'bg-input'"
    {{ $attributes->except('class')->merge(['class' => $classes]) }}>
    <span
        class="pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform"
        x-bind:class="on ? 'translate-x-5' : 'translate-x-0'"></span>
    @if ($name)
        <input type="hidden" :name="on ? @js($name) : ''"
            value="{{ $value }}" />
    @endif
</button>

Requires Alpine.js. Pass `name` to submit its state in a form.