xertica-ui 2.6.0 → 2.7.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/CHANGELOG.md +18 -0
- package/README.md +1 -1
- package/components/assistant/xertica-assistant/use-assistant.ts +5 -6
- package/{templates/src/features/auth/ui → components/blocks/auth}/AuthPageShell.tsx +8 -3
- package/components/blocks/auth/PasswordStrengthMeter.tsx +41 -0
- package/components/blocks/auth/SocialLoginButtons.tsx +95 -0
- package/components/blocks/auth/index.ts +11 -0
- package/components/blocks/auth/usePasswordStrength.ts +13 -0
- package/components/blocks/index.ts +1 -0
- package/components/pages/forgot-password-page/ForgotPasswordPage.tsx +45 -139
- package/components/pages/login-page/LoginPage.tsx +52 -145
- package/components/pages/reset-password-page/ResetPasswordPage.tsx +79 -169
- package/components/pages/verify-email-page/VerifyEmailPage.tsx +48 -150
- package/dist/AssistantChart-CImCNLfD.cjs +3551 -0
- package/dist/AssistantChart-DfdIfmQr.js +3383 -0
- package/dist/FeatureCard-BhpfmPPx.js +485 -0
- package/dist/FeatureCard-D-5yS_OD.cjs +497 -0
- package/dist/ImageWithFallback-CfkAkctC.cjs +122 -0
- package/dist/ImageWithFallback-bw-CxxDc.js +98 -0
- package/dist/LanguageContext-CX_zdxre.js +1912 -0
- package/dist/LanguageContext-CjhSSqJT.cjs +1917 -0
- package/dist/LanguageSelector-BR3Ss0k_.js +46 -0
- package/dist/LanguageSelector-CHOLPmHr.cjs +48 -0
- package/dist/PasswordStrengthMeter-C8irs0G1.js +173 -0
- package/dist/PasswordStrengthMeter-MLzhax-d.cjs +179 -0
- package/dist/ThemeContext-CEY9pCn-.cjs +86 -0
- package/dist/ThemeContext-Dk3tH7Ym.js +83 -0
- package/dist/ThemeToggle-BpM_iHh8.js +215 -0
- package/dist/ThemeToggle-CZRlv0d4.cjs +219 -0
- package/dist/VerifyEmailPage-BKiaw2YK.js +2954 -0
- package/dist/VerifyEmailPage-Beaicc6V.cjs +2963 -0
- package/dist/VerifyEmailPage-BehPBp0F.cjs +2963 -0
- package/dist/VerifyEmailPage-Djb6hthM.js +2954 -0
- package/dist/XerticaProvider-BijpC_py.cjs +46 -0
- package/dist/XerticaProvider-C2wDRQhT.js +44 -0
- package/dist/alert-dialog-BzIcTKn_.cjs +872 -0
- package/dist/alert-dialog-kty5pxQp.js +819 -0
- package/dist/assistant.cjs.js +1 -1
- package/dist/assistant.es.js +1 -1
- package/dist/blocks.cjs.js +7 -3
- package/dist/blocks.es.js +2 -2
- package/dist/brand.cjs.js +7 -6
- package/dist/brand.es.js +3 -2
- package/dist/components/blocks/auth/AuthPageShell.d.ts +12 -0
- package/dist/components/blocks/auth/PasswordStrengthMeter.d.ts +7 -0
- package/dist/components/blocks/auth/SocialLoginButtons.d.ts +8 -0
- package/dist/components/blocks/auth/index.d.ts +8 -0
- package/dist/components/blocks/auth/usePasswordStrength.d.ts +3 -0
- package/dist/components/blocks/index.d.ts +1 -0
- package/dist/components/pages/reset-password-page/ResetPasswordPage.d.ts +1 -1
- package/dist/hooks.cjs.js +5 -4
- package/dist/hooks.es.js +2 -1
- package/dist/index.cjs.js +29 -24
- package/dist/index.es.js +12 -11
- package/dist/layout.cjs.js +1 -1
- package/dist/layout.es.js +1 -1
- package/dist/pages.cjs.js +1 -1
- package/dist/pages.es.js +1 -1
- package/dist/sidebar-B7YzwAp3.js +1151 -0
- package/dist/sidebar-Cb0U7NsV.cjs +1154 -0
- package/dist/ui.cjs.js +7 -7
- package/dist/ui.es.js +3 -3
- package/dist/xertica-assistant-8fh8KA2K.js +2173 -0
- package/dist/xertica-assistant-BjfG3zyL.cjs +2180 -0
- package/docs/i18n.md +2 -0
- package/package.json +1 -1
- package/templates/package.json +2 -2
- package/templates/src/features/auth/ui/ForgotPasswordContent.tsx +1 -2
- package/templates/src/features/auth/ui/LoginContent.tsx +1 -2
- package/templates/src/features/auth/ui/ResetPasswordContent.tsx +3 -57
- package/templates/src/features/auth/ui/VerifyEmailContent.tsx +1 -2
- package/templates/src/features/home/index.ts +0 -10
- package/templates/src/features/home/ui/HomeContent.tsx +21 -75
- package/templates/src/features/template/index.ts +0 -4
- package/templates/src/features/template/ui/TemplateContent.tsx +26 -1279
- package/templates/src/locales/en/pages/templates.json +5 -313
- package/templates/src/locales/es/pages/templates.json +5 -313
- package/templates/src/locales/pt-BR/pages/templates.json +5 -313
- package/templates/src/features/auth/ui/SocialLoginButtons.tsx +0 -78
- package/templates/src/features/home/data/mock.ts +0 -41
- package/templates/src/features/home/hooks/useFeatureCards.ts +0 -20
- package/templates/src/features/home/store/dashboardStore.ts +0 -25
- package/templates/src/features/template/ui/CrudTemplate.tsx +0 -112
- package/templates/src/features/template/ui/DashboardTemplate.tsx +0 -110
- package/templates/src/features/template/ui/FormTemplate.tsx +0 -117
- package/templates/src/features/template/ui/LoginTemplate.tsx +0 -59
- package/templates/src/locales/en/pages/crudTemplate.json +0 -25
- package/templates/src/locales/en/pages/dashboardTemplate.json +0 -20
- package/templates/src/locales/en/pages/formTemplate.json +0 -16
- package/templates/src/locales/en/pages/loginTemplate.json +0 -9
- package/templates/src/locales/es/pages/crudTemplate.json +0 -25
- package/templates/src/locales/es/pages/dashboardTemplate.json +0 -20
- package/templates/src/locales/es/pages/formTemplate.json +0 -16
- package/templates/src/locales/es/pages/loginTemplate.json +0 -9
- package/templates/src/locales/pt-BR/pages/crudTemplate.json +0 -25
- package/templates/src/locales/pt-BR/pages/dashboardTemplate.json +0 -20
- package/templates/src/locales/pt-BR/pages/formTemplate.json +0 -16
- package/templates/src/locales/pt-BR/pages/loginTemplate.json +0 -9
- package/templates/vite.config.d.ts +0 -2
- package/templates/vite.config.js +0 -20
|
@@ -1,317 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"breadcrumb": "Página de Template",
|
|
3
3
|
"title": "Página de Template",
|
|
4
|
-
"subtitle": "
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
"buttons": "Botões",
|
|
10
|
-
"badges": "Badges",
|
|
11
|
-
"dialogs": "Dialogs",
|
|
12
|
-
"sidebarVariations": "Variações da Sidebar",
|
|
13
|
-
"enhancedComponents": "v2.2.1 — Componentes Aprimorados"
|
|
14
|
-
},
|
|
15
|
-
"alerts": {
|
|
16
|
-
"infoTitle": "Informação",
|
|
17
|
-
"infoDescription": "Este é um exemplo de alerta informativo usando os componentes do Design System.",
|
|
18
|
-
"errorTitle": "Erro",
|
|
19
|
-
"errorDescription": "Ocorreu um erro ao processar sua solicitação.",
|
|
20
|
-
"successTitle": "Sucesso",
|
|
21
|
-
"successDescription": "Operação realizada com sucesso!",
|
|
22
|
-
"warningTitle": "Aviso",
|
|
23
|
-
"warningDescription": "Atenção: esta ação não pode ser desfeita."
|
|
24
|
-
},
|
|
25
|
-
"tabs": {
|
|
26
|
-
"overview": "Visão Geral",
|
|
27
|
-
"forms": "Formulários",
|
|
28
|
-
"data": "Dados",
|
|
29
|
-
"settings": "Configurações"
|
|
30
|
-
},
|
|
31
|
-
"overview": {
|
|
32
|
-
"progressTitle": "Progress & Sliders",
|
|
33
|
-
"progressDescription": "Exemplos de componentes de progresso",
|
|
34
|
-
"projectProgress": "Progresso do Projeto",
|
|
35
|
-
"volume": "Volume",
|
|
36
|
-
"totalUsersDemoValue": "1.234",
|
|
37
|
-
"revenueDemoValue": "R$ 45,2k",
|
|
38
|
-
"conversionRateDemoValue": "3,2%"
|
|
39
|
-
},
|
|
40
|
-
"forms": {
|
|
41
|
-
"registrationTitle": "Formulário de Cadastro",
|
|
42
|
-
"registrationDescription": "Preencha os campos abaixo para criar uma nova conta",
|
|
43
|
-
"firstName": "Nome",
|
|
44
|
-
"firstNamePlaceholder": "João",
|
|
45
|
-
"lastName": "Sobrenome",
|
|
46
|
-
"lastNamePlaceholder": "Silva",
|
|
47
|
-
"email": "E-mail",
|
|
48
|
-
"emailPlaceholder": "joao@exemplo.com",
|
|
49
|
-
"phone": "Telefone",
|
|
50
|
-
"phonePlaceholder": "(11) 99999-9999",
|
|
51
|
-
"role": "Cargo",
|
|
52
|
-
"rolePlaceholder": "Selecione um cargo",
|
|
53
|
-
"roles": {
|
|
54
|
-
"developer": "Desenvolvedor",
|
|
55
|
-
"designer": "Designer",
|
|
56
|
-
"manager": "Gerente",
|
|
57
|
-
"analyst": "Analista"
|
|
58
|
-
},
|
|
59
|
-
"bio": "Biografia",
|
|
60
|
-
"bioPlaceholder": "Conte-nos um pouco sobre você...",
|
|
61
|
-
"preferences": "Preferências",
|
|
62
|
-
"newsletter": "Receber newsletter por e-mail",
|
|
63
|
-
"pushNotifications": "Ativar notificações push",
|
|
64
|
-
"featureUpdates": "Receber atualizações sobre novos recursos",
|
|
65
|
-
"accountType": "Tipo de Conta",
|
|
66
|
-
"accountPersonal": "Pessoal",
|
|
67
|
-
"accountBusiness": "Empresarial",
|
|
68
|
-
"accountEnterprise": "Enterprise",
|
|
69
|
-
"cancel": "Cancelar",
|
|
70
|
-
"createAccount": "Criar Conta"
|
|
71
|
-
},
|
|
72
|
-
"data": {
|
|
73
|
-
"title": "Lista de Usuários",
|
|
74
|
-
"description": "Gerencie os usuários do sistema",
|
|
75
|
-
"searchPlaceholder": "Buscar usuários...",
|
|
76
|
-
"headers": {
|
|
77
|
-
"name": "Nome",
|
|
78
|
-
"email": "E-mail",
|
|
79
|
-
"role": "Cargo",
|
|
80
|
-
"status": "Status",
|
|
81
|
-
"actions": "Ações"
|
|
82
|
-
},
|
|
83
|
-
"roles": {
|
|
84
|
-
"developerFemale": "Desenvolvedora",
|
|
85
|
-
"designer": "Designer",
|
|
86
|
-
"manager": "Gerente",
|
|
87
|
-
"analyst": "Analista"
|
|
88
|
-
},
|
|
89
|
-
"status": {
|
|
90
|
-
"active": "Ativo",
|
|
91
|
-
"away": "Ausente",
|
|
92
|
-
"inactive": "Inativo"
|
|
93
|
-
},
|
|
94
|
-
"edit": "Editar",
|
|
95
|
-
"showing": "Exibindo {{count}} de {{total}} usuários",
|
|
96
|
-
"previous": "Anterior",
|
|
97
|
-
"next": "Próximo",
|
|
98
|
-
"demoEmailDomain": "exemplo.com"
|
|
99
|
-
},
|
|
100
|
-
"settings": {
|
|
101
|
-
"title": "Configurações do Sistema",
|
|
102
|
-
"description": "Gerencie as configurações gerais",
|
|
103
|
-
"darkMode": "Modo Escuro",
|
|
104
|
-
"darkModeDescription": "Ativar tema escuro na interface",
|
|
105
|
-
"emailNotifications": "Notificações por E-mail",
|
|
106
|
-
"emailNotificationsDescription": "Receber atualizações importantes por e-mail",
|
|
107
|
-
"pushNotifications": "Notificações Push",
|
|
108
|
-
"pushNotificationsDescription": "Receber notificações instantâneas no navegador",
|
|
109
|
-
"language": "Idioma",
|
|
110
|
-
"languages": {
|
|
111
|
-
"ptBR": "Português (Brasil)",
|
|
112
|
-
"en": "English",
|
|
113
|
-
"es": "Español"
|
|
114
|
-
},
|
|
115
|
-
"timezone": "Fuso Horário",
|
|
116
|
-
"timezones": {
|
|
117
|
-
"saoPaulo": "América/São Paulo (GMT-3)",
|
|
118
|
-
"newYork": "América/Nova York (GMT-5)",
|
|
119
|
-
"london": "Europa/Londres (GMT+0)"
|
|
120
|
-
},
|
|
121
|
-
"restoreDefaults": "Restaurar Padrões",
|
|
122
|
-
"saveChanges": "Salvar Alterações"
|
|
123
|
-
},
|
|
124
|
-
"buttons": {
|
|
125
|
-
"title": "Variações de Botões",
|
|
126
|
-
"description": "Diferentes estilos e tamanhos de botões",
|
|
127
|
-
"variants": "Variantes",
|
|
128
|
-
"sizes": "Tamanhos",
|
|
129
|
-
"withIcons": "Com Ícones",
|
|
130
|
-
"states": "Estados",
|
|
131
|
-
"profile": "Perfil",
|
|
132
|
-
"messages": "Mensagens",
|
|
133
|
-
"schedule": "Agendar",
|
|
134
|
-
"disabled": "Desabilitado",
|
|
135
|
-
"outlineDisabled": "Outline Desabilitado",
|
|
136
|
-
"variantLabels": {
|
|
137
|
-
"default": "Padrão",
|
|
138
|
-
"secondary": "Secundário",
|
|
139
|
-
"outline": "Contorno",
|
|
140
|
-
"ghost": "Ghost",
|
|
141
|
-
"link": "Link",
|
|
142
|
-
"destructive": "Destrutivo"
|
|
143
|
-
},
|
|
144
|
-
"sizeLabels": {
|
|
145
|
-
"small": "Pequeno",
|
|
146
|
-
"default": "Padrão",
|
|
147
|
-
"large": "Grande"
|
|
148
|
-
}
|
|
149
|
-
},
|
|
150
|
-
"badges": {
|
|
151
|
-
"title": "Variações de Badges",
|
|
152
|
-
"description": "Diferentes estilos de badges para status e tags",
|
|
153
|
-
"labels": {
|
|
154
|
-
"default": "Padrão",
|
|
155
|
-
"secondary": "Secundário",
|
|
156
|
-
"outline": "Contorno",
|
|
157
|
-
"destructive": "Destrutivo",
|
|
158
|
-
"success": "Sucesso",
|
|
159
|
-
"warning": "Aviso",
|
|
160
|
-
"info": "Info"
|
|
161
|
-
}
|
|
162
|
-
},
|
|
163
|
-
"dialogs": {
|
|
164
|
-
"dialogTitle": "Dialog",
|
|
165
|
-
"dialogDescription": "Um modal básico interativo",
|
|
166
|
-
"editProfile": "Editar Perfil",
|
|
167
|
-
"editProfileDescription": "Faça alterações no seu perfil aqui. Clique em salvar quando terminar.",
|
|
168
|
-
"name": "Nome",
|
|
169
|
-
"nameDefaultValue": "Pedro Duarte",
|
|
170
|
-
"username": "Usuário",
|
|
171
|
-
"usernameDefaultValue": "@pedroduarte",
|
|
172
|
-
"update": "Atualizar",
|
|
173
|
-
"alertDialogTitle": "Alert Dialog",
|
|
174
|
-
"alertDialogDescription": "Um alerta para decisões importantes",
|
|
175
|
-
"deleteAccount": "Excluir Conta",
|
|
176
|
-
"areYouSure": "Você tem certeza absoluta?",
|
|
177
|
-
"deleteWarning": "Esta ação não pode ser desfeita. Isso excluirá permanentemente sua conta e removerá seus dados de nossos servidores.",
|
|
178
|
-
"cancel": "Cancelar",
|
|
179
|
-
"continue": "Continuar"
|
|
180
|
-
},
|
|
181
|
-
"sidebar": {
|
|
182
|
-
"title": "Sidebar Assistant Mode vs Default",
|
|
183
|
-
"description": "A Sidebar suporta flexibilidade com a propriedade variant.",
|
|
184
|
-
"assistantMode": "Modo Assistant",
|
|
185
|
-
"defaultMode": "Modo Padrão",
|
|
186
|
-
"searchTopicsPlaceholder": "Pesquisar tópicos...",
|
|
187
|
-
"newConversation": "Nova Conversa",
|
|
188
|
-
"recent": "Recentes",
|
|
189
|
-
"constructionMonitoring": "Monitoramento de Obras",
|
|
190
|
-
"items": {
|
|
191
|
-
"sidebarRefactor": "Refatoração Sidebar",
|
|
192
|
-
"sidebarRefactorDescription": "Ativa agora",
|
|
193
|
-
"br163Restoration": "Restauração BR-163",
|
|
194
|
-
"br163Location": "Cuiabá, MT"
|
|
195
|
-
},
|
|
196
|
-
"actions": {
|
|
197
|
-
"rename": "Renomear",
|
|
198
|
-
"renameToast": "Abrir renomear...",
|
|
199
|
-
"move": "Mover",
|
|
200
|
-
"moveActive": "Projetos Ativos",
|
|
201
|
-
"moveActiveToast": "Movido para Projetos Ativos",
|
|
202
|
-
"moveMonitoring": "Monitoramento",
|
|
203
|
-
"moveMonitoringToast": "Movido para Monitoramento",
|
|
204
|
-
"moveArchive": "Arquivo",
|
|
205
|
-
"moveArchiveToast": "Movido para Arquivo",
|
|
206
|
-
"clear": "Limpar",
|
|
207
|
-
"clearToast": "Histórico Limpo!",
|
|
208
|
-
"newCategory": "Nova Categoria",
|
|
209
|
-
"newCategoryToast": "Criar nova categoria...",
|
|
210
|
-
"archiveGroup": "Arquivar Grupo",
|
|
211
|
-
"archiveGroupToast": "Arquivando grupo..."
|
|
212
|
-
},
|
|
213
|
-
"logoutToast": "Saiu",
|
|
214
|
-
"settingsClickedToast": "Configurações clicadas",
|
|
215
|
-
"routes": {
|
|
216
|
-
"home": "Início",
|
|
217
|
-
"dashboard": "Dashboard",
|
|
218
|
-
"settings": "Configurações"
|
|
219
|
-
},
|
|
220
|
-
"assistantContent": "Conteúdo do Assistant Mode",
|
|
221
|
-
"defaultContent": "Navegação Tradicional do Sistema"
|
|
222
|
-
},
|
|
223
|
-
"enhanced": {
|
|
224
|
-
"pagination": {
|
|
225
|
-
"title": "Pagination",
|
|
226
|
-
"description": "Navegação por páginas com a prop <code>disabled</code> em Previous/Next — ARIA e foco acessíveis.",
|
|
227
|
-
"pageOfTotal": "Página {{current}} de {{total}} — algoritmo Set-deduplicado garante unicidade de itens"
|
|
228
|
-
},
|
|
229
|
-
"stepper": {
|
|
230
|
-
"title": "Stepper",
|
|
231
|
-
"description": "Wizard multi-etapas com <code>role=\"list\"</code>, <code>aria-current=\"step\"</code> e <code>initialStep</code> clampado automaticamente.",
|
|
232
|
-
"step1Label": "Dados pessoais",
|
|
233
|
-
"step1Description": "Nome e e-mail",
|
|
234
|
-
"step2Label": "Endereço",
|
|
235
|
-
"step2Description": "CEP e cidade",
|
|
236
|
-
"step3Label": "Confirmação",
|
|
237
|
-
"step3Description": "Revisar e enviar",
|
|
238
|
-
"previous": "Anterior",
|
|
239
|
-
"next": "Próximo",
|
|
240
|
-
"finish": "Concluir"
|
|
241
|
-
},
|
|
242
|
-
"treeView": {
|
|
243
|
-
"title": "TreeView",
|
|
244
|
-
"description": "Navegação hierárquica com <code>ariaLabel</code>, roving tabindex e teclado WAI-ARIA (Espaço expande/colapsa, Enter seleciona).",
|
|
245
|
-
"ariaLabel": "Estrutura de componentes",
|
|
246
|
-
"selectedConsoleLog": "Selecionado:",
|
|
247
|
-
"nodes": {
|
|
248
|
-
"components": "Componentes",
|
|
249
|
-
"ui": "UI",
|
|
250
|
-
"button": "Botão",
|
|
251
|
-
"input": "Input",
|
|
252
|
-
"pagination": "Paginação",
|
|
253
|
-
"layout": "Layout",
|
|
254
|
-
"sidebar": "Sidebar",
|
|
255
|
-
"header": "Header",
|
|
256
|
-
"hooks": "Hooks"
|
|
257
|
-
}
|
|
258
|
-
},
|
|
259
|
-
"richText": {
|
|
260
|
-
"title": "RichTextEditor",
|
|
261
|
-
"description": "Editor rich text com <code>role=\"textbox\"</code>, <code>aria-multiline</code> e contadores via <code>useState</code> (sem IIFE).",
|
|
262
|
-
"placeholder": "Escreva aqui..."
|
|
263
|
-
}
|
|
264
|
-
},
|
|
265
|
-
"footer": {
|
|
266
|
-
"title": "Template CLI-Ready",
|
|
267
|
-
"subtitle": "Como usar este template",
|
|
268
|
-
"descriptionPart1": "Este template está pronto para ser usado como base para novos projetos. Todos os componentes são importados da biblioteca ",
|
|
269
|
-
"descriptionPart2": " e seguem a arquitetura CLI-first do Xertica UI.",
|
|
270
|
-
"tipTitle": "Dica",
|
|
271
|
-
"tipDescriptionPart1": "Copie este arquivo como ponto de partida para suas páginas. Todos os componentes são reutilizáveis e customizáveis através das variáveis CSS definidas em ",
|
|
272
|
-
"tipDescriptionPart2": "."
|
|
273
|
-
},
|
|
274
|
-
"headerWithBreadcrumbs": {
|
|
275
|
-
"sectionTitle": "Cabeçalho com Breadcrumbs",
|
|
276
|
-
"cardTitle": "Cabeçalho Principal",
|
|
277
|
-
"cardDescription": "Exemplo de Header com breadcrumbs de 4 níveis",
|
|
278
|
-
"exampleContentTitle": "Conteúdo de Exemplo",
|
|
279
|
-
"exampleContentDescriptionPart1": "Neste exemplo, o componente ",
|
|
280
|
-
"exampleContentDescriptionPart2": " principal da aplicação agora suporta receber um array de breadcrumbs para navegações complexas com mais de 3 níveis.",
|
|
281
|
-
"breadcrumbs": {
|
|
282
|
-
"dashboard": "Dashboard",
|
|
283
|
-
"settings": "Configurações",
|
|
284
|
-
"users": "Usuários",
|
|
285
|
-
"accessProfile": "Perfil de Acesso"
|
|
286
|
-
}
|
|
287
|
-
},
|
|
288
|
-
"headerVariations": {
|
|
289
|
-
"sectionTitle": "Variações de Cabeçalho",
|
|
290
|
-
"cardTitle": "Configurações do Cabeçalho Principal",
|
|
291
|
-
"cardDescription": "O Header é focado em navegação (breadcrumbs) e ações contextuais rápidas.",
|
|
292
|
-
"visibleElements": "Elementos Visíveis",
|
|
293
|
-
"actionButtons": "Botões de Ação",
|
|
294
|
-
"breadcrumbsLabel": "Breadcrumbs",
|
|
295
|
-
"preview": "Visualização",
|
|
296
|
-
"currentPage": "Página Atual",
|
|
297
|
-
"contentArea": "Área de Conteúdo da Página",
|
|
298
|
-
"breadcrumbBrand": "Xertica UI",
|
|
299
|
-
"breadcrumbSettings": "Configurações",
|
|
300
|
-
"breadcrumbProfile": "Perfil",
|
|
301
|
-
"notificationsOpenedToast": "Notificações abertas",
|
|
302
|
-
"messagesLabel": "Mensagens",
|
|
303
|
-
"messagesOpenedToast": "Mensagens abertas"
|
|
304
|
-
},
|
|
305
|
-
"sidebarControls": {
|
|
306
|
-
"footerSettings": "Configurações do Rodapé",
|
|
307
|
-
"userProfile": "Perfil do Usuário",
|
|
308
|
-
"settings": "Configurações",
|
|
309
|
-
"logoutButton": "Botão de Sair",
|
|
310
|
-
"sidebarWidthDesktop": "Largura da Sidebar (Desktop)",
|
|
311
|
-
"sidebarWidthAriaLabel": "Largura da Sidebar",
|
|
312
|
-
"filterByStatus": "Filtrar por Status",
|
|
313
|
-
"filterActive": "Ativo",
|
|
314
|
-
"filterArchived": "Arquivado",
|
|
315
|
-
"filterPending": "Pendente"
|
|
316
|
-
}
|
|
4
|
+
"subtitle": "Ponto de partida para suas próprias páginas",
|
|
5
|
+
"exampleTitle": "Exemplo",
|
|
6
|
+
"exampleInputLabel": "Nome",
|
|
7
|
+
"exampleInputPlaceholder": "Digite algo...",
|
|
8
|
+
"exampleButton": "Enviar"
|
|
317
9
|
}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { Button } from 'xertica-ui/ui';
|
|
3
|
-
import { Lock } from 'lucide-react';
|
|
4
|
-
import { useTranslation } from 'react-i18next';
|
|
5
|
-
|
|
6
|
-
interface SocialLoginButtonsProps {
|
|
7
|
-
onSocialLogin: (provider: string) => void;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export function SocialLoginButtons({ onSocialLogin }: SocialLoginButtonsProps) {
|
|
11
|
-
const { t } = useTranslation();
|
|
12
|
-
|
|
13
|
-
return (
|
|
14
|
-
<>
|
|
15
|
-
<div className="relative">
|
|
16
|
-
<div className="absolute inset-0 flex items-center">
|
|
17
|
-
<div className="w-full border-t border-border" />
|
|
18
|
-
</div>
|
|
19
|
-
<div className="relative flex justify-center text-sm">
|
|
20
|
-
<span className="bg-muted px-2 text-muted-foreground">{t('login.orContinueWith')}</span>
|
|
21
|
-
</div>
|
|
22
|
-
</div>
|
|
23
|
-
|
|
24
|
-
<div className="space-y-3">
|
|
25
|
-
<Button
|
|
26
|
-
type="button"
|
|
27
|
-
variant="outline"
|
|
28
|
-
className="w-full justify-center"
|
|
29
|
-
onClick={() => onSocialLogin('Google')}
|
|
30
|
-
>
|
|
31
|
-
<svg className="w-5 h-5 mr-2" viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg">
|
|
32
|
-
<path
|
|
33
|
-
fill="#EA4335"
|
|
34
|
-
d="M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z"
|
|
35
|
-
/>
|
|
36
|
-
<path
|
|
37
|
-
fill="#4285F4"
|
|
38
|
-
d="M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z"
|
|
39
|
-
/>
|
|
40
|
-
<path
|
|
41
|
-
fill="#FBBC05"
|
|
42
|
-
d="M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z"
|
|
43
|
-
/>
|
|
44
|
-
<path
|
|
45
|
-
fill="#34A853"
|
|
46
|
-
d="M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z"
|
|
47
|
-
/>
|
|
48
|
-
<path fill="none" d="M0 0h48v48H0z" />
|
|
49
|
-
</svg>
|
|
50
|
-
<span>{t('login.signInWithGoogle')}</span>
|
|
51
|
-
</Button>
|
|
52
|
-
|
|
53
|
-
<Button
|
|
54
|
-
type="button"
|
|
55
|
-
variant="outline"
|
|
56
|
-
className="w-full justify-center"
|
|
57
|
-
onClick={() => onSocialLogin('MT Login')}
|
|
58
|
-
>
|
|
59
|
-
<Lock className="w-5 h-5 mr-2 text-[var(--chart-4)]" />
|
|
60
|
-
<span>{t('login.signInWithMTLogin')}</span>
|
|
61
|
-
</Button>
|
|
62
|
-
|
|
63
|
-
<Button
|
|
64
|
-
type="button"
|
|
65
|
-
variant="outline"
|
|
66
|
-
className="w-full justify-center font-normal"
|
|
67
|
-
onClick={() => onSocialLogin('gov.br')}
|
|
68
|
-
>
|
|
69
|
-
<span>
|
|
70
|
-
{t('login.signInWithGovBr').split('gov.br')[0]}
|
|
71
|
-
<strong className="font-semibold">gov.br</strong>
|
|
72
|
-
{t('login.signInWithGovBr').split('gov.br')[1] || ''}
|
|
73
|
-
</span>
|
|
74
|
-
</Button>
|
|
75
|
-
</div>
|
|
76
|
-
</>
|
|
77
|
-
);
|
|
78
|
-
}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
2
|
-
// features/home/data/mock.ts
|
|
3
|
-
//
|
|
4
|
-
// All mock data for the Home feature lives here.
|
|
5
|
-
// To connect to a real API, replace the fetch functions below with actual
|
|
6
|
-
// HTTP calls — the hooks and components stay unchanged.
|
|
7
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
8
|
-
|
|
9
|
-
import i18n from '../../../i18n';
|
|
10
|
-
import type { LucideIcon } from 'lucide-react';
|
|
11
|
-
import { FileText } from 'lucide-react';
|
|
12
|
-
|
|
13
|
-
// ── Types ─────────────────────────────────────────────────────────────────────
|
|
14
|
-
|
|
15
|
-
export interface FeatureCard {
|
|
16
|
-
id: string;
|
|
17
|
-
title: string;
|
|
18
|
-
description: string;
|
|
19
|
-
badge?: string;
|
|
20
|
-
href: string;
|
|
21
|
-
Icon: LucideIcon;
|
|
22
|
-
chartColor: string; // CSS variable: '--chart-1' | '--chart-2' | '--chart-3' | '--chart-4' | '--chart-5'
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// ── Mock API function ─────────────────────────────────────────────────────────
|
|
26
|
-
|
|
27
|
-
export async function fetchFeatureCards(): Promise<FeatureCard[]> {
|
|
28
|
-
// Replace with: return fetch('/api/home/features').then(r => r.json());
|
|
29
|
-
await new Promise(resolve => setTimeout(resolve, 100));
|
|
30
|
-
return [
|
|
31
|
-
{
|
|
32
|
-
id: 'template-cli',
|
|
33
|
-
title: i18n.t('home.templateCliTitle'),
|
|
34
|
-
description: i18n.t('home.templateCliDescription'),
|
|
35
|
-
badge: i18n.t('home.templateClibadge'),
|
|
36
|
-
href: '/template',
|
|
37
|
-
Icon: FileText,
|
|
38
|
-
chartColor: '--chart-1',
|
|
39
|
-
},
|
|
40
|
-
];
|
|
41
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
2
|
-
// features/home/hooks/useFeatureCards.ts
|
|
3
|
-
//
|
|
4
|
-
// Server state for the feature cards grid on the Home dashboard.
|
|
5
|
-
// Swap `fetchFeatureCards` for a real API endpoint when ready.
|
|
6
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
7
|
-
|
|
8
|
-
import { useQuery } from '@tanstack/react-query';
|
|
9
|
-
import { useLanguage } from 'xertica-ui/hooks';
|
|
10
|
-
import { fetchFeatureCards, type FeatureCard } from '../data/mock';
|
|
11
|
-
|
|
12
|
-
export function useFeatureCards() {
|
|
13
|
-
const { language } = useLanguage();
|
|
14
|
-
return useQuery<FeatureCard[]>({
|
|
15
|
-
// Language is part of the key so each locale has its own cache slot.
|
|
16
|
-
queryKey: ['home', 'feature-cards', language],
|
|
17
|
-
queryFn: fetchFeatureCards,
|
|
18
|
-
staleTime: 10 * 60 * 1000, // 10 min — feature list is fairly static
|
|
19
|
-
});
|
|
20
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
2
|
-
// features/home/store/dashboardStore.ts
|
|
3
|
-
//
|
|
4
|
-
// Client-side UI state for the Home feature.
|
|
5
|
-
// Use Zustand for state that lives only in the browser (filters, selections,
|
|
6
|
-
// UI toggles) and React Query for state that originates from the server.
|
|
7
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
8
|
-
|
|
9
|
-
import { create } from 'zustand';
|
|
10
|
-
|
|
11
|
-
interface DashboardStore {
|
|
12
|
-
/** Active tab in the data section */
|
|
13
|
-
activeTab: string;
|
|
14
|
-
setActiveTab: (tab: string) => void;
|
|
15
|
-
/** Whether the stats section is expanded */
|
|
16
|
-
statsExpanded: boolean;
|
|
17
|
-
toggleStats: () => void;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export const useDashboardStore = create<DashboardStore>(set => ({
|
|
21
|
-
activeTab: 'overview',
|
|
22
|
-
setActiveTab: tab => set({ activeTab: tab }),
|
|
23
|
-
statsExpanded: true,
|
|
24
|
-
toggleStats: () => set(state => ({ statsExpanded: !state.statsExpanded })),
|
|
25
|
-
}));
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
Button,
|
|
4
|
-
Input,
|
|
5
|
-
Table,
|
|
6
|
-
TableHeader,
|
|
7
|
-
TableRow,
|
|
8
|
-
TableHead,
|
|
9
|
-
TableBody,
|
|
10
|
-
TableCell,
|
|
11
|
-
DropdownMenu,
|
|
12
|
-
DropdownMenuTrigger,
|
|
13
|
-
DropdownMenuContent,
|
|
14
|
-
DropdownMenuItem,
|
|
15
|
-
Badge,
|
|
16
|
-
Card,
|
|
17
|
-
} from 'xertica-ui/ui';
|
|
18
|
-
import { Search, Plus, MoreHorizontal } from 'lucide-react';
|
|
19
|
-
import { useTranslation } from 'react-i18next';
|
|
20
|
-
|
|
21
|
-
export function CrudTemplate() {
|
|
22
|
-
const { t } = useTranslation();
|
|
23
|
-
return (
|
|
24
|
-
<div className="flex w-full flex-col gap-6 p-6 mx-auto max-w-7xl">
|
|
25
|
-
<div className="flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
|
|
26
|
-
<div>
|
|
27
|
-
<h1 className="text-2xl font-bold tracking-tight">{t('crudTemplate.title')}</h1>
|
|
28
|
-
<p className="text-muted-foreground">{t('crudTemplate.subtitle')}</p>
|
|
29
|
-
</div>
|
|
30
|
-
<Button className="gap-2">
|
|
31
|
-
<Plus className="size-4" />
|
|
32
|
-
{t('crudTemplate.newMember')}
|
|
33
|
-
</Button>
|
|
34
|
-
</div>
|
|
35
|
-
|
|
36
|
-
<Card>
|
|
37
|
-
<div className="flex p-4 border-b gap-2">
|
|
38
|
-
<div className="relative w-full max-w-sm">
|
|
39
|
-
<Search className="absolute left-2.5 top-2.5 size-4 text-muted-foreground" />
|
|
40
|
-
<Input placeholder={t('crudTemplate.searchPlaceholder')} className="w-full h-9 pl-8" />
|
|
41
|
-
</div>
|
|
42
|
-
</div>
|
|
43
|
-
|
|
44
|
-
<Table>
|
|
45
|
-
<TableHeader>
|
|
46
|
-
<TableRow>
|
|
47
|
-
<TableHead>{t('crudTemplate.headers.name')}</TableHead>
|
|
48
|
-
<TableHead>{t('crudTemplate.headers.email')}</TableHead>
|
|
49
|
-
<TableHead className="hidden md:table-cell">
|
|
50
|
-
{t('crudTemplate.headers.role')}
|
|
51
|
-
</TableHead>
|
|
52
|
-
<TableHead>{t('crudTemplate.headers.status')}</TableHead>
|
|
53
|
-
<TableHead className="text-right">{t('crudTemplate.headers.action')}</TableHead>
|
|
54
|
-
</TableRow>
|
|
55
|
-
</TableHeader>
|
|
56
|
-
<TableBody>
|
|
57
|
-
<TableRow>
|
|
58
|
-
<TableCell className="font-medium">Admin Dev</TableCell>
|
|
59
|
-
<TableCell>dev@xertica.com</TableCell>
|
|
60
|
-
<TableCell className="hidden md:table-cell">
|
|
61
|
-
{t('crudTemplate.roles.administrator')}
|
|
62
|
-
</TableCell>
|
|
63
|
-
<TableCell>
|
|
64
|
-
<Badge variant="outline">{t('crudTemplate.status.active')}</Badge>
|
|
65
|
-
</TableCell>
|
|
66
|
-
<TableCell className="text-right">
|
|
67
|
-
<DropdownMenu>
|
|
68
|
-
<DropdownMenuTrigger asChild>
|
|
69
|
-
<Button variant="ghost" size="icon" className="size-8">
|
|
70
|
-
<MoreHorizontal className="size-4" />
|
|
71
|
-
</Button>
|
|
72
|
-
</DropdownMenuTrigger>
|
|
73
|
-
<DropdownMenuContent align="end">
|
|
74
|
-
<DropdownMenuItem>{t('crudTemplate.actions.editProfile')}</DropdownMenuItem>
|
|
75
|
-
<DropdownMenuItem className="text-destructive">
|
|
76
|
-
{t('crudTemplate.actions.revokeAccess')}
|
|
77
|
-
</DropdownMenuItem>
|
|
78
|
-
</DropdownMenuContent>
|
|
79
|
-
</DropdownMenu>
|
|
80
|
-
</TableCell>
|
|
81
|
-
</TableRow>
|
|
82
|
-
<TableRow>
|
|
83
|
-
<TableCell className="font-medium">João Silva</TableCell>
|
|
84
|
-
<TableCell>joao@xertica.com</TableCell>
|
|
85
|
-
<TableCell className="hidden md:table-cell">
|
|
86
|
-
{t('crudTemplate.roles.editor')}
|
|
87
|
-
</TableCell>
|
|
88
|
-
<TableCell>
|
|
89
|
-
<Badge variant="secondary">{t('crudTemplate.status.inactive')}</Badge>
|
|
90
|
-
</TableCell>
|
|
91
|
-
<TableCell className="text-right">
|
|
92
|
-
<DropdownMenu>
|
|
93
|
-
<DropdownMenuTrigger asChild>
|
|
94
|
-
<Button variant="ghost" size="icon" className="size-8">
|
|
95
|
-
<MoreHorizontal className="size-4" />
|
|
96
|
-
</Button>
|
|
97
|
-
</DropdownMenuTrigger>
|
|
98
|
-
<DropdownMenuContent align="end">
|
|
99
|
-
<DropdownMenuItem>{t('crudTemplate.actions.editProfile')}</DropdownMenuItem>
|
|
100
|
-
<DropdownMenuItem className="text-destructive">
|
|
101
|
-
{t('crudTemplate.actions.revokeAccess')}
|
|
102
|
-
</DropdownMenuItem>
|
|
103
|
-
</DropdownMenuContent>
|
|
104
|
-
</DropdownMenu>
|
|
105
|
-
</TableCell>
|
|
106
|
-
</TableRow>
|
|
107
|
-
</TableBody>
|
|
108
|
-
</Table>
|
|
109
|
-
</Card>
|
|
110
|
-
</div>
|
|
111
|
-
);
|
|
112
|
-
}
|