@seip/blue-bird 0.4.5 → 0.4.7
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/.env_example +26 -25
- package/AGENTS.md +199 -199
- package/README.md +79 -79
- package/backend/index.js +13 -13
- package/backend/routes/frontend.js +41 -41
- package/backend/routes/seo.js +39 -39
- package/core/app.js +330 -325
- package/core/auth.js +142 -114
- package/core/cache.js +44 -44
- package/core/cli/component.js +42 -42
- package/core/cli/init.js +119 -118
- package/core/cli/react.js +435 -435
- package/core/cli/route.js +42 -42
- package/core/config.js +51 -47
- package/core/debug.js +248 -248
- package/core/logger.js +100 -100
- package/core/middleware.js +27 -27
- package/core/router.js +333 -333
- package/core/seo.js +95 -100
- package/core/template.js +478 -462
- package/core/upload.js +77 -76
- package/core/validate.js +380 -380
- package/frontend/index.html +31 -26
- package/frontend/landing.html +70 -69
- package/frontend/resources/css/tailwind.css +17 -17
- package/frontend/resources/js/App.jsx +70 -70
- package/frontend/resources/js/Main.jsx +18 -18
- package/frontend/resources/js/blue-bird/components/Button.jsx +67 -67
- package/frontend/resources/js/blue-bird/components/Card.jsx +18 -18
- package/frontend/resources/js/blue-bird/components/DataTable.jsx +126 -126
- package/frontend/resources/js/blue-bird/components/Input.jsx +21 -21
- package/frontend/resources/js/blue-bird/components/Label.jsx +12 -12
- package/frontend/resources/js/blue-bird/components/LanguageButton.jsx +23 -23
- package/frontend/resources/js/blue-bird/components/Link.jsx +15 -15
- package/frontend/resources/js/blue-bird/components/Modal.jsx +27 -27
- package/frontend/resources/js/blue-bird/components/Skeleton.jsx +44 -44
- package/frontend/resources/js/blue-bird/components/Translate.jsx +12 -12
- package/frontend/resources/js/blue-bird/components/Typography.jsx +69 -69
- package/frontend/resources/js/blue-bird/contexts/LanguageContext.jsx +41 -41
- package/frontend/resources/js/blue-bird/contexts/SPAContext.jsx +239 -237
- package/frontend/resources/js/blue-bird/contexts/SnackbarContext.jsx +38 -38
- package/frontend/resources/js/blue-bird/contexts/ThemeContext.jsx +49 -49
- package/frontend/resources/js/blue-bird/locales/en.json +47 -47
- package/frontend/resources/js/blue-bird/locales/es.json +47 -47
- package/frontend/resources/js/components/Header.jsx +55 -55
- package/frontend/resources/js/pages/About.jsx +31 -31
- package/frontend/resources/js/pages/Home.jsx +82 -82
- package/package.json +1 -1
- package/vite.config.js +22 -22
- package/frontend/public/robots.txt +0 -0
- package/frontend/public/sitemap.xml +0 -0
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
{
|
|
2
|
-
"home_page": {
|
|
3
|
-
"title": "Welcome to Blue Bird",
|
|
4
|
-
"description": "The elegant, fast, and weightless framework for modern web development.",
|
|
5
|
-
"lightweight": "Lightweight",
|
|
6
|
-
"lightweightDescription": "Built with performance and simplicity in mind.",
|
|
7
|
-
"reactPowered": "React Powered",
|
|
8
|
-
"reactPoweredDescription": "Full React + Vite integration.",
|
|
9
|
-
"expressBackend": "Express Backend",
|
|
10
|
-
"expressBackendDescription": "Robust and scalable backend architecture."
|
|
11
|
-
},
|
|
12
|
-
"about_page": {
|
|
13
|
-
"title": "About Blue Bird",
|
|
14
|
-
"description": "Blue Bird is a modern framework designed to bridge the gap between backend routing and frontend interactivity.",
|
|
15
|
-
"description2": "It provides a seamless developer experience for building fast, reactive web applications.",
|
|
16
|
-
"check_your_console": "Check your console JS"
|
|
17
|
-
},
|
|
18
|
-
"home": "Home",
|
|
19
|
-
"about": "About",
|
|
20
|
-
"login": "Login",
|
|
21
|
-
"register": "Register",
|
|
22
|
-
"email": "Email address",
|
|
23
|
-
"password": "Password",
|
|
24
|
-
"name": "Full Name",
|
|
25
|
-
"submit": "Submit",
|
|
26
|
-
"forgot_password": "Forgot Password?",
|
|
27
|
-
"dashboard": "Dashboard",
|
|
28
|
-
"profile": "Profile",
|
|
29
|
-
"logout": "Logout",
|
|
30
|
-
"language": "Language",
|
|
31
|
-
"success_login": "Logged in successfully!",
|
|
32
|
-
"error_login": "Invalid credentials",
|
|
33
|
-
"error_general": "An error occurred. Please try again later.",
|
|
34
|
-
"search": "Search...",
|
|
35
|
-
"actions": "Actions",
|
|
36
|
-
"edit": "Edit",
|
|
37
|
-
"delete": "Delete",
|
|
38
|
-
"error_email_register": "Error, check your email entered",
|
|
39
|
-
"error_is_active_register": "Error, your account is not active",
|
|
40
|
-
"forgot_password_desc": "Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one",
|
|
41
|
-
"password_confirmation": "Confirm Password",
|
|
42
|
-
"back_to_login": "Back to login",
|
|
43
|
-
"dont_have_account_register": "Don't have an account? Register",
|
|
44
|
-
"password_confirmation_err": "Error, the password must match",
|
|
45
|
-
"deleted_account_error": "Error, your account has been deleted",
|
|
46
|
-
"error_token_reset": "Invalid or expired reset token.",
|
|
47
|
-
"If the email is valid, a password reset link has been sent": "If the email is valid, a password reset link has been sent."
|
|
1
|
+
{
|
|
2
|
+
"home_page": {
|
|
3
|
+
"title": "Welcome to Blue Bird",
|
|
4
|
+
"description": "The elegant, fast, and weightless framework for modern web development.",
|
|
5
|
+
"lightweight": "Lightweight",
|
|
6
|
+
"lightweightDescription": "Built with performance and simplicity in mind.",
|
|
7
|
+
"reactPowered": "React Powered",
|
|
8
|
+
"reactPoweredDescription": "Full React + Vite integration.",
|
|
9
|
+
"expressBackend": "Express Backend",
|
|
10
|
+
"expressBackendDescription": "Robust and scalable backend architecture."
|
|
11
|
+
},
|
|
12
|
+
"about_page": {
|
|
13
|
+
"title": "About Blue Bird",
|
|
14
|
+
"description": "Blue Bird is a modern framework designed to bridge the gap between backend routing and frontend interactivity.",
|
|
15
|
+
"description2": "It provides a seamless developer experience for building fast, reactive web applications.",
|
|
16
|
+
"check_your_console": "Check your console JS"
|
|
17
|
+
},
|
|
18
|
+
"home": "Home",
|
|
19
|
+
"about": "About",
|
|
20
|
+
"login": "Login",
|
|
21
|
+
"register": "Register",
|
|
22
|
+
"email": "Email address",
|
|
23
|
+
"password": "Password",
|
|
24
|
+
"name": "Full Name",
|
|
25
|
+
"submit": "Submit",
|
|
26
|
+
"forgot_password": "Forgot Password?",
|
|
27
|
+
"dashboard": "Dashboard",
|
|
28
|
+
"profile": "Profile",
|
|
29
|
+
"logout": "Logout",
|
|
30
|
+
"language": "Language",
|
|
31
|
+
"success_login": "Logged in successfully!",
|
|
32
|
+
"error_login": "Invalid credentials",
|
|
33
|
+
"error_general": "An error occurred. Please try again later.",
|
|
34
|
+
"search": "Search...",
|
|
35
|
+
"actions": "Actions",
|
|
36
|
+
"edit": "Edit",
|
|
37
|
+
"delete": "Delete",
|
|
38
|
+
"error_email_register": "Error, check your email entered",
|
|
39
|
+
"error_is_active_register": "Error, your account is not active",
|
|
40
|
+
"forgot_password_desc": "Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one",
|
|
41
|
+
"password_confirmation": "Confirm Password",
|
|
42
|
+
"back_to_login": "Back to login",
|
|
43
|
+
"dont_have_account_register": "Don't have an account? Register",
|
|
44
|
+
"password_confirmation_err": "Error, the password must match",
|
|
45
|
+
"deleted_account_error": "Error, your account has been deleted",
|
|
46
|
+
"error_token_reset": "Invalid or expired reset token.",
|
|
47
|
+
"If the email is valid, a password reset link has been sent": "If the email is valid, a password reset link has been sent."
|
|
48
48
|
}
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
{
|
|
2
|
-
"home_page": {
|
|
3
|
-
"title": "Bienvenido a Blue Bird",
|
|
4
|
-
"description": "El framework elegante, rápido y ligero para el desarrollo web moderno.",
|
|
5
|
-
"lightweight": "Ligero",
|
|
6
|
-
"lightweightDescription": "Construido pensando en el rendimiento y la simplicidad.",
|
|
7
|
-
"reactPowered": "Impulsado por React",
|
|
8
|
-
"reactPoweredDescription": "Integración completa con React + Vite.",
|
|
9
|
-
"expressBackend": "Backend con Express",
|
|
10
|
-
"expressBackendDescription": "Arquitectura de backend robusta y escalable."
|
|
11
|
-
},
|
|
12
|
-
"about_page": {
|
|
13
|
-
"title": "Acerca de Blue Bird",
|
|
14
|
-
"description": "Blue Bird es un framework moderno diseñado para cerrar la brecha entre el enrutamiento de backend y la interactividad de frontend.",
|
|
15
|
-
"description2": "Proporciona una experiencia de desarrollador perfecta para crear aplicaciones web rápidas y reactivas.",
|
|
16
|
-
"check_your_console": "Revisa tu consola JS"
|
|
17
|
-
},
|
|
18
|
-
"home": "Inicio",
|
|
19
|
-
"about": "Acerca de",
|
|
20
|
-
"login": "Iniciar Sesión",
|
|
21
|
-
"register": "Registrarse",
|
|
22
|
-
"email": "Correo Electrónico",
|
|
23
|
-
"password": "Contraseña",
|
|
24
|
-
"name": "Nombre Completo",
|
|
25
|
-
"submit": "Enviar",
|
|
26
|
-
"forgot_password": "¿Olvidó su contraseña?",
|
|
27
|
-
"dashboard": "Panel de Inicio",
|
|
28
|
-
"profile": "Perfil",
|
|
29
|
-
"logout": "Cerrar Sesión",
|
|
30
|
-
"language": "Idioma",
|
|
31
|
-
"success_login": "¡Inicio de sesión exitoso!",
|
|
32
|
-
"error_login": "Credenciales inválidas",
|
|
33
|
-
"error_general": "Ocurrió un error. Inténtelo más tarde.",
|
|
34
|
-
"search": "Buscar...",
|
|
35
|
-
"actions": "Acciones",
|
|
36
|
-
"edit": "Editar",
|
|
37
|
-
"delete": "Eliminar",
|
|
38
|
-
"error_email_register": "Error, revisa el email ingresado",
|
|
39
|
-
"error_is_active_register": "Error, tu cuenta no esta activa",
|
|
40
|
-
"forgot_password_desc": "¿Olvidó su contraseña? No hay problema. Simplemente indíquenos su dirección de correo electrónico y le enviaremos un enlace de restablecimiento de contraseña que le permitirá elegir una nueva",
|
|
41
|
-
"password_confirmation": "Confirmar Contraseña",
|
|
42
|
-
"back_to_login": "Volver a iniciar sesión",
|
|
43
|
-
"dont_have_account_register": "¿No tienes una cuenta? Regístrate",
|
|
44
|
-
"password_confirmation_err": "Error, las contraseñas deben de coincidir",
|
|
45
|
-
"deleted_account_error": "Error, tu cuenta ha sido eliminada",
|
|
46
|
-
"error_token_reset": "Token de restablecimiento inválido o expirado.",
|
|
47
|
-
"If the email is valid, a password reset link has been sent": "Si el correo electrónico es válido, se ha enviado un enlace para restablecer la contraseña."
|
|
1
|
+
{
|
|
2
|
+
"home_page": {
|
|
3
|
+
"title": "Bienvenido a Blue Bird",
|
|
4
|
+
"description": "El framework elegante, rápido y ligero para el desarrollo web moderno.",
|
|
5
|
+
"lightweight": "Ligero",
|
|
6
|
+
"lightweightDescription": "Construido pensando en el rendimiento y la simplicidad.",
|
|
7
|
+
"reactPowered": "Impulsado por React",
|
|
8
|
+
"reactPoweredDescription": "Integración completa con React + Vite.",
|
|
9
|
+
"expressBackend": "Backend con Express",
|
|
10
|
+
"expressBackendDescription": "Arquitectura de backend robusta y escalable."
|
|
11
|
+
},
|
|
12
|
+
"about_page": {
|
|
13
|
+
"title": "Acerca de Blue Bird",
|
|
14
|
+
"description": "Blue Bird es un framework moderno diseñado para cerrar la brecha entre el enrutamiento de backend y la interactividad de frontend.",
|
|
15
|
+
"description2": "Proporciona una experiencia de desarrollador perfecta para crear aplicaciones web rápidas y reactivas.",
|
|
16
|
+
"check_your_console": "Revisa tu consola JS"
|
|
17
|
+
},
|
|
18
|
+
"home": "Inicio",
|
|
19
|
+
"about": "Acerca de",
|
|
20
|
+
"login": "Iniciar Sesión",
|
|
21
|
+
"register": "Registrarse",
|
|
22
|
+
"email": "Correo Electrónico",
|
|
23
|
+
"password": "Contraseña",
|
|
24
|
+
"name": "Nombre Completo",
|
|
25
|
+
"submit": "Enviar",
|
|
26
|
+
"forgot_password": "¿Olvidó su contraseña?",
|
|
27
|
+
"dashboard": "Panel de Inicio",
|
|
28
|
+
"profile": "Perfil",
|
|
29
|
+
"logout": "Cerrar Sesión",
|
|
30
|
+
"language": "Idioma",
|
|
31
|
+
"success_login": "¡Inicio de sesión exitoso!",
|
|
32
|
+
"error_login": "Credenciales inválidas",
|
|
33
|
+
"error_general": "Ocurrió un error. Inténtelo más tarde.",
|
|
34
|
+
"search": "Buscar...",
|
|
35
|
+
"actions": "Acciones",
|
|
36
|
+
"edit": "Editar",
|
|
37
|
+
"delete": "Eliminar",
|
|
38
|
+
"error_email_register": "Error, revisa el email ingresado",
|
|
39
|
+
"error_is_active_register": "Error, tu cuenta no esta activa",
|
|
40
|
+
"forgot_password_desc": "¿Olvidó su contraseña? No hay problema. Simplemente indíquenos su dirección de correo electrónico y le enviaremos un enlace de restablecimiento de contraseña que le permitirá elegir una nueva",
|
|
41
|
+
"password_confirmation": "Confirmar Contraseña",
|
|
42
|
+
"back_to_login": "Volver a iniciar sesión",
|
|
43
|
+
"dont_have_account_register": "¿No tienes una cuenta? Regístrate",
|
|
44
|
+
"password_confirmation_err": "Error, las contraseñas deben de coincidir",
|
|
45
|
+
"deleted_account_error": "Error, tu cuenta ha sido eliminada",
|
|
46
|
+
"error_token_reset": "Token de restablecimiento inválido o expirado.",
|
|
47
|
+
"If the email is valid, a password reset link has been sent": "Si el correo electrónico es válido, se ha enviado un enlace para restablecer la contraseña."
|
|
48
48
|
}
|
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
import Link from "../blue-bird/components/Link";
|
|
2
|
-
import LanguageButton from "../blue-bird/components/LanguageButton";
|
|
3
|
-
import { useState } from "react";
|
|
4
|
-
import Button from "../blue-bird/components/Button";
|
|
5
|
-
import { useLanguage } from "../blue-bird/contexts/LanguageContext";
|
|
6
|
-
import { useTheme } from "../blue-bird/contexts/ThemeContext";
|
|
7
|
-
|
|
8
|
-
export default function Header() {
|
|
9
|
-
const { t } = useLanguage();
|
|
10
|
-
const { changeTheme } = useTheme();
|
|
11
|
-
|
|
12
|
-
const [emojiTheme, setEmojiTheme] = useState("🌞");
|
|
13
|
-
|
|
14
|
-
const changeThemeEmoji = () => {
|
|
15
|
-
if (emojiTheme === "🌞") {
|
|
16
|
-
setEmojiTheme("🌙");
|
|
17
|
-
changeTheme("dark");
|
|
18
|
-
} else {
|
|
19
|
-
setEmojiTheme("🌞");
|
|
20
|
-
changeTheme("light");
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
return (
|
|
25
|
-
<header>
|
|
26
|
-
<nav
|
|
27
|
-
className='bg-white dark:bg-slate-900 text-gray-900 dark:text-gray-100 border-b border-gray-200 dark:border-slate-800 px-4 py-4 flex justify-between items-center gap-4 sticky top-0 z-10'
|
|
28
|
-
>
|
|
29
|
-
<div className='font-bold text-xl text-blue-500 dark:text-blue-500'>
|
|
30
|
-
Blue Bird
|
|
31
|
-
</div>
|
|
32
|
-
<div className='flex justify-between items-center gap-4'>
|
|
33
|
-
<div className="flex justify-between items-center gap-4">
|
|
34
|
-
<Link to={"/"} >{t("home")}</Link>
|
|
35
|
-
<Link to={"/about"}>{t("about")}</Link>
|
|
36
|
-
</div>
|
|
37
|
-
<div className="flex justify-between items-center gap-4">
|
|
38
|
-
<LanguageButton lang="es" variant="outline" size="sm">
|
|
39
|
-
ES
|
|
40
|
-
</LanguageButton>
|
|
41
|
-
<LanguageButton lang="en" variant="outline" size="sm">
|
|
42
|
-
EN
|
|
43
|
-
</LanguageButton>
|
|
44
|
-
<Button variant="ghost" size="icon" onClick={changeThemeEmoji}>
|
|
45
|
-
{emojiTheme}
|
|
46
|
-
</Button>
|
|
47
|
-
|
|
48
|
-
</div>
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
</div>
|
|
52
|
-
</nav>
|
|
53
|
-
</header>
|
|
54
|
-
|
|
55
|
-
)
|
|
1
|
+
import Link from "../blue-bird/components/Link";
|
|
2
|
+
import LanguageButton from "../blue-bird/components/LanguageButton";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import Button from "../blue-bird/components/Button";
|
|
5
|
+
import { useLanguage } from "../blue-bird/contexts/LanguageContext";
|
|
6
|
+
import { useTheme } from "../blue-bird/contexts/ThemeContext";
|
|
7
|
+
|
|
8
|
+
export default function Header() {
|
|
9
|
+
const { t } = useLanguage();
|
|
10
|
+
const { changeTheme } = useTheme();
|
|
11
|
+
|
|
12
|
+
const [emojiTheme, setEmojiTheme] = useState("🌞");
|
|
13
|
+
|
|
14
|
+
const changeThemeEmoji = () => {
|
|
15
|
+
if (emojiTheme === "🌞") {
|
|
16
|
+
setEmojiTheme("🌙");
|
|
17
|
+
changeTheme("dark");
|
|
18
|
+
} else {
|
|
19
|
+
setEmojiTheme("🌞");
|
|
20
|
+
changeTheme("light");
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
<header>
|
|
26
|
+
<nav
|
|
27
|
+
className='bg-white dark:bg-slate-900 text-gray-900 dark:text-gray-100 border-b border-gray-200 dark:border-slate-800 px-4 py-4 flex justify-between items-center gap-4 sticky top-0 z-10'
|
|
28
|
+
>
|
|
29
|
+
<div className='font-bold text-xl text-blue-500 dark:text-blue-500'>
|
|
30
|
+
Blue Bird
|
|
31
|
+
</div>
|
|
32
|
+
<div className='flex justify-between items-center gap-4'>
|
|
33
|
+
<div className="flex justify-between items-center gap-4">
|
|
34
|
+
<Link to={"/"} >{t("home")}</Link>
|
|
35
|
+
<Link to={"/about"}>{t("about")}</Link>
|
|
36
|
+
</div>
|
|
37
|
+
<div className="flex justify-between items-center gap-4">
|
|
38
|
+
<LanguageButton lang="es" variant="outline" size="sm">
|
|
39
|
+
ES
|
|
40
|
+
</LanguageButton>
|
|
41
|
+
<LanguageButton lang="en" variant="outline" size="sm">
|
|
42
|
+
EN
|
|
43
|
+
</LanguageButton>
|
|
44
|
+
<Button variant="ghost" size="icon" onClick={changeThemeEmoji}>
|
|
45
|
+
{emojiTheme}
|
|
46
|
+
</Button>
|
|
47
|
+
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
</div>
|
|
52
|
+
</nav>
|
|
53
|
+
</header>
|
|
54
|
+
|
|
55
|
+
)
|
|
56
56
|
}
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import Header from '../components/Header';
|
|
3
|
-
import { useLanguage } from '../blue-bird/contexts/LanguageContext';
|
|
4
|
-
|
|
5
|
-
import Card from '../blue-bird/components/Card';
|
|
6
|
-
import Typography from '../blue-bird/components/Typography'
|
|
7
|
-
|
|
8
|
-
export default function About() {
|
|
9
|
-
const { t } = useLanguage();
|
|
10
|
-
return (
|
|
11
|
-
<div
|
|
12
|
-
className="bg-white dark:bg-slate-900 text-gray-900 dark:text-gray-100 min-h-screen"
|
|
13
|
-
>
|
|
14
|
-
<Header />
|
|
15
|
-
<main className='max-w-3xl mx-auto mt-8 p-4'>
|
|
16
|
-
<Card>
|
|
17
|
-
<Typography variant='h1' className='text-4xl mb-4' gradient={{ from: 'sky', to: 'indigo' }}>
|
|
18
|
-
{t("about_page.title")}
|
|
19
|
-
</Typography>
|
|
20
|
-
<Typography className='text-slate-500 dark:text-slate-400 leading-7'>
|
|
21
|
-
{t("about_page.description")}
|
|
22
|
-
</Typography>
|
|
23
|
-
<div className='mt-8 pt-4 px-4 bg-red-50 text-red-900 rounded-md py-4 rounded-lg text-center'>
|
|
24
|
-
<Typography className='text-sm text-red-500 font-medium'>
|
|
25
|
-
{t("about_page.check_your_console")}
|
|
26
|
-
</Typography>
|
|
27
|
-
</div>
|
|
28
|
-
</Card>
|
|
29
|
-
</main>
|
|
30
|
-
</div>
|
|
31
|
-
);
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import Header from '../components/Header';
|
|
3
|
+
import { useLanguage } from '../blue-bird/contexts/LanguageContext';
|
|
4
|
+
|
|
5
|
+
import Card from '../blue-bird/components/Card';
|
|
6
|
+
import Typography from '../blue-bird/components/Typography'
|
|
7
|
+
|
|
8
|
+
export default function About() {
|
|
9
|
+
const { t } = useLanguage();
|
|
10
|
+
return (
|
|
11
|
+
<div
|
|
12
|
+
className="bg-white dark:bg-slate-900 text-gray-900 dark:text-gray-100 min-h-screen"
|
|
13
|
+
>
|
|
14
|
+
<Header />
|
|
15
|
+
<main className='max-w-3xl mx-auto mt-8 p-4'>
|
|
16
|
+
<Card>
|
|
17
|
+
<Typography variant='h1' className='text-4xl mb-4' gradient={{ from: 'sky', to: 'indigo' }}>
|
|
18
|
+
{t("about_page.title")}
|
|
19
|
+
</Typography>
|
|
20
|
+
<Typography className='text-slate-500 dark:text-slate-400 leading-7'>
|
|
21
|
+
{t("about_page.description")}
|
|
22
|
+
</Typography>
|
|
23
|
+
<div className='mt-8 pt-4 px-4 bg-red-50 text-red-900 rounded-md py-4 rounded-lg text-center'>
|
|
24
|
+
<Typography className='text-sm text-red-500 font-medium'>
|
|
25
|
+
{t("about_page.check_your_console")}
|
|
26
|
+
</Typography>
|
|
27
|
+
</div>
|
|
28
|
+
</Card>
|
|
29
|
+
</main>
|
|
30
|
+
</div>
|
|
31
|
+
);
|
|
32
32
|
}
|
|
@@ -1,82 +1,82 @@
|
|
|
1
|
-
import React, { useEffect } from 'react';
|
|
2
|
-
import Card from '../blue-bird/components/Card';
|
|
3
|
-
import Header from '../components/Header';
|
|
4
|
-
import { useLanguage } from '../blue-bird/contexts/LanguageContext';
|
|
5
|
-
import Typography from '../blue-bird/components/Typography';
|
|
6
|
-
|
|
7
|
-
export default function Home() {
|
|
8
|
-
const { t } = useLanguage();
|
|
9
|
-
useEffect(() => {
|
|
10
|
-
// Example API call to the backend
|
|
11
|
-
fetch("/api/login", {
|
|
12
|
-
method: "POST",
|
|
13
|
-
headers: {
|
|
14
|
-
"Content-Type": "application/json",
|
|
15
|
-
},
|
|
16
|
-
body: JSON.stringify({
|
|
17
|
-
email: "example@example.com",
|
|
18
|
-
password: "myPassword123"
|
|
19
|
-
}),
|
|
20
|
-
})
|
|
21
|
-
.then((response) => response.json())
|
|
22
|
-
.then((data) => console.log('Backend response:', data))
|
|
23
|
-
.catch((error) => console.error('Error fetching from backend:', error));
|
|
24
|
-
}, []);
|
|
25
|
-
|
|
26
|
-
return (
|
|
27
|
-
<div
|
|
28
|
-
className="bg-white dark:bg-slate-900 text-gray-900 dark:text-gray-100 min-h-screen"
|
|
29
|
-
>
|
|
30
|
-
<Header />
|
|
31
|
-
<main className='max-w-7xl mx-auto'>
|
|
32
|
-
<div className='text-center p-4'>
|
|
33
|
-
<header className='mb-8 mt-8'>
|
|
34
|
-
<Typography variant='h1' className='text-4xl mb-4' gradient={{ from: 'sky', to: 'indigo' }}>
|
|
35
|
-
{t("home_page.title")}
|
|
36
|
-
</Typography>
|
|
37
|
-
<Typography className='text-xl text-slate-500 dark:text-slate-400 max-w-[600px] mx-auto'>
|
|
38
|
-
{t("home_page.description")}
|
|
39
|
-
</Typography>
|
|
40
|
-
</header>
|
|
41
|
-
|
|
42
|
-
<div className='flex gap-4 justify-center mb-12'>
|
|
43
|
-
<a
|
|
44
|
-
href="https://seip25.github.io/Blue-bird/en.html"
|
|
45
|
-
target="_blank"
|
|
46
|
-
rel="noopener noreferrer"
|
|
47
|
-
className='inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-blue-500 text-white dark:text-slate-900 hover:bg-blue-500/90 dark:hover:bg-blue-500/90 h-10 px-4 py-2'
|
|
48
|
-
>
|
|
49
|
-
Documentation (Eng)
|
|
50
|
-
</a>
|
|
51
|
-
<a
|
|
52
|
-
href="https://seip25.github.io/Blue-bird/"
|
|
53
|
-
target="_blank"
|
|
54
|
-
rel="noopener noreferrer"
|
|
55
|
-
className='inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-slate-200 dark:border-slate-800 bg-blue-100 dark:bg-slate-900 text-blue-600 dark:text-slate-100 hover:bg-blue-200 dark:hover:bg-blue-100 h-10 px-4 py-2'
|
|
56
|
-
>
|
|
57
|
-
Documentación (Esp)
|
|
58
|
-
</a>
|
|
59
|
-
</div>
|
|
60
|
-
|
|
61
|
-
<div className='mt-8 grid grid-cols-1 md:grid-cols-3 gap-6 max-w-[1000px] mx-auto text-left'>
|
|
62
|
-
<Card title={t("home_page.lightweight")}>
|
|
63
|
-
<Typography className="text-sm text-slate-500 dark:text-slate-400">
|
|
64
|
-
{t("home_page.lightweightDescription")}
|
|
65
|
-
</Typography>
|
|
66
|
-
</Card>
|
|
67
|
-
<Card title={t("home_page.reactPowered")}>
|
|
68
|
-
<Typography className="text-sm text-slate-500 dark:text-slate-400">
|
|
69
|
-
{t("home_page.reactPoweredDescription")}
|
|
70
|
-
</Typography>
|
|
71
|
-
</Card>
|
|
72
|
-
<Card title={t("home_page.expressBackend")}>
|
|
73
|
-
<Typography className="text-sm text-slate-500 dark:text-slate-400">
|
|
74
|
-
{t("home_page.expressBackendDescription")}
|
|
75
|
-
</Typography>
|
|
76
|
-
</Card>
|
|
77
|
-
</div>
|
|
78
|
-
</div>
|
|
79
|
-
</main>
|
|
80
|
-
</div>
|
|
81
|
-
);
|
|
82
|
-
}
|
|
1
|
+
import React, { useEffect } from 'react';
|
|
2
|
+
import Card from '../blue-bird/components/Card';
|
|
3
|
+
import Header from '../components/Header';
|
|
4
|
+
import { useLanguage } from '../blue-bird/contexts/LanguageContext';
|
|
5
|
+
import Typography from '../blue-bird/components/Typography';
|
|
6
|
+
|
|
7
|
+
export default function Home() {
|
|
8
|
+
const { t } = useLanguage();
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
// Example API call to the backend
|
|
11
|
+
fetch("/api/login", {
|
|
12
|
+
method: "POST",
|
|
13
|
+
headers: {
|
|
14
|
+
"Content-Type": "application/json",
|
|
15
|
+
},
|
|
16
|
+
body: JSON.stringify({
|
|
17
|
+
email: "example@example.com",
|
|
18
|
+
password: "myPassword123"
|
|
19
|
+
}),
|
|
20
|
+
})
|
|
21
|
+
.then((response) => response.json())
|
|
22
|
+
.then((data) => console.log('Backend response:', data))
|
|
23
|
+
.catch((error) => console.error('Error fetching from backend:', error));
|
|
24
|
+
}, []);
|
|
25
|
+
|
|
26
|
+
return (
|
|
27
|
+
<div
|
|
28
|
+
className="bg-white dark:bg-slate-900 text-gray-900 dark:text-gray-100 min-h-screen"
|
|
29
|
+
>
|
|
30
|
+
<Header />
|
|
31
|
+
<main className='max-w-7xl mx-auto'>
|
|
32
|
+
<div className='text-center p-4'>
|
|
33
|
+
<header className='mb-8 mt-8'>
|
|
34
|
+
<Typography variant='h1' className='text-4xl mb-4' gradient={{ from: 'sky', to: 'indigo' }}>
|
|
35
|
+
{t("home_page.title")}
|
|
36
|
+
</Typography>
|
|
37
|
+
<Typography className='text-xl text-slate-500 dark:text-slate-400 max-w-[600px] mx-auto'>
|
|
38
|
+
{t("home_page.description")}
|
|
39
|
+
</Typography>
|
|
40
|
+
</header>
|
|
41
|
+
|
|
42
|
+
<div className='flex gap-4 justify-center mb-12'>
|
|
43
|
+
<a
|
|
44
|
+
href="https://seip25.github.io/Blue-bird/en.html"
|
|
45
|
+
target="_blank"
|
|
46
|
+
rel="noopener noreferrer"
|
|
47
|
+
className='inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-blue-500 text-white dark:text-slate-900 hover:bg-blue-500/90 dark:hover:bg-blue-500/90 h-10 px-4 py-2'
|
|
48
|
+
>
|
|
49
|
+
Documentation (Eng)
|
|
50
|
+
</a>
|
|
51
|
+
<a
|
|
52
|
+
href="https://seip25.github.io/Blue-bird/"
|
|
53
|
+
target="_blank"
|
|
54
|
+
rel="noopener noreferrer"
|
|
55
|
+
className='inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-slate-200 dark:border-slate-800 bg-blue-100 dark:bg-slate-900 text-blue-600 dark:text-slate-100 hover:bg-blue-200 dark:hover:bg-blue-100 h-10 px-4 py-2'
|
|
56
|
+
>
|
|
57
|
+
Documentación (Esp)
|
|
58
|
+
</a>
|
|
59
|
+
</div>
|
|
60
|
+
|
|
61
|
+
<div className='mt-8 grid grid-cols-1 md:grid-cols-3 gap-6 max-w-[1000px] mx-auto text-left'>
|
|
62
|
+
<Card title={t("home_page.lightweight")}>
|
|
63
|
+
<Typography className="text-sm text-slate-500 dark:text-slate-400">
|
|
64
|
+
{t("home_page.lightweightDescription")}
|
|
65
|
+
</Typography>
|
|
66
|
+
</Card>
|
|
67
|
+
<Card title={t("home_page.reactPowered")}>
|
|
68
|
+
<Typography className="text-sm text-slate-500 dark:text-slate-400">
|
|
69
|
+
{t("home_page.reactPoweredDescription")}
|
|
70
|
+
</Typography>
|
|
71
|
+
</Card>
|
|
72
|
+
<Card title={t("home_page.expressBackend")}>
|
|
73
|
+
<Typography className="text-sm text-slate-500 dark:text-slate-400">
|
|
74
|
+
{t("home_page.expressBackendDescription")}
|
|
75
|
+
</Typography>
|
|
76
|
+
</Card>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
</main>
|
|
80
|
+
</div>
|
|
81
|
+
);
|
|
82
|
+
}
|
package/package.json
CHANGED
package/vite.config.js
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import { defineConfig } from 'vite';
|
|
2
|
-
import react from '@vitejs/plugin-react';
|
|
3
|
-
import path from 'path';
|
|
4
|
-
import tailwindcss from '@tailwindcss/vite';
|
|
5
|
-
|
|
6
|
-
export default defineConfig({
|
|
7
|
-
plugins: [react(), tailwindcss()],
|
|
8
|
-
root: path.resolve(__dirname, 'frontend/resources/js'),
|
|
9
|
-
base: '/build/',
|
|
10
|
-
build: {
|
|
11
|
-
outDir: path.resolve(__dirname, 'frontend/public/build'),
|
|
12
|
-
emptyOutDir: true,
|
|
13
|
-
manifest: true,
|
|
14
|
-
rollupOptions: {
|
|
15
|
-
input: path.resolve(__dirname, 'frontend/resources/js/Main.jsx'),
|
|
16
|
-
},
|
|
17
|
-
},
|
|
18
|
-
server: {
|
|
19
|
-
origin: 'http://localhost:5173',
|
|
20
|
-
strictPort: true,
|
|
21
|
-
cors: true,
|
|
22
|
-
},
|
|
1
|
+
import { defineConfig } from 'vite';
|
|
2
|
+
import react from '@vitejs/plugin-react';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import tailwindcss from '@tailwindcss/vite';
|
|
5
|
+
|
|
6
|
+
export default defineConfig({
|
|
7
|
+
plugins: [react(), tailwindcss()],
|
|
8
|
+
root: path.resolve(__dirname, 'frontend/resources/js'),
|
|
9
|
+
base: '/build/',
|
|
10
|
+
build: {
|
|
11
|
+
outDir: path.resolve(__dirname, 'frontend/public/build'),
|
|
12
|
+
emptyOutDir: true,
|
|
13
|
+
manifest: true,
|
|
14
|
+
rollupOptions: {
|
|
15
|
+
input: path.resolve(__dirname, 'frontend/resources/js/Main.jsx'),
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
server: {
|
|
19
|
+
origin: 'http://localhost:5173',
|
|
20
|
+
strictPort: true,
|
|
21
|
+
cors: true,
|
|
22
|
+
},
|
|
23
23
|
});
|
|
File without changes
|
|
File without changes
|