From ca7b159657035af568d6c419bec9f1237a5c0c83 Mon Sep 17 00:00:00 2001 From: vforchino Date: Wed, 29 Apr 2026 13:39:09 -0300 Subject: [PATCH] =?UTF-8?q?Primer=20commit=20=E2=80=94=20OPSV=20Dashboard?= =?UTF-8?q?=20de=20siniestralidad=20vial?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 30 + README.md | 151 + eslint.config.js | 29 + index.html | 16 + opsv-arquitectura-v2 (1).html | 888 ++++ package-lock.json | 3831 +++++++++++++++++ package.json | 36 + public/favicon.svg | 1 + public/icons.svg | 24 + public/logo-opsv.png | Bin 0 -> 311178 bytes src/App.css | 184 + src/App.jsx | 23 + src/assets/hero.png | Bin 0 -> 44919 bytes src/assets/react.svg | 1 + src/assets/vite.svg | 1 + src/components/DebugPanel.jsx | 127 + src/components/ProtectedRoute.jsx | 27 + .../charts/DistribucionLocalidad.jsx | 74 + src/components/charts/DonutGravedad.jsx | 67 + src/components/charts/EstadoOcupante.jsx | 164 + src/components/charts/FranjaHoraria.jsx | 195 + src/components/charts/GeneroPersonas.jsx | 103 + src/components/charts/GravedadSiniestro.jsx | 35 + src/components/charts/PerfilVictimas.jsx | 236 + src/components/charts/PorLocalidad.jsx | 114 + src/components/charts/PorTipoSiniestro.jsx | 118 + src/components/charts/ProteccionPersonas.jsx | 281 ++ src/components/charts/RangoEtario.jsx | 66 + src/components/charts/RolPersona.jsx | 118 + src/components/charts/SerieHistorica.jsx | 245 ++ src/components/charts/SiniestrosPorMes.jsx | 123 + src/components/charts/TipoInvolucrado.jsx | 193 + src/components/charts/TipoSiniestro.jsx | 116 + src/components/charts/TipoVia.jsx | 30 + src/components/charts/ZonaOcurrencia.jsx | 104 + src/components/layout/Sidebar.jsx | 101 + src/components/layout/Topbar.jsx | 293 ++ src/components/ui/ChartCard.jsx | 47 + src/components/ui/ErrorBanner.jsx | 10 + src/components/ui/FilterSelect.jsx | 119 + src/components/ui/KPICard.jsx | 46 + src/components/ui/LoadingSpinner.jsx | 9 + src/components/ui/PdfExportModal.jsx | 172 + src/components/ui/ThemeToggle.jsx | 34 + src/hooks/useAuth.jsx | 123 + src/hooks/useChartTheme.js | 37 + src/hooks/useData.js | 91 + src/hooks/useSiniestralidad.js | 114 + src/index.css | 79 + src/lib/supabase.js | 16 + src/main.jsx | 14 + src/pages/Admin.jsx | 193 + src/pages/Dashboard.jsx | 219 + src/pages/ImportarCSV.jsx | 500 +++ src/pages/Login.jsx | 130 + src/pages/SecFatales.jsx | 117 + src/pages/SecHistorica.jsx | 313 ++ src/pages/SecLesionados.jsx | 114 + src/pages/SecResumen.jsx | 106 + src/pages/SecSinLesiones.jsx | 100 + src/pages/SecSintesis.jsx | 179 + src/pages/SecVeranoVivo.jsx | 505 +++ src/utils/calculos.js | 541 +++ src/utils/colores.js | 15 + src/utils/exportPdf.js | 143 + tailwind.config.js | 5 + vite.config.js | 10 + 67 files changed, 12246 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 eslint.config.js create mode 100644 index.html create mode 100644 opsv-arquitectura-v2 (1).html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/favicon.svg create mode 100644 public/icons.svg create mode 100644 public/logo-opsv.png create mode 100644 src/App.css create mode 100644 src/App.jsx create mode 100644 src/assets/hero.png create mode 100644 src/assets/react.svg create mode 100644 src/assets/vite.svg create mode 100644 src/components/DebugPanel.jsx create mode 100644 src/components/ProtectedRoute.jsx create mode 100644 src/components/charts/DistribucionLocalidad.jsx create mode 100644 src/components/charts/DonutGravedad.jsx create mode 100644 src/components/charts/EstadoOcupante.jsx create mode 100644 src/components/charts/FranjaHoraria.jsx create mode 100644 src/components/charts/GeneroPersonas.jsx create mode 100644 src/components/charts/GravedadSiniestro.jsx create mode 100644 src/components/charts/PerfilVictimas.jsx create mode 100644 src/components/charts/PorLocalidad.jsx create mode 100644 src/components/charts/PorTipoSiniestro.jsx create mode 100644 src/components/charts/ProteccionPersonas.jsx create mode 100644 src/components/charts/RangoEtario.jsx create mode 100644 src/components/charts/RolPersona.jsx create mode 100644 src/components/charts/SerieHistorica.jsx create mode 100644 src/components/charts/SiniestrosPorMes.jsx create mode 100644 src/components/charts/TipoInvolucrado.jsx create mode 100644 src/components/charts/TipoSiniestro.jsx create mode 100644 src/components/charts/TipoVia.jsx create mode 100644 src/components/charts/ZonaOcurrencia.jsx create mode 100644 src/components/layout/Sidebar.jsx create mode 100644 src/components/layout/Topbar.jsx create mode 100644 src/components/ui/ChartCard.jsx create mode 100644 src/components/ui/ErrorBanner.jsx create mode 100644 src/components/ui/FilterSelect.jsx create mode 100644 src/components/ui/KPICard.jsx create mode 100644 src/components/ui/LoadingSpinner.jsx create mode 100644 src/components/ui/PdfExportModal.jsx create mode 100644 src/components/ui/ThemeToggle.jsx create mode 100644 src/hooks/useAuth.jsx create mode 100644 src/hooks/useChartTheme.js create mode 100644 src/hooks/useData.js create mode 100644 src/hooks/useSiniestralidad.js create mode 100644 src/index.css create mode 100644 src/lib/supabase.js create mode 100644 src/main.jsx create mode 100644 src/pages/Admin.jsx create mode 100644 src/pages/Dashboard.jsx create mode 100644 src/pages/ImportarCSV.jsx create mode 100644 src/pages/Login.jsx create mode 100644 src/pages/SecFatales.jsx create mode 100644 src/pages/SecHistorica.jsx create mode 100644 src/pages/SecLesionados.jsx create mode 100644 src/pages/SecResumen.jsx create mode 100644 src/pages/SecSinLesiones.jsx create mode 100644 src/pages/SecSintesis.jsx create mode 100644 src/pages/SecVeranoVivo.jsx create mode 100644 src/utils/calculos.js create mode 100644 src/utils/colores.js create mode 100644 src/utils/exportPdf.js create mode 100644 tailwind.config.js create mode 100644 vite.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9cd2cf1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,30 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Variables de entorno (todas las variantes) +.env +.env.development +.env.production + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +Supabase Dashboard.docx \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..8525d2a --- /dev/null +++ b/README.md @@ -0,0 +1,151 @@ +# OPSV — Dashboard de Siniestralidad Vial + +> Plataforma interactiva de análisis y visualización de datos de siniestros viales de la provincia de Santa Cruz. + +Desarrollado por el **Observatorio Provincial de Seguridad Vial (OPSV)**, +dependiente de la **Agencia Provincial de Seguridad Vial**, + **Ministerio de Seguridad de la Provincia de Santa Cruz**. + +--- + +## ¿Qué es este proyecto? + +El OPSV Dashboard es una aplicación web que permite visualizar, analizar y exportar datos de siniestros viales registrados en la provincia. Incluye filtros por período, campañas de seguridad vial (como *Verano Vivo* ), desglose por rutas, localidades, tipo de siniestro y severidad (fatal, con lesiones, sin lesiones). + +La aplicación se conecta a una base de datos en la nube (**Supabase**) para obtener los datos en tiempo real y permite generar reportes en PDF desde el propio navegador. + +--- + +## Tecnologías utilizadas + +| Tecnología | ¿Para qué se usa? | +|---|---| +| **React** | Construye la interfaz visual (pantallas, gráficos, botones) | +| **Vite** | Motor que arranca la aplicación en la computadora para desarrollar | +| **Tailwind CSS** | Sistema de estilos visuales (colores, espaciado, tipografía) | +| **Supabase** | Base de datos en la nube, tres bases de datos (siniestros, Involucrados, Personas. Con KeyID para vincularlas ) Motor de base de datos PostgreSQL| +| **Recharts** | Librería para dibujar los gráficos (líneas, barras, donuts) | +| **React Router** | Maneja la navegación entre secciones del dashboard | +| **jsPDF + html2canvas** | Genera y descarga reportes en formato PDF | +| **Lucide React** | Íconos de la interfaz | + +--- + +## Estructura del proyecto + +``` +opsv-dashboard/ +├── src/ ← Todo el código fuente de la aplicación +│ ├── components/ ← Componentes visuales reutilizables (tarjetas, botones, etc.) +│ ├── sections/ ← Secciones del dashboard +│ ├── utils/ ← Funciones de cálculo y datos históricos +│ └── main.jsx ← Punto de entrada de la aplicación +├── dist/ ← Versión compilada lista para publicar en internet +├── .env.local ← Variables de entorno secretas (No subir a Github) +├── index.html ← Página principal de la aplicación +├── package.json ← Lista de dependencias y comandos del proyecto +├── vite.config.js ← Configuración del motor de desarrollo +└── tailwind.config.js ← Configuración del sistema de estilos +``` + +--- + +## Requisitos previos + +Antes de poder ejecutar el proyecto en entorno local se necesita: + +- **Node.js** (versión 18 o superior) → [Descargar en nodejs.org](https://nodejs.org) +- **npm** (se instala automáticamente junto con Node.js) + +Para verificar que están instalados, abrí una terminal y ejecutá: + +```bash +node --version +npm --version +``` + +Ambos comandos deben mostrar un número de versión. + +--- + +## Instalación paso a paso + +### 1. Clonar o copiar el proyecto + +Si usás Git: + +```bash +git clone +cd opsv-dashboard +``` + +Si no usás Git, simplemente copiá la carpeta del proyecto a tu computadora. + +### 2. Instalar las dependencias + +Abrí una terminal dentro de la carpeta del proyecto y ejecutá: + +```bash +npm install +``` + +> Esto descarga todas las herramientas necesarias (React, Recharts, etc.) dentro de la carpeta `node_modules`. Puede tardar unos minutos la primera vez. + +### 3. Configurar las variables de entorno + +Creá un archivo llamado `.env.local` en la raíz del proyecto (si no existe ya) con el siguiente contenido: + +``` +VITE_SUPABASE_URL=https://tu-proyecto.supabase.co +VITE_SUPABASE_ANON_KEY=tu-clave-publica-aqui +``` + +> Estos valores los encontrás en el panel de tu proyecto en [supabase.com](https://supabase.com) → Settings → API. + +### 4. Iniciar la aplicación + +```bash +npm run dev +``` + +Luego abrí el navegador y entrá a: **http://localhost:5173** + +--- + +## Comandos disponibles + +| Comando | ¿Qué hace? | +|---|---| +| `npm run dev` | Inicia el servidor de desarrollo local (para trabajar y probar cambios) | +| `npm run build` | Compila la aplicación para producción (genera la carpeta `dist/`) | +| `npm run preview` | Previsualiza la versión compilada antes de publicarla | + +--- + +## Despliegue (publicar en internet) + +Para publicar la aplicación en un servidor: + +1. Ejecutá `npm run build`. Esto genera la carpeta `dist/` con todos los archivos listos. +2. Subí el contenido de la carpeta `dist/` al servidor web o servicio de hosting (Netlify, Vercel, servidor propio, etc.). + +> **Importante:** Las variables de entorno del archivo `.env.local` deben configurarse también en el entorno de producción. Nunca subas el archivo `.env.local` a un repositorio público. + +--- + +## Seguridad + +- El archivo `.env.local` contiene claves de acceso a la base de datos. Está incluido en `.gitignore` para que **nunca se suba accidentalmente** a GitHub u otro repositorio. +- La aplicación utiliza la **clave pública (anon key)** de Supabase, cuyo acceso está limitado por las políticas de seguridad (Row Level Security) configuradas en la base de datos. + +--- + +## Contacto y mantenimiento + +**Observatorio Provincial de Seguridad Vial (OPSV)** +Agencia Provincial de Seguridad Vial +Ministerio de Seguridad — Provincia de Santa Cruz + +--- + +*Última actualización: abril 2026* diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..4fa125d --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,29 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{js,jsx}'], + extends: [ + js.configs.recommended, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + parserOptions: { + ecmaVersion: 'latest', + ecmaFeatures: { jsx: true }, + sourceType: 'module', + }, + }, + rules: { + 'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }], + }, + }, +]) diff --git a/index.html b/index.html new file mode 100644 index 0000000..41c0925 --- /dev/null +++ b/index.html @@ -0,0 +1,16 @@ + + + + + + + + + + opsv-dashboard + + +
+ + + diff --git a/opsv-arquitectura-v2 (1).html b/opsv-arquitectura-v2 (1).html new file mode 100644 index 0000000..92447dc --- /dev/null +++ b/opsv-arquitectura-v2 (1).html @@ -0,0 +1,888 @@ + + + + + +OPSV — Plan de Arquitectura v2.0 + + + + + + + + +
+
Especificación Técnica
+

OPSV Dashboard v2.0
Plan de Arquitectura

+

Documento de referencia para el desarrollo con Claude Code. Define stack tecnológico, estructura de base de datos, roles de usuario y fases de desarrollo.

+
+ Versión 2.0 + Fecha Abril 2026 + Stack React + Supabase + Vercel + Modalidad Solo developer · Claude Code +
+
+ +
+ + +
+
1
+

Decisiones de arquitectura

+
+ +
+
+
⚛️
+

Frontend

+

React + Vite — mismo entorno que usaste en el dashboard anterior. Claude Code lo maneja perfectamente.

+ React 18 + Vite 5 +
+
+
🗄️
+

Backend + Auth

+

Supabase: base de datos PostgreSQL, autenticación email/password, storage para los CSV. Todo gratuito.

+ Supabase Free Tier +
+
+
🚀
+

Hosting

+

Vercel: deploy automático desde GitHub, HTTPS incluido, dominio gratuito bajo vercel.app.

+ Vercel Hobby (gratis) +
+
+
🎨
+

UI + Gráficos

+

Tailwind CSS para estilos. Recharts para visualizaciones (mismo que ya usás). Lucide para iconos.

+ Tailwind + Recharts +
+
+ +
+ ¿Por qué no GitHub Pages? GitHub Pages es estático puro — no puede manejar autenticación ni guardar datos. Vercel sí, y también es 100% gratuito con deploy automático cada vez que hacés push. +
+ + +
+
2
+

Stack tecnológico completo

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CapaTecnologíaPara qué sirveCosto
UI FrameworkReact 18 + Vite + Interfaz del dashboard y panel admin +
Familiar para Claude Code, ecosistema enorme
+
Gratis
EstilosTailwind CSS v3 + Diseño responsivo, paleta institucional OPSV +
Claude Code genera Tailwind excelente
+
Gratis
GráficosRecharts + Todos los gráficos del dashboard actual +
Mismo que el dashboard anterior → migración directa
+
Gratis
Base de datosSupabase PostgreSQL + Config del dashboard, textos editables, roles, metadatos de CSV +
500MB gratis, más que suficiente para configuración
+
Gratis
AutenticaciónSupabase Auth + Login email/contraseña con roles (superadmin, admin, editor) +
Email confirmado + recupero de contraseña incluidos
+
Gratis
Storage CSVSupabase Storage + Almacenamiento de los 3 archivos CSV mensuales +
1GB gratis, historial de versiones posible
+
Gratis
HostingVercel + Publicación del sitio, deploy automático desde GitHub +
Cada push = nueva versión publicada en segundos
+
Gratis
RepositorioGitHub + Control de versiones, integración con Vercel +
Todo el código centralizado, historial completo
+
Gratis
+ + +
+
3
+

Diagrama de arquitectura

+
+ +
+ + + + + + + + USUARIOS + FRONTEND · VERCEL + BACKEND · SUPABASE + + + + + 👤 + Usuario Público + Sin login requerido + + Acceso al dashboard + + + + + 🔐 + Administrador + Login email/password + + superadmin | admin + + editor + + + + + + + + + + + Dashboard Público + / · sin autenticación + + React + Recharts + + + + Panel Admin + /admin · ruta protegida + Upload CSV · Editar textos + + React Router + Auth guard + + + + Login / Auth + /login · email + password + + + + GitHub Repository + Push → Vercel auto-deploy + Variables de entorno Supabase + en Vercel (VITE_SUPABASE_URL) + + + + + + + + + + + + + Supabase Auth + JWT · Roles · Email confirm + + user_roles table + + + + PostgreSQL DB + dashboard_config + user_roles · datasets + Textos · Chart config + + Row Level Security + + + + Supabase Storage + siniestros.csv + personas.csv · involucrados.csv + + + REST API + SDK Client + + + Free tier · 500MB DB + 1GB Storage + Respaldo automático · SSL incluido + +
+ + +
+
4
+

Roles de usuario y permisos

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RolVer dashboardSubir CSVEditar textos/resumenConfig gráficosGestionar usuariosAcceso
Superadmin✓ Crear/borrar adminsLogin requerido
AdminLogin requerido
Editor✓ Solo textosLogin requerido
Público✓ Solo lecturaSin login · acceso libre
+ + +
+
5
+

Esquema de base de datos (Supabase)

+
+ +
+
+
user_roles
+
    +
  • iduuid PK
  • +
  • user_iduuid FK auth
  • +
  • roleenum
  • +
  • created_attimestamp
  • +
+
+
+
datasets
+
    +
  • iduuid PK
  • +
  • typetext
  • +
  • yearinteger
  • +
  • monthinteger
  • +
  • storage_pathtext
  • +
  • uploaded_byuuid FK
  • +
  • created_attimestamp
  • +
+
+
+
dashboard_config
+
    +
  • iduuid PK
  • +
  • keytext unique
  • +
  • valuejsonb
  • +
  • updated_byuuid FK
  • +
  • updated_attimestamp
  • +
+
+
+
resumen_content
+
    +
  • iduuid PK
  • +
  • yearinteger
  • +
  • monthinteger
  • +
  • titletext
  • +
  • bodytext (md)
  • +
  • publishedboolean
  • +
  • created_byuuid FK
  • +
+
+
+
chart_config
+
    +
  • iduuid PK
  • +
  • chart_keytext unique
  • +
  • titletext
  • +
  • chart_typeenum
  • +
  • color_palettejsonb
  • +
  • visibleboolean
  • +
  • updated_attimestamp
  • +
+
+
+ +
+ Row Level Security (RLS) — Supabase protege cada tabla con políticas: el público solo puede leer, los admins pueden escribir. Esto se configura una vez con SQL y funciona automáticamente. +
+ + +
+
6
+

Estructura del proyecto

+
+ +
+opsv-dashboard/ +├── src/ +│ ├── components/ # Componentes reutilizables +│ │ ├── charts/ # BarChart, LineChart, etc. +│ │ ├── ui/ # Button, Card, Modal, Input +│ │ └── layout/ # Navbar, Sidebar, Footer +│ │ +│ ├── pages/ # Páginas / rutas +│ │ ├── Dashboard.jsx # / → público +│ │ ├── Login.jsx # /login +│ │ └── admin/ +│ │ ├── AdminPanel.jsx # /admin → panel principal +│ │ ├── UploadCSV.jsx # /admin/upload +│ │ ├── EditResumen.jsx # /admin/resumen +│ │ ├── EditCharts.jsx # /admin/charts +│ │ └── ManageUsers.jsx # /admin/users (superadmin) +│ │ +│ ├── hooks/ # Custom hooks +│ │ ├── useAuth.js # Estado de sesión Supabase +│ │ ├── useCSVData.js # Carga y parseo de CSV +│ │ └── useDashConfig.js # Config editable desde DB +│ │ +│ ├── lib/ +│ │ └── supabase.js # Cliente Supabase (1 línea) +│ │ +│ ├── utils/ +│ │ └── parseCSV.js # Lógica de procesamiento CSV +│ │ +│ └── App.jsx # Rutas + Auth provider +│ +├── .env.local # VITE_SUPABASE_URL + ANON_KEY (no subir a GitHub) +├── .env.example # Template sin valores reales (sí subir) +├── vercel.json # Configuración de Vercel (SPA redirect) +├── tailwind.config.js # Paleta institucional OPSV #252C61 +└── vite.config.js +
+ + +
+
7
+

Fases de desarrollo

+
+ +
+
+
+ Fase + 1 + 2–3 sem +
+
+

Fundación del proyecto

+
    +
  • Crear proyecto en Supabase (auth + storage + DB)
  • +
  • Scaffold React + Vite con Tailwind y paleta OPSV
  • +
  • Sistema de autenticación: login, logout, sesión persistente
  • +
  • Ruta protegida /admin con auth guard
  • +
  • Conectar Vercel ↔ GitHub (deploy automático)
  • +
+
Sitio online vacío con login funcional y deploy automático
+
+
+ +
+
+
Fase
+
2
+
3–4 sem
+
+
+

Dashboard público

+
    +
  • Upload manual de los 3 CSV desde panel admin
  • +
  • Parser CSV en el cliente (Papa Parse)
  • +
  • Migrar todos los gráficos actuales (Recharts)
  • +
  • Filtros por año y mes funcionales
  • +
  • Sección Resumen con contenido desde DB
  • +
  • Diseño responsivo institucional
  • +
+
Dashboard público funcional idéntico al actual, pero con datos dinámicos
+
+
+ +
+
+
Fase
+
3
+
3–4 sem
+
+
+

Panel administrador

+
    +
  • Subida de CSV mensuales (3 archivos a la vez)
  • +
  • Editor de texto enriquecido para sección Resumen
  • +
  • Editor de títulos y configuración de gráficos
  • +
  • Selector de tipo de gráfico (barra/línea/área) por visualización
  • +
  • Selector de colores con paleta institucional
  • +
  • Vista previa antes de publicar
  • +
+
Panel admin completo con edición en tiempo real y previsualización
+
+
+ +
+
+
Fase
+
4
+
2–3 sem
+
+
+

Escalabilidad y pulido

+
    +
  • Gestión de múltiples usuarios con roles (admin, editor)
  • +
  • Historial de versiones de CSV por mes/año
  • +
  • Exportación PDF desde el panel admin
  • +
  • Notificaciones de carga exitosa / errores
  • +
  • Pruebas finales y documentación básica
  • +
