diff --git a/agents.md b/agents.md index 162fb24..5bed7d3 100644 --- a/agents.md +++ b/agents.md @@ -5,6 +5,21 @@ Construir o nucleo de tickets compartilhado entre web e desktop (Tauri), garanti ### Contato principal - **Esdras Renan** — monkeyesdras@gmail.com + +### Credenciais seed (ambiente local) +- Administrador padrão: `admin@sistema.dev` / `admin123` +- Agentes carregados via seed (senha inicial `agent123`, altere após o primeiro acesso): + - Gabriel Oliveira — gabriel.oliveira@rever.com.br + - George Araujo — george.araujo@rever.com.br + - Hugo Soares — hugo.soares@rever.com.br + - Julio Cesar — julio@rever.com.br + - Lorena Magalhães — lorena@rever.com.br + - Rever — renan.pac@paulicon.com.br + - Telão — suporte@rever.com.br + - Thiago Medeiros — thiago.medeiros@rever.com.br + - Weslei Magalhães — weslei@rever.com.br + +> Observação: todos os usuários acima foram sincronizados com o Convex. Atualize as senhas imediatamente após o primeiro login. ## Fase A - Fundamentos da plataforma 1. **Scaffold e DX** diff --git a/web/convex/queues.ts b/web/convex/queues.ts index 21f8ef8..9500dd2 100644 --- a/web/convex/queues.ts +++ b/web/convex/queues.ts @@ -8,8 +8,11 @@ import { requireAdmin, requireStaff } from "./rbac"; const QUEUE_RENAME_LOOKUP: Record = { "Suporte N1": "Chamados", "suporte-n1": "Chamados", + chamados: "Chamados", "Suporte N2": "Laboratório", "suporte-n2": "Laboratório", + laboratorio: "Laboratório", + Laboratorio: "Laboratório", }; function renameQueueString(value: string) { diff --git a/web/convex/tickets.ts b/web/convex/tickets.ts index e74b48b..6d9da05 100644 --- a/web/convex/tickets.ts +++ b/web/convex/tickets.ts @@ -8,8 +8,11 @@ import { requireCustomer, requireStaff, requireUser } from "./rbac"; const QUEUE_RENAME_LOOKUP: Record = { "Suporte N1": "Chamados", "suporte-n1": "Chamados", + chamados: "Chamados", "Suporte N2": "Laboratório", "suporte-n2": "Laboratório", + laboratorio: "Laboratório", + Laboratorio: "Laboratório", }; function renameQueueString(value?: string | null): string | null { @@ -770,8 +773,8 @@ export const changeQueue = mutation({ export const updateCategories = mutation({ args: { ticketId: v.id("tickets"), - categoryId: v.id("ticketCategories"), - subcategoryId: v.id("ticketSubcategories"), + categoryId: v.union(v.id("ticketCategories"), v.null()), + subcategoryId: v.union(v.id("ticketSubcategories"), v.null()), actorId: v.id("users"), }, handler: async (ctx, { ticketId, categoryId, subcategoryId, actorId }) => { @@ -780,23 +783,60 @@ export const updateCategories = mutation({ throw new ConvexError("Ticket não encontrado") } await requireStaff(ctx, actorId, ticket.tenantId) + + if (categoryId === null) { + if (subcategoryId !== null) { + throw new ConvexError("Subcategoria inválida") + } + if (!ticket.categoryId && !ticket.subcategoryId) { + return { status: "unchanged" } + } + const now = Date.now() + await ctx.db.patch(ticketId, { + categoryId: undefined, + subcategoryId: undefined, + updatedAt: now, + }) + const actor = (await ctx.db.get(actorId)) as Doc<"users"> | null + await ctx.db.insert("ticketEvents", { + ticketId, + type: "CATEGORY_CHANGED", + payload: { + categoryId: null, + categoryName: null, + subcategoryId: null, + subcategoryName: null, + actorId, + actorName: actor?.name, + actorAvatar: actor?.avatarUrl, + }, + createdAt: now, + }) + return { status: "cleared" } + } + const category = await ctx.db.get(categoryId) if (!category || category.tenantId !== ticket.tenantId) { throw new ConvexError("Categoria inválida") } - const subcategory = await ctx.db.get(subcategoryId) - if (!subcategory || subcategory.categoryId !== categoryId || subcategory.tenantId !== ticket.tenantId) { - throw new ConvexError("Subcategoria inválida") + + let subcategoryName: string | null = null + if (subcategoryId !== null) { + const subcategory = await ctx.db.get(subcategoryId) + if (!subcategory || subcategory.categoryId !== categoryId || subcategory.tenantId !== ticket.tenantId) { + throw new ConvexError("Subcategoria inválida") + } + subcategoryName = subcategory.name } - if (ticket.categoryId === categoryId && ticket.subcategoryId === subcategoryId) { + if (ticket.categoryId === categoryId && (ticket.subcategoryId ?? null) === subcategoryId) { return { status: "unchanged" } } const now = Date.now() await ctx.db.patch(ticketId, { categoryId, - subcategoryId, + subcategoryId: subcategoryId ?? undefined, updatedAt: now, }) @@ -808,7 +848,7 @@ export const updateCategories = mutation({ categoryId, categoryName: category.name, subcategoryId, - subcategoryName: subcategory.name, + subcategoryName, actorId, actorName: actor?.name, actorAvatar: actor?.avatarUrl, diff --git a/web/package.json b/web/package.json index 7b9b8a2..40ba937 100644 --- a/web/package.json +++ b/web/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev", + "dev": "next dev --turbopack", "build": "next build", "start": "next start", "lint": "eslint", @@ -46,10 +46,10 @@ "convex": "^1.27.3", "date-fns": "^4.1.0", "lucide-react": "^0.544.0", - "next": "15.5.3", + "next": "15.5.4", "next-themes": "^0.4.6", - "react": "19.1.0", - "react-dom": "19.1.0", + "react": "19.2.0", + "react-dom": "19.2.0", "react-hook-form": "^7.64.0", "recharts": "^2.15.4", "sanitize-html": "^2.17.0", @@ -68,7 +68,7 @@ "@types/react-dom": "^19", "@types/sanitize-html": "^2.16.0", "eslint": "^9", - "eslint-config-next": "15.5.3", + "eslint-config-next": "15.5.4", "prisma": "^6.16.2", "tailwindcss": "^4", "tw-animate-css": "^1.3.8", diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index 46f2c62..40dc837 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -10,73 +10,73 @@ importers: dependencies: '@dnd-kit/core': specifier: ^6.3.1 - version: 6.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 6.3.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@dnd-kit/modifiers': specifier: ^9.0.0 - version: 9.0.0(@dnd-kit/core@6.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0) + version: 9.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0) '@dnd-kit/sortable': specifier: ^10.0.0 - version: 10.0.0(@dnd-kit/core@6.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0) + version: 10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0) '@dnd-kit/utilities': specifier: ^3.2.2 - version: 3.2.2(react@19.1.0) + version: 3.2.2(react@19.2.0) '@hookform/resolvers': specifier: ^3.10.0 - version: 3.10.0(react-hook-form@7.64.0(react@19.1.0)) + version: 3.10.0(react-hook-form@7.64.0(react@19.2.0)) '@paper-design/shaders-react': specifier: ^0.0.55 - version: 0.0.55(@types/react@19.2.0)(react@19.1.0) + version: 0.0.55(@types/react@19.2.0)(react@19.2.0) '@prisma/client': specifier: ^6.16.2 version: 6.16.3(prisma@6.16.3(typescript@5.9.3))(typescript@5.9.3) '@radix-ui/react-avatar': specifier: ^1.1.10 - version: 1.1.10(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.10(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-checkbox': specifier: ^1.3.3 - version: 1.3.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.3.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-dialog': specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.15(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-dropdown-menu': specifier: ^2.1.16 - version: 2.1.16(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.1.16(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-label': specifier: ^2.1.7 - version: 2.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-popover': specifier: ^1.1.7 - version: 1.1.15(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.15(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-select': specifier: ^2.2.6 - version: 2.2.6(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.2.6(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-separator': specifier: ^1.1.7 - version: 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-slot': specifier: ^1.2.3 - version: 1.2.3(@types/react@19.2.0)(react@19.1.0) + version: 1.2.3(@types/react@19.2.0)(react@19.2.0) '@radix-ui/react-tabs': specifier: ^1.1.13 - version: 1.1.13(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.13(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-toggle': specifier: ^1.1.10 - version: 1.1.10(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.10(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-toggle-group': specifier: ^1.1.11 - version: 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-tooltip': specifier: ^1.2.8 - version: 1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@react-three/fiber': specifier: ^9.3.0 - version: 9.3.0(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(three@0.180.0) + version: 9.3.0(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(three@0.180.0) '@tabler/icons-react': specifier: ^3.35.0 - version: 3.35.0(react@19.1.0) + version: 3.35.0(react@19.2.0) '@tanstack/react-table': specifier: ^8.21.3 - version: 8.21.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 8.21.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tiptap/extension-link': specifier: ^3.6.5 version: 3.6.5(@tiptap/core@3.6.5(@tiptap/pm@3.6.5))(@tiptap/pm@3.6.5) @@ -85,13 +85,13 @@ importers: version: 3.6.5(@tiptap/extensions@3.6.5(@tiptap/core@3.6.5(@tiptap/pm@3.6.5))(@tiptap/pm@3.6.5)) '@tiptap/react': specifier: ^3.6.5 - version: 3.6.5(@floating-ui/dom@1.7.4)(@tiptap/core@3.6.5(@tiptap/pm@3.6.5))(@tiptap/pm@3.6.5)(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 3.6.5(@floating-ui/dom@1.7.4)(@tiptap/core@3.6.5(@tiptap/pm@3.6.5))(@tiptap/pm@3.6.5)(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tiptap/starter-kit': specifier: ^3.6.5 version: 3.6.5 better-auth: specifier: ^1.3.26 - version: 1.3.26(next@15.5.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.3.26(next@15.5.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -100,37 +100,37 @@ importers: version: 2.1.1 convex: specifier: ^1.27.3 - version: 1.27.3(react@19.1.0) + version: 1.27.3(react@19.2.0) date-fns: specifier: ^4.1.0 version: 4.1.0 lucide-react: specifier: ^0.544.0 - version: 0.544.0(react@19.1.0) + version: 0.544.0(react@19.2.0) next: - specifier: 15.5.3 - version: 15.5.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: 15.5.4 + version: 15.5.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) next-themes: specifier: ^0.4.6 - version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 0.4.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react: - specifier: 19.1.0 - version: 19.1.0 + specifier: 19.2.0 + version: 19.2.0 react-dom: - specifier: 19.1.0 - version: 19.1.0(react@19.1.0) + specifier: 19.2.0 + version: 19.2.0(react@19.2.0) react-hook-form: specifier: ^7.64.0 - version: 7.64.0(react@19.1.0) + version: 7.64.0(react@19.2.0) recharts: specifier: ^2.15.4 - version: 2.15.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.15.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) sanitize-html: specifier: ^2.17.0 version: 2.17.0 sonner: specifier: ^2.0.7 - version: 2.0.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.0.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0) tailwind-merge: specifier: ^3.3.1 version: 3.3.1 @@ -139,10 +139,10 @@ importers: version: 0.180.0 unicornstudio-react: specifier: ^1.4.31 - version: 1.4.31(next@15.5.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.4.31(next@15.5.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) vaul: specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.1.2(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) zod: specifier: ^4.1.9 version: 4.1.11 @@ -169,8 +169,8 @@ importers: specifier: ^9 version: 9.37.0(jiti@2.6.1) eslint-config-next: - specifier: 15.5.3 - version: 15.5.3(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + specifier: 15.5.4 + version: 15.5.4(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) prisma: specifier: ^6.16.2 version: 6.16.3(typescript@5.9.3) @@ -760,56 +760,56 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@next/env@15.5.3': - resolution: {integrity: sha512-RSEDTRqyihYXygx/OJXwvVupfr9m04+0vH8vyy0HfZ7keRto6VX9BbEk0J2PUk0VGy6YhklJUSrgForov5F9pw==} + '@next/env@15.5.4': + resolution: {integrity: sha512-27SQhYp5QryzIT5uO8hq99C69eLQ7qkzkDPsk3N+GuS2XgOgoYEeOav7Pf8Tn4drECOVDsDg8oj+/DVy8qQL2A==} - '@next/eslint-plugin-next@15.5.3': - resolution: {integrity: sha512-SdhaKdko6dpsSr0DldkESItVrnPYB1NS2NpShCSX5lc7SSQmLZt5Mug6t2xbiuVWEVDLZSuIAoQyYVBYp0dR5g==} + '@next/eslint-plugin-next@15.5.4': + resolution: {integrity: sha512-SR1vhXNNg16T4zffhJ4TS7Xn7eq4NfKfcOsRwea7RIAHrjRpI9ALYbamqIJqkAhowLlERffiwk0FMvTLNdnVtw==} - '@next/swc-darwin-arm64@15.5.3': - resolution: {integrity: sha512-nzbHQo69+au9wJkGKTU9lP7PXv0d1J5ljFpvb+LnEomLtSbJkbZyEs6sbF3plQmiOB2l9OBtN2tNSvCH1nQ9Jg==} + '@next/swc-darwin-arm64@15.5.4': + resolution: {integrity: sha512-nopqz+Ov6uvorej8ndRX6HlxCYWCO3AHLfKK2TYvxoSB2scETOcfm/HSS3piPqc3A+MUgyHoqE6je4wnkjfrOA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.5.3': - resolution: {integrity: sha512-w83w4SkOOhekJOcA5HBvHyGzgV1W/XvOfpkrxIse4uPWhYTTRwtGEM4v/jiXwNSJvfRvah0H8/uTLBKRXlef8g==} + '@next/swc-darwin-x64@15.5.4': + resolution: {integrity: sha512-QOTCFq8b09ghfjRJKfb68kU9k2K+2wsC4A67psOiMn849K9ZXgCSRQr0oVHfmKnoqCbEmQWG1f2h1T2vtJJ9mA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.5.3': - resolution: {integrity: sha512-+m7pfIs0/yvgVu26ieaKrifV8C8yiLe7jVp9SpcIzg7XmyyNE7toC1fy5IOQozmr6kWl/JONC51osih2RyoXRw==} + '@next/swc-linux-arm64-gnu@15.5.4': + resolution: {integrity: sha512-eRD5zkts6jS3VfE/J0Kt1VxdFqTnMc3QgO5lFE5GKN3KDI/uUpSyK3CjQHmfEkYR4wCOl0R0XrsjpxfWEA++XA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.5.3': - resolution: {integrity: sha512-u3PEIzuguSenoZviZJahNLgCexGFhso5mxWCrrIMdvpZn6lkME5vc/ADZG8UUk5K1uWRy4hqSFECrON6UKQBbQ==} + '@next/swc-linux-arm64-musl@15.5.4': + resolution: {integrity: sha512-TOK7iTxmXFc45UrtKqWdZ1shfxuL4tnVAOuuJK4S88rX3oyVV4ZkLjtMT85wQkfBrOOvU55aLty+MV8xmcJR8A==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.5.3': - resolution: {integrity: sha512-lDtOOScYDZxI2BENN9m0pfVPJDSuUkAD1YXSvlJF0DKwZt0WlA7T7o3wrcEr4Q+iHYGzEaVuZcsIbCps4K27sA==} + '@next/swc-linux-x64-gnu@15.5.4': + resolution: {integrity: sha512-7HKolaj+481FSW/5lL0BcTkA4Ueam9SPYWyN/ib/WGAFZf0DGAN8frNpNZYFHtM4ZstrHZS3LY3vrwlIQfsiMA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.5.3': - resolution: {integrity: sha512-9vWVUnsx9PrY2NwdVRJ4dUURAQ8Su0sLRPqcCCxtX5zIQUBES12eRVHq6b70bbfaVaxIDGJN2afHui0eDm+cLg==} + '@next/swc-linux-x64-musl@15.5.4': + resolution: {integrity: sha512-nlQQ6nfgN0nCO/KuyEUwwOdwQIGjOs4WNMjEUtpIQJPR2NUfmGpW2wkJln1d4nJ7oUzd1g4GivH5GoEPBgfsdw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.5.3': - resolution: {integrity: sha512-1CU20FZzY9LFQigRi6jM45oJMU3KziA5/sSG+dXeVaTm661snQP6xu3ykGxxwU5sLG3sh14teO/IOEPVsQMRfA==} + '@next/swc-win32-arm64-msvc@15.5.4': + resolution: {integrity: sha512-PcR2bN7FlM32XM6eumklmyWLLbu2vs+D7nJX8OAIoWy69Kef8mfiN4e8TUv2KohprwifdpFKPzIP1njuCjD0YA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.5.3': - resolution: {integrity: sha512-JMoLAq3n3y5tKXPQwCK5c+6tmwkuFDa2XAxz8Wm4+IVthdBZdZGh+lmiLUHg9f9IDwIQpUjp+ysd6OkYTyZRZw==} + '@next/swc-win32-x64-msvc@15.5.4': + resolution: {integrity: sha512-1ur2tSHZj8Px/KMAthmuI9FMp/YFusMMGoRNJaRZMOlSkgvLjzosSdQI0cJAKogdHl3qXUQKL9MGaYvKwA7DXg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -2496,8 +2496,8 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-next@15.5.3: - resolution: {integrity: sha512-e6j+QhQFOr5pfsc8VJbuTD9xTXJaRvMHYjEeLPA2pFkheNlgPLCkxdvhxhfuM4KGcqSZj2qEnpHisdTVs3BxuQ==} + eslint-config-next@15.5.4: + resolution: {integrity: sha512-BzgVVuT3kfJes8i2GHenC1SRJ+W3BTML11lAOYFOOPzrk2xp66jBOAGEFRw+3LkYCln5UzvFsLhojrshb5Zfaw==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 typescript: '>=3.3.1' @@ -3143,8 +3143,8 @@ packages: react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - next@15.5.3: - resolution: {integrity: sha512-r/liNAx16SQj4D+XH/oI1dlpv9tdKJ6cONYPwwcCC46f2NjpaRWY+EKCzULfgQYV6YKXjHBchff2IZBSlZmJNw==} + next@15.5.4: + resolution: {integrity: sha512-xH4Yjhb82sFYQfY3vbkJfgSDgXvBB6a8xPs9i35k6oZJRoQRihZH+4s9Yo2qsWpzBmZ3lPXaJ2KPXLfkvW4LnA==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -3387,10 +3387,10 @@ packages: rc9@2.1.2: resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} - react-dom@19.1.0: - resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} + react-dom@19.2.0: + resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==} peerDependencies: - react: ^19.1.0 + react: ^19.2.0 react-hook-form@7.64.0: resolution: {integrity: sha512-fnN+vvTiMLnRqKNTVhDysdrUay0kUUAymQnFIznmgDvapjveUWOOPqMNzPg+A+0yf9DuE2h6xzBjN1s+Qx8wcg==} @@ -3461,8 +3461,8 @@ packages: react-dom: optional: true - react@19.1.0: - resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + react@19.2.0: + resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} engines: {node: '>=0.10.0'} readdirp@4.1.2: @@ -3542,8 +3542,8 @@ packages: scheduler@0.25.0: resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} - scheduler@0.26.0: - resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} @@ -3978,36 +3978,36 @@ snapshots: '@better-fetch/fetch@1.1.18': {} - '@dnd-kit/accessibility@3.1.1(react@19.1.0)': + '@dnd-kit/accessibility@3.1.1(react@19.2.0)': dependencies: - react: 19.1.0 + react: 19.2.0 tslib: 2.8.1 - '@dnd-kit/core@6.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@dnd-kit/core@6.3.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@dnd-kit/accessibility': 3.1.1(react@19.1.0) - '@dnd-kit/utilities': 3.2.2(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@dnd-kit/accessibility': 3.1.1(react@19.2.0) + '@dnd-kit/utilities': 3.2.2(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) tslib: 2.8.1 - '@dnd-kit/modifiers@9.0.0(@dnd-kit/core@6.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)': + '@dnd-kit/modifiers@9.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)': dependencies: - '@dnd-kit/core': 6.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@dnd-kit/utilities': 3.2.2(react@19.1.0) - react: 19.1.0 + '@dnd-kit/core': 6.3.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@dnd-kit/utilities': 3.2.2(react@19.2.0) + react: 19.2.0 tslib: 2.8.1 - '@dnd-kit/sortable@10.0.0(@dnd-kit/core@6.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)': + '@dnd-kit/sortable@10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)': dependencies: - '@dnd-kit/core': 6.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@dnd-kit/utilities': 3.2.2(react@19.1.0) - react: 19.1.0 + '@dnd-kit/core': 6.3.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@dnd-kit/utilities': 3.2.2(react@19.2.0) + react: 19.2.0 tslib: 2.8.1 - '@dnd-kit/utilities@3.2.2(react@19.1.0)': + '@dnd-kit/utilities@3.2.2(react@19.2.0)': dependencies: - react: 19.1.0 + react: 19.2.0 tslib: 2.8.1 '@emnapi/core@1.5.0': @@ -4225,19 +4225,19 @@ snapshots: '@floating-ui/core': 1.7.3 '@floating-ui/utils': 0.2.10 - '@floating-ui/react-dom@2.1.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@floating-ui/react-dom@2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@floating-ui/dom': 1.7.4 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) '@floating-ui/utils@0.2.10': {} '@hexagon/base64@1.1.28': {} - '@hookform/resolvers@3.10.0(react-hook-form@7.64.0(react@19.1.0))': + '@hookform/resolvers@3.10.0(react-hook-form@7.64.0(react@19.2.0))': dependencies: - react-hook-form: 7.64.0(react@19.1.0) + react-hook-form: 7.64.0(react@19.2.0) '@humanfs/core@0.19.1': {} @@ -4371,34 +4371,34 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@next/env@15.5.3': {} + '@next/env@15.5.4': {} - '@next/eslint-plugin-next@15.5.3': + '@next/eslint-plugin-next@15.5.4': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.5.3': + '@next/swc-darwin-arm64@15.5.4': optional: true - '@next/swc-darwin-x64@15.5.3': + '@next/swc-darwin-x64@15.5.4': optional: true - '@next/swc-linux-arm64-gnu@15.5.3': + '@next/swc-linux-arm64-gnu@15.5.4': optional: true - '@next/swc-linux-arm64-musl@15.5.3': + '@next/swc-linux-arm64-musl@15.5.4': optional: true - '@next/swc-linux-x64-gnu@15.5.3': + '@next/swc-linux-x64-gnu@15.5.4': optional: true - '@next/swc-linux-x64-musl@15.5.3': + '@next/swc-linux-x64-musl@15.5.4': optional: true - '@next/swc-win32-arm64-msvc@15.5.3': + '@next/swc-win32-arm64-msvc@15.5.4': optional: true - '@next/swc-win32-x64-msvc@15.5.3': + '@next/swc-win32-x64-msvc@15.5.4': optional: true '@noble/ciphers@2.0.1': {} @@ -4419,10 +4419,10 @@ snapshots: '@nolyfill/is-core-module@1.0.39': {} - '@paper-design/shaders-react@0.0.55(@types/react@19.2.0)(react@19.1.0)': + '@paper-design/shaders-react@0.0.55(@types/react@19.2.0)(react@19.2.0)': dependencies: '@paper-design/shaders': 0.0.55 - react: 19.1.0 + react: 19.2.0 optionalDependencies: '@types/react': 19.2.0 @@ -4563,467 +4563,467 @@ snapshots: '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) - '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) - '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.0)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.0)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.0)(react@19.1.0)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.0)(react@19.2.0)': dependencies: - react: 19.1.0 + react: 19.2.0 optionalDependencies: '@types/react': 19.2.0 - '@radix-ui/react-context@1.1.2(@types/react@19.2.0)(react@19.1.0)': + '@radix-ui/react-context@1.1.2(@types/react@19.2.0)(react@19.2.0)': dependencies: - react: 19.1.0 + react: 19.2.0 optionalDependencies: '@types/react': 19.2.0 - '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) aria-hidden: 1.2.6 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.7.1(@types/react@19.2.0)(react@19.1.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + react-remove-scroll: 2.7.1(@types/react@19.2.0)(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) - '@radix-ui/react-direction@1.1.1(@types/react@19.2.0)(react@19.1.0)': + '@radix-ui/react-direction@1.1.1(@types/react@19.2.0)(react@19.2.0)': dependencies: - react: 19.1.0 + react: 19.2.0 optionalDependencies: '@types/react': 19.2.0 - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.0)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.0)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) - '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.0)(react@19.1.0)': + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.0)(react@19.2.0)': dependencies: - react: 19.1.0 + react: 19.2.0 optionalDependencies: '@types/react': 19.2.0 - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) - '@radix-ui/react-id@1.1.1(@types/react@19.2.0)(react@19.1.0)': + '@radix-ui/react-id@1.1.1(@types/react@19.2.0)(react@19.2.0)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) + react: 19.2.0 optionalDependencies: '@types/react': 19.2.0 - '@radix-ui/react-label@2.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-label@2.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) - '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.2.0) aria-hidden: 1.2.6 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.7.1(@types/react@19.2.0)(react@19.1.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + react-remove-scroll: 2.7.1(@types/react@19.2.0)(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) - '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) aria-hidden: 1.2.6 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.7.1(@types/react@19.2.0)(react@19.1.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + react-remove-scroll: 2.7.1(@types/react@19.2.0)(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) - '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@floating-ui/react-dom': 2.1.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.0)(react@19.1.0) + '@floating-ui/react-dom': 2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.0)(react@19.2.0) '@radix-ui/rect': 1.1.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) - '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) aria-hidden: 1.2.6 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.7.1(@types/react@19.2.0)(react@19.1.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + react-remove-scroll: 2.7.1(@types/react@19.2.0)(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) - '@radix-ui/react-separator@1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-separator@1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) - '@radix-ui/react-slot@1.2.3(@types/react@19.2.0)(react@19.1.0)': + '@radix-ui/react-slot@1.2.3(@types/react@19.2.0)(react@19.2.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) + react: 19.2.0 optionalDependencies: '@types/react': 19.2.0 - '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) - '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) - '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) - '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.0)(react@19.1.0)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.0)(react@19.2.0)': dependencies: - react: 19.1.0 + react: 19.2.0 optionalDependencies: '@types/react': 19.2.0 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.0)(react@19.1.0)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.0)(react@19.2.0)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.0)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.0)(react@19.2.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) + react: 19.2.0 optionalDependencies: '@types/react': 19.2.0 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.0)(react@19.1.0)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.0)(react@19.2.0)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) + react: 19.2.0 optionalDependencies: '@types/react': 19.2.0 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.0)(react@19.1.0)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.0)(react@19.2.0)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.2.0) + react: 19.2.0 optionalDependencies: '@types/react': 19.2.0 - '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.2.0)(react@19.1.0)': + '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.2.0)(react@19.2.0)': dependencies: - react: 19.1.0 - use-sync-external-store: 1.6.0(react@19.1.0) + react: 19.2.0 + use-sync-external-store: 1.6.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.0)(react@19.1.0)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.0)(react@19.2.0)': dependencies: - react: 19.1.0 + react: 19.2.0 optionalDependencies: '@types/react': 19.2.0 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.0)(react@19.1.0)': + '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.0)(react@19.2.0)': dependencies: - react: 19.1.0 + react: 19.2.0 optionalDependencies: '@types/react': 19.2.0 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.0)(react@19.1.0)': + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.0)(react@19.2.0)': dependencies: '@radix-ui/rect': 1.1.1 - react: 19.1.0 + react: 19.2.0 optionalDependencies: '@types/react': 19.2.0 - '@radix-ui/react-use-size@1.1.1(@types/react@19.2.0)(react@19.1.0)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.0)(react@19.2.0)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) + react: 19.2.0 optionalDependencies: '@types/react': 19.2.0 - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 '@types/react-dom': 19.2.0(@types/react@19.2.0) '@radix-ui/rect@1.1.1': {} - '@react-three/fiber@9.3.0(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(three@0.180.0)': + '@react-three/fiber@9.3.0(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(three@0.180.0)': dependencies: '@babel/runtime': 7.28.4 '@types/react-reconciler': 0.32.1(@types/react@19.2.0) '@types/webxr': 0.5.24 base64-js: 1.5.1 buffer: 6.0.3 - its-fine: 2.0.0(@types/react@19.2.0)(react@19.1.0) - react: 19.1.0 - react-reconciler: 0.31.0(react@19.1.0) - react-use-measure: 2.1.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + its-fine: 2.0.0(@types/react@19.2.0)(react@19.2.0) + react: 19.2.0 + react-reconciler: 0.31.0(react@19.2.0) + react-use-measure: 2.1.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0) scheduler: 0.25.0 - suspend-react: 0.1.3(react@19.1.0) + suspend-react: 0.1.3(react@19.2.0) three: 0.180.0 - use-sync-external-store: 1.6.0(react@19.1.0) - zustand: 5.0.8(@types/react@19.2.0)(react@19.1.0)(use-sync-external-store@1.6.0(react@19.1.0)) + use-sync-external-store: 1.6.0(react@19.2.0) + zustand: 5.0.8(@types/react@19.2.0)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)) optionalDependencies: - react-dom: 19.1.0(react@19.1.0) + react-dom: 19.2.0(react@19.2.0) transitivePeerDependencies: - '@types/react' - immer @@ -5119,10 +5119,10 @@ snapshots: dependencies: tslib: 2.8.1 - '@tabler/icons-react@3.35.0(react@19.1.0)': + '@tabler/icons-react@3.35.0(react@19.2.0)': dependencies: '@tabler/icons': 3.35.0 - react: 19.1.0 + react: 19.2.0 '@tabler/icons@3.35.0': {} @@ -5198,11 +5198,11 @@ snapshots: postcss: 8.5.6 tailwindcss: 4.1.14 - '@tanstack/react-table@8.21.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@tanstack/react-table@8.21.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@tanstack/table-core': 8.21.3 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) '@tanstack/table-core@8.21.3': {} @@ -5343,7 +5343,7 @@ snapshots: prosemirror-transform: 1.10.4 prosemirror-view: 1.41.2 - '@tiptap/react@3.6.5(@floating-ui/dom@1.7.4)(@tiptap/core@3.6.5(@tiptap/pm@3.6.5))(@tiptap/pm@3.6.5)(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@tiptap/react@3.6.5(@floating-ui/dom@1.7.4)(@tiptap/core@3.6.5(@tiptap/pm@3.6.5))(@tiptap/pm@3.6.5)(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@tiptap/core': 3.6.5(@tiptap/pm@3.6.5) '@tiptap/pm': 3.6.5 @@ -5351,9 +5351,9 @@ snapshots: '@types/react-dom': 19.2.0(@types/react@19.2.0) '@types/use-sync-external-store': 0.0.6 fast-deep-equal: 3.1.3 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - use-sync-external-store: 1.6.0(react@19.1.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + use-sync-external-store: 1.6.0(react@19.2.0) optionalDependencies: '@tiptap/extension-bubble-menu': 3.6.5(@tiptap/core@3.6.5(@tiptap/pm@3.6.5))(@tiptap/pm@3.6.5) '@tiptap/extension-floating-menu': 3.6.5(@floating-ui/dom@1.7.4)(@tiptap/core@3.6.5(@tiptap/pm@3.6.5))(@tiptap/pm@3.6.5) @@ -5767,7 +5767,7 @@ snapshots: base64-js@1.5.1: {} - better-auth@1.3.26(next@15.5.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + better-auth@1.3.26(next@15.5.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: '@better-auth/core': 1.3.26 '@better-auth/utils': 0.3.0 @@ -5783,9 +5783,9 @@ snapshots: nanostores: 1.0.1 zod: 4.1.11 optionalDependencies: - next: 15.5.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + next: 15.5.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) better-call@1.0.19: dependencies: @@ -5896,13 +5896,13 @@ snapshots: consola@3.4.2: {} - convex@1.27.3(react@19.1.0): + convex@1.27.3(react@19.2.0): dependencies: esbuild: 0.25.4 jwt-decode: 4.0.0 prettier: 3.6.2 optionalDependencies: - react: 19.1.0 + react: 19.2.0 crelt@1.0.6: {} @@ -6222,9 +6222,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@15.5.3(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): + eslint-config-next@15.5.4(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@next/eslint-plugin-next': 15.5.3 + '@next/eslint-plugin-next': 15.5.4 '@rushstack/eslint-patch': 1.13.0 '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) @@ -6744,10 +6744,10 @@ snapshots: has-symbols: 1.1.0 set-function-name: 2.0.2 - its-fine@2.0.0(@types/react@19.2.0)(react@19.1.0): + its-fine@2.0.0(@types/react@19.2.0)(react@19.2.0): dependencies: '@types/react-reconciler': 0.28.9(@types/react@19.2.0) - react: 19.1.0 + react: 19.2.0 transitivePeerDependencies: - '@types/react' @@ -6862,9 +6862,9 @@ snapshots: loupe@3.2.1: {} - lucide-react@0.544.0(react@19.1.0): + lucide-react@0.544.0(react@19.2.0): dependencies: - react: 19.1.0 + react: 19.2.0 magic-string@0.30.19: dependencies: @@ -6916,29 +6916,29 @@ snapshots: natural-compare@1.4.0: {} - next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + next-themes@0.4.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) - next@15.5.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + next@15.5.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: - '@next/env': 15.5.3 + '@next/env': 15.5.4 '@swc/helpers': 0.5.15 caniuse-lite: 1.0.30001747 postcss: 8.4.31 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - styled-jsx: 5.1.6(react@19.1.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + styled-jsx: 5.1.6(react@19.2.0) optionalDependencies: - '@next/swc-darwin-arm64': 15.5.3 - '@next/swc-darwin-x64': 15.5.3 - '@next/swc-linux-arm64-gnu': 15.5.3 - '@next/swc-linux-arm64-musl': 15.5.3 - '@next/swc-linux-x64-gnu': 15.5.3 - '@next/swc-linux-x64-musl': 15.5.3 - '@next/swc-win32-arm64-msvc': 15.5.3 - '@next/swc-win32-x64-msvc': 15.5.3 + '@next/swc-darwin-arm64': 15.5.4 + '@next/swc-darwin-x64': 15.5.4 + '@next/swc-linux-arm64-gnu': 15.5.4 + '@next/swc-linux-arm64-musl': 15.5.4 + '@next/swc-linux-x64-gnu': 15.5.4 + '@next/swc-linux-x64-musl': 15.5.4 + '@next/swc-win32-arm64-msvc': 15.5.4 + '@next/swc-win32-x64-msvc': 15.5.4 sharp: 0.34.4 transitivePeerDependencies: - '@babel/core' @@ -7210,75 +7210,75 @@ snapshots: defu: 6.1.4 destr: 2.0.5 - react-dom@19.1.0(react@19.1.0): + react-dom@19.2.0(react@19.2.0): dependencies: - react: 19.1.0 - scheduler: 0.26.0 + react: 19.2.0 + scheduler: 0.27.0 - react-hook-form@7.64.0(react@19.1.0): + react-hook-form@7.64.0(react@19.2.0): dependencies: - react: 19.1.0 + react: 19.2.0 react-is@16.13.1: {} react-is@18.3.1: {} - react-reconciler@0.31.0(react@19.1.0): + react-reconciler@0.31.0(react@19.2.0): dependencies: - react: 19.1.0 + react: 19.2.0 scheduler: 0.25.0 - react-remove-scroll-bar@2.3.8(@types/react@19.2.0)(react@19.1.0): + react-remove-scroll-bar@2.3.8(@types/react@19.2.0)(react@19.2.0): dependencies: - react: 19.1.0 - react-style-singleton: 2.2.3(@types/react@19.2.0)(react@19.1.0) + react: 19.2.0 + react-style-singleton: 2.2.3(@types/react@19.2.0)(react@19.2.0) tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.0 - react-remove-scroll@2.7.1(@types/react@19.2.0)(react@19.1.0): + react-remove-scroll@2.7.1(@types/react@19.2.0)(react@19.2.0): dependencies: - react: 19.1.0 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.0)(react@19.1.0) - react-style-singleton: 2.2.3(@types/react@19.2.0)(react@19.1.0) + react: 19.2.0 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.0)(react@19.2.0) + react-style-singleton: 2.2.3(@types/react@19.2.0)(react@19.2.0) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.0)(react@19.1.0) - use-sidecar: 1.1.3(@types/react@19.2.0)(react@19.1.0) + use-callback-ref: 1.3.3(@types/react@19.2.0)(react@19.2.0) + use-sidecar: 1.1.3(@types/react@19.2.0)(react@19.2.0) optionalDependencies: '@types/react': 19.2.0 - react-smooth@4.0.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-smooth@4.0.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: fast-equals: 5.3.2 prop-types: 15.8.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-transition-group: 4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + react-transition-group: 4.4.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react-style-singleton@2.2.3(@types/react@19.2.0)(react@19.1.0): + react-style-singleton@2.2.3(@types/react@19.2.0)(react@19.2.0): dependencies: get-nonce: 1.0.1 - react: 19.1.0 + react: 19.2.0 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.0 - react-transition-group@4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-transition-group@4.4.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: '@babel/runtime': 7.28.4 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) - react-use-measure@2.1.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-use-measure@2.1.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: - react: 19.1.0 + react: 19.2.0 optionalDependencies: - react-dom: 19.1.0(react@19.1.0) + react-dom: 19.2.0(react@19.2.0) - react@19.1.0: {} + react@19.2.0: {} readdirp@4.1.2: {} @@ -7286,15 +7286,15 @@ snapshots: dependencies: decimal.js-light: 2.5.1 - recharts@2.15.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + recharts@2.15.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: clsx: 2.1.1 eventemitter3: 4.0.7 lodash: 4.17.21 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) react-is: 18.3.1 - react-smooth: 4.0.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react-smooth: 4.0.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) recharts-scale: 0.4.5 tiny-invariant: 1.3.3 victory-vendor: 36.9.2 @@ -7405,7 +7405,7 @@ snapshots: scheduler@0.25.0: {} - scheduler@0.26.0: {} + scheduler@0.27.0: {} semver@6.3.1: {} @@ -7501,10 +7501,10 @@ snapshots: siginfo@2.0.0: {} - sonner@2.0.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + sonner@2.0.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) source-map-js@1.2.1: {} @@ -7573,10 +7573,10 @@ snapshots: strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(react@19.1.0): + styled-jsx@5.1.6(react@19.2.0): dependencies: client-only: 0.0.1 - react: 19.1.0 + react: 19.2.0 supports-color@7.2.0: dependencies: @@ -7584,9 +7584,9 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - suspend-react@0.1.3(react@19.1.0): + suspend-react@0.1.3(react@19.2.0): dependencies: - react: 19.1.0 + react: 19.2.0 tailwind-merge@3.3.1: {} @@ -7700,12 +7700,12 @@ snapshots: undici-types@6.21.0: {} - unicornstudio-react@1.4.31(next@15.5.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + unicornstudio-react@1.4.31(next@15.5.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) optionalDependencies: - next: 15.5.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next: 15.5.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) unrs-resolver@1.11.1: dependencies: @@ -7735,30 +7735,30 @@ snapshots: dependencies: punycode: 2.3.1 - use-callback-ref@1.3.3(@types/react@19.2.0)(react@19.1.0): + use-callback-ref@1.3.3(@types/react@19.2.0)(react@19.2.0): dependencies: - react: 19.1.0 + react: 19.2.0 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.0 - use-sidecar@1.1.3(@types/react@19.2.0)(react@19.1.0): + use-sidecar@1.1.3(@types/react@19.2.0)(react@19.2.0): dependencies: detect-node-es: 1.1.0 - react: 19.1.0 + react: 19.2.0 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.0 - use-sync-external-store@1.6.0(react@19.1.0): + use-sync-external-store@1.6.0(react@19.2.0): dependencies: - react: 19.1.0 + react: 19.2.0 - vaul@1.1.2(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + vaul@1.1.2(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) transitivePeerDependencies: - '@types/react' - '@types/react-dom' @@ -7903,8 +7903,8 @@ snapshots: zod@4.1.11: {} - zustand@5.0.8(@types/react@19.2.0)(react@19.1.0)(use-sync-external-store@1.6.0(react@19.1.0)): + zustand@5.0.8(@types/react@19.2.0)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)): optionalDependencies: '@types/react': 19.2.0 - react: 19.1.0 - use-sync-external-store: 1.6.0(react@19.1.0) + react: 19.2.0 + use-sync-external-store: 1.6.0(react@19.2.0) diff --git a/web/scripts/seed-agents.mjs b/web/scripts/seed-agents.mjs new file mode 100644 index 0000000..5e0732f --- /dev/null +++ b/web/scripts/seed-agents.mjs @@ -0,0 +1,138 @@ +import pkg from "@prisma/client" +import { hashPassword } from "better-auth/crypto" +import { ConvexHttpClient } from "convex/browser" + +const { PrismaClient } = pkg +const prisma = new PrismaClient() + +const USERS = [ + { name: "Administrador", email: "admin@sistema.dev", role: "admin" }, + { name: "Gabriel Oliveira", email: "gabriel.oliveira@rever.com.br", role: "agent" }, + { name: "George Araujo", email: "george.araujo@rever.com.br", role: "agent" }, + { name: "Hugo Soares", email: "hugo.soares@rever.com.br", role: "agent" }, + { name: "Julio Cesar", email: "julio@rever.com.br", role: "agent" }, + { name: "Lorena Magalhães", email: "lorena@rever.com.br", role: "agent" }, + { name: "Rever", email: "renan.pac@paulicon.com.br", role: "agent" }, + { name: "Telão", email: "suporte@rever.com.br", role: "agent" }, + { name: "Thiago Medeiros", email: "thiago.medeiros@rever.com.br", role: "agent" }, + { name: "Weslei Magalhães", email: "weslei@rever.com.br", role: "agent" }, +] + +const TENANT_ID = process.env.SEED_TENANT_ID ?? "tenant-atlas" +const DEFAULT_AGENT_PASSWORD = process.env.SEED_AGENT_PASSWORD ?? "agent123" +const DEFAULT_ADMIN_PASSWORD = process.env.SEED_ADMIN_PASSWORD ?? "admin123" +const CONVEX_URL = process.env.NEXT_PUBLIC_CONVEX_URL + +async function syncConvexUsers(users) { + if (!CONVEX_URL) { + console.warn("NEXT_PUBLIC_CONVEX_URL não definido; sincronização com Convex ignorada.") + return + } + + const client = new ConvexHttpClient(CONVEX_URL) + for (const user of users) { + try { + await client.mutation("users:ensureUser", { + tenantId: TENANT_ID, + email: user.email, + name: user.name, + role: user.role.toUpperCase(), + }) + } catch (error) { + console.error(`Falha ao sincronizar usuário ${user.email} com Convex`, error) + } + } +} + +async function main() { + const emails = USERS.map((user) => user.email.toLowerCase()) + + const existing = await prisma.authUser.findMany({ + where: { + email: { + notIn: emails, + }, + }, + select: { id: true }, + }) + + if (existing.length > 0) { + const ids = existing.map((user) => user.id) + await prisma.authSession.deleteMany({ where: { userId: { in: ids } } }) + await prisma.authAccount.deleteMany({ where: { userId: { in: ids } } }) + await prisma.authUser.deleteMany({ where: { id: { in: ids } } }) + } + + const seededUsers = [] + + for (const definition of USERS) { + const email = definition.email.toLowerCase() + const role = definition.role ?? "agent" + const password = definition.password ?? (role === "admin" ? DEFAULT_ADMIN_PASSWORD : DEFAULT_AGENT_PASSWORD) + const hashedPassword = await hashPassword(password) + + const user = await prisma.authUser.upsert({ + where: { email }, + update: { + name: definition.name, + role, + tenantId: TENANT_ID, + emailVerified: true, + }, + create: { + email, + name: definition.name, + role, + tenantId: TENANT_ID, + emailVerified: true, + accounts: { + create: { + providerId: "credential", + accountId: email, + password: hashedPassword, + }, + }, + }, + include: { accounts: true }, + }) + + const credentialAccount = user.accounts.find( + (account) => account.providerId === "credential" && account.accountId === email, + ) + + if (credentialAccount) { + await prisma.authAccount.update({ + where: { id: credentialAccount.id }, + data: { password: hashedPassword }, + }) + } else { + await prisma.authAccount.create({ + data: { + userId: user.id, + providerId: "credential", + accountId: email, + password: hashedPassword, + }, + }) + } + + seededUsers.push({ id: user.id, name: definition.name, email, role }) + console.log(`✅ Usuário sincronizado: ${definition.name} <${email}> (${role})`) + } + + await syncConvexUsers(seededUsers) + + console.log("") + console.log(`Senha padrão agentes: ${DEFAULT_AGENT_PASSWORD}`) + console.log(`Senha padrão administrador: ${DEFAULT_ADMIN_PASSWORD}`) + console.log(`Total de usuários ativos: ${seededUsers.length}`) +} + +main() + .catch((error) => { + console.error("Erro ao processar agentes", error) + process.exitCode = 1 + }) + .finally(async () => { + await prisma.$disconnect() + }) diff --git a/web/src/components/admin/queues/queues-manager.tsx b/web/src/components/admin/queues/queues-manager.tsx index de766ac..9b34cbf 100644 --- a/web/src/components/admin/queues/queues-manager.tsx +++ b/web/src/components/admin/queues/queues-manager.tsx @@ -34,6 +34,8 @@ export function QueuesManager() { const { session, convexUserId } = useAuth() const tenantId = session?.user.tenantId ?? DEFAULT_TENANT_ID + const NO_TEAM_VALUE = "__none__" + const queues = useQuery( api.queues.list, convexUserId ? { tenantId, viewerId: convexUserId as Id<"users"> } : "skip" @@ -202,12 +204,15 @@ export function QueuesManager() {
- setTeamId(value === NO_TEAM_VALUE ? undefined : value)} + > - Sem time + Sem time {teams?.map((team) => ( {team.name} @@ -292,12 +297,15 @@ export function QueuesManager() {
- setTeamId(value === NO_TEAM_VALUE ? undefined : value)} + > - Sem time + Sem time {teams?.map((team) => ( {team.name} diff --git a/web/src/components/app-sidebar.tsx b/web/src/components/app-sidebar.tsx index 01f2ec5..8563f66 100644 --- a/web/src/components/app-sidebar.tsx +++ b/web/src/components/app-sidebar.tsx @@ -13,7 +13,6 @@ import { Users, Waypoints, Timer, - Plug, Layers3, UserPlus, Settings, @@ -34,6 +33,7 @@ import { SidebarMenuItem, SidebarRail, } from "@/components/ui/sidebar" +import { Skeleton } from "@/components/ui/skeleton" import { useAuth } from "@/lib/auth-client" import type { LucideIcon } from "lucide-react" @@ -45,6 +45,7 @@ type NavigationItem = { url: string icon: LucideIcon requiredRole?: NavRoleRequirement + exact?: boolean } type NavigationGroup = { @@ -54,7 +55,7 @@ type NavigationGroup = { } const navigation: { versions: string[]; navMain: NavigationGroup[] } = { - versions: ["0.0.1"], + versions: ["Rever Tecnologia"], navMain: [ { title: "Operação", @@ -79,12 +80,17 @@ const navigation: { versions: string[]; navMain: NavigationGroup[] } = { title: "Administração", requiredRole: "admin", items: [ - { title: "Convites e acessos", url: "/admin", icon: UserPlus, requiredRole: "admin" }, + { + title: "Convites e acessos", + url: "/admin", + icon: UserPlus, + requiredRole: "admin", + exact: true, + }, { title: "Canais & roteamento", url: "/admin/channels", icon: Waypoints, requiredRole: "admin" }, { title: "Times & papéis", url: "/admin/teams", icon: Users, requiredRole: "admin" }, { title: "Campos personalizados", url: "/admin/fields", icon: Layers3, requiredRole: "admin" }, { title: "SLAs", url: "/admin/slas", icon: Timer, requiredRole: "admin" }, - { title: "Integrações", url: "/admin/integrations", icon: Plug, requiredRole: "admin" }, ], }, { @@ -95,16 +101,25 @@ const navigation: { versions: string[]; navMain: NavigationGroup[] } = { ], } -export function AppSidebar({ ...props }: React.ComponentProps) { +export function AppSidebar({ ...props }: React.ComponentProps) { const pathname = usePathname() const { isAdmin, isStaff, isCustomer } = useAuth() + const [isHydrated, setIsHydrated] = React.useState(false) + + React.useEffect(() => { + setIsHydrated(true) + }, []) - function isActive(url: string) { + function isActive(item: NavigationItem) { + const { url, exact } = item if (!pathname) return false - if (url === "/dashboard" && pathname === "/") { + if (url === "/dashboard" && pathname === "/") { return true } - return pathname === url || pathname.startsWith(`${url}/`) + if (exact) { + return pathname === url + } + return pathname === url || pathname.startsWith(`${url}/`) } function canAccess(requiredRole?: NavRoleRequirement) { @@ -115,7 +130,35 @@ export function AppSidebar({ ...props }: React.ComponentProps) { return false } - return ( + if (!isHydrated) { + return ( + + + + + + + {[0, 1, 2].map((group) => ( + + + + + +
+ {[0, 1, 2].map((item) => ( + + ))} +
+
+
+ ))} +
+ +
+ ) + } + + return ( ) { versions={[...navigation.versions]} defaultVersion={navigation.versions[0]} /> - + {navigation.navMain.map((group) => { @@ -137,7 +180,7 @@ export function AppSidebar({ ...props }: React.ComponentProps) { {visibleItems.map((item) => ( - + {item.title} diff --git a/web/src/components/tickets/ticket-summary-header.tsx b/web/src/components/tickets/ticket-summary-header.tsx index bc5ff85..eeb6730 100644 --- a/web/src/components/tickets/ticket-summary-header.tsx +++ b/web/src/components/tickets/ticket-summary-header.tsx @@ -1,6 +1,6 @@ "use client" -import { useEffect, useMemo, useRef, useState } from "react" +import { useEffect, useMemo, useState } from "react" import { format, formatDistanceToNow } from "date-fns" import { ptBR } from "date-fns/locale" import { IconClock, IconPlayerPause, IconPlayerPlay } from "@tabler/icons-react" @@ -41,6 +41,9 @@ const sectionValueClass = "font-medium text-neutral-900" const subtleBadgeClass = "inline-flex items-center rounded-full border border-slate-200 bg-slate-50 px-2.5 py-0.5 text-[11px] font-medium text-neutral-600" +const EMPTY_CATEGORY_VALUE = "__none__" +const EMPTY_SUBCATEGORY_VALUE = "__none__" + function formatDuration(durationMs: number) { if (durationMs <= 0) return "0s" const totalSeconds = Math.floor(durationMs / 1000) @@ -91,21 +94,26 @@ export function TicketSummaryHeader({ ticket }: TicketHeaderProps) { const [editing, setEditing] = useState(false) const [subject, setSubject] = useState(ticket.subject) const [summary, setSummary] = useState(ticket.summary ?? "") - const [categorySelection, setCategorySelection] = useState({ - categoryId: ticket.category?.id ?? "", - subcategoryId: ticket.subcategory?.id ?? "", - }) - const [savingCategory, setSavingCategory] = useState(false) - const lastSubmittedCategoryRef = useRef({ - categoryId: ticket.category?.id ?? "", - subcategoryId: ticket.subcategory?.id ?? "", - }) + const [categorySelection, setCategorySelection] = useState<{ categoryId: string; subcategoryId: string }>( + { + categoryId: ticket.category?.id ?? "", + subcategoryId: ticket.subcategory?.id ?? "", + } + ) + const [saving, setSaving] = useState(false) const selectedCategoryId = categorySelection.categoryId const selectedSubcategoryId = categorySelection.subcategoryId const dirty = useMemo( () => subject !== ticket.subject || (summary ?? "") !== (ticket.summary ?? ""), [subject, summary, ticket.subject, ticket.summary] ) + const currentCategoryId = ticket.category?.id ?? "" + const currentSubcategoryId = ticket.subcategory?.id ?? "" + const categoryDirty = useMemo(() => { + return selectedCategoryId !== currentCategoryId || selectedSubcategoryId !== currentSubcategoryId + }, [selectedCategoryId, selectedSubcategoryId, currentCategoryId, currentSubcategoryId]) + const formDirty = dirty || categoryDirty + const activeCategory = useMemo( () => categories.find((category) => category.id === selectedCategoryId) ?? null, [categories, selectedCategoryId] @@ -113,56 +121,81 @@ export function TicketSummaryHeader({ ticket }: TicketHeaderProps) { const secondaryOptions = useMemo(() => activeCategory?.secondary ?? [], [activeCategory]) async function handleSave() { - if (!convexUserId) return - toast.loading("Salvando alterações...", { id: "save-header" }) + if (!convexUserId || !formDirty) { + setEditing(false) + return + } + + setSaving(true) + try { - if (subject !== ticket.subject) { - await updateSubject({ ticketId: ticket.id as Id<"tickets">, subject: subject.trim(), actorId: convexUserId as Id<"users"> }) + if (categoryDirty) { + toast.loading("Atualizando categoria...", { id: "ticket-category" }) + try { + await updateCategories({ + ticketId: ticket.id as Id<"tickets">, + categoryId: selectedCategoryId ? (selectedCategoryId as Id<"ticketCategories">) : null, + subcategoryId: selectedSubcategoryId ? (selectedSubcategoryId as Id<"ticketSubcategories">) : null, + actorId: convexUserId as Id<"users">, + }) + toast.success("Categoria atualizada!", { id: "ticket-category" }) + } catch (categoryError) { + toast.error("Não foi possível atualizar a categoria.", { id: "ticket-category" }) + setCategorySelection({ + categoryId: currentCategoryId, + subcategoryId: currentSubcategoryId, + }) + throw categoryError + } } - if ((summary ?? "") !== (ticket.summary ?? "")) { - await updateSummary({ ticketId: ticket.id as Id<"tickets">, summary: (summary ?? "").trim(), actorId: convexUserId as Id<"users"> }) + + if (dirty) { + toast.loading("Salvando alterações...", { id: "save-header" }) + if (subject !== ticket.subject) { + await updateSubject({ + ticketId: ticket.id as Id<"tickets">, + subject: subject.trim(), + actorId: convexUserId as Id<"users">, + }) + } + if ((summary ?? "") !== (ticket.summary ?? "")) { + await updateSummary({ + ticketId: ticket.id as Id<"tickets">, + summary: (summary ?? "").trim(), + actorId: convexUserId as Id<"users">, + }) + } + toast.success("Cabeçalho atualizado!", { id: "save-header" }) } - toast.success("Cabeçalho atualizado!", { id: "save-header" }) setEditing(false) } catch { toast.error("Não foi possível salvar.", { id: "save-header" }) + } finally { + setSaving(false) } } function handleCancel() { setSubject(ticket.subject) setSummary(ticket.summary ?? "") + setCategorySelection({ + categoryId: currentCategoryId, + subcategoryId: currentSubcategoryId, + }) setEditing(false) } useEffect(() => { - const nextSelection = { + if (editing) return + setCategorySelection({ categoryId: ticket.category?.id ?? "", subcategoryId: ticket.subcategory?.id ?? "", - } - setCategorySelection(nextSelection) - lastSubmittedCategoryRef.current = nextSelection - }, [ticket.category?.id, ticket.subcategory?.id]) - - useEffect(() => { - if (!editing) return - if (categoriesLoading) return - if (categories.length === 0) return - if (selectedCategoryId) return - if (ticket.category?.id) return - - const first = categories[0] - const firstSecondary = first.secondary[0] - setCategorySelection({ - categoryId: first.id, - subcategoryId: firstSecondary?.id ?? "", }) - }, [categories, categoriesLoading, editing, selectedCategoryId, ticket.category?.id]) + }, [editing, ticket.category?.id, ticket.subcategory?.id]) useEffect(() => { if (!editing) return - if (!selectedCategoryId) return - if (secondaryOptions.length === 0) { + if (!selectedCategoryId) { if (selectedSubcategoryId) { setCategorySelection((prev) => ({ ...prev, subcategoryId: "" })) } @@ -170,73 +203,11 @@ export function TicketSummaryHeader({ ticket }: TicketHeaderProps) { } const stillValid = secondaryOptions.some((option) => option.id === selectedSubcategoryId) - if (stillValid) return - - const fallback = secondaryOptions[0] - if (fallback) { - setCategorySelection((prev) => ({ ...prev, subcategoryId: fallback.id })) + if (!stillValid && selectedSubcategoryId) { + setCategorySelection((prev) => ({ ...prev, subcategoryId: "" })) } }, [editing, secondaryOptions, selectedCategoryId, selectedSubcategoryId]) - useEffect(() => { - if (!editing) return - if (!convexUserId) return - const categoryId = selectedCategoryId - const subcategoryId = selectedSubcategoryId - if (!categoryId || !subcategoryId) return - - const currentCategory = ticket.category?.id ?? "" - const currentSubcategory = ticket.subcategory?.id ?? "" - - if (categoryId === currentCategory && subcategoryId === currentSubcategory) { - return - } - - if ( - categoryId === lastSubmittedCategoryRef.current.categoryId && - subcategoryId === lastSubmittedCategoryRef.current.subcategoryId - ) { - return - } - - let cancelled = false - lastSubmittedCategoryRef.current = { categoryId, subcategoryId } - setSavingCategory(true) - toast.loading("Atualizando categoria...", { id: "ticket-category" }) - - ;(async () => { - try { - await updateCategories({ - ticketId: ticket.id as Id<"tickets">, - categoryId: categoryId as Id<"ticketCategories">, - subcategoryId: subcategoryId as Id<"ticketSubcategories">, - actorId: convexUserId as Id<"users">, - }) - if (!cancelled) { - toast.success("Categoria atualizada!", { id: "ticket-category" }) - } - } catch { - if (!cancelled) { - toast.error("Não foi possível atualizar a categoria.", { id: "ticket-category" }) - const fallback = { - categoryId: currentCategory, - subcategoryId: currentSubcategory, - } - setCategorySelection(fallback) - lastSubmittedCategoryRef.current = fallback - } - } finally { - if (!cancelled) { - setSavingCategory(false) - } - } - })() - - return () => { - cancelled = true - } - }, [editing, selectedCategoryId, selectedSubcategoryId, ticket.category?.id, ticket.subcategory?.id, ticket.id, updateCategories, convexUserId]) - const workSummary = useMemo(() => { if (workSummaryRemote !== undefined) return workSummaryRemote ?? null if (!ticket.workSummary) return null @@ -362,20 +333,25 @@ export function TicketSummaryHeader({ ticket }: TicketHeaderProps) { Categoria primária {editing ? ( { + if (value === EMPTY_SUBCATEGORY_VALUE) { + setCategorySelection((prev) => ({ ...prev, subcategoryId: "" })) + return + } setCategorySelection((prev) => ({ ...prev, subcategoryId: value })) }} > @@ -405,12 +385,13 @@ export function TicketSummaryHeader({ ticket }: TicketHeaderProps) { !selectedCategoryId ? "Selecione uma primária" : secondaryOptions.length === 0 - ? "Sem secundárias" + ? "Sem subcategoria" : "Selecionar" } /> + Sem subcategoria {secondaryOptions.map((option) => ( {option.name} @@ -518,7 +499,7 @@ export function TicketSummaryHeader({ ticket }: TicketHeaderProps) { -
diff --git a/web/src/components/tickets/ticket-timeline.tsx b/web/src/components/tickets/ticket-timeline.tsx index f59af8a..cde07d4 100644 --- a/web/src/components/tickets/ticket-timeline.tsx +++ b/web/src/components/tickets/ticket-timeline.tsx @@ -156,10 +156,14 @@ export function TicketTimeline({ ticket }: TicketTimelineProps) { if (entry.type === "WORK_PAUSED" && typeof payload.sessionDurationMs === "number") { message = `Tempo registrado: ${formatDuration(payload.sessionDurationMs)}` } - if (entry.type === "CATEGORY_CHANGED" && (payload.categoryName || payload.subcategoryName)) { - message = `Categoria alterada para ${payload.categoryName ?? ""}${ - payload.subcategoryName ? ` • ${payload.subcategoryName}` : "" - }` + if (entry.type === "CATEGORY_CHANGED") { + if (payload.categoryName || payload.subcategoryName) { + message = `Categoria alterada para ${payload.categoryName ?? ""}${ + payload.subcategoryName ? ` • ${payload.subcategoryName}` : "" + }` + } else { + message = "Categoria removida" + } } if (!message) return null diff --git a/web/src/components/ui/dialog.tsx b/web/src/components/ui/dialog.tsx index 1f7d14c..953f594 100644 --- a/web/src/components/ui/dialog.tsx +++ b/web/src/components/ui/dialog.tsx @@ -47,6 +47,13 @@ const DialogHeader = ({ className, ...props }: React.HTMLAttributes ) +const DialogFooter = ({ className, ...props }: React.HTMLAttributes) => ( +
+) + const DialogTitle = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef @@ -64,4 +71,5 @@ const DialogDescription = React.forwardRef< DialogDescription.displayName = DialogPrimitive.Description.displayName export { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription } +export { DialogFooter } diff --git a/web/src/components/ui/sidebar.tsx b/web/src/components/ui/sidebar.tsx index 38ba4ce..40061d6 100644 --- a/web/src/components/ui/sidebar.tsx +++ b/web/src/components/ui/sidebar.tsx @@ -129,7 +129,8 @@ function SidebarProvider({ return ( -
{label} - v{selectedVersion} + {selectedVersion}
@@ -56,7 +56,7 @@ export function VersionSwitcher({ key={version} onSelect={() => setSelectedVersion(version)} > - v{version} {version === selectedVersion && } + {version} {version === selectedVersion && } ))}