Skip to content

Commit de4787a

Browse files
committed
feat: revisão inicial
1 parent b0fc9b2 commit de4787a

File tree

4 files changed

+65
-14
lines changed

4 files changed

+65
-14
lines changed

src/App.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { TooltipProvider } from "@/components/ui/tooltip";
44
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
55
import { BrowserRouter, Routes, Route } from "react-router-dom";
66
import { ThemeProvider } from "next-themes";
7+
import ScrollToTop from "@/components/ScrollToTop";
78
import Index from "./pages/Index";
89
import NotFound from "./pages/NotFound";
910
import Constructo from "./pages/Constructo";
@@ -28,6 +29,7 @@ const App = () => (
2829
<Toaster />
2930
<Sonner />
3031
<BrowserRouter>
32+
<ScrollToTop />
3133
<Routes>
3234
<Route path="/" element={<Index />} />
3335
<Route path="/constructo" element={<Constructo />} />

src/components/PackageCard.tsx

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Button } from "@/components/ui/button";
22
import { Card } from "@/components/ui/card";
33
import { ArrowRight, ExternalLink } from "lucide-react";
4+
import { useNavigate } from "react-router-dom";
45

56
interface PackageCardProps {
67
name: string;
@@ -9,23 +10,44 @@ interface PackageCardProps {
910
gradient: string;
1011
icon: React.ReactNode;
1112
isMain?: boolean;
13+
docsLink?: string;
14+
githubLink?: string;
1215
}
1316

14-
const PackageCard = ({ name, description, features, gradient, icon, isMain = false }: PackageCardProps) => {
17+
const PackageCard = ({
18+
name,
19+
description,
20+
features,
21+
gradient,
22+
icon,
23+
isMain = false,
24+
docsLink,
25+
githubLink,
26+
}: PackageCardProps) => {
27+
const navigate = useNavigate();
28+
1529
return (
16-
<Card className={`p-8 relative overflow-hidden border-2 transition-all duration-300 hover:shadow-elegant hover:scale-105 ${
17-
isMain ? 'border-primary/20 bg-gradient-to-br from-primary/5 to-accent/5' : 'border-border hover:border-primary/30'
18-
}`}>
19-
<div className={`absolute top-0 right-0 w-32 h-32 ${gradient} opacity-10 rounded-full -translate-y-16 translate-x-16`}></div>
20-
30+
<Card
31+
className={`p-8 relative overflow-hidden border-2 transition-all duration-300 hover:shadow-elegant hover:scale-105 ${
32+
isMain
33+
? "border-primary/20 bg-gradient-to-br from-primary/5 to-accent/5"
34+
: "border-border hover:border-primary/30"
35+
}`}
36+
>
37+
<div
38+
className={`absolute top-0 right-0 w-32 h-32 ${gradient} opacity-10 rounded-full -translate-y-16 translate-x-16`}
39+
></div>
40+
2141
<div className="relative">
22-
<div className={`w-14 h-14 ${gradient} rounded-2xl mb-6 flex items-center justify-center shadow-elegant`}>
42+
<div
43+
className={`w-14 h-14 ${gradient} rounded-2xl mb-6 flex items-center justify-center shadow-elegant`}
44+
>
2345
{icon}
2446
</div>
25-
47+
2648
<h3 className="text-2xl font-bold mb-4 text-foreground">{name}</h3>
2749
<p className="text-muted-foreground mb-6 text-lg">{description}</p>
28-
50+
2951
<div className="space-y-3 mb-8">
3052
{features.map((feature, index) => (
3153
<div key={index} className="flex items-start space-x-3">
@@ -34,13 +56,20 @@ const PackageCard = ({ name, description, features, gradient, icon, isMain = fal
3456
</div>
3557
))}
3658
</div>
37-
59+
3860
<div className="flex flex-col sm:flex-row gap-3">
39-
<Button className={`${gradient} shadow-elegant flex-1`}>
61+
<Button
62+
className={`${gradient} shadow-elegant flex-1`}
63+
onClick={() => (docsLink ? navigate(docsLink) : null)}
64+
>
4065
Documentação
4166
<ArrowRight className="w-4 h-4 ml-2" />
4267
</Button>
43-
<Button variant="outline" className="flex-1">
68+
<Button
69+
variant="outline"
70+
className="flex-1"
71+
onClick={() => (githubLink ? window.open(githubLink, "_blank") : null)}
72+
>
4473
<ExternalLink className="w-4 h-4 mr-2" />
4574
GitHub
4675
</Button>
@@ -50,4 +79,4 @@ const PackageCard = ({ name, description, features, gradient, icon, isMain = fal
5079
);
5180
};
5281

53-
export default PackageCard;
82+
export default PackageCard;

src/components/Packages.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ const Packages = () => {
2222
gradient="bg-gradient-constructo"
2323
icon={<Package className="w-7 h-7 text-primary-foreground" />}
2424
isMain={true}
25+
docsLink="/docs/constructo"
26+
githubLink="https://github.com/devitools/constructo"
2527
features={[
2628
"Serialização / Desserialização automática de classes",
2729
"Abstração de regras de validação e mapeamentos de entrada",
@@ -32,9 +34,11 @@ const Packages = () => {
3234

3335
<PackageCard
3436
name="Serendipity"
35-
description="O pacote ideal para quem quer lidar com o framework Hyperf, simplificando ao máximo o uso do framework."
37+
description="O pacote ideal para quem quer lidar com o framework Hyperf, simplificando ao máximo a ferramenta baseada no Swoole."
3638
gradient="bg-gradient-serendipity"
3739
icon={<Zap className="w-7 h-7 text-accent-foreground" />}
40+
docsLink="/docs/serendipity"
41+
githubLink="https://github.com/devitools/serendipity"
3842
features={[
3943
"Simplificação de consumo de rotas e requisições HTTP",
4044
"Extensões para rotinas de testes automatizados",
@@ -48,6 +52,8 @@ const Packages = () => {
4852
description="Extensão do Constructo especificamente otimizada para o framework Laravel, oferecendo ferramentas avançadas."
4953
gradient="bg-gradient-effulgence"
5054
icon={<Layers className="w-7 h-7 text-success-foreground" />}
55+
docsLink="/docs/effulgence"
56+
githubLink="https://github.com/devitools/effulgence"
5157
features={[
5258
"Simplificação de consumo de rotas e requisições HTTP",
5359
"Facades próprios e recursos para maximizar a produtividade",

src/components/ScrollToTop.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { useEffect } from "react";
2+
import { useLocation } from "react-router-dom";
3+
4+
const ScrollToTop = () => {
5+
const { pathname } = useLocation();
6+
7+
useEffect(() => {
8+
window.scrollTo(0, 0);
9+
}, [pathname]);
10+
11+
return null;
12+
};
13+
14+
export default ScrollToTop;

0 commit comments

Comments
 (0)