+
Sistema production-ready con multi-usuario y gestión de versiones
+
+
+
+ +
+ Estimación realista para una persona con Claude Code: Fases 1 + 2 son las más importantes y deberían estar listas en ~6 semanas trabajando 2–3 horas/día. Las fases 3 y 4 pueden ir en paralelo con el uso real del sistema. +
+ +
+ +
+ OPSV — Observatorio Provincial de Seguridad Vial · Santa Cruz  |  + Arquitectura v2.0 · Abril 2026  |  + Stack: React + Supabase + Vercel +
+ + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..78e874c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3831 @@ +{ + "name": "opsv-dashboard", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "opsv-dashboard", + "version": "0.0.0", + "dependencies": { + "@supabase/supabase-js": "^2.103.0", + "html2canvas": "^1.4.1", + "html2canvas-pro": "^2.0.2", + "jspdf": "^4.2.1", + "lucide-react": "^1.8.0", + "react": "^19.2.4", + "react-dom": "^19.2.4", + "react-router-dom": "^7.14.0", + "recharts": "^3.8.1" + }, + "devDependencies": { + "@eslint/js": "^9.39.4", + "@tailwindcss/vite": "^4.2.2", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "eslint": "^9.39.4", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.5.2", + "globals": "^17.4.0", + "tailwindcss": "^4.2.2", + "vite": "^8.0.4" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.2.tgz", + "integrity": "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz", + "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", + "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.5" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz", + "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.14.0", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.5", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz", + "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.3.tgz", + "integrity": "sha512-xK9sGVbJWYb08+mTJt3/YV24WxvxpXcXtP6B172paPZ+Ts69Re9dAr7lKwJoeIx8OoeuimEiRZ7umkiUVClmmQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.124.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.124.0.tgz", + "integrity": "sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@reduxjs/toolkit": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.11.2.tgz", + "integrity": "sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@standard-schema/utils": "^0.3.0", + "immer": "^11.0.0", + "redux": "^5.0.1", + "redux-thunk": "^3.1.0", + "reselect": "^5.1.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18 || ^19", + "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, + "node_modules/@reduxjs/toolkit/node_modules/immer": { + "version": "11.1.4", + "resolved": "https://registry.npmjs.org/immer/-/immer-11.1.4.tgz", + "integrity": "sha512-XREFCPo6ksxVzP4E0ekD5aMdf8WMwmdNaz6vuvxgI40UaEiu6q3p8X52aU6GdyvLY3XXX/8R7JOTXStz/nBbRw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.15.tgz", + "integrity": "sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.15.tgz", + "integrity": "sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.15.tgz", + "integrity": "sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.15.tgz", + "integrity": "sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.15.tgz", + "integrity": "sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.15.tgz", + "integrity": "sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.15.tgz", + "integrity": "sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.15.tgz", + "integrity": "sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.15.tgz", + "integrity": "sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.15.tgz", + "integrity": "sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.15.tgz", + "integrity": "sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.15.tgz", + "integrity": "sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.15.tgz", + "integrity": "sha512-ApLruZq/ig+nhaE7OJm4lDjayUnOHVUa77zGeqnqZ9pn0ovdVbbNPerVibLXDmWeUZXjIYIT8V3xkT58Rm9u5Q==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.9.2", + "@emnapi/runtime": "1.9.2", + "@napi-rs/wasm-runtime": "^1.1.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.15.tgz", + "integrity": "sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.15.tgz", + "integrity": "sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.7", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.7.tgz", + "integrity": "sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "license": "MIT" + }, + "node_modules/@supabase/auth-js": { + "version": "2.103.0", + "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.103.0.tgz", + "integrity": "sha512-6zAanO6c+6gpHOlt5Lb9TlBBkJdZiUWkWCJKAxzkywBDcwaHlLJKXnjQGX6GyVCyKRR1e7sTq4re/yRTH6U/9A==", + "license": "MIT", + "dependencies": { + "tslib": "2.8.1" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@supabase/functions-js": { + "version": "2.103.0", + "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.103.0.tgz", + "integrity": "sha512-YrneV2NjskUkkmkZ2Jt2n3elBgbWzV4Y1M9MM370z2Zd5ZPFqFbY8KIoPwuNjtAGE9YrpKBxnbZqeF07BiN9Og==", + "license": "MIT", + "dependencies": { + "tslib": "2.8.1" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@supabase/phoenix": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@supabase/phoenix/-/phoenix-0.4.0.tgz", + "integrity": "sha512-RHSx8bHS02xwfHdAbX5Lpbo6PXbgyf7lTaXTlwtFDPwOIw64NnVRwFAXGojHhjtVYI+PEPNSWwkL90f4agN3bw==", + "license": "MIT" + }, + "node_modules/@supabase/postgrest-js": { + "version": "2.103.0", + "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-2.103.0.tgz", + "integrity": "sha512-rC3sRxYdPZymkp2CZR1MiNQgbOleD01bGsW8VxEKRR5nMkLZ1NgAS1QTQf78Wh30czFyk505ZYr9Od8/mWT2TA==", + "license": "MIT", + "dependencies": { + "tslib": "2.8.1" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@supabase/realtime-js": { + "version": "2.103.0", + "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.103.0.tgz", + "integrity": "sha512-gcPtXzZ6izyyBVf2of7K3dEt8CScPJn8VcSlQq6oWL9QoE1kqfQl0oFrOMHd5qrcADewxI7OxxosLB8W4XqtIQ==", + "license": "MIT", + "dependencies": { + "@supabase/phoenix": "^0.4.0", + "@types/ws": "^8.18.1", + "tslib": "2.8.1", + "ws": "^8.18.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@supabase/storage-js": { + "version": "2.103.0", + "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.103.0.tgz", + "integrity": "sha512-DHmlvdAXwtOmZNbkIZi4lkobPR3XjIzoOgzoz5duMf6G+sDeY015YrzMJCnqdccuYr7X5x4yYuSwF//RoN2dvQ==", + "license": "MIT", + "dependencies": { + "iceberg-js": "^0.8.1", + "tslib": "2.8.1" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@supabase/supabase-js": { + "version": "2.103.0", + "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.103.0.tgz", + "integrity": "sha512-j/6q5+LtXbR/YOLSLhy7Na74RD1cV2v+KwIIuuqMEjk1JpLEEyu0ynwDHpGoxMncDQl+R5FogaVqZm+85lZvtw==", + "license": "MIT", + "dependencies": { + "@supabase/auth-js": "2.103.0", + "@supabase/functions-js": "2.103.0", + "@supabase/postgrest-js": "2.103.0", + "@supabase/realtime-js": "2.103.0", + "@supabase/storage-js": "2.103.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.2.tgz", + "integrity": "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.19.0", + "jiti": "^2.6.1", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.2.2" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.2.tgz", + "integrity": "sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.2.2", + "@tailwindcss/oxide-darwin-arm64": "4.2.2", + "@tailwindcss/oxide-darwin-x64": "4.2.2", + "@tailwindcss/oxide-freebsd-x64": "4.2.2", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.2", + "@tailwindcss/oxide-linux-arm64-gnu": "4.2.2", + "@tailwindcss/oxide-linux-arm64-musl": "4.2.2", + "@tailwindcss/oxide-linux-x64-gnu": "4.2.2", + "@tailwindcss/oxide-linux-x64-musl": "4.2.2", + "@tailwindcss/oxide-wasm32-wasi": "4.2.2", + "@tailwindcss/oxide-win32-arm64-msvc": "4.2.2", + "@tailwindcss/oxide-win32-x64-msvc": "4.2.2" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.2.tgz", + "integrity": "sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.2.tgz", + "integrity": "sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.2.tgz", + "integrity": "sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.2.tgz", + "integrity": "sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.2.tgz", + "integrity": "sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.2.tgz", + "integrity": "sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.2.tgz", + "integrity": "sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.2.tgz", + "integrity": "sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.2.tgz", + "integrity": "sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.2.tgz", + "integrity": "sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.8.1", + "@emnapi/runtime": "^1.8.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.1", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.2.tgz", + "integrity": "sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.2.tgz", + "integrity": "sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.2.tgz", + "integrity": "sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.2.2", + "@tailwindcss/oxide": "4.2.2", + "tailwindcss": "4.2.2" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz", + "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", + "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/pako": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/pako/-/pako-2.0.4.tgz", + "integrity": "sha512-VWDCbrLeVXJM9fihYodcLiIv0ku+AlOa/TQ1SvYOaBuyrSKgEcro95LJyIsJ4vSo6BXIxOKxiJAat04CmST9Fw==", + "license": "MIT" + }, + "node_modules/@types/raf": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.3.tgz", + "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/react": { + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", + "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.1.tgz", + "integrity": "sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-rc.7" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.17", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.17.tgz", + "integrity": "sha512-HdrkN8eVG2CXxeifv/VdJ4A4RSra1DTW8dc/hdxzhGHN8QePs6gKaWM9pHPcpCoxYZJuOZ8drHmbdpLHjCYjLA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001787", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001787.tgz", + "integrity": "sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/canvg": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.11.tgz", + "integrity": "sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@types/raf": "^3.4.0", + "core-js": "^3.8.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.7", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^6.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/core-js": { + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.49.0.tgz", + "integrity": "sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "license": "MIT", + "dependencies": { + "utrie": "^1.0.2" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz", + "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", + "license": "MIT" + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dompurify": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.1.tgz", + "integrity": "sha512-JahakDAIg1gyOm7dlgWSDjV4n7Ip2PKR55NIT6jrMfIgLFgWo81vdr1/QGqWtFNRqXP9UV71oVePtjqS2ebnPw==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optional": true, + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.334", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.334.tgz", + "integrity": "sha512-mgjZAz7Jyx1SRCwEpy9wefDS7GvNPazLthHg8eQMJ76wBdGQQDW33TCrUTvQ4wzpmOrv2zrFoD3oNufMdyMpog==", + "dev": true, + "license": "ISC" + }, + "node_modules/enhanced-resolve": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", + "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-toolkit": { + "version": "1.45.1", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.45.1.tgz", + "integrity": "sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw==", + "license": "MIT", + "workspaces": [ + "docs", + "benchmarks" + ] + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", + "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.2", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "9.39.4", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.5", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", + "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.5.2.tgz", + "integrity": "sha512-hmgTH57GfzoTFjVN0yBwTggnsVUF2tcqi7RJZHqi9lIezSs4eFyAMktA68YD4r5kNw1mxyY4dmkyoFDb3FIqrA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": "^9 || ^10" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-png": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/fast-png/-/fast-png-6.4.0.tgz", + "integrity": "sha512-kAqZq1TlgBjZcLr5mcN6NP5Rv4V2f22z00c3g8vRrwkcqjerx7BEhPbOnWCPqaHUl2XWQBJQvOT/FQhdMT7X/Q==", + "license": "MIT", + "dependencies": { + "@types/pako": "^2.0.3", + "iobuffer": "^5.3.2", + "pako": "^2.1.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "license": "MIT" + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.4.0.tgz", + "integrity": "sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "license": "MIT", + "dependencies": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/html2canvas-pro": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html2canvas-pro/-/html2canvas-pro-2.0.2.tgz", + "integrity": "sha512-9G/t0XgCZWonLwL0JwI7su6NdbOPUY7Ur4Ihpp8+XMaW9ibA2nDXF181Jr6tm94k8lX6sthpaXB3XqEnsMd5Cw==", + "license": "MIT", + "dependencies": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/iceberg-js": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/iceberg-js/-/iceberg-js-0.8.1.tgz", + "integrity": "sha512-1dhVQZXhcHje7798IVM+xoo/1ZdVfzOMIc8/rgVSijRK38EDqOJoGula9N/8ZI5RD8QTxNQtK/Gozpr+qUqRRA==", + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.2.0.tgz", + "integrity": "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/iobuffer": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/iobuffer/-/iobuffer-5.4.0.tgz", + "integrity": "sha512-DRebOWuqDvxunfkNJAlc3IzWIPD5xVxwUNbHr7xKB8E6aLJxIPfNX3CoMJghcFjpv6RWQsrcJbghtEwSPoJqMA==", + "license": "MIT" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jspdf": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-4.2.1.tgz", + "integrity": "sha512-YyAXyvnmjTbR4bHQRLzex3CuINCDlQnBqoSYyjJwTP2x9jDLuKDzy7aKUl0hgx3uhcl7xzg32agn5vlie6HIlQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.6", + "fast-png": "^6.2.0", + "fflate": "^0.8.1" + }, + "optionalDependencies": { + "canvg": "^3.0.11", + "core-js": "^3.6.0", + "dompurify": "^3.3.1", + "html2canvas": "^1.0.0-rc.5" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.8.0.tgz", + "integrity": "sha512-WuvlsjngSk7TnTBJ1hsCy3ql9V9VOdcPkd3PKcSmM34vJD8KG6molxz7m7zbYFgICwsanQWmJ13JlYs4Zp7Arw==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.37", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.37.tgz", + "integrity": "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==", + "dev": true, + "license": "MIT" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "license": "(MIT AND Zlib)" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT", + "optional": true + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.9.tgz", + "integrity": "sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "license": "MIT", + "optional": true, + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/react": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.5.tgz", + "integrity": "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.5.tgz", + "integrity": "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.5" + } + }, + "node_modules/react-is": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.5.tgz", + "integrity": "sha512-Dn0t8IQhCmeIT3wu+Apm1/YVsJXsGWi6k4sPdnBIdqMVtHtv0IGi6dcpNpNkNac0zB2uUAqNX3MHzN8c+z2rwQ==", + "license": "MIT", + "peer": true + }, + "node_modules/react-redux": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", + "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", + "license": "MIT", + "dependencies": { + "@types/use-sync-external-store": "^0.0.6", + "use-sync-external-store": "^1.4.0" + }, + "peerDependencies": { + "@types/react": "^18.2.25 || ^19", + "react": "^18.0 || ^19", + "redux": "^5.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/react-router": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.14.0.tgz", + "integrity": "sha512-m/xR9N4LQLmAS0ZhkY2nkPA1N7gQ5TUVa5n8TgANuDTARbn1gt+zLPXEm7W0XDTbrQ2AJSJKhoa6yx1D8BcpxQ==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.14.0.tgz", + "integrity": "sha512-2G3ajSVSZMEtmTjIklRWlNvo8wICEpLihfD/0YMDxbWK2UyP5EGfnoIn9AIQGnF3G/FX0MRbHXdFcD+rL1ZreQ==", + "license": "MIT", + "dependencies": { + "react-router": "7.14.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/recharts": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-3.8.1.tgz", + "integrity": "sha512-mwzmO1s9sFL0TduUpwndxCUNoXsBw3u3E/0+A+cLcrSfQitSG62L32N69GhqUrrT5qKcAE3pCGVINC6pqkBBQg==", + "license": "MIT", + "workspaces": [ + "www" + ], + "dependencies": { + "@reduxjs/toolkit": "^1.9.0 || 2.x.x", + "clsx": "^2.1.1", + "decimal.js-light": "^2.5.1", + "es-toolkit": "^1.39.3", + "eventemitter3": "^5.0.1", + "immer": "^10.1.1", + "react-redux": "8.x.x || 9.x.x", + "reselect": "5.1.1", + "tiny-invariant": "^1.3.3", + "use-sync-external-store": "^1.2.2", + "victory-vendor": "^37.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "license": "MIT" + }, + "node_modules/redux-thunk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz", + "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==", + "license": "MIT", + "peerDependencies": { + "redux": "^5.0.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "license": "MIT", + "optional": true + }, + "node_modules/reselect": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "license": "MIT" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==", + "license": "MIT OR SEE LICENSE IN FEEL-FREE.md", + "optional": true, + "engines": { + "node": ">= 0.8.15" + } + }, + "node_modules/rolldown": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.15.tgz", + "integrity": "sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.124.0", + "@rolldown/pluginutils": "1.0.0-rc.15" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-rc.15", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.15", + "@rolldown/binding-darwin-x64": "1.0.0-rc.15", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.15", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.15", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.15", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.15", + "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.15", + "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.15", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.15", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.15", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.15", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.15", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.15", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.15" + } + }, + "node_modules/rolldown/node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.15.tgz", + "integrity": "sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g==", + "dev": true, + "license": "MIT" + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackblur-canvas": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz", + "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.14" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/svg-pathdata": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", + "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/tailwindcss": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.2.tgz", + "integrity": "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.2.tgz", + "integrity": "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "license": "MIT", + "dependencies": { + "utrie": "^1.0.2" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "license": "MIT", + "dependencies": { + "base64-arraybuffer": "^1.0.2" + } + }, + "node_modules/victory-vendor": { + "version": "37.3.6", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-37.3.6.tgz", + "integrity": "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==", + "license": "MIT AND ISC", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, + "node_modules/vite": { + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.8.tgz", + "integrity": "sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.8", + "rolldown": "1.0.0-rc.15", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.1.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ws": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..320d167 --- /dev/null +++ b/package.json @@ -0,0 +1,36 @@ +{ + "name": "opsv-dashboard", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@supabase/supabase-js": "^2.103.0", + "html2canvas": "^1.4.1", + "html2canvas-pro": "^2.0.2", + "jspdf": "^4.2.1", + "lucide-react": "^1.8.0", + "react": "^19.2.4", + "react-dom": "^19.2.4", + "react-router-dom": "^7.14.0", + "recharts": "^3.8.1" + }, + "devDependencies": { + "@eslint/js": "^9.39.4", + "@tailwindcss/vite": "^4.2.2", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "eslint": "^9.39.4", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.5.2", + "globals": "^17.4.0", + "tailwindcss": "^4.2.2", + "vite": "^8.0.4" + } +} diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..6893eb1 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/icons.svg b/public/icons.svg new file mode 100644 index 0000000..e952219 --- /dev/null +++ b/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/logo-opsv.png b/public/logo-opsv.png new file mode 100644 index 0000000000000000000000000000000000000000..8caf2b326471d7fd57ada66c924a274c05a6aa3d GIT binary patch literal 311178 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 z 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

IQ%vS*V{UvDyOL=b8`FPSeEdEiKNBUd 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 div { + flex: 1 1 0; + padding: 32px; + @media (max-width: 1024px) { + padding: 24px 20px; + } + } + + .icon { + margin-bottom: 16px; + width: 22px; + height: 22px; + } + + @media (max-width: 1024px) { + flex-direction: column; + text-align: center; + } +} + +#docs { + border-right: 1px solid var(--border); + + @media (max-width: 1024px) { + border-right: none; + border-bottom: 1px solid var(--border); + } +} + +#next-steps ul { + list-style: none; + padding: 0; + display: flex; + gap: 8px; + margin: 32px 0 0; + + .logo { + height: 18px; + } + + a { + color: var(--text-h); + font-size: 16px; + border-radius: 6px; + background: var(--social-bg); + display: flex; + padding: 6px 12px; + align-items: center; + gap: 8px; + text-decoration: none; + transition: box-shadow 0.3s; + + &:hover { + box-shadow: var(--shadow); + } + .button-icon { + height: 18px; + width: 18px; + } + } + + @media (max-width: 1024px) { + margin-top: 20px; + flex-wrap: wrap; + justify-content: center; + + li { + flex: 1 1 calc(50% - 8px); + } + + a { + width: 100%; + justify-content: center; + box-sizing: border-box; + } + } +} + +#spacer { + height: 88px; + border-top: 1px solid var(--border); + @media (max-width: 1024px) { + height: 48px; + } +} + +.ticks { + position: relative; + width: 100%; + + &::before, + &::after { + content: ''; + position: absolute; + top: -4.5px; + border: 5px solid transparent; + } + + &::before { + left: 0; + border-left-color: var(--border); + } + &::after { + right: 0; + border-right-color: var(--border); + } +} diff --git a/src/App.jsx b/src/App.jsx new file mode 100644 index 0000000..a73ddc4 --- /dev/null +++ b/src/App.jsx @@ -0,0 +1,23 @@ +// src/App.jsx +import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom' +import Dashboard from './pages/Dashboard' +import Login from './pages/Login' +import Admin from './pages/Admin' +import ProtectedRoute from './components/ProtectedRoute' + +export default function App() { + return ( + + + } /> + } /> + + + + } /> + } /> + + + ) +} \ No newline at end of file diff --git a/src/assets/hero.png b/src/assets/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..cc51a3d20ad4bc961b596a6adfd686685cd84bb0 GIT binary patch literal 44919 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 JPDHLkV1myZcL)Fg literal 0 HcmV?d00001 diff --git a/src/assets/react.svg b/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/vite.svg b/src/assets/vite.svg new file mode 100644 index 0000000..5101b67 --- /dev/null +++ b/src/assets/vite.svg @@ -0,0 +1 @@ +Vite diff --git a/src/components/DebugPanel.jsx b/src/components/DebugPanel.jsx new file mode 100644 index 0000000..14d71e7 --- /dev/null +++ b/src/components/DebugPanel.jsx @@ -0,0 +1,127 @@ +/** + * DebugPanel.jsx — muestra el resultado de las 3 consultas a Supabase + * Incluye checklist de RLS para ayudar a diagnosticar tablas vacías + */ + +const C = { + surface:'#1C1D2B', texto:'#F0F2FF', muted:'#8B8FA8', border:'#2E3050', + verde:'#2D7A4F', rojo:'#C0392B', naranja:'#E8881A', +} + +function StatusBadge({ n, error }) { + if (error) return ⚠ Error: {error} + if (n === 0) return ⚠ 0 registros — ver checklist + return ✓ {n.toLocaleString('es-AR')} registros +} + +export default function DebugPanel({ debug, visible, toggle }) { + if (!debug) return null + + const hayError = Object.values(debug) + .filter(v => typeof v === 'object' && v?.registros !== undefined) + .some(v => v.registros === 0 || v.error) + + return ( +

+ + + {visible && ( +
+ + {/* Resultados de consultas */} +
+ Resultado de consultas — año {debug.año_consultado}, mes {debug.mes_consultado} +
+ + {['siniestros', 'involucrados', 'personas'].map(k => { + const v = debug[k] + if (!v) return null + return ( +
+ + {v.tabla} + + +
+ ) + })} + + {/* Checklist de ayuda cuando hay 0 registros */} + {hayError && ( +
+
+ 📋 Checklist cuando una tabla devuelve 0 registros +
+
    +
  1. + Verificar RLS (Row Level Security) +
    + En Supabase → Table Editor → seleccioná la tabla → "RLS disabled" o + ejecutá en SQL Editor: + + {`-- Política de lectura pública para cada tabla:\nCREATE POLICY "public_read" ON "Involucrados" FOR SELECT USING (true);\nCREATE POLICY "public_read" ON "Personas" FOR SELECT USING (true);`} + +
  2. +
  3. + Verificar nombre exacto de la tabla +
    + + "Involucrados" + y{' '} + + "Personas" + {' '} + con mayúscula inicial (case-sensitive en Postgres) +
  4. +
  5. + Verificar que el año coincide +
    + Los datos del CSV tienen{' '} + ano = 2025. + El filtro actual es{' '} + + ano = {debug.año_consultado} + +
  6. +
  7. + Verificar en SQL Editor directamente + + {`SELECT COUNT(*) FROM "Involucrados" WHERE ano = 2025;\nSELECT COUNT(*) FROM "Personas" WHERE ano = 2025;`} + +
  8. +
+
+ )} + +
+ )} +
+ ) +} diff --git a/src/components/ProtectedRoute.jsx b/src/components/ProtectedRoute.jsx new file mode 100644 index 0000000..42ea6b2 --- /dev/null +++ b/src/components/ProtectedRoute.jsx @@ -0,0 +1,27 @@ +// src/components/ProtectedRoute.jsx +import { Navigate } from 'react-router-dom' +import { useAuth } from '../hooks/useAuth' + +export default function ProtectedRoute({ children, requiredRole = 'admin' }) { + const { user, isAdmin, isSuperAdmin, loading } = useAuth() + + if (loading) { + return
Cargando...
+ } + + if (!user) { + return + } + + // Para admin y superadmin + if (requiredRole === 'admin' && !isAdmin) { + return + } + + // Si en el futuro usás requiredRole="superadmin" + if (requiredRole === 'superadmin' && !isSuperAdmin) { + return + } + + return children +} \ No newline at end of file diff --git a/src/components/charts/DistribucionLocalidad.jsx b/src/components/charts/DistribucionLocalidad.jsx new file mode 100644 index 0000000..02d43db --- /dev/null +++ b/src/components/charts/DistribucionLocalidad.jsx @@ -0,0 +1,74 @@ +const COLORES = [ + '#252C61', + '#C0392B', + '#E8881A', + '#2D7A4F', + '#3A7EBF', + '#8E44AD', + '#16A085', + '#E74C3C', + '#F39C12', + '#1ABC9C', +] + +export default function DistribucionLocalidad({ siniestros }) { + const conteo = {} + + siniestros.forEach((s) => { + const loc = s.localidad?.trim() || 'Sin datos' + conteo[loc] = (conteo[loc] || 0) + 1 + }) + + const data = Object.entries(conteo) + .map(([localidad, total]) => ({ localidad, total })) + .sort((a, b) => b.total - a.total) + .slice(0, 10) + + const maxVal = Math.max(...data.map((d) => d.total), 1) + + return ( +
+ + +
+ {data.map((item, i) => { + const pct = (item.total / maxVal) * 100 + + return ( +
+
+ {item.localidad} +
+ +
+
+ {pct > 20 && ( + + {item.total} + + )} +
+
+ + {pct <= 20 && ( +
+ {item.total} +
+ )} +
+ ) + })} +
+
+ ) +} \ No newline at end of file diff --git a/src/components/charts/DonutGravedad.jsx b/src/components/charts/DonutGravedad.jsx new file mode 100644 index 0000000..1a527f2 --- /dev/null +++ b/src/components/charts/DonutGravedad.jsx @@ -0,0 +1,67 @@ +import { PieChart, Pie, Cell, ResponsiveContainer } from 'recharts' +import { calcularKPIs } from '../../utils/calculos' +import { COLOR } from '../../utils/colores' + +const sectors = [ + { key: 'fatales', label: 'Fatales', color: COLOR.fatales }, + { key: 'conLes', label: 'Con Lesionados', color: COLOR.conLes }, + { key: 'sinLes', label: 'Sin Lesiones', color: COLOR.sinLes }, +] + +export default function DonutGravedad({ siniestros }) { + const kpis = calcularKPIs(siniestros) + const data = sectors.map((sector) => ({ + name: sector.label, + value: kpis[sector.key], + color: sector.color, + })) + + return ( +
+
+
+

Gravedad por categoría

+

Distribución de siniestros

+
+
+ +
+ + + + {data.map((entry) => ( + + ))} + + + + +
+ {kpis.total} + Total +
+
+ +
+ {data.map((item) => ( +
+
+ + {item.name} +
+
{item.value}
+
+ ))} +
+
+ ) +} diff --git a/src/components/charts/EstadoOcupante.jsx b/src/components/charts/EstadoOcupante.jsx new file mode 100644 index 0000000..ec7e4ba --- /dev/null +++ b/src/components/charts/EstadoOcupante.jsx @@ -0,0 +1,164 @@ +/** + * EstadoOcupante.jsx + * Columna: estado_ocupante_inicio → "Ileso" | "Herido Leve" | "Herido Grave" | "Fallecido" + * También muestra estado_ocupante_final para ver evolución + */ +import { + BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, + Cell, ResponsiveContainer, LabelList, +} from 'recharts' + +const C = { + surface:'#1C1D2B', texto:'#F0F2FF', muted:'#8B8FA8', border:'#2E3050', +} + +const ESTADOS = [ + { key: 'Ileso', color: '#2D7A4F', icon: '🟢', label: 'Ileso' }, + { key: 'Herido Leve', color: '#E8881A', icon: '🟡', label: 'Herido Leve' }, + { key: 'Herido Grave', color: '#C0392B', icon: '🔴', label: 'Herido Grave' }, + { key: 'Fallecido', color: '#922B21', icon: '⚫', label: 'Fallecido' }, +] + +export default function EstadoOcupante({ personas }) { + if (!personas?.length) return null + + const total = personas.length + + // Estado inicial + const inicio = ESTADOS.map(e => ({ + ...e, + inicio: personas.filter(p => p.estado_ocupante_inicio === e.key).length, + final: personas.filter(p => p.estado_ocupante_final === e.key).length, + })) + + // Para el gráfico de barras (estado al inicio) + const barData = inicio.map(e => ({ + name: e.label, + value: e.inicio, + color: e.color, + })) + + const CustomTooltip = ({ active, payload, label }) => { + if (!active || !payload?.[0]) return null + const v = payload[0].value + return ( +
+

{label}

+

+ {v.toLocaleString('es-AR')} personas ({total ? ((v/total)*100).toFixed(1) : 0}%) +

+
+ ) + } + + return ( +
+
+ 🏥 Estado del ocupante +
+
+ Estado al inicio del siniestro — {total.toLocaleString('es-AR')} personas +
+ + {/* KPI chips */} +
+ {inicio.map(e => ( +
+
{e.icon}
+
+ {e.inicio.toLocaleString('es-AR')} +
+
+ {e.label} +
+ + {total ? ((e.inicio/total)*100).toFixed(1) : 0}% + +
+
+ ))} +
+ + + + + + + } cursor={{ fill: '#ffffff08' }} /> + + {barData.map(d => )} + v > 0 ? v.toLocaleString('es-AR') : ''} + /> + + + + + {/* Tabla de evolución: inicio vs final */} +
+
+ Comparación inicio vs. final del siniestro +
+ + + + + + + + + + + {inicio.map(e => { + const delta = e.final - e.inicio + return ( + + + + + + + ) + })} + +
EstadoInicioFinalΔ
+ {e.icon} {e.key} + + {e.inicio.toLocaleString('es-AR')} + + {e.final.toLocaleString('es-AR')} + 0 ? '#C0392B' : delta < 0 ? '#2D7A4F' : C.muted, + fontSize: '0.78rem', padding: '0.3rem 0.5rem', textAlign: 'right', + fontWeight: delta !== 0 ? 700 : 400, fontVariantNumeric: 'tabular-nums', + }}> + {delta > 0 ? `+${delta}` : delta !== 0 ? delta : '—'} +
+
+
+ ) +} diff --git a/src/components/charts/FranjaHoraria.jsx b/src/components/charts/FranjaHoraria.jsx new file mode 100644 index 0000000..d0673c0 --- /dev/null +++ b/src/components/charts/FranjaHoraria.jsx @@ -0,0 +1,195 @@ +import { + LineChart, + Line, + XAxis, + YAxis, + CartesianGrid, + Tooltip, + Legend, + ResponsiveContainer, +} from 'recharts' +import { useChartTheme } from '../../hooks/useChartTheme' + +const FRANJAS = [ + { key: '00-03', label: '00-03h' }, + { key: '03-06', label: '03-06h' }, + { key: '06-09', label: '06-09h' }, + { key: '09-12', label: '09-12h' }, + { key: '12-15', label: '12-15h' }, + { key: '15-18', label: '15-18h' }, + { key: '18-21', label: '18-21h' }, + { key: '21-24', label: '21-24h' }, +] + +function procesarFranjaHoraria(siniestros) { + const acumulado = {} + + FRANJAS.forEach((f) => { + acumulado[f.key] = { franja: f.label, urbano: 0, rural: 0 } + }) + + siniestros.forEach((s) => { + const horaRaw = + s.hora_siniestro || s.siniestro_hora || s.hora_hecho || s.hora || '' + + const hora = parseInt(String(horaRaw).split(':')[0], 10) + if (Number.isNaN(hora)) return + + let franjaKey = null + + if (hora >= 0 && hora < 3) franjaKey = '00-03' + else if (hora >= 3 && hora < 6) franjaKey = '03-06' + else if (hora >= 6 && hora < 9) franjaKey = '06-09' + else if (hora >= 9 && hora < 12) franjaKey = '09-12' + else if (hora >= 12 && hora < 15) franjaKey = '12-15' + else if (hora >= 15 && hora < 18) franjaKey = '15-18' + else if (hora >= 18 && hora < 21) franjaKey = '18-21' + else if (hora >= 21 && hora < 24) franjaKey = '21-24' + + if (!franjaKey) return + + const zona = String( + s.zona || s.zona_ocurrencia || s.area_siniestro || '' + ).toLowerCase() + + const esUrbano = zona.includes('urban') || zona.includes('ejido') || zona === 'u' + const esRural = zona.includes('rural') || zona.includes('ruta') || zona === 'r' + + if (esUrbano) acumulado[franjaKey].urbano += 1 + else if (esRural) acumulado[franjaKey].rural += 1 + else acumulado[franjaKey].urbano += 1 + }) + + return FRANJAS.map((f) => acumulado[f.key]) +} + +function CustomTooltip({ + active, + payload, + label, + tooltipBg, + tooltipBorder, + tooltipLabel, + tickColor, +}) { + if (active && payload?.length) { + return ( +
+

+ {label} +

+ + {payload.map((p, i) => ( +

+ + {p.name === 'urbano' ? 'Urbano' : 'Rural'}: + {' '} + {p.value} siniestros +

+ ))} +
+ ) + } + + return null +} + +export default function FranjaHoraria({ siniestros = [] }) { + const { tickColor, gridColor, tooltipBg, tooltipBorder, tooltipLabel } = useChartTheme() + + const data = procesarFranjaHoraria(siniestros) + const tieneUrbano = data.some((d) => d.urbano > 0) + const tieneRural = data.some((d) => d.rural > 0) + + if (!tieneUrbano && !tieneRural) { + return ( +
+ Sin datos de franja horaria disponibles +
+ ) + } + + return ( +
+ +
+ + + + + + + + + + } + /> + + ( + + {value === 'urbano' ? 'Urbano' : 'Rural'} + + )} + /> + + {tieneUrbano && ( + + )} + + {tieneRural && ( + + )} + + +
+
+ ) +} \ No newline at end of file diff --git a/src/components/charts/GeneroPersonas.jsx b/src/components/charts/GeneroPersonas.jsx new file mode 100644 index 0000000..9417283 --- /dev/null +++ b/src/components/charts/GeneroPersonas.jsx @@ -0,0 +1,103 @@ +/** + * GeneroPersonas.jsx + * Columna: genero → "Masculino" | "Femenino" | "" (sin dato) + */ +import { + PieChart, Pie, Cell, Tooltip, Legend, ResponsiveContainer +} from 'recharts' + +const C = { + surface:'#1C1D2B', texto:'#F0F2FF', muted:'#8B8FA8', border:'#2E3050', +} + +const COLORES = { + Masculino: '#3A7EBF', + Femenino: '#C0739A', + 'Sin dato':'#4A4E6A', +} + +const LABEL_CUSTOM = ({ cx, cy, midAngle, innerRadius, outerRadius, percent, name }) => { + if (percent < 0.04) return null + const RAD = Math.PI / 180 + const r = innerRadius + (outerRadius - innerRadius) * 0.55 + const x = cx + r * Math.cos(-midAngle * RAD) + const y = cy + r * Math.sin(-midAngle * RAD) + return ( + + {(percent * 100).toFixed(0)}% + + ) +} + +export default function GeneroPersonas({ personas }) { + if (!personas?.length) return null + + const conteo = { Masculino: 0, Femenino: 0, 'Sin dato': 0 } + personas.forEach(p => { + if (p.genero === 'Masculino') conteo.Masculino++ + else if (p.genero === 'Femenino') conteo.Femenino++ + else conteo['Sin dato']++ + }) + + const data = Object.entries(conteo) + .filter(([, v]) => v > 0) + .map(([name, value]) => ({ name, value })) + + return ( +
+
+ 👤 Género +
+
+ Distribución por género — {personas.length.toLocaleString('es-AR')} personas +
+ + {/* Mini KPIs */} +
+ {data.map(d => ( +
+
+ {d.value.toLocaleString('es-AR')} +
+
{d.name}
+
+ ))} +
+ + + + + {data.map(entry => ( + + ))} + + [v.toLocaleString('es-AR'), n]} + contentStyle={{ background: '#12131A', border: `1px solid ${C.border}`, borderRadius: 8 }} + labelStyle={{ color: C.texto }} itemStyle={{ color: C.muted }} + /> + {v}} + iconType="circle" + /> + + +
+ ) +} diff --git a/src/components/charts/GravedadSiniestro.jsx b/src/components/charts/GravedadSiniestro.jsx new file mode 100644 index 0000000..4932766 --- /dev/null +++ b/src/components/charts/GravedadSiniestro.jsx @@ -0,0 +1,35 @@ +import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts' + +const MESES = ['Ene','Feb','Mar','Abr','May','Jun','Jul','Ago','Sep','Oct','Nov','Dic'] + +export default function GravedadSiniestro({ siniestros }) { + const data = Array.from({ length: 12 }, (_, i) => ({ + mes: MESES[i], Fatales: 0, 'Con lesionados': 0, 'Sin lesiones': 0, + })) + siniestros.forEach(s => { + const mes = parseInt(s.mes) + if (mes < 1 || mes > 12) return + const f = parseInt(s.fallecidos) || 0 + const h = parseInt(s.heridos) || 0 + if (f > 0) data[mes-1]['Fatales'] += 1 + else if (h > 0) data[mes-1]['Con lesionados'] += 1 + else data[mes-1]['Sin lesiones'] += 1 + }) + return ( +
+

Gravedad por Mes

+ + + + + + + + + + + + +
+ ) +} diff --git a/src/components/charts/PerfilVictimas.jsx b/src/components/charts/PerfilVictimas.jsx new file mode 100644 index 0000000..706eb1e --- /dev/null +++ b/src/components/charts/PerfilVictimas.jsx @@ -0,0 +1,236 @@ +import { + PieChart, + Pie, + Cell, + BarChart, + Bar, + XAxis, + YAxis, + CartesianGrid, + Tooltip, + Legend, + ResponsiveContainer, +} from 'recharts' +import { COLOR } from '../../utils/colores' +import { calcularRangoEtario } from '../../utils/calculos' +import { useChartTheme } from '../../hooks/useChartTheme' + +const COLORS = [ + COLOR.navy, + COLOR.blue, + COLOR.orange, + COLOR.green, + COLOR.red, + '#8B5CF6', +] + +const formatData = (obj) => + Object.entries(obj).map(([name, value]) => ({ name, value })) + +const RADIAN = Math.PI / 180 + +const renderLabel = ({ cx, cy, midAngle, innerRadius, outerRadius, percent }) => { + if (percent < 0.08) return null + + const radius = innerRadius + (outerRadius - innerRadius) * 0.55 + const x = cx + radius * Math.cos(-midAngle * RADIAN) + const y = cy + radius * Math.sin(-midAngle * RADIAN) + + return ( + + {`${(percent * 100).toFixed(0)}%`} + + ) +} + +export default function PerfilVictimas({ + personas, + involucrados, + soloFatales = false, +}) { + const { tickColor, gridColor, tooltipBg, tooltipBorder, tooltipLabel } = + useChartTheme() + + const tipoMap = new Map() + involucrados?.forEach((i) => + tipoMap.set(String(i.id_involucrado), i.tipo_involucrado) + ) + + const victimas = personas.filter((p) => + soloFatales + ? ['Fallecido'].includes(p.estado_ocupante_inicio) + : ['Fallecido', 'Herido Grave', 'Herido Leve'].includes( + p.estado_ocupante_inicio + ) + ) + + const genero = {} + const usuario = {} + + victimas.forEach((p) => { + genero[p.genero || 'Sin dato'] = (genero[p.genero || 'Sin dato'] || 0) + 1 + const tipo = tipoMap.get(String(p.id_involucrado)) || 'Sin dato' + usuario[tipo] = (usuario[tipo] || 0) + 1 + }) + + const generoData = formatData(genero) + const etarioData = calcularRangoEtario(victimas).map(({ rango, cantidad }) => ({ + name: rango, + value: cantidad, + })) + const usuarioData = formatData(usuario).sort((a, b) => b.value - a.value) + + const tooltipStyle = { + background: tooltipBg, + border: `1px solid ${tooltipBorder}`, + borderRadius: 16, + boxShadow: '0 10px 30px rgba(0,0,0,0.08)', + } + + return ( +
+ +
+
+
+ Género +
+
+ + + + {generoData.map((entry, index) => ( + + ))} + + + + + ( + {value} + )} + /> + + +
+
+ +
+
+ Rango etario +
+
+ + + + + + + Math.ceil(dataMax * 1.1)]} + /> + + + + + + +
+
+ +
+
+ Tipo de usuario +
+
+ + + + + + + + + + + +
+
+
+
+ ) +} \ No newline at end of file diff --git a/src/components/charts/PorLocalidad.jsx b/src/components/charts/PorLocalidad.jsx new file mode 100644 index 0000000..95068ea --- /dev/null +++ b/src/components/charts/PorLocalidad.jsx @@ -0,0 +1,114 @@ +import { + BarChart, + Bar, + XAxis, + YAxis, + CartesianGrid, + Tooltip, + ResponsiveContainer, + Cell, +} from 'recharts' +import { COLOR } from '../../utils/colores' +import { useChartTheme } from '../../hooks/useChartTheme' + +const getCategoria = (s) => { + const fallecidos = parseInt(s.cantidad_fallecidos ?? s.fallecidos, 10) || 0 + const lesionados = parseInt(s.cantidad_lesionados ?? s.heridos, 10) || 0 + + if (fallecidos > 0) return 'fatales' + if (lesionados > 0) return 'conLes' + return 'sinLes' +} + +export default function PorLocalidad({ siniestros, tipo = 'todas' }) { + const { tickColor, gridColor, tooltipBg, tooltipBorder, tooltipLabel } = useChartTheme() + + const conteo = {} + + siniestros.forEach((s) => { + const categoria = getCategoria(s) + if (tipo !== 'todas' && categoria !== tipo) return + + const loc = (s.localidad || s.localidad_ocurrencia || 'Sin dato').trim() || 'Sin dato' + + conteo[loc] = conteo[loc] || { + total: 0, + fatales: 0, + conLes: 0, + sinLes: 0, + } + + conteo[loc].total += 1 + conteo[loc][categoria] += 1 + }) + + const data = Object.entries(conteo) + .map(([localidad, values]) => { + const mayorCategoria = ['fatales', 'conLes', 'sinLes'].sort( + (a, b) => values[b] - values[a] + )[0] + + return { + localidad, + total: values.total, + categoria: mayorCategoria, + } + }) + .sort((a, b) => b.total - a.total) + .slice(0, 10) + + return ( +
+ +
+ + + + + + + + + + + + {data.map((entry) => ( + + ))} + + + +
+
+ ) +} \ No newline at end of file diff --git a/src/components/charts/PorTipoSiniestro.jsx b/src/components/charts/PorTipoSiniestro.jsx new file mode 100644 index 0000000..c756dfd --- /dev/null +++ b/src/components/charts/PorTipoSiniestro.jsx @@ -0,0 +1,118 @@ +import { PieChart, Pie, Cell, Tooltip, Legend, ResponsiveContainer } from 'recharts' +import { porTipoSiniestro } from '../../utils/calculos' +import { COLOR } from '../../utils/colores' +import { useChartTheme } from '../../hooks/useChartTheme' + +const COLORS = [ + COLOR.navy, + COLOR.red, + COLOR.orange, + COLOR.green, + '#6B7280', + '#8B5CF6', + '#0EA5E9', +] + +const RADIAN = Math.PI / 180 + +function agruparConUmbral(datos, umbralPct = 10) { + if (!datos || datos.length === 0) return [] + + const total = datos.reduce((a, b) => a + b.value, 0) + if (total === 0) return [] + + const normalizados = datos.map((d) => ({ + ...d, + pct: (d.value / total) * 100, + })) + + const principales = normalizados.filter((d) => d.pct >= umbralPct) + const menores = normalizados.filter((d) => d.pct < umbralPct) + + if (menores.length > 0) { + const totalOtros = menores.reduce((s, d) => s + d.value, 0) + principales.push({ + name: 'Otros', + value: totalOtros, + pct: (totalOtros / total) * 100, + }) + } + + return principales.sort((a, b) => b.value - a.value) +} + +const CustomLabel = ({ cx, cy, midAngle, innerRadius, outerRadius, pct }) => { + if (pct < 5) return null + + const radius = innerRadius + (outerRadius - innerRadius) * 0.55 + const x = cx + radius * Math.cos(-midAngle * RADIAN) + const y = cy + radius * Math.sin(-midAngle * RADIAN) + + return ( + + {`${pct.toFixed(0)}%`} + + ) +} + +export default function PorTipoSiniestro({ siniestros }) { + const { tooltipBg, tooltipBorder, tooltipLabel, tickColor } = useChartTheme() + const data = agruparConUmbral(porTipoSiniestro(siniestros), 10) + + return ( +
+ +
+ + + + {data.map((entry, index) => ( + + ))} + + + + + ( + {value} + )} + /> + + +
+
+ ) +} \ No newline at end of file diff --git a/src/components/charts/ProteccionPersonas.jsx b/src/components/charts/ProteccionPersonas.jsx new file mode 100644 index 0000000..cb1b043 --- /dev/null +++ b/src/components/charts/ProteccionPersonas.jsx @@ -0,0 +1,281 @@ +/** + * ProteccionPersonas.jsx — v3 CORREGIDA + */ +const VERDE = '#2D7A4F' +const ROJO = '#C0392B' +const GRIS = '#4A4E6A' +const NARANJA = '#E8881A' + +const CON_HABITACULO = new Set([ + 'Automóvil', + 'Camioneta/Utilitario', + 'Transporte De Pasajeros', + 'Transporte De Carga', +]) + +const SIN_HABITACULO = new Set([ + 'Motocicleta', + 'Peatón', + 'Bicicleta', + 'Tracción A Sangre', + 'Tracción a Sangre', +]) + +function pct(n, base) { + return base > 0 ? `${((n / base) * 100).toFixed(1)}%` : '—' +} + +function IndicadorChip({ + titulo, + icon, + base, + baseLabel, + si, + no, + sd, + colorSi = VERDE, +}) { + return ( +
+
+
+ {icon && {icon}} + + {titulo} + +
+
+ base: {base.toLocaleString('es-AR')} {baseLabel} +
+
+ + {base > 0 ? ( + <> +
+ {si > 0 && ( +
+ )} + {no > 0 && ( +
+ )} + {sd > 0 && ( +
+ )} +
+ +
+ {[ + { label: 'Sí', v: si, color: colorSi }, + { label: 'No', v: no, color: ROJO }, + { label: 'Sin dato', v: sd, color: GRIS }, + ] + .filter((item) => item.v > 0) + .map((item) => ( +
+ + {item.v.toLocaleString('es-AR')} + + + {` ${item.label} (${pct(item.v, base)})`} + +
+ ))} +
+ + ) : ( +
+ Sin datos para esta categoría en el período seleccionado +
+ )} +
+ ) +} + +function SeccionAlcohol({ personas }) { + const total = personas.length + const pos = personas.filter((p) => p.prueba_alcohol === 'Positivo').length + const neg = personas.filter((p) => p.prueba_alcohol === 'Negativo').length + const nr = personas.filter((p) => p.prueba_alcohol === 'No se Realizó').length + const sd = total - pos - neg - nr + const realizadas = pos + neg + + const items = [ + { label: 'Positivo', v: pos, color: ROJO }, + { label: 'Negativo', v: neg, color: VERDE }, + { label: 'No realizada', v: nr, color: NARANJA }, + { label: 'Sin dato', v: sd, color: GRIS }, + ].filter((i) => i.v > 0) + + return ( +
+
+ + Prueba de alcohol + + + base: {total.toLocaleString('es-AR')} personas totales + +
+ +
+ {items.map((item) => ( +
+
+ {item.v.toLocaleString('es-AR')} +
+
+ {item.label} +
+ + {pct(item.v, total)} + +
+
+ ))} +
+ + {realizadas > 0 && ( +
+ Tasa de positividad sobre pruebas realizadas ( + {realizadas.toLocaleString('es-AR')} + ): + {' '} + 0 ? ROJO : VERDE }} + > + {((pos / realizadas) * 100).toFixed(1)}% + +
+ )} +
+ ) +} + +export default function ProteccionPersonas({ personas, involucrados }) { + if (!personas?.length) return null + + const tipoMap = new Map() + if (involucrados?.length) { + involucrados.forEach((i) => { + if (i.id_involucrado != null && i.tipo_involucrado) { + tipoMap.set(String(i.id_involucrado), i.tipo_involucrado) + } + }) + } + + const personasConTipo = personas.map((p) => ({ + ...p, + _tipo: tipoMap.get(String(p.id_involucrado)) || null, + })) + + const motociclistas = personasConTipo.filter( + (p) => p._tipo === 'Motocicleta' + ) + const cascaSi = motociclistas.filter((p) => p.casco === 'Si').length + const cascaNo = motociclistas.filter((p) => p.casco === 'No').length + const cascaSD = motociclistas.length - cascaSi - cascaNo + + const enHabitaculo = personasConTipo.filter((p) => { + if (!p._tipo) return false + if (SIN_HABITACULO.has(p._tipo)) return false + if (CON_HABITACULO.has(p._tipo)) return true + return true + }) + + const cinSi = enHabitaculo.filter( + (p) => p.cinturon_seguridad === 'Si' + ).length + const cinNo = enHabitaculo.filter( + (p) => p.cinturon_seguridad === 'No' + ).length + const cinSD = enHabitaculo.length - cinSi - cinNo + + const airSi = enHabitaculo.filter((p) => p.airbag === 'Si').length + const airNo = enHabitaculo.filter((p) => p.airbag === 'No').length + const airSD = enHabitaculo.length - airSi - airNo + + const sinMapa = tipoMap.size === 0 + + return ( +
+ + + {sinMapa && ( +
+ ⚠ No se recibieron datos de Involucrados — los cálculos de casco/cinturón/airbag + no pueden segmentarse por tipo de vehículo. Verificá que el componente reciba + la prop involucrados. +
+ )} + +
+ + + + +
+
+ ) +} \ No newline at end of file diff --git a/src/components/charts/RangoEtario.jsx b/src/components/charts/RangoEtario.jsx new file mode 100644 index 0000000..a22d145 --- /dev/null +++ b/src/components/charts/RangoEtario.jsx @@ -0,0 +1,66 @@ +import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Cell, ResponsiveContainer } from 'recharts' +import { calcularRangoEtario } from '../../utils/calculos' + +const COLORES_RANGO = ['#252C61', '#3A4489', '#252C61', '#3A4489', '#252C61', '#3A4489', '#252C61'] + +const CustomTooltip = ({ active, payload, label }) => { + if (active && payload?.length) { + return ( +
+

{label}

+

+ {payload[0].value} Personas +

+
+ ) + } + return null +} + +export default function RangoEtario({ personas = [] }) { + const data = calcularRangoEtario(personas) + + if (!data.length) { + return ( +
+ Sin datos de rango etario + Verificar campo en tabla Personas +
+ ) + } + + return ( +
+
+

Perfil etario

+

Distribucion por edad

+
+ + + + + + } cursor={{ fill: '#F3F4F6' }} /> + + {data.map((_, i) => ( + + ))} + + + +
+ ) +} diff --git a/src/components/charts/RolPersona.jsx b/src/components/charts/RolPersona.jsx new file mode 100644 index 0000000..29dd729 --- /dev/null +++ b/src/components/charts/RolPersona.jsx @@ -0,0 +1,118 @@ +/** + * RolPersona.jsx + * Columna: rol_persona_involucrada → "Conductor" | "Acompañante" | "Peatón" + * Cruza con genero para ver conductor por género + */ +import { + BarChart, Bar, XAxis, YAxis, CartesianGrid, + Tooltip, Legend, Cell, ResponsiveContainer +} from 'recharts' + +const C = { + surface:'#1C1D2B', texto:'#F0F2FF', muted:'#8B8FA8', border:'#2E3050', +} + +const ROLES = [ + { key: 'Conductor', color: '#3A4489', icon: '🚗' }, + { key: 'Acompañante', color: '#3A7EBF', icon: '👥' }, + { key: 'Peatón', color: '#8E44AD', icon: '🚶' }, +] + +const GENERO_COLOR = { Masculino: '#3A7EBF', Femenino: '#C0739A', 'Sin dato': '#4A4E6A' } + +export default function RolPersona({ personas }) { + if (!personas?.length) return null + + // Conteo simple por rol + const totales = {} + ROLES.forEach(r => { totales[r.key] = 0 }) + personas.forEach(p => { + if (totales[p.rol_persona_involucrada] !== undefined) + totales[p.rol_persona_involucrada]++ + }) + + // Cruce rol × género para el gráfico apilado + const cruceData = ROLES.map(r => { + const grupo = personas.filter(p => p.rol_persona_involucrada === r.key) + const masc = grupo.filter(p => p.genero === 'Masculino').length + const fem = grupo.filter(p => p.genero === 'Femenino').length + const sd = grupo.length - masc - fem + return { name: r.key, Masculino: masc, Femenino: fem, 'Sin dato': sd, total: grupo.length } + }) + + const total = personas.length + + const CustomTooltip = ({ active, payload, label }) => { + if (!active || !payload?.length) return null + return ( +
+

{label}

+ {payload.map(p => ( +

+ {p.name}: {p.value.toLocaleString('es-AR')} +

+ ))} +

+ Total: {payload.reduce((a, p) => a + p.value, 0).toLocaleString('es-AR')} + {' '}({((payload.reduce((a,p)=>a+p.value,0)/total)*100).toFixed(1)}%) +

+
+ ) + } + + return ( +
+
+ 🎭 Rol en el siniestro +
+
+ Conductor / Acompañante / Peatón — desglosado por género +
+ + {/* KPI chips por rol */} +
+ {ROLES.map(r => ( +
+
{r.icon}
+
+ {(totales[r.key] || 0).toLocaleString('es-AR')} +
+
+ {r.key} + + {' '}({total ? ((totales[r.key]/total)*100).toFixed(0) : 0}%) + +
+
+ ))} +
+ + + + + + + } cursor={{ fill: '#ffffff08' }} /> + {v}} /> + + + + + +
+ ) +} diff --git a/src/components/charts/SerieHistorica.jsx b/src/components/charts/SerieHistorica.jsx new file mode 100644 index 0000000..3cd1b22 --- /dev/null +++ b/src/components/charts/SerieHistorica.jsx @@ -0,0 +1,245 @@ +import { + LineChart, + Line, + XAxis, + YAxis, + CartesianGrid, + Tooltip, + ResponsiveContainer, + ReferenceLine, +} from 'recharts' +import { useChartTheme } from '../../hooks/useChartTheme' + +// ─── Población provincial por año ───── +export const POBLACION_POR_ANO = { + 2025: 334953, + 2026: 335096, + 2027: 335186, + 2028: 335260, + 2029: 335302, + 2030: 335317, +} + +export function getPoblacionAnual(year) { + return POBLACION_POR_ANO[year] ?? POBLACION_POR_ANO[2025] +} + +// ─── Serie histórica ────────────────── +export const SERIE_HISTORICA = [ + { ano: 2013, siniestros: 1186, victimas: 46, tasa: 15.21 }, + { ano: 2014, siniestros: 1124, victimas: 57, tasa: 18.30 }, + { ano: 2015, siniestros: 1156, victimas: 47, tasa: 14.67 }, + { ano: 2016, siniestros: 1098, victimas: 47, tasa: 14.55 }, + { ano: 2017, siniestros: 1089, victimas: 48, tasa: 13.83 }, + { ano: 2018, siniestros: 1201, victimas: 32, tasa: 9.40 }, + { ano: 2019, siniestros: 1178, victimas: 31, tasa: 8.64 }, + // 2020 excluido + { ano: 2021, siniestros: 1043, victimas: 24, tasa: 6.40 }, + { ano: 2022, siniestros: 1134, victimas: 26, tasa: 7.80 }, + { ano: 2023, siniestros: 1198, victimas: 26, tasa: 7.71 }, + { ano: 2024, siniestros: 1238, victimas: 24, tasa: 7.12 }, +] + +// ─── Tooltip ────────────────────────── +const CustomTooltip = ({ active, payload, label, tooltipBg, tooltipBorder, tooltipLabel, tickColor }) => { + if (active && payload?.length) { + const row = payload[0]?.payload + return ( +
+

+ {label} +

+ + {row?.siniestros != null && ( +

+ Siniestros fatales:{' '} + + {row.siniestros} + +

+ )} + + {row?.victimas != null && ( +

+ Víctimas fatales:{' '} + + {row.victimas} + +

+ )} + + {payload[0].value != null && ( +

+ Tasa:{' '} + + {payload[0].value} + {' '} + c/100k hab. +

+ )} +
+ ) + } + return null +} + +// ─── Componente ─────────────────────── +export default function SerieHistorica({ + year, + siniestrosActual = 0, + victimasActual = 0, + datos, +}) { + const { tickColor, gridColor, tooltipBg, tooltipBorder, tooltipLabel } = + useChartTheme() + + let dataFinal = datos?.length > 0 ? datos : [...SERIE_HISTORICA] + + if (year && siniestrosActual > 0) { + const yaExiste = dataFinal.some((row) => row.ano === year) + + if (yaExiste && year <= 2024) { + dataFinal = dataFinal.map((row) => + row.ano === year + ? { ...row, siniestros: siniestrosActual, victimas: victimasActual } + : row + ) + } else { + const poblacion = getPoblacionAnual(year) + const tasaActual = Number( + ((victimasActual / poblacion) * 100000).toFixed(2) + ) + + if (yaExiste) { + dataFinal = dataFinal.map((row) => + row.ano === year + ? { + ...row, + siniestros: siniestrosActual, + victimas: victimasActual, + tasa: tasaActual, + } + : row + ) + } else { + dataFinal = [ + ...dataFinal, + { + ano: year, + siniestros: siniestrosActual, + victimas: victimasActual, + tasa: tasaActual, + }, + ].sort((a, b) => a.ano - b.ano) + } + } + } + + const tasasValidas = dataFinal.filter((r) => r.tasa != null).map((r) => r.tasa) + const promedio = tasasValidas.length + ? tasasValidas.reduce((a, b) => a + b, 0) / tasasValidas.length + : 0 + + const primerAnio = dataFinal[0]?.ano + const ultimoAnio = dataFinal[dataFinal.length - 1]?.ano + + return ( +
+
+

+ Serie histórica +

+

+ Tasa de mortalidad vial +

+

+ Víctimas fatales cada 100.000 habitantes. Provincia de Santa Cruz, {primerAnio}–{ultimoAnio}. +

+
+ +
+ + + + + + + } + /> + + + + +
+ +
+

+ Tasas 2013–2024: informes anuales OPSV Santa Cruz. Tasas 2025 en adelante: + cálculo propio sobre proyecciones INDEC base Censo Nacional de Población, + Hogares y Viviendas 2022. +

+

+ Nota: el año 2020 no se incluye en la + serie histórica. Las restricciones de circulación por la pandemia de COVID-19 + generaron una reducción atípica de la movilidad vehicular, por lo que los datos + no son comparables con el resto de la serie. +

+
+
+ ) +} \ No newline at end of file diff --git a/src/components/charts/SiniestrosPorMes.jsx b/src/components/charts/SiniestrosPorMes.jsx new file mode 100644 index 0000000..779dfbd --- /dev/null +++ b/src/components/charts/SiniestrosPorMes.jsx @@ -0,0 +1,123 @@ +import { + BarChart, + Bar, + XAxis, + YAxis, + CartesianGrid, + Tooltip, + ResponsiveContainer, +} from 'recharts' +import { COLOR } from '../../utils/colores' +import { MESES } from '../../utils/calculos' +import { useChartTheme } from '../../hooks/useChartTheme' + +const MONTH_SHORT = MESES.map((m) => m.slice(0, 3)) + +const parseFecha = (siniestro) => { + if (siniestro.fecha) { + const fecha = new Date(siniestro.fecha) + if (!Number.isNaN(fecha.getTime())) { + return { + mes: fecha.getMonth() + 1, + ano: fecha.getFullYear(), + } + } + } + + const mes = parseInt(siniestro.mes, 10) + const ano = parseInt( + siniestro.ano ?? siniestro.año ?? siniestro.anio ?? siniestro.year, + 10 + ) + + if (!Number.isNaN(mes) && !Number.isNaN(ano)) { + return { mes, ano } + } + + if (siniestro.mes_nombre) { + const idx = MONTH_SHORT.indexOf(siniestro.mes_nombre.slice(0, 3)) + if (idx >= 0 && !Number.isNaN(ano)) { + return { mes: idx + 1, ano } + } + } + + return null +} + +const getCantidadFallecidos = (siniestro) => + parseInt(siniestro.cantidad_fallecidos ?? siniestro.fallecidos, 10) || 0 + +const getCantidadLesionados = (siniestro) => + parseInt(siniestro.cantidad_lesionados ?? siniestro.heridos, 10) || 0 + +export default function SiniestrosPorMes({ siniestros }) { + const { tickColor, gridColor, tooltipBg, tooltipBorder, tooltipLabel } = useChartTheme() + + const acumulado = {} + + siniestros.forEach((s) => { + const fecha = parseFecha(s) + if (!fecha?.mes || !fecha?.ano) return + + const key = `${fecha.ano}-${String(fecha.mes).padStart(2, '0')}` + + if (!acumulado[key]) { + acumulado[key] = { + key, + mes: `${MONTH_SHORT[fecha.mes - 1]} ${fecha.ano}`, + fatales: 0, + conLes: 0, + sinLes: 0, + } + } + + const fatales = getCantidadFallecidos(s) + const lesionados = getCantidadLesionados(s) + + if (fatales > 0) acumulado[key].fatales += 1 + else if (lesionados > 0) acumulado[key].conLes += 1 + else acumulado[key].sinLes += 1 + }) + + const data = Object.values(acumulado).sort((a, b) => a.key.localeCompare(b.key)) + + return ( +
+ +
+ + + + + + + + + + + +
+
+ ) +} \ No newline at end of file diff --git a/src/components/charts/TipoInvolucrado.jsx b/src/components/charts/TipoInvolucrado.jsx new file mode 100644 index 0000000..5abfeba --- /dev/null +++ b/src/components/charts/TipoInvolucrado.jsx @@ -0,0 +1,193 @@ +/** + * TipoInvolucrado.jsx — columna: tipo_involucrado + */ +import { + BarChart, + Bar, + XAxis, + YAxis, + CartesianGrid, + Tooltip, + Cell, + ResponsiveContainer, + LabelList, +} from 'recharts' +import { useChartTheme } from '../../hooks/useChartTheme' + +const TIPOS_CONFIG = [ + { key: 'Automóvil', color: '#3A4489', short: 'Auto' }, + { key: 'Camioneta/Utilitario', color: '#3A7EBF', short: 'Camioneta' }, + { key: 'Motocicleta', color: '#E8881A', short: 'Moto' }, + { key: 'Peatón', color: '#8E44AD', short: 'Peatón'}, + { key: 'Transporte De Pasajeros', color: '#16A085', short: 'T. Pasajeros' }, + { key: 'Transporte De Carga', color: '#2D7A4F', short: 'T. Carga' }, +] + +const COLOR_OTROS = '#4A4E6A' + +export default function TipoInvolucrado({ involucrados }) { + const { tickColor, gridColor, tooltipBg, tooltipBorder, tooltipLabel } = useChartTheme() + + if (!involucrados?.length) return null + + const conteo = {} + involucrados.forEach((i) => { + const t = i.tipo_involucrado?.trim() || 'Sin dato' + conteo[t] = (conteo[t] || 0) + 1 + }) + + const total = involucrados.length + + const barData = [] + let sumOtros = 0 + + TIPOS_CONFIG.forEach((tc) => { + if (conteo[tc.key]) { + barData.push({ + name: tc.short, + full: tc.key, + value: conteo[tc.key], + color: tc.color, + icon: tc.icon, + }) + } + }) + + Object.entries(conteo).forEach(([k, v]) => { + if (!TIPOS_CONFIG.find((tc) => tc.key === k)) sumOtros += v + }) + + if (sumOtros > 0) { + barData.push({ + name: 'Otros', + full: 'Otros', + value: sumOtros, + color: COLOR_OTROS, + + }) + } + + barData.sort((a, b) => b.value - a.value) + + const CustomTooltip = ({ active, payload }) => { + if (!active || !payload?.[0]) return null + + const d = payload[0].payload + + return ( +
+

+ Tipo de involucrado +

+

+ Vehículos y peatones +

+

+ {d.full}: {d.value.toLocaleString('es-AR')} ( + {((d.value / total) * 100).toFixed(1)}%) +

+
+ ) + } + + return ( +
+
+ {total.toLocaleString('es-AR')} vehículos y peatones registrados +
+ + {/* KPI chips — top 4 */} +
+ {barData.slice(0, 4).map((d) => ( +
+
{d.icon}
+
+ {d.value.toLocaleString('es-AR')} +
+
+ {d.name} +
+ + {((d.value / total) * 100).toFixed(1)}% + +
+
+ ))} +
+ +
+ + + + + + + + + } + cursor={{ fill: 'rgba(148,163,184,0.08)' }} + /> + + + {barData.map((d) => ( + + ))} + + v > 0 ? v.toLocaleString('es-AR') : '' + } + /> + + + +
+
+ ) +} \ No newline at end of file diff --git a/src/components/charts/TipoSiniestro.jsx b/src/components/charts/TipoSiniestro.jsx new file mode 100644 index 0000000..b18498e --- /dev/null +++ b/src/components/charts/TipoSiniestro.jsx @@ -0,0 +1,116 @@ +import { PieChart, Pie, Cell, Tooltip, Legend, ResponsiveContainer } from 'recharts' + +const COLORES_TIPO = ['#252C61', '#3A4489', '#CD9F2B', '#337C58', '#C0392B', '#80B0DE', '#6B7280'] +const RADIAN = Math.PI / 180 + +// Agrupa categorías con menos del umbral% del total en "Otros" +function agruparPorUmbral(siniestros, umbralPct = 10) { + if (!siniestros || siniestros.length === 0) return [] + + const conteo = {} + siniestros.forEach((s) => { + // tipo_siniestro_unico es el campo principal; tipo_sinietro es el typo confirmado en BD + const tipo = ( + s.tipo_siniestro_unico?.trim() || + s.tipo_sinietro?.trim() || + s.tipo_siniestro?.trim() || + 'Sin clasificar' + ) + conteo[tipo] = (conteo[tipo] || 0) + 1 + }) + + const total = Object.values(conteo).reduce((a, b) => a + b, 0) + if (total === 0) return [] + + const normalizados = Object.entries(conteo).map(([name, value]) => ({ + name, + value, + pct: (value / total) * 100, + })) + + const principales = normalizados.filter((d) => d.pct >= umbralPct) + const menores = normalizados.filter((d) => d.pct < umbralPct) + + if (menores.length > 0) { + const totalOtros = menores.reduce((sum, d) => sum + d.value, 0) + principales.push({ + name: 'Otros', + value: totalOtros, + pct: (totalOtros / total) * 100, + }) + } + + return principales.sort((a, b) => b.value - a.value) +} + +const CustomLabel = ({ cx, cy, midAngle, innerRadius, outerRadius, pct }) => { + if (pct < 5) return null + const radius = innerRadius + (outerRadius - innerRadius) * 0.55 + const x = cx + radius * Math.cos(-midAngle * RADIAN) + const y = cy + radius * Math.sin(-midAngle * RADIAN) + return ( + + {`${pct.toFixed(0)}%`} + + ) +} + +const CustomTooltip = ({ active, payload }) => { + if (active && payload?.length) { + const d = payload[0].payload + return ( +
+

{d.name}

+

Cantidad: {d.value}

+

Porcentaje: {d.pct.toFixed(1)}%

+
+ ) + } + return null +} + +export default function TipoSiniestro({ siniestros = [] }) { + const data = agruparPorUmbral(siniestros, 10) + + if (!data.length) { + return ( +
+ Sin datos disponibles +
+ ) + } + + return ( +
+
+

Tipo de Siniestro

+

Distribucion por tipo

+
+ + + + {data.map((_, i) => ( + + ))} + + } /> + ( + {value} + )} + /> + + +
+ ) +} diff --git a/src/components/charts/TipoVia.jsx b/src/components/charts/TipoVia.jsx new file mode 100644 index 0000000..1d60297 --- /dev/null +++ b/src/components/charts/TipoVia.jsx @@ -0,0 +1,30 @@ +import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, Cell } from 'recharts' + +const COLORES = ['#252C61','#3A4489','#C0392B','#E8881A','#2D7A4F','#3A7EBF','#8E44AD','#16A085'] + +export default function TipoVia({ siniestros }) { + const conteo = {} + siniestros.forEach(s => { + // ✅ nombre correcto: via_publica + const via = s.via_publica?.trim() || 'Sin datos' + conteo[via] = (conteo[via] || 0) + 1 + }) + const data = Object.entries(conteo).map(([via, total]) => ({ via, total })).sort((a,b) => b.total - a.total).slice(0,8) + + return ( +
+

Tipo de Vía

+ + + + + + [val, 'Siniestros']} /> + + {data.map((_, i) => )} + + + +
+ ) +} diff --git a/src/components/charts/ZonaOcurrencia.jsx b/src/components/charts/ZonaOcurrencia.jsx new file mode 100644 index 0000000..61918a6 --- /dev/null +++ b/src/components/charts/ZonaOcurrencia.jsx @@ -0,0 +1,104 @@ +import { PieChart, Pie, Cell, Tooltip, Legend, ResponsiveContainer } from 'recharts' +import { useChartTheme } from '../../hooks/useChartTheme' + +const COLORES = { + Urbana: '#252C61', + Rural: '#E8881A', + 'Sin datos': '#94A3B8', +} + +const RADIAN = Math.PI / 180 + +function normalizarZona(valor) { + const texto = String(valor ?? '').trim().toLowerCase() + + if (!texto) return 'Sin datos' + if (texto.includes('urb')) return 'Urbana' + if (texto.includes('rur')) return 'Rural' + return 'Sin datos' +} + +export default function ZonaOcurrencia({ siniestros }) { + const { tooltipBg, tooltipBorder, tooltipLabel, tickColor } = useChartTheme() + + const conteo = { Urbana: 0, Rural: 0, 'Sin datos': 0 } + + siniestros.forEach((s) => { + const zona = normalizarZona(s.zona_ocurrencia) + conteo[zona] += 1 + }) + + const data = Object.entries(conteo) + .map(([name, value]) => ({ name, value })) + .filter((item) => item.value > 0) + + const total = data.reduce((acc, d) => acc + d.value, 0) + + const renderLabel = ({ cx, cy, midAngle, innerRadius, outerRadius, percent }) => { + if (percent < 0.04) return null + + const r = innerRadius + (outerRadius - innerRadius) * 0.5 + const x = cx + r * Math.cos(-midAngle * RADIAN) + const y = cy + r * Math.sin(-midAngle * RADIAN) + + return ( + + {`${(percent * 100).toFixed(1)}%`} + + ) + } + + return ( +
+ + + + + {data.map((entry, i) => ( + + ))} + + + [ + `${val} (${total ? ((val / total) * 100).toFixed(1) : 0}%)`, + name, + ]} + /> + + ( + {value} + )} + /> + + +
+ ) +} \ No newline at end of file diff --git a/src/components/layout/Sidebar.jsx b/src/components/layout/Sidebar.jsx new file mode 100644 index 0000000..5604ec9 --- /dev/null +++ b/src/components/layout/Sidebar.jsx @@ -0,0 +1,101 @@ +import { + LayoutDashboard, + TrendingUp, + AlertTriangle, + Activity, + ShieldCheck, + FileText, + Sun, +} from 'lucide-react' + +const SECCIONES = [ + { id: 'resumen', label: 'Resumen General', icon: LayoutDashboard }, + { id: 'historica', label: 'Serie Histórica Provincial', icon: TrendingUp }, + { id: 'fatales', label: 'Siniestros Fatales', icon: AlertTriangle }, + { id: 'lesionados', label: 'Con Lesionados', icon: Activity }, + { id: 'sinlesiones', label: 'Sin Lesiones', icon: ShieldCheck }, + { id: 'sintesis', label: 'Síntesis', icon: FileText }, + { id: 'veranovivo', label: 'Campañas Verano Vivo', icon: Sun }, + +] + +export default function Sidebar({ + seccion, + setSeccion, + year, + periodoDesde = '01/01', + periodoHasta = '31/12', +}) { + return ( + + ) +} \ No newline at end of file diff --git a/src/components/layout/Topbar.jsx b/src/components/layout/Topbar.jsx new file mode 100644 index 0000000..07f59bb --- /dev/null +++ b/src/components/layout/Topbar.jsx @@ -0,0 +1,293 @@ +// src/components/layout/Topbar.jsx +import { useEffect, useMemo, useRef, useState } from 'react' +import { CalendarRange, ChevronDown, X } from 'lucide-react' +import { Building2, MapPin } from 'lucide-react' +import ThemeToggle from '../ui/ThemeToggle' +import FilterSelect from '../ui/FilterSelect' + + +const TITULOS = { + resumen: { title: 'Resumen General', subtitle: 'Indicadores principales del año seleccionado' }, + historica: { title: 'Serie Histórica Provincial', subtitle: 'Tasas y tendencias calculadas sobre el total de la provincia · sin filtro geográfico' }, + fatales: { title: 'Siniestros Fatales', subtitle: 'Análisis específico de siniestros con víctimas fatales' }, + lesionados: { title: 'Con Lesionados', subtitle: 'Análisis de siniestros con personas heridas' }, + sinlesiones: { title: 'Sin Lesiones', subtitle: 'Siniestros sin víctimas fatales ni lesiones graves' }, + sintesis: { title: 'Síntesis', subtitle: 'Resumen ejecutivo e insights del período' }, +} + + +const AÑOS = [2026, 2025, 2024, 2023, 2022, 2021] + + +const MESES = [ + { value: 1, label: 'Enero' }, + { value: 2, label: 'Febrero' }, + { value: 3, label: 'Marzo' }, + { value: 4, label: 'Abril' }, + { value: 5, label: 'Mayo' }, + { value: 6, label: 'Junio' }, + { value: 7, label: 'Julio' }, + { value: 8, label: 'Agosto' }, + { value: 9, label: 'Septiembre' }, + { value: 10, label: 'Octubre' }, + { value: 11, label: 'Noviembre' }, + { value: 12, label: 'Diciembre' }, +] + + +function periodoToValue(parte) { + if (!parte?.mes || !parte?.ano) return '' + return `${parte.ano}-${String(parte.mes).padStart(2, '0')}` +} + +function valueToPeriodo(value) { + if (!value) return null + const [ano, mes] = value.split('-').map(Number) + if (!ano || !mes) return null + return { ano, mes } +} + +function periodoToNumber(parte) { + if (!parte?.ano || !parte?.mes) return null + return parte.ano * 100 + parte.mes +} + +function formatPeriodo(periodo) { + if (!periodo?.desde && !periodo?.hasta) return 'Filtro por fecha' + + const formatear = (parte) => { + if (!parte?.mes || !parte?.ano) return '...' + const mes = MESES.find((m) => m.value === parte.mes)?.label ?? String(parte.mes).padStart(2, '0') + return `${mes} ${parte.ano}` + } + + if (periodo?.desde && periodo?.hasta) return `${formatear(periodo.desde)} → ${formatear(periodo.hasta)}` + if (periodo?.desde) return `Desde ${formatear(periodo.desde)}` + return `Hasta ${formatear(periodo.hasta)}` +} + + +// Clases del botón de período (sigue siendo nativo, no usa FilterSelect) +const pillBase = 'flex items-center gap-2 rounded-2xl border px-4 py-3 text-sm font-medium transition' +const pillInactive = + 'border-opsv-border dark:border-slate-600 bg-white dark:bg-slate-800 ' + + 'text-opsv-navy dark:text-slate-100 ' + + 'hover:border-opsv-navy/40 dark:hover:border-slate-400' +const pillActive = + 'border-opsv-blue bg-opsv-blue/10 text-opsv-navy font-semibold ' + + 'dark:border-sky-400 dark:bg-sky-500/15 dark:text-white' + + +export default function Topbar({ + seccion, + year, + setYear, + periodo, + setPeriodo, + siniestrosCount, + departamentoFiltro, + setDepartamentoFiltro, + departamentosDisponibles, + localidadFiltro, + setLocalidadFiltro, + localidadesDisponibles, + onExportarPdf, +}) { + const { title, subtitle } = TITULOS[seccion] || TITULOS.resumen + + const [openFiltro, setOpenFiltro] = useState(false) + const [desdeInput, setDesdeInput] = useState(periodoToValue(periodo?.desde)) + const [hastaInput, setHastaInput] = useState(periodoToValue(periodo?.hasta)) + const panelRef = useRef(null) + + const filtroActivo = Boolean(periodo?.desde || periodo?.hasta) + + useEffect(() => { + setDesdeInput(periodoToValue(periodo?.desde)) + setHastaInput(periodoToValue(periodo?.hasta)) + }, [periodo]) + + useEffect(() => { + function handleClickOutside(event) { + if (panelRef.current && !panelRef.current.contains(event.target)) { + setOpenFiltro(false) + } + } + function handleEscape(event) { + if (event.key === 'Escape') setOpenFiltro(false) + } + document.addEventListener('mousedown', handleClickOutside) + document.addEventListener('keydown', handleEscape) + return () => { + document.removeEventListener('mousedown', handleClickOutside) + document.removeEventListener('keydown', handleEscape) + } + }, []) + + const errorRango = useMemo(() => { + const desde = valueToPeriodo(desdeInput) + const hasta = valueToPeriodo(hastaInput) + const nDesde = periodoToNumber(desde) + const nHasta = periodoToNumber(hasta) + if (nDesde && nHasta && nDesde > nHasta) { + return 'La fecha "desde" no puede ser posterior a "hasta".' + } + return null + }, [desdeInput, hastaInput]) + + const aplicarFiltro = () => { + const desde = valueToPeriodo(desdeInput) + const hasta = valueToPeriodo(hastaInput) + const nDesde = periodoToNumber(desde) + const nHasta = periodoToNumber(hasta) + if (nDesde && nHasta && nDesde > nHasta) return + setPeriodo({ desde, hasta }) + setOpenFiltro(false) + } + + const limpiarFiltro = () => { + setDesdeInput('') + setHastaInput('') + setPeriodo({ desde: null, hasta: null }) + setOpenFiltro(false) + } + + return ( +
+
+
+

OPSV

+

{title}

+

{subtitle}

+
+ +
+ + {/* ── Selector de año ── */} + setYear(Number(v))} + options={AÑOS.map((v) => ({ value: String(v), label: String(v) }))} + placeholder="Año" + /> + + {/* ── Filtro por período ── sin cambios, botón nativo ── */} +
+ + + {openFiltro && ( +
+
+

Filtrar por período

+

+ Seleccioná un rango mensual para acotar los siniestros analizados. +

+
+ +
+ + +
+ + {errorRango && ( +
+ {errorRango} +
+ )} + +
+ + +
+
+ )} +
+ + {/* ── Filtro por departamento (oculto en Verano Vivo) ── */} + {seccion !== 'veranovivo' !== 'historica'&& ( + ({ value: d, label: d }))} + placeholder="Todos los deptos." + /> + )} + + {/* ── Filtro por localidad (oculto en Verano Vivo, deshabilitado sin depto.) ── */} + {seccion !== 'veranovivo' !== 'historica' && ( + ({ value: l, label: l }))} + placeholder="Todas las localidades" + placeholderEmpty="Seleccioná un depto." + disabled={!departamentoFiltro} + /> + )} + + + {/* ── Descargar PDF ── */} + + + + + {/* ── Contador ── */} +
+ {siniestrosCount ?? 0} siniestros cargados +
+ +
+
+
+ ) +} \ No newline at end of file diff --git a/src/components/ui/ChartCard.jsx b/src/components/ui/ChartCard.jsx new file mode 100644 index 0000000..dac7a07 --- /dev/null +++ b/src/components/ui/ChartCard.jsx @@ -0,0 +1,47 @@ +// src/components/ui/ChartCard.jsx +const HEIGHTS = { + sm: 'h-[300px]', + md: 'h-[360px]', + lg: 'h-[420px]', + auto: '', +} + +export default function ChartCard({ + kicker, + title, + subtitle, + height = 'md', + children, + className = '', + contentClassName = '', +}) { + return ( +
+ {(kicker || title || subtitle) && ( +
+ {kicker && ( +

+ {kicker} +

+ )} + {title && ( +

+ {title} +

+ )} + {subtitle && ( +

+ {subtitle} +

+ )} +
+ )} +
+ {children} +
+
+ ) +} \ No newline at end of file diff --git a/src/components/ui/ErrorBanner.jsx b/src/components/ui/ErrorBanner.jsx new file mode 100644 index 0000000..73c3f0e --- /dev/null +++ b/src/components/ui/ErrorBanner.jsx @@ -0,0 +1,10 @@ +export default function ErrorBanner({ message }) { + if (!message) return null + + return ( +
+
Error al cargar datos
+

{message}

+
+ ) +} diff --git a/src/components/ui/FilterSelect.jsx b/src/components/ui/FilterSelect.jsx new file mode 100644 index 0000000..e9a3921 --- /dev/null +++ b/src/components/ui/FilterSelect.jsx @@ -0,0 +1,119 @@ +// src/components/ui/FilterSelect.jsx +import { useEffect, useRef, useState } from 'react' +import { ChevronDown, X } from 'lucide-react' + +export default function FilterSelect({ + icon: Icon, + value, + onChange, + options, // [{ value: string, label: string }] + placeholder, + placeholderEmpty, + disabled = false, + className = '', +}) { + const [open, setOpen] = useState(false) + const ref = useRef(null) + + const selected = options.find(o => o.value === value) + + // Cerrar al hacer click afuera o Escape + useEffect(() => { + function handleClickOutside(e) { + if (ref.current && !ref.current.contains(e.target)) setOpen(false) + } + function handleEscape(e) { + if (e.key === 'Escape') setOpen(false) + } + document.addEventListener('mousedown', handleClickOutside) + document.addEventListener('keydown', handleEscape) + return () => { + document.removeEventListener('mousedown', handleClickOutside) + document.removeEventListener('keydown', handleEscape) + } + }, []) + + const pillBase = 'relative flex items-center gap-2 rounded-2xl border px-4 py-3 text-sm font-medium transition select-none' + const pillInactive = 'border-opsv-border dark:border-slate-600 bg-white dark:bg-slate-800 text-opsv-navy dark:text-slate-100 hover:border-opsv-navy/40 dark:hover:border-slate-400' + const pillActive = 'border-opsv-blue bg-opsv-blue/10 text-opsv-navy font-semibold dark:border-sky-400 dark:bg-sky-500/15 dark:text-white' + const pillDisabled = 'border-opsv-border dark:border-slate-700 bg-opsv-surface dark:bg-slate-800/50 text-opsv-muted dark:text-slate-500 cursor-not-allowed opacity-60' + + const currentStyle = disabled ? pillDisabled : value ? pillActive : pillInactive + + return ( +
+ {Icon && } + + {/* Trigger */} + + + {/* Botón limpiar */} + {value && !disabled && ( + + )} + + {/* Dropdown */} + {open && !disabled && ( +
    + + {/* Opción vacía */} +
  • + +
  • + + {options.length === 0 && ( +
  • + Sin opciones disponibles +
  • + )} + + {options.map(opt => ( +
  • + +
  • + ))} +
+ )} +
+ ) +} \ No newline at end of file diff --git a/src/components/ui/KPICard.jsx b/src/components/ui/KPICard.jsx new file mode 100644 index 0000000..bdd0e8a --- /dev/null +++ b/src/components/ui/KPICard.jsx @@ -0,0 +1,46 @@ +export default function KPICard({ + label, + value, + color, + unit, + variation, + centered = false, +}) { + const formattedValue = + typeof value === 'number' ? value.toLocaleString('es-AR') : value + + return ( +
+
+
+
+ {formattedValue} + {unit ? ( + + {' '} + {unit} + + ) : null} +
+ +

+ {label} +

+
+ + {variation ? ( +
+ {variation} +
+ ) : null} +
+
+ ) +} \ No newline at end of file diff --git a/src/components/ui/LoadingSpinner.jsx b/src/components/ui/LoadingSpinner.jsx new file mode 100644 index 0000000..46784fb --- /dev/null +++ b/src/components/ui/LoadingSpinner.jsx @@ -0,0 +1,9 @@ +export default function LoadingSpinner() { + return ( +
+
+
Cargando datos...
+

Por favor espera mientras se carga la información de Supabase.

+
+ ) +} diff --git a/src/components/ui/PdfExportModal.jsx b/src/components/ui/PdfExportModal.jsx new file mode 100644 index 0000000..186b641 --- /dev/null +++ b/src/components/ui/PdfExportModal.jsx @@ -0,0 +1,172 @@ +import { useState } from 'react' +import { FileDown, Loader2, X } from 'lucide-react' +import { exportarPDF, SECCIONES_EXPORTABLES } from '../../utils/exportPdf' + +export default function PdfExportModal({ year, onClose }) { + const [seleccionadas, setSeleccionadas] = useState( + SECCIONES_EXPORTABLES.map(s => s.id) + ) + const [generando, setGenerando] = useState(false) + const [progreso, setProgreso] = useState(0) + const [error, setError] = useState(null) + + function toggleSeccion(id) { + setSeleccionadas(prev => + prev.includes(id) ? prev.filter(s => s !== id) : [...prev, id] + ) + } + + function toggleTodas() { + setSeleccionadas(prev => + prev.length === SECCIONES_EXPORTABLES.length + ? [] + : SECCIONES_EXPORTABLES.map(s => s.id) + ) + } + + async function handleExportar() { + if (!seleccionadas.length) return + setGenerando(true) + setProgreso(0) + setError(null) + try { + await exportarPDF({ + seccionesIds: SECCIONES_EXPORTABLES + .map(s => s.id) + .filter(id => seleccionadas.includes(id)), + year, + onProgress: setProgreso, + }) + onClose() + } catch (e) { + console.error(e) + setError('Ocurrió un error al generar el PDF. Intentá de nuevo.') + } finally { + setGenerando(false) + } + } + + const todasMarcadas = seleccionadas.length === SECCIONES_EXPORTABLES.length + + return ( +
+ {/* Backdrop */} +
+ + {/* Modal */} +
+ + {/* Header */} +
+
+

+ Exportar a PDF +

+

+ Seleccioná las secciones a incluir en el informe {year}. +

+
+ {!generando && ( + + )} +
+ + {/* Seleccionar todas */} + + + {/* Checkboxes */} +
+ {SECCIONES_EXPORTABLES.map(sec => ( + + ))} +
+ + {/* Barra de progreso */} + {generando && ( +
+
+ + Generando PDF... + + + {progreso}% + +
+
+
+
+
+ )} + + {/* Error */} + {error && ( +
+ {error} +
+ )} + + {/* Botones */} +
+ + +
+ +
+
+ ) +} \ No newline at end of file diff --git a/src/components/ui/ThemeToggle.jsx b/src/components/ui/ThemeToggle.jsx new file mode 100644 index 0000000..4ae2045 --- /dev/null +++ b/src/components/ui/ThemeToggle.jsx @@ -0,0 +1,34 @@ +import { useState, useEffect } from 'react' +import { Sun, Moon } from 'lucide-react' + +export default function ThemeToggle() { + const [dark, setDark] = useState(false) + + useEffect(() => { + const saved = localStorage.getItem('opsv-theme') + if (saved === 'dark') { + document.documentElement.classList.add('dark') // ← era setAttribute + setDark(true) + } + }, []) + + const toggle = () => { + const next = !dark + document.documentElement.classList.toggle('dark') // ← era setAttribute + localStorage.setItem('opsv-theme', next ? 'dark' : 'light') + setDark(next) + } + + return ( + + ) +} diff --git a/src/hooks/useAuth.jsx b/src/hooks/useAuth.jsx new file mode 100644 index 0000000..45c657a --- /dev/null +++ b/src/hooks/useAuth.jsx @@ -0,0 +1,123 @@ +// src/hooks/useAuth.js +import { createContext, useContext, useEffect, useState } from 'react' +import { supabase } from '../lib/supabase' + +const AuthContext = createContext(null) + +export function AuthProvider({ children }) { + const [user, setUser] = useState(null) + const [role, setRole] = useState(null) + const [loading, setLoading] = useState(true) + + async function fetchRole(userId) { + try { + const { data, error } = await supabase + .from('user_roles') + .select('role') + .eq('user_id', userId) + .maybeSingle() + + console.log('🔵 fetchRole data/error:', data, error) + + if (error) throw error + setRole(data?.role ?? null) + } catch (e) { + console.error('🔴 fetchRole:', e.message) + setRole(null) + } + } + + useEffect(() => { + let mounted = true + + async function init() { + try { + const { data, error } = await supabase.auth.getSession() + if (error) console.error('🔴 getSession:', error.message) + + if (!mounted) return + + const currentUser = data?.session?.user ?? null + console.log('🔵 init getSession session:', data?.session) + + setUser(currentUser) + setLoading(false) // <- importante: liberar loading acá + + if (currentUser) { + fetchRole(currentUser.id) // <- sin await + } else { + setRole(null) + } + } catch (e) { + console.error('🔴 init auth:', e.message) + if (mounted) setLoading(false) + } + } + + init() + + const { data: { subscription } } = supabase.auth.onAuthStateChange( + (_event, session) => { + if (!mounted) return + + console.log('🟡 onAuthStateChange:', _event, session) + + const currentUser = session?.user ?? null + setUser(currentUser) + setLoading(false) // <- importante: no esperar rol + + if (currentUser) { + fetchRole(currentUser.id) // <- sin await + } else { + setRole(null) + } + } + ) + + return () => { + mounted = false + subscription.unsubscribe() + } + }, []) + + async function signIn(email, password) { + const { data, error } = await supabase.auth.signInWithPassword({ email, password }) + if (error) throw error + return data + } + + async function signOut() { + const { error } = await supabase.auth.signOut() + if (error) throw error + setUser(null) + setRole(null) + setLoading(false) + } + + const isSuperAdmin = role === 'superadmin' + const isAdmin = role === 'admin' || isSuperAdmin + const isEditor = role === 'editor' || isAdmin + + return ( + + {children} + + ) +} + +export function useAuth() { + const context = useContext(AuthContext) + if (!context) throw new Error('useAuth debe usarse dentro de ') + return context +} \ No newline at end of file diff --git a/src/hooks/useChartTheme.js b/src/hooks/useChartTheme.js new file mode 100644 index 0000000..f9a92dc --- /dev/null +++ b/src/hooks/useChartTheme.js @@ -0,0 +1,37 @@ +// src/hooks/useChartTheme.js +import { useState, useEffect } from 'react' + +export function useChartTheme() { + const [isDark, setIsDark] = useState( + document.documentElement.classList.contains('dark') + ) + + useEffect(() => { + const observer = new MutationObserver(() => { + setIsDark(document.documentElement.classList.contains('dark')) + }) + observer.observe(document.documentElement, { + attributes: true, + attributeFilter: ['class'], + }) + return () => observer.disconnect() + }, []) + + return { + // Texto de ejes / labels + tickColor: isDark ? '#E5E7EB' : '#4B5563', + + // Líneas de grilla + gridColor: isDark ? '#273549' : '#E5E7EB', + + // Tooltip + tooltipBg: isDark ? '#020617' : '#FFFFFF', + tooltipBorder: isDark ? '#1E293B' : '#E5E7EB', + tooltipLabel: isDark ? '#F9FAFB' : '#111827', + + // Colores de series para reusar + seriePrimary: isDark ? '#60A5FA' : '#252C61', // azul principal + serieSecondary: isDark ? '#FACC15' : '#CD9F2B', // dorado/promedio + serieNeutral: isDark ? '#9CA3AF' : '#6B7280', // líneas auxiliares + } +} \ No newline at end of file diff --git a/src/hooks/useData.js b/src/hooks/useData.js new file mode 100644 index 0000000..91e33f3 --- /dev/null +++ b/src/hooks/useData.js @@ -0,0 +1,91 @@ +import { useState, useEffect, useCallback } from 'react' +import { supabasePublic } from '../lib/supabase' + +function estaEnPeriodo(item, periodo) { + if (!periodo?.desde || !periodo?.hasta) return true + + const ano = Number(item.ano) + const mes = Number(item.mes) + + const desdeValor = periodo.desde.ano * 100 + periodo.desde.mes + const hastaValor = periodo.hasta.ano * 100 + periodo.hasta.mes + const actualValor = ano * 100 + mes + + return actualValor >= desdeValor && actualValor <= hastaValor +} + +export function useData(year = null, periodo = { desde: null, hasta: null }) { + const [siniestros, setSiniestros] = useState([]) + const [involucrados, setInvolucrados] = useState([]) + const [personas, setPersonas] = useState([]) + const [loading, setLoading] = useState(true) + const [error, setError] = useState(null) + + const periodoKey = JSON.stringify(periodo) + + const fetchData = useCallback(async () => { + setLoading(true) + setError(null) + + const periodoActual = JSON.parse(periodoKey) + const periodoActivo = periodoActual.desde && periodoActual.hasta + + try { + let qS = supabasePublic.from('siniestros').select('*') + let qI = supabasePublic.from('Involucrados').select('*') + let qP = supabasePublic.from('Personas').select('*') + + if (periodoActivo) { + const anoDesde = periodoActual.desde.ano + const anoHasta = periodoActual.hasta.ano + + qS = qS.gte('ano', anoDesde).lte('ano', anoHasta) + qI = qI.gte('ano', anoDesde).lte('ano', anoHasta) + qP = qP.gte('ano', anoDesde).lte('ano', anoHasta) + } else if (year) { + qS = qS.eq('ano', year) + qI = qI.eq('ano', year) + qP = qP.eq('ano', year) + } + + const [resS, resI, resP] = await Promise.all([qS, qI, qP]) + + if (resS.error) throw resS.error + if (resI.error) throw resI.error + if (resP.error) throw resP.error + + let dataS = resS.data || [] + let dataI = resI.data || [] + let dataP = resP.data || [] + + if (periodoActivo) { + dataS = dataS.filter(item => estaEnPeriodo(item, periodoActual)) + dataI = dataI.filter(item => estaEnPeriodo(item, periodoActual)) + dataP = dataP.filter(item => estaEnPeriodo(item, periodoActual)) + } + + console.log('useData fetch', { + year, + periodo: periodoActual, + siniestros: dataS.length, + involucrados: dataI.length, + personas: dataP.length, + }) + + setSiniestros(dataS) + setInvolucrados(dataI) + setPersonas(dataP) + } catch (err) { + setError(err?.message || String(err)) + console.error('useData error', err) + } finally { + setLoading(false) + } + }, [year, periodoKey]) + + useEffect(() => { + fetchData() + }, [fetchData]) + + return { siniestros, involucrados, personas, loading, error, refetch: fetchData } +} \ No newline at end of file diff --git a/src/hooks/useSiniestralidad.js b/src/hooks/useSiniestralidad.js new file mode 100644 index 0000000..112161b --- /dev/null +++ b/src/hooks/useSiniestralidad.js @@ -0,0 +1,114 @@ +/** + * useSiniestralidad.js — v2 CORREGIDO + * + * CAMBIO CRÍTICO: Persona e Involucrados se consultan por ano/mes directamente, + * NO por id_feu con .in(). Motivo: .in() con muchos IDs supera el límite de URL + * de PostgREST y devuelve array vacío sin error visible. + * + * El filtro de zona se aplica en memoria en Dashboard.jsx usando id_feu. + * + * Paginación: .range(0, 4999) para hasta 5000 filas por tabla. + * Si tu dataset tiene más, aumentá el límite. + */ +import { useState, useEffect } from 'react' +import { supabase } from '../lib/supabase' + +// ── Nombres EXACTOS de tablas en Supabase (case-sensitive) ──── +const T = { + siniestros: 'siniestros', + involucrados: 'Involucrados', // I mayúscula + personas: 'Personas', // P mayúscula +} + +// ── Columnas seleccionadas ──────────────────────────────────── +const SEL = { + sin: [ + 'id_feu','mes','ano','siniestro_hora','localidad','departamento', + 'zona_ocurrencia','via_publica','tipo_siniestro_unico', + 'fallecidos','heridos','ilesos','dia_semana','es_fin_semana', + 'configuracion_de_la_via','luminosidad','latitud','longitud', + ].join(','), + + inv: [ + 'id_feu','tipo_involucrado','marca','modelo','color','ano','mes', + ].join(','), + + per: [ + 'id_feu','genero','edad','rol_persona_involucrada','ubicacion_vehiculo', + 'estado_ocupante_inicio','estado_ocupante_final','categoria_siniestro', + 'cinturon_seguridad','casco','airbag','prueba_alcohol', + 'fuga','nacionalidad','ano','mes', + ].join(','), +} + +const MAX_ROWS = 4999 // ajustá si tu dataset es mayor + +async function queryByAnoMes(tabla, select, año, mes) { + let q = supabase.from(tabla).select(select).eq('ano', año).range(0, MAX_ROWS) + if (mes > 0) q = q.eq('mes', mes) + const { data, error } = await q + return { data: data ?? [], error } +} + +export function useSiniestralidad(año, mes) { + const [siniestros, setSiniestros] = useState([]) + const [involucrados, setInvolucrados] = useState([]) + const [personas, setPersonas] = useState([]) + const [loading, setLoading] = useState(true) + const [debug, setDebug] = useState(null) + const [error, setError] = useState(null) + + useEffect(() => { + let cancelled = false + + async function cargar() { + setLoading(true) + + // ── Las 3 consultas en PARALELO — cada una por ano/mes ─ + const [resS, resI, resP] = await Promise.all([ + queryByAnoMes(T.siniestros, SEL.sin, año, mes), + queryByAnoMes(T.involucrados, SEL.inv, año, mes), + queryByAnoMes(T.personas, SEL.per, año, mes), + ]) + + const log = { + año_consultado: año, + mes_consultado: mes > 0 ? mes : 'todos', + siniestros: { + tabla: T.siniestros, + registros: resS.data.length, + error: resS.error?.message ?? null, + }, + involucrados: { + tabla: T.involucrados, + registros: resI.data.length, + error: resI.error?.message ?? null, + }, + personas: { + tabla: T.personas, + registros: resP.data.length, + error: resP.error?.message ?? null, + }, + } + + if (cancelled) return + + const errorEntries = [resS.error, resI.error, resP.error].filter(Boolean) + const errorMessage = errorEntries.length + ? errorEntries.map((err) => err?.message || String(err)).join(' | ') + : null + + setSiniestros(resS.data) + setInvolucrados(resI.data) + setPersonas(resP.data) + setDebug(log) + setError(errorMessage) + setLoading(false) + } + + cargar() + return () => { cancelled = true } + }, [año, mes]) + + return { siniestros, involucrados, personas, loading, debug, error } +} diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..8b6c9ee --- /dev/null +++ b/src/index.css @@ -0,0 +1,79 @@ +@import "tailwindcss"; + +@theme { + /* Colores de marca */ + --color-opsv-navy: #252C61; + --color-opsv-navy-dark: #1a2050; + --color-opsv-blue: #80B0DE; + --color-opsv-red: #C44228; + --color-opsv-orange: #CD9F2B; + --color-opsv-green: #337C58; + + /* Colores de superficie (modo claro) */ + --color-opsv-bg: #F4F6F8; + --color-opsv-surface: #FFFFFF; + --color-opsv-border: #E2E8F0; + --color-opsv-text: #1A202C; + --color-opsv-muted: #4A5568; + --color-opsv-faint: #718096; + + /* Tipografías */ + --font-family-heading: 'Montserrat', sans-serif; + --font-family-body: 'Barlow Semi Condensed', sans-serif; +} + +/* ── Dark mode ── */ +html.dark { + --color-opsv-bg: #0f1117; + --color-opsv-surface: #1a1d27; + --color-opsv-border: #2d3148; + --color-opsv-text: #e2e8f0; + --color-opsv-muted: #94a3b8; + --color-opsv-faint: #64748b; + --color-opsv-navy: #a8b4ff; +} + +@layer base { + html { + font-family: theme(--font-family-body); + color: theme(--color-opsv-text); + background: theme(--color-opsv-bg); + } + } + body { + margin: 0; + min-height: 100vh; + background: theme(--color-opsv-bg); + color: theme(--color-opsv-text); + transition: background 250ms ease, color 250ms ease; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + } + + #root { min-height: 100vh; } + + h1, h2, h3, h4, h5, h6 { + font-family: theme(--font-family-heading); + color: theme(--color-opsv-navy); + margin: 0; + } +/* ── Override de colores modernos para captura html2canvas ── */ +[data-pdf-render="true"], +[data-pdf-render="true"] * { + /* Reemplaza oklch/oklab con equivalentes hex */ + --shadow-sm: 0 1px 2px rgba(30, 27, 20, 0.06) !important; + --shadow-md: 0 4px 12px rgba(30, 27, 20, 0.08) !important; + --shadow-lg: 0 12px 32px rgba(30, 27, 20, 0.12) !important; + --color-divider: #dcd9d5 !important; + --color-border: #d4d1ca !important; + + /* Neutraliza cualquier box-shadow que use oklch directamente */ + box-shadow: none !important; +} + +[data-pdf-render="true"] .recharts-wrapper, +[data-pdf-render="true"] canvas { + /* Forzar dimensiones explícitas para evitar el width(-1) */ + min-width: 0 !important; + min-height: 0 !important; +} \ No newline at end of file diff --git a/src/lib/supabase.js b/src/lib/supabase.js new file mode 100644 index 0000000..dcd2ba7 --- /dev/null +++ b/src/lib/supabase.js @@ -0,0 +1,16 @@ +import { createClient } from '@supabase/supabase-js' + +const supabaseUrl = import.meta.env.VITE_SUPABASE_URL +const supabaseKey = import.meta.env.VITE_SUPABASE_ANON_KEY + +// Cliente principal (con auth) +export const supabase = createClient(supabaseUrl, supabaseKey) + +// Cliente para datos públicos (sin auth, sin conflicto) +export const supabasePublic = createClient(supabaseUrl, supabaseKey, { + auth: { + persistSession: false, + autoRefreshToken: false, + storageKey: 'supabase-public', // ← clave distinta = no hay conflicto + } +}) \ No newline at end of file diff --git a/src/main.jsx b/src/main.jsx new file mode 100644 index 0000000..de60394 --- /dev/null +++ b/src/main.jsx @@ -0,0 +1,14 @@ +// src/main.jsx +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import { AuthProvider } from './hooks/useAuth' +import App from './App.jsx' +import './index.css' + +createRoot(document.getElementById('root')).render( + + + + + +) diff --git a/src/pages/Admin.jsx b/src/pages/Admin.jsx new file mode 100644 index 0000000..eddf6cb --- /dev/null +++ b/src/pages/Admin.jsx @@ -0,0 +1,193 @@ +// src/pages/Admin.jsx +import { useEffect, useState } from 'react' +import { supabase } from '../lib/supabase' +import { LogOut, Settings, Database, FileText } from 'lucide-react' +import { useNavigate } from 'react-router-dom' +import { useAuth } from '../hooks/useAuth' +import ImportarCSV from './ImportarCSV' + +export default function Admin() { + const { user, role, isSuperAdmin, signOut, loading } = useAuth() + const [stats, setStats] = useState({ siniestros: 0, personas: 0, involucrados: 0 }) + const [statsLoading, setStatsLoading] = useState(true) + const navigate = useNavigate() + const [vista, setVista] = useState('panel') + + useEffect(() => { + if (!user) return + + const fetchStats = async () => { + const [resS, resP, resI] = await Promise.all([ + supabase.from('siniestros').select('id_feu', { count: 'exact', head: true }), + supabase.from('Personas').select('id_persona', { count: 'exact', head: true }), + supabase.from('Involucrados').select('id_involucrado', { count: 'exact', head: true }), + ]) + setStats({ + siniestros: resS.count || 0, + personas: resP.count || 0, + involucrados: resI.count || 0, + }) + setStatsLoading(false) + } + + fetchStats() + }, [user]) + + const handleLogout = async () => { + + navigate('/Dashboard', { replace: true }) + await signOut() + } + + if (loading || statsLoading) return ( +
+
Cargando...
+
+ ) + + // Header reutilizable para ambas vistas + const Header = ({ titulo, onVolver }) => ( +
+
+
+ {onVolver && ( + <> + + | + + )} +

{titulo}

+
+ +
+
+

{user?.email}

+

{role}

+
+ +
+
+
+ ) + + if (vista === 'importar') return ( +
+
setVista('panel')} /> + +
+ ) + + return ( +
+
+ +
+ {/* Tarjetas de stats */} +
+
+
+
+

Siniestros

+

+ {stats.siniestros.toLocaleString('es-AR')} +

+
+ +
+
+ +
+
+
+

Personas

+

+ {stats.personas.toLocaleString('es-AR')} +

+
+ +
+
+ +
+
+
+

Involucrados

+

+ {stats.involucrados.toLocaleString('es-AR')} +

+
+ +
+
+
+ + {/* Funcionalidades */} +
+

+ + Funcionalidades disponibles +

+
+
+

📊 Dashboard

+

+ Visualiza todas las secciones de análisis de siniestralidad vial +

+ + Ir al dashboard → + +
+ +
setVista('importar')} + className="p-4 bg-opsv-bg rounded-2xl border border-opsv-border cursor-pointer hover:border-opsv-blue hover:shadow-sm transition" + > +

📤 Importar datos

+

+ Carga nuevos datos CSV desde la base de siniestros +

+ + Abrir importador → + +
+ + {isSuperAdmin && ( +
+

⚙️ Configuración

+

+ Ajusta parámetros del dashboard (próximamente) +

+
+ )} + +
+

📥 Exportar reportes

+

+ Descarga informes en PDF (próximamente) +

+
+
+
+ +
+

OPSV Dashboard v1.0 — Agencia Provincial de Seguridad Vial, Santa Cruz

+

Para soporte: admin@opsv.sc.gov.ar

+
+
+
+ ) +} \ No newline at end of file diff --git a/src/pages/Dashboard.jsx b/src/pages/Dashboard.jsx new file mode 100644 index 0000000..7034885 --- /dev/null +++ b/src/pages/Dashboard.jsx @@ -0,0 +1,219 @@ +// src/pages/Dashboard.jsx +import { useNavigate } from 'react-router-dom' +import { Settings } from 'lucide-react' +import { useData } from '../hooks/useData' +import { useAuth } from '../hooks/useAuth' +import Sidebar from '../components/layout/Sidebar' +import Topbar from '../components/layout/Topbar' +import LoadingSpinner from '../components/ui/LoadingSpinner' +import ErrorBanner from '../components/ui/ErrorBanner' +import SecResumen from './SecResumen' +import SecHistorica from './SecHistorica' +import SecFatales from './SecFatales' +import SecLesionados from './SecLesionados' +import SecSinLesiones from './SecSinLesiones' +import SecSintesis from './SecSintesis' +import SecVeranoVivo from './SecVeranoVivo' +import { useState, useMemo, useEffect, useRef } from 'react' +import PdfExportModal from '../components/ui/PdfExportModal' + + +function SectionPlaceholder({ title, description }) { + return ( +
+
{title}
+

{description}

+

+ Este espacio está reservado para la próxima fase de implementación. +

+
+ ) +} + + +function AdminFooter() { + const { user, isAdmin } = useAuth() + const navigate = useNavigate() + + return ( +
+

+ OPSV Dashboard — Agencia Provincial de Seguridad Vial, Santa Cruz +

+ +
+ ) +} + + +export default function Dashboard() { + const [seccion, setSeccion] = useState('resumen') + const [year, setYear] = useState(2025) + const [periodo, setPeriodo] = useState({ desde: null, hasta: null }) + const [departamentoFiltro, setDepartamentoFiltro] = useState('') + const [localidadFiltro, setLocalidadFiltro] = useState('') + const [modalPdf, setModalPdf] = useState(false) + + // Hook principal — año seleccionado por el usuario + const { siniestros, personas, involucrados, loading, error } = useData(year, periodo) + + // ── Departamentos disponibles para el año/período activo ───────────────── + const departamentosDisponibles = useMemo(() => { + return [...new Set( + (siniestros ?? []).map(s => s.departamento).filter(Boolean) + )].sort() + }, [siniestros]) + + // ── Localidades filtradas por el departamento seleccionado ─────────────── + const localidadesDisponibles = useMemo(() => { + const base = departamentoFiltro + ? (siniestros ?? []).filter(s => s.departamento === departamentoFiltro) + : (siniestros ?? []) + return [...new Set(base.map(s => s.localidad).filter(Boolean))].sort() + }, [siniestros, departamentoFiltro]) + + // ── Reset en cascada: año/período → limpia todo ────────────────────────── + useEffect(() => { + setDepartamentoFiltro('') + setLocalidadFiltro('') + }, [year, periodo]) + + // ── Reset en cascada: departamento → limpia localidad ─────────────────── + useEffect(() => { + setLocalidadFiltro('') + }, [departamentoFiltro]) + + // ── Array final con ambos filtros aplicados ────────────────────────────── + const siniestrosFiltrados = useMemo(() => { + let result = siniestros ?? [] + if (departamentoFiltro) result = result.filter(s => s.departamento === departamentoFiltro) + if (localidadFiltro) result = result.filter(s => s.localidad === localidadFiltro) + return result + }, [siniestros, departamentoFiltro, localidadFiltro]) + + // ── Verano Vivo: datos históricos de campañas anteriores ───────────────── + const { siniestros: sinVV2022 } = useData(2022, { desde: null, hasta: null }) + const { siniestros: sinVV2023 } = useData(2023, { desde: null, hasta: null }) + const { siniestros: sinVV2024 } = useData(2024, { desde: null, hasta: null }) + + const siniestrosVV = useMemo(() => { + const all = [ + ...(sinVV2022 ?? []), + ...(sinVV2023 ?? []), + ...(sinVV2024 ?? []), + ...(siniestros ?? []), + ] + const seen = new Set() + return all.filter(s => { + const id = s.id_feu + if (id == null) return true + if (seen.has(id)) return false + seen.add(id) + return true + }) + }, [sinVV2022, sinVV2023, sinVV2024, siniestros]) + // ───────────────────────────────────────────────────────────────────────── + + return ( +
+ + +
+ setModalPdf(true)} + /> + +
+ {error && } + {loading ? ( + + ) : seccion === 'resumen' ? ( + + ) : seccion === 'historica' ? ( + + ) : seccion === 'fatales' ? ( + + ) : seccion === 'lesionados' ? ( + + ) : seccion === 'sinlesiones' ? ( + + ) : seccion === 'sintesis' ? ( + + ) : seccion === 'veranovivo' ? ( + + ) : ( + + )} + +
+ {/* ── Contenedor oculto para captura PDF ─────────────────────────── */} + + {/* ────────────────────────────────────────────────────────────────── */} + +
+ + {/* Modal PDF */} + {modalPdf && ( + setModalPdf(false)} + /> + )} +
+ ) +} + \ No newline at end of file diff --git a/src/pages/ImportarCSV.jsx b/src/pages/ImportarCSV.jsx new file mode 100644 index 0000000..a637f97 --- /dev/null +++ b/src/pages/ImportarCSV.jsx @@ -0,0 +1,500 @@ +// src/pages/ImportarCSV.jsx +import { useState, useRef } from 'react' +import { supabase } from '../lib/supabase' +import { Upload, CheckCircle, XCircle, AlertTriangle, FileText, ChevronDown, ChevronUp, Loader2 } from 'lucide-react' + + +// Columnas que EXISTEN en Supabase (no todas las del CSV) +const ESQUEMAS = { + siniestros: [ + "id_feu","numero_formulario","expediente_judicial","dependencia","siniestro_fecha", + "siniestro_hora","dia","mes","ano","provincia","departamento","id_departamento", + "localidad","zona_ocurrencia","via_publica","nombre_via","altura_km","entre_calle_1", + "entre_calle_2","latitud","longitud","ilesos","heridos","fallecidos","vehiculos", + "peatones","tipo_siniestro_multiple","tipo_siniestro_unico","despiste_previo", + "cantidad_de_involucrados","configuracion_de_la_via","material_de_la_calzada", + "estado_de_la_calzada","estado_fisico_ambiental","division_fisica_de_la_via", + "luminosidad","luz_artificial","dia_semana","es_fin_semana" + ], + Involucrados: [ + "id_feu","numero_formulario","id_involucrado","siniestro_fecha","dia","mes","ano", + "provincia","numero","tipo_involucrado","marca","modelo","color" + ], + Personas: [ + "id_feu","numero_formulario","id_involucrado","id_feu_persona","id_persona", + "siniestro_fecha","dia","mes","ano","rol_persona_involucrada","ubicacion_vehiculo", + "estado_ocupante_inicio","fuga","genero","nacionalidad","edad","provincia", + "airbag","cinturon_seguridad","casco","prueba_alcohol","estado_ocupante_final", + "categoria_siniestro" + ] +} + +const TABLAS = ['siniestros', 'Involucrados', 'Personas'] + + +function calcularDiaSemana(fechaStr) { + if (!fechaStr) return { dia_semana: null, es_fin_semana: false } + + let dia, mes, anio + const partesFecha = String(fechaStr).split(' ')[0] + + if (partesFecha.includes('/')) { + const p = partesFecha.split('/') + dia = p[0] + mes = p[1] + anio = p[2] + } else if (partesFecha.includes('-')) { + const p = partesFecha.split('-') + anio = p[0] + mes = p[1] + dia = p[2] + } else { + return { dia_semana: null, es_fin_semana: false } + } + + const fecha = new Date(Number(anio), Number(mes) - 1, Number(dia)) + if (isNaN(fecha.getTime())) return { dia_semana: null, es_fin_semana: false } + + const dias = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'] + const dia_semana = dias[fecha.getDay()] + const es_fin_semana = ['Friday','Saturday','Sunday'].includes(dia_semana) + + return { dia_semana, es_fin_semana } +} + + +// Parser CSV robusto: respeta comillas y comas dentro de celdas +function parseCSVLine(line) { + const result = [] + let current = '' + let inQuotes = false + + for (let i = 0; i < line.length; i++) { + const char = line[i] + const next = line[i + 1] + + if (char === '"') { + if (inQuotes && next === '"') { + current += '"' + i++ + } else { + inQuotes = !inQuotes + } + } else if (char === ',' && !inQuotes) { + result.push(current.replace(/\r/g, '').trim()) + current = '' + } else { + current += char + } + } + + result.push(current.replace(/\r/g, '').trim()) + return result +} + +function parseCSV(text) { + const lines = text.trim().split('\n') + if (lines.length < 2) return { headers: [], rows: [] } + + const headers = parseCSVLine(lines[0]) + + const rows = lines + .slice(1) + .map(line => { + const values = parseCSVLine(line) + const obj = {} + headers.forEach((h, i) => { + obj[h] = values[i] ?? '' + }) + return obj + }) + .filter(row => Object.values(row).some(v => v !== '')) + + return { headers, rows } +} + + +function toIntOrNull(value) { + if (value === null || value === undefined || value === '') return null + const n = Number(value) + return Number.isInteger(n) ? n : null +} + +function toFloatOrNull(value) { + if (value === null || value === undefined || value === '') return null + const n = Number(value) + return Number.isNaN(n) ? null : n +} + + +// Filtra solo columnas del esquema y convierte tipos +function limpiarFila(row, tabla) { + const columnasValidas = ESQUEMAS[tabla].filter(c => c !== 'dia_semana' && c !== 'es_fin_semana') + const cleaned = {} + + columnasValidas.forEach(col => { + cleaned[col] = (row[col] !== undefined && row[col] !== '') ? row[col] : null + }) + + if (tabla === 'siniestros') { + const { dia_semana, es_fin_semana } = calcularDiaSemana(cleaned.siniestro_fecha) + cleaned.dia_semana = dia_semana + cleaned.es_fin_semana = es_fin_semana + } + + const enteros = [ + 'dia','mes','ano','ilesos','heridos','fallecidos','vehiculos','peatones', + 'cantidad_de_involucrados','numero','edad', + 'id_feu','id_involucrado','id_feu_persona','id_persona' + ] + + const decimales = ['altura_km', 'latitud', 'longitud'] + + enteros.forEach(col => { + if (col in cleaned) cleaned[col] = toIntOrNull(cleaned[col]) + }) + + decimales.forEach(col => { + if (col in cleaned) cleaned[col] = toFloatOrNull(cleaned[col]) + }) + + return cleaned +} + + +const estadoInicial = () => ({ + archivo: null, nombre: '', headers: [], rows: [], + columnasFaltantes: [], columnasExtra: [], + valido: false, cargado: false, resultado: null, + expandido: false, error: null +}) + + +export default function ImportarCSV() { + const [archivos, setArchivos] = useState({ + siniestros: estadoInicial(), + Involucrados: estadoInicial(), + Personas: estadoInicial() + }) + const [importando, setImportando] = useState(false) + const [progreso, setProgreso] = useState({}) + const refs = { + siniestros: useRef(), + Involucrados: useRef(), + Personas: useRef() + } + + function handleFile(tabla, e) { + const file = e.target.files?.[0] + if (!file) return + + const reader = new FileReader() + reader.onload = (ev) => { + const { headers, rows } = parseCSV(ev.target.result) + const esperadas = ESQUEMAS[tabla].filter(c => c !== 'dia_semana' && c !== 'es_fin_semana') + const columnasFaltantes = esperadas.filter(c => !headers.includes(c)) + const columnasExtra = headers.filter(c => !ESQUEMAS[tabla].includes(c)) + const valido = columnasFaltantes.length === 0 + + setArchivos(prev => ({ + ...prev, + [tabla]: { + ...estadoInicial(), + archivo: file, + nombre: file.name, + headers, + rows, + columnasFaltantes, + columnasExtra, + valido, + error: valido ? null : `Faltan ${columnasFaltantes.length} columna(s) requerida(s)` + } + })) + } + + reader.readAsText(file) + } + + async function importarTabla(tabla) { + const estado = archivos[tabla] + if (!estado.valido || !estado.rows.length) return + + setProgreso(p => ({ + ...p, + [tabla]: { estado: 'importando', procesados: 0, total: estado.rows.length } + })) + + try { + const filas = estado.rows.map(row => limpiarFila(row, tabla)) + const BATCH = 100 + let insertados = 0 + let errores = 0 + + for (let i = 0; i < filas.length; i += BATCH) { + const lote = filas.slice(i, i + BATCH) + + const { error } = await supabase + .from(tabla) + .upsert(lote, { + onConflict: { + siniestros: 'id_feu', + Involucrados: 'id_involucrado', + Personas: 'id_feu_persona' + }[tabla], + ignoreDuplicates: false + }) + + if (error) { + console.error(`🔴 Error lote ${i}:`, error) + console.log('🔴 MSG:', error?.message) + console.error('🔴 Primer registro:', JSON.stringify(lote[0], null, 2)) + errores += lote.length + } else { + insertados += lote.length + } + + setProgreso(p => ({ + ...p, + [tabla]: { + estado: 'importando', + procesados: i + lote.length, + total: filas.length + } + })) + } + + setArchivos(prev => ({ + ...prev, + [tabla]: { + ...prev[tabla], + cargado: true, + resultado: { insertados, errores } + } + })) + + setProgreso(p => ({ ...p, [tabla]: { estado: 'listo' } })) + } catch (e) { + setArchivos(prev => ({ + ...prev, + [tabla]: { ...prev[tabla], error: e.message } + })) + setProgreso(p => ({ ...p, [tabla]: { estado: 'error' } })) + } + } + + async function importarTodo() { + setImportando(true) + for (const tabla of TABLAS) { + if (archivos[tabla].valido && !archivos[tabla].cargado) { + await importarTabla(tabla) + } + } + setImportando(false) + } + + const algunoValido = TABLAS.some(t => archivos[t].valido && !archivos[t].cargado) + + return ( +
+
+

Importar datos CSV

+

+ Cargá los tres archivos. Las columnas extra del CSV se ignoran automáticamente. +

+
+ +
+

📋 Orden recomendado:

+
    +
  1. siniestros — tabla principal (id_feu). Se calculan dia_semana y es_fin_semana automáticamente.
  2. +
  3. Involucrados — referencia id_feu + id_involucrado
  4. +
  5. Personas — referencia id_feu + id_involucrado + id_persona
  6. +
+
+ + {TABLAS.map(tabla => { + const est = archivos[tabla] + const prog = progreso[tabla] + const porcentaje = prog?.total ? Math.round((prog.procesados / prog.total) * 100) : 0 + + return ( +
+
+
+
+ {est.cargado + ? + : est.valido + ? + : } +
+
+

{tabla}

+

+ {est.nombre + ? `${est.rows.length} filas · ${est.headers.length} columnas en CSV` + : `${ESQUEMAS[tabla].length} columnas requeridas en Supabase`} +

+
+
+ +
+ {est.valido && !est.cargado && ( + + )} + + + + handleFile(tabla, e)} + /> + + {est.rows.length > 0 && ( + + )} +
+
+ + {prog?.estado === 'importando' && ( +
+
+
+
+

+ {prog.procesados} / {prog.total} registros +

+
+ )} + + {est.cargado && est.resultado && ( +
+
+ {est.resultado.insertados} insertados + {est.resultado.errores > 0 && ⚠️ {est.resultado.errores} con error} +
+
+ )} + + {est.nombre && !est.cargado && ( +
+ {est.columnasFaltantes.length > 0 && ( +
+

+ Columnas faltantes ({est.columnasFaltantes.length}): +

+

{est.columnasFaltantes.join(', ')}

+
+ )} + + {est.columnasExtra.length > 0 && ( +
+

+ Columnas extra en CSV (se ignoran automáticamente): +

+

{est.columnasExtra.join(', ')}

+
+ )} + + {est.valido && ( +
+ Todas las columnas requeridas presentes +
+ )} +
+ )} + + {est.expandido && est.rows.length > 0 && ( +
+ + + + {est.headers.slice(0, 8).map(h => ( + + ))} + {est.headers.length > 8 && ( + + )} + + + + {est.rows.slice(0, 5).map((row, i) => ( + + {est.headers.slice(0, 8).map(h => ( + + ))} + {est.headers.length > 8 && } + + ))} + +
+ {h} + +{est.headers.length - 8} más
+ {row[h] ?? '-'} + ...
+ + {est.rows.length > 5 && ( +

+ Mostrando 5 de {est.rows.length} filas +

+ )} +
+ )} +
+ ) + })} + + {algunoValido && ( + + )} + + {TABLAS.every(t => archivos[t].cargado) && ( +
+ +

¡Importación completada!

+

Los tres archivos fueron procesados correctamente.

+
+ )} +
+ ) +} \ No newline at end of file diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx new file mode 100644 index 0000000..a8f4178 --- /dev/null +++ b/src/pages/Login.jsx @@ -0,0 +1,130 @@ +/// src/pages/Login.jsx +import { useState, useEffect } from 'react' +import { useNavigate } from 'react-router-dom' +import { useAuth } from '../hooks/useAuth' +import { AlertCircle, LogIn } from 'lucide-react' + +export default function Login() { + const [email, setEmail] = useState('') + const [password, setPassword] = useState('') + const [loadingLocal, setLoadingLocal] = useState(false) + const [error, setError] = useState('') + + const { signIn, user, isAdmin, loading: authLoading } = useAuth() + const navigate = useNavigate() + + // Navegar cuando ya hay user (y opcionalmente admin) + useEffect(() => { + console.log('🔍 Auth state:', { + authLoading, + user: !!user, + isAdmin + }) + + if (!authLoading && user ) { + navigate('/admin', { replace: true }) + } + }, [authLoading, user, isAdmin, navigate]) + + const handleLogin = async (e) => { + e.preventDefault() + setLoadingLocal(true) + setError('') + + try { + await signIn(email, password) + // navigate lo hace el useEffect cuando cambie user + } catch (err) { + setError(err.message) + } finally { + setLoadingLocal(false) + } + } + + return ( +
+
+
+
+
+ +
+
+
+
OPSV
+
+ Agencia Provincial de Seguridad Vial +
+
Santa Cruz, Argentina
+
+ +
+ {error && ( +
+ +

{error}

+
+ )} + +
+
+ + setEmail(e.target.value)} + required + autoComplete="email" + placeholder="admin@opsv.sc.gov.ar" + className="w-full px-4 py-3 border border-opsv-border rounded-2xl bg-opsv-bg focus:outline-none focus:ring-2 focus:ring-opsv-blue focus:border-transparent transition" + /> +
+ +
+ + setPassword(e.target.value)} + required + autoComplete="current-password" + placeholder="••••••••" + className="w-full px-4 py-3 border border-opsv-border rounded-2xl bg-opsv-bg focus:outline-none focus:ring-2 focus:ring-opsv-blue focus:border-transparent transition" + /> +
+ + +
+ +
+

Panel administrativo reservado para personal autorizado

+

+ Para soporte, contactá a:{' '} + admin@opsv.sc.gov.ar +

+
+
+
+
+
+ ) +} \ No newline at end of file diff --git a/src/pages/SecFatales.jsx b/src/pages/SecFatales.jsx new file mode 100644 index 0000000..02e2b56 --- /dev/null +++ b/src/pages/SecFatales.jsx @@ -0,0 +1,117 @@ +import { useMemo } from 'react' +import KPICard from '../components/ui/KPICard' +import SiniestrosPorMes from '../components/charts/SiniestrosPorMes' +import PorTipoSiniestro from '../components/charts/PorTipoSiniestro' +import FranjaHoraria from '../components/charts/FranjaHoraria' +import PorLocalidad from '../components/charts/PorLocalidad' +import PerfilVictimas from '../components/charts/PerfilVictimas' +import ProteccionPersonas from '../components/charts/ProteccionPersonas' +import ZonaOcurrencia from '../components/charts/ZonaOcurrencia' +import ChartCard from '../components/ui/ChartCard' + +const SECTION_COLORS = { + total: '#252C61', + fatales: '#C44228', + victimas: '#922B21', + urbano: '#80B0DE', + rural: '#337C58', +} + +export default function SecFatales({ siniestros, personas, involucrados }) { + const filtrarFatales = useMemo( + () => siniestros.filter((s) => Number(s.cantidad_fallecidos ?? s.fallecidos) > 0), + [siniestros], + ) + + const total = filtrarFatales.length + const victimas = filtrarFatales.reduce( + (acc, s) => acc + Number((s.cantidad_fallecidos ?? s.fallecidos) || 0), + 0, + ) + const diarios = total ? (total / 365).toFixed(1) : '0.0' + const pct = siniestros.length ? `${((total / siniestros.length) * 100).toFixed(1)}%` : '0%' + + return ( +
+ {/* KPIs */} +
+ + + + +
+ + {/* Evolución y tipo de siniestro */} +
+ + + + + + + +
+ + {/* Franja horaria */} + + + + + {/* Distribución territorial */} +
+ + + + + + + +
+ + {/* Perfil de víctimas */} + + + + + {/* Seguridad pasiva */} + + + +
+ ) +} \ No newline at end of file diff --git a/src/pages/SecHistorica.jsx b/src/pages/SecHistorica.jsx new file mode 100644 index 0000000..b5d0a7d --- /dev/null +++ b/src/pages/SecHistorica.jsx @@ -0,0 +1,313 @@ +import { useMemo } from 'react' +import { calcularKPIs } from '../utils/calculos' +import SerieHistorica, { + SERIE_HISTORICA, + getPoblacionAnual, +} from '../components/charts/SerieHistorica' +import PorLocalidad from '../components/charts/PorLocalidad' +import PorTipoSiniestro from '../components/charts/PorTipoSiniestro' +import FranjaHoraria from '../components/charts/FranjaHoraria' +import KPICard from '../components/ui/KPICard' +import { + BarChart, + Bar, + XAxis, + YAxis, + CartesianGrid, + Tooltip, + ResponsiveContainer, +} from 'recharts' +import { useChartTheme } from '../hooks/useChartTheme' +import { COLOR } from '../utils/colores' + +function calcularPorcentaje(base, actual) { + if (!base || base === 0) return '0%' + const diff = actual - base + const sign = diff >= 0 ? '▲' : '▼' + return `${sign} ${Math.abs(((diff / base) * 100).toFixed(1))}%` +} + +export default function SecHistorica({ siniestros, year }) { + const yearNum = Number(year) + const kpis = calcularKPIs(siniestros) + + // Hook se usa DENTRO del componente + const { tickColor, gridColor, tooltipBg, tooltipBorder, tooltipLabel } = + useChartTheme() + + const serieComparativa = useMemo(() => { + const base = [...SERIE_HISTORICA] + const yaExiste = base.some((row) => row.ano === yearNum) + + if (!yaExiste && kpis.total > 0) { + const pob = getPoblacionAnual(yearNum) + const tasa = Number(((kpis.victimas / pob) * 100000).toFixed(2)) + + return [ + ...base, + { + ano: yearNum, + siniestros: kpis.total, + victimas: kpis.victimas, + tasa, + }, + ].sort((a, b) => a.ano - b.ano) + } + + return base + }, [yearNum, kpis.total, kpis.victimas]) + + const yearActualData = useMemo( + () => serieComparativa.find((row) => row.ano === yearNum) ?? null, + [serieComparativa, yearNum], + ) + + const prevYearData = useMemo( + () => serieComparativa.find((row) => row.ano === yearNum - 1) ?? null, + [serieComparativa, yearNum], + ) + + const victimasPorAno = useMemo( + () => + serieComparativa.map((row) => ({ ano: row.ano, victimas: row.victimas })), + [serieComparativa], + ) + + const dataTabla = serieComparativa + + const serieParaExtremos = useMemo(() => { + const base = [...SERIE_HISTORICA] + + const existe2025 = base.some((row) => row.ano === 2025) + if (!existe2025) { + base.push({ + ano: 2025, + siniestros: 0, + victimas: 21, + tasa: 6.27, + }) + } + + return base + .filter((row) => row.ano !== 2020 && row.victimas != null) + .sort((a, b) => a.ano - b.ano) + }, []) + + const victimasActual = yearActualData?.victimas ?? kpis.victimas ?? null + + const comparativoVictimas = + prevYearData?.victimas != null && victimasActual != null + ? calcularPorcentaje(prevYearData.victimas, victimasActual) + : '—' + + const serieVictimasValidas = serieComparativa.filter( + (row) => row.ano !== 2020 && row.victimas != null, + ) + + const maxEntry = + serieParaExtremos.length > 0 + ? serieParaExtremos.reduce( + (max, row) => (max == null || row.victimas > max.victimas ? row : max), + null, + ) + : null + const maxHistorico = maxEntry?.victimas ?? null + const maxAno = maxEntry?.ano ?? null + + const minEntry = + serieParaExtremos.length > 0 + ? serieParaExtremos.reduce( + (min, row) => (min == null || row.victimas < min.victimas ? row : min), + null, + ) + : null + const minHistorico = minEntry?.victimas ?? null + const minAno = minEntry?.ano ?? null + + const serieOrdenada = [...serieVictimasValidas].sort((a, b) => a.ano - b.ano) + const ultimos10 = serieOrdenada.filter((row) => row.ano <= yearNum).slice(-10) + + const promedio10 = + ultimos10.length > 0 + ? ( + ultimos10.reduce((acc, row) => acc + row.victimas, 0) / ultimos10.length + ).toFixed(1) + : null + + const rango10Desde = ultimos10[0]?.ano ?? null + const rango10Hasta = ultimos10[ultimos10.length - 1]?.ano ?? null + + return ( +
+ {/* KPIs históricas */} +
+ + + + + +
+ + {/* Gráfico de tasa + barras de víctimas */} +
+ +
+
+

+ Víctimas fatales +

+

+ Evolución anual +

+
+
+ + + + + + + + + +
+
+
+ + {/* Distribución por tipo, franja y localidad */} +
+ + + +
+ + {/* Tabla histórica */} +
+
+

+ Tabla histórica +

+

+ Histórico de siniestros +

+
+
+ + + + + + + + + + + {dataTabla.map((row) => ( + r.ano === yearNum) + ? 'bg-blue-500/5 font-semibold' + : '' + }`} + > + + + + + + ))} + +
+ Año + + Siniestros + + Víctimas + + Tasa +
+ {row.ano} + + {row.siniestros} + + {row.victimas ?? '—'} + {row.tasa ?? '—'}
+
+
+
+ ) +} \ No newline at end of file diff --git a/src/pages/SecLesionados.jsx b/src/pages/SecLesionados.jsx new file mode 100644 index 0000000..5420f6e --- /dev/null +++ b/src/pages/SecLesionados.jsx @@ -0,0 +1,114 @@ +import { useMemo } from 'react' +import KPICard from '../components/ui/KPICard' +import SiniestrosPorMes from '../components/charts/SiniestrosPorMes' +import PorTipoSiniestro from '../components/charts/PorTipoSiniestro' +import FranjaHoraria from '../components/charts/FranjaHoraria' +import PorLocalidad from '../components/charts/PorLocalidad' +import PerfilVictimas from '../components/charts/PerfilVictimas' +import ProteccionPersonas from '../components/charts/ProteccionPersonas' +import ZonaOcurrencia from '../components/charts/ZonaOcurrencia' +import ChartCard from '../components/ui/ChartCard' + +export default function SecLesionados({ siniestros, personas, involucrados }) { + const filtrarLesionados = useMemo( + () => + siniestros.filter((s) => { + const fatales = Number(s.cantidad_fallecidos ?? s.fallecidos) + const lesion = Number(s.cantidad_lesionados ?? s.heridos) + return fatales === 0 && lesion > 0 + }), + [siniestros], + ) + + const total = filtrarLesionados.length + const lesionados = filtrarLesionados.reduce( + (acc, s) => acc + Number((s.cantidad_lesionados ?? s.heridos) || 0), + 0, + ) + const diarios = total ? (total / 365).toFixed(1) : '0.0' + const pct = siniestros.length ? `${((total / siniestros.length) * 100).toFixed(1)}%` : '0%' + + return ( +
+ {/* KPIs */} +
+ + + + +
+ + {/* Evolución y tipo de siniestro */} +
+ + + + + + + +
+ + {/* Franja horaria */} + + + + + {/* Distribución territorial */} +
+ + + + + + + +
+ + {/* Perfil de víctimas */} + + + + + {/* Seguridad pasiva */} + + + +
+ ) +} \ No newline at end of file diff --git a/src/pages/SecResumen.jsx b/src/pages/SecResumen.jsx new file mode 100644 index 0000000..453af9e --- /dev/null +++ b/src/pages/SecResumen.jsx @@ -0,0 +1,106 @@ +import KPICard from '../components/ui/KPICard' +import SiniestrosPorMes from '../components/charts/SiniestrosPorMes' +import DonutGravedad from '../components/charts/DonutGravedad' +import ZonaOcurrencia from '../components/charts/ZonaOcurrencia' +import { + calcularKPIs, + calcularTablaComparativa, + POBLACION_DEPTO, +} from '../utils/calculos' + +export default function SecResumen({ siniestros }) { + const kpis = calcularKPIs(siniestros) + const tablaData = calcularTablaComparativa(siniestros) + + console.log( + 'Departamentos en BD:', + [...new Set(siniestros.map((s) => s.departamento))] + ) + console.log( + 'SecResumen recibe siniestros:', + siniestros.length, + siniestros[0]?.ano, + siniestros[0]?.mes + ) + + return ( +
+
+ + + + + +
+ +
+ + +
+ +
+ + +
+
+

+ Comparativa por departamento +

+

+ Siniestros fatales por departamento +

+
+ + {tablaData.length === 0 ? ( +

+ Sin siniestros fatales registrados para el periodo seleccionado. +

+ ) : ( +
+ + + + + + + + + + + + {tablaData.map((row, i) => ( + + + + + + + ))} + +
+ Departamento + + Siniestros fatales + + Víctimas fatales + + Tasa c/100k Hab. +
+ {row.departamento} + + {row.siniestrosFatales} + + {row.victimasFatales} + + {row.tasa !== null && row.tasa !== '-' ? row.tasa : '—'} +
+
+ )} +
+
+
+ ) +} \ No newline at end of file diff --git a/src/pages/SecSinLesiones.jsx b/src/pages/SecSinLesiones.jsx new file mode 100644 index 0000000..7cde7fd --- /dev/null +++ b/src/pages/SecSinLesiones.jsx @@ -0,0 +1,100 @@ +import { useMemo } from 'react' +import KPICard from '../components/ui/KPICard' +import SiniestrosPorMes from '../components/charts/SiniestrosPorMes' +import PorTipoSiniestro from '../components/charts/PorTipoSiniestro' +import FranjaHoraria from '../components/charts/FranjaHoraria' +import PorLocalidad from '../components/charts/PorLocalidad' +import TipoInvolucrado from '../components/charts/TipoInvolucrado' +import ZonaOcurrencia from '../components/charts/ZonaOcurrencia' +import ChartCard from '../components/ui/ChartCard' + +export default function SecSinLesiones({ siniestros, involucrados }) { + const filtrarSinLesiones = useMemo( + () => + siniestros.filter((s) => { + const fatales = Number(s.cantidad_fallecidos ?? s.fallecidos) + const lesion = Number(s.cantidad_lesionados ?? s.heridos) + return fatales === 0 && lesion === 0 + }), + [siniestros], + ) + + const total = filtrarSinLesiones.length + const diarios = total ? (total / 365).toFixed(1) : '0.0' + const pct = siniestros.length ? `${((total / siniestros.length) * 100).toFixed(1)}%` : '0%' + const ilesos = filtrarSinLesiones.reduce((acc, s) => acc + Number(s.ilesos || 0), 0) + + return ( +
+ {/* KPIs */} +
+ + + +
+ + {/* Evolución y tipo */} +
+ + + + + + + +
+ + {/* Franja horaria */} + + + + + {/* Distribución territorial */} +
+ + + + + + + +
+ + {/* Perfil de involucrados */} + + + +
+ ) +} \ No newline at end of file diff --git a/src/pages/SecSintesis.jsx b/src/pages/SecSintesis.jsx new file mode 100644 index 0000000..a1635df --- /dev/null +++ b/src/pages/SecSintesis.jsx @@ -0,0 +1,179 @@ +import { useMemo } from 'react' +import { calcularSintesis } from '../utils/calculos' +import { SERIE_HISTORICA } from '../components/charts/SerieHistorica' +import ChartCard from '../components/ui/ChartCard' +import { COLOR } from '../utils/colores' + +// ── Ficha compacta vertical ─────────────────────────────────────────────────── +function Ficha({ kicker, title, color, destacado, datos }) { + return ( + +
+ + {/* Dato destacado */} +
+

