diff --git a/frontend-modern/src/components/Alerts/ResourceTable.tsx b/frontend-modern/src/components/Alerts/ResourceTable.tsx index 40f51bb..8c691c0 100644 --- a/frontend-modern/src/components/Alerts/ResourceTable.tsx +++ b/frontend-modern/src/components/Alerts/ResourceTable.tsx @@ -398,10 +398,10 @@ export function ResourceTable(props: ResourceTableProps) { > {displayText} @@ -483,6 +483,7 @@ export function ResourceTable(props: ResourceTableProps) { padding="none" class="overflow-hidden border border-gray-200 dark:border-gray-700" border={false} + tone="glass" >
@@ -591,8 +592,8 @@ export function ResourceTable(props: ResourceTableProps) { } }} class={`w-16 px-2 py-0.5 text-sm text-center border rounded ${isOff() - ? 'border-gray-300 dark:border-gray-600 bg-gray-100 dark:bg-gray-800 text-gray-400 dark:text-gray-500 italic placeholder:text-gray-400 dark:placeholder:text-gray-500 placeholder:opacity-60 pointer-events-none' - : 'border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:border-blue-500 focus:ring-1 focus:ring-blue-500' + ? 'border-gray-300 dark:border-gray-600 bg-gray-100 dark:bg-gray-800 text-gray-400 dark:text-gray-500 italic placeholder:text-gray-400 dark:placeholder:text-gray-500 placeholder:opacity-60 pointer-events-none' + : 'border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:border-blue-500 focus:ring-1 focus:ring-blue-500' }`} title={ isOff() @@ -868,7 +869,7 @@ export function ResourceTable(props: ResourceTableProps) { return ( {/* Alert toggle column */} @@ -940,8 +941,8 @@ export function ResourceTable(props: ResourceTableProps) { rel="noopener noreferrer" onClick={(e) => e.stopPropagation()} class={`text-sm font-medium truncate flex-nowrap transition-colors duration-150 ${resource.disabled - ? 'text-gray-500 dark:text-gray-500' - : 'text-gray-900 dark:text-gray-100 hover:text-sky-600 dark:hover:text-sky-400' + ? 'text-gray-500 dark:text-gray-500' + : 'text-gray-900 dark:text-gray-100 hover:text-sky-600 dark:hover:text-sky-400' }`} title={`Open ${resource.displayName || resource.name} web interface`} > @@ -1148,8 +1149,8 @@ export function ResourceTable(props: ResourceTableProps) { setActiveMetricInput(null); }} class={`w-16 px-2 py-0.5 text-sm text-center border rounded ${isDisabled() - ? 'bg-gray-100 dark:bg-gray-800 text-gray-400 dark:text-gray-600 border-gray-300 dark:border-gray-600' - : 'bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 border-gray-300 dark:border-gray-600' + ? 'bg-gray-100 dark:bg-gray-800 text-gray-400 dark:text-gray-600 border-gray-300 dark:border-gray-600' + : 'bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 border-gray-300 dark:border-gray-600' }`} />
@@ -1379,7 +1380,7 @@ export function ResourceTable(props: ResourceTableProps) { return ( {/* Alert toggle column */} @@ -1456,8 +1457,8 @@ export function ResourceTable(props: ResourceTableProps) { rel="noopener noreferrer" onClick={(e) => e.stopPropagation()} class={`text-sm font-medium truncate flex-nowrap transition-colors duration-150 ${resource.disabled - ? 'text-gray-500 dark:text-gray-500' - : 'text-gray-900 dark:text-gray-100 hover:text-sky-600 dark:hover:text-sky-400' + ? 'text-gray-500 dark:text-gray-500' + : 'text-gray-900 dark:text-gray-100 hover:text-sky-600 dark:hover:text-sky-400' }`} title={`Open ${resource.displayName || resource.name} web interface`} > @@ -1600,8 +1601,8 @@ export function ResourceTable(props: ResourceTableProps) { setActiveMetricInput(null); }} class={`w-16 px-2 py-0.5 text-sm text-center border rounded ${isDisabled() - ? 'bg-gray-100 dark:bg-gray-800 text-gray-400 dark:text-gray-600 border-gray-300 dark:border-gray-600' - : 'bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 border-gray-300 dark:border-gray-600' + ? 'bg-gray-100 dark:bg-gray-800 text-gray-400 dark:text-gray-600 border-gray-300 dark:border-gray-600' + : 'bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 border-gray-300 dark:border-gray-600' }`} /> diff --git a/frontend-modern/src/components/Alerts/ThresholdsTable.tsx b/frontend-modern/src/components/Alerts/ThresholdsTable.tsx index d213da8..38fb805 100644 --- a/frontend-modern/src/components/Alerts/ThresholdsTable.tsx +++ b/frontend-modern/src/components/Alerts/ThresholdsTable.tsx @@ -1,6 +1,7 @@ import { createSignal, createMemo, Show, For, onMount, onCleanup, createEffect } from 'solid-js'; import { useNavigate, useLocation } from '@solidjs/router'; import Toggle from '@/components/shared/Toggle'; +import { Card } from '@/components/shared/Card'; // Workaround for eslint false-positive when `For` is used only in JSX const __ensureForUsage = For; @@ -198,37 +199,37 @@ interface ThresholdsTableProps { setDockerDefaults: ( value: | { - cpu: number; - memory: number; - disk: number; - restartCount: number; - restartWindow: number; - memoryWarnPct: number; - memoryCriticalPct: number; - serviceWarnGapPercent: number; - serviceCriticalGapPercent: number; - } + cpu: number; + memory: number; + disk: number; + restartCount: number; + restartWindow: number; + memoryWarnPct: number; + memoryCriticalPct: number; + serviceWarnGapPercent: number; + serviceCriticalGapPercent: number; + } | ((prev: { - cpu: number; - memory: number; - disk: number; - restartCount: number; - restartWindow: number; - memoryWarnPct: number; - memoryCriticalPct: number; - serviceWarnGapPercent: number; - serviceCriticalGapPercent: number; - }) => { - cpu: number; - memory: number; - disk: number; - restartCount: number; - restartWindow: number; - memoryWarnPct: number; - memoryCriticalPct: number; - serviceWarnGapPercent: number; - serviceCriticalGapPercent: number; - }), + cpu: number; + memory: number; + disk: number; + restartCount: number; + restartWindow: number; + memoryWarnPct: number; + memoryCriticalPct: number; + serviceWarnGapPercent: number; + serviceCriticalGapPercent: number; + }) => { + cpu: number; + memory: number; + disk: number; + restartCount: number; + restartWindow: number; + memoryWarnPct: number; + memoryCriticalPct: number; + serviceWarnGapPercent: number; + serviceCriticalGapPercent: number; + }), ) => void; dockerIgnoredPrefixes: () => string[]; setDockerIgnoredPrefixes: (value: string[] | ((prev: string[]) => string[])) => void; @@ -309,9 +310,9 @@ export function ThresholdsTable(props: ThresholdsTableProps) { const [searchTerm, setSearchTerm] = createSignal(''); const [editingId, setEditingId] = createSignal(null); -const [editingThresholds, setEditingThresholds] = createSignal< - Record ->({}); + const [editingThresholds, setEditingThresholds] = createSignal< + Record + >({}); const [editingNote, setEditingNote] = createSignal(''); const [activeTab, setActiveTab] = createSignal<'proxmox' | 'pmg' | 'hosts' | 'docker'>('proxmox'); let searchInputRef: HTMLInputElement | undefined; @@ -640,7 +641,7 @@ const [editingThresholds, setEditingThresholds] = createSignal< if (search) { return nodes.filter((n) => n.name.toLowerCase().includes(search)); } - return nodes; + return nodes; }, []); const hostAgentsWithOverrides = createMemo((prev = []) => { @@ -1103,13 +1104,13 @@ const [editingThresholds, setEditingThresholds] = createSignal< const differs = current.enabled !== factory.enabled || (current.warningDays ?? DEFAULT_SNAPSHOT_WARNING) !== - (factory.warningDays ?? DEFAULT_SNAPSHOT_WARNING) || + (factory.warningDays ?? DEFAULT_SNAPSHOT_WARNING) || (current.criticalDays ?? DEFAULT_SNAPSHOT_CRITICAL) !== - (factory.criticalDays ?? DEFAULT_SNAPSHOT_CRITICAL) || + (factory.criticalDays ?? DEFAULT_SNAPSHOT_CRITICAL) || (current.warningSizeGiB ?? DEFAULT_SNAPSHOT_WARNING_SIZE) !== - (factory.warningSizeGiB ?? DEFAULT_SNAPSHOT_WARNING_SIZE) || + (factory.warningSizeGiB ?? DEFAULT_SNAPSHOT_WARNING_SIZE) || (current.criticalSizeGiB ?? DEFAULT_SNAPSHOT_CRITICAL_SIZE) !== - (factory.criticalSizeGiB ?? DEFAULT_SNAPSHOT_CRITICAL_SIZE); + (factory.criticalSizeGiB ?? DEFAULT_SNAPSHOT_CRITICAL_SIZE); return differs ? 1 : 0; }); @@ -1118,9 +1119,9 @@ const [editingThresholds, setEditingThresholds] = createSignal< const backupFactory = backupFactoryConfig(); return backupCurrent.enabled !== backupFactory.enabled || (backupCurrent.warningDays ?? DEFAULT_BACKUP_WARNING) !== - (backupFactory.warningDays ?? DEFAULT_BACKUP_WARNING) || + (backupFactory.warningDays ?? DEFAULT_BACKUP_WARNING) || (backupCurrent.criticalDays ?? DEFAULT_BACKUP_CRITICAL) !== - (backupFactory.criticalDays ?? DEFAULT_BACKUP_CRITICAL) + (backupFactory.criticalDays ?? DEFAULT_BACKUP_CRITICAL) ? 1 : 0; }); @@ -1179,11 +1180,11 @@ const [editingThresholds, setEditingThresholds] = createSignal< const filteredGuests = search ? guests.filter( - (g) => - g.name.toLowerCase().includes(search) || - g.vmid?.toString().includes(search) || - g.node?.toLowerCase().includes(search), - ) + (g) => + g.name.toLowerCase().includes(search) || + g.vmid?.toString().includes(search) || + g.node?.toLowerCase().includes(search), + ) : guests; // Group by node @@ -1631,9 +1632,9 @@ const [editingThresholds, setEditingThresholds] = createSignal< const hasStateOnlyOverride = Boolean( resource.disabled || - resource.disableConnectivity || - resource.poweredOffSeverity !== undefined || - noteForOverride !== undefined, + resource.disableConnectivity || + resource.poweredOffSeverity !== undefined || + noteForOverride !== undefined, ); // If no threshold overrides or state flags remain, remove the override entirely @@ -1739,11 +1740,11 @@ const [editingThresholds, setEditingThresholds] = createSignal< setEditingNote(''); }; -const cancelEdit = () => { - setEditingId(null); - setEditingThresholds({}); - setEditingNote(''); -}; + const cancelEdit = () => { + setEditingId(null); + setEditingThresholds({}); + setEditingNote(''); + }; const updateMetricDelay = ( typeKey: 'guest' | 'node' | 'storage' | 'pbs', @@ -2217,44 +2218,40 @@ const cancelEdit = () => { @@ -2360,9 +2357,9 @@ const cancelEdit = () => { factoryDefaults={ props.factoryNodeDefaults ? { - cpu: props.factoryNodeDefaults.cpu, - memory: props.factoryNodeDefaults.memory, - } + cpu: props.factoryNodeDefaults.cpu, + memory: props.factoryNodeDefaults.memory, + } : undefined } onResetDefaults={props.resetNodeDefaults} @@ -2745,7 +2742,7 @@ const cancelEdit = () => { -
+

@@ -2763,26 +2760,26 @@ const cancelEdit = () => { onClick={handleResetDockerIgnored} > Reset - - -

-