SPB Git

spb/vquant Public MIT

VibeQuant — AI-powered institutional-grade financial intelligence platform.

TypeScript 84.3% Python 11.7% JavaScript 1.6% CSS 1.5% HTML 0.7%
1.8 KB · 57 lines tsx
Raw Blame History
1/*2 * =============================================================================3 *  VibeQuant (vquant) — AI-Powered Financial Intelligence Platform4 * -----------------------------------------------------------------------------5 *  File:      client/src/components/chat/error-state.tsx6 *7 *  Author:    Simon-Pierre Boucher8 *  Contact:   contact@spboucher.ai9 *  Website:   https://www.spboucher.ai10 *  Demo:      https://www.vquant.ai11 *  License:   MIT (see LICENSE)12 *13 *  Copyright © 2026 Simon-Pierre Boucher. All rights reserved.14 * =============================================================================15 */1617import { motion } from "framer-motion";18import { AlertCircle, RefreshCw } from "lucide-react";19import { Button } from "@/components/ui/button";2021interface ErrorStateProps {22  error: string;23  onRetry?: () => void;24}2526export function ErrorState({ error, onRetry }: ErrorStateProps) {27  return (28    <motion.div29      initial={{ opacity: 0, y: 8 }}30      animate={{ opacity: 1, y: 0 }}31      className="w-full max-w-2xl mx-auto"32      data-testid="error-state"33    >34      <div className="bg-destructive/10 border border-destructive/30 rounded-xl p-8 text-center">35        <AlertCircle className="w-12 h-12 text-destructive mx-auto mb-4" />36        <h3 className="text-lg font-semibold text-destructive mb-2">37          Something went wrong38        </h3>39        <p className="text-sm text-muted-foreground mb-6">40          {error}41        </p>42        {onRetry && (43          <Button44            onClick={onRetry}45            variant="outline"46            className="hover-elevate active-elevate-2"47            data-testid="button-retry"48          >49            <RefreshCw className="w-4 h-4 mr-2" />50            Try Again51          </Button>52        )}53      </div>54    </motion.div>55  );56}57