feat: add small toggle switch for network adapters with improved styling
This commit is contained in:
@@ -133,6 +133,54 @@
|
|||||||
.fw-toggle input:checked + .fw-toggle-slider {
|
.fw-toggle input:checked + .fw-toggle-slider {
|
||||||
animation: fw-toggle-pulse 2s infinite ease-in-out;
|
animation: fw-toggle-pulse 2s infinite ease-in-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Small Toggle for Network Adapters */
|
||||||
|
.fw-toggle-sm {
|
||||||
|
position: relative;
|
||||||
|
width: 44px;
|
||||||
|
height: 24px;
|
||||||
|
cursor: pointer;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
.fw-toggle-sm input {
|
||||||
|
opacity: 0;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
.fw-toggle-slider-sm {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
background: linear-gradient(135deg, #dc2626 0%, #b91c1c 100%);
|
||||||
|
border-radius: 24px;
|
||||||
|
transition: all 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);
|
||||||
|
box-shadow: inset 0 1px 3px rgba(0,0,0,0.2), 0 1px 6px rgba(220, 38, 38, 0.3);
|
||||||
|
}
|
||||||
|
.fw-toggle-slider-sm::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
width: 18px;
|
||||||
|
height: 18px;
|
||||||
|
left: 3px;
|
||||||
|
bottom: 3px;
|
||||||
|
background: linear-gradient(135deg, #ffffff 0%, #f3f4f6 100%);
|
||||||
|
border-radius: 50%;
|
||||||
|
transition: all 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);
|
||||||
|
box-shadow: 0 1px 6px rgba(0,0,0,0.2);
|
||||||
|
}
|
||||||
|
.fw-toggle-sm input:checked + .fw-toggle-slider-sm {
|
||||||
|
background: linear-gradient(135deg, #22c55e 0%, #16a34a 100%);
|
||||||
|
box-shadow: inset 0 1px 3px rgba(0,0,0,0.2), 0 1px 6px rgba(34, 197, 94, 0.3);
|
||||||
|
}
|
||||||
|
.fw-toggle-sm input:checked + .fw-toggle-slider-sm::before {
|
||||||
|
transform: translateX(20px);
|
||||||
|
}
|
||||||
|
.fw-toggle-sm:hover .fw-toggle-slider-sm {
|
||||||
|
filter: brightness(1.1);
|
||||||
|
}
|
||||||
|
.fw-toggle-sm input:disabled + .fw-toggle-slider-sm {
|
||||||
|
opacity: 0.6;
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<div class="space-y-6" x-data="{ pageLoaded: false, activeTab: 'rules' }" x-init="setTimeout(() => pageLoaded = true, 50)">
|
<div class="space-y-6" x-data="{ pageLoaded: false, activeTab: 'rules' }" x-init="setTimeout(() => pageLoaded = true, 50)">
|
||||||
@@ -312,30 +360,23 @@
|
|||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-3">
|
||||||
@if($adapterFirewallStates[$adapter['name']] ?? false)
|
<span class="fw-toggle-label {{ ($adapterFirewallStates[$adapter['name']] ?? false) ? 'fw-toggle-label-enabled' : 'fw-toggle-label-disabled' }}">
|
||||||
<x-proxmox::ui.button
|
{{ ($adapterFirewallStates[$adapter['name']] ?? false) ? 'On' : 'Off' }}
|
||||||
|
</span>
|
||||||
|
<label class="fw-toggle-sm" wire:loading.class="pointer-events-none">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
wire:click="toggleAdapterFirewall('{{ $adapter['name'] }}')"
|
wire:click="toggleAdapterFirewall('{{ $adapter['name'] }}')"
|
||||||
wire:loading.attr="disabled"
|
wire:loading.attr="disabled"
|
||||||
wire:key="adapter-{{ $adapter['name'] }}"
|
wire:key="adapter-{{ $adapter['name'] }}"
|
||||||
variant="danger"
|
{{ ($adapterFirewallStates[$adapter['name']] ?? false) ? 'checked' : '' }}
|
||||||
size="sm"
|
>
|
||||||
icon="ri-close-line">
|
<span class="fw-toggle-slider-sm"></span>
|
||||||
<span wire:loading.remove wire:target="toggleAdapterFirewall('{{ $adapter['name'] }}')">Disable</span>
|
</label>
|
||||||
<span wire:loading wire:target="toggleAdapterFirewall('{{ $adapter['name'] }}')">...</span>
|
<span wire:loading wire:target="toggleAdapterFirewall('{{ $adapter['name'] }}')" class="text-xs text-base/50">
|
||||||
</x-proxmox::ui.button>
|
<span class="fw-loader-sm text-primary"></span>
|
||||||
@else
|
</span>
|
||||||
<x-proxmox::ui.button
|
|
||||||
wire:click="toggleAdapterFirewall('{{ $adapter['name'] }}')"
|
|
||||||
wire:loading.attr="disabled"
|
|
||||||
wire:key="adapter-{{ $adapter['name'] }}"
|
|
||||||
variant="success"
|
|
||||||
size="sm"
|
|
||||||
icon="ri-shield-line">
|
|
||||||
<span wire:loading.remove wire:target="toggleAdapterFirewall('{{ $adapter['name'] }}')">Enable</span>
|
|
||||||
<span wire:loading wire:target="toggleAdapterFirewall('{{ $adapter['name'] }}')">...</span>
|
|
||||||
</x-proxmox::ui.button>
|
|
||||||
@endif
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endforeach
|
@endforeach
|
||||||
|
|||||||
Reference in New Issue
Block a user