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.
Files changed (141) hide show
  1. package/App.tsx +182 -0
  2. package/README.md +330 -0
  3. package/assets/xertica-logo.svg +38 -0
  4. package/assets/xertica-x-logo.svg +21 -0
  5. package/bin/cli.ts +193 -0
  6. package/components/AssistenteXertica.tsx +2003 -0
  7. package/components/AudioPlayer.tsx +203 -0
  8. package/components/CodeBlock.tsx +242 -0
  9. package/components/DocumentEditor.tsx +504 -0
  10. package/components/ForgotPasswordPage.tsx +170 -0
  11. package/components/FormattedDocument.tsx +87 -0
  12. package/components/HomeContent.tsx +123 -0
  13. package/components/HomePage.tsx +70 -0
  14. package/components/LanguageSelector.tsx +54 -0
  15. package/components/LoginPage.tsx +199 -0
  16. package/components/MarkdownMessage.tsx +62 -0
  17. package/components/ModernChatInput.tsx +502 -0
  18. package/components/PodcastPlayer.tsx +409 -0
  19. package/components/ResetPasswordPage.tsx +234 -0
  20. package/components/Sidebar.tsx +489 -0
  21. package/components/TemplateContent.tsx +629 -0
  22. package/components/TemplatePage.tsx +70 -0
  23. package/components/ThemeToggle.tsx +65 -0
  24. package/components/VerifyEmailPage.tsx +187 -0
  25. package/components/XerticaLogo.tsx +69 -0
  26. package/components/XerticaOrbe.tsx +1339 -0
  27. package/components/XerticaXLogo.tsx +53 -0
  28. package/components/examples/DrawingMapExample.tsx +530 -0
  29. package/components/examples/FilterableMapExample.tsx +380 -0
  30. package/components/examples/LocationPickerExample.tsx +330 -0
  31. package/components/examples/MapExamples.tsx +280 -0
  32. package/components/examples/MapShowcase.tsx +446 -0
  33. package/components/examples/RouteMapExamples.tsx +329 -0
  34. package/components/examples/SimpleFilterableMap.tsx +192 -0
  35. package/components/examples/index.ts +52 -0
  36. package/components/figma/ImageWithFallback.tsx +27 -0
  37. package/components/index.ts +44 -0
  38. package/components/media/AudioPlayer.tsx +278 -0
  39. package/components/media/FloatingMediaWrapper.tsx +166 -0
  40. package/components/media/VideoPlayer.tsx +285 -0
  41. package/components/ui/accordion.tsx +66 -0
  42. package/components/ui/alert-dialog.tsx +159 -0
  43. package/components/ui/alert.tsx +91 -0
  44. package/components/ui/aspect-ratio.tsx +11 -0
  45. package/components/ui/avatar.tsx +65 -0
  46. package/components/ui/badge.tsx +55 -0
  47. package/components/ui/breadcrumb.tsx +109 -0
  48. package/components/ui/button.tsx +78 -0
  49. package/components/ui/calendar.tsx +235 -0
  50. package/components/ui/card.tsx +92 -0
  51. package/components/ui/carousel.tsx +241 -0
  52. package/components/ui/chart.tsx +353 -0
  53. package/components/ui/checkbox.tsx +32 -0
  54. package/components/ui/collapsible.tsx +33 -0
  55. package/components/ui/command.tsx +177 -0
  56. package/components/ui/context-menu.tsx +252 -0
  57. package/components/ui/dialog.tsx +138 -0
  58. package/components/ui/drawer.tsx +134 -0
  59. package/components/ui/dropdown-menu.tsx +257 -0
  60. package/components/ui/empty.tsx +90 -0
  61. package/components/ui/file-upload.tsx +152 -0
  62. package/components/ui/form.tsx +195 -0
  63. package/components/ui/google-maps-loader.tsx +379 -0
  64. package/components/ui/hover-card.tsx +44 -0
  65. package/components/ui/index.ts +242 -0
  66. package/components/ui/input-otp.tsx +77 -0
  67. package/components/ui/input.tsx +38 -0
  68. package/components/ui/label.tsx +24 -0
  69. package/components/ui/map-config.ts +12 -0
  70. package/components/ui/map-layers.tsx +129 -0
  71. package/components/ui/map.exports.ts +31 -0
  72. package/components/ui/map.tsx +412 -0
  73. package/components/ui/menubar.tsx +276 -0
  74. package/components/ui/navigation-menu.tsx +162 -0
  75. package/components/ui/notification-badge.tsx +61 -0
  76. package/components/ui/page-header.tsx +229 -0
  77. package/components/ui/pagination.tsx +127 -0
  78. package/components/ui/popover.tsx +48 -0
  79. package/components/ui/progress.tsx +31 -0
  80. package/components/ui/radio-group.tsx +56 -0
  81. package/components/ui/rating.tsx +102 -0
  82. package/components/ui/resizable.tsx +405 -0
  83. package/components/ui/route-map.tsx +246 -0
  84. package/components/ui/scroll-area.tsx +58 -0
  85. package/components/ui/search.tsx +70 -0
  86. package/components/ui/select.tsx +176 -0
  87. package/components/ui/separator.tsx +28 -0
  88. package/components/ui/sheet.tsx +138 -0
  89. package/components/ui/sidebar.tsx +726 -0
  90. package/components/ui/simple-map.tsx +92 -0
  91. package/components/ui/skeleton.tsx +13 -0
  92. package/components/ui/slider.tsx +58 -0
  93. package/components/ui/sonner.tsx +77 -0
  94. package/components/ui/stats-card.tsx +84 -0
  95. package/components/ui/stepper.tsx +126 -0
  96. package/components/ui/switch.tsx +34 -0
  97. package/components/ui/table.tsx +116 -0
  98. package/components/ui/tabs.tsx +66 -0
  99. package/components/ui/textarea.tsx +26 -0
  100. package/components/ui/timeline.tsx +140 -0
  101. package/components/ui/toggle-group.tsx +71 -0
  102. package/components/ui/toggle.tsx +46 -0
  103. package/components/ui/tooltip.tsx +61 -0
  104. package/components/ui/tree-view.tsx +123 -0
  105. package/components/ui/use-mobile.ts +24 -0
  106. package/components/ui/utils.ts +6 -0
  107. package/components/ui/xertica-assistant.tsx +1420 -0
  108. package/contexts/ApiKeyContext.tsx +123 -0
  109. package/contexts/AssistenteContext.tsx +118 -0
  110. package/contexts/BrandColorsContext.tsx +551 -0
  111. package/contexts/LanguageContext.tsx +36 -0
  112. package/contexts/ThemeContext.tsx +85 -0
  113. package/dist/cli.js +20922 -0
  114. package/eslint.config.js +41 -0
  115. package/guidelines/Guidelines.md +61 -0
  116. package/hooks/useTheme.ts +4 -0
  117. package/imports/Podcast.tsx +389 -0
  118. package/imports/XerticaAi.tsx +46 -0
  119. package/imports/XerticaX.tsx +20 -0
  120. package/imports/svg-aueiaqngck.ts +11 -0
  121. package/imports/svg-v9krss1ozd.ts +16 -0
  122. package/imports/svg-vhrdofe3qe.ts +5 -0
  123. package/index.css +4448 -0
  124. package/index.html +14 -0
  125. package/main.tsx +10 -0
  126. package/package.json +119 -0
  127. package/postcss.config.js +6 -0
  128. package/routes.tsx +33 -0
  129. package/styles/globals.css +15 -0
  130. package/styles/xertica/app-overrides/chat.css +61 -0
  131. package/styles/xertica/app-overrides/scrollbar.css +33 -0
  132. package/styles/xertica/base.css +70 -0
  133. package/styles/xertica/integrations/google-maps.css +76 -0
  134. package/styles/xertica/integrations/sonner.css +73 -0
  135. package/styles/xertica/theme-map.css +88 -0
  136. package/styles/xertica/tokens.css +190 -0
  137. package/tsconfig.json +31 -0
  138. package/tsconfig.node.json +10 -0
  139. package/utils/gemini.ts +140 -0
  140. package/vite-env.d.ts +12 -0
  141. package/vite.config.ts +36 -0
