61 lines
2.6 KiB
PHP
61 lines
2.6 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace App\View\Form;
|
||
|
|
||
|
use App\View\Traits\HasFormDimensions;
|
||
|
use Illuminate\View\Component;
|
||
|
|
||
|
class Lever extends Component
|
||
|
{
|
||
|
|
||
|
use HasFormDimensions;
|
||
|
|
||
|
public string $id;
|
||
|
|
||
|
public function __construct(
|
||
|
public string $name,
|
||
|
public string $size = 'default',
|
||
|
public $value = null,
|
||
|
public ?string $hint = null,
|
||
|
public bool $disabled = false,
|
||
|
public bool $required = false,
|
||
|
public string $label = '',
|
||
|
) {
|
||
|
$this->id = str()->uuid()->toString();
|
||
|
}
|
||
|
|
||
|
public function render()
|
||
|
{
|
||
|
return <<<'HTML'
|
||
|
<label class="flex flex-col items-start group {{$heightClass}} " for="{{$id}}" style="{{$heightVars}}">
|
||
|
@if ($label)
|
||
|
<x-form::label :required="$required">{{$label}}</x-form::label>
|
||
|
@endif
|
||
|
<span class="relative flex-none flex h-[var(--height)] @if($hint) pr-8 @endif">
|
||
|
<input id="{{$id}}" type="checkbox" name="{{$name}}" value="{{$value}}" @if($disabled) disabled="disabled" @endif class="absolute peer opacity-0" {{ $attributes }} />
|
||
|
<span class="relative cursor-pointer h-full w-[calc(var(--height)*2)] rounded peer-focus:bg-red-500 duration-300 bg-gray-700 peer-checked:bg-primary-700"></span>
|
||
|
<span class="absolute h-full top-0 left-0 flex-none flex justify-center items-center aspect-square">
|
||
|
<x-ui::sprite
|
||
|
class="relative text-gray-400 flex-none text-white duration-300 group-[.size-default]:size-3 group-[.size-sm]:size-2"
|
||
|
src="check"
|
||
|
></x-ui::sprite>
|
||
|
</span>
|
||
|
<span class="absolute h-full top-0 left-[var(--height)] flex-none flex justify-center items-center aspect-square">
|
||
|
<x-ui::sprite
|
||
|
class="relative text-gray-400 flex-none text-white duration-300 group-[.size-default]:size-3 group-[.size-sm]:size-2"
|
||
|
src="close"
|
||
|
></x-ui::sprite>
|
||
|
</span>
|
||
|
<var class="absolute duration-300 bg-gray-400 rounded
|
||
|
top-[var(--padding)] left-[var(--padding)]
|
||
|
size-[calc(var(--height)-var(--padding)*2)] peer-checked:left-[calc(var(--height)+var(--padding))]"
|
||
|
></var>
|
||
|
@if($hint)
|
||
|
<x-form::hint>{{$hint}}</x-form::hint>
|
||
|
@endif
|
||
|
</span>
|
||
|
</label>
|
||
|
HTML;
|
||
|
}
|
||
|
}
|