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.
Files changed (100) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +1 -1
  3. package/components/assistant/xertica-assistant/use-assistant.ts +5 -6
  4. package/{templates/src/features/auth/ui → components/blocks/auth}/AuthPageShell.tsx +8 -3
  5. package/components/blocks/auth/PasswordStrengthMeter.tsx +41 -0
  6. package/components/blocks/auth/SocialLoginButtons.tsx +95 -0
  7. package/components/blocks/auth/index.ts +11 -0
  8. package/components/blocks/auth/usePasswordStrength.ts +13 -0
  9. package/components/blocks/index.ts +1 -0
  10. package/components/pages/forgot-password-page/ForgotPasswordPage.tsx +45 -139
  11. package/components/pages/login-page/LoginPage.tsx +52 -145
  12. package/components/pages/reset-password-page/ResetPasswordPage.tsx +79 -169
  13. package/components/pages/verify-email-page/VerifyEmailPage.tsx +48 -150
  14. package/dist/AssistantChart-CImCNLfD.cjs +3551 -0
  15. package/dist/AssistantChart-DfdIfmQr.js +3383 -0
  16. package/dist/FeatureCard-BhpfmPPx.js +485 -0
  17. package/dist/FeatureCard-D-5yS_OD.cjs +497 -0
  18. package/dist/ImageWithFallback-CfkAkctC.cjs +122 -0
  19. package/dist/ImageWithFallback-bw-CxxDc.js +98 -0
  20. package/dist/LanguageContext-CX_zdxre.js +1912 -0
  21. package/dist/LanguageContext-CjhSSqJT.cjs +1917 -0
  22. package/dist/LanguageSelector-BR3Ss0k_.js +46 -0
  23. package/dist/LanguageSelector-CHOLPmHr.cjs +48 -0
  24. package/dist/PasswordStrengthMeter-C8irs0G1.js +173 -0
  25. package/dist/PasswordStrengthMeter-MLzhax-d.cjs +179 -0
  26. package/dist/ThemeContext-CEY9pCn-.cjs +86 -0
  27. package/dist/ThemeContext-Dk3tH7Ym.js +83 -0
  28. package/dist/ThemeToggle-BpM_iHh8.js +215 -0
  29. package/dist/ThemeToggle-CZRlv0d4.cjs +219 -0
  30. package/dist/VerifyEmailPage-BKiaw2YK.js +2954 -0
  31. package/dist/VerifyEmailPage-Beaicc6V.cjs +2963 -0
  32. package/dist/VerifyEmailPage-BehPBp0F.cjs +2963 -0
  33. package/dist/VerifyEmailPage-Djb6hthM.js +2954 -0
  34. package/dist/XerticaProvider-BijpC_py.cjs +46 -0
  35. package/dist/XerticaProvider-C2wDRQhT.js +44 -0
  36. package/dist/alert-dialog-BzIcTKn_.cjs +872 -0
  37. package/dist/alert-dialog-kty5pxQp.js +819 -0
  38. package/dist/assistant.cjs.js +1 -1
  39. package/dist/assistant.es.js +1 -1
  40. package/dist/blocks.cjs.js +7 -3
  41. package/dist/blocks.es.js +2 -2
  42. package/dist/brand.cjs.js +7 -6
  43. package/dist/brand.es.js +3 -2
  44. package/dist/components/blocks/auth/AuthPageShell.d.ts +12 -0
  45. package/dist/components/blocks/auth/PasswordStrengthMeter.d.ts +7 -0
  46. package/dist/components/blocks/auth/SocialLoginButtons.d.ts +8 -0
  47. package/dist/components/blocks/auth/index.d.ts +8 -0
  48. package/dist/components/blocks/auth/usePasswordStrength.d.ts +3 -0
  49. package/dist/components/blocks/index.d.ts +1 -0
  50. package/dist/components/pages/reset-password-page/ResetPasswordPage.d.ts +1 -1
  51. package/dist/hooks.cjs.js +5 -4
  52. package/dist/hooks.es.js +2 -1
  53. package/dist/index.cjs.js +29 -24
  54. package/dist/index.es.js +12 -11
  55. package/dist/layout.cjs.js +1 -1
  56. package/dist/layout.es.js +1 -1
  57. package/dist/pages.cjs.js +1 -1
  58. package/dist/pages.es.js +1 -1
  59. package/dist/sidebar-B7YzwAp3.js +1151 -0
  60. package/dist/sidebar-Cb0U7NsV.cjs +1154 -0
  61. package/dist/ui.cjs.js +7 -7
  62. package/dist/ui.es.js +3 -3
  63. package/dist/xertica-assistant-8fh8KA2K.js +2173 -0
  64. package/dist/xertica-assistant-BjfG3zyL.cjs +2180 -0
  65. package/docs/i18n.md +2 -0
  66. package/package.json +1 -1
  67. package/templates/package.json +2 -2
  68. package/templates/src/features/auth/ui/ForgotPasswordContent.tsx +1 -2
  69. package/templates/src/features/auth/ui/LoginContent.tsx +1 -2
  70. package/templates/src/features/auth/ui/ResetPasswordContent.tsx +3 -57
  71. package/templates/src/features/auth/ui/VerifyEmailContent.tsx +1 -2
  72. package/templates/src/features/home/index.ts +0 -10
  73. package/templates/src/features/home/ui/HomeContent.tsx +21 -75
  74. package/templates/src/features/template/index.ts +0 -4
  75. package/templates/src/features/template/ui/TemplateContent.tsx +26 -1279
  76. package/templates/src/locales/en/pages/templates.json +5 -313
  77. package/templates/src/locales/es/pages/templates.json +5 -313
  78. package/templates/src/locales/pt-BR/pages/templates.json +5 -313
  79. package/templates/src/features/auth/ui/SocialLoginButtons.tsx +0 -78
  80. package/templates/src/features/home/data/mock.ts +0 -41
  81. package/templates/src/features/home/hooks/useFeatureCards.ts +0 -20
  82. package/templates/src/features/home/store/dashboardStore.ts +0 -25
  83. package/templates/src/features/template/ui/CrudTemplate.tsx +0 -112
  84. package/templates/src/features/template/ui/DashboardTemplate.tsx +0 -110
  85. package/templates/src/features/template/ui/FormTemplate.tsx +0 -117
  86. package/templates/src/features/template/ui/LoginTemplate.tsx +0 -59
  87. package/templates/src/locales/en/pages/crudTemplate.json +0 -25
  88. package/templates/src/locales/en/pages/dashboardTemplate.json +0 -20
  89. package/templates/src/locales/en/pages/formTemplate.json +0 -16
  90. package/templates/src/locales/en/pages/loginTemplate.json +0 -9
  91. package/templates/src/locales/es/pages/crudTemplate.json +0 -25
  92. package/templates/src/locales/es/pages/dashboardTemplate.json +0 -20
  93. package/templates/src/locales/es/pages/formTemplate.json +0 -16
  94. package/templates/src/locales/es/pages/loginTemplate.json +0 -9
  95. package/templates/src/locales/pt-BR/pages/crudTemplate.json +0 -25
  96. package/templates/src/locales/pt-BR/pages/dashboardTemplate.json +0 -20
  97. package/templates/src/locales/pt-BR/pages/formTemplate.json +0 -16
  98. package/templates/src/locales/pt-BR/pages/loginTemplate.json +0 -9
  99. package/templates/vite.config.d.ts +0 -2
  100. package/templates/vite.config.js +0 -20
