xertica-ui 2.1.11 → 2.2.1
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 +24 -3
- package/README.md +1 -1
- package/bin/cli.ts +7 -4
- package/bin/language-config.ts +79 -19
- package/components/pages/template-content/TemplateContent.tsx +204 -218
- package/dist/ThemeContext-BblcjQup.cjs +1855 -0
- package/dist/ThemeContext-BgclCB35.js +1856 -0
- package/dist/ThemeContext-Bo-W2WZH.js +1856 -0
- package/dist/ThemeContext-CP3a0jxy.cjs +1855 -0
- package/dist/ThemeContext-DQUOeziy.cjs +1855 -0
- package/dist/ThemeContext-GeEBTJ3q.cjs +1621 -0
- package/dist/ThemeContext-JyLK9B1o.js +1622 -0
- package/dist/ThemeContext-ept8jhXI.js +1856 -0
- package/dist/VerifyEmailPage-BIBOKV7Z.js +3214 -0
- package/dist/VerifyEmailPage-BiRm7Nh4.cjs +3213 -0
- package/dist/VerifyEmailPage-Bvfv8HVQ.js +3214 -0
- package/dist/VerifyEmailPage-D-FRj5TU.cjs +3213 -0
- package/dist/VerifyEmailPage-RrUApqBN.js +3214 -0
- package/dist/VerifyEmailPage-VoMI7MYH.cjs +3213 -0
- package/dist/VerifyEmailPage-hdB8JQGv.cjs +3213 -0
- package/dist/VerifyEmailPage-vYHbYK3q.js +3214 -0
- package/dist/XerticaProvider-AChwphCO.cjs +48 -0
- package/dist/XerticaProvider-AbWlr7Af.cjs +48 -0
- package/dist/XerticaProvider-BSyFrmC0.js +49 -0
- package/dist/XerticaProvider-CUYJZc32.js +49 -0
- package/dist/XerticaProvider-CWs6EwNa.js +49 -0
- package/dist/XerticaProvider-CiNKjMx1.cjs +48 -0
- package/dist/XerticaProvider-D5lLumH-.js +49 -0
- package/dist/XerticaProvider-qQUDop71.cjs +48 -0
- package/dist/XerticaXLogo-8TTzBjHw.cjs +251 -0
- package/dist/XerticaXLogo-B2svDGZh.cjs +251 -0
- package/dist/XerticaXLogo-BWaag64t.js +252 -0
- package/dist/XerticaXLogo-CFuIlYFH.js +252 -0
- package/dist/XerticaXLogo-ChryA6xj.js +252 -0
- package/dist/XerticaXLogo-CowGv7BC.js +252 -0
- package/dist/XerticaXLogo-DTee_y8X.cjs +251 -0
- package/dist/XerticaXLogo-kslQ8Tk_.cjs +251 -0
- package/dist/brand.cjs.js +2 -2
- package/dist/brand.es.js +2 -2
- package/dist/cli.js +54 -12
- package/dist/hooks.cjs.js +1 -1
- package/dist/hooks.es.js +1 -1
- package/dist/i18n.d.ts +2 -1
- package/dist/index.cjs.js +5 -5
- package/dist/index.es.js +5 -5
- 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-B3EYhli0.cjs +800 -0
- package/dist/sidebar-B9NR0lCe.cjs +800 -0
- package/dist/sidebar-BvF5I2Ue.cjs +800 -0
- package/dist/sidebar-CRMiBtAi.js +801 -0
- package/dist/sidebar-CZ2mWaMM.cjs +800 -0
- package/dist/sidebar-CplprZpM.js +801 -0
- package/dist/sidebar-KIS0C2JH.js +801 -0
- package/dist/sidebar-OTO_up7Z.js +801 -0
- package/dist/xertica-ui.css +1 -1
- package/docs/architecture-improvements.md +11 -31
- package/docs/architecture.md +15 -4
- package/docs/i18n.md +112 -64
- package/docs/llms.md +1 -1
- package/guidelines/Guidelines.md +15 -8
- package/llms-compact.txt +1 -1
- package/llms-full.txt +5 -2
- package/llms.txt +1 -1
- package/package.json +1 -1
- package/templates/CLAUDE.md +165 -180
- package/templates/guidelines/Guidelines.md +17 -7
- package/templates/package.json +2 -2
- package/templates/src/app/App.tsx +1 -1
- package/templates/src/features/auth/ui/ForgotPasswordContent.tsx +9 -7
- package/templates/src/features/auth/ui/LoginContent.tsx +10 -8
- package/templates/src/features/auth/ui/ResetPasswordContent.tsx +179 -177
- package/templates/src/features/auth/ui/SocialLoginButtons.tsx +9 -4
- package/templates/src/features/auth/ui/VerifyEmailContent.tsx +84 -82
- package/templates/src/features/template/ui/CrudTemplate.tsx +115 -100
- package/templates/src/features/template/ui/DashboardTemplate.tsx +110 -94
- package/templates/src/features/template/ui/FormTemplate.tsx +117 -117
- package/templates/src/features/template/ui/LoginTemplate.tsx +59 -52
- package/templates/src/features/template/ui/TemplateContent.tsx +1314 -1193
- package/templates/src/i18n.ts +54 -7
- package/templates/src/locales/en/common.json +21 -0
- package/templates/src/locales/en/components/activityCard.json +10 -0
- package/templates/src/locales/en/components/assistant.json +119 -0
- package/templates/src/locales/en/components/media.json +29 -0
- package/templates/src/locales/en/components/notificationCard.json +5 -0
- package/templates/src/locales/en/components/profileCard.json +8 -0
- package/templates/src/locales/en/components/projectCard.json +10 -0
- package/templates/src/locales/en/components/sidebar.json +14 -0
- package/templates/src/locales/en/components/stats.json +8 -0
- package/templates/src/locales/en/components/team.json +14 -0
- package/templates/src/locales/en/errors.json +9 -0
- package/templates/src/locales/en/languageSelector.json +7 -0
- package/templates/src/locales/en/nav.json +6 -0
- package/templates/src/locales/en/pages/crudTemplate.json +25 -0
- package/templates/src/locales/en/pages/dashboardTemplate.json +20 -0
- package/templates/src/locales/en/pages/forgotPassword.json +10 -0
- package/templates/src/locales/en/pages/formTemplate.json +16 -0
- package/templates/src/locales/en/pages/home.json +7 -0
- package/templates/src/locales/en/pages/login.json +15 -0
- package/templates/src/locales/en/pages/loginTemplate.json +9 -0
- package/templates/src/locales/en/pages/resetPassword.json +18 -0
- package/templates/src/locales/en/pages/templates.json +317 -0
- package/templates/src/locales/en/pages/verifyEmail.json +12 -0
- package/templates/src/locales/en/themeToggle.json +6 -0
- package/templates/src/locales/es/common.json +21 -0
- package/templates/src/locales/es/components/activityCard.json +10 -0
- package/templates/src/locales/es/components/assistant.json +119 -0
- package/templates/src/locales/es/components/media.json +29 -0
- package/templates/src/locales/es/components/notificationCard.json +5 -0
- package/templates/src/locales/es/components/profileCard.json +8 -0
- package/templates/src/locales/es/components/projectCard.json +10 -0
- package/templates/src/locales/es/components/sidebar.json +14 -0
- package/templates/src/locales/es/components/stats.json +8 -0
- package/templates/src/locales/es/components/team.json +14 -0
- package/templates/src/locales/es/errors.json +9 -0
- package/templates/src/locales/es/languageSelector.json +7 -0
- package/templates/src/locales/es/nav.json +6 -0
- package/templates/src/locales/es/pages/crudTemplate.json +25 -0
- package/templates/src/locales/es/pages/dashboardTemplate.json +20 -0
- package/templates/src/locales/es/pages/forgotPassword.json +10 -0
- package/templates/src/locales/es/pages/formTemplate.json +16 -0
- package/templates/src/locales/es/pages/home.json +7 -0
- package/templates/src/locales/es/pages/login.json +15 -0
- package/templates/src/locales/es/pages/loginTemplate.json +9 -0
- package/templates/src/locales/es/pages/resetPassword.json +18 -0
- package/templates/src/locales/es/pages/templates.json +317 -0
- package/templates/src/locales/es/pages/verifyEmail.json +12 -0
- package/templates/src/locales/es/themeToggle.json +6 -0
- package/templates/src/locales/pt-BR/common.json +21 -0
- package/templates/src/locales/pt-BR/components/activityCard.json +10 -0
- package/templates/src/locales/pt-BR/components/assistant.json +119 -0
- package/templates/src/locales/pt-BR/components/media.json +29 -0
- package/templates/src/locales/pt-BR/components/notificationCard.json +5 -0
- package/templates/src/locales/pt-BR/components/profileCard.json +8 -0
- package/templates/src/locales/pt-BR/components/projectCard.json +10 -0
- package/templates/src/locales/pt-BR/components/sidebar.json +14 -0
- package/templates/src/locales/pt-BR/components/stats.json +8 -0
- package/templates/src/locales/pt-BR/components/team.json +14 -0
- package/templates/src/locales/pt-BR/errors.json +9 -0
- package/templates/src/locales/pt-BR/languageSelector.json +7 -0
- package/templates/src/locales/pt-BR/nav.json +6 -0
- package/templates/src/locales/pt-BR/pages/crudTemplate.json +25 -0
- package/templates/src/locales/pt-BR/pages/dashboardTemplate.json +20 -0
- package/templates/src/locales/pt-BR/pages/forgotPassword.json +10 -0
- package/templates/src/locales/pt-BR/pages/formTemplate.json +16 -0
- package/templates/src/locales/pt-BR/pages/home.json +7 -0
- package/templates/src/locales/pt-BR/pages/login.json +15 -0
- package/templates/src/locales/pt-BR/pages/loginTemplate.json +9 -0
- package/templates/src/locales/pt-BR/pages/resetPassword.json +18 -0
- package/templates/src/locales/pt-BR/pages/templates.json +317 -0
- package/templates/src/locales/pt-BR/pages/verifyEmail.json +12 -0
- package/templates/src/locales/pt-BR/themeToggle.json +6 -0
- package/templates/src/pages/AssistantPage.tsx +464 -463
- package/templates/vite.config.ts +35 -5
- package/templates/src/locales/en.json +0 -306
- package/templates/src/locales/es.json +0 -306
- package/templates/src/locales/pt-BR.json +0 -306
|
@@ -129,7 +129,7 @@ export function TemplateContent() {
|
|
|
129
129
|
|
|
130
130
|
const handleFormSubmit = (e: React.FormEvent) => {
|
|
131
131
|
e.preventDefault();
|
|
132
|
-
toast.success('
|
|
132
|
+
toast.success(t('templates.formSubmitSuccess'));
|
|
133
133
|
};
|
|
134
134
|
|
|
135
135
|
return (
|
|
@@ -144,8 +144,8 @@ export function TemplateContent() {
|
|
|
144
144
|
showThemeToggle={true}
|
|
145
145
|
showLanguageSelector={true}
|
|
146
146
|
breadcrumbs={[
|
|
147
|
-
{ label: '
|
|
148
|
-
{ label: '
|
|
147
|
+
{ label: t('nav.designSystem'), href: '/home', icon: <Home className="w-4 h-4" /> },
|
|
148
|
+
{ label: t('templates.breadcrumb') },
|
|
149
149
|
]}
|
|
150
150
|
renderLink={(href, props) => <Link to={href} {...props} />}
|
|
151
151
|
/>
|
|
@@ -157,36 +157,36 @@ export function TemplateContent() {
|
|
|
157
157
|
<div className="max-w-6xl mx-auto space-y-8">
|
|
158
158
|
{/* Page header */}
|
|
159
159
|
<PageHeader
|
|
160
|
-
title=
|
|
161
|
-
subtitle=
|
|
160
|
+
title={t('templates.title')}
|
|
161
|
+
subtitle={t('templates.subtitle')}
|
|
162
162
|
/>
|
|
163
163
|
|
|
164
164
|
{/* Page Header Example */}
|
|
165
165
|
<section>
|
|
166
|
-
<h3 className="mb-4">
|
|
166
|
+
<h3 className="mb-4">{t('templates.headerWithBreadcrumbs.sectionTitle')}</h3>
|
|
167
167
|
<Card>
|
|
168
168
|
<CardHeader>
|
|
169
|
-
<CardTitle>
|
|
170
|
-
<CardDescription>
|
|
169
|
+
<CardTitle>{t('templates.headerWithBreadcrumbs.cardTitle')}</CardTitle>
|
|
170
|
+
<CardDescription>{t('templates.headerWithBreadcrumbs.cardDescription')}</CardDescription>
|
|
171
171
|
</CardHeader>
|
|
172
172
|
<CardContent className="p-0 border-t bg-background overflow-hidden rounded-b-[var(--radius-lg)]">
|
|
173
173
|
<Header
|
|
174
174
|
className="border-b"
|
|
175
175
|
breadcrumbs={[
|
|
176
|
-
{ label: '
|
|
177
|
-
{ label: '
|
|
178
|
-
{ label: '
|
|
179
|
-
{ label: '
|
|
176
|
+
{ label: t('templates.headerWithBreadcrumbs.breadcrumbs.dashboard'), href: '#', icon: <Home className="w-4 h-4" /> },
|
|
177
|
+
{ label: t('templates.headerWithBreadcrumbs.breadcrumbs.settings'), href: '#', icon: <Settings className="w-4 h-4" /> },
|
|
178
|
+
{ label: t('templates.headerWithBreadcrumbs.breadcrumbs.users'), href: '#', icon: <Users className="w-4 h-4" /> },
|
|
179
|
+
{ label: t('templates.headerWithBreadcrumbs.breadcrumbs.accessProfile') },
|
|
180
180
|
]}
|
|
181
181
|
showLanguageSelector={true}
|
|
182
182
|
showThemeToggle={true}
|
|
183
183
|
/>
|
|
184
184
|
<div className="p-6 min-h-[200px]">
|
|
185
|
-
<h4 className="text-lg font-semibold mb-2">
|
|
185
|
+
<h4 className="text-lg font-semibold mb-2">{t('templates.headerWithBreadcrumbs.exampleContentTitle')}</h4>
|
|
186
186
|
<p className="text-muted-foreground">
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
187
|
+
{t('templates.headerWithBreadcrumbs.exampleContentDescriptionPart1')}
|
|
188
|
+
<strong>Header</strong>
|
|
189
|
+
{t('templates.headerWithBreadcrumbs.exampleContentDescriptionPart2')}
|
|
190
190
|
</p>
|
|
191
191
|
</div>
|
|
192
192
|
</CardContent>
|
|
@@ -197,31 +197,26 @@ export function TemplateContent() {
|
|
|
197
197
|
|
|
198
198
|
{/* Alert Examples */}
|
|
199
199
|
<section>
|
|
200
|
-
<h3 className="mb-4">
|
|
200
|
+
<h3 className="mb-4">{t('templates.sections.alerts')}</h3>
|
|
201
201
|
<div className="grid gap-4 md:grid-cols-2">
|
|
202
202
|
<Alert variant="info">
|
|
203
|
-
<AlertTitle>
|
|
204
|
-
<AlertDescription>
|
|
205
|
-
Este é um exemplo de alerta informativo usando os componentes do Design
|
|
206
|
-
System.
|
|
207
|
-
</AlertDescription>
|
|
203
|
+
<AlertTitle>{t('templates.alerts.infoTitle')}</AlertTitle>
|
|
204
|
+
<AlertDescription>{t('templates.alerts.infoDescription')}</AlertDescription>
|
|
208
205
|
</Alert>
|
|
209
206
|
|
|
210
207
|
<Alert variant="destructive">
|
|
211
|
-
<AlertTitle>
|
|
212
|
-
<AlertDescription>
|
|
213
|
-
Ocorreu um erro ao processar sua solicitação.
|
|
214
|
-
</AlertDescription>
|
|
208
|
+
<AlertTitle>{t('templates.alerts.errorTitle')}</AlertTitle>
|
|
209
|
+
<AlertDescription>{t('templates.alerts.errorDescription')}</AlertDescription>
|
|
215
210
|
</Alert>
|
|
216
211
|
|
|
217
212
|
<Alert variant="success">
|
|
218
|
-
<AlertTitle>
|
|
219
|
-
<AlertDescription>
|
|
213
|
+
<AlertTitle>{t('templates.alerts.successTitle')}</AlertTitle>
|
|
214
|
+
<AlertDescription>{t('templates.alerts.successDescription')}</AlertDescription>
|
|
220
215
|
</Alert>
|
|
221
216
|
|
|
222
217
|
<Alert variant="warning">
|
|
223
|
-
<AlertTitle>
|
|
224
|
-
<AlertDescription>
|
|
218
|
+
<AlertTitle>{t('templates.alerts.warningTitle')}</AlertTitle>
|
|
219
|
+
<AlertDescription>{t('templates.alerts.warningDescription')}</AlertDescription>
|
|
225
220
|
</Alert>
|
|
226
221
|
</div>
|
|
227
222
|
</section>
|
|
@@ -230,14 +225,14 @@ export function TemplateContent() {
|
|
|
230
225
|
|
|
231
226
|
{/* Cards & Tabs */}
|
|
232
227
|
<section>
|
|
233
|
-
<h3 className="mb-4">
|
|
228
|
+
<h3 className="mb-4">{t('templates.sections.cardsAndTabs')}</h3>
|
|
234
229
|
|
|
235
230
|
<Tabs defaultValue="overview" className="w-full">
|
|
236
231
|
<TabsList className="grid w-full grid-cols-4">
|
|
237
|
-
<TabsTrigger value="overview">
|
|
238
|
-
<TabsTrigger value="forms">
|
|
239
|
-
<TabsTrigger value="data">
|
|
240
|
-
<TabsTrigger value="settings">
|
|
232
|
+
<TabsTrigger value="overview">{t('templates.tabs.overview')}</TabsTrigger>
|
|
233
|
+
<TabsTrigger value="forms">{t('templates.tabs.forms')}</TabsTrigger>
|
|
234
|
+
<TabsTrigger value="data">{t('templates.tabs.data')}</TabsTrigger>
|
|
235
|
+
<TabsTrigger value="settings">{t('templates.tabs.settings')}</TabsTrigger>
|
|
241
236
|
</TabsList>
|
|
242
237
|
|
|
243
238
|
{/* Overview Tab */}
|
|
@@ -245,8 +240,8 @@ export function TemplateContent() {
|
|
|
245
240
|
<div className="grid gap-4 md:grid-cols-3">
|
|
246
241
|
<Card>
|
|
247
242
|
<CardHeader>
|
|
248
|
-
<CardTitle>
|
|
249
|
-
<CardDescription
|
|
243
|
+
<CardTitle>{t('stats.totalUsers')}</CardTitle>
|
|
244
|
+
<CardDescription>{t('stats.last30Days')}</CardDescription>
|
|
250
245
|
</CardHeader>
|
|
251
246
|
<CardContent>
|
|
252
247
|
<div className="text-foreground">
|
|
@@ -262,8 +257,8 @@ export function TemplateContent() {
|
|
|
262
257
|
|
|
263
258
|
<Card>
|
|
264
259
|
<CardHeader>
|
|
265
|
-
<CardTitle>
|
|
266
|
-
<CardDescription>
|
|
260
|
+
<CardTitle>{t('stats.totalRevenue')}</CardTitle>
|
|
261
|
+
<CardDescription>{t('stats.currentMonth')}</CardDescription>
|
|
267
262
|
</CardHeader>
|
|
268
263
|
<CardContent>
|
|
269
264
|
<div className="text-foreground">
|
|
@@ -279,8 +274,8 @@ export function TemplateContent() {
|
|
|
279
274
|
|
|
280
275
|
<Card>
|
|
281
276
|
<CardHeader>
|
|
282
|
-
<CardTitle>
|
|
283
|
-
<CardDescription>
|
|
277
|
+
<CardTitle>{t('stats.conversionRate')}</CardTitle>
|
|
278
|
+
<CardDescription>{t('stats.currentWeek')}</CardDescription>
|
|
284
279
|
</CardHeader>
|
|
285
280
|
<CardContent>
|
|
286
281
|
<div className="text-foreground">
|
|
@@ -297,13 +292,13 @@ export function TemplateContent() {
|
|
|
297
292
|
|
|
298
293
|
<Card>
|
|
299
294
|
<CardHeader>
|
|
300
|
-
<CardTitle>
|
|
301
|
-
<CardDescription>
|
|
295
|
+
<CardTitle>{t('templates.overview.progressTitle')}</CardTitle>
|
|
296
|
+
<CardDescription>{t('templates.overview.progressDescription')}</CardDescription>
|
|
302
297
|
</CardHeader>
|
|
303
298
|
<CardContent className="space-y-6">
|
|
304
299
|
<div className="space-y-2">
|
|
305
300
|
<div className="flex items-center justify-between">
|
|
306
|
-
<Label>
|
|
301
|
+
<Label>{t('templates.overview.projectProgress')}</Label>
|
|
307
302
|
<span className="[font-size:var(--text-small)] text-muted-foreground">
|
|
308
303
|
{progress}%
|
|
309
304
|
</span>
|
|
@@ -329,7 +324,7 @@ export function TemplateContent() {
|
|
|
329
324
|
|
|
330
325
|
<div className="space-y-2">
|
|
331
326
|
<div className="flex items-center justify-between">
|
|
332
|
-
<Label>
|
|
327
|
+
<Label>{t('templates.overview.volume')}</Label>
|
|
333
328
|
<span className="[font-size:var(--text-small)] text-muted-foreground">
|
|
334
329
|
{sliderValue[0]}%
|
|
335
330
|
</span>
|
|
@@ -341,7 +336,7 @@ export function TemplateContent() {
|
|
|
341
336
|
max={100}
|
|
342
337
|
step={1}
|
|
343
338
|
className="w-full"
|
|
344
|
-
aria-label=
|
|
339
|
+
aria-label={t('templates.overview.volume')}
|
|
345
340
|
/>
|
|
346
341
|
</div>
|
|
347
342
|
</CardContent>
|
|
@@ -352,70 +347,68 @@ export function TemplateContent() {
|
|
|
352
347
|
<TabsContent value="forms" className="space-y-4">
|
|
353
348
|
<Card>
|
|
354
349
|
<CardHeader>
|
|
355
|
-
<CardTitle>
|
|
356
|
-
<CardDescription>
|
|
357
|
-
Preencha os campos abaixo para criar uma nova conta
|
|
358
|
-
</CardDescription>
|
|
350
|
+
<CardTitle>{t('templates.forms.registrationTitle')}</CardTitle>
|
|
351
|
+
<CardDescription>{t('templates.forms.registrationDescription')}</CardDescription>
|
|
359
352
|
</CardHeader>
|
|
360
353
|
<CardContent>
|
|
361
354
|
<form onSubmit={handleFormSubmit} className="space-y-4">
|
|
362
355
|
<div className="grid gap-4 md:grid-cols-2">
|
|
363
356
|
<div className="space-y-2">
|
|
364
|
-
<Label htmlFor="firstName">
|
|
365
|
-
<Input id="firstName" placeholder=
|
|
357
|
+
<Label htmlFor="firstName">{t('templates.forms.firstName')}</Label>
|
|
358
|
+
<Input id="firstName" placeholder={t('templates.forms.firstNamePlaceholder')} />
|
|
366
359
|
</div>
|
|
367
360
|
<div className="space-y-2">
|
|
368
|
-
<Label htmlFor="lastName">
|
|
369
|
-
<Input id="lastName" placeholder=
|
|
361
|
+
<Label htmlFor="lastName">{t('templates.forms.lastName')}</Label>
|
|
362
|
+
<Input id="lastName" placeholder={t('templates.forms.lastNamePlaceholder')} />
|
|
370
363
|
</div>
|
|
371
364
|
</div>
|
|
372
365
|
|
|
373
366
|
<div className="space-y-2">
|
|
374
|
-
<Label htmlFor="email">
|
|
367
|
+
<Label htmlFor="email">{t('templates.forms.email')}</Label>
|
|
375
368
|
<div className="relative">
|
|
376
369
|
<Mail className="absolute left-3 top-3 h-4 w-4 text-muted-foreground" />
|
|
377
370
|
<Input
|
|
378
371
|
id="email"
|
|
379
372
|
type="email"
|
|
380
|
-
placeholder=
|
|
373
|
+
placeholder={t('templates.forms.emailPlaceholder')}
|
|
381
374
|
className="pl-10"
|
|
382
375
|
/>
|
|
383
376
|
</div>
|
|
384
377
|
</div>
|
|
385
378
|
|
|
386
379
|
<div className="space-y-2">
|
|
387
|
-
<Label htmlFor="phone">
|
|
380
|
+
<Label htmlFor="phone">{t('templates.forms.phone')}</Label>
|
|
388
381
|
<div className="relative">
|
|
389
382
|
<Phone className="absolute left-3 top-3 h-4 w-4 text-muted-foreground" />
|
|
390
383
|
<Input
|
|
391
384
|
id="phone"
|
|
392
385
|
type="tel"
|
|
393
|
-
placeholder=
|
|
386
|
+
placeholder={t('templates.forms.phonePlaceholder')}
|
|
394
387
|
className="pl-10"
|
|
395
388
|
/>
|
|
396
389
|
</div>
|
|
397
390
|
</div>
|
|
398
391
|
|
|
399
392
|
<div className="space-y-2">
|
|
400
|
-
<Label htmlFor="role">
|
|
393
|
+
<Label htmlFor="role">{t('templates.forms.role')}</Label>
|
|
401
394
|
<Select>
|
|
402
395
|
<SelectTrigger id="role">
|
|
403
|
-
<SelectValue placeholder=
|
|
396
|
+
<SelectValue placeholder={t('templates.forms.rolePlaceholder')} />
|
|
404
397
|
</SelectTrigger>
|
|
405
398
|
<SelectContent>
|
|
406
|
-
<SelectItem value="developer">
|
|
407
|
-
<SelectItem value="designer">
|
|
408
|
-
<SelectItem value="manager">
|
|
409
|
-
<SelectItem value="analyst">
|
|
399
|
+
<SelectItem value="developer">{t('templates.forms.roles.developer')}</SelectItem>
|
|
400
|
+
<SelectItem value="designer">{t('templates.forms.roles.designer')}</SelectItem>
|
|
401
|
+
<SelectItem value="manager">{t('templates.forms.roles.manager')}</SelectItem>
|
|
402
|
+
<SelectItem value="analyst">{t('templates.forms.roles.analyst')}</SelectItem>
|
|
410
403
|
</SelectContent>
|
|
411
404
|
</Select>
|
|
412
405
|
</div>
|
|
413
406
|
|
|
414
407
|
<div className="space-y-2">
|
|
415
|
-
<Label htmlFor="bio">
|
|
408
|
+
<Label htmlFor="bio">{t('templates.forms.bio')}</Label>
|
|
416
409
|
<Textarea
|
|
417
410
|
id="bio"
|
|
418
|
-
placeholder=
|
|
411
|
+
placeholder={t('templates.forms.bioPlaceholder')}
|
|
419
412
|
rows={4}
|
|
420
413
|
/>
|
|
421
414
|
</div>
|
|
@@ -423,27 +416,27 @@ export function TemplateContent() {
|
|
|
423
416
|
<Separator />
|
|
424
417
|
|
|
425
418
|
<div className="space-y-4">
|
|
426
|
-
<h4>
|
|
419
|
+
<h4>{t('templates.forms.preferences')}</h4>
|
|
427
420
|
|
|
428
421
|
<div className="space-y-3">
|
|
429
422
|
<div className="flex items-center space-x-2">
|
|
430
423
|
<Checkbox id="newsletter" />
|
|
431
424
|
<Label htmlFor="newsletter" className="font-normal">
|
|
432
|
-
|
|
425
|
+
{t('templates.forms.newsletter')}
|
|
433
426
|
</Label>
|
|
434
427
|
</div>
|
|
435
428
|
|
|
436
429
|
<div className="flex items-center space-x-2">
|
|
437
430
|
<Checkbox id="notifications" />
|
|
438
431
|
<Label htmlFor="notifications" className="font-normal">
|
|
439
|
-
|
|
432
|
+
{t('templates.forms.pushNotifications')}
|
|
440
433
|
</Label>
|
|
441
434
|
</div>
|
|
442
435
|
|
|
443
436
|
<div className="flex items-center space-x-2">
|
|
444
437
|
<Checkbox id="updates" />
|
|
445
438
|
<Label htmlFor="updates" className="font-normal">
|
|
446
|
-
|
|
439
|
+
{t('templates.forms.featureUpdates')}
|
|
447
440
|
</Label>
|
|
448
441
|
</div>
|
|
449
442
|
</div>
|
|
@@ -451,24 +444,24 @@ export function TemplateContent() {
|
|
|
451
444
|
<Separator />
|
|
452
445
|
|
|
453
446
|
<div className="space-y-3">
|
|
454
|
-
<Label>
|
|
455
|
-
<RadioGroup defaultValue="personal" aria-label=
|
|
447
|
+
<Label>{t('templates.forms.accountType')}</Label>
|
|
448
|
+
<RadioGroup defaultValue="personal" aria-label={t('templates.forms.accountType')}>
|
|
456
449
|
<div className="flex items-center space-x-2">
|
|
457
450
|
<RadioGroupItem value="personal" id="personal" />
|
|
458
451
|
<Label htmlFor="personal" className="font-normal">
|
|
459
|
-
|
|
452
|
+
{t('templates.forms.accountPersonal')}
|
|
460
453
|
</Label>
|
|
461
454
|
</div>
|
|
462
455
|
<div className="flex items-center space-x-2">
|
|
463
456
|
<RadioGroupItem value="business" id="business" />
|
|
464
457
|
<Label htmlFor="business" className="font-normal">
|
|
465
|
-
|
|
458
|
+
{t('templates.forms.accountBusiness')}
|
|
466
459
|
</Label>
|
|
467
460
|
</div>
|
|
468
461
|
<div className="flex items-center space-x-2">
|
|
469
462
|
<RadioGroupItem value="enterprise" id="enterprise" />
|
|
470
463
|
<Label htmlFor="enterprise" className="font-normal">
|
|
471
|
-
|
|
464
|
+
{t('templates.forms.accountEnterprise')}
|
|
472
465
|
</Label>
|
|
473
466
|
</div>
|
|
474
467
|
</RadioGroup>
|
|
@@ -477,8 +470,8 @@ export function TemplateContent() {
|
|
|
477
470
|
</form>
|
|
478
471
|
</CardContent>
|
|
479
472
|
<CardFooter className="flex justify-between">
|
|
480
|
-
<Button variant="outline">
|
|
481
|
-
<Button onClick={handleFormSubmit}>
|
|
473
|
+
<Button variant="outline">{t('templates.forms.cancel')}</Button>
|
|
474
|
+
<Button onClick={handleFormSubmit}>{t('templates.forms.createAccount')}</Button>
|
|
482
475
|
</CardFooter>
|
|
483
476
|
</Card>
|
|
484
477
|
</TabsContent>
|
|
@@ -488,16 +481,16 @@ export function TemplateContent() {
|
|
|
488
481
|
<SectionErrorBoundary>
|
|
489
482
|
<Card>
|
|
490
483
|
<CardHeader>
|
|
491
|
-
<CardTitle>
|
|
492
|
-
<CardDescription>
|
|
484
|
+
<CardTitle>{t('templates.data.title')}</CardTitle>
|
|
485
|
+
<CardDescription>{t('templates.data.description')}</CardDescription>
|
|
493
486
|
</CardHeader>
|
|
494
487
|
<CardContent>
|
|
495
488
|
<div className="mb-4">
|
|
496
489
|
<div className="relative">
|
|
497
490
|
<Search className="absolute left-3 top-3 h-4 w-4 text-muted-foreground" />
|
|
498
491
|
<Input
|
|
499
|
-
placeholder=
|
|
500
|
-
aria-label=
|
|
492
|
+
placeholder={t('templates.data.searchPlaceholder')}
|
|
493
|
+
aria-label={t('templates.data.searchPlaceholder')}
|
|
501
494
|
className="pl-10"
|
|
502
495
|
/>
|
|
503
496
|
</div>
|
|
@@ -569,10 +562,10 @@ export function TemplateContent() {
|
|
|
569
562
|
</p>
|
|
570
563
|
<div className="flex gap-2">
|
|
571
564
|
<Button variant="outline" size="sm">
|
|
572
|
-
|
|
565
|
+
{t('common.previous')}
|
|
573
566
|
</Button>
|
|
574
567
|
<Button variant="outline" size="sm">
|
|
575
|
-
|
|
568
|
+
{t('common.next')}
|
|
576
569
|
</Button>
|
|
577
570
|
</div>
|
|
578
571
|
</CardFooter>
|
|
@@ -584,15 +577,15 @@ export function TemplateContent() {
|
|
|
584
577
|
<TabsContent value="settings" className="space-y-4">
|
|
585
578
|
<Card>
|
|
586
579
|
<CardHeader>
|
|
587
|
-
<CardTitle>
|
|
588
|
-
<CardDescription>
|
|
580
|
+
<CardTitle>{t('templates.settings.title')}</CardTitle>
|
|
581
|
+
<CardDescription>{t('templates.settings.description')}</CardDescription>
|
|
589
582
|
</CardHeader>
|
|
590
583
|
<CardContent className="space-y-6">
|
|
591
584
|
<div className="flex items-center justify-between">
|
|
592
585
|
<div className="space-y-1">
|
|
593
|
-
<Label htmlFor="dark-mode">
|
|
586
|
+
<Label htmlFor="dark-mode">{t('templates.settings.darkMode')}</Label>
|
|
594
587
|
<p className="text-muted-foreground">
|
|
595
|
-
|
|
588
|
+
{t('templates.settings.darkModeDescription')}
|
|
596
589
|
</p>
|
|
597
590
|
</div>
|
|
598
591
|
<Switch
|
|
@@ -606,9 +599,9 @@ export function TemplateContent() {
|
|
|
606
599
|
|
|
607
600
|
<div className="flex items-center justify-between">
|
|
608
601
|
<div className="space-y-1">
|
|
609
|
-
<Label htmlFor="email-notifications">
|
|
602
|
+
<Label htmlFor="email-notifications">{t('templates.settings.emailNotifications')}</Label>
|
|
610
603
|
<p className="text-muted-foreground">
|
|
611
|
-
|
|
604
|
+
{t('templates.settings.emailNotificationsDescription')}
|
|
612
605
|
</p>
|
|
613
606
|
</div>
|
|
614
607
|
<Switch id="email-notifications" defaultChecked />
|
|
@@ -618,9 +611,9 @@ export function TemplateContent() {
|
|
|
618
611
|
|
|
619
612
|
<div className="flex items-center justify-between">
|
|
620
613
|
<div className="space-y-1">
|
|
621
|
-
<Label htmlFor="push-notifications">
|
|
614
|
+
<Label htmlFor="push-notifications">{t('templates.settings.pushNotifications')}</Label>
|
|
622
615
|
<p className="text-muted-foreground">
|
|
623
|
-
|
|
616
|
+
{t('templates.settings.pushNotificationsDescription')}
|
|
624
617
|
</p>
|
|
625
618
|
</div>
|
|
626
619
|
<Switch id="push-notifications" />
|
|
@@ -629,15 +622,15 @@ export function TemplateContent() {
|
|
|
629
622
|
<Separator />
|
|
630
623
|
|
|
631
624
|
<div className="space-y-3">
|
|
632
|
-
<Label>
|
|
625
|
+
<Label>{t('templates.settings.language')}</Label>
|
|
633
626
|
<Select defaultValue="pt-br">
|
|
634
|
-
<SelectTrigger aria-label=
|
|
627
|
+
<SelectTrigger aria-label={t('templates.settings.language')}>
|
|
635
628
|
<SelectValue />
|
|
636
629
|
</SelectTrigger>
|
|
637
630
|
<SelectContent>
|
|
638
|
-
<SelectItem value="pt-br">
|
|
639
|
-
<SelectItem value="en">
|
|
640
|
-
<SelectItem value="es">
|
|
631
|
+
<SelectItem value="pt-br">{t('templates.settings.languages.ptBR')}</SelectItem>
|
|
632
|
+
<SelectItem value="en">{t('templates.settings.languages.en')}</SelectItem>
|
|
633
|
+
<SelectItem value="es">{t('templates.settings.languages.es')}</SelectItem>
|
|
641
634
|
</SelectContent>
|
|
642
635
|
</Select>
|
|
643
636
|
</div>
|
|
@@ -645,26 +638,26 @@ export function TemplateContent() {
|
|
|
645
638
|
<Separator />
|
|
646
639
|
|
|
647
640
|
<div className="space-y-3">
|
|
648
|
-
<Label>
|
|
641
|
+
<Label>{t('templates.settings.timezone')}</Label>
|
|
649
642
|
<Select defaultValue="america-sao-paulo">
|
|
650
|
-
<SelectTrigger aria-label=
|
|
643
|
+
<SelectTrigger aria-label={t('templates.settings.timezone')}>
|
|
651
644
|
<SelectValue />
|
|
652
645
|
</SelectTrigger>
|
|
653
646
|
<SelectContent>
|
|
654
647
|
<SelectItem value="america-sao-paulo">
|
|
655
|
-
|
|
648
|
+
{t('templates.settings.timezones.saoPaulo')}
|
|
656
649
|
</SelectItem>
|
|
657
650
|
<SelectItem value="america-new-york">
|
|
658
|
-
|
|
651
|
+
{t('templates.settings.timezones.newYork')}
|
|
659
652
|
</SelectItem>
|
|
660
|
-
<SelectItem value="europe-london">
|
|
653
|
+
<SelectItem value="europe-london">{t('templates.settings.timezones.london')}</SelectItem>
|
|
661
654
|
</SelectContent>
|
|
662
655
|
</Select>
|
|
663
656
|
</div>
|
|
664
657
|
</CardContent>
|
|
665
658
|
<CardFooter className="flex justify-between">
|
|
666
|
-
<Button variant="outline">
|
|
667
|
-
<Button>
|
|
659
|
+
<Button variant="outline">{t('templates.settings.restoreDefaults')}</Button>
|
|
660
|
+
<Button>{t('templates.settings.saveChanges')}</Button>
|
|
668
661
|
</CardFooter>
|
|
669
662
|
</Card>
|
|
670
663
|
</TabsContent>
|
|
@@ -675,15 +668,15 @@ export function TemplateContent() {
|
|
|
675
668
|
|
|
676
669
|
{/* Button Variants */}
|
|
677
670
|
<section>
|
|
678
|
-
<h3 className="mb-4">
|
|
671
|
+
<h3 className="mb-4">{t('templates.sections.buttons')}</h3>
|
|
679
672
|
<Card>
|
|
680
673
|
<CardHeader>
|
|
681
|
-
<CardTitle>
|
|
682
|
-
<CardDescription>
|
|
674
|
+
<CardTitle>{t('templates.buttons.title')}</CardTitle>
|
|
675
|
+
<CardDescription>{t('templates.buttons.description')}</CardDescription>
|
|
683
676
|
</CardHeader>
|
|
684
677
|
<CardContent className="space-y-6">
|
|
685
678
|
<div className="space-y-3">
|
|
686
|
-
<Label>
|
|
679
|
+
<Label>{t('templates.buttons.variants')}</Label>
|
|
687
680
|
<div className="flex flex-wrap gap-3">
|
|
688
681
|
<Button variant="default">Default</Button>
|
|
689
682
|
<Button variant="secondary">Secondary</Button>
|
|
@@ -697,12 +690,12 @@ export function TemplateContent() {
|
|
|
697
690
|
<Separator />
|
|
698
691
|
|
|
699
692
|
<div className="space-y-3">
|
|
700
|
-
<Label>
|
|
693
|
+
<Label>{t('templates.buttons.sizes')}</Label>
|
|
701
694
|
<div className="flex flex-wrap items-center gap-3">
|
|
702
695
|
<Button size="sm">Small</Button>
|
|
703
696
|
<Button size="default">Default</Button>
|
|
704
697
|
<Button size="lg">Large</Button>
|
|
705
|
-
<Button size="icon" aria-label=
|
|
698
|
+
<Button size="icon" aria-label={t('nav.settings')}>
|
|
706
699
|
<Settings className="h-4 w-4" />
|
|
707
700
|
</Button>
|
|
708
701
|
</div>
|
|
@@ -711,19 +704,19 @@ export function TemplateContent() {
|
|
|
711
704
|
<Separator />
|
|
712
705
|
|
|
713
706
|
<div className="space-y-3">
|
|
714
|
-
<Label>
|
|
707
|
+
<Label>{t('templates.buttons.withIcons')}</Label>
|
|
715
708
|
<div className="flex flex-wrap gap-3">
|
|
716
709
|
<Button>
|
|
717
710
|
<User className="mr-2 h-4 w-4" />
|
|
718
|
-
|
|
711
|
+
{t('templates.buttons.profile')}
|
|
719
712
|
</Button>
|
|
720
713
|
<Button variant="secondary">
|
|
721
714
|
<Mail className="mr-2 h-4 w-4" />
|
|
722
|
-
|
|
715
|
+
{t('templates.buttons.messages')}
|
|
723
716
|
</Button>
|
|
724
717
|
<Button variant="outline">
|
|
725
718
|
<Calendar className="mr-2 h-4 w-4" />
|
|
726
|
-
|
|
719
|
+
{t('templates.buttons.schedule')}
|
|
727
720
|
</Button>
|
|
728
721
|
</div>
|
|
729
722
|
</div>
|
|
@@ -731,11 +724,11 @@ export function TemplateContent() {
|
|
|
731
724
|
<Separator />
|
|
732
725
|
|
|
733
726
|
<div className="space-y-3">
|
|
734
|
-
<Label>
|
|
727
|
+
<Label>{t('templates.buttons.states')}</Label>
|
|
735
728
|
<div className="flex flex-wrap gap-3">
|
|
736
|
-
<Button disabled>
|
|
729
|
+
<Button disabled>{t('templates.buttons.disabled')}</Button>
|
|
737
730
|
<Button variant="outline" disabled>
|
|
738
|
-
|
|
731
|
+
{t('templates.buttons.outlineDisabled')}
|
|
739
732
|
</Button>
|
|
740
733
|
</div>
|
|
741
734
|
</div>
|
|
@@ -747,22 +740,20 @@ export function TemplateContent() {
|
|
|
747
740
|
|
|
748
741
|
{/* Badges */}
|
|
749
742
|
<section>
|
|
750
|
-
<h3 className="mb-4">
|
|
743
|
+
<h3 className="mb-4">{t('templates.sections.badges')}</h3>
|
|
751
744
|
<Card>
|
|
752
745
|
<CardHeader>
|
|
753
|
-
<CardTitle>
|
|
754
|
-
<CardDescription>
|
|
755
|
-
Estilos diferentes de badge para status e tags
|
|
756
|
-
</CardDescription>
|
|
746
|
+
<CardTitle>{t('templates.badges.title')}</CardTitle>
|
|
747
|
+
<CardDescription>{t('templates.badges.description')}</CardDescription>
|
|
757
748
|
</CardHeader>
|
|
758
749
|
<CardContent>
|
|
759
750
|
<div className="flex flex-wrap gap-3">
|
|
760
|
-
<Badge variant="default">
|
|
761
|
-
<Badge variant="secondary">
|
|
762
|
-
<Badge variant="outline">
|
|
763
|
-
<Badge variant="destructive">
|
|
764
|
-
<Badge className="bg-success text-success-foreground">
|
|
765
|
-
<Badge className="bg-warning text-warning-foreground">
|
|
751
|
+
<Badge variant="default">Default</Badge>
|
|
752
|
+
<Badge variant="secondary">Secondary</Badge>
|
|
753
|
+
<Badge variant="outline">Outline</Badge>
|
|
754
|
+
<Badge variant="destructive">Destructive</Badge>
|
|
755
|
+
<Badge className="bg-success text-success-foreground">Success</Badge>
|
|
756
|
+
<Badge className="bg-warning text-warning-foreground">Warning</Badge>
|
|
766
757
|
<Badge className="bg-info text-info-foreground">Info</Badge>
|
|
767
758
|
</div>
|
|
768
759
|
</CardContent>
|
|
@@ -773,41 +764,41 @@ export function TemplateContent() {
|
|
|
773
764
|
|
|
774
765
|
{/* Dialogs */}
|
|
775
766
|
<section>
|
|
776
|
-
<h3 className="mb-4">
|
|
767
|
+
<h3 className="mb-4">{t('templates.sections.dialogs')}</h3>
|
|
777
768
|
<div className="grid gap-4 md:grid-cols-2">
|
|
778
769
|
<Card>
|
|
779
770
|
<CardHeader>
|
|
780
|
-
<CardTitle>
|
|
781
|
-
<CardDescription>
|
|
771
|
+
<CardTitle>{t('templates.dialogs.dialogTitle')}</CardTitle>
|
|
772
|
+
<CardDescription>{t('templates.dialogs.dialogDescription')}</CardDescription>
|
|
782
773
|
</CardHeader>
|
|
783
774
|
<CardContent className="flex justify-center py-6">
|
|
784
775
|
<Dialog>
|
|
785
776
|
<DialogTrigger asChild>
|
|
786
|
-
<Button variant="outline">
|
|
777
|
+
<Button variant="outline">{t('templates.dialogs.editProfile')}</Button>
|
|
787
778
|
</DialogTrigger>
|
|
788
779
|
<DialogContent className="sm:max-w-[425px]">
|
|
789
780
|
<DialogHeader>
|
|
790
|
-
<DialogTitle>
|
|
781
|
+
<DialogTitle>{t('templates.dialogs.editProfile')}</DialogTitle>
|
|
791
782
|
<DialogDescription>
|
|
792
|
-
|
|
783
|
+
{t('templates.dialogs.editProfileDescription')}
|
|
793
784
|
</DialogDescription>
|
|
794
785
|
</DialogHeader>
|
|
795
786
|
<div className="grid gap-4 py-4">
|
|
796
787
|
<div className="grid grid-cols-4 items-center gap-4">
|
|
797
788
|
<Label htmlFor="name" className="text-right">
|
|
798
|
-
|
|
789
|
+
{t('templates.dialogs.name')}
|
|
799
790
|
</Label>
|
|
800
791
|
<Input id="name" defaultValue="John Doe" className="col-span-3" />
|
|
801
792
|
</div>
|
|
802
793
|
<div className="grid grid-cols-4 items-center gap-4">
|
|
803
794
|
<Label htmlFor="username" className="text-right">
|
|
804
|
-
|
|
795
|
+
{t('templates.dialogs.username')}
|
|
805
796
|
</Label>
|
|
806
797
|
<Input id="username" defaultValue="@johndoe" className="col-span-3" />
|
|
807
798
|
</div>
|
|
808
799
|
</div>
|
|
809
800
|
<DialogFooter>
|
|
810
|
-
<Button type="submit">
|
|
801
|
+
<Button type="submit">{t('templates.dialogs.update')}</Button>
|
|
811
802
|
</DialogFooter>
|
|
812
803
|
</DialogContent>
|
|
813
804
|
</Dialog>
|
|
@@ -816,26 +807,25 @@ export function TemplateContent() {
|
|
|
816
807
|
|
|
817
808
|
<Card>
|
|
818
809
|
<CardHeader>
|
|
819
|
-
<CardTitle>
|
|
820
|
-
<CardDescription>
|
|
810
|
+
<CardTitle>{t('templates.dialogs.alertDialogTitle')}</CardTitle>
|
|
811
|
+
<CardDescription>{t('templates.dialogs.alertDialogDescription')}</CardDescription>
|
|
821
812
|
</CardHeader>
|
|
822
813
|
<CardContent className="flex justify-center py-6">
|
|
823
814
|
<AlertDialog>
|
|
824
815
|
<AlertDialogTrigger asChild>
|
|
825
|
-
<Button variant="destructive">
|
|
816
|
+
<Button variant="destructive">{t('templates.dialogs.deleteAccount')}</Button>
|
|
826
817
|
</AlertDialogTrigger>
|
|
827
818
|
<AlertDialogContent className="sm:max-w-[425px]">
|
|
828
819
|
<AlertDialogHeader>
|
|
829
|
-
<AlertDialogTitle>
|
|
820
|
+
<AlertDialogTitle>{t('templates.dialogs.areYouSure')}</AlertDialogTitle>
|
|
830
821
|
<AlertDialogDescription>
|
|
831
|
-
|
|
832
|
-
conta e removerá seus dados de nossos servidores.
|
|
822
|
+
{t('templates.dialogs.deleteWarning')}
|
|
833
823
|
</AlertDialogDescription>
|
|
834
824
|
</AlertDialogHeader>
|
|
835
825
|
<AlertDialogFooter>
|
|
836
|
-
<AlertDialogCancel>
|
|
826
|
+
<AlertDialogCancel>{t('templates.dialogs.cancel')}</AlertDialogCancel>
|
|
837
827
|
<AlertDialogAction className="bg-destructive text-destructive-foreground hover:bg-destructive/90">
|
|
838
|
-
|
|
828
|
+
{t('templates.dialogs.continue')}
|
|
839
829
|
</AlertDialogAction>
|
|
840
830
|
</AlertDialogFooter>
|
|
841
831
|
</AlertDialogContent>
|
|
@@ -856,17 +846,15 @@ export function TemplateContent() {
|
|
|
856
846
|
|
|
857
847
|
{/* Header Variations */}
|
|
858
848
|
<section>
|
|
859
|
-
<h3 className="mb-4">
|
|
849
|
+
<h3 className="mb-4">{t('templates.headerVariations.sectionTitle')}</h3>
|
|
860
850
|
<Card>
|
|
861
851
|
<CardHeader>
|
|
862
|
-
<CardTitle>
|
|
863
|
-
<CardDescription>
|
|
864
|
-
O Header é focado em navegação (breadcrumbs) e ações contextuais rápidas.
|
|
865
|
-
</CardDescription>
|
|
852
|
+
<CardTitle>{t('templates.headerVariations.cardTitle')}</CardTitle>
|
|
853
|
+
<CardDescription>{t('templates.headerVariations.cardDescription')}</CardDescription>
|
|
866
854
|
</CardHeader>
|
|
867
855
|
<CardContent className="space-y-6">
|
|
868
856
|
<div className="p-4 border rounded-[var(--radius-lg)] bg-muted/30">
|
|
869
|
-
<h4 className="text-sm font-semibold mb-4">
|
|
857
|
+
<h4 className="text-sm font-semibold mb-4">{t('templates.headerVariations.visibleElements')}</h4>
|
|
870
858
|
<div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-6">
|
|
871
859
|
<div className="flex items-center space-x-2">
|
|
872
860
|
<Switch
|
|
@@ -875,7 +863,7 @@ export function TemplateContent() {
|
|
|
875
863
|
onCheckedChange={setShowHeaderActions}
|
|
876
864
|
/>
|
|
877
865
|
<Label htmlFor="header-actions" className="cursor-pointer">
|
|
878
|
-
|
|
866
|
+
{t('templates.headerVariations.actionButtons')}
|
|
879
867
|
</Label>
|
|
880
868
|
</div>
|
|
881
869
|
<div className="flex items-center space-x-2">
|
|
@@ -885,7 +873,7 @@ export function TemplateContent() {
|
|
|
885
873
|
onCheckedChange={setShowHeaderBreadcrumbs}
|
|
886
874
|
/>
|
|
887
875
|
<Label htmlFor="header-bread" className="cursor-pointer">
|
|
888
|
-
|
|
876
|
+
{t('templates.headerVariations.breadcrumbsLabel')}
|
|
889
877
|
</Label>
|
|
890
878
|
</div>
|
|
891
879
|
</div>
|
|
@@ -893,20 +881,20 @@ export function TemplateContent() {
|
|
|
893
881
|
|
|
894
882
|
<div className="relative border rounded-[var(--radius-lg)] bg-muted/10 overflow-hidden shadow-inner">
|
|
895
883
|
<div className="p-4 bg-background/50 border-b text-xs font-mono text-muted-foreground">
|
|
896
|
-
|
|
884
|
+
{t('templates.headerVariations.preview')}
|
|
897
885
|
</div>
|
|
898
886
|
<Header
|
|
899
|
-
title={!showHeaderBreadcrumbs ? '
|
|
887
|
+
title={!showHeaderBreadcrumbs ? t('templates.headerVariations.currentPage') : undefined}
|
|
900
888
|
breadcrumbs={
|
|
901
889
|
showHeaderBreadcrumbs
|
|
902
890
|
? [
|
|
903
891
|
{
|
|
904
|
-
label: '
|
|
892
|
+
label: t('templates.headerVariations.breadcrumbBrand'),
|
|
905
893
|
href: '#',
|
|
906
894
|
icon: <Home className="w-4 h-4" />,
|
|
907
895
|
},
|
|
908
|
-
{ label: '
|
|
909
|
-
{ label: '
|
|
896
|
+
{ label: t('templates.headerVariations.breadcrumbSettings'), href: '#' },
|
|
897
|
+
{ label: t('templates.headerVariations.breadcrumbProfile') },
|
|
910
898
|
]
|
|
911
899
|
: undefined
|
|
912
900
|
}
|
|
@@ -916,20 +904,20 @@ export function TemplateContent() {
|
|
|
916
904
|
{
|
|
917
905
|
id: 'notify',
|
|
918
906
|
icon: <Bell className="w-5 h-5" />,
|
|
919
|
-
onClick: () => toast('
|
|
907
|
+
onClick: () => toast(t('templates.headerVariations.notificationsOpenedToast')),
|
|
920
908
|
},
|
|
921
909
|
{
|
|
922
910
|
id: 'mail',
|
|
923
|
-
label: '
|
|
911
|
+
label: t('templates.headerVariations.messagesLabel'),
|
|
924
912
|
icon: <Mail className="w-5 h-5" />,
|
|
925
|
-
onClick: () => toast('
|
|
913
|
+
onClick: () => toast(t('templates.headerVariations.messagesOpenedToast')),
|
|
926
914
|
},
|
|
927
915
|
]
|
|
928
916
|
: undefined
|
|
929
917
|
}
|
|
930
918
|
/>
|
|
931
919
|
<div className="h-32 flex items-center justify-center text-muted-foreground text-sm italic">
|
|
932
|
-
|
|
920
|
+
{t('templates.headerVariations.contentArea')}
|
|
933
921
|
</div>
|
|
934
922
|
</div>
|
|
935
923
|
</CardContent>
|
|
@@ -940,23 +928,21 @@ export function TemplateContent() {
|
|
|
940
928
|
|
|
941
929
|
{/* Sidebar Variations */}
|
|
942
930
|
<section>
|
|
943
|
-
<h3 className="mb-4">
|
|
931
|
+
<h3 className="mb-4">{t('templates.sections.sidebarVariations')}</h3>
|
|
944
932
|
<Card>
|
|
945
933
|
<CardHeader>
|
|
946
|
-
<CardTitle>
|
|
947
|
-
<CardDescription>
|
|
948
|
-
A Sidebar suporta flexibilidade através da propriedade variant.
|
|
949
|
-
</CardDescription>
|
|
934
|
+
<CardTitle>{t('templates.sidebar.title')}</CardTitle>
|
|
935
|
+
<CardDescription>{t('templates.sidebar.description')}</CardDescription>
|
|
950
936
|
</CardHeader>
|
|
951
937
|
<CardContent>
|
|
952
938
|
<Tabs defaultValue="assistant" className="w-full">
|
|
953
939
|
<TabsList className="mb-4">
|
|
954
|
-
<TabsTrigger value="assistant">
|
|
955
|
-
<TabsTrigger value="default">
|
|
940
|
+
<TabsTrigger value="assistant">{t('templates.sidebar.assistantMode')}</TabsTrigger>
|
|
941
|
+
<TabsTrigger value="default">{t('templates.sidebar.defaultMode')}</TabsTrigger>
|
|
956
942
|
</TabsList>
|
|
957
943
|
|
|
958
944
|
<div className="mb-6 p-4 border rounded-[var(--radius-lg)] bg-muted/30">
|
|
959
|
-
<h4 className="text-sm font-semibold mb-4">
|
|
945
|
+
<h4 className="text-sm font-semibold mb-4">{t('templates.sidebarControls.footerSettings')}</h4>
|
|
960
946
|
<div className="flex flex-wrap gap-6 mt-2">
|
|
961
947
|
<div className="flex items-center space-x-2">
|
|
962
948
|
<Switch
|
|
@@ -965,7 +951,7 @@ export function TemplateContent() {
|
|
|
965
951
|
onCheckedChange={setShowSidebarUser}
|
|
966
952
|
/>
|
|
967
953
|
<Label htmlFor="show-user" className="cursor-pointer">
|
|
968
|
-
|
|
954
|
+
{t('templates.sidebarControls.userProfile')}
|
|
969
955
|
</Label>
|
|
970
956
|
</div>
|
|
971
957
|
<div className="flex items-center space-x-2">
|
|
@@ -975,7 +961,7 @@ export function TemplateContent() {
|
|
|
975
961
|
onCheckedChange={setShowSidebarSettings}
|
|
976
962
|
/>
|
|
977
963
|
<Label htmlFor="show-settings" className="cursor-pointer">
|
|
978
|
-
|
|
964
|
+
{t('templates.sidebarControls.settings')}
|
|
979
965
|
</Label>
|
|
980
966
|
</div>
|
|
981
967
|
<div className="flex items-center space-x-2">
|
|
@@ -985,14 +971,14 @@ export function TemplateContent() {
|
|
|
985
971
|
onCheckedChange={setShowSidebarLogout}
|
|
986
972
|
/>
|
|
987
973
|
<Label htmlFor="show-logout" className="cursor-pointer">
|
|
988
|
-
|
|
974
|
+
{t('templates.sidebarControls.logoutButton')}
|
|
989
975
|
</Label>
|
|
990
976
|
</div>
|
|
991
977
|
</div>
|
|
992
978
|
|
|
993
979
|
<div className="mt-6 pt-6 border-t">
|
|
994
980
|
<div className="flex items-center justify-between mb-4">
|
|
995
|
-
<h4 className="text-sm font-semibold">
|
|
981
|
+
<h4 className="text-sm font-semibold">{t('templates.sidebarControls.sidebarWidthDesktop')}</h4>
|
|
996
982
|
<span className="text-xs font-mono bg-muted px-2 py-1 rounded">
|
|
997
983
|
{sidebarWidth}px
|
|
998
984
|
</span>
|
|
@@ -1008,7 +994,7 @@ export function TemplateContent() {
|
|
|
1008
994
|
max={450}
|
|
1009
995
|
step={10}
|
|
1010
996
|
className="flex-1"
|
|
1011
|
-
aria-label=
|
|
997
|
+
aria-label={t('templates.sidebarControls.sidebarWidthAriaLabel')}
|
|
1012
998
|
/>
|
|
1013
999
|
<span className="text-xs text-muted-foreground w-12">450px</span>
|
|
1014
1000
|
</div>
|
|
@@ -1025,35 +1011,35 @@ export function TemplateContent() {
|
|
|
1025
1011
|
width={sidebarWidth}
|
|
1026
1012
|
onToggle={() => {}}
|
|
1027
1013
|
user={{ email: 'admin@xertica.com' }}
|
|
1028
|
-
onLogout={() => toast('
|
|
1014
|
+
onLogout={() => toast(t('templates.sidebar.logoutToast'))}
|
|
1029
1015
|
location={{ pathname: '/assistant/current' }}
|
|
1030
1016
|
navigate={() => {}}
|
|
1031
1017
|
variant="assistant"
|
|
1032
1018
|
search={{
|
|
1033
1019
|
show: true,
|
|
1034
|
-
placeholder: '
|
|
1020
|
+
placeholder: t('templates.sidebar.searchTopicsPlaceholder'),
|
|
1035
1021
|
filter: {
|
|
1036
1022
|
show: true,
|
|
1037
1023
|
content: (
|
|
1038
1024
|
<div className="p-2 space-y-2">
|
|
1039
1025
|
<div className="text-xs font-semibold uppercase text-muted-foreground px-2">
|
|
1040
|
-
|
|
1026
|
+
{t('templates.sidebarControls.filterByStatus')}
|
|
1041
1027
|
</div>
|
|
1042
1028
|
<div className="flex flex-wrap gap-2 p-1">
|
|
1043
1029
|
<Badge className="bg-sidebar-foreground/20 text-sidebar-foreground border-none cursor-pointer hover:bg-sidebar-foreground/30">
|
|
1044
|
-
|
|
1030
|
+
{t('templates.sidebarControls.filterActive')}
|
|
1045
1031
|
</Badge>
|
|
1046
1032
|
<Badge
|
|
1047
1033
|
variant="outline"
|
|
1048
1034
|
className="text-sidebar-foreground/70 border-sidebar-foreground/20 cursor-pointer hover:bg-sidebar-foreground/10"
|
|
1049
1035
|
>
|
|
1050
|
-
|
|
1036
|
+
{t('templates.sidebarControls.filterArchived')}
|
|
1051
1037
|
</Badge>
|
|
1052
1038
|
<Badge
|
|
1053
1039
|
variant="outline"
|
|
1054
1040
|
className="text-sidebar-foreground/70 border-sidebar-foreground/20 cursor-pointer hover:bg-sidebar-foreground/10"
|
|
1055
1041
|
>
|
|
1056
|
-
|
|
1042
|
+
{t('templates.sidebarControls.filterPending')}
|
|
1057
1043
|
</Badge>
|
|
1058
1044
|
</div>
|
|
1059
1045
|
</div>
|
|
@@ -1065,48 +1051,48 @@ export function TemplateContent() {
|
|
|
1065
1051
|
content: (
|
|
1066
1052
|
<Button className="w-full bg-sidebar-primary hover:bg-sidebar-primary/90 text-sidebar-primary-foreground shadow-lg font-bold border-none transition-all duration-300 transform hover:scale-[1.02] active:scale-[0.98]">
|
|
1067
1053
|
<Plus className="w-4 h-4 mr-2" />
|
|
1068
|
-
|
|
1054
|
+
{t('templates.sidebar.newConversation')}
|
|
1069
1055
|
</Button>
|
|
1070
1056
|
),
|
|
1071
1057
|
}}
|
|
1072
1058
|
navigationGroups={[
|
|
1073
1059
|
{
|
|
1074
1060
|
id: 'recent',
|
|
1075
|
-
label: '
|
|
1061
|
+
label: t('templates.sidebar.recent'),
|
|
1076
1062
|
icon: Clock,
|
|
1077
1063
|
items: [
|
|
1078
1064
|
{
|
|
1079
1065
|
path: '/assistant/refatoracao',
|
|
1080
|
-
label: '
|
|
1081
|
-
description: '
|
|
1066
|
+
label: t('templates.sidebar.items.sidebarRefactor'),
|
|
1067
|
+
description: t('templates.sidebar.items.sidebarRefactorDescription'),
|
|
1082
1068
|
actions: [
|
|
1083
1069
|
{
|
|
1084
|
-
label: '
|
|
1070
|
+
label: t('templates.sidebar.actions.rename'),
|
|
1085
1071
|
icon: FileEdit,
|
|
1086
|
-
onClick: () => toast('
|
|
1072
|
+
onClick: () => toast(t('templates.sidebar.actions.renameToast')),
|
|
1087
1073
|
},
|
|
1088
1074
|
{
|
|
1089
|
-
label: '
|
|
1075
|
+
label: t('templates.sidebar.actions.move'),
|
|
1090
1076
|
icon: ArrowRightLeft,
|
|
1091
1077
|
children: [
|
|
1092
1078
|
{
|
|
1093
|
-
label: '
|
|
1094
|
-
onClick: () => toast('
|
|
1079
|
+
label: t('templates.sidebar.actions.moveActive'),
|
|
1080
|
+
onClick: () => toast(t('templates.sidebar.actions.moveActiveToast')),
|
|
1095
1081
|
},
|
|
1096
1082
|
{
|
|
1097
|
-
label: '
|
|
1098
|
-
onClick: () => toast('
|
|
1083
|
+
label: t('templates.sidebar.actions.moveMonitoring'),
|
|
1084
|
+
onClick: () => toast(t('templates.sidebar.actions.moveMonitoringToast')),
|
|
1099
1085
|
},
|
|
1100
1086
|
{
|
|
1101
|
-
label: '
|
|
1102
|
-
onClick: () => toast('
|
|
1087
|
+
label: t('templates.sidebar.actions.moveArchive'),
|
|
1088
|
+
onClick: () => toast(t('templates.sidebar.actions.moveArchiveToast')),
|
|
1103
1089
|
},
|
|
1104
1090
|
],
|
|
1105
1091
|
},
|
|
1106
1092
|
{
|
|
1107
|
-
label: '
|
|
1093
|
+
label: t('templates.sidebar.actions.clear'),
|
|
1108
1094
|
icon: Trash2,
|
|
1109
|
-
onClick: () => toast('
|
|
1095
|
+
onClick: () => toast(t('templates.sidebar.actions.clearToast')),
|
|
1110
1096
|
variant: 'destructive',
|
|
1111
1097
|
},
|
|
1112
1098
|
],
|
|
@@ -1115,24 +1101,24 @@ export function TemplateContent() {
|
|
|
1115
1101
|
},
|
|
1116
1102
|
{
|
|
1117
1103
|
id: 'projects',
|
|
1118
|
-
label: '
|
|
1104
|
+
label: t('templates.sidebar.constructionMonitoring'),
|
|
1119
1105
|
icon: Map,
|
|
1120
1106
|
actions: [
|
|
1121
1107
|
{
|
|
1122
|
-
label: '
|
|
1108
|
+
label: t('templates.sidebar.actions.newCategory'),
|
|
1123
1109
|
icon: Plus,
|
|
1124
|
-
onClick: () => toast('
|
|
1110
|
+
onClick: () => toast(t('templates.sidebar.actions.newCategoryToast')),
|
|
1125
1111
|
},
|
|
1126
1112
|
{
|
|
1127
|
-
label: '
|
|
1113
|
+
label: t('templates.sidebar.actions.archiveGroup'),
|
|
1128
1114
|
icon: Archive,
|
|
1129
|
-
onClick: () => toast('
|
|
1115
|
+
onClick: () => toast(t('templates.sidebar.actions.archiveGroupToast')),
|
|
1130
1116
|
},
|
|
1131
1117
|
],
|
|
1132
1118
|
items: [
|
|
1133
1119
|
{
|
|
1134
1120
|
path: '/assistant/br163',
|
|
1135
|
-
label: '
|
|
1121
|
+
label: t('templates.sidebar.items.br163Restoration'),
|
|
1136
1122
|
icon: () => (
|
|
1137
1123
|
<div className="w-2 h-2 rounded-full bg-yellow-500" />
|
|
1138
1124
|
),
|
|
@@ -1143,7 +1129,7 @@ export function TemplateContent() {
|
|
|
1143
1129
|
className="h-1.5 bg-sidebar-foreground/10"
|
|
1144
1130
|
/>
|
|
1145
1131
|
<div className="flex justify-between items-center text-[10px] text-sidebar-foreground/60">
|
|
1146
|
-
<span>
|
|
1132
|
+
<span>{t('templates.sidebar.items.br163Location')}</span>
|
|
1147
1133
|
<span>67%</span>
|
|
1148
1134
|
</div>
|
|
1149
1135
|
</div>
|
|
@@ -1163,7 +1149,7 @@ export function TemplateContent() {
|
|
|
1163
1149
|
style={{ left: `${sidebarWidth}px` }}
|
|
1164
1150
|
>
|
|
1165
1151
|
<p className="text-muted-foreground text-center">
|
|
1166
|
-
|
|
1152
|
+
{t('templates.sidebar.assistantContent')}
|
|
1167
1153
|
</p>
|
|
1168
1154
|
</div>
|
|
1169
1155
|
</div>
|
|
@@ -1183,15 +1169,15 @@ export function TemplateContent() {
|
|
|
1183
1169
|
email: 'admin@xertica.com',
|
|
1184
1170
|
avatar: 'https://github.com/shadcn.png',
|
|
1185
1171
|
}}
|
|
1186
|
-
onLogout={() => toast('
|
|
1187
|
-
onSettingsClick={() => toast('
|
|
1172
|
+
onLogout={() => toast(t('templates.sidebar.logoutToast'))}
|
|
1173
|
+
onSettingsClick={() => toast(t('templates.sidebar.settingsClickedToast'))}
|
|
1188
1174
|
location={{ pathname: '/home' }}
|
|
1189
1175
|
navigate={() => {}}
|
|
1190
1176
|
variant="default"
|
|
1191
1177
|
routes={[
|
|
1192
|
-
{ path: '/home', label: '
|
|
1193
|
-
{ path: '/dashboard', label: '
|
|
1194
|
-
{ path: '/settings', label: '
|
|
1178
|
+
{ path: '/home', label: t('templates.sidebar.routes.home'), icon: Home },
|
|
1179
|
+
{ path: '/dashboard', label: t('templates.sidebar.routes.dashboard'), icon: Users },
|
|
1180
|
+
{ path: '/settings', label: t('templates.sidebar.routes.settings'), icon: Settings },
|
|
1195
1181
|
]}
|
|
1196
1182
|
footer={{
|
|
1197
1183
|
showUser: showSidebarUser,
|
|
@@ -1204,7 +1190,7 @@ export function TemplateContent() {
|
|
|
1204
1190
|
style={{ left: `${sidebarWidth}px` }}
|
|
1205
1191
|
>
|
|
1206
1192
|
<p className="text-muted-foreground text-center">
|
|
1207
|
-
|
|
1193
|
+
{t('templates.sidebar.defaultContent')}
|
|
1208
1194
|
</p>
|
|
1209
1195
|
</div>
|
|
1210
1196
|
</div>
|
|
@@ -1219,23 +1205,23 @@ export function TemplateContent() {
|
|
|
1219
1205
|
{/* Footer Note */}
|
|
1220
1206
|
<Card className="mt-8">
|
|
1221
1207
|
<CardHeader>
|
|
1222
|
-
<CardTitle>
|
|
1223
|
-
<CardDescription>
|
|
1208
|
+
<CardTitle>{t('templates.footer.title')}</CardTitle>
|
|
1209
|
+
<CardDescription>{t('templates.footer.subtitle')}</CardDescription>
|
|
1224
1210
|
</CardHeader>
|
|
1225
1211
|
<CardContent className="space-y-4">
|
|
1226
1212
|
<p className="text-muted-foreground">
|
|
1227
|
-
|
|
1228
|
-
componentes usam as variáveis CSS definidas em{' '}
|
|
1213
|
+
{t('templates.footer.descriptionPart1')}
|
|
1229
1214
|
<code className="bg-muted px-2 py-1 rounded-[var(--radius-sm)] [font-size:var(--text-small)]">
|
|
1230
|
-
|
|
1215
|
+
xertica-ui
|
|
1231
1216
|
</code>
|
|
1232
|
-
|
|
1217
|
+
{t('templates.footer.descriptionPart2')}
|
|
1233
1218
|
</p>
|
|
1234
1219
|
<Alert variant="info">
|
|
1235
|
-
<AlertTitle>
|
|
1220
|
+
<AlertTitle>{t('templates.footer.tipTitle')}</AlertTitle>
|
|
1236
1221
|
<AlertDescription>
|
|
1237
|
-
|
|
1238
|
-
|
|
1222
|
+
{t('templates.footer.tipDescriptionPart1')}
|
|
1223
|
+
<code className="bg-muted px-1 rounded">styles/xertica/tokens.css</code>
|
|
1224
|
+
{t('templates.footer.tipDescriptionPart2')}
|
|
1239
1225
|
</AlertDescription>
|
|
1240
1226
|
</Alert>
|
|
1241
1227
|
</CardContent>
|