Files
Virtnet.bond/extensions/Servers/Proxmox/views/index.blade.php

54 lines
2.4 KiB
PHP

<div class="flex flex-col flex-1" style="min-height: calc(100vh - 30rem);">
<style>
@keyframes cardEntrance {
from {
opacity: 0;
transform: translateY(12px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.server-card-enter {
animation: cardEntrance 0.4s ease-out both;
}
</style>
<div class="pb-6 space-y-4">
<span class="text-2xl font-bold">Servers</span>
@if(count($servers) > 1)
<div class="relative w-full sm:w-80" x-data="{ search: '' }">
<div class="absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none">
<svg class="size-4 text-base/60" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/>
</svg>
</div>
<input type="text"
x-model="search"
@input="
document.querySelectorAll('[data-server-card]').forEach(card => {
const name = (card.dataset.serverName || '').toLowerCase();
const ip = (card.dataset.serverIp || '').toLowerCase();
const q = search.toLowerCase().trim();
card.style.display = (!q || name.includes(q) || ip.includes(q)) ? '' : 'none';
});
"
placeholder="Filter servers..."
class="w-full pl-11 pr-3 py-2.5 text-sm rounded-lg border border-neutral bg-background focus:outline-none focus:ring-1 focus:ring-primary focus:border-primary placeholder:text-base/40" />
</div>
@endif
</div>
<div class="flex flex-col gap-4 flex-1">
@foreach($servers as $index => $server)
<div class="server-card-enter"
style="animation-delay: {{ min($index * 80, 800) }}ms"
data-server-card
data-server-name="{{ $server->hostname ?? $server->service->product->name ?? '' }}"
data-server-ip="{{ $server->primaryIpv4->ip ?? '' }}">
<livewire:proxmox.server :server="$server" wire:key="proxmox-server-{{ $server->id }}" lazy />
</div>
@endforeach
</div>
</div>