@@ -1,110 +0,0 @@
1
- import React from 'react';
2
- import { Card, CardContent, CardHeader, CardTitle, Badge, Button } from 'xertica-ui/ui';
3
- import { Users, DollarSign, Activity, TrendingUp } from 'lucide-react';
4
- import { useTranslation } from 'react-i18next';
5
-
6
- export function DashboardTemplate() {
7
- const { t } = useTranslation();
8
- const trendSuffix = t('dashboardTemplate.lastMonth');
9
- return (
10
- <div className="flex flex-col gap-6 p-6 w-full max-w-[1400px] mx-auto">
11
- <div className="flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
12
- <div>
13
- <h2 className="text-3xl font-bold tracking-tight">{t('dashboardTemplate.title')}</h2>
14
- <p className="text-muted-foreground">{t('dashboardTemplate.subtitle')}</p>
15
- </div>
16
- <Button>{t('dashboardTemplate.downloadReport')}</Button>
17
- </div>
18
-
19
- <div className="grid gap-4 md:grid-cols-2 lg:grid-cols-4">
20
- <StatsCard
21
- title={t('dashboardTemplate.stats.totalRevenue')}
22
- value={t('dashboardTemplate.stats.totalRevenueValue')}
23
- trend="+20.1%"
24
- trendSuffix={trendSuffix}
25
- icon={<DollarSign className="size-4 text-muted-foreground" />}
26
- />
27
- <StatsCard
28
- title={t('dashboardTemplate.stats.activeUsers')}
29
- value="+2350"
30
- trend="+180"
31
- trendSuffix={trendSuffix}
32
- icon={<Users className="size-4 text-muted-foreground" />}
33
- />
34
- <StatsCard
35
- title={t('dashboardTemplate.stats.sales')}
36
- value="+12,234"
37
- trend="+19%"
38
- trendSuffix={trendSuffix}
39
- icon={<Activity className="size-4 text-muted-foreground" />}
40
- />
41
- <StatsCard
42
- title={t('dashboardTemplate.stats.retentionRate')}
43
- value="89.3%"
44
- trend="+1.2%"
45
- trendSuffix={trendSuffix}
46
- icon={<TrendingUp className="size-4 text-muted-foreground" />}
47
- />
48
- </div>
49
-
50
- <div className="grid gap-4 md:grid-cols-2 lg:grid-cols-7">
51
- <Card className="col-span-4 lg:col-span-4">
52
- <CardHeader>
53
- <CardTitle>{t('dashboardTemplate.overview')}</CardTitle>
54
- </CardHeader>
55
- <CardContent className="h-[350px]">
56
- <div className="flex h-full w-full items-center justify-center rounded-md border border-dashed bg-muted/20 text-muted-foreground">
57
- {t('dashboardTemplate.chartArea')}
58
- </div>
59
- </CardContent>
60
- </Card>
61
-
62
- <Card className="col-span-3 lg:col-span-3">
63
- <CardHeader>
64
- <CardTitle>{t('dashboardTemplate.recentEvents')}</CardTitle>
65
- </CardHeader>
66
- <CardContent>
67
- <div className="space-y-4">
68
- <div className="flex items-center gap-4 text-sm">
69
- <Badge variant="outline">09:00</Badge>
70
- <span>{t('dashboardTemplate.events.userLogin')}</span>
71
- </div>
72
- <div className="flex items-center gap-4 text-sm">
73
- <Badge variant="outline">10:45</Badge>
74
- <span>{t('dashboardTemplate.events.invoicePaid')}</span>
75
- </div>
76
- </div>
77
- </CardContent>
78
- </Card>
79
- </div>
80
- </div>
81
- );
82
- }
83
-
84
- interface StatsCardProps {
85
- title: string;
86
- value: string;
87
- icon: React.ReactNode;
88
- trend?: string;
89
- /** Pre-translated suffix shown after the trend (e.g. "no último mês"). */
90
- trendSuffix?: string;
91
- }
92
-
93
- function StatsCard({ title, value, icon, trend, trendSuffix }: StatsCardProps) {
94
- return (
95
- <Card>
96
- <CardHeader className="flex flex-row items-center justify-between pb-2">
97
- <CardTitle className="text-sm font-medium text-muted-foreground">{title}</CardTitle>
98
- {icon}
99
- </CardHeader>
100
- <CardContent>
101
- <div className="text-2xl font-bold">{value}</div>
102
- {trend && (
103
- <p className="mt-1 text-xs text-muted-foreground">
104
- <span className="text-primary font-medium">{trend}</span> {trendSuffix}
105
- </p>
106
- )}
107
- </CardContent>
108
- </Card>
109
- );
110
- }
@@ -1,117 +0,0 @@
1
- import React, { useState } from 'react';
2
- import {
3
- Button,
4
- Input,
5
- Label,
6
- Card,
7
- CardHeader,
8
- CardTitle,
9
- CardContent,
10
- CardFooter,
11
- Checkbox,
12
- } from 'xertica-ui/ui';
13
- import { useTranslation } from 'react-i18next';
14
-
15
- interface FormValues {
16
- fullName: string;
17
- email: string;
18
- notify: boolean;
19
- }
20
-
21
- interface FormErrors {
22
- fullName?: string;
23
- email?: string;
24
- }
25
-
26
- export function FormTemplate() {
27
- const { t } = useTranslation();
28
- const [values, setValues] = useState<FormValues>({ fullName: '', email: '', notify: false });
29
- const [errors, setErrors] = useState<FormErrors>({});
30
- const [submitted, setSubmitted] = useState(false);
31
-
32
- const validate = (v: FormValues): FormErrors => {
33
- const errs: FormErrors = {};
34
- if (v.fullName.trim().length < 3) errs.fullName = t('formTemplate.errors.fullNameRequired');
35
- if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v.email))
36
- errs.email = t('formTemplate.errors.emailInvalid');
37
- return errs;
38
- };
39
-
40
- const handleSubmit = (e: React.FormEvent) => {
41
- e.preventDefault();
42
- const errs = validate(values);
43
- setErrors(errs);
44
- if (Object.keys(errs).length === 0) {
45
- setSubmitted(true);
46
- console.log('Form submitted:', values);
47
- }
48
- };
49
-
50
- const handleReset = () => {
51
- setValues({ fullName: '', email: '', notify: false });
52
- setErrors({});
53
- setSubmitted(false);
54
- };
55
-
56
- return (
57
- <div className="p-6">
58
- <Card className="mx-auto w-full max-w-2xl">
59
- <CardHeader>
60
- <CardTitle>{t('formTemplate.title')}</CardTitle>
61
- <p className="text-sm text-muted-foreground">{t('formTemplate.description')}</p>
62
- </CardHeader>
63
-
64
- <form onSubmit={handleSubmit}>
65
- <CardContent className="grid gap-6 md:grid-cols-2">
66
- <div className="col-span-full space-y-2">
67
- <Label htmlFor="fullName">{t('formTemplate.fullNameLabel')}</Label>
68
- <Input
69
- id="fullName"
70
- placeholder={t('formTemplate.fullNamePlaceholder')}
71
- value={values.fullName}
72
- onChange={e => setValues(v => ({ ...v, fullName: e.target.value }))}
73
- />
74
- {errors.fullName && <p className="text-sm text-destructive">{errors.fullName}</p>}
75
- </div>
76
-
77
- <div className="col-span-full space-y-2">
78
- <Label htmlFor="email">{t('formTemplate.emailLabel')}</Label>
79
- <Input
80
- id="email"
81
- type="email"
82
- placeholder={t('formTemplate.emailPlaceholder')}
83
- value={values.email}
84
- onChange={e => setValues(v => ({ ...v, email: e.target.value }))}
85
- />
86
- {errors.email && <p className="text-sm text-destructive">{errors.email}</p>}
87
- </div>
88
-
89
- <div className="col-span-full flex items-center space-x-2">
90
- <Checkbox
91
- id="notify"
92
- checked={values.notify}
93
- onCheckedChange={checked => setValues(v => ({ ...v, notify: checked === true }))}
94
- />
95
- <Label htmlFor="notify" className="font-normal cursor-pointer text-sm">
96
- {t('formTemplate.notifyLabel')}
97
- </Label>
98
- </div>
99
-
100
- {submitted && (
101
- <div className="col-span-full rounded-[var(--radius)] bg-[var(--chart-2)]/10 border border-[var(--chart-2)]/20 p-3">
102
- <p className="text-sm text-[var(--chart-2)]">{t('formTemplate.successMessage')}</p>
103
- </div>
104
- )}
105
- </CardContent>
106
-
107
- <CardFooter className="flex justify-end gap-2 border-t pt-6 bg-muted/20">
108
- <Button type="button" variant="ghost" onClick={handleReset}>
109
- {t('formTemplate.cancel')}
110
- </Button>
111
- <Button type="submit">{t('formTemplate.save')}</Button>
112
- </CardFooter>
113
- </form>
114
- </Card>
115
- </div>
116
- );
117
- }
@@ -1,59 +0,0 @@
1
- import React from 'react';
2
- import {
3
- Card,
4
- CardContent,
5
- CardDescription,
6
- CardFooter,
7
- CardHeader,
8
- CardTitle,
9
- Input,
10
- Button,
11
- Label,
12
- } from 'xertica-ui/ui';
13
- import { LockIcon } from 'lucide-react';
14
- import { useTranslation } from 'react-i18next';
15
-
16
- export function LoginTemplate() {
17
- const { t } = useTranslation();
18
- return (
19
- <div className="flex h-full min-h-0 w-full items-center justify-center bg-muted/30 p-4 overflow-y-auto">
20
- <Card className="w-full max-w-sm">
21
- <CardHeader className="text-center">
22
- <div className="flex justify-center mb-4">
23
- <div className="flex size-12 items-center justify-center rounded-full bg-primary/10 text-primary">
24
- <LockIcon className="size-6" />
25
- </div>
26
- </div>
27
- <CardTitle className="text-2xl">{t('loginTemplate.title')}</CardTitle>
28
- <CardDescription>{t('loginTemplate.description')}</CardDescription>
29
- </CardHeader>
30
- <CardContent className="grid gap-4">
31
- <div className="grid gap-2 text-left">
32
- <Label htmlFor="email">{t('loginTemplate.emailLabel')}</Label>
33
- <Input
34
- id="email"
35
- type="email"
36
- placeholder={t('loginTemplate.emailPlaceholder')}
37
- required
38
- />
39
- </div>
40
- <div className="grid gap-2 text-left">
41
- <div className="flex items-center">
42
- <Label htmlFor="password">{t('loginTemplate.passwordLabel')}</Label>
43
- <a
44
- href="#"
45
- className="ml-auto inline-block text-sm text-muted-foreground underline hover:text-primary"
46
- >
47
- {t('loginTemplate.forgotPassword')}
48
- </a>
49
- </div>
50
- <Input id="password" type="password" required />
51
- </div>
52
- </CardContent>
53
- <CardFooter>
54
- <Button className="w-full">{t('loginTemplate.submit')}</Button>
55
- </CardFooter>
56
- </Card>
57
- </div>
58
- );
59
- }
@@ -1,25 +0,0 @@
1
- {
2
- "title": "Team Members",
3
- "subtitle": "Manage member access to the system.",
4
- "newMember": "New Member",
5
- "searchPlaceholder": "Search email...",
6
- "headers": {
7
- "name": "Name",
8
- "email": "Email",
9
- "role": "Role",
10
- "status": "Status",
11
- "action": "Action"
12
- },
13
- "roles": {
14
- "administrator": "Administrator",
15
- "editor": "Editor"
16
- },
17
- "status": {
18
- "active": "Active",
19
- "inactive": "Inactive"
20
- },
21
- "actions": {
22
- "editProfile": "Edit Profile",
23
- "revokeAccess": "Revoke Access"
24
- }
25
- }
@@ -1,20 +0,0 @@
1
- {
2
- "title": "Dashboard",
3
- "subtitle": "System overview",
4
- "downloadReport": "Download Report",
5
- "lastMonth": "from last month",
6
- "stats": {
7
- "totalRevenue": "Total Revenue",
8
- "totalRevenueValue": "$45,231.89",
9
- "activeUsers": "Active Users",
10
- "sales": "Sales",
11
- "retentionRate": "Retention Rate"
12
- },
13
- "overview": "Overview",
14
- "chartArea": "Chart Area",
15
- "recentEvents": "Recent Events",
16
- "events": {
17
- "userLogin": "Login by João Silva",
18
- "invoicePaid": "Invoice #INV004 paid"
19
- }
20
- }
@@ -1,16 +0,0 @@
1
- {
2
- "title": "Edit Corporate Profile",
3
- "description": "Update your account details and set your preferences.",
4
- "fullNameLabel": "Full Name",
5
- "fullNamePlaceholder": "Your name",
6
- "emailLabel": "Corporate Email",
7
- "emailPlaceholder": "name@example.com",
8
- "notifyLabel": "I want to receive updated notifications by email at the end of each day with a summary.",
9
- "successMessage": "Profile saved successfully!",
10
- "cancel": "Cancel",
11
- "save": "Save Changes",
12
- "errors": {
13
- "fullNameRequired": "Full name is required",
14
- "emailInvalid": "Invalid format"
15
- }
16
- }
@@ -1,9 +0,0 @@
1
- {
2
- "title": "System Access",
3
- "description": "Enter your corporate credentials below.",
4
- "emailLabel": "Corporate Email",
5
- "emailPlaceholder": "m@xertica.com",
6
- "passwordLabel": "Password",
7
- "forgotPassword": "Forgot password?",
8
- "submit": "Sign in"
9
- }
@@ -1,25 +0,0 @@
1
- {
2
- "title": "Miembros del Equipo",
3
- "subtitle": "Gestiona el acceso de los miembros al sistema.",
4
- "newMember": "Nuevo Miembro",
5
- "searchPlaceholder": "Buscar correo...",
6
- "headers": {
7
- "name": "Nombre",
8
- "email": "Correo",
9
- "role": "Rol",
10
- "status": "Estado",
11
- "action": "Acción"
12
- },
13
- "roles": {
14
- "administrator": "Administrador",
15
- "editor": "Editor"
16
- },
17
- "status": {
18
- "active": "Activo",
19
- "inactive": "Inactivo"
20
- },
21
- "actions": {
22
- "editProfile": "Editar Perfil",
23
- "revokeAccess": "Revocar Acceso"
24
- }
25
- }
@@ -1,20 +0,0 @@
1
- {
2
- "title": "Dashboard",
3
- "subtitle": "Vista general del sistema",
4
- "downloadReport": "Descargar Reporte",
5
- "lastMonth": "desde el mes pasado",
6
- "stats": {
7
- "totalRevenue": "Ingresos Totales",
8
- "totalRevenueValue": "€45.231,89",
9
- "activeUsers": "Usuarios Activos",
10
- "sales": "Ventas",
11
- "retentionRate": "Tasa de Retención"
12
- },
13
- "overview": "Vista General",
14
- "chartArea": "Área del Gráfico",
15
- "recentEvents": "Últimos Eventos",
16
- "events": {
17
- "userLogin": "Inicio de sesión de João Silva",
18
- "invoicePaid": "Factura #INV004 pagada"
19
- }
20
- }
@@ -1,16 +0,0 @@
1
- {
2
- "title": "Editar Perfil Corporativo",
3
- "description": "Actualiza los detalles de tu cuenta y define tus preferencias.",
4
- "fullNameLabel": "Nombre Completo",
5
- "fullNamePlaceholder": "Tu nombre",
6
- "emailLabel": "Correo Corporativo",
7
- "emailPlaceholder": "nombre@ejemplo.com",
8
- "notifyLabel": "Deseo recibir notificaciones actualizadas por correo al final de cada día con el resumen.",
9
- "successMessage": "¡Perfil guardado con éxito!",
10
- "cancel": "Cancelar",
11
- "save": "Guardar Cambios",
12
- "errors": {
13
- "fullNameRequired": "El nombre completo es obligatorio",
14
- "emailInvalid": "Formato inválido"
15
- }
16
- }
@@ -1,9 +0,0 @@
1
- {
2
- "title": "Acceso al Sistema",
3
- "description": "Ingresa tus credenciales corporativas abajo.",
4
- "emailLabel": "Correo Corporativo",
5
- "emailPlaceholder": "m@xertica.com",
6
- "passwordLabel": "Contraseña",
7
- "forgotPassword": "¿Olvidaste tu contraseña?",
8
- "submit": "Entrar"
9
- }
@@ -1,25 +0,0 @@
1
- {
2
- "title": "Membros da Equipe",
3
- "subtitle": "Gerencie o acesso dos membros ao sistema.",
4
- "newMember": "Novo Membro",
5
- "searchPlaceholder": "Buscar email...",
6
- "headers": {
7
- "name": "Nome",
8
- "email": "E-mail",
9
- "role": "Cargo",
10
- "status": "Status",
11
- "action": "Ação"
12
- },
13
- "roles": {
14
- "administrator": "Administrador",
15
- "editor": "Editor"
16
- },
17
- "status": {
18
- "active": "Ativo",
19
- "inactive": "Inativo"
20
- },
21
- "actions": {
22
- "editProfile": "Editar Perfil",
23
- "revokeAccess": "Revogar Acesso"
24
- }
25
- }
@@ -1,20 +0,0 @@
1
- {
2
- "title": "Dashboard",
3
- "subtitle": "Visão geral do sistema",
4
- "downloadReport": "Baixar Relatório",
5
- "lastMonth": "no último mês",
6
- "stats": {
7
- "totalRevenue": "Receita Total",
8
- "totalRevenueValue": "R$ 45.231,89",
9
- "activeUsers": "Usuários Ativos",
10
- "sales": "Vendas",
11
- "retentionRate": "Taxa de Retenção"
12
- },
13
- "overview": "Visão Geral",
14
- "chartArea": "Área de Gráfico",
15
- "recentEvents": "Últimos Eventos",
16
- "events": {
17
- "userLogin": "Login de João Silva",
18
- "invoicePaid": "Fatura #INV004 paga"
19
- }
20
- }
@@ -1,16 +0,0 @@
1
- {
2
- "title": "Editar Perfil Corporativo",
3
- "description": "Atualize os detalhes de sua conta e defina as preferências.",
4
- "fullNameLabel": "Nome Completo",
5
- "fullNamePlaceholder": "Seu nome",
6
- "emailLabel": "E-mail Corporativo",
7
- "emailPlaceholder": "nome@exemplo.com",
8
- "notifyLabel": "Desejo receber notificações atualizadas por e-mail no final de cada dia constando o sumário.",
9
- "successMessage": "Perfil salvo com sucesso!",
10
- "cancel": "Cancelar",
11
- "save": "Salvar Alterações",
12
- "errors": {
13
- "fullNameRequired": "Nome completo é obrigatório",
14
- "emailInvalid": "Formato inválido"
15
- }
16
- }
@@ -1,9 +0,0 @@
1
- {
2
- "title": "Acesso ao Sistema",
3
- "description": "Insira suas credenciais corporativas abaixo.",
4
- "emailLabel": "Email Corporativo",
5
- "emailPlaceholder": "m@xertica.com",
6
- "passwordLabel": "Senha",
7
- "forgotPassword": "Esqueceu a senha?",
8
- "submit": "Entrar"
9
- }
@@ -1,2 +0,0 @@
1
- declare const _default: import("vite").UserConfig;
2
- export default _default;
@@ -1,20 +0,0 @@
1
- import { defineConfig } from 'vite';
2
- import path from 'path';
3
- import tailwindcss from '@tailwindcss/vite';
4
- import react from '@vitejs/plugin-react';
5
- export default defineConfig({
6
- plugins: [
7
- // The React and Tailwind plugins are both required for Make, even if
8
- // Tailwind is not being actively used – do not remove them
9
- react(),
10
- tailwindcss(),
11
- ],
12
- resolve: {
13
- alias: {
14
- // Alias @ to the src directory
15
- '@': path.resolve(__dirname, './src'),
16
- },
17
- },
18
- // File types to support raw imports. Never add .css, .tsx, or .ts files to this.
19
- assetsInclude: ['**/*.svg', '**/*.csv'],
20
- });