Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
3f2f278
chore(build): subir Vite a 8 y sacar el admin del bundle publico
fcarvajalbrown Aug 26, 2026
3a61201
feat(a11y): panel de preferencias con cada opcion por separado
fcarvajalbrown Aug 26, 2026
d198fa0
Merge branch main en feat/accessibility-controls
fcarvajalbrown Aug 26, 2026
e632ee6
fix(tests): arreglar las seis pruebas e2e que venian rojas de main
fcarvajalbrown Aug 26, 2026
022fb96
feat(a11y): interruptor maestro para prender todo de una vez
fcarvajalbrown Aug 26, 2026
82e8178
fix(a11y): anillo de foco en las casillas y bloqueo de scroll en el p…
fcarvajalbrown Aug 26, 2026
77f2d57
chore: ignorar CLAUDE.md, que es guia mia y no del proyecto
fcarvajalbrown Aug 26, 2026
0d807a6
fix(hero): dejar transparente el canvas de corazones
fcarvajalbrown Aug 26, 2026
d6834b4
fix(a11y): que un valor guardado invalido no pise el tema
fcarvajalbrown Aug 26, 2026
0837776
merge: traer main con el 404, el sitemap y los metadatos sociales
fcarvajalbrown Aug 26, 2026
d46ba61
test(hero): cubrir el fondo transparente del canvas de corazones
fcarvajalbrown Aug 26, 2026
7cd8ef5
Merge pull request #22 from VRTon/feat/accessibility-controls
ElMoha943 Sep 2, 2026
25c36b0
chore(deps-dev): bump browserslist from 4.28.2 to 4.28.8
dependabot[bot] Sep 2, 2026
3ede005
chore(deps-dev): bump postcss-selector-parser from 6.1.2 to 6.1.4
dependabot[bot] Sep 2, 2026
16b8b3f
Merge pull request #29 from VRTon/dependabot/npm_and_yarn/postcss-sel…
ElMoha943 Sep 2, 2026
170f810
Merge pull request #28 from VRTon/dependabot/npm_and_yarn/browserslis…
ElMoha943 Sep 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ test-results
public/src
eslint-report.txt
coverage/
CLAUDE.md
.vite/
uploads/images/collaborators/
uploads/images/events/
18 changes: 16 additions & 2 deletions content/i18n/en.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,22 @@ updatedAt: "2026-05-21T03:25:31.940Z"
"switch_to_light": "Switch to light mode"
},
"a11y": {
"enable": "Enable accessibility mode: higher contrast, larger text and reduced motion",
"disable": "Disable accessibility mode"
"open": "Accessibility preferences",
"title": "Accessibility preferences",
"close": "Close",
"master": "Turn on every option",
"theme_label": "Color theme",
"theme_system": "Use system setting",
"theme_light": "Light",
"theme_dark": "Dark",
"text_size_label": "Text size",
"text_normal": "Normal",
"text_large": "Large",
"text_xlarge": "Extra large",
"high_contrast": "High contrast",
"reduce_motion": "Reduce motion",
"underline_links": "Underline links",
"reset": "Reset preferences"
},
"itinerary": {
"schedule": "Activity schedule",
Expand Down
18 changes: 16 additions & 2 deletions content/i18n/es.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,22 @@ updatedAt: "2026-05-21T03:25:31.942Z"
"switch_to_light": "Cambiar a modo claro"
},
"a11y": {
"enable": "Activar modo accesibilidad: mas contraste, letra mas grande y menos animaciones",
"disable": "Desactivar modo accesibilidad"
"open": "Preferencias de accesibilidad",
"title": "Preferencias de accesibilidad",
"close": "Cerrar",
"master": "Activar todas las opciones",
"theme_label": "Tema de color",
"theme_system": "Usar ajuste del sistema",
"theme_light": "Claro",
"theme_dark": "Oscuro",
"text_size_label": "Tamaño del texto",
"text_normal": "Normal",
"text_large": "Grande",
"text_xlarge": "Muy grande",
"high_contrast": "Alto contraste",
"reduce_motion": "Reducir animaciones",
"underline_links": "Subrayar enlaces",
"reset": "Restablecer preferencias"
},
"itinerary": {
"schedule": "Programación de actividades",
Expand Down
57 changes: 30 additions & 27 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,9 @@
"dev": "concurrently -n PUB,ADMIN -c \"cyan,magenta\" \"vite\" \"vite --config vite-admin.config.ts --port 5174\"",
"dev:admin": "pkill -f 'vite.*5174' 2>/dev/null; npx vite --config vite-admin.config.ts --port 5174",
"build": "vite build",
"typecheck": "tsc --noEmit",
"test:prepush": "npm run test:drag && npm run build",
"test:drag": "node --test src/utils/theme.test.js src/utils/accessibility.test.js src/pages/adminDragModel.test.js src/pages/eventPageModel.test.js src/utils/mediaEmbeds.test.js src/utils/adminMediaUpload.test.js src/utils/adminAssetApiValidation.test.js src/utils/adminPathSecurity.test.js src/components/itinerary/itineraryModel.test.js src/components/home/homepageRefinements.test.js",
"test:drag": "node --test src/utils/theme.test.js src/utils/accessibility.test.js src/pages/adminDragModel.test.js src/pages/eventPageModel.test.js src/utils/mediaEmbeds.test.js src/utils/adminMediaUpload.test.js src/utils/adminAssetApiValidation.test.js src/utils/adminPathSecurity.test.js src/components/itinerary/itineraryModel.test.js src/components/home/homepageRefinements.test.js src/components/home/heroCanvasBackdrop.test.js",
"test:e2e": "npm run generate:content && playwright test",
"test:e2e:base-path": "playwright test --config playwright.base-path.config.ts",
"setup:hooks": "git config core.hooksPath .githooks",
Expand Down
1 change: 1 addition & 0 deletions playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { defineConfig, devices } from 'playwright/test';

export default defineConfig({
testDir: './tests/e2e',
testIgnore: ['homepageBasePath.spec.ts', 'legalBasePath.spec.ts'],
fullyParallel: true,
reporter: 'line',
use: {
Expand Down
18 changes: 16 additions & 2 deletions public/api/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,22 @@
"switch_to_light": "Switch to light mode"
},
"a11y": {
"enable": "Enable accessibility mode: higher contrast, larger text and reduced motion",
"disable": "Disable accessibility mode"
"open": "Accessibility preferences",
"title": "Accessibility preferences",
"close": "Close",
"master": "Turn on every option",
"theme_label": "Color theme",
"theme_system": "Use system setting",
"theme_light": "Light",
"theme_dark": "Dark",
"text_size_label": "Text size",
"text_normal": "Normal",
"text_large": "Large",
"text_xlarge": "Extra large",
"high_contrast": "High contrast",
"reduce_motion": "Reduce motion",
"underline_links": "Underline links",
"reset": "Reset preferences"
},
"itinerary": {
"schedule": "Activity schedule",
Expand Down
18 changes: 16 additions & 2 deletions public/api/i18n/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,22 @@
"switch_to_light": "Cambiar a modo claro"
},
"a11y": {
"enable": "Activar modo accesibilidad: mas contraste, letra mas grande y menos animaciones",
"disable": "Desactivar modo accesibilidad"
"open": "Preferencias de accesibilidad",
"title": "Preferencias de accesibilidad",
"close": "Cerrar",
"master": "Activar todas las opciones",
"theme_label": "Tema de color",
"theme_system": "Usar ajuste del sistema",
"theme_light": "Claro",
"theme_dark": "Oscuro",
"text_size_label": "Tamaño del texto",
"text_normal": "Normal",
"text_large": "Grande",
"text_xlarge": "Muy grande",
"high_contrast": "Alto contraste",
"reduce_motion": "Reducir animaciones",
"underline_links": "Subrayar enlaces",
"reset": "Restablecer preferencias"
},
"itinerary": {
"schedule": "Programación de actividades",
Expand Down
30 changes: 14 additions & 16 deletions public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,6 @@
<meta name="twitter:title" content="VRTon" />
<meta name="twitter:description" content="Usando tecnologia para cambiar vidas a traves de la filantropia en realidad virtual." />
<meta name="twitter:image" content="https://vrton.github.io/vrton-cms/android-chrome-512x512.png" />
<!--
Resuelve el tema antes del primer pintado para que no haya flash blanco
al cargar en modo oscuro. Tiene que ser inline y sincrono: si esperara al
bundle de React, la pagina ya se dibujo clara.

Duplica a proposito la logica de src/utils/theme.js (resolveTheme y
applyTheme). Son seis lineas y no hay forma de importar el modulo aca sin
volver a introducir el flash. Si cambia la clave o los colores, hay que
tocar los dos lados.
-->
<script>
(function () {
try {
Expand All @@ -42,13 +32,21 @@
meta.setAttribute('content', theme === 'dark' ? '#12100f' : '#ffffff');
}

// Modo accesible, por el mismo motivo: sin esto la pagina se dibuja
// con la tipografia normal y salta al tamano grande recien cuando
// monta React. La clase del body la pone React, porque el <body>
// todavia no existe en este punto del <head>.
if (window.localStorage.getItem('vrton-accessibility') === 'on') {
document.documentElement.setAttribute('data-a11y', 'on');
var raw = window.localStorage.getItem('vrton-accessibility');
var textSize = 'normal';
try {
if (raw === 'on') {
textSize = 'large';
} else if (raw && raw !== 'off') {
var parsed = JSON.parse(raw);
if (parsed && (parsed.textSize === 'large' || parsed.textSize === 'xlarge')) {
textSize = parsed.textSize;
}
}
} catch (e) {
textSize = 'normal';
}
document.documentElement.setAttribute('data-a11y-text-size', textSize);
} catch (e) {
document.documentElement.setAttribute('data-theme', 'light');
}
Expand Down
14 changes: 2 additions & 12 deletions src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,12 @@ import { useEffect } from 'react';
import { Navigate, Route, Routes, useLocation } from 'react-router-dom';
import { useTranslation } from 'react-i18next';
import PublicLayout from './components/layout/PublicLayout';
import AdminShell from './components/layout/AdminShell';
import HomePage from './pages/HomePage';
import NotFoundPage from './pages/NotFoundPage';
import PageRenderer from './pages/PageRenderer';
import EventPage from './pages/EventPage';
import AdminPage from './pages/AdminPage';
import { DEFAULT_LANGUAGE, SUPPORTED_LANGUAGES } from './i18n/languages';
import { useAccessibilityMode } from './hooks/useAccessibility.ts';
import { useReduceMotion } from './hooks/useAccessibility.ts';

type LegalSection = 'terms' | 'code-of-conduct' | 'volunteering';

Expand Down Expand Up @@ -39,12 +37,10 @@ function LegacyLegalRedirect({
return <Navigate replace to={`${basePath}#${anchors[language][section]}`} />;
}

const IS_DEV = import.meta.env.DEV;

function App() {
const location = useLocation();
const { i18n } = useTranslation();
const reduceMotion = useAccessibilityMode();
const reduceMotion = useReduceMotion();

useEffect(() => {
const firstSegment = location.pathname.split('/').filter(Boolean)[0];
Expand Down Expand Up @@ -111,12 +107,6 @@ function App() {

return (
<Routes>
{IS_DEV && (
<Route element={<AdminShell />}>
<Route path="/admin" element={<AdminPage />} />
</Route>
)}

<Route element={<PublicLayout />}>
{legacyLegalRoutes.map((route) => (
<Route
Expand Down
Loading