+ {destacado.label} +

+

+ {destacado.valor ?? '—'} +

+
+ + {/* Grilla de datos secundarios */} +
+ {datos.map(({ label, valor }) => ( +
+

{label}

+

{valor ?? '—'}

+
+ ))} +
+ +
+
+ ) +} + +// ── Componente principal ────────────────────────────────────────────────────── +export default function SecSintesis({ siniestros, personas, involucrados }) { + const s = useMemo( + () => calcularSintesis(siniestros, personas, involucrados), + [siniestros, personas, involucrados], + ) + + // Serie válida: excluye 2020, agrega 2025 si no está, ordena por año + const serieValida = useMemo(() => { + const base = [...SERIE_HISTORICA] + const existe2025 = base.some((r) => r.ano === 2025) + if (!existe2025) { + base.push({ ano: 2025, siniestros: 0, victimas: 21, tasa: 6.27 }) + } + return base + .filter((r) => r.ano !== 2020 && r.victimas != null) + .sort((a, b) => a.ano - b.ano) + }, []) + + const anoMaxVictimas = serieValida.reduce((a, b) => (a.victimas > b.victimas ? a : b)) + const anoMinVictimas = serieValida.reduce((a, b) => (a.victimas < b.victimas ? a : b)) + + const ultimoAno = serieValida[serieValida.length - 1] + const penultimoAno = serieValida[serieValida.length - 2] + + const tendencia = + ultimoAno && penultimoAno + ? ultimoAno.victimas >= penultimoAno.victimas ? '▲ Sube' : '▼ Baja' + : '—' + + const tendenciaColor = tendencia.includes('▲') ? COLOR.fatales : COLOR.green + + const pctVariacion = + ultimoAno && penultimoAno + ? (((ultimoAno.victimas - penultimoAno.victimas) / penultimoAno.victimas) * 100).toFixed(1) + : null + + const fichas = [ + { kicker: 'Análisis por tipo', title: 'Siniestros fatales', color: COLOR.fatales, bloque: s.fatalesBloque }, + { kicker: 'Análisis por tipo', title: 'Con lesionados', color: COLOR.conLes, bloque: s.conLesBloque }, + { kicker: 'Análisis por tipo', title: 'Sin lesiones', color: COLOR.sinLes, bloque: s.sinLesBloque }, + ] + + return ( +
+ + {/* ── Siniestralidad general ── */} + +
+ {[ + { label: 'Total siniestros', valor: s.kpis.total, color: COLOR.navy }, + { label: 'Siniestros fatales', valor: s.kpis.fatales, color: COLOR.fatales }, + { label: 'Con lesionados', valor: s.kpis.conLes, color: COLOR.conLes }, + { label: 'Sin lesiones', valor: s.kpis.sinLes, color: COLOR.sinLes }, + { label: 'Víctimas fatales', valor: s.kpis.victimas, color: COLOR.red }, + ].map(({ label, valor, color }) => ( +
+

+ {typeof valor === 'number' ? valor.toLocaleString('es-AR') : valor} +

+

{label}

+
+ ))} +
+
+ + {/* ── Contexto histórico ── */} + +
+
+

