1;
- const sharePercent = bestVelocity > 0
+ const _sharePercent = bestVelocity > 0
? Math.round((v.avg_daily_depletion_7d / bestVelocity) * 100)
: 0;
diff --git a/src/components/products/customization/ConfigurationPanel.tsx b/src/components/products/customization/ConfigurationPanel.tsx
index 760f9de10..8d443da5c 100644
--- a/src/components/products/customization/ConfigurationPanel.tsx
+++ b/src/components/products/customization/ConfigurationPanel.tsx
@@ -9,7 +9,6 @@
import { useState, useEffect, useCallback, useMemo, useRef } from "react";
import { Loader2, Palette, Clock, Ruler, AlertCircle, Check } from "lucide-react";
-import { Badge } from "@/components/ui/badge";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { cn } from "@/lib/utils";
diff --git a/src/components/products/customization/__tests__/LocationPanelAdvanced.test.tsx b/src/components/products/customization/__tests__/LocationPanelAdvanced.test.tsx
index 48d3674a9..3cdc5a07d 100644
--- a/src/components/products/customization/__tests__/LocationPanelAdvanced.test.tsx
+++ b/src/components/products/customization/__tests__/LocationPanelAdvanced.test.tsx
@@ -4,7 +4,6 @@
import { describe, it, expect, vi, beforeEach } from "vitest";
import { render, screen, within, fireEvent } from "@testing-library/react";
-import { toast } from "sonner";
import { LocationPanel } from "../LocationPanel";
import type { GravacaoLocation, TechniqueOption, CustomizationPriceResponseV6 } from "@/types/customization";
diff --git a/src/components/products/share/ShareAllColorsDialog.tsx b/src/components/products/share/ShareAllColorsDialog.tsx
index 627ef1db8..3d5a80951 100644
--- a/src/components/products/share/ShareAllColorsDialog.tsx
+++ b/src/components/products/share/ShareAllColorsDialog.tsx
@@ -1,5 +1,5 @@
import { useState, useCallback, useMemo } from "react";
-import { Palette, Send, Check, X, Eye, Pencil } from "lucide-react";
+import { Palette, Send, Check, Eye, Pencil } from "lucide-react";
import { Button } from "@/components/ui/button";
import {
Dialog,
diff --git a/src/components/products/share/usePhotoDownload.ts b/src/components/products/share/usePhotoDownload.ts
index 79840b40b..bd4599edd 100644
--- a/src/components/products/share/usePhotoDownload.ts
+++ b/src/components/products/share/usePhotoDownload.ts
@@ -54,7 +54,7 @@ export function usePhotoDownload() {
title: "Download concluído",
description: `${images.length} foto(s) baixada(s)`,
});
- } catch (err) {
+ } catch (_err) {
toast({
title: "Erro no download",
description: "Não foi possível baixar as fotos",
diff --git a/src/components/providers/AppBootstrap.tsx b/src/components/providers/AppBootstrap.tsx
index 6c5587a58..8f199c09f 100644
--- a/src/components/providers/AppBootstrap.tsx
+++ b/src/components/providers/AppBootstrap.tsx
@@ -1,7 +1,6 @@
-import { type ReactNode, useEffect, useState, useCallback } from "react";
+import { type ReactNode, useEffect, useState } from "react";
import { useAuth } from "@/contexts/AuthContext";
import { supabase } from "@/integrations/supabase/client";
-import { useOnboardingContext } from "@/contexts/OnboardingContext";
import { AlertTriangle, RefreshCw } from "lucide-react";
import { Button } from "@/components/ui/button";
diff --git a/src/components/quotes/AdminTemplatesManager.tsx b/src/components/quotes/AdminTemplatesManager.tsx
index 0bed4e8bf..e0e0c6fbb 100644
--- a/src/components/quotes/AdminTemplatesManager.tsx
+++ b/src/components/quotes/AdminTemplatesManager.tsx
@@ -6,7 +6,6 @@ import { useState, useMemo } from "react";
import { formatCurrency } from "@/lib/format";
import { Card, CardContent } from "@/components/ui/card";
import { Button } from "@/components/ui/button";
-import { Badge } from "@/components/ui/badge";
import { Input } from "@/components/ui/input";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
import { Separator } from "@/components/ui/separator";
diff --git a/src/components/quotes/PdfGenerationDialog.tsx b/src/components/quotes/PdfGenerationDialog.tsx
index 0aacdbb8f..ec293519c 100644
--- a/src/components/quotes/PdfGenerationDialog.tsx
+++ b/src/components/quotes/PdfGenerationDialog.tsx
@@ -5,7 +5,7 @@
*/
import { useState, useCallback, useRef } from "react";
-import { Download, FileText, Eye, Loader2, Check, Send, Copy, Link2, MessageCircle, Mail, Printer } from "lucide-react";
+import { Download, FileText, Loader2, Check, Printer } from "lucide-react";
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog";
import { Button } from "@/components/ui/button";
import { Badge } from "@/components/ui/badge";
@@ -104,7 +104,7 @@ export function PdfGenerationDialog({
setPdfVersion((v) => v + 1);
};
- const handleEmail = () => {
+ const _handleEmail = () => {
const subject = encodeURIComponent(`Proposta Comercial ${quoteNumber || ""}`);
const body = encodeURIComponent(
`Olá,\n\nSegue a proposta comercial ${quoteNumber || ""}.\n\nQualquer dúvida, estou à disposição!\n\nAtt.`
diff --git a/src/components/quotes/QuoteAutoSave.tsx b/src/components/quotes/QuoteAutoSave.tsx
index d35606267..f9969f968 100644
--- a/src/components/quotes/QuoteAutoSave.tsx
+++ b/src/components/quotes/QuoteAutoSave.tsx
@@ -7,7 +7,6 @@ import { useState, useEffect, useCallback, useRef } from "react";
import { Cloud, CloudOff, Check, Loader2, AlertCircle } from "lucide-react";
import { motion, AnimatePresence } from "framer-motion";
import { Badge } from "@/components/ui/badge";
-import { Button } from "@/components/ui/button";
import {
Tooltip,
TooltipContent,
@@ -164,7 +163,7 @@ export function QuoteAutoSave({
}
}, [storageKey, quoteId]);
- const handleDiscard = () => {
+ const _handleDiscard = () => {
localStorage.removeItem(storageKey);
const keysToRemove: string[] = [];
diff --git a/src/components/quotes/QuoteBuilderProductSearch.tsx b/src/components/quotes/QuoteBuilderProductSearch.tsx
index 263bd0b6e..3f0347e9a 100644
--- a/src/components/quotes/QuoteBuilderProductSearch.tsx
+++ b/src/components/quotes/QuoteBuilderProductSearch.tsx
@@ -4,7 +4,6 @@
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
-import { Badge } from "@/components/ui/badge";
import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { AlertTriangle, Package, PackageCheck, Search, X } from "lucide-react";
import { cn } from "@/lib/utils";
diff --git a/src/components/quotes/QuoteBuilderSummaryColumn.tsx b/src/components/quotes/QuoteBuilderSummaryColumn.tsx
index 11204e1f2..3150732a8 100644
--- a/src/components/quotes/QuoteBuilderSummaryColumn.tsx
+++ b/src/components/quotes/QuoteBuilderSummaryColumn.tsx
@@ -5,16 +5,14 @@
import { useState, useMemo } from "react";
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
-import { Input } from "@/components/ui/input";
import { CurrencyInput } from "@/components/ui/currency-input";
import { Textarea } from "@/components/ui/textarea";
import { Label } from "@/components/ui/label";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
-import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
import {
Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter,
} from "@/components/ui/dialog";
-import { AlertTriangle, Edit, Loader2, Package, Percent, Save, Send, Shield, ShoppingCart, Trash2, CheckCircle2, X } from "lucide-react";
+import { AlertTriangle, Edit, Loader2, Package, Save, Send, Shield, ShoppingCart, Trash2, CheckCircle2, X } from "lucide-react";
import { cn } from "@/lib/utils";
import type { QuoteItem } from "@/hooks/quotes";
import { NegotiationMarkupCard } from "@/components/quotes/NegotiationMarkupCard";
diff --git a/src/components/quotes/QuoteStatusTimeline.tsx b/src/components/quotes/QuoteStatusTimeline.tsx
index 7e1940831..ac2e9c77c 100644
--- a/src/components/quotes/QuoteStatusTimeline.tsx
+++ b/src/components/quotes/QuoteStatusTimeline.tsx
@@ -1,4 +1,4 @@
-import { Check, Clock, Eye, FileText, RefreshCw, Send, Shield, ThumbsDown, ThumbsUp, AlertTriangle } from "lucide-react";
+import { Check, Clock, FileText, RefreshCw, Send, Shield, ThumbsDown, AlertTriangle } from "lucide-react";
import { cn } from "@/lib/utils";
import { format } from "date-fns";
import { ptBR } from "date-fns/locale";
diff --git a/src/components/quotes/QuoteValidityBanner.tsx b/src/components/quotes/QuoteValidityBanner.tsx
index ac38a1fe7..f7d74d921 100644
--- a/src/components/quotes/QuoteValidityBanner.tsx
+++ b/src/components/quotes/QuoteValidityBanner.tsx
@@ -1,6 +1,5 @@
import { differenceInDays, parseISO, isValid } from "date-fns";
import { AlertTriangle, Clock, CheckCircle2 } from "lucide-react";
-import { cn } from "@/lib/utils";
interface QuoteValidityBannerProps {
validUntil?: string;
diff --git a/src/components/quotes/QuoteVersionCompare.tsx b/src/components/quotes/QuoteVersionCompare.tsx
index 776f2c0be..a650fbc3a 100644
--- a/src/components/quotes/QuoteVersionCompare.tsx
+++ b/src/components/quotes/QuoteVersionCompare.tsx
@@ -207,7 +207,7 @@ export function QuoteVersionCompare({ open, onOpenChange, versions, currentQuote
{[leftDetail, rightDetail].map((detail) => (
v{detail.version}
- {detail.items.map((item, i) => {
+ {detail.items.map((item, _i) => {
const otherDetail = detail === leftDetail ? rightDetail : leftDetail;
const otherItem = otherDetail.items.find(oi => oi.product_sku === item.product_sku);
const isNew = !otherItem;
diff --git a/src/components/quotes/QuoteVersionHistory.tsx b/src/components/quotes/QuoteVersionHistory.tsx
index a483ed086..eeb363f40 100644
--- a/src/components/quotes/QuoteVersionHistory.tsx
+++ b/src/components/quotes/QuoteVersionHistory.tsx
@@ -2,7 +2,7 @@ import { useEffect, useState } from "react";
import { useNavigate } from "react-router-dom";
import { format } from "date-fns";
import { ptBR } from "date-fns/locale";
-import { GitBranch, GitCompare, Plus, Eye, Check, Clock, FileText } from "lucide-react";
+import { GitBranch, GitCompare, Plus, Eye, Clock, FileText } from "lucide-react";
import { QuoteVersionCompare } from "./QuoteVersionCompare";
import { Button } from "@/components/ui/button";
import { Badge } from "@/components/ui/badge";
@@ -10,7 +10,7 @@ import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { Separator } from "@/components/ui/separator";
import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
import { ScrollArea } from "@/components/ui/scroll-area";
-import { useQuoteVersions, type QuoteVersion } from "@/hooks/quotes";
+import { useQuoteVersions } from "@/hooks/quotes";
import { QUOTE_STATUS_CONFIG } from "@/lib/quote-status-config";
import { formatCurrency } from "@/lib/format";
diff --git a/src/components/quotes/SaveAsTemplateButton.tsx b/src/components/quotes/SaveAsTemplateButton.tsx
index ac1faaa48..55ab330b4 100644
--- a/src/components/quotes/SaveAsTemplateButton.tsx
+++ b/src/components/quotes/SaveAsTemplateButton.tsx
@@ -38,7 +38,7 @@ export function SaveAsTemplateButton({
onSaved?.();
};
- const initialTemplate = {
+ const _initialTemplate = {
name: "",
description: "",
is_default: false,
diff --git a/src/components/ramo-atividade/RamoAtividadeGroupAccordion.tsx b/src/components/ramo-atividade/RamoAtividadeGroupAccordion.tsx
index a98944b2e..b559ce1c6 100644
--- a/src/components/ramo-atividade/RamoAtividadeGroupAccordion.tsx
+++ b/src/components/ramo-atividade/RamoAtividadeGroupAccordion.tsx
@@ -1,5 +1,5 @@
-import React, { useState } from "react";
-import { ChevronDown, Building2, Check } from "lucide-react";
+import { useState } from "react";
+import { ChevronDown, Check } from "lucide-react";
import { Checkbox } from "@/components/ui/checkbox";
import { cn } from "@/lib/utils";
import type { RamoAtividadeGroup, SegmentoComplete } from "@/types/ramo-atividade";
diff --git a/src/components/reports/ScheduledReportsManager.tsx b/src/components/reports/ScheduledReportsManager.tsx
index 2ebf2186c..a0c23a493 100644
--- a/src/components/reports/ScheduledReportsManager.tsx
+++ b/src/components/reports/ScheduledReportsManager.tsx
@@ -1,7 +1,7 @@
import { useState } from 'react';
import { format } from 'date-fns';
import { ptBR } from 'date-fns/locale';
-import { CalendarClock, Plus, Trash2, Pause, Play, Mail, Clock, FileBarChart } from 'lucide-react';
+import { CalendarClock, Plus, Trash2, Mail, Clock, FileBarChart } from 'lucide-react';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Button } from '@/components/ui/button';
import { Badge } from '@/components/ui/badge';
@@ -10,7 +10,6 @@ import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog';
-import { Separator } from '@/components/ui/separator';
import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger } from '@/components/ui/alert-dialog';
import {
useScheduledReports,
diff --git a/src/components/search/GlobalSearchHelpers.tsx b/src/components/search/GlobalSearchHelpers.tsx
index 6fba2754d..32f381d47 100644
--- a/src/components/search/GlobalSearchHelpers.tsx
+++ b/src/components/search/GlobalSearchHelpers.tsx
@@ -6,7 +6,7 @@ import { Badge } from "@/components/ui/badge";
import {
CommandItem,
} from "@/components/ui/command";
-import { Trophy, Medal, ArrowUpRight, ChevronRight } from "lucide-react";
+import { Trophy, Medal, ArrowUpRight } from "lucide-react";
import { cn } from "@/lib/utils";
export const paletteItemStateClass =
diff --git a/src/components/search/GlobalSearchIdleState.tsx b/src/components/search/GlobalSearchIdleState.tsx
index 8a1caa91e..437dbd1e3 100644
--- a/src/components/search/GlobalSearchIdleState.tsx
+++ b/src/components/search/GlobalSearchIdleState.tsx
@@ -67,7 +67,7 @@ function RankBadge({ index }: { index: number }) {
}
/* ── Quick Actions ── */
-const quickActions = [
+const _quickActions = [
{ id: "new-quote", title: "Novo Orçamento", description: "Criar um novo orçamento", icon:
, href: "/orcamentos/novo", shortcut: "N", highlight: true },
{ id: "products", title: "Catálogo de Produtos", description: "Ver todos os produtos", icon:
, href: "/" },
];
diff --git a/src/components/search/GlobalSearchPalette.tsx b/src/components/search/GlobalSearchPalette.tsx
index 210c30155..d8e67b3b2 100644
--- a/src/components/search/GlobalSearchPalette.tsx
+++ b/src/components/search/GlobalSearchPalette.tsx
@@ -2,10 +2,10 @@
* GlobalSearchPalette — High-contrast black redesign
* Helper components extracted to GlobalSearchHelpers.tsx
*/
-import React, { lazy, Suspense, useEffect, useCallback } from "react";
+import { lazy, Suspense, useEffect, useCallback } from "react";
import {
- CommandDialog, CommandEmpty, CommandGroup, CommandInput,
- CommandItem, CommandList, CommandSeparator,
+ CommandDialog, CommandGroup, CommandInput,
+ CommandItem, CommandList
} from "@/components/ui/command";
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
@@ -20,7 +20,7 @@ import { cn } from "@/lib/utils";
import { useGlobalSearch } from "./useGlobalSearch";
import { typeConfig } from "./search-types";
import { GlobalSearchIdleState } from "./GlobalSearchIdleState";
-import { paletteItemStateClass, NavCard, staggerStyle, type QuickAction } from "./GlobalSearchHelpers";
+import { paletteItemStateClass, staggerStyle, type QuickAction } from "./GlobalSearchHelpers";
import { HighlightMatch } from "./HighlightMatch";
import { EmptySearchState } from "./EmptySearchState";
diff --git a/src/components/search/VoiceSearchOverlay.tsx b/src/components/search/VoiceSearchOverlay.tsx
index e761e3151..3b8c74316 100644
--- a/src/components/search/VoiceSearchOverlay.tsx
+++ b/src/components/search/VoiceSearchOverlay.tsx
@@ -46,7 +46,7 @@ export const VoiceSearchOverlay = React.forwardRef
`/placeholder.svg`;
+const img = (_name: string) => `/placeholder.svg`;
export const MOCK_MATCH_PRODUCTS: Product[] = [
// ── CHURRASCO cluster ──
diff --git a/src/hooks/auth/useProfileRoles.ts b/src/hooks/auth/useProfileRoles.ts
index 34d641565..99f3cd88f 100644
--- a/src/hooks/auth/useProfileRoles.ts
+++ b/src/hooks/auth/useProfileRoles.ts
@@ -3,7 +3,6 @@ import { supabase } from '@/integrations/supabase/client';
import { authService } from '@/services/authService';
import { authDebug, authDebugError } from '@/lib/auth/auth-debug';
import { type AppRole, type Profile } from '@/contexts/AuthContext';
-import { logger } from '@/lib/logger';
export function useProfileRoles() {
const [profile, setProfile] = useState(null);
diff --git a/src/hooks/simulator/useSimulatorWizard.ts b/src/hooks/simulator/useSimulatorWizard.ts
index a18c963d9..7366fa983 100644
--- a/src/hooks/simulator/useSimulatorWizard.ts
+++ b/src/hooks/simulator/useSimulatorWizard.ts
@@ -52,7 +52,7 @@ export function useSimulatorWizard() {
staleTime: 10 * 60 * 1000,
});
- useEffect(() => { if (locationsData) dispatch({ type: 'SET_AVAILABLE_LOCATIONS', payload: locationsData }); }, [locationsData]);
+ useEffect(() => { if (locationsData) dispatch({ type: 'SET_AVAILABLE_LOCATIONS', payload: locationsData }); }, [locationsData, dispatch]);
const { fetchComparisonPrices, confirmTechnique } = useWizardPricing({ state, dispatch });
useWizardPersistence(state);
@@ -61,39 +61,39 @@ export function useSimulatorWizard() {
const setStep = useCallback((step: WizardStep) => {
if (canNavigateToStep(step, state)) dispatch({ type: 'SET_STEP', payload: step });
else toast.warning('Complete os passos anteriores primeiro');
- }, [state]);
+ }, [state, dispatch]);
const nextStep = useCallback(() => {
const next = getNextStep(state.currentStep);
if (next && isStepComplete(state.currentStep, state)) dispatch({ type: 'SET_STEP', payload: next });
- }, [state]);
+ }, [state, dispatch]);
const previousStep = useCallback(() => {
const prev = getPreviousStep(state.currentStep);
if (prev) dispatch({ type: 'SET_STEP', payload: prev });
- }, [state.currentStep]);
+ }, [state.currentStep, dispatch]);
const selectProduct = useCallback((product: SelectedProduct | null) => {
dispatch({ type: 'SELECT_PRODUCT', payload: product });
if (product) dispatch({ type: 'SET_STEP', payload: 'location' });
- }, []);
+ }, [dispatch]);
const setQuantity = useCallback((quantity: number) => {
const newQty = Math.max(1, quantity);
dispatch({ type: 'SET_QUANTITY', payload: newQty });
if (state.personalizations.length > 0 && newQty !== state.quantity)
toast.info('Recalculando preços para nova tiragem...', { duration: 2000 });
- }, [state.personalizations.length, state.quantity]);
+ }, [state.personalizations.length, state.quantity, dispatch]);
const selectLocation = useCallback((location: EngravingLocation | null) => {
dispatch({ type: 'SELECT_LOCATION', payload: location });
if (location) dispatch({ type: 'SET_STEP', payload: 'specs' });
- }, []);
+ }, [dispatch]);
- const updateSpecs = useCallback((specs: Partial) => { dispatch({ type: 'UPDATE_SPECS', payload: specs }); }, []);
- const removePersonalization = useCallback((id: string) => { dispatch({ type: 'REMOVE_PERSONALIZATION', payload: id }); toast.info('Gravação removida'); }, []);
- const removeAllPersonalizations = useCallback(() => { dispatch({ type: 'REMOVE_ALL_PERSONALIZATIONS' }); toast.info('Todas as gravações removidas'); }, []);
- const editPersonalization = useCallback((index: number) => { dispatch({ type: 'EDIT_PERSONALIZATION', payload: index }); }, []);
+ const updateSpecs = useCallback((specs: Partial) => { dispatch({ type: 'UPDATE_SPECS', payload: specs }); }, [dispatch]);
+ const removePersonalization = useCallback((id: string) => { dispatch({ type: 'REMOVE_PERSONALIZATION', payload: id }); toast.info('Gravação removida'); }, [dispatch]);
+ const removeAllPersonalizations = useCallback(() => { dispatch({ type: 'REMOVE_ALL_PERSONALIZATIONS' }); toast.info('Todas as gravações removidas'); }, [dispatch]);
+ const editPersonalization = useCallback((index: number) => { dispatch({ type: 'EDIT_PERSONALIZATION', payload: index }); }, [dispatch]);
const startNewPersonalization = useCallback(() => {
const usedIds = new Set(state.personalizations.map(p => p.location.id));
@@ -101,9 +101,9 @@ export function useSimulatorWizard() {
toast.warning('Todos os locais já foram personalizados'); return;
}
dispatch({ type: 'START_NEW_PERSONALIZATION' });
- }, [state.personalizations, state.availableLocations]);
+ }, [state.personalizations, state.availableLocations, dispatch]);
- const cancelPersonalization = useCallback(() => { dispatch({ type: 'CANCEL_PERSONALIZATION' }); }, []);
+ const cancelPersonalization = useCallback(() => { dispatch({ type: 'CANCEL_PERSONALIZATION' }); }, [dispatch]);
const duplicatePersonalization = useCallback((sourceId: string, targetLocationId: string) => {
const targetLocation = state.availableLocations.find(loc => loc.id === targetLocationId);
@@ -113,9 +113,9 @@ export function useSimulatorWizard() {
}
dispatch({ type: 'DUPLICATE_PERSONALIZATION', payload: { sourceId, targetLocation } });
toast.success(`Personalização duplicada para ${targetLocation.locationName}`);
- }, [state.availableLocations, state.personalizations]);
+ }, [state.availableLocations, state.personalizations, dispatch]);
- const resetWizard = useCallback(() => { dispatch({ type: 'RESET_WIZARD' }); clearSession(); }, []);
+ const resetWizard = useCallback(() => { dispatch({ type: 'RESET_WIZARD' }); clearSession(); }, [dispatch]);
// Computed
const effectivePrice = useMemo(() => state.selectedProduct?.price || 0, [state.selectedProduct]);
diff --git a/src/hooks/ui/useGlobalShortcuts.ts b/src/hooks/ui/useGlobalShortcuts.ts
index 5cf07652f..dcb9bdcc2 100644
--- a/src/hooks/ui/useGlobalShortcuts.ts
+++ b/src/hooks/ui/useGlobalShortcuts.ts
@@ -33,7 +33,7 @@ export function useGlobalShortcuts(handlers?: ShortcutHandlers) {
let onboarding: any = null;
try {
onboarding = useOnboardingContext();
- } catch (e) {
+ } catch (_e) {
// Context may not be available outside MainLayout
}
diff --git a/src/pages/Simulation.tsx b/src/pages/Simulation.tsx
index 23bb979a9..bbbad63b8 100644
--- a/src/pages/Simulation.tsx
+++ b/src/pages/Simulation.tsx
@@ -1,5 +1,5 @@
import { useState } from "react";
-import { Play, CheckCircle2, XCircle, Loader2, Database, Globe, Zap, ShieldAlert, BarChart3, AlertTriangle } from "lucide-react";
+import { Play, CheckCircle2, Loader2, Database, Zap, ShieldAlert, BarChart3, AlertTriangle } from "lucide-react";
import { Button } from "@/components/ui/button";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
import { Badge } from "@/components/ui/badge";
diff --git a/src/pages/auth/AuthBranding.tsx b/src/pages/auth/AuthBranding.tsx
index 9706de120..230af424f 100644
--- a/src/pages/auth/AuthBranding.tsx
+++ b/src/pages/auth/AuthBranding.tsx
@@ -2,8 +2,8 @@
* Left-side branding panel for Auth page — extracted for modularity
*/
import React, { useState, useEffect, useRef, useCallback } from "react";
-import { motion, AnimatePresence } from "framer-motion";
-import { Gift, Package, Factory, SlidersHorizontal, Brain, Rocket } from "lucide-react";
+import { motion } from "framer-motion";
+import { Package, Factory, SlidersHorizontal, Brain, Rocket } from "lucide-react";
import { AppLogo } from "@/components/layout/AppLogo";
import astronautSvg from "@/assets/astronaut.svg";
@@ -250,7 +250,7 @@ export const SpaceScene = React.memo(({ isFull = true }: { isFull?: boolean }) =
))}
{/* Floating Astronauts — Sincronizados, Menores e com Parallax Mouse + Scroll */}
- {!config.reducedMotion && astronauts.map((a, idx) => {
+ {!config.reducedMotion && astronauts.map((a, _idx) => {
// Tamanhos reduzidos e escala baseada na profundidade, perfil global e ajuste individual
const baseSize = 35;
const size = baseSize * a.depth * config.depthProfile * (a.individualScale ?? 1.0);
diff --git a/src/pages/auth/ResetPassword.tsx b/src/pages/auth/ResetPassword.tsx
index 60c6374db..7723b3ebd 100644
--- a/src/pages/auth/ResetPassword.tsx
+++ b/src/pages/auth/ResetPassword.tsx
@@ -3,7 +3,7 @@ import { useNavigate } from 'react-router-dom';
import { z } from 'zod';
import { useForm } from 'react-hook-form';
import { zodResolver } from '@hookform/resolvers/zod';
-import { Lock, Loader2, Eye, EyeOff, CheckCircle, Sparkles, Rocket } from 'lucide-react';
+import { Lock, Loader2, Eye, EyeOff, CheckCircle } from 'lucide-react';
import { AppLogo } from '@/components/layout/AppLogo';
import { PasswordStrengthIndicator } from '@/components/auth/PasswordStrengthIndicator';
import { Button } from '@/components/ui/button';
@@ -15,7 +15,6 @@ import { supabase } from '@/integrations/supabase/client';
import { PageSEO } from '@/components/seo/PageSEO';
import { LegalFooter } from '@/components/auth/LegalFooter';
import { SpaceScene } from "@/pages/auth/AuthBranding";
-import { motion, AnimatePresence } from 'framer-motion';
const resetPasswordSchema = z
.object({
diff --git a/src/pages/auth/SSOCallbackPage.tsx b/src/pages/auth/SSOCallbackPage.tsx
index 4e0867bdf..5654f8548 100644
--- a/src/pages/auth/SSOCallbackPage.tsx
+++ b/src/pages/auth/SSOCallbackPage.tsx
@@ -11,7 +11,6 @@ import { consumePostLoginRedirect } from '@/lib/auth/post-login-redirect';
import { clearOAuthPending } from '@/lib/auth/oauth-pending';
import { explainOAuthError, type OAuthErrorExplanation } from '@/lib/auth/oauth-error-explainer';
import { SpaceScene } from "@/pages/auth/AuthBranding";
-import { motion } from 'framer-motion';
/**
* Callback do login social via Supabase Auth.
diff --git a/src/pages/quotes/useQuotesListPage.ts b/src/pages/quotes/useQuotesListPage.ts
index a6291179b..67f0655a5 100644
--- a/src/pages/quotes/useQuotesListPage.ts
+++ b/src/pages/quotes/useQuotesListPage.ts
@@ -1,10 +1,8 @@
import { useState, useMemo } from 'react';
import { useNavigate } from 'react-router-dom';
-import { toast } from 'sonner';
import confetti from 'canvas-confetti';
import Fuse from 'fuse.js';
import { useQuoteFunnel, useQuotes } from "@/hooks/quotes";
-import { Quote } from '@/hooks/quotes/quoteTypes';
export type SortOption = 'newest' | 'oldest' | 'highest' | 'lowest' | 'expiring';
diff --git a/src/services/authService.ts b/src/services/authService.ts
index 565efce20..6f9f1ea2a 100644
--- a/src/services/authService.ts
+++ b/src/services/authService.ts
@@ -1,6 +1,4 @@
import { supabase } from "@/integrations/supabase/client";
-import { AppRole, Profile } from "@/contexts/AuthContext";
-import { authDebug, authDebugError } from "@/lib/auth/auth-debug";
import { logger } from "@/lib/logger";
export const authService = {
diff --git a/src/tests/AdminMobileInteraction.test.tsx b/src/tests/AdminMobileInteraction.test.tsx
index 02428ddc2..a6960ac88 100644
--- a/src/tests/AdminMobileInteraction.test.tsx
+++ b/src/tests/AdminMobileInteraction.test.tsx
@@ -1,4 +1,4 @@
-import { describe, it, expect, vi } from 'vitest';
+import { describe, it, expect } from 'vitest';
import { render, screen, fireEvent } from '@testing-library/react';
import { MemoryRouter } from 'react-router-dom';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
diff --git a/src/tests/AdminStructuralComparison.test.tsx b/src/tests/AdminStructuralComparison.test.tsx
index 46d8177e6..a574cff13 100644
--- a/src/tests/AdminStructuralComparison.test.tsx
+++ b/src/tests/AdminStructuralComparison.test.tsx
@@ -1,5 +1,5 @@
import { describe, it, expect } from 'vitest';
-import { render, screen } from '@testing-library/react';
+import { render } from '@testing-library/react';
import { MemoryRouter } from 'react-router-dom';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { ThemeProvider } from '@/contexts/ThemeContext';
diff --git a/src/tests/CatalogFilteringLogic.test.tsx b/src/tests/CatalogFilteringLogic.test.tsx
index bd0bc96b0..b9df047c5 100644
--- a/src/tests/CatalogFilteringLogic.test.tsx
+++ b/src/tests/CatalogFilteringLogic.test.tsx
@@ -1,4 +1,4 @@
-import { describe, it, expect, vi, beforeEach } from 'vitest';
+import { describe, it, expect } from 'vitest';
import { renderHook } from '@testing-library/react';
import { useCatalogFiltering } from '../hooks/products/useCatalogFiltering';
import { defaultFilters } from '../components/filters/FilterPanel';
diff --git a/src/tests/ScenarioSimulation.test.ts b/src/tests/ScenarioSimulation.test.ts
index 0a391631e..a6a124e6a 100644
--- a/src/tests/ScenarioSimulation.test.ts
+++ b/src/tests/ScenarioSimulation.test.ts
@@ -1,5 +1,5 @@
import { describe, it, expect } from 'vitest';
-import { loginSchema, signupSchema } from '../lib/validations/authSchema';
+import { loginSchema } from '../lib/validations/authSchema';
import { quoteFormSchema } from '../lib/validations/quoteSchema';
describe('Real-World Scenario: Security & Validation Layer', () => {
diff --git a/src/tests/quotePersistence.test.ts b/src/tests/quotePersistence.test.ts
index 117eb0224..2e3de19ad 100644
--- a/src/tests/quotePersistence.test.ts
+++ b/src/tests/quotePersistence.test.ts
@@ -1,6 +1,5 @@
-import { describe, it, expect, vi } from 'vitest';
-import { calculateQuoteTotals, round2 } from '../hooks/quotes/quoteHelpers';
-import { quoteService } from '../services/quoteService';
+import { describe, it, expect } from 'vitest';
+import { calculateQuoteTotals } from '../hooks/quotes/quoteHelpers';
import { type QuoteItem } from '../hooks/quotes/quoteTypes';
// Mock Supabase to avoid real network calls if needed,
diff --git a/src/types/jspdf-autotable.d.ts b/src/types/jspdf-autotable.d.ts
index 039ed961c..46dede1ac 100644
--- a/src/types/jspdf-autotable.d.ts
+++ b/src/types/jspdf-autotable.d.ts
@@ -2,7 +2,7 @@
* Type declarations for jspdf-autotable plugin.
* Eliminates doc.lastAutoTable pattern.
*/
-import { jsPDF } from "jspdf";
+import "jspdf";
declare module "jspdf" {
interface jsPDF {
diff --git a/src/utils/excelExport.ts b/src/utils/excelExport.ts
index 7b8456e57..34e68eb39 100644
--- a/src/utils/excelExport.ts
+++ b/src/utils/excelExport.ts
@@ -169,7 +169,6 @@ function formatValue(value: unknown): string | number {
/**
* Formata moeda brasileira
*/
-import { formatCurrency } from "@/lib/format";
/**
diff --git a/src/utils/performance.ts b/src/utils/performance.ts
index ab795f216..918aba3ab 100644
--- a/src/utils/performance.ts
+++ b/src/utils/performance.ts
@@ -39,7 +39,7 @@ class PerformanceTracker {
private saveHistory() {
try {
localStorage.setItem(STORAGE_KEY, JSON.stringify(this.history.slice(-MAX_HISTORY)));
- } catch (e) {
+ } catch (_e) {
// Ignore quota errors
}
}
@@ -76,7 +76,7 @@ class PerformanceTracker {
}
return measure;
- } catch (e) {
+ } catch (_e) {
// Mark might not exist yet
}
}