'use client' import React from 'react' // ============================================================================= // HELPER COMPONENTS // ============================================================================= export function StatusBadge({ status, size = 'sm' }: { status: string; size?: 'sm' | 'md' }) { const colors: Record = { ready: 'bg-green-100 text-green-700', compliant: 'bg-green-100 text-green-700', approved: 'bg-green-100 text-green-700', pass: 'bg-green-100 text-green-700', implemented: 'bg-green-100 text-green-700', completed: 'bg-green-100 text-green-700', verified: 'bg-green-100 text-green-700', achieved: 'bg-green-100 text-green-700', closed: 'bg-green-100 text-green-700', at_risk: 'bg-yellow-100 text-yellow-700', partial: 'bg-yellow-100 text-yellow-700', warning: 'bg-yellow-100 text-yellow-700', planned: 'bg-blue-100 text-blue-700', draft: 'bg-gray-100 text-gray-700', active: 'bg-blue-100 text-blue-700', in_progress: 'bg-blue-100 text-blue-700', not_ready: 'bg-red-100 text-red-700', non_compliant: 'bg-red-100 text-red-700', fail: 'bg-red-100 text-red-700', open: 'bg-red-100 text-red-700', corrective_action_pending: 'bg-orange-100 text-orange-700', verification_pending: 'bg-yellow-100 text-yellow-700', } const cls = colors[status] || 'bg-gray-100 text-gray-600' const labels: Record = { ready: 'Bereit', not_ready: 'Nicht bereit', at_risk: 'Risiko', compliant: 'Konform', non_compliant: 'Nicht konform', partial: 'Teilweise', approved: 'Genehmigt', draft: 'Entwurf', pass: 'Bestanden', fail: 'Fehlgeschlagen', warning: 'Warnung', implemented: 'Implementiert', planned: 'Geplant', active: 'Aktiv', achieved: 'Erreicht', completed: 'Abgeschlossen', open: 'Offen', closed: 'Geschlossen', verified: 'Verifiziert', corrective_action_pending: 'CAPA ausstehend', verification_pending: 'Verifizierung', in_progress: 'In Bearbeitung', not_applicable: 'N/A', } const pad = size === 'md' ? 'px-3 py-1 text-sm' : 'px-2 py-0.5 text-xs' return {labels[status] || status} } export function StatCard({ label, value, sub, color = 'purple' }: { label: string; value: string | number; sub?: string; color?: string }) { const colors: Record = { purple: 'border-purple-200 bg-purple-50', green: 'border-green-200 bg-green-50', red: 'border-red-200 bg-red-50', yellow: 'border-yellow-200 bg-yellow-50', blue: 'border-blue-200 bg-blue-50', } return (
{value}
{label}
{sub &&
{sub}
}
) } export function LoadingSpinner() { return (
) } export function EmptyState({ text, action, onAction }: { text: string; action?: string; onAction?: () => void }) { return (

{text}

{action && onAction && ( )}
) }