|
1 | | -import { DocsLayout } from "@/components/DocsLayout"; |
2 | | -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; |
3 | | -import { Badge } from "@/components/ui/badge"; |
4 | | -import { BookOpen, Package, Wrench, Layers } from "lucide-react"; |
| 1 | +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; |
| 2 | +import { useLocation, useNavigate } from "react-router-dom"; |
| 3 | +import { useEffect } from "react"; |
5 | 4 | import Header from "@/components/Header"; |
6 | 5 | import Footer from "@/components/Footer"; |
| 6 | +import DocsIntroducao from "./docs/DocsIntroducao"; |
| 7 | +import DocsGuias from "./docs/DocsGuias"; |
| 8 | +import DocsDicasTruques from "./docs/DocsDicasTruques"; |
| 9 | +import DocsEcossistema from "./docs/DocsEcossistema"; |
| 10 | +import DocsSobre from "./docs/DocsSobre"; |
7 | 11 |
|
8 | 12 | const Docs = () => { |
| 13 | + const location = useLocation(); |
| 14 | + const navigate = useNavigate(); |
| 15 | + |
| 16 | + // Extrair a aba ativa da URL |
| 17 | + const currentTab = location.pathname.split('/docs/')[1] || 'introducao'; |
| 18 | + |
| 19 | + const handleTabChange = (value: string) => { |
| 20 | + navigate(`/docs/${value}`); |
| 21 | + }; |
| 22 | + |
| 23 | + // Redirecionar para /docs/introducao se estiver apenas em /docs |
| 24 | + useEffect(() => { |
| 25 | + if (location.pathname === '/docs') { |
| 26 | + navigate('/docs/introducao', { replace: true }); |
| 27 | + } |
| 28 | + }, [location.pathname, navigate]); |
| 29 | + |
9 | 30 | return ( |
10 | 31 | <div className="min-h-screen flex flex-col" style={{ background: 'var(--gradient-background)' }}> |
11 | 32 | <Header /> |
12 | 33 | <div className="flex-1 flex flex-col"> |
13 | | - <DocsLayout> |
14 | | - <div className="max-w-4xl mx-auto space-y-8"> |
15 | | - <div className="space-y-4"> |
16 | | - <h1 className="text-4xl font-bold bg-gradient-to-r from-primary to-accent bg-clip-text text-transparent"> |
17 | | - Documentação Devitools |
18 | | - </h1> |
19 | | - <p className="text-xl text-muted-foreground"> |
20 | | - Bem-vindo à documentação oficial dos pacotes Devitools para PHP. |
21 | | - </p> |
22 | | - </div> |
23 | | - |
24 | | - <div className="prose prose-slate dark:prose-invert max-w-none"> |
25 | | - <h2>Introdução</h2> |
26 | | - <p> |
27 | | - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. |
28 | | - Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. |
29 | | - Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. |
30 | | - </p> |
| 34 | + <div className="container mx-auto px-4 py-8"> |
| 35 | + <Tabs value={currentTab} onValueChange={handleTabChange} className="w-full"> |
| 36 | + <TabsList className="grid w-full grid-cols-5 mb-8"> |
| 37 | + <TabsTrigger value="introducao">Introdução</TabsTrigger> |
| 38 | + <TabsTrigger value="guias">Guias</TabsTrigger> |
| 39 | + <TabsTrigger value="dicas-truques">Dicas & Truques</TabsTrigger> |
| 40 | + <TabsTrigger value="ecossistema">Ecossistema</TabsTrigger> |
| 41 | + <TabsTrigger value="sobre">Sobre</TabsTrigger> |
| 42 | + </TabsList> |
31 | 43 |
|
32 | | - <p> |
33 | | - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. |
34 | | - Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, |
35 | | - eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. |
36 | | - </p> |
37 | | - |
38 | | - <h3>Requisitos do Sistema</h3> |
39 | | - <ul> |
40 | | - <li>PHP 8.1 ou superior</li> |
41 | | - <li>Composer para gerenciamento de dependências</li> |
42 | | - <li>Conhecimento básico de PHP orientado a objetos</li> |
43 | | - </ul> |
44 | | - </div> |
45 | | - |
46 | | - <div className="grid grid-cols-1 md:grid-cols-3 gap-6"> |
47 | | - <Card className="hover:shadow-lg transition-shadow"> |
48 | | - <CardHeader> |
49 | | - <div className="flex items-center space-x-2"> |
50 | | - <Wrench className="h-6 w-6 text-primary" /> |
51 | | - <CardTitle>Constructo</CardTitle> |
52 | | - </div> |
53 | | - <CardDescription> |
54 | | - Ferramentas fundamentais para projetos PHP |
55 | | - </CardDescription> |
56 | | - </CardHeader> |
57 | | - <CardContent> |
58 | | - <p className="text-sm text-muted-foreground mb-4"> |
59 | | - Sistema completo de serialização, validação e geração de dados fake para acelerar o desenvolvimento PHP. |
60 | | - </p> |
61 | | - <div className="flex flex-wrap gap-2"> |
62 | | - <Badge variant="secondary">Serialização</Badge> |
63 | | - <Badge variant="secondary">Validação</Badge> |
64 | | - <Badge variant="secondary">Testing</Badge> |
65 | | - </div> |
66 | | - </CardContent> |
67 | | - </Card> |
68 | | - |
69 | | - <Card className="hover:shadow-lg transition-shadow"> |
70 | | - <CardHeader> |
71 | | - <div className="flex items-center space-x-2"> |
72 | | - <Package className="h-6 w-6 text-accent" /> |
73 | | - <CardTitle>Serendipity</CardTitle> |
74 | | - </div> |
75 | | - <CardDescription> |
76 | | - Extensão otimizada para Hyperf |
77 | | - </CardDescription> |
78 | | - </CardHeader> |
79 | | - <CardContent> |
80 | | - <p className="text-sm text-muted-foreground mb-4"> |
81 | | - Ferramentas avançadas para desenvolvimento com Hyperf, incluindo workers, rotas e tratamento de erros. |
82 | | - </p> |
83 | | - <div className="flex flex-wrap gap-2"> |
84 | | - <Badge variant="secondary">Hyperf</Badge> |
85 | | - <Badge variant="secondary">Workers</Badge> |
86 | | - <Badge variant="secondary">Async</Badge> |
87 | | - </div> |
88 | | - </CardContent> |
89 | | - </Card> |
90 | | - |
91 | | - <Card className="hover:shadow-lg transition-shadow"> |
92 | | - <CardHeader> |
93 | | - <div className="flex items-center space-x-2"> |
94 | | - <Layers className="h-6 w-6 text-success" /> |
95 | | - <CardTitle>Effulgence</CardTitle> |
96 | | - </div> |
97 | | - <CardDescription> |
98 | | - Extensão otimizada para Laravel |
99 | | - </CardDescription> |
100 | | - </CardHeader> |
101 | | - <CardContent> |
102 | | - <p className="text-sm text-muted-foreground mb-4"> |
103 | | - Integração completa com Laravel, incluindo Eloquent, controllers simplificados e middlewares otimizados. |
104 | | - </p> |
105 | | - <div className="flex flex-wrap gap-2"> |
106 | | - <Badge variant="secondary">Laravel</Badge> |
107 | | - <Badge variant="secondary">Eloquent</Badge> |
108 | | - <Badge variant="secondary">Controllers</Badge> |
109 | | - </div> |
110 | | - </CardContent> |
111 | | - </Card> |
112 | | - </div> |
113 | | - |
114 | | - <div className="bg-muted/50 rounded-lg p-6"> |
115 | | - <h3 className="text-lg font-semibold mb-3">Instalação Rápida</h3> |
116 | | - <p className="text-muted-foreground mb-4"> |
117 | | - Instale os pacotes Devitools via Composer para começar a usar em seus projetos PHP. |
118 | | - </p> |
119 | | - <div className="bg-background rounded border p-4 font-mono text-sm"> |
120 | | - composer require devitools/constructo<br /> |
121 | | - composer require devitools/serendipity<br /> |
122 | | - composer require devitools/effulgence |
123 | | - </div> |
124 | | - </div> |
| 44 | + <TabsContent value="introducao" className="mt-0"> |
| 45 | + <DocsIntroducao /> |
| 46 | + </TabsContent> |
| 47 | + |
| 48 | + <TabsContent value="guias" className="mt-0"> |
| 49 | + <DocsGuias /> |
| 50 | + </TabsContent> |
| 51 | + |
| 52 | + <TabsContent value="dicas-truques" className="mt-0"> |
| 53 | + <DocsDicasTruques /> |
| 54 | + </TabsContent> |
| 55 | + |
| 56 | + <TabsContent value="ecossistema" className="mt-0"> |
| 57 | + <DocsEcossistema /> |
| 58 | + </TabsContent> |
| 59 | + |
| 60 | + <TabsContent value="sobre" className="mt-0"> |
| 61 | + <DocsSobre /> |
| 62 | + </TabsContent> |
| 63 | + </Tabs> |
125 | 64 | </div> |
126 | | - </DocsLayout> |
127 | 65 | </div> |
128 | 66 | <Footer /> |
129 | 67 | </div> |
|
0 commit comments