{anoMaxVictimas.ano}

+

+ Año más crítico ({anoMaxVictimas.victimas} víctimas) +

+
+
+

{anoMinVictimas.ano}

+

+ Año más bajo ({anoMinVictimas.victimas} víctimas) +

+
+
+

+ {penultimoAno?.victimas ?? '—'} +

+

+ Víctimas {penultimoAno?.ano ?? '—'} +

+
+
+

+ {tendencia} + {pctVariacion !== null && ( + {pctVariacion}% + )} +

+

+ Tendencia {penultimoAno?.ano}→{ultimoAno?.ano} +

+
+
+
+ + {/* ── Fichas por tipo: 3 columnas en desktop ── */} +
+ {fichas.map(({ kicker, title, color, bloque }) => ( + + ))} +
+ +
+ ) +} \ No newline at end of file diff --git a/src/pages/SecVeranoVivo.jsx b/src/pages/SecVeranoVivo.jsx new file mode 100644 index 0000000..39795cd --- /dev/null +++ b/src/pages/SecVeranoVivo.jsx @@ -0,0 +1,505 @@ + +SecVeranoVivo +import { useState, useMemo } from 'react' +import { + LineChart, Line, BarChart, Bar, XAxis, YAxis, CartesianGrid, + Tooltip, ResponsiveContainer, ReferenceLine, Cell, + PieChart, Pie, Legend, +} from 'recharts' +import ChartCard from '../components/ui/ChartCard' +import { COLOR } from '../utils/colores' +import { + HISTORICO_VERANO_VIVO, PROMEDIO_HISTORICO_VV, CAMPANAS_VV, + filtrarCampanaVV, kpisVV, ruralUrbanoPorCampana, + distribucionMensualVV, rankingRutas, rankingLocalidades, + tiposSiniestroVV, +} from '../utils/calculos' + + +// ── UTILIDADES DONUT ──────────────────────────────────────── +const COLORS_F = [ + COLOR.navy, COLOR.red, COLOR.orange, COLOR.green, + '#6B7280', '#8B5CF6', '#0EA5E9', +] + +const RADIAN = Math.PI / 180 + +function agruparConUmbral(datos, umbralPct = 10) { + if (!datos || datos.length === 0) return [] + const total = datos.reduce((a, b) => a + b.value, 0) + if (total === 0) return [] + const normalizados = datos.map((d) => ({ ...d, pct: (d.value / total) * 100 })) + const principales = normalizados.filter((d) => d.pct >= umbralPct) + const menores = normalizados.filter((d) => d.pct < umbralPct) + if (menores.length > 0) { + const totalOtros = menores.reduce((s, d) => s + d.value, 0) + principales.push({ name: 'Otros', value: totalOtros, pct: (totalOtros / total) * 100 }) + } + return principales.sort((a, b) => b.value - a.value) +} + +const CustomPieLabel = ({ cx, cy, midAngle, innerRadius, outerRadius, pct }) => { + if (pct < 5) return null + const radius = innerRadius + (outerRadius - innerRadius) * 0.55 + const x = cx + radius * Math.cos(-midAngle * RADIAN) + const y = cy + radius * Math.sin(-midAngle * RADIAN) + return ( + + {`${pct.toFixed(0)}%`} + + ) +} + + +// ── INSIGHTS ──────────────────────────────────────────────── +function calcularInsights(campanaActual, kpis, graficoC, graficoD, graficoF) { + const insights = [] + + // 1. Fatales vs promedio histórico + const fatalesActual = kpis.fatales + const diff = fatalesActual - PROMEDIO_HISTORICO_VV + + if (fatalesActual === 0) { + insights.push({ + tipo: 'logro', + texto: `La campaña ${campanaActual.label} finalizó sin víctimas fatales en rutas y caminos.`, + }) + } else if (diff < 0) { + insights.push({ + tipo: 'logro', + texto: `Con ${fatalesActual} víctima${fatalesActual !== 1 ? 's' : ''} fatal${fatalesActual !== 1 ? 'es' : ''} en ruta, la campaña se mantuvo por debajo del promedio histórico de ${PROMEDIO_HISTORICO_VV}.`, + }) + } else if (diff === 0) { + insights.push({ + tipo: 'neutro', + texto: `La campaña registró ${fatalesActual} víctimas fatales en ruta, igual al promedio histórico de ${PROMEDIO_HISTORICO_VV}.`, + }) + } else { + insights.push({ + tipo: 'alerta', + texto: `La campaña registró ${fatalesActual} víctimas fatales en ruta, superando el promedio histórico de ${PROMEDIO_HISTORICO_VV}.`, + }) + } + + // 2. Reducción vs 2015/16 (pico inicial) + const fatalesPico = HISTORICO_VERANO_VIVO[0].fatales + if (fatalesActual < fatalesPico) { + const reduccion = Math.round(((fatalesPico - fatalesActual) / fatalesPico) * 100) + insights.push({ + tipo: 'logro', + texto: `Reducción del ${reduccion}% respecto a la primera campaña Verano Vivo (${HISTORICO_VERANO_VIVO[0].campaña}), que registró ${fatalesPico} víctimas fatales en ruta.`, + }) + } else if (fatalesActual === fatalesPico) { + insights.push({ + tipo: 'alerta', + texto: `Los fatales en ruta igualaron el máximo histórico de la primera campaña (${HISTORICO_VERANO_VIVO[0].campaña}: ${fatalesPico} víctimas).`, + }) + } + + // 3. Tendencia últimas 3 campañas + if (HISTORICO_VERANO_VIVO.length >= 3) { + const ultimas = HISTORICO_VERANO_VIVO.slice(-3) + const [a, b, c] = ultimas.map(x => x.fatales) + if (c <= b && b <= a && c < a) { + insights.push({ + tipo: 'logro', + texto: `Tendencia a la baja: los últimos 3 períodos registraron ${a}, ${b} y ${c} víctimas fatales en ruta respectivamente.`, + }) + } else if (c >= b && b >= a && c > a) { + insights.push({ + tipo: 'alerta', + texto: `Tendencia al alza: los últimos 3 períodos registraron ${a}, ${b} y ${c} víctimas fatales en ruta respectivamente.`, + }) + } else if (a === b && b === c) { + insights.push({ + tipo: 'neutro', + texto: `Los últimos 3 períodos mantuvieron estable la cantidad de víctimas fatales en ruta: ${c} por campaña.`, + }) + } + } + + // 4. Meses sin siniestros fatales en ruta + const NOMBRES_MESES = { 12: 'Diciembre', 1: 'Enero', 2: 'Febrero', 3: 'Marzo' } + const mesesSinFatales = graficoC + .filter(m => m.fatales === 0) + .map(m => Object.values(NOMBRES_MESES).find(n => n.startsWith(m.mes)) || m.mes) + + if (mesesSinFatales.length === 4) { + insights.push({ + tipo: 'logro', + texto: 'Todos los meses de la campaña transcurrieron sin víctimas fatales en rutas y caminos.', + }) + } else if (mesesSinFatales.length > 0) { + const listaMeses = mesesSinFatales.length === 1 + ? mesesSinFatales[0] + : mesesSinFatales.slice(0, -1).join(', ') + ' y ' + mesesSinFatales.at(-1) + insights.push({ + tipo: 'logro', + texto: `${listaMeses} transcurrió${mesesSinFatales.length > 1 ? 'ron' : ''} sin víctimas fatales en rutas y caminos.`, + }) + } + + // 5. Tipo más frecuente en ruta + if (graficoF.length > 0) { + const top = graficoF[0] + insights.push({ + tipo: 'dato', + texto: `El tipo de siniestro más frecuente en rutas fue "${top.name}" (${top.pct.toFixed(0)}% de los casos).`, + }) + } + + // 6. Ruta con más siniestros + if (graficoD.length > 0) { + const topRuta = graficoD[0] + insights.push({ + tipo: 'dato', + texto: `La Ruta ${topRuta.ruta} concentró la mayor cantidad de siniestros con ${topRuta.total} evento${topRuta.total !== 1 ? 's' : ''}.`, + }) + } + + return insights +} + + +// ── BLOQUE DE INSIGHTS ────────────────────────────────────── +const INSIGHT_CONFIG = { + logro: { bg: 'bg-emerald-100 dark:bg-emerald-950/50', border: 'border-emerald-300 dark:border-emerald-700', icon: '✅', label: 'Logro', labelColor: 'text-emerald-800 dark:text-emerald-300' }, + neutro: { bg: 'bg-slate-100 dark:bg-slate-800/60', border: 'border-slate-300 dark:border-slate-600', icon: '➡️', label: 'Estable', labelColor: 'text-slate-700 dark:text-slate-300' }, + alerta: { bg: 'bg-red-100 dark:bg-red-950/50', border: 'border-red-300 dark:border-red-700', icon: '⚠️', label: 'Alerta', labelColor: 'text-red-800 dark:text-red-300' }, + dato: { bg: 'bg-blue-100 dark:bg-blue-950/50', border: 'border-blue-300 dark:border-blue-700', icon: '📊', label: 'Dato', labelColor: 'text-blue-800 dark:text-blue-300' }, +} + +function BloqueInsights({ insights, campanaLabel }) { + if (!insights.length) return null + return ( +
+
+

