Skip to main content

General

Infra Panel code

Copy the implementation or inspect every file that belongs to this component unit.

resources/views/components/ui/infra-panel.blade.php

@php
    /*
    | Animated clone of the landing-page infrastructure panel. Renders three
    | columns — Network, Compute and Data — on a grid backdrop. Each column
    | reveals in a stagger as the panel scrolls into view, and the live status
    | indicators (Active / Enabled / Verified) pulse gently.
    |
    | This is a self-contained marketing visual with fixed sample content, mirroring
    | the static section it clones. Honours reduced-motion via the shared
    | data-reveal / animate-dot-pulse utilities.
    |
    | Usage:
    |   <x-ui.infra-panel />
    */
@endphp

<div {{ $attributes->merge(['class' => 'relative overflow-hidden rounded-3xl border border-gray-200 bg-white p-5 shadow-sm sm:p-8 dark:border-gray-800 dark:bg-gray-900 bg-grid']) }}>
    <div class="relative grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3">
        {{-- Network --}}
        <div class="rounded-2xl border border-gray-200 bg-white/90 p-4 shadow-sm backdrop-blur dark:border-gray-700 dark:bg-gray-950/80" data-reveal="up">
            <p class="flex items-center gap-2 text-xs font-medium text-gray-400"><x-ui.icon name="globe-simple" size="sm" /> Network</p>
            <div class="mt-3 rounded-xl border border-gray-200 p-3 dark:border-gray-800">
                <p class="text-sm font-semibold text-gray-900 dark:text-white">Edge network</p>
                <ul class="mt-2 space-y-1.5 text-xs text-gray-500 dark:text-gray-400">
                    <li class="flex items-center justify-between"><span class="flex items-center gap-1.5"><x-ui.icon name="shield-check" size="sm" /> DDoS protection</span><span class="flex items-center gap-1.5 text-green-600 dark:text-green-400"><span class="h-1.5 w-1.5 rounded-full bg-green-500 animate-dot-pulse"></span> Active</span></li>
                    <li class="flex items-center justify-between"><span class="flex items-center gap-1.5"><x-ui.icon name="globe" size="sm" /> CDN</span><span class="flex items-center gap-1.5 text-green-600 dark:text-green-400"><span class="h-1.5 w-1.5 rounded-full bg-green-500 animate-dot-pulse" style="animation-delay: 0.4s"></span> Enabled</span></li>
                    <li class="flex items-center justify-between"><span class="flex items-center gap-1.5"><x-ui.icon name="lightning" size="sm" /> Edge caching</span><span class="flex items-center gap-1.5 text-green-600 dark:text-green-400"><span class="h-1.5 w-1.5 rounded-full bg-green-500 animate-dot-pulse" style="animation-delay: 0.8s"></span> Enabled</span></li>
                </ul>
            </div>
            <div class="mt-3 rounded-xl border border-gray-200 p-3 dark:border-gray-800">
                <p class="text-sm font-semibold text-gray-900 dark:text-white">Domains</p>
                <p class="mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"><span class="flex items-center gap-1.5"><x-ui.icon name="link-simple" size="sm" /> Custom domains</span><span class="text-green-600 dark:text-green-400">Verified</span></p>
                <p class="mt-1 text-xs text-gray-400">beep.today</p>
            </div>
        </div>

        {{-- Compute --}}
        <div class="rounded-2xl border border-gray-200 bg-white/90 p-4 shadow-sm backdrop-blur dark:border-gray-700 dark:bg-gray-950/80" data-reveal="up" data-reveal-delay="120">
            <p class="flex items-center gap-2 text-xs font-medium text-gray-400"><x-ui.icon name="map-pin" size="sm" /> US East (Ohio)</p>
            @foreach ([
                ['cube', 'App cluster', 'Compute', 'Flex 512 MiB'],
                ['queue', 'Managed queue', 'Memory', '256 MiB'],
                ['hard-drives', 'Worker cluster', 'Compute', 'Flex 512 MiB'],
            ] as [$icon, $name, $k, $v])
                <div class="mt-3 rounded-xl border border-gray-200 p-3 dark:border-gray-800">
                    <p class="flex items-center gap-2 text-sm font-semibold text-gray-900 dark:text-white"><x-ui.icon :name="$icon" size="sm" class="text-gray-400" /> {{ $name }}</p>
                    <p class="mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"><span>{{ $k }}</span><span class="font-medium text-gray-700 dark:text-gray-200">{{ $v }}</span></p>
                </div>
            @endforeach
        </div>

        {{-- Data --}}
        <div class="rounded-2xl border border-gray-200 bg-white/90 p-4 shadow-sm backdrop-blur dark:border-gray-700 dark:bg-gray-950/80" data-reveal="up" data-reveal-delay="240">
            <p class="flex items-center gap-2 text-xs font-medium text-gray-400"><x-ui.icon name="database" size="sm" /> Data services</p>
            <div class="mt-3 rounded-xl border border-gray-200 p-3 dark:border-gray-800">
                <p class="text-sm font-semibold text-gray-900 dark:text-white">Beep <span class="font-normal text-gray-400">· Postgres</span></p>
                <p class="mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"><span>Compute</span><span class="font-medium text-gray-700 dark:text-gray-200">Flex 1 GiB</span></p>
            </div>
            <div class="mt-3 rounded-xl border border-gray-200 p-3 dark:border-gray-800">
                <p class="flex items-center gap-2 text-sm font-semibold text-gray-900 dark:text-white"><x-ui.icon name="lightning" size="sm" class="text-brand-500" /> Cache <span class="font-normal text-gray-400">beep_main</span></p>
                <p class="mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"><span>Storage</span><span class="font-medium text-gray-700 dark:text-gray-200">250 MB</span></p>
            </div>
            <div class="mt-3 rounded-xl border border-gray-200 p-3 dark:border-gray-800">
                <p class="flex items-center gap-2 text-sm font-semibold text-gray-900 dark:text-white"><x-ui.icon name="hard-drive" size="sm" class="text-gray-400" /> Global storage</p>
                <p class="mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"><span>Default</span><span class="text-green-600 dark:text-green-400">Private</span></p>
            </div>
        </div>
    </div>
</div>