import type { ReactNode } from 'react';
import { Badge } from '@/components/ui/badge';
import { Label } from '@/components/ui/label';
export function SectionHeading({ children }: { children?: ReactNode }) {
return
{children} ;
}
export function FieldRow({ label, children }: { label?: ReactNode; children?: ReactNode }) {
return (
{label}
{children}
);
}
export function Toggle({ checked, onChange, label, disabled = false }: {
checked: boolean;
onChange: (checked: boolean) => void;
label?: string;
disabled?: boolean;
}) {
return (
!disabled && onChange(!checked)}
className={`relative inline-flex h-5 w-9 shrink-0 rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ${disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'} ${checked ? 'bg-primary' : 'bg-input'}`}
>
{label && {label} }
);
}
export function formatDateTime(value: string | null | undefined): string {
if (!value) return '—';
const date = new Date(value);
if (Number.isNaN(date.getTime())) return value;
return date.toLocaleString();
}
export function BackupTypeBadge({ type }: { type?: string | null }) {
const map: Record = {
manual: 'bg-blue-500/15 text-blue-400 border-blue-500/20',
scheduled: 'bg-emerald-500/15 text-emerald-400 border-emerald-500/20',
imported: 'bg-violet-500/15 text-violet-400 border-violet-500/20',
'pre-restore': 'bg-amber-500/15 text-amber-400 border-amber-500/20',
};
const cls = map[type ?? ''] || 'bg-muted text-muted-foreground border-border';
return {type || 'backup'} ;
}