xertica-ui 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/App.tsx +182 -0
- package/README.md +330 -0
- package/assets/xertica-logo.svg +38 -0
- package/assets/xertica-x-logo.svg +21 -0
- package/bin/cli.ts +193 -0
- package/components/AssistenteXertica.tsx +2003 -0
- package/components/AudioPlayer.tsx +203 -0
- package/components/CodeBlock.tsx +242 -0
- package/components/DocumentEditor.tsx +504 -0
- package/components/ForgotPasswordPage.tsx +170 -0
- package/components/FormattedDocument.tsx +87 -0
- package/components/HomeContent.tsx +123 -0
- package/components/HomePage.tsx +70 -0
- package/components/LanguageSelector.tsx +54 -0
- package/components/LoginPage.tsx +199 -0
- package/components/MarkdownMessage.tsx +62 -0
- package/components/ModernChatInput.tsx +502 -0
- package/components/PodcastPlayer.tsx +409 -0
- package/components/ResetPasswordPage.tsx +234 -0
- package/components/Sidebar.tsx +489 -0
- package/components/TemplateContent.tsx +629 -0
- package/components/TemplatePage.tsx +70 -0
- package/components/ThemeToggle.tsx +65 -0
- package/components/VerifyEmailPage.tsx +187 -0
- package/components/XerticaLogo.tsx +69 -0
- package/components/XerticaOrbe.tsx +1339 -0
- package/components/XerticaXLogo.tsx +53 -0
- package/components/examples/DrawingMapExample.tsx +530 -0
- package/components/examples/FilterableMapExample.tsx +380 -0
- package/components/examples/LocationPickerExample.tsx +330 -0
- package/components/examples/MapExamples.tsx +280 -0
- package/components/examples/MapShowcase.tsx +446 -0
- package/components/examples/RouteMapExamples.tsx +329 -0
- package/components/examples/SimpleFilterableMap.tsx +192 -0
- package/components/examples/index.ts +52 -0
- package/components/figma/ImageWithFallback.tsx +27 -0
- package/components/index.ts +44 -0
- package/components/media/AudioPlayer.tsx +278 -0
- package/components/media/FloatingMediaWrapper.tsx +166 -0
- package/components/media/VideoPlayer.tsx +285 -0
- package/components/ui/accordion.tsx +66 -0
- package/components/ui/alert-dialog.tsx +159 -0
- package/components/ui/alert.tsx +91 -0
- package/components/ui/aspect-ratio.tsx +11 -0
- package/components/ui/avatar.tsx +65 -0
- package/components/ui/badge.tsx +55 -0
- package/components/ui/breadcrumb.tsx +109 -0
- package/components/ui/button.tsx +78 -0
- package/components/ui/calendar.tsx +235 -0
- package/components/ui/card.tsx +92 -0
- package/components/ui/carousel.tsx +241 -0
- package/components/ui/chart.tsx +353 -0
- package/components/ui/checkbox.tsx +32 -0
- package/components/ui/collapsible.tsx +33 -0
- package/components/ui/command.tsx +177 -0
- package/components/ui/context-menu.tsx +252 -0
- package/components/ui/dialog.tsx +138 -0
- package/components/ui/drawer.tsx +134 -0
- package/components/ui/dropdown-menu.tsx +257 -0
- package/components/ui/empty.tsx +90 -0
- package/components/ui/file-upload.tsx +152 -0
- package/components/ui/form.tsx +195 -0
- package/components/ui/google-maps-loader.tsx +379 -0
- package/components/ui/hover-card.tsx +44 -0
- package/components/ui/index.ts +242 -0
- package/components/ui/input-otp.tsx +77 -0
- package/components/ui/input.tsx +38 -0
- package/components/ui/label.tsx +24 -0
- package/components/ui/map-config.ts +12 -0
- package/components/ui/map-layers.tsx +129 -0
- package/components/ui/map.exports.ts +31 -0
- package/components/ui/map.tsx +412 -0
- package/components/ui/menubar.tsx +276 -0
- package/components/ui/navigation-menu.tsx +162 -0
- package/components/ui/notification-badge.tsx +61 -0
- package/components/ui/page-header.tsx +229 -0
- package/components/ui/pagination.tsx +127 -0
- package/components/ui/popover.tsx +48 -0
- package/components/ui/progress.tsx +31 -0
- package/components/ui/radio-group.tsx +56 -0
- package/components/ui/rating.tsx +102 -0
- package/components/ui/resizable.tsx +405 -0
- package/components/ui/route-map.tsx +246 -0
- package/components/ui/scroll-area.tsx +58 -0
- package/components/ui/search.tsx +70 -0
- package/components/ui/select.tsx +176 -0
- package/components/ui/separator.tsx +28 -0
- package/components/ui/sheet.tsx +138 -0
- package/components/ui/sidebar.tsx +726 -0
- package/components/ui/simple-map.tsx +92 -0
- package/components/ui/skeleton.tsx +13 -0
- package/components/ui/slider.tsx +58 -0
- package/components/ui/sonner.tsx +77 -0
- package/components/ui/stats-card.tsx +84 -0
- package/components/ui/stepper.tsx +126 -0
- package/components/ui/switch.tsx +34 -0
- package/components/ui/table.tsx +116 -0
- package/components/ui/tabs.tsx +66 -0
- package/components/ui/textarea.tsx +26 -0
- package/components/ui/timeline.tsx +140 -0
- package/components/ui/toggle-group.tsx +71 -0
- package/components/ui/toggle.tsx +46 -0
- package/components/ui/tooltip.tsx +61 -0
- package/components/ui/tree-view.tsx +123 -0
- package/components/ui/use-mobile.ts +24 -0
- package/components/ui/utils.ts +6 -0
- package/components/ui/xertica-assistant.tsx +1420 -0
- package/contexts/ApiKeyContext.tsx +123 -0
- package/contexts/AssistenteContext.tsx +118 -0
- package/contexts/BrandColorsContext.tsx +551 -0
- package/contexts/LanguageContext.tsx +36 -0
- package/contexts/ThemeContext.tsx +85 -0
- package/dist/cli.js +20922 -0
- package/eslint.config.js +41 -0
- package/guidelines/Guidelines.md +61 -0
- package/hooks/useTheme.ts +4 -0
- package/imports/Podcast.tsx +389 -0
- package/imports/XerticaAi.tsx +46 -0
- package/imports/XerticaX.tsx +20 -0
- package/imports/svg-aueiaqngck.ts +11 -0
- package/imports/svg-v9krss1ozd.ts +16 -0
- package/imports/svg-vhrdofe3qe.ts +5 -0
- package/index.css +4448 -0
- package/index.html +14 -0
- package/main.tsx +10 -0
- package/package.json +119 -0
- package/postcss.config.js +6 -0
- package/routes.tsx +33 -0
- package/styles/globals.css +15 -0
- package/styles/xertica/app-overrides/chat.css +61 -0
- package/styles/xertica/app-overrides/scrollbar.css +33 -0
- package/styles/xertica/base.css +70 -0
- package/styles/xertica/integrations/google-maps.css +76 -0
- package/styles/xertica/integrations/sonner.css +73 -0
- package/styles/xertica/theme-map.css +88 -0
- package/styles/xertica/tokens.css +190 -0
- package/tsconfig.json +31 -0
- package/tsconfig.node.json +10 -0
- package/utils/gemini.ts +140 -0
- package/vite-env.d.ts +12 -0
- package/vite.config.ts +36 -0
|
@@ -0,0 +1,629 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { Button } from './ui/button';
|
|
3
|
+
import { Input } from './ui/input';
|
|
4
|
+
import { Label } from './ui/label';
|
|
5
|
+
import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from './ui/card';
|
|
6
|
+
import { Tabs, TabsContent, TabsList, TabsTrigger } from './ui/tabs';
|
|
7
|
+
import { Badge } from './ui/badge';
|
|
8
|
+
import { Alert, AlertDescription, AlertTitle } from './ui/alert';
|
|
9
|
+
import { Checkbox } from './ui/checkbox';
|
|
10
|
+
import { RadioGroup, RadioGroupItem } from './ui/radio-group';
|
|
11
|
+
import { Switch } from './ui/switch';
|
|
12
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from './ui/select';
|
|
13
|
+
import { Textarea } from './ui/textarea';
|
|
14
|
+
import { Progress } from './ui/progress';
|
|
15
|
+
import { Separator } from './ui/separator';
|
|
16
|
+
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from './ui/table';
|
|
17
|
+
import { Settings, User, Mail, Phone, Calendar, Search, Menu, ChevronRight } from 'lucide-react';
|
|
18
|
+
import { Slider } from './ui/slider';
|
|
19
|
+
import { toast } from 'sonner';
|
|
20
|
+
import { ScrollArea } from './ui/scroll-area';
|
|
21
|
+
import { ThemeToggle } from './ThemeToggle';
|
|
22
|
+
import { LanguageSelector } from './LanguageSelector';
|
|
23
|
+
|
|
24
|
+
interface TemplateContentProps {
|
|
25
|
+
sidebarExpanded: boolean;
|
|
26
|
+
assistenteExpanded?: boolean;
|
|
27
|
+
onToggleSidebar?: () => void;
|
|
28
|
+
onToggleAssistente?: () => void;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function TemplateContent({ sidebarExpanded, assistenteExpanded = false, onToggleSidebar, onToggleAssistente }: TemplateContentProps) {
|
|
32
|
+
const [progress, setProgress] = useState(45);
|
|
33
|
+
const [sliderValue, setSliderValue] = useState([50]);
|
|
34
|
+
const [switchEnabled, setSwitchEnabled] = useState(false);
|
|
35
|
+
|
|
36
|
+
const handleFormSubmit = (e: React.FormEvent) => {
|
|
37
|
+
e.preventDefault();
|
|
38
|
+
toast.success('Formulário enviado com sucesso!');
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
return (
|
|
42
|
+
<div
|
|
43
|
+
className={`flex-1 flex flex-col overflow-hidden transition-all duration-300 ${sidebarExpanded ? 'md:pl-64' : 'md:pl-20'
|
|
44
|
+
} ${assistenteExpanded ? 'md:pr-[420px]' : 'md:pr-20'
|
|
45
|
+
}`}
|
|
46
|
+
>
|
|
47
|
+
{/* Header fixo */}
|
|
48
|
+
<header className="bg-card shadow-sm border-b border-border px-[24px] py-[14px] flex-shrink-0">
|
|
49
|
+
<div className="flex items-center justify-between p-[0px]">
|
|
50
|
+
<div className="flex items-center gap-2 text-muted-foreground">
|
|
51
|
+
{/* Botão menu para mobile */}
|
|
52
|
+
<Button
|
|
53
|
+
variant="ghost"
|
|
54
|
+
size="sm"
|
|
55
|
+
onClick={onToggleSidebar}
|
|
56
|
+
className="md:hidden mr-2 p-2"
|
|
57
|
+
>
|
|
58
|
+
<Menu className="w-5 h-5" />
|
|
59
|
+
</Button>
|
|
60
|
+
<span className="text-primary [font-weight:var(--font-weight-medium)]">Xertica.ai</span>
|
|
61
|
+
<ChevronRight className="w-4 h-4" />
|
|
62
|
+
<span className="text-foreground [font-weight:var(--font-weight-medium)]">Template Page</span>
|
|
63
|
+
</div>
|
|
64
|
+
|
|
65
|
+
{/* Controles do usuário */}
|
|
66
|
+
<div className="flex items-center gap-3">
|
|
67
|
+
{/* Badge de versão */}
|
|
68
|
+
<Badge variant="default" className="hidden sm:flex">v1.0.0</Badge>
|
|
69
|
+
|
|
70
|
+
{/* Seletor de idioma */}
|
|
71
|
+
<LanguageSelector variant="minimal" showIcon={false} className="hidden sm:flex" />
|
|
72
|
+
|
|
73
|
+
{/* Toggle de tema */}
|
|
74
|
+
<ThemeToggle className="hover:bg-accent" />
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
</header>
|
|
78
|
+
|
|
79
|
+
{/* Área de conteúdo */}
|
|
80
|
+
<main className="flex-1 overflow-hidden bg-muted">
|
|
81
|
+
<ScrollArea className="h-full">
|
|
82
|
+
<div className="p-2 sm:p-4 md:p-6">
|
|
83
|
+
<div className="max-w-6xl mx-auto space-y-8">
|
|
84
|
+
{/* Cabeçalho da página */}
|
|
85
|
+
<div className="space-y-2">
|
|
86
|
+
<h2>Template Page</h2>
|
|
87
|
+
<p className="text-muted-foreground">
|
|
88
|
+
Template completo com componentes do Xertica UI Design System
|
|
89
|
+
</p>
|
|
90
|
+
</div>
|
|
91
|
+
|
|
92
|
+
{/* Alert Examples */}
|
|
93
|
+
<section>
|
|
94
|
+
<h3 className="mb-4">Alerts</h3>
|
|
95
|
+
<div className="grid gap-4 md:grid-cols-2">
|
|
96
|
+
<Alert variant="info">
|
|
97
|
+
<AlertTitle>Informação</AlertTitle>
|
|
98
|
+
<AlertDescription>
|
|
99
|
+
Este é um exemplo de alerta informativo usando os componentes do Design System.
|
|
100
|
+
</AlertDescription>
|
|
101
|
+
</Alert>
|
|
102
|
+
|
|
103
|
+
<Alert variant="error">
|
|
104
|
+
<AlertTitle>Erro</AlertTitle>
|
|
105
|
+
<AlertDescription>
|
|
106
|
+
Ocorreu um erro ao processar sua solicitação.
|
|
107
|
+
</AlertDescription>
|
|
108
|
+
</Alert>
|
|
109
|
+
|
|
110
|
+
<Alert variant="success">
|
|
111
|
+
<AlertTitle>Sucesso</AlertTitle>
|
|
112
|
+
<AlertDescription>
|
|
113
|
+
Operação realizada com sucesso!
|
|
114
|
+
</AlertDescription>
|
|
115
|
+
</Alert>
|
|
116
|
+
|
|
117
|
+
<Alert variant="warning">
|
|
118
|
+
<AlertTitle>Aviso</AlertTitle>
|
|
119
|
+
<AlertDescription>
|
|
120
|
+
Atenção: Esta ação não pode ser desfeita.
|
|
121
|
+
</AlertDescription>
|
|
122
|
+
</Alert>
|
|
123
|
+
</div>
|
|
124
|
+
</section>
|
|
125
|
+
|
|
126
|
+
<Separator className="my-8" />
|
|
127
|
+
|
|
128
|
+
{/* Cards & Tabs */}
|
|
129
|
+
<section>
|
|
130
|
+
<h3 className="mb-4">Cards & Tabs</h3>
|
|
131
|
+
|
|
132
|
+
<Tabs defaultValue="overview" className="w-full">
|
|
133
|
+
<TabsList className="grid w-full grid-cols-4">
|
|
134
|
+
<TabsTrigger value="overview">Visão Geral</TabsTrigger>
|
|
135
|
+
<TabsTrigger value="forms">Formulários</TabsTrigger>
|
|
136
|
+
<TabsTrigger value="data">Dados</TabsTrigger>
|
|
137
|
+
<TabsTrigger value="settings">Configurações</TabsTrigger>
|
|
138
|
+
</TabsList>
|
|
139
|
+
|
|
140
|
+
{/* Overview Tab */}
|
|
141
|
+
<TabsContent value="overview" className="space-y-4">
|
|
142
|
+
<div className="grid gap-4 md:grid-cols-3">
|
|
143
|
+
<Card>
|
|
144
|
+
<CardHeader>
|
|
145
|
+
<CardTitle>Total de Usuários</CardTitle>
|
|
146
|
+
<CardDescription>Últimos 30 dias</CardDescription>
|
|
147
|
+
</CardHeader>
|
|
148
|
+
<CardContent>
|
|
149
|
+
<div className="text-foreground">
|
|
150
|
+
<span className="[font-size:var(--text-stats)] [font-weight:var(--font-weight-bold)]">1,234</span>
|
|
151
|
+
<Badge variant="default" className="ml-2">+12%</Badge>
|
|
152
|
+
</div>
|
|
153
|
+
</CardContent>
|
|
154
|
+
</Card>
|
|
155
|
+
|
|
156
|
+
<Card>
|
|
157
|
+
<CardHeader>
|
|
158
|
+
<CardTitle>Receita Total</CardTitle>
|
|
159
|
+
<CardDescription>Mês atual</CardDescription>
|
|
160
|
+
</CardHeader>
|
|
161
|
+
<CardContent>
|
|
162
|
+
<div className="text-foreground">
|
|
163
|
+
<span className="[font-size:var(--text-stats)] [font-weight:var(--font-weight-bold)]">R$ 45,2k</span>
|
|
164
|
+
<Badge variant="secondary" className="ml-2">+8%</Badge>
|
|
165
|
+
</div>
|
|
166
|
+
</CardContent>
|
|
167
|
+
</Card>
|
|
168
|
+
|
|
169
|
+
<Card>
|
|
170
|
+
<CardHeader>
|
|
171
|
+
<CardTitle>Taxa de Conversão</CardTitle>
|
|
172
|
+
<CardDescription>Semana atual</CardDescription>
|
|
173
|
+
</CardHeader>
|
|
174
|
+
<CardContent>
|
|
175
|
+
<div className="text-foreground">
|
|
176
|
+
<span className="[font-size:var(--text-stats)] [font-weight:var(--font-weight-bold)]">3.2%</span>
|
|
177
|
+
<Badge variant="outline" className="ml-2">-2%</Badge>
|
|
178
|
+
</div>
|
|
179
|
+
</CardContent>
|
|
180
|
+
</Card>
|
|
181
|
+
</div>
|
|
182
|
+
|
|
183
|
+
<Card>
|
|
184
|
+
<CardHeader>
|
|
185
|
+
<CardTitle>Progress & Sliders</CardTitle>
|
|
186
|
+
<CardDescription>Exemplos de componentes de progresso</CardDescription>
|
|
187
|
+
</CardHeader>
|
|
188
|
+
<CardContent className="space-y-6">
|
|
189
|
+
<div className="space-y-2">
|
|
190
|
+
<div className="flex items-center justify-between">
|
|
191
|
+
<Label>Progresso do Projeto</Label>
|
|
192
|
+
<span className="[font-size:var(--text-small)] text-muted-foreground">{progress}%</span>
|
|
193
|
+
</div>
|
|
194
|
+
<Progress value={progress} className="w-full" />
|
|
195
|
+
<div className="flex gap-2">
|
|
196
|
+
<Button size="sm" onClick={() => setProgress(Math.max(0, progress - 10))}>-10%</Button>
|
|
197
|
+
<Button size="sm" onClick={() => setProgress(Math.min(100, progress + 10))}>+10%</Button>
|
|
198
|
+
</div>
|
|
199
|
+
</div>
|
|
200
|
+
|
|
201
|
+
<Separator />
|
|
202
|
+
|
|
203
|
+
<div className="space-y-2">
|
|
204
|
+
<div className="flex items-center justify-between">
|
|
205
|
+
<Label>Volume</Label>
|
|
206
|
+
<span className="[font-size:var(--text-small)] text-muted-foreground">{sliderValue[0]}%</span>
|
|
207
|
+
</div>
|
|
208
|
+
<Slider
|
|
209
|
+
value={sliderValue}
|
|
210
|
+
onValueChange={setSliderValue}
|
|
211
|
+
min={0}
|
|
212
|
+
max={100}
|
|
213
|
+
step={1}
|
|
214
|
+
className="w-full"
|
|
215
|
+
/>
|
|
216
|
+
</div>
|
|
217
|
+
</CardContent>
|
|
218
|
+
</Card>
|
|
219
|
+
</TabsContent>
|
|
220
|
+
|
|
221
|
+
{/* Forms Tab */}
|
|
222
|
+
<TabsContent value="forms" className="space-y-4">
|
|
223
|
+
<Card>
|
|
224
|
+
<CardHeader>
|
|
225
|
+
<CardTitle>Formulário de Cadastro</CardTitle>
|
|
226
|
+
<CardDescription>Preencha os campos abaixo para criar uma nova conta</CardDescription>
|
|
227
|
+
</CardHeader>
|
|
228
|
+
<CardContent>
|
|
229
|
+
<form onSubmit={handleFormSubmit} className="space-y-4">
|
|
230
|
+
<div className="grid gap-4 md:grid-cols-2">
|
|
231
|
+
<div className="space-y-2">
|
|
232
|
+
<Label htmlFor="firstName">Nome</Label>
|
|
233
|
+
<Input id="firstName" placeholder="João" />
|
|
234
|
+
</div>
|
|
235
|
+
<div className="space-y-2">
|
|
236
|
+
<Label htmlFor="lastName">Sobrenome</Label>
|
|
237
|
+
<Input id="lastName" placeholder="Silva" />
|
|
238
|
+
</div>
|
|
239
|
+
</div>
|
|
240
|
+
|
|
241
|
+
<div className="space-y-2">
|
|
242
|
+
<Label htmlFor="email">E-mail</Label>
|
|
243
|
+
<div className="relative">
|
|
244
|
+
<Mail className="absolute left-3 top-3 h-4 w-4 text-muted-foreground" />
|
|
245
|
+
<Input id="email" type="email" placeholder="joao@exemplo.com" className="pl-10" />
|
|
246
|
+
</div>
|
|
247
|
+
</div>
|
|
248
|
+
|
|
249
|
+
<div className="space-y-2">
|
|
250
|
+
<Label htmlFor="phone">Telefone</Label>
|
|
251
|
+
<div className="relative">
|
|
252
|
+
<Phone className="absolute left-3 top-3 h-4 w-4 text-muted-foreground" />
|
|
253
|
+
<Input id="phone" type="tel" placeholder="(11) 99999-9999" className="pl-10" />
|
|
254
|
+
</div>
|
|
255
|
+
</div>
|
|
256
|
+
|
|
257
|
+
<div className="space-y-2">
|
|
258
|
+
<Label htmlFor="role">Cargo</Label>
|
|
259
|
+
<Select>
|
|
260
|
+
<SelectTrigger id="role">
|
|
261
|
+
<SelectValue placeholder="Selecione um cargo" />
|
|
262
|
+
</SelectTrigger>
|
|
263
|
+
<SelectContent>
|
|
264
|
+
<SelectItem value="developer">Desenvolvedor</SelectItem>
|
|
265
|
+
<SelectItem value="designer">Designer</SelectItem>
|
|
266
|
+
<SelectItem value="manager">Gerente</SelectItem>
|
|
267
|
+
<SelectItem value="analyst">Analista</SelectItem>
|
|
268
|
+
</SelectContent>
|
|
269
|
+
</Select>
|
|
270
|
+
</div>
|
|
271
|
+
|
|
272
|
+
<div className="space-y-2">
|
|
273
|
+
<Label htmlFor="bio">Biografia</Label>
|
|
274
|
+
<Textarea
|
|
275
|
+
id="bio"
|
|
276
|
+
placeholder="Conte-nos um pouco sobre você..."
|
|
277
|
+
rows={4}
|
|
278
|
+
/>
|
|
279
|
+
</div>
|
|
280
|
+
|
|
281
|
+
<Separator />
|
|
282
|
+
|
|
283
|
+
<div className="space-y-4">
|
|
284
|
+
<h4>Preferências</h4>
|
|
285
|
+
|
|
286
|
+
<div className="space-y-3">
|
|
287
|
+
<div className="flex items-center space-x-2">
|
|
288
|
+
<Checkbox id="newsletter" />
|
|
289
|
+
<Label htmlFor="newsletter" className="font-normal">
|
|
290
|
+
Receber newsletter por e-mail
|
|
291
|
+
</Label>
|
|
292
|
+
</div>
|
|
293
|
+
|
|
294
|
+
<div className="flex items-center space-x-2">
|
|
295
|
+
<Checkbox id="notifications" />
|
|
296
|
+
<Label htmlFor="notifications" className="font-normal">
|
|
297
|
+
Ativar notificações push
|
|
298
|
+
</Label>
|
|
299
|
+
</div>
|
|
300
|
+
|
|
301
|
+
<div className="flex items-center space-x-2">
|
|
302
|
+
<Checkbox id="updates" />
|
|
303
|
+
<Label htmlFor="updates" className="font-normal">
|
|
304
|
+
Receber atualizações sobre novos recursos
|
|
305
|
+
</Label>
|
|
306
|
+
</div>
|
|
307
|
+
</div>
|
|
308
|
+
|
|
309
|
+
<Separator />
|
|
310
|
+
|
|
311
|
+
<div className="space-y-3">
|
|
312
|
+
<Label>Tipo de Conta</Label>
|
|
313
|
+
<RadioGroup defaultValue="personal">
|
|
314
|
+
<div className="flex items-center space-x-2">
|
|
315
|
+
<RadioGroupItem value="personal" id="personal" />
|
|
316
|
+
<Label htmlFor="personal" className="font-normal">Pessoal</Label>
|
|
317
|
+
</div>
|
|
318
|
+
<div className="flex items-center space-x-2">
|
|
319
|
+
<RadioGroupItem value="business" id="business" />
|
|
320
|
+
<Label htmlFor="business" className="font-normal">Empresarial</Label>
|
|
321
|
+
</div>
|
|
322
|
+
<div className="flex items-center space-x-2">
|
|
323
|
+
<RadioGroupItem value="enterprise" id="enterprise" />
|
|
324
|
+
<Label htmlFor="enterprise" className="font-normal">Enterprise</Label>
|
|
325
|
+
</div>
|
|
326
|
+
</RadioGroup>
|
|
327
|
+
</div>
|
|
328
|
+
</div>
|
|
329
|
+
</form>
|
|
330
|
+
</CardContent>
|
|
331
|
+
<CardFooter className="flex justify-between">
|
|
332
|
+
<Button variant="outline">Cancelar</Button>
|
|
333
|
+
<Button onClick={handleFormSubmit}>Criar Conta</Button>
|
|
334
|
+
</CardFooter>
|
|
335
|
+
</Card>
|
|
336
|
+
</TabsContent>
|
|
337
|
+
|
|
338
|
+
{/* Data Tab */}
|
|
339
|
+
<TabsContent value="data" className="space-y-4">
|
|
340
|
+
<Card>
|
|
341
|
+
<CardHeader>
|
|
342
|
+
<CardTitle>Lista de Usuários</CardTitle>
|
|
343
|
+
<CardDescription>Gerenciar usuários do sistema</CardDescription>
|
|
344
|
+
</CardHeader>
|
|
345
|
+
<CardContent>
|
|
346
|
+
<div className="mb-4">
|
|
347
|
+
<div className="relative">
|
|
348
|
+
<Search className="absolute left-3 top-3 h-4 w-4 text-muted-foreground" />
|
|
349
|
+
<Input placeholder="Buscar usuários..." className="pl-10" />
|
|
350
|
+
</div>
|
|
351
|
+
</div>
|
|
352
|
+
|
|
353
|
+
<div className="rounded-[var(--radius-lg)] border border-border overflow-hidden">
|
|
354
|
+
<Table>
|
|
355
|
+
<TableHeader>
|
|
356
|
+
<TableRow>
|
|
357
|
+
<TableHead>Nome</TableHead>
|
|
358
|
+
<TableHead>E-mail</TableHead>
|
|
359
|
+
<TableHead>Cargo</TableHead>
|
|
360
|
+
<TableHead>Status</TableHead>
|
|
361
|
+
<TableHead className="text-right">Ações</TableHead>
|
|
362
|
+
</TableRow>
|
|
363
|
+
</TableHeader>
|
|
364
|
+
<TableBody>
|
|
365
|
+
<TableRow>
|
|
366
|
+
<TableCell>Ana Silva</TableCell>
|
|
367
|
+
<TableCell>ana.silva@exemplo.com</TableCell>
|
|
368
|
+
<TableCell>Desenvolvedora</TableCell>
|
|
369
|
+
<TableCell>
|
|
370
|
+
<Badge variant="default">Ativo</Badge>
|
|
371
|
+
</TableCell>
|
|
372
|
+
<TableCell className="text-right">
|
|
373
|
+
<Button variant="ghost" size="sm">Editar</Button>
|
|
374
|
+
</TableCell>
|
|
375
|
+
</TableRow>
|
|
376
|
+
<TableRow>
|
|
377
|
+
<TableCell>Bruno Costa</TableCell>
|
|
378
|
+
<TableCell>bruno.costa@exemplo.com</TableCell>
|
|
379
|
+
<TableCell>Designer</TableCell>
|
|
380
|
+
<TableCell>
|
|
381
|
+
<Badge variant="default">Ativo</Badge>
|
|
382
|
+
</TableCell>
|
|
383
|
+
<TableCell className="text-right">
|
|
384
|
+
<Button variant="ghost" size="sm">Editar</Button>
|
|
385
|
+
</TableCell>
|
|
386
|
+
</TableRow>
|
|
387
|
+
<TableRow>
|
|
388
|
+
<TableCell>Carla Oliveira</TableCell>
|
|
389
|
+
<TableCell>carla.oliveira@exemplo.com</TableCell>
|
|
390
|
+
<TableCell>Gerente</TableCell>
|
|
391
|
+
<TableCell>
|
|
392
|
+
<Badge variant="secondary">Ausente</Badge>
|
|
393
|
+
</TableCell>
|
|
394
|
+
<TableCell className="text-right">
|
|
395
|
+
<Button variant="ghost" size="sm">Editar</Button>
|
|
396
|
+
</TableCell>
|
|
397
|
+
</TableRow>
|
|
398
|
+
<TableRow>
|
|
399
|
+
<TableCell>Diego Santos</TableCell>
|
|
400
|
+
<TableCell>diego.santos@exemplo.com</TableCell>
|
|
401
|
+
<TableCell>Analista</TableCell>
|
|
402
|
+
<TableCell>
|
|
403
|
+
<Badge variant="outline">Inativo</Badge>
|
|
404
|
+
</TableCell>
|
|
405
|
+
<TableCell className="text-right">
|
|
406
|
+
<Button variant="ghost" size="sm">Editar</Button>
|
|
407
|
+
</TableCell>
|
|
408
|
+
</TableRow>
|
|
409
|
+
</TableBody>
|
|
410
|
+
</Table>
|
|
411
|
+
</div>
|
|
412
|
+
</CardContent>
|
|
413
|
+
<CardFooter className="flex justify-between items-center">
|
|
414
|
+
<p className="text-muted-foreground">
|
|
415
|
+
Mostrando 4 de 127 usuários
|
|
416
|
+
</p>
|
|
417
|
+
<div className="flex gap-2">
|
|
418
|
+
<Button variant="outline" size="sm">Anterior</Button>
|
|
419
|
+
<Button variant="outline" size="sm">Próximo</Button>
|
|
420
|
+
</div>
|
|
421
|
+
</CardFooter>
|
|
422
|
+
</Card>
|
|
423
|
+
</TabsContent>
|
|
424
|
+
|
|
425
|
+
{/* Settings Tab */}
|
|
426
|
+
<TabsContent value="settings" className="space-y-4">
|
|
427
|
+
<Card>
|
|
428
|
+
<CardHeader>
|
|
429
|
+
<CardTitle>Configurações do Sistema</CardTitle>
|
|
430
|
+
<CardDescription>Gerencie as configurações gerais</CardDescription>
|
|
431
|
+
</CardHeader>
|
|
432
|
+
<CardContent className="space-y-6">
|
|
433
|
+
<div className="flex items-center justify-between">
|
|
434
|
+
<div className="space-y-1">
|
|
435
|
+
<Label>Modo Escuro</Label>
|
|
436
|
+
<p className="text-muted-foreground">
|
|
437
|
+
Ativar tema escuro na interface
|
|
438
|
+
</p>
|
|
439
|
+
</div>
|
|
440
|
+
<Switch checked={switchEnabled} onCheckedChange={setSwitchEnabled} />
|
|
441
|
+
</div>
|
|
442
|
+
|
|
443
|
+
<Separator />
|
|
444
|
+
|
|
445
|
+
<div className="flex items-center justify-between">
|
|
446
|
+
<div className="space-y-1">
|
|
447
|
+
<Label>Notificações por E-mail</Label>
|
|
448
|
+
<p className="text-muted-foreground">
|
|
449
|
+
Receber atualizações importantes por e-mail
|
|
450
|
+
</p>
|
|
451
|
+
</div>
|
|
452
|
+
<Switch defaultChecked />
|
|
453
|
+
</div>
|
|
454
|
+
|
|
455
|
+
<Separator />
|
|
456
|
+
|
|
457
|
+
<div className="flex items-center justify-between">
|
|
458
|
+
<div className="space-y-1">
|
|
459
|
+
<Label>Notificações Push</Label>
|
|
460
|
+
<p className="text-muted-foreground">
|
|
461
|
+
Receber notificações instantâneas no navegador
|
|
462
|
+
</p>
|
|
463
|
+
</div>
|
|
464
|
+
<Switch />
|
|
465
|
+
</div>
|
|
466
|
+
|
|
467
|
+
<Separator />
|
|
468
|
+
|
|
469
|
+
<div className="space-y-3">
|
|
470
|
+
<Label>Idioma</Label>
|
|
471
|
+
<Select defaultValue="pt-br">
|
|
472
|
+
<SelectTrigger>
|
|
473
|
+
<SelectValue />
|
|
474
|
+
</SelectTrigger>
|
|
475
|
+
<SelectContent>
|
|
476
|
+
<SelectItem value="pt-br">Português (Brasil)</SelectItem>
|
|
477
|
+
<SelectItem value="en">English</SelectItem>
|
|
478
|
+
<SelectItem value="es">Español</SelectItem>
|
|
479
|
+
</SelectContent>
|
|
480
|
+
</Select>
|
|
481
|
+
</div>
|
|
482
|
+
|
|
483
|
+
<Separator />
|
|
484
|
+
|
|
485
|
+
<div className="space-y-3">
|
|
486
|
+
<Label>Fuso Horário</Label>
|
|
487
|
+
<Select defaultValue="america-sao-paulo">
|
|
488
|
+
<SelectTrigger>
|
|
489
|
+
<SelectValue />
|
|
490
|
+
</SelectTrigger>
|
|
491
|
+
<SelectContent>
|
|
492
|
+
<SelectItem value="america-sao-paulo">América/São Paulo (GMT-3)</SelectItem>
|
|
493
|
+
<SelectItem value="america-new-york">América/Nova York (GMT-5)</SelectItem>
|
|
494
|
+
<SelectItem value="europe-london">Europa/Londres (GMT+0)</SelectItem>
|
|
495
|
+
</SelectContent>
|
|
496
|
+
</Select>
|
|
497
|
+
</div>
|
|
498
|
+
</CardContent>
|
|
499
|
+
<CardFooter className="flex justify-between">
|
|
500
|
+
<Button variant="outline">Restaurar Padrões</Button>
|
|
501
|
+
<Button>Salvar Alterações</Button>
|
|
502
|
+
</CardFooter>
|
|
503
|
+
</Card>
|
|
504
|
+
</TabsContent>
|
|
505
|
+
</Tabs>
|
|
506
|
+
</section>
|
|
507
|
+
|
|
508
|
+
<Separator className="my-8" />
|
|
509
|
+
|
|
510
|
+
{/* Button Variants */}
|
|
511
|
+
<section>
|
|
512
|
+
<h3 className="mb-4">Botões</h3>
|
|
513
|
+
<Card>
|
|
514
|
+
<CardHeader>
|
|
515
|
+
<CardTitle>Variações de Botões</CardTitle>
|
|
516
|
+
<CardDescription>Diferentes estilos e tamanhos de botões</CardDescription>
|
|
517
|
+
</CardHeader>
|
|
518
|
+
<CardContent className="space-y-6">
|
|
519
|
+
<div className="space-y-3">
|
|
520
|
+
<Label>Variantes</Label>
|
|
521
|
+
<div className="flex flex-wrap gap-3">
|
|
522
|
+
<Button variant="default">Default</Button>
|
|
523
|
+
<Button variant="secondary">Secondary</Button>
|
|
524
|
+
<Button variant="outline">Outline</Button>
|
|
525
|
+
<Button variant="ghost">Ghost</Button>
|
|
526
|
+
<Button variant="link">Link</Button>
|
|
527
|
+
<Button variant="destructive">Destructive</Button>
|
|
528
|
+
</div>
|
|
529
|
+
</div>
|
|
530
|
+
|
|
531
|
+
<Separator />
|
|
532
|
+
|
|
533
|
+
<div className="space-y-3">
|
|
534
|
+
<Label>Tamanhos</Label>
|
|
535
|
+
<div className="flex flex-wrap items-center gap-3">
|
|
536
|
+
<Button size="sm">Small</Button>
|
|
537
|
+
<Button size="default">Default</Button>
|
|
538
|
+
<Button size="lg">Large</Button>
|
|
539
|
+
<Button size="icon">
|
|
540
|
+
<Settings className="h-4 w-4" />
|
|
541
|
+
</Button>
|
|
542
|
+
</div>
|
|
543
|
+
</div>
|
|
544
|
+
|
|
545
|
+
<Separator />
|
|
546
|
+
|
|
547
|
+
<div className="space-y-3">
|
|
548
|
+
<Label>Com Ícones</Label>
|
|
549
|
+
<div className="flex flex-wrap gap-3">
|
|
550
|
+
<Button>
|
|
551
|
+
<User className="mr-2 h-4 w-4" />
|
|
552
|
+
Perfil
|
|
553
|
+
</Button>
|
|
554
|
+
<Button variant="secondary">
|
|
555
|
+
<Mail className="mr-2 h-4 w-4" />
|
|
556
|
+
Mensagens
|
|
557
|
+
</Button>
|
|
558
|
+
<Button variant="outline">
|
|
559
|
+
<Calendar className="mr-2 h-4 w-4" />
|
|
560
|
+
Agendar
|
|
561
|
+
</Button>
|
|
562
|
+
</div>
|
|
563
|
+
</div>
|
|
564
|
+
|
|
565
|
+
<Separator />
|
|
566
|
+
|
|
567
|
+
<div className="space-y-3">
|
|
568
|
+
<Label>Estados</Label>
|
|
569
|
+
<div className="flex flex-wrap gap-3">
|
|
570
|
+
<Button disabled>Desabilitado</Button>
|
|
571
|
+
<Button variant="outline" disabled>Outline Desabilitado</Button>
|
|
572
|
+
</div>
|
|
573
|
+
</div>
|
|
574
|
+
</CardContent>
|
|
575
|
+
</Card>
|
|
576
|
+
</section>
|
|
577
|
+
|
|
578
|
+
<Separator className="my-8" />
|
|
579
|
+
|
|
580
|
+
{/* Badges */}
|
|
581
|
+
<section>
|
|
582
|
+
<h3 className="mb-4">Badges</h3>
|
|
583
|
+
<Card>
|
|
584
|
+
<CardHeader>
|
|
585
|
+
<CardTitle>Variações de Badges</CardTitle>
|
|
586
|
+
<CardDescription>Diferentes estilos de badges para status e tags</CardDescription>
|
|
587
|
+
</CardHeader>
|
|
588
|
+
<CardContent>
|
|
589
|
+
<div className="flex flex-wrap gap-3">
|
|
590
|
+
<Badge variant="default">Default</Badge>
|
|
591
|
+
<Badge variant="secondary">Secondary</Badge>
|
|
592
|
+
<Badge variant="outline">Outline</Badge>
|
|
593
|
+
<Badge variant="destructive">Destructive</Badge>
|
|
594
|
+
<Badge className="bg-success text-success-foreground">Success</Badge>
|
|
595
|
+
<Badge className="bg-warning text-warning-foreground">Warning</Badge>
|
|
596
|
+
<Badge className="bg-info text-info-foreground">Info</Badge>
|
|
597
|
+
</div>
|
|
598
|
+
</CardContent>
|
|
599
|
+
</Card>
|
|
600
|
+
</section>
|
|
601
|
+
|
|
602
|
+
{/* Footer Note */}
|
|
603
|
+
<Card className="mt-8">
|
|
604
|
+
<CardHeader>
|
|
605
|
+
<CardTitle>Template CLI-Ready</CardTitle>
|
|
606
|
+
<CardDescription>Como usar este template</CardDescription>
|
|
607
|
+
</CardHeader>
|
|
608
|
+
<CardContent className="space-y-4">
|
|
609
|
+
<p className="text-muted-foreground">
|
|
610
|
+
Este template está pronto para ser usado como base para novos projetos. Todos os componentes
|
|
611
|
+
utilizam as variáveis CSS definidas em <code className="bg-muted px-2 py-1 rounded-[var(--radius-sm)] [font-size:var(--text-small)]">/styles/xertica/tokens.css</code>
|
|
612
|
+
e seguem a arquitetura CLI-first do Xertica UI.
|
|
613
|
+
</p>
|
|
614
|
+
<Alert variant="info">
|
|
615
|
+
<AlertTitle>Dica</AlertTitle>
|
|
616
|
+
<AlertDescription>
|
|
617
|
+
Copie este arquivo como ponto de partida para suas páginas. Todos os componentes são reutilizáveis
|
|
618
|
+
e customizáveis através das variáveis CSS.
|
|
619
|
+
</AlertDescription>
|
|
620
|
+
</Alert>
|
|
621
|
+
</CardContent>
|
|
622
|
+
</Card>
|
|
623
|
+
</div>
|
|
624
|
+
</div>
|
|
625
|
+
</ScrollArea>
|
|
626
|
+
</main>
|
|
627
|
+
</div>
|
|
628
|
+
);
|
|
629
|
+
}
|