package/App.tsx ADDED
@@ -0,0 +1,182 @@
1
+ import React, { useState, useEffect, useLayoutEffect } from 'react';
2
+ import { BrowserRouter as Router, Routes, Route, Navigate, useNavigate, useLocation } from 'react-router';
3
+ import { LoginPage } from './components/LoginPage';
4
+ import { ForgotPasswordPage } from './components/ForgotPasswordPage';
5
+ import { VerifyEmailPage } from './components/VerifyEmailPage';
6
+ import { ResetPasswordPage } from './components/ResetPasswordPage';
7
+ import { HomePage } from './components/HomePage';
8
+ import { TemplatePage } from './components/TemplatePage';
9
+ import { ThemeProvider } from './contexts/ThemeContext';
10
+ import { LanguageProvider } from './contexts/LanguageContext';
11
+ import { ApiKeyProvider } from './contexts/ApiKeyContext';
12
+ import { AssistenteProvider } from './contexts/AssistenteContext';
13
+ import { BrandColorsProvider } from './contexts/BrandColorsContext';
14
+ import { GoogleMapsLoaderProvider } from './components/ui/google-maps-loader';
15
+ import { Toaster } from './components/ui/sonner';
16
+ import { XerticaAssistant } from './components/ui/xertica-assistant';
17
+
18
+ // Garantir que o Light Mode seja aplicado imediatamente
19
+ if (typeof window !== 'undefined') {
20
+ // Remover classe dark imediatamente
21
+ document.documentElement.classList.remove('dark');
22
+
23
+ // Se não há tema salvo, definir light mode
24
+ const savedTheme = localStorage.getItem('xertica-theme');
25
+ if (!savedTheme) {
26
+ localStorage.setItem('xertica-theme', 'light');
27
+ }
28
+ }
29
+
30
+ // Protected Route component
31
+ function ProtectedRoute({ children, user }: { children: React.ReactNode; user: { email: string } | null }) {
32
+ if (!user) {
33
+ return <Navigate to="/login" replace />;
34
+ }
35
+ return <>{children}</>;
36
+ }
37
+
38
+ // Auth wrapper component
39
+ function AuthWrapper() {
40
+ const [user, setUser] = useState<{ email: string } | null>(null);
41
+ const navigate = useNavigate();
42
+ const location = useLocation();
43
+
44
+ // Check for existing user session on mount
45
+ useEffect(() => {
46
+ const savedUser = localStorage.getItem('xertica_user');
47
+ if (savedUser) {
48
+ setUser(JSON.parse(savedUser));
49
+ }
50
+ }, []);
51
+
52
+ // Redirect authenticated users away from login and auth pages
53
+ useEffect(() => {
54
+ const authPages = ['/login', '/forgot-password', '/verify-email', '/reset-password'];
55
+ if (user && authPages.includes(location.pathname)) {
56
+ navigate('/home', { replace: true });
57
+ }
58
+ }, [user, location.pathname, navigate]);
59
+
60
+ const handleLogin = (email: string, password: string) => {
61
+ // Aceita qualquer credencial não vazia
62
+ if (email.trim() && password.trim()) {
63
+ const userData = { email };
64
+ setUser(userData);
65
+ localStorage.setItem('xertica_user', JSON.stringify(userData));
66
+ navigate('/home');
67
+ return true;
68
+ }
69
+ return false;
70
+ };
71
+
72
+ const handleLogout = () => {
73
+ setUser(null);
74
+ localStorage.removeItem('xertica_user');
75
+ navigate('/login');
76
+ };
77
+
78
+ return (
79
+ <div className="min-h-screen bg-muted overflow-x-hidden max-w-full">
80
+ <Routes>
81
+ <Route
82
+ path="/login"
83
+ element={
84
+ user ? (
85
+ <Navigate to="/home" replace />
86
+ ) : (
87
+ <LoginPage onLogin={handleLogin} />
88
+ )
89
+ }
90
+ />
91
+ <Route
92
+ path="/forgot-password"
93
+ element={
94
+ user ? (
95
+ <Navigate to="/home" replace />
96
+ ) : (
97
+ <ForgotPasswordPage />
98
+ )
99
+ }
100
+ />
101
+ <Route
102
+ path="/verify-email"
103
+ element={
104
+ user ? (
105
+ <Navigate to="/home" replace />
106
+ ) : (
107
+ <VerifyEmailPage />
108
+ )
109
+ }
110
+ />
111
+ <Route
112
+ path="/reset-password"
113
+ element={
114
+ user ? (
115
+ <Navigate to="/home" replace />
116
+ ) : (
117
+ <ResetPasswordPage />
118
+ )
119
+ }
120
+ />
121
+ <Route
122
+ path="/home"
123
+ element={
124
+ <ProtectedRoute user={user}>
125
+ <HomePage user={user} onLogout={handleLogout} />
126
+ </ProtectedRoute>
127
+ }
128
+ />
129
+ <Route
130
+ path="/template"
131
+ element={
132
+ <ProtectedRoute user={user}>
133
+ <TemplatePage user={user} onLogout={handleLogout} />
134
+ </ProtectedRoute>
135
+ }
136
+ />
137
+ <Route
138
+ path="/"
139
+ element={<Navigate to={user ? "/home" : "/login"} replace />}
140
+ />
141
+ <Route
142
+ path="*"
143
+ element={<Navigate to={user ? "/home" : "/login"} replace />}
144
+ />
145
+ </Routes>
146
+
147
+ {/* Mobile Floating Assistant Button - Removed */}
148
+ </div>
149
+ );
150
+ }
151
+
152
+ export default function App() {
153
+ // Garantir Light Mode como padrão antes da renderização
154
+ useLayoutEffect(() => {
155
+ const root = document.documentElement;
156
+ const savedTheme = localStorage.getItem('xertica-theme');
157
+
158
+ if (!savedTheme || savedTheme === 'light') {
159
+ root.classList.remove('dark');
160
+ localStorage.setItem('xertica-theme', 'light');
161
+ }
162
+ }, []);
163
+
164
+ return (
165
+ <ApiKeyProvider>
166
+ <GoogleMapsLoaderProvider>
167
+ <LanguageProvider>
168
+ <BrandColorsProvider>
169
+ <ThemeProvider>
170
+ <AssistenteProvider>
171
+ <Router>
172
+ <AuthWrapper />
173
+ <Toaster position="top-right" richColors />
174
+ </Router>
175
+ </AssistenteProvider>
176
+ </ThemeProvider>
177
+ </BrandColorsProvider>
178
+ </LanguageProvider>
179
+ </GoogleMapsLoaderProvider>
180
+ </ApiKeyProvider>
181
+ );
182
+ }
package/README.md ADDED
@@ -0,0 +1,330 @@
1
+ # Xertica UI
2
+
3
+ Design System completo com componentes React e Tailwind CSS v4.0, construído com TypeScript seguindo arquitetura CLI-first (modelo Shadcn).
4
+
5
+ ## 🚀 Início Rápido (CLI)
6
+
7
+ Para criar um novo projeto utilizando o Xertica UI:
8
+
9
+ ```bash
10
+ npx xertica-ui init meu-projeto
11
+ ```
12
+
13
+ O CLI irá guiá-lo através da configuração:
14
+ 1. **Componentes**: Escolha quais componentes incluir.
15
+ 2. **Páginas**: Opte por incluir ou não Login, Home e Template.
16
+ 3. **Instalação**: Dependências são instaladas automaticamente.
17
+
18
+ ### Desenvolvimento no Projeto Clona
19
+
20
+ Após a inicialização:
21
+
22
+ ```bash
23
+ cd meu-projeto
24
+ npm run dev
25
+ ```
26
+
27
+ Acesse: **http://localhost:5173**
28
+ Login padrão: Use qualquer email e senha.
29
+
30
+ ## 📋 Pré-requisitos
31
+
32
+ - Node.js 18+ instalado
33
+ - npm, yarn ou pnpm
34
+
35
+ ## 🔧 Instalação
36
+
37
+ O método recomendado é usar o CLI:
38
+ ```bash
39
+ npx xertica-ui init meu-app
40
+ ```
41
+
42
+ Para desenvolvimento do próprio pacote/biblioteca:
43
+ 1. Clone o repositório:
44
+ ```bash
45
+ git clone [URL_DO_REPOSITORIO]
46
+ cd xertica-ui
47
+ ```
48
+
49
+ 2. Instale as dependências:
50
+ ```bash
51
+ npm install
52
+ ```
53
+
54
+ ## 📁 Estrutura do Projeto
55
+
56
+ ```
57
+ xertica-ui/
58
+ ├── components/
59
+ │ ├── ui/ # 156 componentes do Design System
60
+ │ │ ├── index.ts # Export central
61
+ │ │ ├── button.tsx
62
+ │ │ ├── card.tsx
63
+ │ │ ├── alert.tsx
64
+ │ │ ├── map.tsx
65
+ │ │ ├── xertica-assistant.tsx
66
+ │ │ └── ... (todos os componentes)
67
+ │ │
68
+ │ ├── examples/ # Exemplos de uso (Maps)
69
+ │ ├── figma/ # Componentes Figma
70
+ │ ├── media/ # Players de áudio/vídeo
71
+ │ │
72
+ │ ├── HomePage.tsx # Página Home
73
+ │ ├── TemplatePage.tsx # Template completo
74
+ │ ├── LoginPage.tsx # Login
75
+ │ └── ... (componentes auxiliares)
76
+
77
+ ├── contexts/ # Contextos React
78
+ │ ├── ThemeContext.tsx
79
+ │ ├── LanguageContext.tsx
80
+ │ └── ...
81
+
82
+ ├── styles/
83
+ │ └── xertica/
84
+ │ ├── tokens.css # Design Tokens (Source of Truth)
85
+ │ ├── base.css # Base styles + Tailwind
86
+ │ ├── theme-map.css # Theme mapping
87
+ │ └── integrations/ # CSS overrides
88
+
89
+ ├── App.tsx # Componente raiz
90
+ ├── routes.tsx # Configuração de rotas
91
+ └── package.json # Dependências
92
+ ```
93
+
94
+ ## 🚀 Tecnologias
95
+
96
+ - **React 18.3** - Biblioteca JavaScript para interfaces
97
+ - **TypeScript 5.7** - Superset tipado do JavaScript
98
+ - **Tailwind CSS v4.0** - Framework CSS utility-first
99
+ - **Vite 6.0** - Build tool e dev server ultrarrápido
100
+ - **React Router 7** - Roteamento client-side
101
+ - **Radix UI** - Componentes acessíveis e não estilizados
102
+ - **Shadcn/ui** - Modelo CLI-first para componentes
103
+ - **Lucide React** - Ícones SVG
104
+ - **Sonner** - Toast notifications elegantes
105
+ - **Recharts** - Gráficos e visualizações de dados
106
+ - **Google Generative AI** - Integração com Gemini
107
+
108
+ ## 🏃 Executando o Projeto
109
+
110
+ ### Modo de Desenvolvimento
111
+
112
+ ```bash
113
+ npm run dev
114
+ ```
115
+
116
+ O projeto será aberto automaticamente em `http://localhost:5173`
117
+
118
+ ### Build de Produção
119
+
120
+ ```bash
121
+ npm run build
122
+ ```
123
+
124
+ ### Preview da Build de Produção
125
+
126
+ ```bash
127
+ npm run preview
128
+ ```
129
+
130
+ ### Type Check
131
+
132
+ ```bash
133
+ npm run type-check
134
+ ```
135
+
136
+ ## 🎨 Design System
137
+
138
+ ### Sistema de Tokens CSS
139
+
140
+ Todos os estilos são baseados em variáveis CSS definidas em `/styles/xertica/tokens.css`:
141
+
142
+ ```css
143
+ /* Cores */
144
+ --primary: rgba(44, 39, 91, 1);
145
+ --background: rgba(255, 255, 255, 1);
146
+ --foreground: rgba(9, 9, 11, 1);
147
+
148
+ /* Tipografia */
149
+ --text-h1: 2rem;
150
+ --text-h2: 1.75rem;
151
+ --text-stats: 2.25rem;
152
+ --font-weight-medium: 500;
153
+ --font-weight-bold: 700;
154
+
155
+ /* Radius */
156
+ --radius: 6px;
157
+ --radius-button: 12px;
158
+ --radius-card: 12px;
159
+
160
+ /* Spacing */
161
+ --spacing-4: 1rem;
162
+ --spacing-8: 2rem;
163
+ ```
164
+
165
+ ### Customização
166
+
167
+ Edite `/styles/xertica/tokens.css` e todo o sistema se adapta automaticamente:
168
+
169
+ ```css
170
+ :root {
171
+ --primary: rgba(255, 0, 0, 1); /* Vermelho customizado */
172
+ --radius: 16px; /* Bordas mais arredondadas */
173
+ }
174
+ ```
175
+
176
+ ### Tipografia
177
+
178
+ - **Fonte**: Roboto (400, 500, 600, 700, 800)
179
+ - **Tamanhos**: Definidos via variáveis CSS (`--text-*`)
180
+ - **Zero classes Tailwind** de font-size ou font-weight hardcoded
181
+
182
+ ## 🌓 Dark Mode
183
+
184
+ Suporte completo a Dark Mode com toggle manual. A preferência é salva em `localStorage`.
185
+
186
+ Troca via atributo `data-mode="dark"` ou classe `.dark`
187
+
188
+ ## 🔐 Autenticação
189
+
190
+ Sistema de autenticação simulada que aceita qualquer credencial não vazia:
191
+
192
+ - **Email**: qualquer@email.com
193
+ - **Senha**: qualquer senha
194
+
195
+ ## 🗺️ Rotas
196
+
197
+ - `/login` - Página de login
198
+ - `/forgot-password` - Recuperação de senha
199
+ - `/verify-email` - Verificação de email
200
+ - `/reset-password` - Redefinição de senha
201
+ - `/home` - Página principal (protegida)
202
+ - `/template` - Template com todos os componentes (protegida)
203
+
204
+ ## 🤖 Integração com Gemini AI
205
+
206
+ O assistente Xertica usa Google Gemini AI. Configure a API Key:
207
+
208
+ 1. Acesse o assistente AI
209
+ 2. Clique em "Configurar API Key"
210
+ 3. Insira sua chave da API do Google Gemini
211
+ 4. A chave é salva localmente no navegador
212
+
213
+ **Obter API Key**: [Google AI Studio](https://aistudio.google.com/app/apikey)
214
+
215
+ ## 📦 Componentes UI (156 total)
216
+
217
+ ### Layout & Structure
218
+ Card, Separator, AspectRatio, Resizable
219
+
220
+ ### Navigation
221
+ Tabs, Breadcrumb, NavigationMenu, Sidebar, Pagination
222
+
223
+ ### Buttons & Interactions
224
+ Button, Toggle, ToggleGroup
225
+
226
+ ### Forms & Inputs
227
+ Input, Textarea, Label, Checkbox, RadioGroup, Switch, Slider, Select, InputOTP, Form, Calendar
228
+
229
+ ### Overlays & Dialogs
230
+ Dialog, AlertDialog, Sheet, Drawer, Popover, Tooltip, HoverCard
231
+
232
+ ### Menus
233
+ DropdownMenu, ContextMenu, Menubar, Command
234
+
235
+ ### Feedback & Notifications
236
+ Alert, Badge, Progress, Skeleton, Toast (Sonner), NotificationBadge
237
+
238
+ ### Data Display
239
+ Avatar, Table, Chart, Empty, StatsCard, Timeline, TreeView
240
+
241
+ ### Utility Components
242
+ Collapsible, Accordion, ScrollArea, Carousel, Stepper, FileUpload, Rating, Search
243
+
244
+ ### Maps
245
+ Map, RouteMap, SimpleMap (Google Maps integration)
246
+
247
+ ### Xertica Custom
248
+ XerticaAssistant, PageHeader
249
+
250
+ ### Hooks
251
+ useMobile, useIsMobile
252
+
253
+ ## 🎯 Funcionalidades
254
+
255
+ - ✅ Sistema de autenticação completo
256
+ - ✅ 156 componentes CLI-ready
257
+ - ✅ Design System baseado em variáveis CSS
258
+ - ✅ Dark mode completo
259
+ - ✅ Assistente AI integrado
260
+ - ✅ Sistema de notificações (toast)
261
+ - ✅ Design responsivo
262
+ - ✅ Arquitetura CLI-first (modelo Shadcn)
263
+ - ✅ TypeScript completo
264
+ - ✅ Zero CSS oculto
265
+
266
+ ## 📱 Responsividade
267
+
268
+ Totalmente responsivo com breakpoints:
269
+
270
+ - Mobile: 320px+
271
+ - Tablet: 768px+
272
+ - Desktop: 1024px+
273
+
274
+ ## 🔄 Scripts Disponíveis
275
+
276
+ - `npm run dev` - Inicia servidor de desenvolvimento
277
+ - `npm run build` - Cria build de produção
278
+ - `npm run preview` - Preview da build
279
+ - `npm run type-check` - Verifica tipos TypeScript
280
+ - `npm run lint` - Executa linter
281
+
282
+ ## 📝 Convenções de Código
283
+
284
+ - **Componentes**: PascalCase (ex: `LoginPage.tsx`)
285
+ - **Utilitários**: camelCase (ex: `utils.ts`)
286
+ - **Contextos**: PascalCase com sufixo Context (ex: `ThemeContext.tsx`)
287
+ - **CSS**: Variáveis CSS em vez de classes Tailwind para tipografia
288
+
289
+ ## 🐛 Troubleshooting
290
+
291
+ ### CSS não carrega
292
+
293
+ 1. Verifique se todas as dependências estão instaladas:
294
+ ```bash
295
+ npm install
296
+ ```
297
+
298
+ 2. Limpe o cache do Vite:
299
+ ```bash
300
+ rm -rf node_modules/.vite
301
+ npm run dev
302
+ ```
303
+
304
+ ### Erros de TypeScript
305
+
306
+ Execute a verificação de tipos:
307
+ ```bash
308
+ npm run type-check
309
+ ```
310
+
311
+ ### Porta em uso
312
+
313
+ Altere a porta em `vite.config.ts`:
314
+ ```ts
315
+ server: {
316
+ port: 3001,
317
+ }
318
+ ```
319
+
320
+ ## 📄 Licença
321
+
322
+ Este projeto é privado e proprietário.
323
+
324
+ ## 👥 Autor
325
+
326
+ Xertica AI Team
327
+
328
+ ---
329
+
330
+ **Nota**: Este é um projeto de demonstração. Para uso em produção, implemente autenticação real, validação de segurança e testes adequados.
@@ -0,0 +1,38 @@
1
+ <svg
2
+ fill="none"
3
+ preserveAspectRatio="xMidYMid meet"
4
+ viewBox="0 0 1543 289"
5
+ xmlns="http://www.w3.org/2000/svg"
6
+ >
7
+ <g id="Xertica.ai">
8
+ <path d="M1352.82 239.808V285.425H1304.73V239.808H1352.82Z" fill="#00BEFF" />
9
+ <path d="M814.8 284.848H766.711V77.4971H814.8V284.848Z" fill="#00BEFF" />
10
+ <path d="M1543 284.438H1514.2V160.28H1543V284.438Z" fill="#00BEFF" />
11
+ <path
12
+ clip-rule="evenodd"
13
+ d="M1432.83 157.796C1446.98 157.796 1459.14 162.515 1468.58 170.709V160.28H1497.38V284.438H1468.58V274.01C1459.14 282.451 1446.98 286.921 1432.83 286.921C1395.1 286.921 1368.29 260.352 1368.29 222.359C1368.29 184.616 1395.1 157.796 1432.83 157.796ZM1432.83 183.778C1410.79 183.778 1396.27 199.061 1396.27 222.359C1396.27 245.658 1410.79 260.94 1432.83 260.94C1454.63 260.94 1468.9 245.658 1468.9 222.359C1468.9 199.06 1454.63 183.778 1432.83 183.778Z"
14
+ fill="#00BEFF"
15
+ fill-rule="evenodd"
16
+ />
17
+ <path d="M947.87 73.3516C1002.88 73.3516 1044.42 107.647 1053.57 159.234H1004.68C997.221 132.988 976.34 117.308 947.87 117.308C911.387 117.308 887.337 142.612 887.337 181.176C887.337 219.739 911.387 245.036 947.87 245.036C976.34 245.036 997.221 229.356 1004.68 203.109H1053.57C1044.47 254.701 1003.26 289 947.87 289C884.853 289 840.078 244.626 840.078 181.176C840.078 118.142 884.854 73.3516 947.87 73.3516Z" fill="#00BEFF" />
18
+ <path d="M88.4971 39.8242L157.353 142.191L83.5371 251.524L60.9277 284.854H0L96.3154 142.191L5.37695 7H66.3047L88.4971 39.8242Z" fill="#00BEFF" />
19
+ <path d="M254.314 284.855H193.387L151.914 223.71L182.548 178.551L254.314 284.855Z" fill="#00BEFF" />
20
+ <path
21
+ clip-rule="evenodd"
22
+ d="M1179.14 73.3477C1202.77 73.3477 1223.08 81.2286 1238.84 94.9121V77.4971H1286.94V284.847H1238.84V267.431C1223.09 281.528 1202.77 288.992 1179.14 288.992C1116.12 288.992 1071.35 244.622 1071.35 181.172C1071.35 118.139 1116.12 73.3478 1179.14 73.3477ZM1179.14 117.308C1142.66 117.308 1118.61 142.604 1118.61 181.172C1118.61 219.739 1142.66 245.035 1179.14 245.035C1215.21 245.035 1238.84 219.739 1238.84 181.172C1238.84 142.605 1215.21 117.308 1179.14 117.308Z"
23
+ fill="#00BEFF"
24
+ fill-rule="evenodd"
25
+ />
26
+ <path d="M1543 145.383H1514.2V118.067H1543V145.383Z" fill="#00BEFF" />
27
+ <path d="M672.466 77.501H736.31V121.457H672.466V211.448C672.466 230.939 682.415 240.891 702.313 240.891H736.309V284.852H698.999C649.246 284.851 625.203 259.968 625.203 211.449V7H672.466V77.501Z" fill="#00BEFF" />
28
+ <path d="M814.8 52.6172H766.711V7H814.8V52.6172Z" fill="#00BEFF" />
29
+ <path
30
+ clip-rule="evenodd"
31
+ d="M354.069 73.3516C417.086 73.3517 461.864 118.143 461.864 181.176C461.864 187.396 461.031 193.615 460.204 199.422H295.197C301.829 228.864 323.392 246.696 354.069 246.696C372.724 246.696 389.309 241.721 399.675 226.376H452.742C441.132 265.774 400.501 288.996 354.069 288.996C291.053 288.996 246.274 244.626 246.273 181.176C246.273 118.142 291.053 73.3516 354.069 73.3516ZM354.068 115.65C325.044 115.65 303.902 131.826 296.44 158.78H410.863C403.819 131.826 382.672 115.65 354.068 115.65Z"
32
+ fill="#00BEFF"
33
+ fill-rule="evenodd"
34
+ />
35
+ <path d="M596.957 121.453H562.962C543.064 121.453 533.114 131.409 533.114 150.899V284.847H485.852V150.899C485.852 102.38 509.894 77.4972 559.647 77.4971H596.957V121.453Z" fill="#00BEFF" />
36
+ <path d="M182.552 98.6992L151.922 53.3906L188.014 0H248.941L182.552 98.6992Z" fill="#00BEFF" />
37
+ </g>
38
+ </svg>
@@ -0,0 +1,21 @@
1
+ <svg
2
+ fill="none"
3
+ preserveAspectRatio="xMidYMid meet"
4
+ viewBox="0 0 258 282"
5
+ xmlns="http://www.w3.org/2000/svg"
6
+ >
7
+ <g id="Xertica X">
8
+ <path
9
+ d="M67.2666 0.0361328L89.7793 33.3447L159.63 137.228L84.7471 248.178L61.8115 282H0L97.7109 137.228L5.45508 0.0361328H67.2666Z"
10
+ fill="#00BEFF"
11
+ />
12
+ <path
13
+ d="M258 282H196.185L154.114 219.951L185.192 174.123L258 282Z"
14
+ fill="#00BEFF"
15
+ />
16
+ <path
17
+ d="M252.696 0.186523L185.042 100.142L154.106 54.0693L190.884 0L252.696 0.186523Z"
18
+ fill="#00BEFF"
19
+ />
20
+ </g>
21
+ </svg>