import React, { useState, useEffect } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { BarChart3, Shield, X, Check, Info } from 'lucide-react'; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Card } from '@/components/ui/card'; import { analytics } from '@/lib/analytics'; import { cn } from '@/lib/utils'; import { useTranslation } from '@/hooks/useTranslation'; interface AnalyticsConsentProps { open?: boolean; onOpenChange?: (open: boolean) => void; onComplete?: () => void; } export const AnalyticsConsent: React.FC = ({ open: controlledOpen, onOpenChange, onComplete, }) => { const { t } = useTranslation(); const [internalOpen, setInternalOpen] = useState(false); const [hasShownConsent, setHasShownConsent] = useState(false); const isControlled = controlledOpen !== undefined; const open = isControlled ? controlledOpen : internalOpen; useEffect(() => { // Check if we should show the consent dialog const checkConsent = async () => { await analytics.initialize(); const settings = analytics.getSettings(); if (!settings?.hasConsented && !hasShownConsent) { if (!isControlled) { setInternalOpen(true); } setHasShownConsent(true); } }; checkConsent(); }, [isControlled, hasShownConsent]); const handleOpenChange = (newOpen: boolean) => { if (isControlled && onOpenChange) { onOpenChange(newOpen); } else { setInternalOpen(newOpen); } }; const handleAccept = async () => { await analytics.enable(); handleOpenChange(false); onComplete?.(); }; const handleDecline = async () => { await analytics.disable(); handleOpenChange(false); onComplete?.(); }; return (
{t('analytics.helpImproveClaudia')}
{t('analytics.collectAnonymousData')}

{t('analytics.whatWeCollect')}

  • • {t('analytics.featureUsageDesc')}
  • • {t('analytics.performanceMetricsDesc')}
  • • {t('analytics.errorReportsDesc')}
  • • {t('analytics.usagePatternsDesc')}

{t('analytics.privacyProtected')}

  • • {t('analytics.noPersonalInfo')}
  • • {t('analytics.noFileContents')}
  • • {t('analytics.noApiKeys')}
  • • {t('analytics.anonymousData')}
  • • {t('analytics.canOptOut')}

{t('analytics.dataHelpsUs')}

); }; interface AnalyticsConsentBannerProps { className?: string; } export const AnalyticsConsentBanner: React.FC = ({ className, }) => { const [visible, setVisible] = useState(false); const [hasChecked, setHasChecked] = useState(false); useEffect(() => { const checkConsent = async () => { if (hasChecked) return; await analytics.initialize(); const settings = analytics.getSettings(); if (!settings?.hasConsented) { setVisible(true); } setHasChecked(true); }; // Delay banner appearance for better UX const timer = setTimeout(checkConsent, 2000); return () => clearTimeout(timer); }, [hasChecked]); const handleAccept = async () => { await analytics.enable(); setVisible(false); }; const handleDecline = async () => { await analytics.disable(); setVisible(false); }; return ( {visible && (

Help improve Claudia

We collect anonymous usage data to improve your experience. No personal data is collected.

)}
); };