diff --git a/README.md b/README.md index 38a6f36..6632951 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ [![TypeScript](https://img.shields.io/badge/TypeScript-5.9-blue?style=flat-square&logo=typescript)](https://www.typescriptlang.org/) [![PostgreSQL](https://img.shields.io/badge/PostgreSQL-18-blue?style=flat-square&logo=postgresql)](https://www.postgresql.org/) [![Docker](https://img.shields.io/badge/Docker-Ready-blue?style=flat-square&logo=docker)](https://www.docker.com/) +[![Android Companion](https://img.shields.io/badge/Companion-Android-3DDC84?style=flat-square&logo=android)](https://github.com/felipegcoutinho/opensheets-companion) [![License](https://img.shields.io/badge/License-CC_BY--NC--SA_4.0-orange?style=flat-square&logo=creative-commons)](LICENSE) [![Sponsor](https://img.shields.io/badge/Sponsor-❤️-ea4aaa?style=flat-square&logo=github-sponsors)](https://github.com/sponsors/felipegcoutinho) @@ -37,6 +38,7 @@ - [Configuração de Variáveis de Ambiente](#-configuração-de-variáveis-de-ambiente) - [Banco de Dados](#-banco-de-dados) - [Arquitetura](#-arquitetura) +- [Destaques e Funcionalidades Recentes](#-destaques-e-funcionalidades-recentes) - [Contribuindo](#-contribuindo) - [Apoie o Projeto](#-apoie-o-projeto) @@ -51,13 +53,14 @@ A ideia é simples: ter um lugar onde consigo ver todas as minhas contas, cartõ ### 📊 Estatísticas do Projeto - **~200 componentes React** organizados por feature -- **15+ tabelas de banco de dados** com relações complexas +- **17+ tabelas de banco de dados** com relações complexas - **20+ widgets** no dashboard principal - **18+ queries paralelas** otimizadas para performance -- **736 linhas** de schema Drizzle ORM +- **~820 linhas** de schema Drizzle ORM - **Docker multi-stage** com imagem final de ~200MB - **100% TypeScript** com strict mode - **Self-hosted** - seus dados, seu controle +- **App Companion Android** - captura automática de notificações bancárias > 💡 **Licença Não-Comercial:** Este projeto é gratuito para uso pessoal, mas não pode ser usado comercialmente. Veja mais detalhes na seção [Licença](#-licença). @@ -71,7 +74,14 @@ Este projeto é self-hosted. Você precisa rodar no seu próprio computador ou s Você precisa registrar manualmente suas transações. Se você procura algo que sincroniza automaticamente com seu banco, este projeto não é pra você. -**3. Requer disciplina** +**3. 🤖 OpenSheets Companion (Android)** + +Existe um app Android complementar que captura notificações de transações dos seus apps de banco (Nubank, Itaú, Bradesco, Inter, C6 e outros) e envia automaticamente para sua caixa de entrada no OpenSheets. As notificações ficam como "pré-lançamentos" para você revisar e aprovar. + +- **Repositório:** [github.com/felipegcoutinho/opensheets-companion](https://github.com/felipegcoutinho/opensheets-companion) +- **Configuração:** Ajustes → OpenSheets Companion → Gere um token de API + +**4. Requer disciplina** O Opensheets funciona melhor para quem: @@ -147,6 +157,21 @@ Se você não se importa em dedicar alguns minutos por dia (ou semana) para mant - Navegação intuitiva por data - Filtros e organização temporal +📲 **OpenSheets Companion (Android)** + +- App Android que captura notificações bancárias +- Suporte a Nubank, Itaú, Bradesco, Inter, C6 e outros +- Pré-lançamentos para revisão antes de aprovar +- Autenticação via tokens de API seguros +- Sincronização automática em segundo plano + +📊 **Relatórios avançados** + +- Tendências de categorias ao longo do tempo +- Análise de uso de cartões de crédito +- Top estabelecimentos mais frequentes +- Filtros por período personalizáveis + ⚙️ **Preferências e personalização** - Tema claro/escuro @@ -175,12 +200,13 @@ O projeto é open source, seus dados ficam no seu controle (pode rodar localment ### 🔐 Autenticação -- Better Auth 1.4.10 integrado +- Better Auth 1.4.18 integrado - OAuth (Google) - Autenticação por email/senha - Session management com tokens - Protected routes via middleware - Verificação de email +- Tokens de API para integrações externas ### 🗄️ Banco de Dados @@ -238,11 +264,21 @@ O projeto é open source, seus dados ficam no seu controle (pode rodar localment - shadcn/ui components (Radix UI) - Tailwind CSS v4 - Dark mode com next-themes -- Animações fluidas com Motion +- Drag-and-drop com dnd-kit - Responsive design - Modo privacidade (oculta valores) - Componentes acessíveis (ARIA) +### 📲 OpenSheets Companion + +- App Android para captura de notificações bancárias +- Suporte a múltiplos bancos (Nubank, Itaú, Bradesco, Inter, C6, etc.) +- Caixa de entrada (pré-lançamentos) para revisão +- Tokens de API com hash SHA-256 (nunca armazenados em texto) +- Rate limiting (100 requests/min por usuário) +- API batch para envio de múltiplas notificações +- Endpoint de health check para validação + ### 📝 Produtividade - Sistema de anotações e tarefas @@ -263,11 +299,11 @@ O projeto é open source, seus dados ficam no seu controle (pode rodar localment ### 🧪 Desenvolvimento -- Next.js 16.1 com App Router +- Next.js 16.1.6 com App Router - Turbopack (fast refresh) -- TypeScript 5.9 (strict mode) -- Biome (linting + formatting) -- React 19.2 (com Compiler) +- TypeScript 5.9.3 (strict mode) +- Biome 2.x (linting + formatting + import organization) +- React 19.2.4 (com Compiler) - Server Actions - Parallel data fetching - Streaming SSR @@ -278,16 +314,16 @@ O projeto é open source, seus dados ficam no seu controle (pode rodar localment ### Frontend -- **Framework:** Next.js 16.1.1 (App Router) +- **Framework:** Next.js 16.1.6 (App Router) - **Linguagem:** TypeScript 5.9.3 -- **UI Library:** React 19.2.3 +- **UI Library:** React 19.2.4 - **Styling:** Tailwind CSS 4.1.18 - **Components:** shadcn/ui (Radix UI) -- **Icons:** Remixicon 4.8.0 -- **Animations:** Motion 12.23.26 +- **Icons:** Remixicon 4.9.0 +- **Drag & Drop:** dnd-kit - **Tables:** TanStack React Table 8.21.3 -- **Charts:** Recharts 3.6.0 -- **Forms:** React Hook Form + Zod 4.3.4 +- **Charts:** Recharts 3.7.0 +- **Validation:** Zod 4.3.6 - **Theme:** next-themes 0.4.6 ### Backend @@ -295,18 +331,18 @@ O projeto é open source, seus dados ficam no seu controle (pode rodar localment - **Runtime:** Node.js 22 - **Database:** PostgreSQL 18 - **ORM:** Drizzle ORM 0.45.1 -- **Database Driver:** pg 8.16.3 -- **Auth:** Better Auth 1.4.10 -- **Email:** Resend 6.6.0 -- **Validation:** Zod 4.3.4 +- **Database Driver:** pg 8.18.0 +- **Auth:** Better Auth 1.4.18 +- **Email:** Resend 6.9.1 +- **Validation:** Zod 4.3.6 ### AI Integration (Opcional) -- **AI SDK:** Vercel AI SDK 6.0.6 -- **Anthropic:** Claude (via @ai-sdk/anthropic 3.0.2) -- **OpenAI:** GPT (via @ai-sdk/openai 3.0.2) -- **Google:** Gemini (via @ai-sdk/google 3.0.2) -- **OpenRouter:** via @openrouter/ai-sdk-provider 1.5.4 +- **AI SDK:** Vercel AI SDK 6.0.67 +- **Anthropic:** Claude (via @ai-sdk/anthropic 3.0.35) +- **OpenAI:** GPT (via @ai-sdk/openai 3.0.25) +- **Google:** Gemini (via @ai-sdk/google 3.0.20) +- **OpenRouter:** via @openrouter/ai-sdk-provider 2.1.1 ### Utilities @@ -322,7 +358,8 @@ O projeto é open source, seus dados ficam no seu controle (pode rodar localment - **Containerization:** Docker + Docker Compose - **Package Manager:** pnpm - **Build Tool:** Turbopack -- **Linting & Formatting:** Biome 2.x +- **Linting & Formatting:** Biome 2.3.13 +- **Database Tools:** Drizzle Kit 0.31.8 - **Analytics:** Vercel Analytics + Speed Insights --- @@ -869,7 +906,10 @@ opensheets/ ├── app/ # Next.js App Router │ ├── api/ # API Routes │ │ ├── auth/[...all]/ # Better Auth endpoints -│ │ └── health/ # Health check endpoint +│ │ ├── health/ # Health check (Companion validation) +│ │ └── inbox/ # API para Companion App +│ │ ├── route.ts # POST - Enviar notificação única +│ │ └── batch/route.ts # POST - Enviar múltiplas notificações │ ├── (auth)/ # Rotas públicas de autenticação │ │ ├── login/ # Página de login │ │ └── signup/ # Página de cadastro @@ -877,6 +917,7 @@ opensheets/ │ │ ├── dashboard/ # Dashboard principal │ │ │ └── analise-parcelas/ # Análise de parcelas │ │ ├── lancamentos/ # Lançamentos/transações +│ │ ├── pre-lancamentos/ # Caixa de entrada (Companion) │ │ ├── contas/ # Contas bancárias │ │ │ └── [contaId]/extrato # Extrato da conta │ │ ├── cartoes/ # Cartões de crédito @@ -891,7 +932,9 @@ opensheets/ │ │ │ └── arquivadas/ # Anotações arquivadas │ │ ├── insights/ # Insights de IA │ │ ├── relatorios/ # Relatórios -│ │ │ └── categorias/ # Relatório de categorias +│ │ │ ├── tendencias/ # Tendências de categorias +│ │ │ └── uso-cartoes/ # Análise de cartões +│ │ ├── top-estabelecimentos/ # Top estabelecimentos │ │ ├── calendario/ # Visão de calendário │ │ ├── changelog/ # Histórico de mudanças │ │ └── ajustes/ # Configurações @@ -923,8 +966,11 @@ opensheets/ │ ├── anotacoes/ # Componentes de anotações │ ├── insights/ # Componentes de insights IA │ ├── relatorios/ # Componentes de relatórios +│ ├── pre-lancamentos/ # Componentes da caixa de entrada +│ ├── top-estabelecimentos/ # Top estabelecimentos │ ├── calendario/ # Componentes de calendário │ ├── calculadora/ # Calculadora integrada +│ ├── ajustes/ # Configurações e Companion │ ├── sidebar/ # Sidebar de navegação │ ├── skeletons/ # Estados de loading │ └── month-picker/ # Seletor de mês/período @@ -1003,7 +1049,8 @@ opensheets/ | Diretório | Descrição | Arquivos | | ------------------ | ------------------------------------------- | -------- | -| `app/(dashboard)/` | Páginas protegidas da aplicação | ~50 | +| `app/(dashboard)/` | Páginas protegidas da aplicação | ~60 | +| `app/api/` | Endpoints da API (auth, inbox, health) | ~5 | | `components/` | Componentes React reutilizáveis | ~200 | | `lib/` | Lógica de negócio, helpers e utilitários | ~80 | | `db/` | Schema do banco de dados | 1 | @@ -1013,106 +1060,124 @@ opensheets/ ### Estrutura do Banco de Dados -O OpenSheets possui um schema robusto com 15+ tabelas e relações complexas: +O OpenSheets possui um schema robusto com 17+ tabelas e relações complexas: ``` ┌─────────────────────────────────────────────────────────────────┐ │ TABELAS PRINCIPAIS │ ├─────────────────────────────────────────────────────────────────┤ │ │ -│ user user_preferences │ +│ user preferenciasUsuario │ │ ├── id ├── id │ -│ ├── name ├── user_id → user.id │ -│ ├── email ├── disable_magnetlines │ -│ └── ... └── ... │ +│ ├── name ├── userId → user.id │ +│ ├── email ├── disableMagnetlines │ +│ └── ... ├── dashboardWidgets (JSON) │ +│ └── ... │ │ │ │ contas cartoes │ │ ├── id ├── id │ -│ ├── user_id → user.id ├── user_id → user.id │ -│ ├── nome ├── conta_id → contas.id │ -│ ├── tipo_conta ├── nome │ -│ ├── saldo_inicial ├── bandeira │ -│ └── ... ├── dt_fechamento │ -│ ├── dt_vencimento │ +│ ├── userId → user.id ├── userId → user.id │ +│ ├── nome ├── contaId → contas.id │ +│ ├── tipoConta ├── nome │ +│ ├── saldoInicial ├── bandeira │ +│ └── ... ├── dtFechamento │ +│ ├── dtVencimento │ │ └── ... │ │ │ │ categorias pagadores │ │ ├── id ├── id │ -│ ├── user_id → user.id ├── user_id → user.id │ +│ ├── userId → user.id ├── userId → user.id │ │ ├── nome ├── nome │ │ ├── tipo ├── email │ -│ ├── icone ├── share_code (único) │ -│ └── ... ├── role │ +│ ├── icone ├── shareCode (único) │ +│ └── ... ├── isAutoSend │ │ └── ... │ │ │ -│ pagador_shares │ +│ compartilhamentosPagador │ │ ├── id │ -│ ├── pagador_id → pagadores.id │ -│ ├── shared_with_user_id → user.id │ -│ ├── created_by_user_id → user.id │ +│ ├── pagadorId → pagadores.id │ +│ ├── sharedWithUserId → user.id │ +│ ├── createdByUserId → user.id │ │ ├── permission (read/write) │ │ └── ... │ │ │ │ lancamentos (TABELA PRINCIPAL) │ │ ├── id │ -│ ├── user_id → user.id │ -│ ├── conta_id → contas.id │ -│ ├── cartao_id → cartoes.id │ -│ ├── categoria_id → categorias.id │ -│ ├── pagador_id → pagadores.id │ +│ ├── userId → user.id │ +│ ├── contaId → contas.id │ +│ ├── cartaoId → cartoes.id │ +│ ├── categoriaId → categorias.id │ +│ ├── pagadorId → pagadores.id │ │ ├── nome │ │ ├── valor │ -│ ├── tipo_transacao (receita/despesa/transferencia) │ -│ ├── forma_pagamento │ +│ ├── tipoTransacao (receita/despesa/transferencia) │ +│ ├── formaPagamento │ │ ├── condicao (aberto/realizado/cancelado) │ -│ ├── data_compra │ +│ ├── dataCompra │ │ ├── periodo (YYYY-MM) │ -│ ├── qtde_parcela │ -│ ├── parcela_atual │ -│ ├── series_id (agrupa parcelas) │ -│ ├── transfer_id (agrupa transferências) │ +│ ├── qtdeParcela │ +│ ├── parcelaAtual │ +│ ├── seriesId (agrupa parcelas) │ +│ ├── transferId (agrupa transferências) │ │ ├── antecipado (boolean) │ -│ ├── antecipacao_id → installment_anticipations.id │ +│ ├── antecipacaoId → antecipacoesParcelas.id │ │ └── ... │ │ │ -│ installment_anticipations │ +│ antecipacoesParcelas │ │ ├── id │ -│ ├── user_id → user.id │ -│ ├── series_id │ -│ ├── lancamento_id → lancamentos.id │ -│ ├── periodo_antecipacao │ -│ ├── parcelas_antecipadas (JSONB array) │ -│ ├── valor_total │ +│ ├── userId → user.id │ +│ ├── seriesId │ +│ ├── lancamentoId → lancamentos.id │ +│ ├── periodoAntecipacao │ +│ ├── parcelasAntecipadas (JSONB array) │ +│ ├── valorTotal │ │ ├── desconto │ │ └── ... │ │ │ │ faturas orcamentos │ │ ├── id ├── id │ -│ ├── user_id → user.id ├── user_id → user.id │ -│ ├── cartao_id → cartoes ├── categoria_id → categorias.id │ +│ ├── userId → user.id ├── userId → user.id │ +│ ├── cartaoId → cartoes ├── categoriaId → categorias.id │ │ ├── periodo ├── valor │ -│ ├── status_pagamento ├── periodo │ +│ ├── statusPagamento ├── periodo │ │ └── ... └── ... │ │ │ -│ anotacoes saved_insights │ +│ anotacoes insightsSalvos │ │ ├── id ├── id │ -│ ├── user_id → user.id ├── user_id → user.id │ +│ ├── userId → user.id ├── userId → user.id │ │ ├── titulo ├── period │ -│ ├── descricao ├── model_id │ +│ ├── descricao ├── modelId │ │ ├── tipo (nota/tarefa) ├── data (JSON) │ -│ ├── tasks (JSON) ├── created_at │ -│ ├── arquivada └── updated_at │ +│ ├── tasks (JSON) └── createdAt │ +│ ├── arquivada │ │ └── ... │ │ │ +│ ══════════════════ COMPANION APP ══════════════════ │ +│ │ +│ tokensApi preLancamentos │ +│ ├── id ├── id │ +│ ├── userId → user.id ├── userId → user.id │ +│ ├── name ├── sourceApp │ +│ ├── tokenHash (SHA-256) ├── sourceAppName │ +│ ├── tokenPrefix ├── originalTitle │ +│ ├── lastUsedAt ├── originalText │ +│ ├── lastUsedIp ├── parsedName │ +│ ├── expiresAt ├── parsedAmount │ +│ ├── revokedAt ├── status (pending/processed) │ +│ └── createdAt ├── lancamentoId → lancamentos.id │ +│ └── ... │ +│ │ └─────────────────────────────────────────────────────────────────┘ ÍNDICES OTIMIZADOS: -• user_id + period (queries do dashboard) -• user_id + purchase_date (ordenação por data) -• series_id (agrupamento de parcelas) -• cartao_id + period (faturas) -• user_id + condition (filtros de condição) -• share_code (compartilhamento) +• userId + periodo (queries do dashboard) +• userId + dataCompra (ordenação por data) +• seriesId (agrupamento de parcelas) +• cartaoId + periodo (faturas) +• userId + condicao (filtros de condição) +• shareCode (compartilhamento) +• tokenHash (autenticação API) +• userId + status (inbox filtering) ``` ### Fluxo de Autenticação @@ -1181,6 +1246,20 @@ O OpenSheets possui um schema robusto com 15+ tabelas e relações complexas: O OpenSheets está em desenvolvimento ativo. Aqui estão algumas das funcionalidades mais interessantes já implementadas: +### 📲 OpenSheets Companion + +Integração completa com app Android para captura automática de notificações bancárias: + +- **Captura automática:** Nubank, Itaú, Bradesco, Inter, C6 e outros bancos +- **Caixa de entrada:** Notificações chegam como pré-lançamentos para revisão +- **Edição inline:** Ajuste valores e descrições antes de aprovar +- **Tokens seguros:** Autenticação via tokens com hash SHA-256 +- **Rate limiting:** Proteção contra abuso (100 req/min) +- **API batch:** Envio de múltiplas notificações de uma vez +- **Health check:** Endpoint para validação de conectividade + +O app Companion está disponível em: [github.com/felipegcoutinho/opensheets-companion](https://github.com/felipegcoutinho/opensheets-companion) + ### 💸 Sistema Avançado de Parcelamentos O controle de parcelamentos vai além do básico: @@ -1215,7 +1294,10 @@ Analytics poderosos para entender suas finanças: - **Dashboard interativo:** 20+ widgets com diferentes visualizações - **Relatórios de categorias:** Análise profunda por categoria com histórico -- **Comparativos mensais:** Veja a evolução dos seus gastos ao longo do tempo +- **Tendências:** Visualize a evolução de categorias ao longo de 3, 6 ou 12 meses +- **Uso de cartões:** Análise detalhada de gastos por cartão de crédito +- **Top estabelecimentos:** Veja onde você mais gasta +- **Comparativos mensais:** Evolução dos seus gastos ao longo do tempo - **Exportações:** PDF e Excel para análise externa - **Gráficos interativos:** Recharts com dados em tempo real @@ -1258,6 +1340,7 @@ Feito por desenvolvedores, para desenvolvedores: - **Migrations automáticas:** Schema sync simplificado - **Docker completo:** Ambiente reproduzível em qualquer lugar - **Scripts facilitados:** Comandos npm para tudo +- **Biome:** Linting e formatting unificados em uma ferramenta --- @@ -1356,6 +1439,7 @@ Para o texto legal completo, consulte o arquivo [LICENSE](LICENSE) ou visite [cr - [Better Auth](https://better-auth.com/) - [Drizzle ORM](https://orm.drizzle.team/) - [shadcn/ui](https://ui.shadcn.com/) +- [Biome](https://biomejs.dev/) - [Vercel](https://vercel.com/) --- diff --git a/components/ajustes/companion-tab.tsx b/components/ajustes/companion-tab.tsx index f5ed8a1..2d81cf9 100644 --- a/components/ajustes/companion-tab.tsx +++ b/components/ajustes/companion-tab.tsx @@ -1,8 +1,10 @@ "use client"; +import type { ReactNode } from "react"; import { RiAndroidLine, RiDownload2Line, + RiExternalLinkLine, RiNotification3Line, RiQrCodeLine, RiShieldCheckLine, @@ -25,11 +27,28 @@ interface CompanionTabProps { tokens: ApiToken[]; } -const steps = [ +const steps: { + icon: typeof RiDownload2Line; + title: string; + description: ReactNode; +}[] = [ { icon: RiDownload2Line, title: "Instale o app", - description: "Instale o APK.", + description: ( + <> + Baixe o APK no{" "} + + GitHub + + + + ), }, { icon: RiQrCodeLine, diff --git a/components/logo.tsx b/components/logo.tsx index a751673..1026c69 100644 --- a/components/logo.tsx +++ b/components/logo.tsx @@ -1,12 +1,18 @@ import Image from "next/image"; import { cn } from "@/lib/utils/ui"; +import { version } from "@/package.json"; interface LogoProps { variant?: "full" | "small"; className?: string; + showVersion?: boolean; } -export function Logo({ variant = "full", className }: LogoProps) { +export function Logo({ + variant = "full", + className, + showVersion = false, +}: LogoProps) { if (variant === "small") { return ( +
Opensheets + {showVersion && ( + + v{version} + + )}
); } diff --git a/components/month-picker/return-button.tsx b/components/month-picker/return-button.tsx index bfe9b23..ce35718 100644 --- a/components/month-picker/return-button.tsx +++ b/components/month-picker/return-button.tsx @@ -11,13 +11,13 @@ interface ReturnButtonProps { const ReturnButton = React.memo(({ disabled, onClick }: ReturnButtonProps) => { return ( ); }); diff --git a/components/sidebar/app-sidebar.tsx b/components/sidebar/app-sidebar.tsx index 57d44c1..a43fa95 100644 --- a/components/sidebar/app-sidebar.tsx +++ b/components/sidebar/app-sidebar.tsx @@ -53,7 +53,7 @@ export function AppSidebar({ @@ -77,5 +77,10 @@ function LogoContent() { const { state } = useSidebar(); const isCollapsed = state === "collapsed"; - return ; + return ( + + ); } diff --git a/components/sidebar/nav-link.tsx b/components/sidebar/nav-link.tsx index f1757a7..9bc42bc 100644 --- a/components/sidebar/nav-link.tsx +++ b/components/sidebar/nav-link.tsx @@ -13,7 +13,7 @@ import { RiInboxLine, RiNoCreditCardLine, RiPriceTag3Line, - RiSettingsLine, + RiSettings2Line, RiSparklingLine, RiTodoLine, } from "@remixicon/react"; @@ -199,7 +199,7 @@ export function createSidebarNavData( { title: "Ajustes", url: "/ajustes", - icon: RiSettingsLine, + icon: RiSettings2Line, }, ], }; diff --git a/package.json b/package.json index 23f4277..6e31fe7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "opensheets", - "version": "1.0.0", + "version": "1.2.5", "private": true, "scripts": { "dev": "next dev --turbopack", @@ -27,9 +27,9 @@ "docker:rebuild": "docker compose up --build --force-recreate" }, "dependencies": { - "@ai-sdk/anthropic": "^3.0.31", - "@ai-sdk/google": "^3.0.18", - "@ai-sdk/openai": "^3.0.23", + "@ai-sdk/anthropic": "^3.0.35", + "@ai-sdk/google": "^3.0.20", + "@ai-sdk/openai": "^3.0.25", "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", @@ -59,7 +59,7 @@ "@tanstack/react-table": "8.21.3", "@vercel/analytics": "^1.6.1", "@vercel/speed-insights": "^1.3.1", - "ai": "^6.0.62", + "ai": "^6.0.67", "babel-plugin-react-compiler": "^1.0.0", "better-auth": "1.4.18", "class-variance-authority": "0.7.1", @@ -69,10 +69,9 @@ "drizzle-orm": "0.45.1", "jspdf": "^4.0.0", "jspdf-autotable": "^5.0.7", - "motion": "^12.29.2", "next": "16.1.6", "next-themes": "0.4.6", - "pg": "8.17.2", + "pg": "8.18.0", "react": "19.2.4", "react-day-picker": "^9.13.0", "react-dom": "19.2.4", @@ -87,13 +86,10 @@ "devDependencies": { "@biomejs/biome": "2.3.13", "@tailwindcss/postcss": "4.1.18", - "@types/d3-array": "^3.2.2", "@types/node": "25.1.0", "@types/pg": "^8.16.0", "@types/react": "19.2.10", "@types/react-dom": "19.2.3", - "baseline-browser-mapping": "^2.9.19", - "depcheck": "^1.4.7", "dotenv": "^17.2.3", "drizzle-kit": "0.31.8", "tailwindcss": "4.1.18", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 69712bc..d92c763 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,14 +9,14 @@ importers: .: dependencies: '@ai-sdk/anthropic': - specifier: ^3.0.31 - version: 3.0.31(zod@4.3.6) + specifier: ^3.0.35 + version: 3.0.35(zod@4.3.6) '@ai-sdk/google': - specifier: ^3.0.18 - version: 3.0.18(zod@4.3.6) + specifier: ^3.0.20 + version: 3.0.20(zod@4.3.6) '@ai-sdk/openai': - specifier: ^3.0.23 - version: 3.0.23(zod@4.3.6) + specifier: ^3.0.25 + version: 3.0.25(zod@4.3.6) '@dnd-kit/core': specifier: ^6.3.1 version: 6.3.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -28,7 +28,7 @@ importers: version: 3.2.2(react@19.2.4) '@openrouter/ai-sdk-provider': specifier: ^2.1.1 - version: 2.1.1(ai@6.0.62(zod@4.3.6))(zod@4.3.6) + version: 2.1.1(ai@6.0.67(zod@4.3.6))(zod@4.3.6) '@radix-ui/react-accordion': specifier: ^1.2.12 version: 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -105,14 +105,14 @@ importers: specifier: ^1.3.1 version: 1.3.1(next@16.1.6(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) ai: - specifier: ^6.0.62 - version: 6.0.62(zod@4.3.6) + specifier: ^6.0.67 + version: 6.0.67(zod@4.3.6) babel-plugin-react-compiler: specifier: ^1.0.0 version: 1.0.0 better-auth: specifier: 1.4.18 - version: 1.4.18(drizzle-kit@0.31.8)(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(kysely@0.28.10)(pg@8.17.2))(next@16.1.6(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(pg@8.17.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 1.4.18(drizzle-kit@0.31.8)(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(kysely@0.28.11)(pg@8.18.0))(next@16.1.6(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(pg@8.18.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) class-variance-authority: specifier: 0.7.1 version: 0.7.1 @@ -127,16 +127,13 @@ importers: version: 4.1.0 drizzle-orm: specifier: 0.45.1 - version: 0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(kysely@0.28.10)(pg@8.17.2) + version: 0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(kysely@0.28.11)(pg@8.18.0) jspdf: specifier: ^4.0.0 version: 4.0.0 jspdf-autotable: specifier: ^5.0.7 version: 5.0.7(jspdf@4.0.0) - motion: - specifier: ^12.29.2 - version: 12.29.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) next: specifier: 16.1.6 version: 16.1.6(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -144,8 +141,8 @@ importers: specifier: 0.4.6 version: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) pg: - specifier: 8.17.2 - version: 8.17.2 + specifier: 8.18.0 + version: 8.18.0 react: specifier: 19.2.4 version: 19.2.4 @@ -183,9 +180,6 @@ importers: '@tailwindcss/postcss': specifier: 4.1.18 version: 4.1.18 - '@types/d3-array': - specifier: ^3.2.2 - version: 3.2.2 '@types/node': specifier: 25.1.0 version: 25.1.0 @@ -198,12 +192,6 @@ importers: '@types/react-dom': specifier: 19.2.3 version: 19.2.3(@types/react@19.2.10) - baseline-browser-mapping: - specifier: ^2.9.19 - version: 2.9.19 - depcheck: - specifier: ^1.4.7 - version: 1.4.7 dotenv: specifier: ^17.2.3 version: 17.2.3 @@ -222,56 +210,44 @@ importers: packages: - '@ai-sdk/anthropic@3.0.31': - resolution: {integrity: sha512-rcrtOKbmhFKFxifCYjyFFWvBT2XBUfo6VzD2y2GyG6vZ1XJZoJn7JJe5uLy1bDj4mNUz55cottu5NgI6/NhSuQ==} + '@ai-sdk/anthropic@3.0.35': + resolution: {integrity: sha512-Y3g/5uVj621XSB9lGF7WrD7qR+orhV5xpaYkRF8kfj2j4W7e7BBGIvxcdsCf85FjJbc6tKQdNTZ84ZEqT3Y5TQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/gateway@3.0.29': - resolution: {integrity: sha512-zf6yXT+7DcVGWG7ntxVCYC48X/opsWlO5ePvgH8W9DaEVUtkemqKUEzBqowQ778PkZo8sqMnRfD0+fi9HamRRQ==} + '@ai-sdk/gateway@3.0.32': + resolution: {integrity: sha512-7clZRr07P9rpur39t1RrbIe7x8jmwnwUWI8tZs+BvAfX3NFgdSVGGIaT7bTz2pb08jmLXzTSDbrOTqAQ7uBkBQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/google@3.0.18': - resolution: {integrity: sha512-g36Arlv38wjnqAhNlxMkfTvmWpMbD+FTFoXLppZ8dZhMQbr/UI5dEtFAByU1/lWeDyOmj/uTWzAuRTyJRw7OLA==} + '@ai-sdk/google@3.0.20': + resolution: {integrity: sha512-bVGsulEr6JiipAFlclo9bjL5WaUV0iCSiiekLt+PY6pwmtJeuU2GaD9DoE3OqR8LN2W779mU13IhVEzlTupf8g==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/openai@3.0.23': - resolution: {integrity: sha512-vFfFadJH+hbrgI4lhC9H/r8qPzuFJFUwZNS8oMI8KujO/woovbE1EWOOGMRGtNVL8PrhhxBfgJzvOKdux3c1gw==} + '@ai-sdk/openai@3.0.25': + resolution: {integrity: sha512-DsaN46R98+D1W3lU3fKuPU3ofacboLaHlkAwxJPgJ8eup1AJHmPK1N1y10eJJbJcF6iby8Tf/vanoZxc9JPUfw==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/provider-utils@4.0.11': - resolution: {integrity: sha512-y/WOPpcZaBjvNaogy83mBsCRPvbtaK0y1sY9ckRrrbTGMvG2HC/9Y/huqNXKnLAxUIME2PGa2uvF2CDwIsxoXQ==} + '@ai-sdk/provider-utils@4.0.13': + resolution: {integrity: sha512-HHG72BN4d+OWTcq2NwTxOm/2qvk1duYsnhCDtsbYwn/h/4zeqURu1S0+Cn0nY2Ysq9a9HGKvrYuMn9bgFhR2Og==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/provider@3.0.6': - resolution: {integrity: sha512-hSfoJtLtpMd7YxKM+iTqlJ0ZB+kJ83WESMiWuWrNVey3X8gg97x0OdAAaeAeclZByCX3UdPOTqhvJdK8qYA3ww==} + '@ai-sdk/provider@3.0.7': + resolution: {integrity: sha512-VkPLrutM6VdA924/mG8OS+5frbVTcu6e046D2bgDo00tehBANR1QBJ/mPcZ9tXMFOsVcm6SQArOregxePzTFPw==} engines: {node: '>=18'} '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@babel/code-frame@7.28.6': - resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.28.6': - resolution: {integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} @@ -280,25 +256,12 @@ packages: resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.6': - resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/runtime@7.28.6': resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} engines: {node: '>=6.9.0'} - '@babel/template@7.28.6': - resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.28.6': - resolution: {integrity: sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.28.6': - resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==} + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} '@better-auth/core@1.4.18': @@ -1859,18 +1822,12 @@ packages: '@types/d3-timer@3.0.2': resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} - '@types/minimatch@3.0.5': - resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} - '@types/node@25.1.0': resolution: {integrity: sha512-t7frlewr6+cbx+9Ohpl0NOTKXZNV9xHRmNOvql47BFJKcEG1CxtxlPEEe+gR9uhVWM4DwhnvTF110mIL4yP9RA==} '@types/pako@2.0.4': resolution: {integrity: sha512-VWDCbrLeVXJM9fihYodcLiIv0ku+AlOa/TQ1SvYOaBuyrSKgEcro95LJyIsJ4vSo6BXIxOKxiJAat04CmST9Fw==} - '@types/parse-json@4.0.2': - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - '@types/pg@8.16.0': resolution: {integrity: sha512-RmhMd/wD+CF8Dfo+cVIy3RR5cl8CyfXQ0tGgW6XBL8L4LM/UTEbNXYRbLwU6w+CgrKBNbrQWt4FUtTfaU5jSYQ==} @@ -1944,21 +1901,6 @@ packages: vue-router: optional: true - '@vue/compiler-core@3.5.27': - resolution: {integrity: sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ==} - - '@vue/compiler-dom@3.5.27': - resolution: {integrity: sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w==} - - '@vue/compiler-sfc@3.5.27': - resolution: {integrity: sha512-sHZu9QyDPeDmN/MRoshhggVOWE5WlGFStKFwu8G52swATgSny27hJRWteKDSUUzUH+wp+bmeNbhJnEAel/auUQ==} - - '@vue/compiler-ssr@3.5.27': - resolution: {integrity: sha512-Sj7h+JHt512fV1cTxKlYhg7qxBvack+BGncSpH+8vnN+KN95iPIcqB5rsbblX40XorP+ilO7VIKlkuu3Xq2vjw==} - - '@vue/shared@3.5.27': - resolution: {integrity: sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ==} - '@zone-eu/mailsplit@5.4.8': resolution: {integrity: sha512-eEyACj4JZ7sjzRvy26QhLgKEMWwQbsw1+QZnlLX+/gihcNH07lVPOcnwf5U6UAL7gkc//J3jVd76o/WS+taUiA==} @@ -1966,45 +1908,19 @@ packages: resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} engines: {node: '>=0.8'} - ai@6.0.62: - resolution: {integrity: sha512-0ArQPYmSnwoDG1nQ7GQ2XyEtYEWMSK4pVV9S9nsChRY2D6P2H2ntMEDV/CqTF6GTSwJpBJHAOSvsgEqSc7dx5g==} + ai@6.0.67: + resolution: {integrity: sha512-xBnTcByHCj3OcG6V8G1s6zvSEqK0Bdiu+IEXYcpGrve1iGFFRgcrKeZtr/WAW/7gupnSvBbDF24BEv1OOfqi1g==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - aria-hidden@1.2.6: resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} engines: {node: '>=10'} - array-differ@3.0.0: - resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} - engines: {node: '>=8'} - - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - - arrify@2.0.1: - resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} - engines: {node: '>=8'} - babel-plugin-react-compiler@1.0.0: resolution: {integrity: sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==} - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - base64-arraybuffer@1.0.2: resolution: {integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==} engines: {node: '>= 0.6.0'} @@ -2083,30 +1999,9 @@ packages: zod: optional: true - brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - callsite@1.0.0: - resolution: {integrity: sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - caniuse-lite@1.0.30001766: resolution: {integrity: sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==} @@ -2124,9 +2019,6 @@ packages: client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -2141,23 +2033,9 @@ packages: resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} engines: {node: '>=0.8'} - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - core-js@3.48.0: resolution: {integrity: sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==} - cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} - crc-32@1.2.2: resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} engines: {node: '>=0.8'} @@ -2238,18 +2116,6 @@ packages: defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - depcheck@1.4.7: - resolution: {integrity: sha512-1lklS/bV5chOxwNKA/2XUUk/hPORp8zihZsXflr8x0kLwmcZ9Y9BsS6Hs3ssvA+2wUVbG0U2Ciqvm1SokNjPkA==} - engines: {node: '>=10'} - hasBin: true - - deps-regex@0.2.0: - resolution: {integrity: sha512-PwuBojGMQAYbWkMXOY9Pd/NWCDNHVH12pnS7WHqZkTSeMESe4hwnKKRp0yR87g37113x4JPbo/oIvXY+s/f56Q==} - - detect-file@1.0.0: - resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} - engines: {node: '>=0.10.0'} - detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -2373,9 +2239,6 @@ packages: sqlite3: optional: true - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - encoding-japanese@2.2.0: resolution: {integrity: sha512-EuJWwlHPZ1LbADuKTClvHtwbaFn4rOD+dRAbWysqEOXRc2Uui0hJInNJrsdH0c+OhJA4nrCBdSkW4DD5YxAo6A==} engines: {node: '>=8.10.0'} @@ -2388,13 +2251,6 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - entities@7.0.1: - resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} - engines: {node: '>=0.12'} - - error-ex@1.3.4: - resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - es-toolkit@1.44.0: resolution: {integrity: sha512-6penXeZalaV88MM3cGkFZZfOoLGWshWWfdy0tWw/RlVVyhvMaWSBTOvXNeiW3e5FwdS5ePW0LGEu17zT139ktg==} @@ -2418,18 +2274,6 @@ packages: engines: {node: '>=18'} hasBin: true - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - eventemitter3@5.0.4: resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} @@ -2437,10 +2281,6 @@ packages: resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} engines: {node: '>=18.0.0'} - expand-tilde@2.0.2: - resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} - engines: {node: '>=0.10.0'} - fast-png@6.4.0: resolution: {integrity: sha512-kAqZq1TlgBjZcLr5mcN6NP5Rv4V2f22z00c3g8vRrwkcqjerx7BEhPbOnWCPqaHUl2XWQBJQvOT/FQhdMT7X/Q==} @@ -2450,74 +2290,29 @@ packages: fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - findup-sync@5.0.0: - resolution: {integrity: sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==} - engines: {node: '>= 10.13.0'} - frac@1.1.2: resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} engines: {node: '>=0.8'} - framer-motion@12.29.2: - resolution: {integrity: sha512-lSNRzBJk4wuIy0emYQ/nfZ7eWhqud2umPKw2QAQki6uKhZPKm2hRQHeQoHTG9MIvfobb+A/LbEWPJU794ZUKrg==} - peerDependencies: - '@emotion/is-prop-valid': '*' - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@emotion/is-prop-valid': - optional: true - react: - optional: true - react-dom: - optional: true - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} - get-tsconfig@4.13.0: - resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} - - global-modules@1.0.0: - resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} - engines: {node: '>=0.10.0'} - - global-prefix@1.0.2: - resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} - engines: {node: '>=0.10.0'} + get-tsconfig@4.13.1: + resolution: {integrity: sha512-EoY1N2xCn44xU6750Sx7OjOIT59FkmstNc3X6y5xpz7D5cBtZRe/3pSlTkDJgqsOk3WwZPkWfonhhUJfttQo3w==} graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - homedir-polyfill@1.0.3: - resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} - engines: {node: '>=0.10.0'} - html-to-text@9.0.5: resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} engines: {node: '>=14'} @@ -2537,23 +2332,12 @@ packages: resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} engines: {node: '>=0.10.0'} - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - immer@10.2.0: resolution: {integrity: sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==} immer@11.1.3: resolution: {integrity: sha512-6jQTc5z0KJFtr1UgFpIL3N9XSC3saRaI9PwWtzM2pSqkNGtiNkYY2OSwkOGDK2XcTRcLb1pi/aNkKZz0nxVH4Q==} - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - internmap@2.0.3: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} @@ -2561,36 +2345,6 @@ packages: iobuffer@5.4.0: resolution: {integrity: sha512-DRebOWuqDvxunfkNJAlc3IzWIPD5xVxwUNbHr7xKB8E6aLJxIPfNX3CoMJghcFjpv6RWQsrcJbghtEwSPoJqMA==} - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true @@ -2598,29 +2352,9 @@ packages: jose@6.1.3: resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@3.14.2: - resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} - hasBin: true - - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - json-schema@0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - jspdf-autotable@5.0.7: resolution: {integrity: sha512-2wr7H6liNDBYNwt25hMQwXkEWFOEopgKIvR1Eukuw6Zmprm/ZcnmLTQEjW7Xx3FCbD3v7pflLcnMAv/h1jFDQw==} peerDependencies: @@ -2629,8 +2363,8 @@ packages: jspdf@4.0.0: resolution: {integrity: sha512-w12U97Z6edKd2tXDn3LzTLg7C7QLJlx0BPfM3ecjK2BckUl9/81vZ+r5gK4/3KQdhAcEZhENUxRhtgYBj75MqQ==} - kysely@0.28.10: - resolution: {integrity: sha512-ksNxfzIW77OcZ+QWSAPC7yDqUSaIVwkTWnTPNiIy//vifNbwsSgQ57OkkncHxxpcBHM3LRfLAZVEh7kjq5twVA==} + kysely@0.28.11: + resolution: {integrity: sha512-zpGIFg0HuoC893rIjYX1BETkVWdDnzTzF5e0kWXJFg5lE0k1/LfNWBejrcnOFu8Q2Rfq/hTDTU7XLUM8QOrpzg==} engines: {node: '>=20.0.0'} leac@0.6.0: @@ -2719,59 +2453,18 @@ packages: resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} engines: {node: '>= 12.0.0'} - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - lodash@4.17.23: - resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} - magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} mailparser@3.9.1: resolution: {integrity: sha512-6vHZcco3fWsDMkf4Vz9iAfxvwrKNGbHx0dV1RKVphQ/zaNY34Buc7D37LSa09jeSeybWzYcTPjhiZFxzVRJedA==} - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@7.4.6: - resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} - engines: {node: '>=10'} - - motion-dom@12.29.2: - resolution: {integrity: sha512-/k+NuycVV8pykxyiTCoFzIVLA95Nb1BFIVvfSu9L50/6K6qNeAYtkxXILy/LRutt7AzaYDc2myj0wkCVVYAPPA==} - - motion-utils@12.29.2: - resolution: {integrity: sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A==} - - motion@12.29.2: - resolution: {integrity: sha512-jMpHdAzEDF1QQ055cB+1lOBLdJ6ialVWl6QQzpJI2OvmHequ7zFVHM2mx0HNAy+Tu4omUlApfC+4vnkX0geEOg==} - peerDependencies: - '@emotion/is-prop-valid': '*' - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@emotion/is-prop-valid': - optional: true - react: - optional: true - react-dom: - optional: true - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - multimatch@5.0.0: - resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} - engines: {node: '>=10'} - nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -2815,28 +2508,9 @@ packages: pako@2.1.0: resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - - parse-passwd@1.0.0: - resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} - engines: {node: '>=0.10.0'} - parseley@0.12.1: resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==} - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - peberminta@0.9.0: resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} @@ -2846,8 +2520,8 @@ packages: pg-cloudflare@1.3.0: resolution: {integrity: sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==} - pg-connection-string@2.10.1: - resolution: {integrity: sha512-iNzslsoeSH2/gmDDKiyMqF64DATUCWj3YJ0wP14kqcsf2TUklwimd+66yYojKwZCA7h2yRNLGug71hCBA2a4sw==} + pg-connection-string@2.11.0: + resolution: {integrity: sha512-kecgoJwhOpxYU21rZjULrmrBJ698U2RxXofKVzOn5UDj61BPj/qMb7diYUR1nLScCDbrztQFl1TaQZT0t1EtzQ==} pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} @@ -2865,8 +2539,8 @@ packages: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} engines: {node: '>=4'} - pg@8.17.2: - resolution: {integrity: sha512-vjbKdiBJRqzcYw1fNU5KuHyYvdJ1qpcQg1CeBrHFqV1pWgHeVR6j/+kX0E1AAXfyuLUGY1ICrN2ELKA/z2HWzw==} + pg@8.18.0: + resolution: {integrity: sha512-xqrUDL1b9MbkydY/s+VZ6v+xiMUmOUk7SS9d/1kpyQxoJ6U9AO1oIJyUWVZojbfe5Cc/oluutcgFG4L9RDP1iQ==} engines: {node: '>= 16.0.0'} peerDependencies: pg-native: '>=3.0.1' @@ -2880,13 +2554,6 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - please-upgrade-node@3.2.0: - resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==} - postcss@8.4.31: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} @@ -2978,10 +2645,6 @@ packages: resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} engines: {node: '>=0.10.0'} - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - recharts@3.7.0: resolution: {integrity: sha512-l2VCsy3XXeraxIID9fx23eCb6iCBsxUQDnE8tWm6DFdszVAO7WVY/ChAD9wVit01y6B2PMupYiMmQwhgPHc9Ew==} engines: {node: '>=18'} @@ -3001,13 +2664,6 @@ packages: regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - require-package-name@2.0.1: - resolution: {integrity: sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==} - reselect@5.1.1: resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} @@ -3020,26 +2676,9 @@ packages: '@react-email/render': optional: true - resolve-dir@1.0.1: - resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} - engines: {node: '>=0.10.0'} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.11: - resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} - engines: {node: '>= 0.4'} - hasBin: true - rgbcolor@1.0.1: resolution: {integrity: sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==} engines: {node: '>= 0.8.15'} @@ -3056,9 +2695,6 @@ packages: selderee@0.11.0: resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} - semver-compare@1.0.0: - resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} - semver@7.7.3: resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} engines: {node: '>=10'} @@ -3092,9 +2728,6 @@ packages: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - ssf@0.11.2: resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} engines: {node: '>=0.8'} @@ -3106,14 +2739,6 @@ packages: standardwebhooks@1.0.0: resolution: {integrity: sha512-BbHGOQK9olHPMvQNHWul6MYlrRTAOKn03rOe4A8O3CLWhNf4YHBqq2HJKKC+sfqpxiBY52pNeesD6jIiLDz8jg==} - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - styled-jsx@5.1.6: resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} engines: {node: '>= 12.0.0'} @@ -3127,10 +2752,6 @@ packages: babel-plugin-macros: optional: true - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - svg-pathdata@6.0.3: resolution: {integrity: sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==} engines: {node: '>=12.0.0'} @@ -3158,10 +2779,6 @@ packages: resolution: {integrity: sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA==} hasBin: true - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -3222,10 +2839,6 @@ packages: victory-vendor@37.3.6: resolution: {integrity: sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==} - which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - wmf@1.0.2: resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} engines: {node: '>=0.8'} @@ -3234,10 +2847,6 @@ packages: resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} engines: {node: '>=0.8'} - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - xlsx@0.18.5: resolution: {integrity: sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==} engines: {node: '>=0.8'} @@ -3247,128 +2856,74 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - - yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - - yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} snapshots: - '@ai-sdk/anthropic@3.0.31(zod@4.3.6)': + '@ai-sdk/anthropic@3.0.35(zod@4.3.6)': dependencies: - '@ai-sdk/provider': 3.0.6 - '@ai-sdk/provider-utils': 4.0.11(zod@4.3.6) + '@ai-sdk/provider': 3.0.7 + '@ai-sdk/provider-utils': 4.0.13(zod@4.3.6) zod: 4.3.6 - '@ai-sdk/gateway@3.0.29(zod@4.3.6)': + '@ai-sdk/gateway@3.0.32(zod@4.3.6)': dependencies: - '@ai-sdk/provider': 3.0.6 - '@ai-sdk/provider-utils': 4.0.11(zod@4.3.6) + '@ai-sdk/provider': 3.0.7 + '@ai-sdk/provider-utils': 4.0.13(zod@4.3.6) '@vercel/oidc': 3.1.0 zod: 4.3.6 - '@ai-sdk/google@3.0.18(zod@4.3.6)': + '@ai-sdk/google@3.0.20(zod@4.3.6)': dependencies: - '@ai-sdk/provider': 3.0.6 - '@ai-sdk/provider-utils': 4.0.11(zod@4.3.6) + '@ai-sdk/provider': 3.0.7 + '@ai-sdk/provider-utils': 4.0.13(zod@4.3.6) zod: 4.3.6 - '@ai-sdk/openai@3.0.23(zod@4.3.6)': + '@ai-sdk/openai@3.0.25(zod@4.3.6)': dependencies: - '@ai-sdk/provider': 3.0.6 - '@ai-sdk/provider-utils': 4.0.11(zod@4.3.6) + '@ai-sdk/provider': 3.0.7 + '@ai-sdk/provider-utils': 4.0.13(zod@4.3.6) zod: 4.3.6 - '@ai-sdk/provider-utils@4.0.11(zod@4.3.6)': + '@ai-sdk/provider-utils@4.0.13(zod@4.3.6)': dependencies: - '@ai-sdk/provider': 3.0.6 + '@ai-sdk/provider': 3.0.7 '@standard-schema/spec': 1.1.0 eventsource-parser: 3.0.6 zod: 4.3.6 - '@ai-sdk/provider@3.0.6': + '@ai-sdk/provider@3.0.7': dependencies: json-schema: 0.4.0 '@alloc/quick-lru@5.2.0': {} - '@babel/code-frame@7.28.6': - dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/generator@7.28.6': - dependencies: - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - - '@babel/helper-globals@7.28.0': {} - '@babel/helper-string-parser@7.27.1': {} '@babel/helper-validator-identifier@7.28.5': {} - '@babel/parser@7.28.6': - dependencies: - '@babel/types': 7.28.6 - '@babel/runtime@7.28.6': {} - '@babel/template@7.28.6': - dependencies: - '@babel/code-frame': 7.28.6 - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 - - '@babel/traverse@7.28.6': - dependencies: - '@babel/code-frame': 7.28.6 - '@babel/generator': 7.28.6 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.6 - '@babel/template': 7.28.6 - '@babel/types': 7.28.6 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.28.6': + '@babel/types@7.29.0': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@better-auth/core@1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.10)(nanostores@1.1.0)': + '@better-auth/core@1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0)': dependencies: '@better-auth/utils': 0.3.0 '@better-fetch/fetch': 1.1.21 '@standard-schema/spec': 1.1.0 better-call: 1.1.8(zod@4.3.6) jose: 6.1.3 - kysely: 0.28.10 + kysely: 0.28.11 nanostores: 1.1.0 zod: 4.3.6 - '@better-auth/telemetry@1.4.18(@better-auth/core@1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.10)(nanostores@1.1.0))': + '@better-auth/telemetry@1.4.18(@better-auth/core@1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0))': dependencies: - '@better-auth/core': 1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.10)(nanostores@1.1.0) + '@better-auth/core': 1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0) '@better-auth/utils': 0.3.0 '@better-fetch/fetch': 1.1.21 @@ -3453,7 +3008,7 @@ snapshots: '@esbuild-kit/esm-loader@2.6.5': dependencies: '@esbuild-kit/core-utils': 3.3.2 - get-tsconfig: 4.13.0 + get-tsconfig: 4.13.1 '@esbuild/aix-ppc64@0.25.12': optional: true @@ -3840,9 +3395,9 @@ snapshots: '@noble/hashes@2.0.1': {} - '@openrouter/ai-sdk-provider@2.1.1(ai@6.0.62(zod@4.3.6))(zod@4.3.6)': + '@openrouter/ai-sdk-provider@2.1.1(ai@6.0.67(zod@4.3.6))(zod@4.3.6)': dependencies: - ai: 6.0.62(zod@4.3.6) + ai: 6.0.67(zod@4.3.6) zod: 4.3.6 '@opentelemetry/api@1.9.0': {} @@ -4572,16 +4127,12 @@ snapshots: '@types/d3-timer@3.0.2': {} - '@types/minimatch@3.0.5': {} - '@types/node@25.1.0': dependencies: undici-types: 7.16.0 '@types/pako@2.0.4': {} - '@types/parse-json@4.0.2': {} - '@types/pg@8.16.0': dependencies: '@types/node': 25.1.0 @@ -4616,38 +4167,6 @@ snapshots: next: 16.1.6(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 - '@vue/compiler-core@3.5.27': - dependencies: - '@babel/parser': 7.28.6 - '@vue/shared': 3.5.27 - entities: 7.0.1 - estree-walker: 2.0.2 - source-map-js: 1.2.1 - - '@vue/compiler-dom@3.5.27': - dependencies: - '@vue/compiler-core': 3.5.27 - '@vue/shared': 3.5.27 - - '@vue/compiler-sfc@3.5.27': - dependencies: - '@babel/parser': 7.28.6 - '@vue/compiler-core': 3.5.27 - '@vue/compiler-dom': 3.5.27 - '@vue/compiler-ssr': 3.5.27 - '@vue/shared': 3.5.27 - estree-walker: 2.0.2 - magic-string: 0.30.21 - postcss: 8.5.6 - source-map-js: 1.2.1 - - '@vue/compiler-ssr@3.5.27': - dependencies: - '@vue/compiler-dom': 3.5.27 - '@vue/shared': 3.5.27 - - '@vue/shared@3.5.27': {} - '@zone-eu/mailsplit@5.4.8': dependencies: libbase64: 1.3.0 @@ -4656,49 +4175,31 @@ snapshots: adler-32@1.3.1: {} - ai@6.0.62(zod@4.3.6): + ai@6.0.67(zod@4.3.6): dependencies: - '@ai-sdk/gateway': 3.0.29(zod@4.3.6) - '@ai-sdk/provider': 3.0.6 - '@ai-sdk/provider-utils': 4.0.11(zod@4.3.6) + '@ai-sdk/gateway': 3.0.32(zod@4.3.6) + '@ai-sdk/provider': 3.0.7 + '@ai-sdk/provider-utils': 4.0.13(zod@4.3.6) '@opentelemetry/api': 1.9.0 zod: 4.3.6 - ansi-regex@5.0.1: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 - aria-hidden@1.2.6: dependencies: tslib: 2.8.1 - array-differ@3.0.0: {} - - array-union@2.1.0: {} - - arrify@2.0.1: {} - babel-plugin-react-compiler@1.0.0: dependencies: - '@babel/types': 7.28.6 - - balanced-match@1.0.2: {} + '@babel/types': 7.29.0 base64-arraybuffer@1.0.2: optional: true baseline-browser-mapping@2.9.19: {} - better-auth@1.4.18(drizzle-kit@0.31.8)(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(kysely@0.28.10)(pg@8.17.2))(next@16.1.6(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(pg@8.17.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + better-auth@1.4.18(drizzle-kit@0.31.8)(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(kysely@0.28.11)(pg@8.18.0))(next@16.1.6(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(pg@8.18.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - '@better-auth/core': 1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.10)(nanostores@1.1.0) - '@better-auth/telemetry': 1.4.18(@better-auth/core@1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.10)(nanostores@1.1.0)) + '@better-auth/core': 1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0) + '@better-auth/telemetry': 1.4.18(@better-auth/core@1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0)) '@better-auth/utils': 0.3.0 '@better-fetch/fetch': 1.1.21 '@noble/ciphers': 2.1.1 @@ -4706,14 +4207,14 @@ snapshots: better-call: 1.1.8(zod@4.3.6) defu: 6.1.4 jose: 6.1.3 - kysely: 0.28.10 + kysely: 0.28.11 nanostores: 1.1.0 zod: 4.3.6 optionalDependencies: drizzle-kit: 0.31.8 - drizzle-orm: 0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(kysely@0.28.10)(pg@8.17.2) + drizzle-orm: 0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(kysely@0.28.11)(pg@8.18.0) next: 16.1.6(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - pg: 8.17.2 + pg: 8.18.0 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) @@ -4726,27 +4227,8 @@ snapshots: optionalDependencies: zod: 4.3.6 - brace-expansion@1.1.12: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.2: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - buffer-from@1.1.2: {} - callsite@1.0.0: {} - - callsites@3.1.0: {} - - camelcase@6.3.0: {} - caniuse-lite@1.0.30001766: {} canvg@3.0.11: @@ -4772,12 +4254,6 @@ snapshots: client-only@0.0.1: {} - cliui@7.0.4: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - clsx@2.1.1: {} cmdk@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): @@ -4794,25 +4270,9 @@ snapshots: codepage@1.15.0: {} - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - concat-map@0.0.1: {} - core-js@3.48.0: optional: true - cosmiconfig@7.1.0: - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.1 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - crc-32@1.2.2: {} css-line-break@2.1.0: @@ -4874,38 +4334,6 @@ snapshots: defu@6.1.4: {} - depcheck@1.4.7: - dependencies: - '@babel/parser': 7.28.6 - '@babel/traverse': 7.28.6 - '@vue/compiler-sfc': 3.5.27 - callsite: 1.0.0 - camelcase: 6.3.0 - cosmiconfig: 7.1.0 - debug: 4.4.3 - deps-regex: 0.2.0 - findup-sync: 5.0.0 - ignore: 5.3.2 - is-core-module: 2.16.1 - js-yaml: 3.14.2 - json5: 2.2.3 - lodash: 4.17.23 - minimatch: 7.4.6 - multimatch: 5.0.0 - please-upgrade-node: 3.2.0 - readdirp: 3.6.0 - require-package-name: 2.0.1 - resolve: 1.22.11 - resolve-from: 5.0.0 - semver: 7.7.3 - yargs: 16.2.0 - transitivePeerDependencies: - - supports-color - - deps-regex@0.2.0: {} - - detect-file@1.0.0: {} - detect-libc@2.1.2: {} detect-node-es@1.1.0: {} @@ -4944,14 +4372,12 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(kysely@0.28.10)(pg@8.17.2): + drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(kysely@0.28.11)(pg@8.18.0): optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/pg': 8.16.0 - kysely: 0.28.10 - pg: 8.17.2 - - emoji-regex@8.0.0: {} + kysely: 0.28.11 + pg: 8.18.0 encoding-japanese@2.2.0: {} @@ -4962,12 +4388,6 @@ snapshots: entities@4.5.0: {} - entities@7.0.1: {} - - error-ex@1.3.4: - dependencies: - is-arrayish: 0.2.1 - es-toolkit@1.44.0: {} esbuild-register@3.6.0(esbuild@0.25.12): @@ -5060,20 +4480,10 @@ snapshots: '@esbuild/win32-ia32': 0.27.2 '@esbuild/win32-x64': 0.27.2 - escalade@3.2.0: {} - - esprima@4.0.1: {} - - estree-walker@2.0.2: {} - eventemitter3@5.0.4: {} eventsource-parser@3.0.6: {} - expand-tilde@2.0.2: - dependencies: - homedir-polyfill: 1.0.3 - fast-png@6.4.0: dependencies: '@types/pako': 2.0.4 @@ -5084,67 +4494,21 @@ snapshots: fflate@0.8.2: {} - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - findup-sync@5.0.0: - dependencies: - detect-file: 1.0.0 - is-glob: 4.0.3 - micromatch: 4.0.8 - resolve-dir: 1.0.1 - frac@1.1.2: {} - framer-motion@12.29.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4): - dependencies: - motion-dom: 12.29.2 - motion-utils: 12.29.2 - tslib: 2.8.1 - optionalDependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - fsevents@2.3.3: optional: true - function-bind@1.1.2: {} - - get-caller-file@2.0.5: {} - get-nonce@1.0.1: {} - get-tsconfig@4.13.0: + get-tsconfig@4.13.1: dependencies: resolve-pkg-maps: 1.0.0 - global-modules@1.0.0: - dependencies: - global-prefix: 1.0.2 - is-windows: 1.0.2 - resolve-dir: 1.0.1 - - global-prefix@1.0.2: - dependencies: - expand-tilde: 2.0.2 - homedir-polyfill: 1.0.3 - ini: 1.3.8 - is-windows: 1.0.2 - which: 1.3.1 - graceful-fs@4.2.11: {} - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - he@1.2.0: {} - homedir-polyfill@1.0.3: - dependencies: - parse-passwd: 1.0.0 - html-to-text@9.0.5: dependencies: '@selderee/plugin-htmlparser2': 0.11.0 @@ -5174,62 +4538,20 @@ snapshots: dependencies: safer-buffer: 2.1.2 - ignore@5.3.2: {} - immer@10.2.0: {} immer@11.1.3: {} - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - ini@1.3.8: {} - internmap@2.0.3: {} iobuffer@5.4.0: {} - is-arrayish@0.2.1: {} - - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-extglob@2.1.1: {} - - is-fullwidth-code-point@3.0.0: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-number@7.0.0: {} - - is-windows@1.0.2: {} - - isexe@2.0.0: {} - jiti@2.6.1: {} jose@6.1.3: {} - js-tokens@4.0.0: {} - - js-yaml@3.14.2: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - - jsesc@3.1.0: {} - - json-parse-even-better-errors@2.3.1: {} - json-schema@0.4.0: {} - json5@2.2.3: {} - jspdf-autotable@5.0.7(jspdf@4.0.0): dependencies: jspdf: 4.0.0 @@ -5245,7 +4567,7 @@ snapshots: dompurify: 3.3.1 html2canvas: 1.4.1 - kysely@0.28.10: {} + kysely@0.28.11: {} leac@0.6.0: {} @@ -5309,14 +4631,10 @@ snapshots: lightningcss-win32-arm64-msvc: 1.30.2 lightningcss-win32-x64-msvc: 1.30.2 - lines-and-columns@1.2.4: {} - linkify-it@5.0.0: dependencies: uc.micro: 2.1.0 - lodash@4.17.23: {} - magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -5334,43 +4652,8 @@ snapshots: punycode.js: 2.3.1 tlds: 1.261.0 - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.12 - - minimatch@7.4.6: - dependencies: - brace-expansion: 2.0.2 - - motion-dom@12.29.2: - dependencies: - motion-utils: 12.29.2 - - motion-utils@12.29.2: {} - - motion@12.29.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4): - dependencies: - framer-motion: 12.29.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - tslib: 2.8.1 - optionalDependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - ms@2.1.3: {} - multimatch@5.0.0: - dependencies: - '@types/minimatch': 3.0.5 - array-differ: 3.0.0 - array-union: 2.1.0 - arrify: 2.0.1 - minimatch: 3.1.2 - nanoid@3.3.11: {} nanostores@1.1.0: {} @@ -5410,28 +4693,11 @@ snapshots: pako@2.1.0: {} - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.28.6 - error-ex: 1.3.4 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - - parse-passwd@1.0.0: {} - parseley@0.12.1: dependencies: leac: 0.6.0 peberminta: 0.9.0 - path-parse@1.0.7: {} - - path-type@4.0.0: {} - peberminta@0.9.0: {} performance-now@2.1.0: @@ -5440,13 +4706,13 @@ snapshots: pg-cloudflare@1.3.0: optional: true - pg-connection-string@2.10.1: {} + pg-connection-string@2.11.0: {} pg-int8@1.0.1: {} - pg-pool@3.11.0(pg@8.17.2): + pg-pool@3.11.0(pg@8.18.0): dependencies: - pg: 8.17.2 + pg: 8.18.0 pg-protocol@1.11.0: {} @@ -5458,10 +4724,10 @@ snapshots: postgres-date: 1.0.7 postgres-interval: 1.2.0 - pg@8.17.2: + pg@8.18.0: dependencies: - pg-connection-string: 2.10.1 - pg-pool: 3.11.0(pg@8.17.2) + pg-connection-string: 2.11.0 + pg-pool: 3.11.0(pg@8.18.0) pg-protocol: 1.11.0 pg-types: 2.2.0 pgpass: 1.0.5 @@ -5474,12 +4740,6 @@ snapshots: picocolors@1.1.1: {} - picomatch@2.3.1: {} - - please-upgrade-node@3.2.0: - dependencies: - semver-compare: 1.0.0 - postcss@8.4.31: dependencies: nanoid: 3.3.11 @@ -5561,10 +4821,6 @@ snapshots: react@19.2.4: {} - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - recharts@3.7.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react-is@16.13.1)(react@19.2.4)(redux@5.0.1): dependencies: '@reduxjs/toolkit': 2.11.2(react-redux@9.2.0(@types/react@19.2.10)(react@19.2.4)(redux@5.0.1))(react@19.2.4) @@ -5594,10 +4850,6 @@ snapshots: regenerator-runtime@0.13.11: optional: true - require-directory@2.1.1: {} - - require-package-name@2.0.1: {} - reselect@5.1.1: {} resend@6.9.1: @@ -5605,23 +4857,8 @@ snapshots: mailparser: 3.9.1 svix: 1.84.1 - resolve-dir@1.0.1: - dependencies: - expand-tilde: 2.0.2 - global-modules: 1.0.0 - - resolve-from@4.0.0: {} - - resolve-from@5.0.0: {} - resolve-pkg-maps@1.0.0: {} - resolve@1.22.11: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - rgbcolor@1.0.1: optional: true @@ -5635,9 +4872,8 @@ snapshots: dependencies: parseley: 0.12.1 - semver-compare@1.0.0: {} - - semver@7.7.3: {} + semver@7.7.3: + optional: true set-cookie-parser@2.7.2: {} @@ -5689,8 +4925,6 @@ snapshots: split2@4.2.0: {} - sprintf-js@1.0.3: {} - ssf@0.11.2: dependencies: frac: 1.1.2 @@ -5703,23 +4937,11 @@ snapshots: '@stablelib/base64': 1.0.1 fast-sha256: 1.3.0 - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - styled-jsx@5.1.6(react@19.2.4): dependencies: client-only: 0.0.1 react: 19.2.4 - supports-preserve-symlinks-flag@1.0.0: {} - svg-pathdata@6.0.3: optional: true @@ -5743,16 +4965,12 @@ snapshots: tlds@1.261.0: {} - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - tslib@2.8.1: {} tsx@4.21.0: dependencies: esbuild: 0.27.2 - get-tsconfig: 4.13.0 + get-tsconfig: 4.13.1 optionalDependencies: fsevents: 2.3.3 @@ -5814,20 +5032,10 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - which@1.3.1: - dependencies: - isexe: 2.0.0 - wmf@1.0.2: {} word@0.3.0: {} - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - xlsx@0.18.5: dependencies: adler-32: 1.3.1 @@ -5840,20 +5048,4 @@ snapshots: xtend@4.0.2: {} - y18n@5.0.8: {} - - yaml@1.10.2: {} - - yargs-parser@20.2.9: {} - - yargs@16.2.0: - dependencies: - cliui: 7.0.4 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.9 - zod@4.3.6: {} diff --git a/public/fonts/LaranjinhaDisplayPro_Bd.woff2 b/public/fonts/LaranjinhaDisplayPro_Bd.woff2 deleted file mode 100644 index d36e2e4..0000000 Binary files a/public/fonts/LaranjinhaDisplayPro_Bd.woff2 and /dev/null differ diff --git a/public/fonts/LaranjinhaTextPro_Rg.woff2 b/public/fonts/LaranjinhaTextPro_Rg.woff2 deleted file mode 100644 index 35149a9..0000000 Binary files a/public/fonts/LaranjinhaTextPro_Rg.woff2 and /dev/null differ diff --git a/public/logo_text.png b/public/logo_text.png index e1cd3a2..25792b6 100644 Binary files a/public/logo_text.png and b/public/logo_text.png differ diff --git a/public/logos/creditas.png b/public/logos/creditas.png new file mode 100644 index 0000000..1a1db83 Binary files /dev/null and b/public/logos/creditas.png differ