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,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,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
|
-
}
|
package/templates/vite.config.js
DELETED
|
@@ -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
|
-
});
|