diff --git a/src/App.css b/src/App.css index ffa6e24..1b2d9fa 100644 --- a/src/App.css +++ b/src/App.css @@ -14,4 +14,33 @@ body, html { width: 100%; height: 100%; overflow-x: hidden; +} + +/* Custom animations */ +@keyframes fadeIn { + from { opacity: 0; transform: translateY(-10px); } + to { opacity: 1; transform: translateY(0); } +} + +.animate-fadeIn { + animation: fadeIn 0.3s ease-in-out forwards; +} + +/* Custom scrollbar for search results */ +.custom-scrollbar::-webkit-scrollbar { + width: 6px; +} + +.custom-scrollbar::-webkit-scrollbar-track { + background: #f1f1f1; + border-radius: 10px; +} + +.custom-scrollbar::-webkit-scrollbar-thumb { + background: #888; + border-radius: 10px; +} + +.custom-scrollbar::-webkit-scrollbar-thumb:hover { + background: #555; } \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index 1cf4c21..b0452da 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -22,12 +22,14 @@ function App() { return (
-
- - - } /> - } /> - + +
+
+ + } /> + } /> + +
diff --git a/src/api/apiModels.ts b/src/api/apiModels.ts index 6855325..f6c9f7b 100644 --- a/src/api/apiModels.ts +++ b/src/api/apiModels.ts @@ -12,6 +12,7 @@ export interface Candidate { estadoCivil: string; sexo: string; ocupacao: string; + apelido: string; fotoUrl: string; } diff --git a/src/components/HeroSection.tsx b/src/components/HeroSection.tsx index 250cfa0..309e1d1 100644 --- a/src/components/HeroSection.tsx +++ b/src/components/HeroSection.tsx @@ -4,11 +4,11 @@ import SearchBar from './SearchBar'; const HeroSection: React.FC = () => { return (
-
+

Explore Dados Eleitorais

diff --git a/src/components/NavButton.tsx b/src/components/NavButton.tsx index a99f1b5..04947d0 100644 --- a/src/components/NavButton.tsx +++ b/src/components/NavButton.tsx @@ -15,10 +15,8 @@ const NavButton: React.FC = ({ href, children, className = '' }) rounded-full backdrop-blur-sm bg-gray-800/30 - border border-gray-600/50 text-gray-100 hover:bg-gray-700/40 - hover:border-gray-500/60 hover:text-white transition-all duration-300 ease-in-out cursor-pointer diff --git a/src/components/SearchBar.tsx b/src/components/SearchBar.tsx index 18e29a5..9dea160 100644 --- a/src/components/SearchBar.tsx +++ b/src/components/SearchBar.tsx @@ -14,6 +14,7 @@ const SearchBar: React.FC = ({ className = '' }) => { const [isLoading, setIsLoading] = useState(false); const [showResults, setShowResults] = useState(false); const [error, setError] = useState(null); + const [isFocused, setIsFocused] = useState(false); const navigate = useNavigate(); const searchTimeoutRef = useRef(null); const resultsRef = useRef(null); @@ -96,6 +97,7 @@ const SearchBar: React.FC = ({ className = '' }) => { const desc = ['']; if (candidate.cpf) desc.push(`CPF: ${maskCpf(candidate.cpf)}`); + if (candidate.apelido) desc.push(`"${candidate.apelido}"`); if (candidate.ocupacao && candidate.ocupacao != 'OUTROS') desc.push(`${candidate.ocupacao}`); if (desc.length == 0) if (candidate.dataNascimento) desc.push(`${formatDateToDDMMYYYY(candidate.dataNascimento)}`); @@ -113,13 +115,18 @@ const SearchBar: React.FC = ({ className = '' }) => { }, []); return ( -
+
-
- +
+ setIsFocused(true)} + onBlur={() => setIsFocused(false)} placeholder="Pesquisar candidatos..." className="flex-grow bg-transparent text-white placeholder-gray-400 p-3 focus:outline-none" autoComplete="off" @@ -148,7 +155,7 @@ const SearchBar: React.FC = ({ className = '' }) => { {/* Search Results Dropdown */} {showResults && (searchResults.length > 0 || error) && ( -
+
{error ? (
{error} @@ -173,7 +180,7 @@ const SearchBar: React.FC = ({ className = '' }) => { {searchResults.length === 10 && (
- Mostrando os primeiros 10 resultados + Mostrando apenas os primeiros 10 resultados
)}
@@ -183,7 +190,7 @@ const SearchBar: React.FC = ({ className = '' }) => { {/* No results message */} {showResults && searchResults.length === 0 && !error && !isLoading && searchQuery.length >= 2 && ( -
+
Nenhum candidato encontrado para "{searchQuery}"