+ Análisis · {campanaLabel} +

+

+ Puntos destacados de la campaña +

+
+
+ {insights.map((insight, i) => { + const cfg = INSIGHT_CONFIG[insight.tipo] + return ( +
+ {cfg.icon} +
+ + {cfg.label} + +

+ {insight.texto} +

+
+
+ ) + })} +
+
+ ) +} + + +// ── KPI card ──────────────────────────────────────────────── +function KpiVV({ label, value, color, badge }) { + return ( +
+ {value} + {label} + {badge && ( + + {badge} + + )} +
+ ) +} + + +// ── Tooltip genérico ──────────────────────────────────────── +function CustomTooltip({ active, payload, label }) { + if (!active || !payload?.length) return null + return ( +
+

{label}

+ {payload.map((p) => ( +

+ + {p.name}: {p.value} +

+ ))} +
+ ) +} + + +// ── Bar horizontal stacked ────────────────────────────────── +function BarHorizontalStacked({ data, nameKey }) { + return ( + + + + + + } /> + + + + + + + ) +} + + +// ── Componente principal ──────────────────────────────────── +export default function SecVeranoVivo({ siniestros }) { + const [campanaIdx, setCampanaIdx] = useState(CAMPANAS_VV.length - 1) + const campanaActual = CAMPANAS_VV[campanaIdx] + + const datosActual = useMemo( + () => filtrarCampanaVV(siniestros, campanaActual.anoDesde), + [siniestros, campanaActual] + ) + const datosPorCampana = useMemo( + () => CAMPANAS_VV.map(c => ({ label: c.label, datos: filtrarCampanaVV(siniestros, c.anoDesde) })), + [siniestros] + ) + + const kpis = useMemo(() => kpisVV(datosActual), [datosActual]) + const graficoB = useMemo(() => ruralUrbanoPorCampana(datosPorCampana), [datosPorCampana]) + const graficoCRural = useMemo(() => distribucionMensualVV(datosActual, 'rural'), [datosActual]) + const graficoCUrbano = useMemo(() => distribucionMensualVV(datosActual, 'urbano'), [datosActual]) + const graficoD = useMemo(() => rankingRutas(datosActual), [datosActual]) + const graficoE = useMemo(() => rankingLocalidades(datosActual), [datosActual]) + const graficoF = useMemo(() => agruparConUmbral(tiposSiniestroVV(datosActual), 10), [datosActual]) + + // ✅ graficoCRural (no graficoC) — datos de ruta para los insights + const insights = useMemo( + () => calcularInsights(campanaActual, kpis, graficoCRural, graficoD, graficoF), + [campanaActual, kpis, graficoCRural, graficoD, graficoF] + ) + + return ( +
+ + {/* Encabezado + selector de campaña */} +
+
+

