@props([
'variant' => 'solid',
'size' => 'md',
'type' => 'button',
'square' => false,
'loading' => false,
'href' => null,
// Full-document pages (Lab, auth, etc.) must opt out — wire:navigate breaks them.
'navigate' => true,
])
@php
$sizes = match ($size) {
'xs' => 'h-8 min-h-8 max-h-8 px-3 text-xs gap-1.5',
'sm' => 'h-9 min-h-9 max-h-9 px-3.5 text-sm gap-1.5',
'lg' => 'h-12 min-h-12 max-h-12 px-5 text-base gap-2',
default => 'h-10 min-h-10 max-h-10 px-4 text-sm gap-2',
};
$squares = match ($size) {
'xs' => 'size-8',
'sm' => 'size-9',
'lg' => 'size-12',
default => 'size-10',
};
$variants = match ($variant) {
'outline' => 'border-krikkit-line bg-transparent text-krikkit-fg hover:bg-krikkit-soft/70',
'ghost' => 'border-transparent bg-transparent text-krikkit-fg-soft hover:bg-krikkit-soft',
'danger' => 'border-red-600 bg-red-600 text-krikkit-on-fill hover:border-red-700 hover:bg-red-700',
'subtle' => 'border-krikkit-soft bg-krikkit-soft text-krikkit-fg',
// Inverse solid (not theme accent) — rare; prefer default/primary for actions.
'fill' => 'border-krikkit-fill bg-krikkit-fill text-krikkit-on-fill hover:opacity-90',
// Default + primary = Settings → Themes accent (red/blue/… + dark flip).
'primary', 'solid' => 'border-accent bg-accent text-accent-foreground hover:opacity-90',
default => 'border-accent bg-accent text-accent-foreground hover:opacity-90',
};
$classes = [
'inline-flex shrink-0 cursor-pointer items-center justify-center rounded-full border border-solid box-border py-0 font-medium leading-none whitespace-nowrap transition outline-none',
'focus-visible:ring-2 focus-visible:ring-krikkit-fg/15',
'disabled:pointer-events-none disabled:opacity-50',
$square ? $squares : $sizes,
$variants,
];
@endphp
@if ($href)
class($classes) }}
>{{ $slot }}
@else
@endif