leankg 0.19.31

Lightweight Knowledge Graph for AI-Assisted Development
/**
 * FR-E40 — error states: dismissible banner with retry. Role=alert so
 * screen readers announce it (FR-E43).
 */
export default function ErrorBanner({
  message,
  onRetry,
  onDismiss,
}: {
  message: string | null;
  onRetry?: () => void;
  onDismiss?: () => void;
}) {
  if (!message) return null;
  return (
    <div className="error-banner" role="alert" data-testid="error-banner">
      <span className="error-text">{message}</span>
      {onRetry && (
        <button className="error-retry" onClick={onRetry}>
          Retry
        </button>
      )}
      {onDismiss && (
        <button className="error-dismiss" onClick={onDismiss} aria-label="Dismiss error">
          ×
        </button>
      )}
    </div>
  );
}