Campaña

+

Verano Vivo

+

20 de diciembre al 20 de marzo

+
+
+ {CAMPANAS_VV.map((c, i) => ( + + ))} +
+
+ + {/* KPIs */} +
+

+ Rutas y caminos de la provincia · {campanaActual.label} +

+
+ + + + +
+
+ + {/* Gráfico A — Serie histórica · ancho completo */} + + + + + + + } /> + + + + + + + {/* Gráfico B — Comparación histórica · ancho completo */} + + + + + + + } /> + + + + + + + + + + {/* Gráficos C — Siniestros por mes separados por zona · grid 2 col */} +
+ + + + + + + } /> + + + + + + + + + + + + + + + } /> + + + + + + + +
+ + {/* Gráficos D y E — Rutas y Localidades · grid 2 col */} +
+ + {graficoD.length === 0 + ?

Sin datos para esta campaña

+ : + } +
+ + + {graficoE.length === 0 + ?

Sin datos para esta campaña

+ : + } +
+
+ + {/* Gráfico F — Donut tipos · ancho completo */} + +
+ + + + {graficoF.map((entry, index) => ( + + ))} + + } /> + {value}} + /> + + +
+
+ + {/* Bloque de insights · ancho completo */} + + +
+ ) +} \ No newline at end of file diff --git a/src/utils/calculos.js b/src/utils/calculos.js new file mode 100644 index 0000000..3701b90 --- /dev/null +++ b/src/utils/calculos.js @@ -0,0 +1,541 @@ +// Censo 2022 INDEC — nombres exactos según tabla siniestros campo departamento +export const POBLACION_DEPTO = { + 'DESEADO': 79650, + 'GUER AIKE': 260879, + 'LAGO ARGENTINO': 31941, + 'LAGO BUENOS AIRES': 14978, + 'MAGALLANES': 7952, + 'CORPEN AIKE': 4847, + 'RIO CHICO': 9420, + 'SANTA CRUZ': 11534, +} + +export const POBLACION_DEPARTAMENTOS = POBLACION_DEPTO + +export const MESES = ['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'] + +const PARSE_INT = (value) => { + const parsed = parseInt(value, 10) + return Number.isNaN(parsed) ? 0 : parsed +} + +const getMesNombre = (siniestro) => { + if (siniestro.mes_nombre) return siniestro.mes_nombre + const mes = PARSE_INT(siniestro.mes) + return MESES[mes - 1] || 'Sin dato' +} + +const getCantidadFallecidos = (siniestro) => + PARSE_INT(siniestro.cantidad_fallecidos ?? siniestro.fallecidos) + +const getCantidadLesionados = (siniestro) => + PARSE_INT(siniestro.cantidad_lesionados ?? siniestro.heridos) + +// ✅ FIX: sentence case para normalizar mayúsculas inconsistentes en la BD +const getTipoSiniestro = (siniestro) => { + const raw = (siniestro.tipo_siniestro_unico || 'Sin dato') + .normalize('NFC') + .trim() + .replace(/\u00A0/g, ' ') + .replace(/\s+/g, ' ') + return raw.charAt(0).toUpperCase() + raw.slice(1).toLowerCase() +} + +const getTipoVia = (siniestro) => + siniestro.tipo_via || siniestro.via_publica || 'Sin dato' + +const getHora = (siniestro) => + siniestro.hora_siniestro || siniestro.siniestro_hora || '00:00' + +export function calcularKPIs(siniestros) { + const total = siniestros.length + const fatales = siniestros.filter((s) => getCantidadFallecidos(s) > 0).length + const conLes = siniestros.filter((s) => getCantidadFallecidos(s) === 0 && getCantidadLesionados(s) > 0).length + const sinLes = total - fatales - conLes + const victimas = siniestros.reduce((acc, s) => acc + getCantidadFallecidos(s), 0) + const lesion = siniestros.reduce((acc, s) => acc + getCantidadLesionados(s), 0) + return { total, fatales, conLes, sinLes, victimas, lesion } +} + +export function evolucionMensual(siniestros) { + const mapa = {} + MESES.forEach((m) => { mapa[m] = { mes: m.slice(0, 3), fatales: 0, conLes: 0, sinLes: 0, total: 0 } }) + + siniestros.forEach((s) => { + const m = getMesNombre(s) + if (!mapa[m]) return + mapa[m].total += 1 + const fallecidos = getCantidadFallecidos(s) + const lesionados = getCantidadLesionados(s) + if (fallecidos > 0) mapa[m].fatales += 1 + else if (lesionados > 0) mapa[m].conLes += 1 + else mapa[m].sinLes += 1 + }) + + return MESES.map((m) => mapa[m]) +} + +export function porDepartamento(siniestros) { + const mapa = {} + siniestros.forEach((s) => { + const d = s.departamento || 'Sin dato' + if (!mapa[d]) mapa[d] = { departamento: d, siniestros: 0, victimas: 0 } + mapa[d].siniestros += 1 + mapa[d].victimas += getCantidadFallecidos(s) + }) + + return Object.values(mapa) + .map((d) => ({ + ...d, + tasa: POBLACION_DEPTO[d.departamento] + ? ((d.victimas / POBLACION_DEPTO[d.departamento]) * 100000).toFixed(1) + : null, + })) + .sort((a, b) => b.siniestros - a.siniestros) +} + +export function porTipoSiniestro(siniestros) { + const mapa = {} + siniestros.forEach((s) => { + const t = getTipoSiniestro(s) + mapa[t] = (mapa[t] || 0) + 1 + }) + return Object.entries(mapa) + .map(([name, value]) => ({ name, value })) + .sort((a, b) => b.value - a.value) +} + +export function porTipoVia(siniestros) { + const mapa = {} + siniestros.forEach((s) => { + const t = getTipoVia(s) + mapa[t] = (mapa[t] || 0) + 1 + }) + return Object.entries(mapa).map(([name, value]) => ({ name, value })) +} + +export function porFranjaHoraria(siniestros) { + const franjas = ['00-03','03-06','06-09','09-12','12-15','15-18','18-21','21-24'] + const mapa = {} + franjas.forEach((f) => { mapa[f] = { franja: f, urbano: 0, rural: 0 } }) + + siniestros.forEach((s) => { + const h = parseInt(getHora(s).split(':')[0], 10) + const idx = Math.min(Math.floor(h / 3), 7) + const f = franjas[idx] + const zona = (s.zona || s.zona_ocurrencia || '').toLowerCase().includes('urban') ? 'urbano' : 'rural' + if (mapa[f]) mapa[f][zona] += 1 + }) + + return franjas.map((f) => mapa[f]) +} + +export function perfilVictimas(personas, involucrados) { + const tipoMap = new Map() + involucrados.forEach((i) => tipoMap.set(String(i.id_involucrado), i.tipo_involucrado)) + + const victimas = personas.filter((p) => + p.estado_ocupante_inicio === 'Fallecido' || + p.estado_ocupante_inicio === 'Herido Grave' || + p.estado_ocupante_inicio === 'Herido Leve' + ) + + const genero = {} + const etario = {} + const usuario = {} + + victimas.forEach((p) => { + genero[p.genero || 'Sin dato'] = (genero[p.genero || 'Sin dato'] || 0) + 1 + etario[p.rango_etario || 'Sin dato'] = (etario[p.rango_etario || 'Sin dato'] || 0) + 1 + const tipo = tipoMap.get(String(p.id_involucrado)) || 'Sin dato' + usuario[tipo] = (usuario[tipo] || 0) + 1 + }) + + return { + genero: Object.entries(genero).map(([name, value]) => ({ name, value })), + etario: Object.entries(etario).map(([name, value]) => ({ name, value })), + usuario: Object.entries(usuario).map(([name, value]) => ({ name, value })).sort((a, b) => b.value - a.value), + } +} + +const TIPOS_HABITACULO = ['Automóvil','Camioneta','Transporte de Pasajeros','Transporte de Carga','Furgón','Camión'] +const TIPOS_MOTO = ['Motocicleta','Ciclomotor'] +const TIPOS_EXCLUIR_CIN = ['Motocicleta','Ciclomotor','Peatón','Bicicleta','Tracción a Sangre'] + +const hasCasco = (persona) => { + if (persona.uso_casco != null) return persona.uso_casco === 'Sí' || persona.uso_casco === 'Si' + return persona.casco === 'Sí' || persona.casco === 'Si' +} + +const hasCinturon = (persona) => { + if (persona.uso_cinturon != null) return persona.uso_cinturon === 'Sí' || persona.uso_cinturon === 'Si' + return persona.cinturon_seguridad === 'Sí' || persona.cinturon_seguridad === 'Si' +} + +const hasAirbag = (persona) => { + if (persona.uso_airbag != null) return persona.uso_airbag === 'Sí' || persona.uso_airbag === 'Si' + return persona.airbag === 'Sí' || persona.airbag === 'Si' +} + +export function proteccionPasiva(personas, involucrados) { + const tipoMap = new Map() + involucrados.forEach((i) => tipoMap.set(String(i.id_involucrado), i.tipo_involucrado)) + + const motoristas = personas.filter((p) => TIPOS_MOTO.includes(tipoMap.get(String(p.id_involucrado)))) + const habitaculo = personas.filter((p) => TIPOS_HABITACULO.includes(tipoMap.get(String(p.id_involucrado)))) + + const cascoBase = motoristas.length + const cascoUso = motoristas.filter((p) => hasCasco(p)).length + + const cinBase = habitaculo.length + const cinUso = habitaculo.filter((p) => hasCinturon(p)).length + + const airbagBase = habitaculo.length + const airbagUso = habitaculo.filter((p) => hasAirbag(p)).length + + return { + casco: { uso: cascoUso, base: cascoBase, pct: cascoBase ? Math.round((cascoUso / cascoBase) * 100) : null }, + cinturon: { uso: cinUso, base: cinBase, pct: cinBase ? Math.round((cinUso / cinBase) * 100) : null }, + airbag: { uso: airbagUso, base: airbagBase, pct: airbagBase ? Math.round((airbagUso / airbagBase) * 100) : null }, + } +} + +export function calcularTablaComparativa(siniestros) { + const porDepto = {} + + siniestros.forEach((s) => { + const depto = s.departamento || 'Sin datos' + if (!porDepto[depto]) { + porDepto[depto] = { siniestrosFatales: 0, victimasFatales: 0 } + } + const fallecidos = getCantidadFallecidos(s) + if (fallecidos > 0) { + porDepto[depto].siniestrosFatales += 1 + porDepto[depto].victimasFatales += fallecidos + } + }) + + return Object.entries(porDepto) + .map(([departamento, vals]) => { + const poblacion = POBLACION_DEPTO[departamento] || null + const tasa = poblacion + ? Number(((vals.victimasFatales / poblacion) * 100000).toFixed(1)) + : '-' + return { + departamento, + siniestrosFatales: vals.siniestrosFatales, + victimasFatales: vals.victimasFatales, + tasa, + } + }) + .filter((d) => d.siniestrosFatales > 0) + .sort((a, b) => b.siniestrosFatales - a.siniestrosFatales) +} + +const CAMPOS_RANGO_ETARIO = ['rango_etario', 'grupo_etario', 'grupo_edad', 'edad_rango'] +const ORDEN_RANGOS = ['0-14', '0-17', '15-24', '18-24', '25-34', '35-44', '45-54', '55-64', '65+', 'Sin dato'] + +export function calcularRangoEtario(personas) { + if (!personas || personas.length === 0) return [] + + const campoRango = CAMPOS_RANGO_ETARIO.find((campo) => + personas.some((p) => p[campo] && p[campo] !== null && p[campo] !== 'Sin dato' && p[campo] !== '') + ) + const agrupado = {} + + if (campoRango) { + personas.forEach((p) => { + const rango = p[campoRango] || 'Sin dato' + agrupado[rango] = (agrupado[rango] || 0) + 1 + }) + } else { + personas.forEach((p) => { + const edad = parseInt(String(p.edad ?? '').trim(), 10) + if (isNaN(edad) || edad < 0 || edad > 120) { + agrupado['Sin dato'] = (agrupado['Sin dato'] || 0) + 1 + return + } + let rango + if (edad < 15) rango = '0-14' + else if (edad < 25) rango = '15-24' + else if (edad < 35) rango = '25-34' + else if (edad < 45) rango = '35-44' + else if (edad < 55) rango = '45-54' + else if (edad < 65) rango = '55-64' + else rango = '65+' + agrupado[rango] = (agrupado[rango] || 0) + 1 + }) + } + + const total = Object.values(agrupado).reduce((a, b) => a + b, 0) + const sinDato = agrupado['Sin dato'] || 0 + if (sinDato / total > 0.9) { + console.warn('calcularRangoEtario: >90% sin dato — verificar campo en tabla Personas') + } + + return Object.entries(agrupado) + .map(([rango, cantidad]) => ({ rango, cantidad })) + .filter((d) => d.rango !== 'Sin dato' || d.cantidad / total < 0.5) + .sort((a, b) => { + const ia = ORDEN_RANGOS.indexOf(a.rango) + const ib = ORDEN_RANGOS.indexOf(b.rango) + return (ia === -1 ? 99 : ia) - (ib === -1 ? 99 : ib) + }) +} + +// ── SÍNTESIS ────────────────────────────────────────────────── + +function topEntry(obj) { + return Object.entries(obj).sort((a, b) => b[1] - a[1])[0]?.[0] ?? 'Sin dato' +} + +function pctZona(siniestros, tipo) { + const total = siniestros.length + if (!total) return '—' + const count = siniestros.filter(s => + (s.zona_ocurrencia || '').toLowerCase().includes(tipo) + ).length + return `${((count / total) * 100).toFixed(0)}%` +} + +function mesPico(siniestros) { + const mapa = {} + siniestros.forEach(s => { + const m = getMesNombre(s) + mapa[m] = (mapa[m] || 0) + 1 + }) + return topEntry(mapa) +} + +function franjaHorariaPico(siniestros) { + const mapa = {} + siniestros.forEach(s => { + const h = parseInt(getHora(s).split(':')[0], 10) + const inicio = Math.floor(h / 3) * 3 + const franja = `${String(inicio).padStart(2,'0')}:00-${String(inicio+3).padStart(2,'0')}:00` + mapa[franja] = (mapa[franja] || 0) + 1 + }) + return topEntry(mapa) +} + +function localidadPico(siniestros) { + const mapa = {} + siniestros.forEach(s => { + const loc = s.departamento || s.localidad || 'Sin dato' + mapa[loc] = (mapa[loc] || 0) + 1 + }) + return topEntry(mapa) +} + +function generoPredominante(personas, estadoFiltro) { + const filtradas = estadoFiltro + ? personas.filter(p => estadoFiltro.includes(p.estado_ocupante_inicio)) + : personas + const mapa = {} + filtradas.forEach(p => { + const g = p.genero || 'Sin dato' + mapa[g] = (mapa[g] || 0) + 1 + }) + return topEntry(mapa) +} + +function rangoEtarioPico(personas, estadoFiltro) { + const filtradas = estadoFiltro + ? personas.filter(p => estadoFiltro.includes(p.estado_ocupante_inicio)) + : personas + const rangos = calcularRangoEtario(filtradas) + if (!rangos.length) return 'Sin dato' + return rangos.reduce((a, b) => a.cantidad > b.cantidad ? a : b).rango +} + +function tipoInvolucradoPico(personas, involucrados, estadoFiltro) { + const tipoMap = new Map() + involucrados?.forEach(i => tipoMap.set(String(i.id_involucrado), i.tipo_involucrado)) + const filtradas = estadoFiltro + ? personas.filter(p => estadoFiltro.includes(p.estado_ocupante_inicio)) + : personas + const mapa = {} + filtradas.forEach(p => { + const tipo = tipoMap.get(String(p.id_involucrado)) || 'Sin dato' + mapa[tipo] = (mapa[tipo] || 0) + 1 + }) + return topEntry(mapa) +} + +export function calcularSintesis(siniestros, personas = [], involucrados = []) { + const kpis = calcularKPIs(siniestros) + + const fatales = siniestros.filter(s => getCantidadFallecidos(s) > 0) + const conLes = siniestros.filter(s => getCantidadFallecidos(s) === 0 && getCantidadLesionados(s) > 0) + const sinLes = siniestros.filter(s => getCantidadFallecidos(s) === 0 && getCantidadLesionados(s) === 0) + + const bloque = (grupo, estadoPersonas) => ({ + mesPico: mesPico(grupo), + franjaPico: franjaHorariaPico(grupo), + pctUrbano: pctZona(grupo, 'urban'), + pctRural: pctZona(grupo, 'rural'), + localidad: localidadPico(grupo), + genero: generoPredominante(personas, estadoPersonas), + rangoEtario: rangoEtarioPico(personas, estadoPersonas), + tipoInvolucrado: tipoInvolucradoPico(personas, involucrados, estadoPersonas), + }) + + return { + kpis, + fatalesBloque: bloque(fatales, ['Fallecido']), + conLesBloque: bloque(conLes, ['Herido Grave', 'Herido Leve']), + sinLesBloque: bloque(sinLes, null), + } +} + +// ── VERANO VIVO ─────────────────────────────────────────────── + +export const HISTORICO_VERANO_VIVO = [ + { campaña: '2015/16', fatales: 11 }, + { campaña: '2016/17', fatales: 8 }, + { campaña: '2017/18', fatales: 2 }, + { campaña: '2018/19', fatales: 6 }, + { campaña: '2019/20', fatales: 5 }, + // 2020/21 excluida — restricciones COVID + { campaña: '2021/22', fatales: 4 }, + { campaña: '2022/23', fatales: 3 }, + { campaña: '2023/24', fatales: 3 }, + { campaña: '2024/25', fatales: 3 }, +] +export const PROMEDIO_HISTORICO_VV = 5.2 + +export const CAMPANAS_VV = [ + { label: '2022/23', anoDesde: 2022, anoHasta: 2023 }, + { label: '2023/24', anoDesde: 2023, anoHasta: 2024 }, + { label: '2024/25', anoDesde: 2024, anoHasta: 2025 }, +] + +export function filtrarCampanaVV(siniestros, anoDesde) { + return siniestros.filter((s) => { + const dia = PARSE_INT(s.dia) + const mes = PARSE_INT(s.mes) + const ano = PARSE_INT(s.ano) + if (ano === anoDesde && mes === 12 && dia >= 20) return true + if (ano === anoDesde + 1 && (mes === 1 || mes === 2)) return true + if (ano === anoDesde + 1 && mes === 3 && dia <= 20) return true + return false + }) +} + +export function kpisVV(siniestros) { + const rural = siniestros.filter(s => + (s.zona_ocurrencia || '').toLowerCase().includes('rural') + ) + const total = rural.length + const fatales = rural.filter(s => getCantidadFallecidos(s) > 0).length + const conLes = rural.filter(s => getCantidadFallecidos(s) === 0 && getCantidadLesionados(s) > 0).length + const sinLes = total - fatales - conLes + return { total, fatales, conLes, sinLes } +} + +export function ruralUrbanoPorCampana(siniestrosPorCampana) { + return siniestrosPorCampana.map(({ label, datos }) => { + const rural = datos.filter(s => (s.zona_ocurrencia || '').toLowerCase().includes('rural')) + const urbana = datos.filter(s => (s.zona_ocurrencia || '').toLowerCase().includes('urban')) + return { + campaña: label, + ruralFatal: rural.filter(s => getCantidadFallecidos(s) > 0).length, + ruralLes: rural.filter(s => getCantidadFallecidos(s) === 0 && getCantidadLesionados(s) > 0).length, + ruralSinLes: rural.filter(s => getCantidadFallecidos(s) === 0 && getCantidadLesionados(s) === 0).length, + urbanaFatal: urbana.filter(s => getCantidadFallecidos(s) > 0).length, + urbanaLes: urbana.filter(s => getCantidadFallecidos(s) === 0 && getCantidadLesionados(s) > 0).length, + urbanaSinLes: urbana.filter(s => getCantidadFallecidos(s) === 0 && getCantidadLesionados(s) === 0).length, + } + }) +} + +const MESES_VV = [ + { key: 12, label: 'Dic' }, + { key: 1, label: 'Ene' }, + { key: 2, label: 'Feb' }, + { key: 3, label: 'Mar' }, +] + +// ANTES — distribucionMensualVV(siniestros) +// AHORA — acepta zona opcional: 'rural' | 'urbano' | undefined (todos) + +const esUrbano = (s) => + (s.zona || s.zona_ocurrencia || '').toLowerCase().includes('urban') + +export function distribucionMensualVV(siniestros, zona) { + const MESES_VV = ['Diciembre', 'Enero', 'Febrero', 'Marzo'] + const mapa = {} + MESES_VV.forEach((m) => { + mapa[m] = { mes: m.slice(0, 3), fatales: 0, conLes: 0, sinLes: 0, total: 0 } + }) + + const datos = zona === 'rural' + ? siniestros.filter((s) => !esUrbano(s)) + : zona === 'urbano' + ? siniestros.filter((s) => esUrbano(s)) + : siniestros + + datos.forEach((s) => { + const m = getMesNombre(s) + if (!mapa[m]) return + mapa[m].total += 1 + const fallecidos = getCantidadFallecidos(s) + const lesionados = getCantidadLesionados(s) + if (fallecidos > 0) mapa[m].fatales += 1 + else if (lesionados > 0) mapa[m].conLes += 1 + else mapa[m].sinLes += 1 + }) + + return MESES_VV.map((m) => mapa[m]) +} + +export function rankingRutas(siniestros, topN = 8) { + const map = {} + siniestros + .filter(s => (s.zona_ocurrencia || '').toLowerCase().includes('rural')) + .forEach(s => { + const nombre = (s.nombre_via || '').trim() + const tipo = (s.via_publica || '').trim() + const ruta = nombre || tipo || 'Sin datos' + if (!map[ruta]) map[ruta] = { ruta, tipo, fatales: 0, conLes: 0, sinLes: 0, total: 0 } + if (getCantidadFallecidos(s) > 0) map[ruta].fatales++ + else if (getCantidadLesionados(s) > 0) map[ruta].conLes++ + else map[ruta].sinLes++ + map[ruta].total++ + }) + return Object.values(map) + .sort((a, b) => b.total - a.total) + .slice(0, topN) +} + +export function rankingLocalidades(siniestros, topN = 8) { + const map = {} + siniestros + .filter(s => (s.zona_ocurrencia || '').toLowerCase().includes('urban')) + .forEach(s => { + const loc = (s.localidad || 'Sin datos').trim() + if (!map[loc]) map[loc] = { localidad: loc, fatales: 0, conLes: 0, sinLes: 0, total: 0 } + if (getCantidadFallecidos(s) > 0) map[loc].fatales++ + else if (getCantidadLesionados(s) > 0) map[loc].conLes++ + else map[loc].sinLes++ + map[loc].total++ + }) + return Object.values(map) + .sort((a, b) => b.total - a.total) + .slice(0, topN) +} + +// ✅ FIX: eliminados logs temporales y normalización redundante +// (getTipoSiniestro ya aplica sentence case + trim + normalize) +export function tiposSiniestroVV(siniestros) { + const map = {} + siniestros + .filter(s => (s.zona_ocurrencia || '').toLowerCase().includes('rural')) + .forEach(s => { + const tipo = getTipoSiniestro(s) + map[tipo] = (map[tipo] || 0) + 1 + }) + return Object.entries(map) + .map(([name, value]) => ({ name, value })) + .sort((a, b) => b.value - a.value) +} \ No newline at end of file diff --git a/src/utils/colores.js b/src/utils/colores.js new file mode 100644 index 0000000..d0ab38c --- /dev/null +++ b/src/utils/colores.js @@ -0,0 +1,15 @@ +// src/utils/colores.js +export const COLOR = { + fatales: '#C44228', + conLes: '#CD9F2B', + sinLes: '#337C58', + + navy: '#252C61', + blue: '#80B0DE', + orange: '#E8881A', + + red: '#C44228', + green: '#337C58', + + SERIE: ['#252C61', '#80B0DE', '#CD9F2B', '#337C58', '#C44228'], +} \ No newline at end of file diff --git a/src/utils/exportPdf.js b/src/utils/exportPdf.js new file mode 100644 index 0000000..233e828 --- /dev/null +++ b/src/utils/exportPdf.js @@ -0,0 +1,143 @@ +import html2canvas from 'html2canvas-pro' +import jsPDF from 'jspdf' + +export const SECCIONES_EXPORTABLES = [ + { id: 'resumen', label: 'Resumen General' }, + { id: 'historica', label: 'Serie Histórica Provincial' }, + { id: 'fatales', label: 'Siniestros Fatales' }, + { id: 'lesionados', label: 'Con Lesionados' }, + { id: 'sinlesiones', label: 'Sin Lesiones' }, + { id: 'sintesis', label: 'Síntesis' }, + { id: 'veranovivo', label: 'Verano Vivo' }, +] + +function loadImage(src) { + return new Promise((resolve, reject) => { + const img = new Image() + img.crossOrigin = 'anonymous' + img.onload = () => resolve(img) + img.onerror = reject + img.src = src + }) +} + +function drawHeaderFooter(pdf, secLabel, year, pageNum, W, H) { + pdf.setFillColor(37, 44, 97) + pdf.rect(0, 0, W, 13, 'F') + pdf.setTextColor(255, 255, 255) + pdf.setFont('helvetica', 'bold') + pdf.setFontSize(8) + pdf.text(secLabel.toUpperCase(), 10, 8.5) + pdf.text(`OPSV · Informe ${year} · Santa Cruz`, W - 10, 8.5, { align: 'right' }) + pdf.setFillColor(225, 230, 242) + pdf.rect(0, H - 8, W, 8, 'F') + pdf.setTextColor(90, 100, 135) + pdf.setFont('helvetica', 'normal') + pdf.setFontSize(7) + pdf.text('Agencia Provincial de Seguridad Vial · Santa Cruz', 10, H - 2.5) + pdf.text(`Página ${pageNum}`, W - 10, H - 2.5, { align: 'right' }) +} + +// ── Captura un elemento individual ─────────────────────────────────────────── +async function capturarBloque(block) { + await new Promise(r => setTimeout(r, 80)) + return html2canvas(block, { + scale: 1.5, + useCORS: true, + backgroundColor: '#F4F6F8', + windowWidth: 1280, + scrollX: 0, + scrollY: -window.scrollY, + }) +} + +export async function exportarPDF({ seccionesIds, year, onProgress }) { + const pdf = new jsPDF({ orientation: 'landscape', unit: 'mm', format: 'a4' }) + const W = pdf.internal.pageSize.getWidth() // 297mm + const H = pdf.internal.pageSize.getHeight() // 210mm + const areaW = W - 16 // ancho disponible + const areaH = H - 13 - 10 // alto disponible (header 13mm + footer 10mm) + const topY = 15 // cursor inicial tras el header + const marginX = (W - areaW) / 2 + const gap = 3 // mm de separación entre bloques + + // ── Portada ─────────────────────────────────────────────────────────────── + pdf.setFillColor(37, 44, 97) + pdf.rect(0, 0, W, H, 'F') + + try { + const logoImg = await loadImage('/logo-opsv.png') + const logoW = 55 + const logoH = (logoImg.height / logoImg.width) * logoW + pdf.addImage(logoImg, 'PNG', (W - logoW) / 2, 35, logoW, logoH) + } catch { /* sin logo */ } + + pdf.setTextColor(255, 255, 255) + pdf.setFont('helvetica', 'bold') + pdf.setFontSize(22) + pdf.text(`Informe de Siniestralidad Vial ${year}`, W / 2, 118, { align: 'center' }) + pdf.setFont('helvetica', 'normal') + pdf.setFontSize(13) + pdf.setTextColor(180, 195, 230) + pdf.text('Observatorio Provincial de Seguridad Vial', W / 2, 132, { align: 'center' }) + pdf.text('Provincia de Santa Cruz · Argentina', W / 2, 141, { align: 'center' }) + pdf.setFontSize(9) + pdf.setTextColor(130, 150, 190) + const fecha = new Date().toLocaleDateString('es-AR', { + day: '2-digit', month: 'long', year: 'numeric', + }) + pdf.text(`Generado el ${fecha}`, W / 2, 190, { align: 'center' }) + + // ── Secciones ───────────────────────────────────────────────────────────── + let pageNum = 1 + + for (let i = 0; i < seccionesIds.length; i++) { + const secId = seccionesIds[i] + const secLabel = SECCIONES_EXPORTABLES.find(s => s.id === secId)?.label ?? secId + + onProgress?.(Math.round(((i + 1) / seccionesIds.length) * 90)) + + const el = document.getElementById(`pdf-section-${secId}`) + if (!el) continue + + // ✅ Obtener todos los bloques atómicos de esta sección + const blocks = Array.from(el.querySelectorAll('[data-pdf-block]')) + if (!blocks.length) continue + + // Primera página de la sección + pdf.addPage() + pageNum++ + drawHeaderFooter(pdf, secLabel, year, pageNum, W, H) + let cursorY = topY + + for (const block of blocks) { + const canvas = await capturarBloque(block) + const mmPerPx = areaW / canvas.width + let drawH = canvas.height * mmPerPx + let drawW = areaW + + // Si el bloque es más alto que toda la página, escalar para que entre + if (drawH > areaH) { + const ratio = areaH / drawH + drawH = areaH + drawW = areaW * ratio + } + + // ✅ Si no cabe en lo que queda de página → nueva página + if (cursorY + drawH > topY + areaH) { + pdf.addPage() + pageNum++ + drawHeaderFooter(pdf, secLabel, year, pageNum, W, H) + cursorY = topY + } + + const imgData = canvas.toDataURL('image/jpeg', 0.92) + pdf.addImage(imgData, 'JPEG', marginX, cursorY, drawW, drawH) + cursorY += drawH + gap + } + } + + onProgress?.(100) + await new Promise(r => setTimeout(r, 200)) + pdf.save(`OPSV_Informe_Siniestralidad_${year}.pdf`) +} \ No newline at end of file diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..11f4779 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,5 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: ['./index.html', './src/**/*.{js,jsx,ts,tsx}'], + darkMode: 'class', +} \ No newline at end of file diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..4a78695 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,10 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import tailwindcss from '@tailwindcss/vite' +// https://vite.dev/config/ +export default defineConfig({ + plugins: [ + react(), + tailwindcss(), + ], +})

g46~tGwXQURoPw&^xk| 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�A$~O`S^+EHS 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 z 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�qjda@+axyq===WeX4Q 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