From fc886320e33b0a53699dd9e9d5e24ed887af466f Mon Sep 17 00:00:00 2001 From: Vadim Sobinin Date: Mon, 2 Feb 2026 16:14:57 +0300 Subject: [PATCH] first commit --- .env | 0 Dockerfile | 46 + backend/dist/index.d.ts | 3 + backend/dist/index.d.ts.map | 1 + backend/dist/index.js | 58 + backend/dist/routes/auth.d.ts | 3 + backend/dist/routes/auth.d.ts.map | 1 + backend/dist/routes/auth.js | 50 + backend/dist/routes/logs.d.ts | 3 + backend/dist/routes/logs.d.ts.map | 1 + backend/dist/routes/logs.js | 142 ++ backend/dist/routes/reports.d.ts | 3 + backend/dist/routes/reports.d.ts.map | 1 + backend/dist/routes/reports.js | 196 ++ backend/package.json | 30 + backend/prisma/schema.prisma | 29 + backend/src/index.ts | 69 + backend/src/routes/auth.ts | 63 + backend/src/routes/logs.ts | 173 ++ backend/src/routes/reports.ts | 244 +++ backend/tsconfig.json | 19 + backend/yarn.lock | 2179 +++++++++++++++++++++++ compose.yaml | 28 + frontend/dist/assets/index-Dd05-Q9W.css | 1 + frontend/dist/assets/index-Ou6fj0Qi.js | 49 + frontend/dist/index.html | 14 + frontend/dist/vite.svg | 1 + frontend/index.html | 13 + frontend/package.json | 27 + frontend/postcss.config.js | 6 + frontend/public/vite.svg | 1 + frontend/src/App.tsx | 23 + frontend/src/api/client.ts | 69 + frontend/src/components/AddLogModal.tsx | 146 ++ frontend/src/components/Dashboard.tsx | 133 ++ frontend/src/components/LogList.tsx | 93 + frontend/src/components/LoginForm.tsx | 97 + frontend/src/components/ReportModal.tsx | 111 ++ frontend/src/hooks/useAuth.ts | 77 + frontend/src/hooks/useLogs.ts | 82 + frontend/src/index.css | 8 + frontend/src/main.tsx | 15 + frontend/src/vite-env.d.ts | 1 + frontend/tailwind.config.js | 8 + frontend/tsconfig.json | 20 + frontend/tsconfig.tsbuildinfo | 1 + frontend/vite.config.ts | 14 + frontend/yarn.lock | 1217 +++++++++++++ 48 files changed, 5569 insertions(+) create mode 100644 .env create mode 100644 Dockerfile create mode 100644 backend/dist/index.d.ts create mode 100644 backend/dist/index.d.ts.map create mode 100644 backend/dist/index.js create mode 100644 backend/dist/routes/auth.d.ts create mode 100644 backend/dist/routes/auth.d.ts.map create mode 100644 backend/dist/routes/auth.js create mode 100644 backend/dist/routes/logs.d.ts create mode 100644 backend/dist/routes/logs.d.ts.map create mode 100644 backend/dist/routes/logs.js create mode 100644 backend/dist/routes/reports.d.ts create mode 100644 backend/dist/routes/reports.d.ts.map create mode 100644 backend/dist/routes/reports.js create mode 100644 backend/package.json create mode 100644 backend/prisma/schema.prisma create mode 100644 backend/src/index.ts create mode 100644 backend/src/routes/auth.ts create mode 100644 backend/src/routes/logs.ts create mode 100644 backend/src/routes/reports.ts create mode 100644 backend/tsconfig.json create mode 100644 backend/yarn.lock create mode 100644 compose.yaml create mode 100644 frontend/dist/assets/index-Dd05-Q9W.css create mode 100644 frontend/dist/assets/index-Ou6fj0Qi.js create mode 100644 frontend/dist/index.html create mode 100644 frontend/dist/vite.svg create mode 100644 frontend/index.html create mode 100644 frontend/package.json create mode 100644 frontend/postcss.config.js create mode 100644 frontend/public/vite.svg create mode 100644 frontend/src/App.tsx create mode 100644 frontend/src/api/client.ts create mode 100644 frontend/src/components/AddLogModal.tsx create mode 100644 frontend/src/components/Dashboard.tsx create mode 100644 frontend/src/components/LogList.tsx create mode 100644 frontend/src/components/LoginForm.tsx create mode 100644 frontend/src/components/ReportModal.tsx create mode 100644 frontend/src/hooks/useAuth.ts create mode 100644 frontend/src/hooks/useLogs.ts create mode 100644 frontend/src/index.css create mode 100644 frontend/src/main.tsx create mode 100644 frontend/src/vite-env.d.ts create mode 100644 frontend/tailwind.config.js create mode 100644 frontend/tsconfig.json create mode 100644 frontend/tsconfig.tsbuildinfo create mode 100644 frontend/vite.config.ts create mode 100644 frontend/yarn.lock diff --git a/.env b/.env new file mode 100644 index 0000000..e69de29 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..de0bcaa --- /dev/null +++ b/Dockerfile @@ -0,0 +1,46 @@ +# Stage 1: Build frontend +FROM node:22-alpine AS frontend-builder +WORKDIR /app/frontend +COPY frontend/package.json frontend/yarn.lock* ./ +RUN yarn install --frozen-lockfile || yarn install +COPY frontend/ ./ +RUN yarn build + +# Stage 2: Build backend +FROM node:22-alpine AS backend-builder +WORKDIR /app/backend +COPY backend/package.json backend/yarn.lock* ./ +RUN yarn install --frozen-lockfile || yarn install +COPY backend/ ./ +RUN yarn db:generate && yarn build + +# Stage 3: Production +FROM node:22-alpine AS production +WORKDIR /app + +# Install production dependencies only +COPY backend/package.json backend/yarn.lock* ./ +RUN yarn install --production --frozen-lockfile || yarn install --production + +# Copy Prisma schema and generate client +COPY backend/prisma ./prisma +RUN npx prisma generate + +# Copy built backend +COPY --from=backend-builder /app/backend/dist ./dist + +# Copy built frontend +COPY --from=frontend-builder /app/frontend/dist ./frontend/dist + +# Create data directory for SQLite +RUN mkdir -p /app/data + +ENV NODE_ENV=production +ENV DATABASE_URL="file:/app/data/timetracker.db" +ENV STATIC_ROOT="/app/frontend/dist" +ENV PORT=3000 + +EXPOSE 3000 + +# Initialize database and start server +CMD npx prisma db push --skip-generate && node dist/index.js diff --git a/backend/dist/index.d.ts b/backend/dist/index.d.ts new file mode 100644 index 0000000..62cda32 --- /dev/null +++ b/backend/dist/index.d.ts @@ -0,0 +1,3 @@ +import { PrismaClient } from '@prisma/client'; +export declare const prisma: PrismaClient; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/backend/dist/index.d.ts.map b/backend/dist/index.d.ts.map new file mode 100644 index 0000000..7e240ef --- /dev/null +++ b/backend/dist/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAS9C,eAAO,MAAM,MAAM,gIAAqB,CAAC"} \ No newline at end of file diff --git a/backend/dist/index.js b/backend/dist/index.js new file mode 100644 index 0000000..ebd6524 --- /dev/null +++ b/backend/dist/index.js @@ -0,0 +1,58 @@ +import Fastify from 'fastify'; +import cors from '@fastify/cors'; +import jwt from '@fastify/jwt'; +import fastifyStatic from '@fastify/static'; +import { PrismaClient } from '@prisma/client'; +import { authRoutes } from './routes/auth.js'; +import { logsRoutes } from './routes/logs.js'; +import { reportsRoutes } from './routes/reports.js'; +import path from 'path'; +import { fileURLToPath } from 'url'; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +export const prisma = new PrismaClient(); +const fastify = Fastify({ + logger: true, +}); +await fastify.register(cors, { + origin: true, + credentials: true, +}); +await fastify.register(jwt, { + secret: process.env.JWT_SECRET || 'default-secret-change-me', +}); +fastify.decorate('authenticate', async function (request, reply) { + try { + await request.jwtVerify(); + } + catch (err) { + reply.status(401).send({ error: 'Unauthorized' }); + } +}); +await fastify.register(authRoutes, { prefix: '/api/auth' }); +await fastify.register(logsRoutes, { prefix: '/api/logs' }); +await fastify.register(reportsRoutes, { prefix: '/api/reports' }); +// Serve static files in production +if (process.env.NODE_ENV === 'production') { + await fastify.register(fastifyStatic, { + root: path.join(__dirname, '../../frontend/dist'), + prefix: '/', + }); + fastify.setNotFoundHandler((request, reply) => { + if (!request.url.startsWith('/api')) { + return reply.sendFile('index.html'); + } + reply.status(404).send({ error: 'Not Found' }); + }); +} +const start = async () => { + try { + const port = parseInt(process.env.PORT || '3000', 10); + await fastify.listen({ port, host: '0.0.0.0' }); + console.log(`Server running on http://localhost:${port}`); + } + catch (err) { + fastify.log.error(err); + process.exit(1); + } +}; +start(); diff --git a/backend/dist/routes/auth.d.ts b/backend/dist/routes/auth.d.ts new file mode 100644 index 0000000..5a294f2 --- /dev/null +++ b/backend/dist/routes/auth.d.ts @@ -0,0 +1,3 @@ +import { FastifyInstance } from 'fastify'; +export declare function authRoutes(fastify: FastifyInstance): Promise; +//# sourceMappingURL=auth.d.ts.map \ No newline at end of file diff --git a/backend/dist/routes/auth.d.ts.map b/backend/dist/routes/auth.d.ts.map new file mode 100644 index 0000000..b9f0889 --- /dev/null +++ b/backend/dist/routes/auth.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAc1C,wBAAsB,UAAU,CAAC,OAAO,EAAE,eAAe,iBAgDxD"} \ No newline at end of file diff --git a/backend/dist/routes/auth.js b/backend/dist/routes/auth.js new file mode 100644 index 0000000..0a8e833 --- /dev/null +++ b/backend/dist/routes/auth.js @@ -0,0 +1,50 @@ +import { z } from 'zod'; +import { prisma } from '../index.js'; +import crypto from 'crypto'; +const userSchema = z.object({ + username: z.string().min(3).max(50), + password: z.string().min(6).max(100), +}); +function hashPassword(password) { + return crypto.createHash('sha256').update(password).digest('hex'); +} +export async function authRoutes(fastify) { + fastify.post('/register', async (request, reply) => { + const result = userSchema.safeParse(request.body); + if (!result.success) { + return reply.status(400).send({ error: 'Invalid input', details: result.error.errors }); + } + const { username, password } = result.data; + const existing = await prisma.user.findUnique({ where: { username } }); + if (existing) { + return reply.status(409).send({ error: 'Username already exists' }); + } + const user = await prisma.user.create({ + data: { + username, + password: hashPassword(password), + }, + }); + const token = fastify.jwt.sign({ id: user.id, username: user.username }); + return { token, user: { id: user.id, username: user.username } }; + }); + fastify.post('/login', async (request, reply) => { + const result = userSchema.safeParse(request.body); + if (!result.success) { + return reply.status(400).send({ error: 'Invalid input' }); + } + const { username, password } = result.data; + const user = await prisma.user.findUnique({ where: { username } }); + if (!user || user.password !== hashPassword(password)) { + return reply.status(401).send({ error: 'Invalid credentials' }); + } + const token = fastify.jwt.sign({ id: user.id, username: user.username }); + return { token, user: { id: user.id, username: user.username } }; + }); + fastify.get('/me', { + onRequest: [fastify.authenticate], + }, async (request) => { + const user = request.user; + return { id: user.id, username: user.username }; + }); +} diff --git a/backend/dist/routes/logs.d.ts b/backend/dist/routes/logs.d.ts new file mode 100644 index 0000000..a57c17a --- /dev/null +++ b/backend/dist/routes/logs.d.ts @@ -0,0 +1,3 @@ +import { FastifyInstance } from 'fastify'; +export declare function logsRoutes(fastify: FastifyInstance): Promise; +//# sourceMappingURL=logs.d.ts.map \ No newline at end of file diff --git a/backend/dist/routes/logs.d.ts.map b/backend/dist/routes/logs.d.ts.map new file mode 100644 index 0000000..36da3da --- /dev/null +++ b/backend/dist/routes/logs.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/routes/logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AA4C1C,wBAAsB,UAAU,CAAC,OAAO,EAAE,eAAe,iBAgIxD"} \ No newline at end of file diff --git a/backend/dist/routes/logs.js b/backend/dist/routes/logs.js new file mode 100644 index 0000000..0cef64d --- /dev/null +++ b/backend/dist/routes/logs.js @@ -0,0 +1,142 @@ +import { z } from 'zod'; +import { prisma } from '../index.js'; +function parseTimeToMinutes(timeStr) { + const str = timeStr.trim(); + // Format: "8,5" or "8.5" (decimal hours) + if (/^\d+[,\.]\d+$/.test(str)) { + const hours = parseFloat(str.replace(',', '.')); + return Math.round(hours * 60); + } + // Format: "8:30" (hours:minutes) + if (/^\d+:\d{1,2}$/.test(str)) { + const [hours, minutes] = str.split(':').map(Number); + return hours * 60 + minutes; + } + // Format: "8" (just hours) + if (/^\d+$/.test(str)) { + return parseInt(str, 10) * 60; + } + throw new Error('Invalid time format'); +} +const createLogSchema = z.object({ + date: z.string(), + time: z.string(), + description: z.string().min(1).max(1000), +}); +const updateLogSchema = z.object({ + date: z.string().optional(), + time: z.string().optional(), + description: z.string().min(1).max(1000).optional(), +}); +const querySchema = z.object({ + startDate: z.string().optional(), + endDate: z.string().optional(), +}); +export async function logsRoutes(fastify) { + fastify.addHook('onRequest', fastify.authenticate); + // Get logs (default: current month) + fastify.get('/', async (request) => { + const user = request.user; + const query = querySchema.parse(request.query); + const now = new Date(); + const startOfMonth = new Date(now.getFullYear(), now.getMonth(), 1); + const endOfMonth = new Date(now.getFullYear(), now.getMonth() + 1, 0, 23, 59, 59); + const startDate = query.startDate ? new Date(query.startDate) : startOfMonth; + const endDate = query.endDate ? new Date(query.endDate + 'T23:59:59') : endOfMonth; + const logs = await prisma.timeLog.findMany({ + where: { + userId: user.id, + date: { + gte: startDate, + lte: endDate, + }, + }, + orderBy: { date: 'desc' }, + }); + return logs.map(log => ({ + ...log, + hours: Math.floor(log.minutes / 60), + mins: log.minutes % 60, + })); + }); + // Create log + fastify.post('/', async (request, reply) => { + const user = request.user; + const result = createLogSchema.safeParse(request.body); + if (!result.success) { + return reply.status(400).send({ error: 'Invalid input', details: result.error.errors }); + } + const { date, time, description } = result.data; + let minutes; + try { + minutes = parseTimeToMinutes(time); + } + catch { + return reply.status(400).send({ error: 'Invalid time format' }); + } + const log = await prisma.timeLog.create({ + data: { + date: new Date(date), + minutes, + description, + userId: user.id, + }, + }); + return { + ...log, + hours: Math.floor(log.minutes / 60), + mins: log.minutes % 60, + }; + }); + // Update log + fastify.put('/:id', async (request, reply) => { + const user = request.user; + const { id } = request.params; + const result = updateLogSchema.safeParse(request.body); + if (!result.success) { + return reply.status(400).send({ error: 'Invalid input', details: result.error.errors }); + } + const existing = await prisma.timeLog.findFirst({ + where: { id, userId: user.id }, + }); + if (!existing) { + return reply.status(404).send({ error: 'Log not found' }); + } + const { date, time, description } = result.data; + let minutes; + if (time) { + try { + minutes = parseTimeToMinutes(time); + } + catch { + return reply.status(400).send({ error: 'Invalid time format' }); + } + } + const log = await prisma.timeLog.update({ + where: { id }, + data: { + ...(date && { date: new Date(date) }), + ...(minutes !== undefined && { minutes }), + ...(description && { description }), + }, + }); + return { + ...log, + hours: Math.floor(log.minutes / 60), + mins: log.minutes % 60, + }; + }); + // Delete log + fastify.delete('/:id', async (request, reply) => { + const user = request.user; + const { id } = request.params; + const existing = await prisma.timeLog.findFirst({ + where: { id, userId: user.id }, + }); + if (!existing) { + return reply.status(404).send({ error: 'Log not found' }); + } + await prisma.timeLog.delete({ where: { id } }); + return { success: true }; + }); +} diff --git a/backend/dist/routes/reports.d.ts b/backend/dist/routes/reports.d.ts new file mode 100644 index 0000000..6e4bc20 --- /dev/null +++ b/backend/dist/routes/reports.d.ts @@ -0,0 +1,3 @@ +import { FastifyInstance } from 'fastify'; +export declare function reportsRoutes(fastify: FastifyInstance): Promise; +//# sourceMappingURL=reports.d.ts.map \ No newline at end of file diff --git a/backend/dist/routes/reports.d.ts.map b/backend/dist/routes/reports.d.ts.map new file mode 100644 index 0000000..4cfe8a6 --- /dev/null +++ b/backend/dist/routes/reports.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"reports.d.ts","sourceRoot":"","sources":["../../src/routes/reports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AA2B1C,wBAAsB,aAAa,CAAC,OAAO,EAAE,eAAe,iBAuD3D"} \ No newline at end of file diff --git a/backend/dist/routes/reports.js b/backend/dist/routes/reports.js new file mode 100644 index 0000000..cf9ba84 --- /dev/null +++ b/backend/dist/routes/reports.js @@ -0,0 +1,196 @@ +import { z } from 'zod'; +import { prisma } from '../index.js'; +import PdfPrinter from 'pdfmake'; +import ExcelJS from 'exceljs'; +const reportSchema = z.object({ + startDate: z.string(), + endDate: z.string(), + format: z.enum(['pdf', 'excel', 'csv']), +}); +function formatDate(date) { + const d = new Date(date); + const day = String(d.getDate()).padStart(2, '0'); + const month = String(d.getMonth() + 1).padStart(2, '0'); + const year = d.getFullYear(); + return `${day}.${month}.${year}`; +} +function formatTime(minutes) { + const hours = Math.floor(minutes / 60); + const mins = minutes % 60; + return `${hours}:${String(mins).padStart(2, '0')}`; +} +export async function reportsRoutes(fastify) { + fastify.addHook('onRequest', fastify.authenticate); + fastify.post('/generate', async (request, reply) => { + const user = request.user; + const result = reportSchema.safeParse(request.body); + if (!result.success) { + return reply.status(400).send({ error: 'Invalid input', details: result.error.errors }); + } + const { startDate, endDate, format } = result.data; + const logs = await prisma.timeLog.findMany({ + where: { + userId: user.id, + date: { + gte: new Date(startDate), + lte: new Date(endDate + 'T23:59:59'), + }, + }, + orderBy: { date: 'asc' }, + }); + // Calculate totals + const uniqueDates = new Set(logs.map(log => formatDate(log.date))); + const totalMinutes = logs.reduce((sum, log) => sum + log.minutes, 0); + const reportData = logs.map(log => ({ + date: formatDate(log.date), + description: log.description, + time: formatTime(log.minutes), + })); + if (format === 'csv') { + const csvContent = generateCSV(reportData, uniqueDates.size, totalMinutes); + reply.header('Content-Type', 'text/csv; charset=utf-8'); + reply.header('Content-Disposition', `attachment; filename="report_${startDate}_${endDate}.csv"`); + return reply.send(csvContent); + } + if (format === 'excel') { + const buffer = await generateExcel(reportData, uniqueDates.size, totalMinutes); + reply.header('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); + reply.header('Content-Disposition', `attachment; filename="report_${startDate}_${endDate}.xlsx"`); + return reply.send(buffer); + } + if (format === 'pdf') { + const buffer = await generatePDF(reportData, uniqueDates.size, totalMinutes, startDate, endDate); + reply.header('Content-Type', 'application/pdf'); + reply.header('Content-Disposition', `attachment; filename="report_${startDate}_${endDate}.pdf"`); + return reply.send(buffer); + } + }); +} +function generateCSV(data, uniqueDays, totalMinutes) { + const BOM = '\uFEFF'; + const lines = []; + lines.push('Дата,Описание,Часы'); + for (const row of data) { + const escapedDescription = `"${row.description.replace(/"/g, '""')}"`; + lines.push(`${row.date},${escapedDescription},${row.time}`); + } + lines.push(''); + lines.push(`Total,${uniqueDays} дней,${formatTime(totalMinutes)}`); + return BOM + lines.join('\n'); +} +async function generateExcel(data, uniqueDays, totalMinutes) { + const workbook = new ExcelJS.Workbook(); + const sheet = workbook.addWorksheet('Отчёт'); + // Headers + sheet.columns = [ + { header: 'Дата', key: 'date', width: 15 }, + { header: 'Описание', key: 'description', width: 50 }, + { header: 'Часы', key: 'time', width: 10 }, + ]; + // Style headers + sheet.getRow(1).font = { bold: true }; + sheet.getRow(1).fill = { + type: 'pattern', + pattern: 'solid', + fgColor: { argb: 'FFE0E0E0' }, + }; + // Data + for (const row of data) { + sheet.addRow(row); + } + // Empty row + sheet.addRow({}); + // Total row + const totalRow = sheet.addRow({ + date: 'Total', + description: `${uniqueDays} дней`, + time: formatTime(totalMinutes), + }); + // Style total row + totalRow.font = { bold: true }; + totalRow.fill = { + type: 'pattern', + pattern: 'solid', + fgColor: { argb: 'FF90EE90' }, + }; + const arrayBuffer = await workbook.xlsx.writeBuffer(); + return Buffer.from(arrayBuffer); +} +async function generatePDF(data, uniqueDays, totalMinutes, startDate, endDate) { + const fonts = { + Roboto: { + normal: 'node_modules/pdfmake/build/vfs_fonts.js', + bold: 'node_modules/pdfmake/build/vfs_fonts.js', + }, + }; + const printer = new PdfPrinter(fonts); + const tableBody = [ + [ + { text: 'Дата', style: 'tableHeader' }, + { text: 'Описание', style: 'tableHeader' }, + { text: 'Часы', style: 'tableHeader' }, + ], + ]; + for (const row of data) { + tableBody.push([row.date, row.description, row.time]); + } + // Total row + tableBody.push([ + { text: 'Total', style: 'total' }, + { text: `${uniqueDays} дней`, style: 'total' }, + { text: formatTime(totalMinutes), style: 'total' }, + ]); + const docDefinition = { + content: [ + { text: 'Отчёт по времени', style: 'header' }, + { text: `Период: ${startDate} - ${endDate}`, style: 'subheader' }, + { text: ' ' }, + { + table: { + headerRows: 1, + widths: ['auto', '*', 'auto'], + body: tableBody, + }, + layout: { + fillColor: (rowIndex) => { + if (rowIndex === 0) + return '#EEEEEE'; + if (rowIndex === tableBody.length - 1) + return '#90EE90'; + return null; + }, + }, + }, + ], + styles: { + header: { + fontSize: 18, + bold: true, + margin: [0, 0, 0, 10], + }, + subheader: { + fontSize: 12, + margin: [0, 0, 0, 10], + }, + tableHeader: { + bold: true, + fontSize: 11, + }, + total: { + bold: true, + fontSize: 11, + }, + }, + defaultStyle: { + fontSize: 10, + }, + }; + return new Promise((resolve, reject) => { + const pdfDoc = printer.createPdfKitDocument(docDefinition); + const chunks = []; + pdfDoc.on('data', (chunk) => chunks.push(chunk)); + pdfDoc.on('end', () => resolve(Buffer.concat(chunks))); + pdfDoc.on('error', reject); + pdfDoc.end(); + }); +} diff --git a/backend/package.json b/backend/package.json new file mode 100644 index 0000000..c8e592d --- /dev/null +++ b/backend/package.json @@ -0,0 +1,30 @@ +{ + "name": "timetracker-backend", + "version": "1.0.0", + "type": "module", + "scripts": { + "dev": "tsx watch src/index.ts", + "build": "tsc", + "start": "node dist/index.js", + "db:generate": "prisma generate", + "db:push": "prisma db push", + "db:migrate": "prisma migrate deploy" + }, + "dependencies": { + "@fastify/cors": "^10.0.2", + "@fastify/jwt": "^9.0.2", + "@fastify/static": "^8.0.4", + "@prisma/client": "^6.2.1", + "exceljs": "^4.4.0", + "fastify": "^5.2.1", + "pdfmake": "^0.2.15", + "zod": "^3.24.1" + }, + "devDependencies": { + "@types/node": "^22.10.7", + "@types/pdfmake": "^0.2.9", + "prisma": "^6.2.1", + "tsx": "^4.19.2", + "typescript": "^5.7.3" + } +} diff --git a/backend/prisma/schema.prisma b/backend/prisma/schema.prisma new file mode 100644 index 0000000..20affbf --- /dev/null +++ b/backend/prisma/schema.prisma @@ -0,0 +1,29 @@ +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "sqlite" + url = env("DATABASE_URL") +} + +model User { + id String @id @default(cuid()) + username String @unique + password String + createdAt DateTime @default(now()) + logs TimeLog[] +} + +model TimeLog { + id String @id @default(cuid()) + date DateTime + minutes Int + description String + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@index([userId, date]) +} diff --git a/backend/src/index.ts b/backend/src/index.ts new file mode 100644 index 0000000..3427054 --- /dev/null +++ b/backend/src/index.ts @@ -0,0 +1,69 @@ +import Fastify from 'fastify'; +import cors from '@fastify/cors'; +import jwt from '@fastify/jwt'; +import fastifyStatic from '@fastify/static'; +import { PrismaClient } from '@prisma/client'; +import { authRoutes } from './routes/auth.js'; +import { logsRoutes } from './routes/logs.js'; +import { reportsRoutes } from './routes/reports.js'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export const prisma = new PrismaClient(); + +const fastify = Fastify({ + logger: true, +}); + +await fastify.register(cors, { + origin: true, + credentials: true, +}); + +await fastify.register(jwt, { + secret: process.env.JWT_SECRET || 'default-secret-change-me', +}); + +fastify.decorate('authenticate', async function (request: any, reply: any) { + try { + await request.jwtVerify(); + } catch (err) { + reply.status(401).send({ error: 'Unauthorized' }); + } +}); + +await fastify.register(authRoutes, { prefix: '/api/auth' }); +await fastify.register(logsRoutes, { prefix: '/api/logs' }); +await fastify.register(reportsRoutes, { prefix: '/api/reports' }); + +// Serve static files in production +if (process.env.NODE_ENV === 'production') { + const staticRoot = process.env.STATIC_ROOT || path.join(__dirname, '../frontend/dist'); + + await fastify.register(fastifyStatic, { + root: staticRoot, + prefix: '/', + }); + + fastify.setNotFoundHandler((request, reply) => { + if (!request.url.startsWith('/api')) { + return reply.sendFile('index.html'); + } + reply.status(404).send({ error: 'Not Found' }); + }); +} + +const start = async () => { + try { + const port = parseInt(process.env.PORT || '3000', 10); + await fastify.listen({ port, host: '0.0.0.0' }); + console.log(`Server running on http://localhost:${port}`); + } catch (err) { + fastify.log.error(err); + process.exit(1); + } +}; + +start(); diff --git a/backend/src/routes/auth.ts b/backend/src/routes/auth.ts new file mode 100644 index 0000000..78d5700 --- /dev/null +++ b/backend/src/routes/auth.ts @@ -0,0 +1,63 @@ +import { FastifyInstance } from 'fastify'; +import { z } from 'zod'; +import { prisma } from '../index.js'; +import crypto from 'crypto'; + +const userSchema = z.object({ + username: z.string().min(3).max(50), + password: z.string().min(6).max(100), +}); + +function hashPassword(password: string): string { + return crypto.createHash('sha256').update(password).digest('hex'); +} + +export async function authRoutes(fastify: FastifyInstance) { + fastify.post('/register', async (request, reply) => { + const result = userSchema.safeParse(request.body); + if (!result.success) { + return reply.status(400).send({ error: 'Invalid input', details: result.error.errors }); + } + + const { username, password } = result.data; + + const existing = await prisma.user.findUnique({ where: { username } }); + if (existing) { + return reply.status(409).send({ error: 'Username already exists' }); + } + + const user = await prisma.user.create({ + data: { + username, + password: hashPassword(password), + }, + }); + + const token = fastify.jwt.sign({ id: user.id, username: user.username }); + return { token, user: { id: user.id, username: user.username } }; + }); + + fastify.post('/login', async (request, reply) => { + const result = userSchema.safeParse(request.body); + if (!result.success) { + return reply.status(400).send({ error: 'Invalid input' }); + } + + const { username, password } = result.data; + + const user = await prisma.user.findUnique({ where: { username } }); + if (!user || user.password !== hashPassword(password)) { + return reply.status(401).send({ error: 'Invalid credentials' }); + } + + const token = fastify.jwt.sign({ id: user.id, username: user.username }); + return { token, user: { id: user.id, username: user.username } }; + }); + + fastify.get('/me', { + onRequest: [(fastify as any).authenticate], + }, async (request) => { + const user = (request as any).user; + return { id: user.id, username: user.username }; + }); +} diff --git a/backend/src/routes/logs.ts b/backend/src/routes/logs.ts new file mode 100644 index 0000000..b403ec3 --- /dev/null +++ b/backend/src/routes/logs.ts @@ -0,0 +1,173 @@ +import { FastifyInstance } from 'fastify'; +import { z } from 'zod'; +import { prisma } from '../index.js'; + +function parseTimeToMinutes(timeStr: string): number { + const str = timeStr.trim(); + + // Format: "8,5" or "8.5" (decimal hours) + if (/^\d+[,\.]\d+$/.test(str)) { + const hours = parseFloat(str.replace(',', '.')); + return Math.round(hours * 60); + } + + // Format: "8:30" (hours:minutes) + if (/^\d+:\d{1,2}$/.test(str)) { + const [hours, minutes] = str.split(':').map(Number); + return hours * 60 + minutes; + } + + // Format: "8" (just hours) + if (/^\d+$/.test(str)) { + return parseInt(str, 10) * 60; + } + + throw new Error('Invalid time format'); +} + +const createLogSchema = z.object({ + date: z.string(), + time: z.string(), + description: z.string().min(1).max(1000), +}); + +const updateLogSchema = z.object({ + date: z.string().optional(), + time: z.string().optional(), + description: z.string().min(1).max(1000).optional(), +}); + +const querySchema = z.object({ + startDate: z.string().optional(), + endDate: z.string().optional(), +}); + +export async function logsRoutes(fastify: FastifyInstance) { + fastify.addHook('onRequest', (fastify as any).authenticate); + + // Get logs (default: current month) + fastify.get('/', async (request) => { + const user = (request as any).user; + const query = querySchema.parse(request.query); + + const now = new Date(); + const startOfMonth = new Date(now.getFullYear(), now.getMonth(), 1); + const endOfMonth = new Date(now.getFullYear(), now.getMonth() + 1, 0, 23, 59, 59); + + const startDate = query.startDate ? new Date(query.startDate) : startOfMonth; + const endDate = query.endDate ? new Date(query.endDate + 'T23:59:59') : endOfMonth; + + const logs = await prisma.timeLog.findMany({ + where: { + userId: user.id, + date: { + gte: startDate, + lte: endDate, + }, + }, + orderBy: { date: 'desc' }, + }); + + return logs.map(log => ({ + ...log, + hours: Math.floor(log.minutes / 60), + mins: log.minutes % 60, + })); + }); + + // Create log + fastify.post('/', async (request, reply) => { + const user = (request as any).user; + const result = createLogSchema.safeParse(request.body); + + if (!result.success) { + return reply.status(400).send({ error: 'Invalid input', details: result.error.errors }); + } + + const { date, time, description } = result.data; + + let minutes: number; + try { + minutes = parseTimeToMinutes(time); + } catch { + return reply.status(400).send({ error: 'Invalid time format' }); + } + + const log = await prisma.timeLog.create({ + data: { + date: new Date(date), + minutes, + description, + userId: user.id, + }, + }); + + return { + ...log, + hours: Math.floor(log.minutes / 60), + mins: log.minutes % 60, + }; + }); + + // Update log + fastify.put('/:id', async (request, reply) => { + const user = (request as any).user; + const { id } = request.params as { id: string }; + const result = updateLogSchema.safeParse(request.body); + + if (!result.success) { + return reply.status(400).send({ error: 'Invalid input', details: result.error.errors }); + } + + const existing = await prisma.timeLog.findFirst({ + where: { id, userId: user.id }, + }); + + if (!existing) { + return reply.status(404).send({ error: 'Log not found' }); + } + + const { date, time, description } = result.data; + + let minutes: number | undefined; + if (time) { + try { + minutes = parseTimeToMinutes(time); + } catch { + return reply.status(400).send({ error: 'Invalid time format' }); + } + } + + const log = await prisma.timeLog.update({ + where: { id }, + data: { + ...(date && { date: new Date(date) }), + ...(minutes !== undefined && { minutes }), + ...(description && { description }), + }, + }); + + return { + ...log, + hours: Math.floor(log.minutes / 60), + mins: log.minutes % 60, + }; + }); + + // Delete log + fastify.delete('/:id', async (request, reply) => { + const user = (request as any).user; + const { id } = request.params as { id: string }; + + const existing = await prisma.timeLog.findFirst({ + where: { id, userId: user.id }, + }); + + if (!existing) { + return reply.status(404).send({ error: 'Log not found' }); + } + + await prisma.timeLog.delete({ where: { id } }); + return { success: true }; + }); +} diff --git a/backend/src/routes/reports.ts b/backend/src/routes/reports.ts new file mode 100644 index 0000000..b121504 --- /dev/null +++ b/backend/src/routes/reports.ts @@ -0,0 +1,244 @@ +import { FastifyInstance } from 'fastify'; +import { z } from 'zod'; +import { prisma } from '../index.js'; +import PdfPrinter from 'pdfmake'; +import ExcelJS from 'exceljs'; +import type { TDocumentDefinitions, Content } from 'pdfmake/interfaces.js'; + +const reportSchema = z.object({ + startDate: z.string(), + endDate: z.string(), + format: z.enum(['pdf', 'excel', 'csv']), +}); + +function formatDate(date: Date): string { + const d = new Date(date); + const day = String(d.getDate()).padStart(2, '0'); + const month = String(d.getMonth() + 1).padStart(2, '0'); + const year = d.getFullYear(); + return `${day}.${month}.${year}`; +} + +function formatTime(minutes: number): string { + const hours = Math.floor(minutes / 60); + const mins = minutes % 60; + return `${hours}:${String(mins).padStart(2, '0')}`; +} + +export async function reportsRoutes(fastify: FastifyInstance) { + fastify.addHook('onRequest', (fastify as any).authenticate); + + fastify.post('/generate', async (request, reply) => { + const user = (request as any).user; + const result = reportSchema.safeParse(request.body); + + if (!result.success) { + return reply.status(400).send({ error: 'Invalid input', details: result.error.errors }); + } + + const { startDate, endDate, format } = result.data; + + const logs = await prisma.timeLog.findMany({ + where: { + userId: user.id, + date: { + gte: new Date(startDate), + lte: new Date(endDate + 'T23:59:59'), + }, + }, + orderBy: { date: 'asc' }, + }); + + // Calculate totals + const uniqueDates = new Set(logs.map(log => formatDate(log.date))); + const totalMinutes = logs.reduce((sum, log) => sum + log.minutes, 0); + + const reportData = logs.map(log => ({ + date: formatDate(log.date), + description: log.description, + time: formatTime(log.minutes), + })); + + if (format === 'csv') { + const csvContent = generateCSV(reportData, uniqueDates.size, totalMinutes); + reply.header('Content-Type', 'text/csv; charset=utf-8'); + reply.header('Content-Disposition', `attachment; filename="report_${startDate}_${endDate}.csv"`); + return reply.send(csvContent); + } + + if (format === 'excel') { + const buffer = await generateExcel(reportData, uniqueDates.size, totalMinutes); + reply.header('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); + reply.header('Content-Disposition', `attachment; filename="report_${startDate}_${endDate}.xlsx"`); + return reply.send(buffer); + } + + if (format === 'pdf') { + const buffer = await generatePDF(reportData, uniqueDates.size, totalMinutes, startDate, endDate); + reply.header('Content-Type', 'application/pdf'); + reply.header('Content-Disposition', `attachment; filename="report_${startDate}_${endDate}.pdf"`); + return reply.send(buffer); + } + }); +} + +function generateCSV( + data: { date: string; description: string; time: string }[], + uniqueDays: number, + totalMinutes: number +): string { + const BOM = '\uFEFF'; + const lines: string[] = []; + + lines.push('Дата,Описание,Часы'); + + for (const row of data) { + const escapedDescription = `"${row.description.replace(/"/g, '""')}"`; + lines.push(`${row.date},${escapedDescription},${row.time}`); + } + + lines.push(''); + lines.push(`Total,${uniqueDays} дней,${formatTime(totalMinutes)}`); + + return BOM + lines.join('\n'); +} + +async function generateExcel( + data: { date: string; description: string; time: string }[], + uniqueDays: number, + totalMinutes: number +): Promise { + const workbook = new ExcelJS.Workbook(); + const sheet = workbook.addWorksheet('Отчёт'); + + // Headers + sheet.columns = [ + { header: 'Дата', key: 'date', width: 15 }, + { header: 'Описание', key: 'description', width: 50 }, + { header: 'Часы', key: 'time', width: 10 }, + ]; + + // Style headers + sheet.getRow(1).font = { bold: true }; + sheet.getRow(1).fill = { + type: 'pattern', + pattern: 'solid', + fgColor: { argb: 'FFE0E0E0' }, + }; + + // Data + for (const row of data) { + sheet.addRow(row); + } + + // Empty row + sheet.addRow({}); + + // Total row + const totalRow = sheet.addRow({ + date: 'Total', + description: `${uniqueDays} дней`, + time: formatTime(totalMinutes), + }); + + // Style total row + totalRow.font = { bold: true }; + totalRow.fill = { + type: 'pattern', + pattern: 'solid', + fgColor: { argb: 'FF90EE90' }, + }; + + const arrayBuffer = await workbook.xlsx.writeBuffer(); + return Buffer.from(arrayBuffer); +} + +async function generatePDF( + data: { date: string; description: string; time: string }[], + uniqueDays: number, + totalMinutes: number, + startDate: string, + endDate: string +): Promise { + const fonts = { + Roboto: { + normal: 'node_modules/pdfmake/build/vfs_fonts.js', + bold: 'node_modules/pdfmake/build/vfs_fonts.js', + }, + }; + + const printer = new PdfPrinter(fonts); + + const tableBody: Content[][] = [ + [ + { text: 'Дата', style: 'tableHeader' }, + { text: 'Описание', style: 'tableHeader' }, + { text: 'Часы', style: 'tableHeader' }, + ], + ]; + + for (const row of data) { + tableBody.push([row.date, row.description, row.time]); + } + + // Total row + tableBody.push([ + { text: 'Total', style: 'total' }, + { text: `${uniqueDays} дней`, style: 'total' }, + { text: formatTime(totalMinutes), style: 'total' }, + ]); + + const docDefinition: TDocumentDefinitions = { + content: [ + { text: 'Отчёт по времени', style: 'header' }, + { text: `Период: ${startDate} - ${endDate}`, style: 'subheader' }, + { text: ' ' }, + { + table: { + headerRows: 1, + widths: ['auto', '*', 'auto'], + body: tableBody, + }, + layout: { + fillColor: (rowIndex: number) => { + if (rowIndex === 0) return '#EEEEEE'; + if (rowIndex === tableBody.length - 1) return '#90EE90'; + return null; + }, + }, + }, + ], + styles: { + header: { + fontSize: 18, + bold: true, + margin: [0, 0, 0, 10], + }, + subheader: { + fontSize: 12, + margin: [0, 0, 0, 10], + }, + tableHeader: { + bold: true, + fontSize: 11, + }, + total: { + bold: true, + fontSize: 11, + }, + }, + defaultStyle: { + fontSize: 10, + }, + }; + + return new Promise((resolve, reject) => { + const pdfDoc = printer.createPdfKitDocument(docDefinition); + const chunks: Buffer[] = []; + + pdfDoc.on('data', (chunk: Buffer) => chunks.push(chunk)); + pdfDoc.on('end', () => resolve(Buffer.concat(chunks))); + pdfDoc.on('error', reject); + pdfDoc.end(); + }); +} diff --git a/backend/tsconfig.json b/backend/tsconfig.json new file mode 100644 index 0000000..d8570a3 --- /dev/null +++ b/backend/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "moduleResolution": "bundler", + "lib": ["ES2022"], + "outDir": "./dist", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "declaration": true, + "declarationMap": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/backend/yarn.lock b/backend/yarn.lock new file mode 100644 index 0000000..1a5c195 --- /dev/null +++ b/backend/yarn.lock @@ -0,0 +1,2179 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@esbuild/aix-ppc64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz#521cbd968dcf362094034947f76fa1b18d2d403c" + integrity sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw== + +"@esbuild/android-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz#61ea550962d8aa12a9b33194394e007657a6df57" + integrity sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA== + +"@esbuild/android-arm@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.27.2.tgz#554887821e009dd6d853f972fde6c5143f1de142" + integrity sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA== + +"@esbuild/android-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.27.2.tgz#a7ce9d0721825fc578f9292a76d9e53334480ba2" + integrity sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A== + +"@esbuild/darwin-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz#2cb7659bd5d109803c593cfc414450d5430c8256" + integrity sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg== + +"@esbuild/darwin-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz#e741fa6b1abb0cd0364126ba34ca17fd5e7bf509" + integrity sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA== + +"@esbuild/freebsd-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz#2b64e7116865ca172d4ce034114c21f3c93e397c" + integrity sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g== + +"@esbuild/freebsd-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz#e5252551e66f499e4934efb611812f3820e990bb" + integrity sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA== + +"@esbuild/linux-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz#dc4acf235531cd6984f5d6c3b13dbfb7ddb303cb" + integrity sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw== + +"@esbuild/linux-arm@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz#56a900e39240d7d5d1d273bc053daa295c92e322" + integrity sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw== + +"@esbuild/linux-ia32@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz#d4a36d473360f6870efcd19d52bbfff59a2ed1cc" + integrity sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w== + +"@esbuild/linux-loong64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz#fcf0ab8c3eaaf45891d0195d4961cb18b579716a" + integrity sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg== + +"@esbuild/linux-mips64el@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz#598b67d34048bb7ee1901cb12e2a0a434c381c10" + integrity sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw== + +"@esbuild/linux-ppc64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz#3846c5df6b2016dab9bc95dde26c40f11e43b4c0" + integrity sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ== + +"@esbuild/linux-riscv64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz#173d4475b37c8d2c3e1707e068c174bb3f53d07d" + integrity sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA== + +"@esbuild/linux-s390x@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz#f7a4790105edcab8a5a31df26fbfac1aa3dacfab" + integrity sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w== + +"@esbuild/linux-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz#2ecc1284b1904aeb41e54c9ddc7fcd349b18f650" + integrity sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA== + +"@esbuild/netbsd-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz#e2863c2cd1501845995cb11adf26f7fe4be527b0" + integrity sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw== + +"@esbuild/netbsd-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz#93f7609e2885d1c0b5a1417885fba8d1fcc41272" + integrity sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA== + +"@esbuild/openbsd-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz#a1985604a203cdc325fd47542e106fafd698f02e" + integrity sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA== + +"@esbuild/openbsd-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz#8209e46c42f1ffbe6e4ef77a32e1f47d404ad42a" + integrity sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg== + +"@esbuild/openharmony-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz#8fade4441893d9cc44cbd7dcf3776f508ab6fb2f" + integrity sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag== + +"@esbuild/sunos-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz#980d4b9703a16f0f07016632424fc6d9a789dfc2" + integrity sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg== + +"@esbuild/win32-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz#1c09a3633c949ead3d808ba37276883e71f6111a" + integrity sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg== + +"@esbuild/win32-ia32@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz#1b1e3a63ad4bef82200fef4e369e0fff7009eee5" + integrity sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ== + +"@esbuild/win32-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz#9e585ab6086bef994c6e8a5b3a0481219ada862b" + integrity sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ== + +"@fast-csv/format@4.3.5": + version "4.3.5" + resolved "https://registry.yarnpkg.com/@fast-csv/format/-/format-4.3.5.tgz#90d83d1b47b6aaf67be70d6118f84f3e12ee1ff3" + integrity sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A== + dependencies: + "@types/node" "^14.0.1" + lodash.escaperegexp "^4.1.2" + lodash.isboolean "^3.0.3" + lodash.isequal "^4.5.0" + lodash.isfunction "^3.0.9" + lodash.isnil "^4.0.0" + +"@fast-csv/parse@4.3.6": + version "4.3.6" + resolved "https://registry.yarnpkg.com/@fast-csv/parse/-/parse-4.3.6.tgz#ee47d0640ca0291034c7aa94039a744cfb019264" + integrity sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA== + dependencies: + "@types/node" "^14.0.1" + lodash.escaperegexp "^4.1.2" + lodash.groupby "^4.6.0" + lodash.isfunction "^3.0.9" + lodash.isnil "^4.0.0" + lodash.isundefined "^3.0.1" + lodash.uniq "^4.5.0" + +"@fastify/accept-negotiator@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@fastify/accept-negotiator/-/accept-negotiator-2.0.1.tgz#77afd6254ba77f6c22c6f35c4fb0c1b6d005199b" + integrity sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ== + +"@fastify/ajv-compiler@^4.0.5": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@fastify/ajv-compiler/-/ajv-compiler-4.0.5.tgz#fdb0887a7af51abaae8c1829e8099d34f8ddd302" + integrity sha512-KoWKW+MhvfTRWL4qrhUwAAZoaChluo0m0vbiJlGMt2GXvL4LVPQEjt8kSpHI3IBq5Rez8fg+XeH3cneztq+C7A== + dependencies: + ajv "^8.12.0" + ajv-formats "^3.0.1" + fast-uri "^3.0.0" + +"@fastify/cors@^10.0.2": + version "10.1.0" + resolved "https://registry.yarnpkg.com/@fastify/cors/-/cors-10.1.0.tgz#66170ea9698dd4ad7602b9a5382ad2dced878a26" + integrity sha512-MZyBCBJtII60CU9Xme/iE4aEy8G7QpzGR8zkdXZkDFt7ElEMachbE61tfhAG/bvSaULlqlf0huMT12T7iqEmdQ== + dependencies: + fastify-plugin "^5.0.0" + mnemonist "0.40.0" + +"@fastify/error@^4.0.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@fastify/error/-/error-4.2.0.tgz#d40f46ba75f541fdcc4dc276b7308bbc8e8e6d7a" + integrity sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ== + +"@fastify/fast-json-stringify-compiler@^5.0.0": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-5.0.3.tgz#fae495bf30dbbd029139839ec5c2ea111bde7d3f" + integrity sha512-uik7yYHkLr6fxd8hJSZ8c+xF4WafPK+XzneQDPU+D10r5X19GW8lJcom2YijX2+qtFF1ENJlHXKFM9ouXNJYgQ== + dependencies: + fast-json-stringify "^6.0.0" + +"@fastify/forwarded@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@fastify/forwarded/-/forwarded-3.0.1.tgz#9662b7bd4a59f6d123cc3487494f75f635c32d23" + integrity sha512-JqDochHFqXs3C3Ml3gOY58zM7OqO9ENqPo0UqAjAjH8L01fRZqwX9iLeX34//kiJubF7r2ZQHtBRU36vONbLlw== + +"@fastify/jwt@^9.0.2": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@fastify/jwt/-/jwt-9.1.0.tgz#9a765586ffdc4581f7071d00a94736a178d788c9" + integrity sha512-CiGHCnS5cPMdb004c70sUWhQTfzrJHAeTywt7nVw6dAiI0z1o4WRvU94xfijhkaId4bIxTCOjFgn4sU+Gvk43w== + dependencies: + "@fastify/error" "^4.0.0" + "@lukeed/ms" "^2.0.2" + fast-jwt "^5.0.0" + fastify-plugin "^5.0.0" + steed "^1.1.3" + +"@fastify/merge-json-schemas@^0.2.0": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@fastify/merge-json-schemas/-/merge-json-schemas-0.2.1.tgz#3aa30d2f0c81a8ac5995b6d94ed4eaa2c3055824" + integrity sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A== + dependencies: + dequal "^2.0.3" + +"@fastify/proxy-addr@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@fastify/proxy-addr/-/proxy-addr-5.1.0.tgz#f5360b5dd83c7de3d41b415be4aab84ae44aa106" + integrity sha512-INS+6gh91cLUjB+PVHfu1UqcB76Sqtpyp7bnL+FYojhjygvOPA9ctiD/JDKsyD9Xgu4hUhCSJBPig/w7duNajw== + dependencies: + "@fastify/forwarded" "^3.0.0" + ipaddr.js "^2.1.0" + +"@fastify/send@^4.0.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@fastify/send/-/send-4.1.0.tgz#d9c283b86e12080c0dcc160bbc16106debf1f0d3" + integrity sha512-TMYeQLCBSy2TOFmV95hQWkiTYgC/SEx7vMdV+wnZVX4tt8VBLKzmH8vV9OzJehV0+XBfg+WxPMt5wp+JBUKsVw== + dependencies: + "@lukeed/ms" "^2.0.2" + escape-html "~1.0.3" + fast-decode-uri-component "^1.0.1" + http-errors "^2.0.0" + mime "^3" + +"@fastify/static@^8.0.4": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@fastify/static/-/static-8.3.0.tgz#d0d2bc069015e322b4a372a6481057319de2e5aa" + integrity sha512-yKxviR5PH1OKNnisIzZKmgZSus0r2OZb8qCSbqmw34aolT4g3UlzYfeBRym+HJ1J471CR8e2ldNub4PubD1coA== + dependencies: + "@fastify/accept-negotiator" "^2.0.0" + "@fastify/send" "^4.0.0" + content-disposition "^0.5.4" + fastify-plugin "^5.0.0" + fastq "^1.17.1" + glob "^11.0.0" + +"@foliojs-fork/fontkit@^1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@foliojs-fork/fontkit/-/fontkit-1.9.2.tgz#94241c195bc6204157bc84c33f34bdc967eca9c3" + integrity sha512-IfB5EiIb+GZk+77TRB86AHroVaqfq8JRFlUbz0WEwsInyCG0epX2tCPOy+UfaWPju30DeVoUAXfzWXmhn753KA== + dependencies: + "@foliojs-fork/restructure" "^2.0.2" + brotli "^1.2.0" + clone "^1.0.4" + deep-equal "^1.0.0" + dfa "^1.2.0" + tiny-inflate "^1.0.2" + unicode-properties "^1.2.2" + unicode-trie "^2.0.0" + +"@foliojs-fork/linebreak@^1.1.1", "@foliojs-fork/linebreak@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@foliojs-fork/linebreak/-/linebreak-1.1.2.tgz#32fee03d5431fa73284373439e172e451ae1e2da" + integrity sha512-ZPohpxxbuKNE0l/5iBJnOAfUaMACwvUIKCvqtWGKIMv1lPYoNjYXRfhi9FeeV9McBkBLxsMFWTVVhHJA8cyzvg== + dependencies: + base64-js "1.3.1" + unicode-trie "^2.0.0" + +"@foliojs-fork/pdfkit@^0.15.3": + version "0.15.3" + resolved "https://registry.yarnpkg.com/@foliojs-fork/pdfkit/-/pdfkit-0.15.3.tgz#590b31e770a98e2af62ce44f268a0d06b41ff32f" + integrity sha512-Obc0Wmy3bm7BINFVvPhcl2rnSSK61DQrlHU8aXnAqDk9LCjWdUOPwhgD8Ywz5VtuFjRxmVOM/kQ/XLIBjDvltw== + dependencies: + "@foliojs-fork/fontkit" "^1.9.2" + "@foliojs-fork/linebreak" "^1.1.1" + crypto-js "^4.2.0" + jpeg-exif "^1.1.4" + png-js "^1.0.0" + +"@foliojs-fork/restructure@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@foliojs-fork/restructure/-/restructure-2.0.2.tgz#73759aba2aff1da87b7c4554e6839c70d43c92b4" + integrity sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA== + +"@isaacs/balanced-match@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz#3081dadbc3460661b751e7591d7faea5df39dd29" + integrity sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ== + +"@isaacs/brace-expansion@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz#4b3dabab7d8e75a429414a96bd67bf4c1d13e0f3" + integrity sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA== + dependencies: + "@isaacs/balanced-match" "^4.0.1" + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@lukeed/ms@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@lukeed/ms/-/ms-2.0.2.tgz#07f09e59a74c52f4d88c6db5c1054e819538e2a8" + integrity sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA== + +"@pinojs/redact@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@pinojs/redact/-/redact-0.4.0.tgz#c3de060dd12640dcc838516aa2a6803cc7b2e9d6" + integrity sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg== + +"@prisma/client@^6.2.1": + version "6.19.2" + resolved "https://registry.yarnpkg.com/@prisma/client/-/client-6.19.2.tgz#96cde2f9340a5d9a91a80b2e0733ede158aede5d" + integrity sha512-gR2EMvfK/aTxsuooaDA32D8v+us/8AAet+C3J1cc04SW35FPdZYgLF+iN4NDLUgAaUGTKdAB0CYenu1TAgGdMg== + +"@prisma/config@6.19.2": + version "6.19.2" + resolved "https://registry.yarnpkg.com/@prisma/config/-/config-6.19.2.tgz#1043f640d39854676d216618d28a873b81a0dbf1" + integrity sha512-kadBGDl+aUswv/zZMk9Mx0C8UZs1kjao8H9/JpI4Wh4SHZaM7zkTwiKn/iFLfRg+XtOAo/Z/c6pAYhijKl0nzQ== + dependencies: + c12 "3.1.0" + deepmerge-ts "7.1.5" + effect "3.18.4" + empathic "2.0.0" + +"@prisma/debug@6.19.2": + version "6.19.2" + resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-6.19.2.tgz#ef2386c3e7757429cb6d0c8c6e5ad243a53310d8" + integrity sha512-lFnEZsLdFLmEVCVNdskLDCL8Uup41GDfU0LUfquw+ercJC8ODTuL0WNKgOKmYxCJVvFwf0OuZBzW99DuWmoH2A== + +"@prisma/engines-version@7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7": + version "7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7" + resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7.tgz#3a01149550262aedd8afb4a6cd00b19351124148" + integrity sha512-03bgb1VD5gvuumNf+7fVGBzfpJPjmqV423l/WxsWk2cNQ42JD0/SsFBPhN6z8iAvdHs07/7ei77SKu7aZfq8bA== + +"@prisma/engines@6.19.2": + version "6.19.2" + resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-6.19.2.tgz#27f658bfc30cb4850455d7eca7ed3698ab0085f4" + integrity sha512-TTkJ8r+uk/uqczX40wb+ODG0E0icVsMgwCTyTHXehaEfb0uo80M9g1aW1tEJrxmFHeOZFXdI2sTA1j1AgcHi4A== + dependencies: + "@prisma/debug" "6.19.2" + "@prisma/engines-version" "7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7" + "@prisma/fetch-engine" "6.19.2" + "@prisma/get-platform" "6.19.2" + +"@prisma/fetch-engine@6.19.2": + version "6.19.2" + resolved "https://registry.yarnpkg.com/@prisma/fetch-engine/-/fetch-engine-6.19.2.tgz#993116dc2eecfe22b1529a0da127f0e7be82f49b" + integrity sha512-h4Ff4Pho+SR1S8XerMCC12X//oY2bG3Iug/fUnudfcXEUnIeRiBdXHFdGlGOgQ3HqKgosTEhkZMvGM9tWtYC+Q== + dependencies: + "@prisma/debug" "6.19.2" + "@prisma/engines-version" "7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7" + "@prisma/get-platform" "6.19.2" + +"@prisma/get-platform@6.19.2": + version "6.19.2" + resolved "https://registry.yarnpkg.com/@prisma/get-platform/-/get-platform-6.19.2.tgz#7e1b0f08972cd4ae7c13477b29f492dde0e808eb" + integrity sha512-PGLr06JUSTqIvztJtAzIxOwtWKtJm5WwOG6xpsgD37Rc84FpfUBGLKz65YpJBGtkRQGXTYEFie7pYALocC3MtA== + dependencies: + "@prisma/debug" "6.19.2" + +"@standard-schema/spec@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@standard-schema/spec/-/spec-1.1.0.tgz#a79b55dbaf8604812f52d140b2c9ab41bc150bb8" + integrity sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w== + +"@types/node@*": + version "25.0.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.0.9.tgz#81ce3579ddf67cae812a9d49c8a0ab90c82e7782" + integrity sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw== + dependencies: + undici-types "~7.16.0" + +"@types/node@^14.0.1": + version "14.18.63" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.63.tgz#1788fa8da838dbb5f9ea994b834278205db6ca2b" + integrity sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ== + +"@types/node@^22.10.7": + version "22.19.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.19.7.tgz#434094ee1731ae76c16083008590a5835a8c39c1" + integrity sha512-MciR4AKGHWl7xwxkBa6xUGxQJ4VBOmPTF7sL+iGzuahOFaO0jHCsuEfS80pan1ef4gWId1oWOweIhrDEYLuaOw== + dependencies: + undici-types "~6.21.0" + +"@types/pdfkit@*": + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/pdfkit/-/pdfkit-0.17.4.tgz#28d62e41bec19adb356d61ed41015b3b2f59031d" + integrity sha512-odAmVuuguRxKh1X4pbMrJMp8ecwNqHRw6lweupvzK+wuyNmi6wzlUlGVZ9EqMvp3Bs2+L9Ty0sRlrvKL+gsQZg== + dependencies: + "@types/node" "*" + +"@types/pdfmake@^0.2.9": + version "0.2.12" + resolved "https://registry.yarnpkg.com/@types/pdfmake/-/pdfmake-0.2.12.tgz#c2cb2a71394877dd797fa12eea61e830c28df442" + integrity sha512-YV3oY+J1eSHVH22fPuevE2kQdWvrpkEgYyHacExxgr//ZPjCitAggnysGjx/2VgiH0lEAGQ+5R+wZUGbAXn1Qg== + dependencies: + "@types/node" "*" + "@types/pdfkit" "*" + +abstract-logging@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/abstract-logging/-/abstract-logging-2.0.1.tgz#6b0c371df212db7129b57d2e7fcf282b8bf1c839" + integrity sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA== + +ajv-formats@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" + integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== + dependencies: + ajv "^8.0.0" + +ajv@^8.0.0, ajv@^8.12.0: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" + integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== + +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.3" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" + integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== + +archiver-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" + integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== + dependencies: + glob "^7.1.4" + graceful-fs "^4.2.0" + lazystream "^1.0.0" + lodash.defaults "^4.2.0" + lodash.difference "^4.5.0" + lodash.flatten "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.union "^4.6.0" + normalize-path "^3.0.0" + readable-stream "^2.0.0" + +archiver-utils@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-3.0.4.tgz#a0d201f1cf8fce7af3b5a05aea0a337329e96ec7" + integrity sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw== + dependencies: + glob "^7.2.3" + graceful-fs "^4.2.0" + lazystream "^1.0.0" + lodash.defaults "^4.2.0" + lodash.difference "^4.5.0" + lodash.flatten "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.union "^4.6.0" + normalize-path "^3.0.0" + readable-stream "^3.6.0" + +archiver@^5.0.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.2.tgz#99991d5957e53bd0303a392979276ac4ddccf3b0" + integrity sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw== + dependencies: + archiver-utils "^2.1.0" + async "^3.2.4" + buffer-crc32 "^0.2.1" + readable-stream "^3.6.0" + readdir-glob "^1.1.2" + tar-stream "^2.2.0" + zip-stream "^4.1.0" + +asn1.js@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +async@^3.2.4: + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== + +atomic-sleep@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" + integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== + +avvio@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/avvio/-/avvio-9.1.0.tgz#0ff80ed211682441d8aa39ff21a4b9d022109c44" + integrity sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw== + dependencies: + "@fastify/error" "^4.0.0" + fastq "^1.17.1" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +base64-js@^1.1.2, base64-js@^1.3.0, base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +big-integer@^1.6.17: + version "1.6.52" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85" + integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== + +binary@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" + integrity sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg== + dependencies: + buffers "~0.1.1" + chainsaw "~0.1.0" + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bluebird@~3.4.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" + integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA== + +bn.js@^4.0.0: + version "4.12.2" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.2.tgz#3d8fed6796c24e177737f7cc5172ee04ef39ec99" + integrity sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw== + +brace-expansion@^1.1.7: + version "1.1.12" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" + integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== + dependencies: + balanced-match "^1.0.0" + +brotli@^1.2.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/brotli/-/brotli-1.3.3.tgz#7365d8cc00f12cf765d2b2c898716bcf4b604d48" + integrity sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg== + dependencies: + base64-js "^1.1.2" + +buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +buffer-indexof-polyfill@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" + integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffers@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" + integrity sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ== + +c12@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/c12/-/c12-3.1.0.tgz#9e237970e1d3b74ebae51d25945cb59664c12c89" + integrity sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw== + dependencies: + chokidar "^4.0.3" + confbox "^0.2.2" + defu "^6.1.4" + dotenv "^16.6.1" + exsolve "^1.0.7" + giget "^2.0.0" + jiti "^2.4.2" + ohash "^2.0.11" + pathe "^2.0.3" + perfect-debounce "^1.0.0" + pkg-types "^2.2.0" + rc9 "^2.1.2" + +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + +chainsaw@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" + integrity sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ== + dependencies: + traverse ">=0.3.0 <0.4" + +chokidar@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== + dependencies: + readdirp "^4.0.1" + +citty@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/citty/-/citty-0.1.6.tgz#0f7904da1ed4625e1a9ea7e0fa780981aab7c5e4" + integrity sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ== + dependencies: + consola "^3.2.3" + +citty@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/citty/-/citty-0.2.0.tgz#2426b145c4bf2a2c5c33bd66a634dfe3d5ea67ea" + integrity sha512-8csy5IBFI2ex2hTVpaHN2j+LNE199AgiI7y4dMintrr8i0lQiFn+0AWMZrWdHKIgMOer65f8IThysYhoReqjWA== + +clone@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +compress-commons@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.2.tgz#6542e59cb63e1f46a8b21b0e06f9a32e4c8b06df" + integrity sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg== + dependencies: + buffer-crc32 "^0.2.13" + crc32-stream "^4.0.2" + normalize-path "^3.0.0" + readable-stream "^3.6.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +confbox@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.2.2.tgz#8652f53961c74d9e081784beed78555974a9c110" + integrity sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ== + +consola@^3.2.3, consola@^3.4.0: + version "3.4.2" + resolved "https://registry.yarnpkg.com/consola/-/consola-3.4.2.tgz#5af110145397bb67afdab77013fdc34cae590ea7" + integrity sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA== + +content-disposition@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +cookie@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-1.1.1.tgz#3bb9bdfc82369db9c2f69c93c9c3ceb310c88b3c" + integrity sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +crc32-stream@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.3.tgz#85dd677eb78fa7cad1ba17cc506a597d41fc6f33" + integrity sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw== + dependencies: + crc-32 "^1.2.0" + readable-stream "^3.4.0" + +cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" + integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== + +dayjs@^1.8.34: + version "1.11.19" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.19.tgz#15dc98e854bb43917f12021806af897c58ae2938" + integrity sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw== + +deep-equal@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.2.tgz#78a561b7830eef3134c7f6f3a3d6af272a678761" + integrity sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg== + dependencies: + is-arguments "^1.1.1" + is-date-object "^1.0.5" + is-regex "^1.1.4" + object-is "^1.1.5" + object-keys "^1.1.1" + regexp.prototype.flags "^1.5.1" + +deepmerge-ts@7.1.5: + version "7.1.5" + resolved "https://registry.yarnpkg.com/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz#ff818564007f5c150808d2b7b732cac83aa415ab" + integrity sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw== + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +defu@^6.1.4: + version "6.1.4" + resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479" + integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== + +depd@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + +destr@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/destr/-/destr-2.0.5.tgz#7d112ff1b925fb8d2079fac5bdb4a90973b51fdb" + integrity sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA== + +dfa@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/dfa/-/dfa-1.2.0.tgz#96ac3204e2d29c49ea5b57af8d92c2ae12790657" + integrity sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q== + +dotenv@^16.6.1: + version "16.6.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020" + integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow== + +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +duplexer2@~0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== + dependencies: + readable-stream "^2.0.2" + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ecdsa-sig-formatter@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + +effect@3.18.4: + version "3.18.4" + resolved "https://registry.yarnpkg.com/effect/-/effect-3.18.4.tgz#e241fde5cc090608c51c5e29e2da357bb5d0e815" + integrity sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA== + dependencies: + "@standard-schema/spec" "^1.0.0" + fast-check "^3.23.1" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +empathic@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/empathic/-/empathic-2.0.0.tgz#71d3c2b94fad49532ef98a6c34be0386659f6131" + integrity sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA== + +end-of-stream@^1.4.1: + version "1.4.5" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c" + integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== + dependencies: + once "^1.4.0" + +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +esbuild@~0.27.0: + version "0.27.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.27.2.tgz#d83ed2154d5813a5367376bb2292a9296fc83717" + integrity sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw== + optionalDependencies: + "@esbuild/aix-ppc64" "0.27.2" + "@esbuild/android-arm" "0.27.2" + "@esbuild/android-arm64" "0.27.2" + "@esbuild/android-x64" "0.27.2" + "@esbuild/darwin-arm64" "0.27.2" + "@esbuild/darwin-x64" "0.27.2" + "@esbuild/freebsd-arm64" "0.27.2" + "@esbuild/freebsd-x64" "0.27.2" + "@esbuild/linux-arm" "0.27.2" + "@esbuild/linux-arm64" "0.27.2" + "@esbuild/linux-ia32" "0.27.2" + "@esbuild/linux-loong64" "0.27.2" + "@esbuild/linux-mips64el" "0.27.2" + "@esbuild/linux-ppc64" "0.27.2" + "@esbuild/linux-riscv64" "0.27.2" + "@esbuild/linux-s390x" "0.27.2" + "@esbuild/linux-x64" "0.27.2" + "@esbuild/netbsd-arm64" "0.27.2" + "@esbuild/netbsd-x64" "0.27.2" + "@esbuild/openbsd-arm64" "0.27.2" + "@esbuild/openbsd-x64" "0.27.2" + "@esbuild/openharmony-arm64" "0.27.2" + "@esbuild/sunos-x64" "0.27.2" + "@esbuild/win32-arm64" "0.27.2" + "@esbuild/win32-ia32" "0.27.2" + "@esbuild/win32-x64" "0.27.2" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +exceljs@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/exceljs/-/exceljs-4.4.0.tgz#cfb1cb8dcc82c760a9fc9faa9e52dadab66b0156" + integrity sha512-XctvKaEMaj1Ii9oDOqbW/6e1gXknSY4g/aLCDicOXqBE4M0nRWkUu0PTp++UPNzoFY12BNHMfs/VadKIS6llvg== + dependencies: + archiver "^5.0.0" + dayjs "^1.8.34" + fast-csv "^4.3.1" + jszip "^3.10.1" + readable-stream "^3.6.0" + saxes "^5.0.1" + tmp "^0.2.0" + unzipper "^0.10.11" + uuid "^8.3.0" + +exsolve@^1.0.7: + version "1.0.8" + resolved "https://registry.yarnpkg.com/exsolve/-/exsolve-1.0.8.tgz#7f5e34da61cd1116deda5136e62292c096f50613" + integrity sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA== + +fast-check@^3.23.1: + version "3.23.2" + resolved "https://registry.yarnpkg.com/fast-check/-/fast-check-3.23.2.tgz#0129f1eb7e4f500f58e8290edc83c670e4a574a2" + integrity sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A== + dependencies: + pure-rand "^6.1.0" + +fast-csv@^4.3.1: + version "4.3.6" + resolved "https://registry.yarnpkg.com/fast-csv/-/fast-csv-4.3.6.tgz#70349bdd8fe4d66b1130d8c91820b64a21bc4a63" + integrity sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw== + dependencies: + "@fast-csv/format" "4.3.5" + "@fast-csv/parse" "4.3.6" + +fast-decode-uri-component@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz#46f8b6c22b30ff7a81357d4f59abfae938202543" + integrity sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg== + +fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stringify@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/fast-json-stringify/-/fast-json-stringify-6.2.0.tgz#4edb9372cb315e819989dd94c78becc179551d83" + integrity sha512-Eaf/KNIDwHkzfyeQFNfLXJnQ7cl1XQI3+zRqmPlvtkMigbXnAcasTrvJQmquBSxKfFGeRA6PFog8t+hFmpDoWw== + dependencies: + "@fastify/merge-json-schemas" "^0.2.0" + ajv "^8.12.0" + ajv-formats "^3.0.1" + fast-uri "^3.0.0" + json-schema-ref-resolver "^3.0.0" + rfdc "^1.2.0" + +fast-jwt@^5.0.0: + version "5.0.6" + resolved "https://registry.yarnpkg.com/fast-jwt/-/fast-jwt-5.0.6.tgz#abc2d6cf28d22ae11dbbd08622dd5e53ea9b1f4f" + integrity sha512-LPE7OCGUl11q3ZgW681cEU2d0d2JZ37hhJAmetCgNyW8waVaJVZXhyFF6U2so1Iim58Yc7pfxJe2P7MNetQH2g== + dependencies: + "@lukeed/ms" "^2.0.2" + asn1.js "^5.4.1" + ecdsa-sig-formatter "^1.0.11" + mnemonist "^0.40.0" + +fast-querystring@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fast-querystring/-/fast-querystring-1.1.2.tgz#a6d24937b4fc6f791b4ee31dcb6f53aeafb89f53" + integrity sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg== + dependencies: + fast-decode-uri-component "^1.0.1" + +fast-uri@^3.0.0, fast-uri@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa" + integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== + +fastfall@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/fastfall/-/fastfall-1.5.1.tgz#3fee03331a49d1d39b3cdf7a5e9cd66f475e7b94" + integrity sha512-KH6p+Z8AKPXnmA7+Iz2Lh8ARCMr+8WNPVludm1LGkZoD2MjY6LVnRMtTKhkdzI+jr0RzQWXKzKyBJm1zoHEL4Q== + dependencies: + reusify "^1.0.0" + +fastify-plugin@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/fastify-plugin/-/fastify-plugin-5.1.0.tgz#7083e039d6418415f9a669f8c25e72fc5bf2d3e7" + integrity sha512-FAIDA8eovSt5qcDgcBvDuX/v0Cjz0ohGhENZ/wpc3y+oZCY2afZ9Baqql3g/lC+OHRnciQol4ww7tuthOb9idw== + +fastify@^5.2.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/fastify/-/fastify-5.7.1.tgz#4a9116964b4e5130f43b8f08631d5ecca46e2edb" + integrity sha512-ZW7S4fxlZhE+tYWVokFzjh+i56R+buYKNGhrVl6DtN8sxkyMEzpJnzvO8A/ZZrsg5w6X37u6I4EOQikYS5DXpA== + dependencies: + "@fastify/ajv-compiler" "^4.0.5" + "@fastify/error" "^4.0.0" + "@fastify/fast-json-stringify-compiler" "^5.0.0" + "@fastify/proxy-addr" "^5.0.0" + abstract-logging "^2.0.1" + avvio "^9.0.0" + fast-json-stringify "^6.0.0" + find-my-way "^9.0.0" + light-my-request "^6.0.0" + pino "^10.1.0" + process-warning "^5.0.0" + rfdc "^1.3.1" + secure-json-parse "^4.0.0" + semver "^7.6.0" + toad-cache "^3.7.0" + +fastparallel@^2.2.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/fastparallel/-/fastparallel-2.4.1.tgz#0d984a5813ffa67f30b4a5cb4cb8cbe61c7ee5a5" + integrity sha512-qUmhxPgNHmvRjZKBFUNI0oZuuH9OlSIOXmJ98lhKPxMZZ7zS/Fi0wRHOihDSz0R1YiIOjxzOY4bq65YTcdBi2Q== + dependencies: + reusify "^1.0.4" + xtend "^4.0.2" + +fastq@^1.17.1, fastq@^1.3.0: + version "1.20.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675" + integrity sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== + dependencies: + reusify "^1.0.4" + +fastseries@^1.7.0: + version "1.7.2" + resolved "https://registry.yarnpkg.com/fastseries/-/fastseries-1.7.2.tgz#d22ce13b9433dff3388d91dbd6b8bda9b21a0f4b" + integrity sha512-dTPFrPGS8SNSzAt7u/CbMKCJ3s01N04s4JFbORHcmyvVfVKmbhMD1VtRbh5enGHxkaQDqWyLefiKOGGmohGDDQ== + dependencies: + reusify "^1.0.0" + xtend "^4.0.0" + +find-my-way@^9.0.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/find-my-way/-/find-my-way-9.4.0.tgz#ef9c1e27e6f0b518b0f0af5ae3e349a0c3b4ff59" + integrity sha512-5Ye4vHsypZRYtS01ob/iwHzGRUDELlsoCftI/OZFhcLs1M0tkGPcXldE80TAZC5yYuJMBPJQQ43UHlqbJWiX2w== + dependencies: + fast-deep-equal "^3.1.3" + fast-querystring "^1.0.0" + safe-regex2 "^5.0.0" + +foreground-child@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== + dependencies: + cross-spawn "^7.0.6" + signal-exit "^4.0.1" + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +fstream@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-intrinsic@^1.2.4, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +get-tsconfig@^4.7.5: + version "4.13.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.13.0.tgz#fcdd991e6d22ab9a600f00e91c318707a5d9a0d7" + integrity sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ== + dependencies: + resolve-pkg-maps "^1.0.0" + +giget@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/giget/-/giget-2.0.0.tgz#395fc934a43f9a7a29a29d55b99f23e30c14f195" + integrity sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA== + dependencies: + citty "^0.1.6" + consola "^3.4.0" + defu "^6.1.4" + node-fetch-native "^1.6.6" + nypm "^0.6.0" + pathe "^2.0.3" + +glob@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-11.1.0.tgz#4f826576e4eb99c7dad383793d2f9f08f67e50a6" + integrity sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw== + dependencies: + foreground-child "^3.3.1" + jackspeak "^4.1.1" + minimatch "^10.1.1" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^2.0.0" + +glob@^7.1.3, glob@^7.1.4, glob@^7.2.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +graceful-fs@^4.1.2, graceful-fs@^4.2.0, graceful-fs@^4.2.2: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +http-errors@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" + integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== + dependencies: + depd "~2.0.0" + inherits "~2.0.4" + setprototypeof "~1.2.0" + statuses "~2.0.2" + toidentifier "~1.0.1" + +iconv-lite@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.2.tgz#d0bdeac3f12b4835b7359c2ad89c422a4d1cc72e" + integrity sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.3, inherits@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ipaddr.js@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.3.0.tgz#71dce70e1398122208996d1c22f2ba46a24b1abc" + integrity sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg== + +is-arguments@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" + integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + +is-date-object@^1.0.5: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-regex@^1.1.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +jackspeak@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.1.1.tgz#96876030f450502047fc7e8c7fcf8ce8124e43ae" + integrity sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + +jiti@^2.4.2: + version "2.6.1" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.6.1.tgz#178ef2fc9a1a594248c20627cd820187a4d78d92" + integrity sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ== + +jpeg-exif@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/jpeg-exif/-/jpeg-exif-1.1.4.tgz#781a65b6cd74f62cb1c493511020f8d3577a1c2b" + integrity sha512-a+bKEcCjtuW5WTdgeXFzswSrdqi0jk4XlEtZlx5A94wCoBpFjfFTbo/Tra5SpNCl/YFZPvcV1dJc+TAYeg6ROQ== + +json-schema-ref-resolver@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-schema-ref-resolver/-/json-schema-ref-resolver-3.0.0.tgz#28f6a410122cde9238762a5e9296faa38be28708" + integrity sha512-hOrZIVL5jyYFjzk7+y7n5JDzGlU8rfWDuYyHwGa2WA8/pcmMHezp2xsVwxrebD/Q9t8Nc5DboieySDpCp4WG4A== + dependencies: + dequal "^2.0.3" + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +jszip@^3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + setimmediate "^1.0.5" + +lazystream@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" + integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== + dependencies: + readable-stream "^2.0.5" + +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + +light-my-request@^6.0.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/light-my-request/-/light-my-request-6.6.0.tgz#c9448772323f65f33720fb5979c7841f14060add" + integrity sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A== + dependencies: + cookie "^1.0.1" + process-warning "^4.0.0" + set-cookie-parser "^2.6.0" + +listenercount@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" + integrity sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ== + +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== + +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" + integrity sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA== + +lodash.escaperegexp@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" + integrity sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw== + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== + +lodash.groupby@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.groupby/-/lodash.groupby-4.6.0.tgz#0b08a1dcf68397c397855c3239783832df7403d1" + integrity sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw== + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + +lodash.isfunction@^3.0.9: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" + integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== + +lodash.isnil@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/lodash.isnil/-/lodash.isnil-4.0.0.tgz#49e28cd559013458c814c5479d3c663a21bfaa6c" + integrity sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isundefined@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz#23ef3d9535565203a66cefd5b830f848911afb48" + integrity sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA== + +lodash.union@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lru-cache@^11.0.0: + version "11.2.4" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.2.4.tgz#ecb523ebb0e6f4d837c807ad1abaea8e0619770d" + integrity sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg== + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +mime@^3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" + integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== + +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimatch@^10.1.1: + version "10.1.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.1.1.tgz#e6e61b9b0c1dcab116b5a7d1458e8b6ae9e73a55" + integrity sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ== + dependencies: + "@isaacs/brace-expansion" "^5.0.0" + +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.1.0: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + +"mkdirp@>=0.5 0": + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mnemonist@0.40.0: + version "0.40.0" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.40.0.tgz#72e866d7f1e261d0c589717ff2bcfd6feb802db2" + integrity sha512-kdd8AFNig2AD5Rkih7EPCXhu/iMvwevQFX/uEiGhZyPZi7fHqOoF4V4kHLpCfysxXMgQ4B52kdPMCwARshKvEg== + dependencies: + obliterator "^2.0.4" + +mnemonist@^0.40.0: + version "0.40.3" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.40.3.tgz#1cd4835c110ac28ec41504834a7184e0325f75cb" + integrity sha512-Vjyr90sJ23CKKH/qPAgUKicw/v6pRoamxIEDFOF8uSgFME7DqPRpHgRTejWVjkdGg5dXj0/NyxZHZ9bcjH+2uQ== + dependencies: + obliterator "^2.0.4" + +node-fetch-native@^1.6.6: + version "1.6.7" + resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.7.tgz#9d09ca63066cc48423211ed4caf5d70075d76a71" + integrity sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q== + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +nypm@^0.6.0: + version "0.6.4" + resolved "https://registry.yarnpkg.com/nypm/-/nypm-0.6.4.tgz#fc67e207e0c8acbc641c4ed5d56bec4372fad8a8" + integrity sha512-1TvCKjZyyklN+JJj2TS3P4uSQEInrM/HkkuSXsEzm1ApPgBffOn8gFguNnZf07r/1X6vlryfIqMUkJKQMzlZiw== + dependencies: + citty "^0.2.0" + pathe "^2.0.3" + tinyexec "^1.0.2" + +object-is@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +obliterator@^2.0.4: + version "2.0.5" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.5.tgz#031e0145354b0c18840336ae51d41e7d6d2c76aa" + integrity sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw== + +ohash@^2.0.11: + version "2.0.11" + resolved "https://registry.yarnpkg.com/ohash/-/ohash-2.0.11.tgz#60b11e8cff62ca9dee88d13747a5baa145f5900b" + integrity sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ== + +on-exit-leak-free@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8" + integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== + +once@^1.3.0, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + +pako@^0.2.5: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== + +pako@~1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-scurry@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.1.tgz#4b6572376cfd8b811fca9cd1f5c24b3cbac0fe10" + integrity sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA== + dependencies: + lru-cache "^11.0.0" + minipass "^7.1.2" + +pathe@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" + integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== + +pdfmake@^0.2.15: + version "0.2.23" + resolved "https://registry.yarnpkg.com/pdfmake/-/pdfmake-0.2.23.tgz#249ce735fbc58e212ea3343d60f388408b8f2f02" + integrity sha512-A/IksoKb/ikOZH1edSDJ/2zBbqJKDghD4+fXn3rT7quvCJDlsZMs3NmIB3eajLMMFU9Bd3bZPVvlUMXhvFI+bQ== + dependencies: + "@foliojs-fork/linebreak" "^1.1.2" + "@foliojs-fork/pdfkit" "^0.15.3" + iconv-lite "^0.7.1" + xmldoc "^2.0.3" + +perfect-debounce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz#9c2e8bc30b169cc984a58b7d5b28049839591d2a" + integrity sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA== + +pino-abstract-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz#b21e5f33a297e8c4c915c62b3ce5dd4a87a52c23" + integrity sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg== + dependencies: + split2 "^4.0.0" + +pino-std-serializers@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz#a7b0cd65225f29e92540e7853bd73b07479893fc" + integrity sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw== + +pino@^10.1.0: + version "10.2.1" + resolved "https://registry.yarnpkg.com/pino/-/pino-10.2.1.tgz#40572ff629ef7dc3f87487f68546b83c91ee3dc0" + integrity sha512-Tjyv76gdUe2460dEhtcnA4fU/+HhGq2Kr7OWlo2R/Xxbmn/ZNKWavNWTD2k97IE+s755iVU7WcaOEIl+H3cq8w== + dependencies: + "@pinojs/redact" "^0.4.0" + atomic-sleep "^1.0.0" + on-exit-leak-free "^2.1.0" + pino-abstract-transport "^3.0.0" + pino-std-serializers "^7.0.0" + process-warning "^5.0.0" + quick-format-unescaped "^4.0.3" + real-require "^0.2.0" + safe-stable-stringify "^2.3.1" + sonic-boom "^4.0.1" + thread-stream "^4.0.0" + +pkg-types@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-2.3.0.tgz#037f2c19bd5402966ff6810e32706558cb5b5726" + integrity sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig== + dependencies: + confbox "^0.2.2" + exsolve "^1.0.7" + pathe "^2.0.3" + +png-js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/png-js/-/png-js-1.0.0.tgz#e5484f1e8156996e383aceebb3789fd75df1874d" + integrity sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g== + +prisma@^6.2.1: + version "6.19.2" + resolved "https://registry.yarnpkg.com/prisma/-/prisma-6.19.2.tgz#ad6f41a57fd855c730898cccb77da5d2c9d1774d" + integrity sha512-XTKeKxtQElcq3U9/jHyxSPgiRgeYDKxWTPOf6NkXA0dNj5j40MfEsZkMbyNpwDWCUv7YBFUl7I2VK/6ALbmhEg== + dependencies: + "@prisma/config" "6.19.2" + "@prisma/engines" "6.19.2" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process-warning@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-4.0.1.tgz#5c1db66007c67c756e4e09eb170cdece15da32fb" + integrity sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q== + +process-warning@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-5.0.0.tgz#566e0bf79d1dff30a72d8bbbe9e8ecefe8d378d7" + integrity sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA== + +pure-rand@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" + integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== + +quick-format-unescaped@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" + integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== + +rc9@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/rc9/-/rc9-2.1.2.tgz#6282ff638a50caa0a91a31d76af4a0b9cbd1080d" + integrity sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg== + dependencies: + defu "^6.1.4" + destr "^2.0.3" + +readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdir-glob@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.3.tgz#c3d831f51f5e7bfa62fa2ffbe4b508c640f09584" + integrity sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA== + dependencies: + minimatch "^5.1.0" + +readdirp@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" + integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== + +real-require@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" + integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== + +regexp.prototype.flags@^1.5.1: + version "1.5.4" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-errors "^1.3.0" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + +ret@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.5.0.tgz#30a4d38a7e704bd96dc5ffcbe7ce2a9274c41c95" + integrity sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw== + +reusify@^1.0.0, reusify@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== + +rfdc@^1.2.0, rfdc@^1.3.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== + +rimraf@2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex2@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/safe-regex2/-/safe-regex2-5.0.0.tgz#762e4a4c328603427281d2b99662f2d04e4ae811" + integrity sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw== + dependencies: + ret "~0.5.0" + +safe-stable-stringify@^2.3.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" + integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== + +"safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@^1.4.3: + version "1.4.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.4.tgz#f29c2bba80ce5b86f4343b4c2be9f2b96627cf8b" + integrity sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw== + +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +secure-json-parse@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-4.1.0.tgz#4f1ab41c67a13497ea1b9131bb4183a22865477c" + integrity sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA== + +semver@^7.6.0: + version "7.7.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" + integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== + +set-cookie-parser@^2.6.0: + version "2.7.2" + resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz#ccd08673a9ae5d2e44ea2a2de25089e67c7edf68" + integrity sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw== + +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +setimmediate@^1.0.5, setimmediate@~1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +sonic-boom@^4.0.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-4.2.0.tgz#e59a525f831210fa4ef1896428338641ac1c124d" + integrity sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww== + dependencies: + atomic-sleep "^1.0.0" + +split2@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + +statuses@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" + integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== + +steed@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/steed/-/steed-1.1.3.tgz#f1525dd5adb12eb21bf74749537668d625b9abc5" + integrity sha512-EUkci0FAUiE4IvGTSKcDJIQ/eRUP2JJb56+fvZ4sdnguLTqIdKjSxUe138poW8mkvKWXW2sFPrgTsxqoISnmoA== + dependencies: + fastfall "^1.5.0" + fastparallel "^2.2.0" + fastq "^1.3.0" + fastseries "^1.7.0" + reusify "^1.0.0" + +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.2.tgz#132875abde678c7ea8d691533f2e7e22bb744dba" + integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA== + dependencies: + ansi-regex "^6.0.1" + +tar-stream@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +thread-stream@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-4.0.0.tgz#732f007c24da7084f729d6e3a7e3f5934a7380b7" + integrity sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA== + dependencies: + real-require "^0.2.0" + +tiny-inflate@^1.0.0, tiny-inflate@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" + integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== + +tinyexec@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.0.2.tgz#bdd2737fe2ba40bd6f918ae26642f264b99ca251" + integrity sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg== + +tmp@^0.2.0: + version "0.2.5" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" + integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow== + +toad-cache@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/toad-cache/-/toad-cache-3.7.0.tgz#b9b63304ea7c45ec34d91f1d2fa513517025c441" + integrity sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw== + +toidentifier@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +"traverse@>=0.3.0 <0.4": + version "0.3.9" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" + integrity sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ== + +tsx@^4.19.2: + version "4.21.0" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.21.0.tgz#32aa6cf17481e336f756195e6fe04dae3e6308b1" + integrity sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw== + dependencies: + esbuild "~0.27.0" + get-tsconfig "^4.7.5" + optionalDependencies: + fsevents "~2.3.3" + +typescript@^5.7.3: + version "5.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" + integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== + +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + +undici-types@~7.16.0: + version "7.16.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" + integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== + +unicode-properties@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/unicode-properties/-/unicode-properties-1.4.1.tgz#96a9cffb7e619a0dc7368c28da27e05fc8f9be5f" + integrity sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg== + dependencies: + base64-js "^1.3.0" + unicode-trie "^2.0.0" + +unicode-trie@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-2.0.0.tgz#8fd8845696e2e14a8b67d78fa9e0dd2cad62fec8" + integrity sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ== + dependencies: + pako "^0.2.5" + tiny-inflate "^1.0.0" + +unzipper@^0.10.11: + version "0.10.14" + resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.14.tgz#d2b33c977714da0fbc0f82774ad35470a7c962b1" + integrity sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g== + dependencies: + big-integer "^1.6.17" + binary "~0.3.0" + bluebird "~3.4.1" + buffer-indexof-polyfill "~1.0.0" + duplexer2 "~0.1.4" + fstream "^1.0.12" + graceful-fs "^4.2.2" + listenercount "~1.0.1" + readable-stream "~2.3.6" + setimmediate "~1.0.4" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +uuid@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xmldoc@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/xmldoc/-/xmldoc-2.0.3.tgz#65b4226b753ea6cd4601f3f56d52338941d38380" + integrity sha512-6gRk4NY/Jvg67xn7OzJuxLRsGgiXBaPUQplVJ/9l99uIugxh4FTOewYz5ic8WScj7Xx/2WvhENiQKwkK9RpE4w== + dependencies: + sax "^1.4.3" + +xtend@^4.0.0, xtend@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +zip-stream@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.1.tgz#1337fe974dbaffd2fa9a1ba09662a66932bd7135" + integrity sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ== + dependencies: + archiver-utils "^3.0.4" + compress-commons "^4.1.2" + readable-stream "^3.6.0" + +zod@^3.24.1: + version "3.25.76" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.76.tgz#26841c3f6fd22a6a2760e7ccb719179768471e34" + integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ== diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..5fc7985 --- /dev/null +++ b/compose.yaml @@ -0,0 +1,28 @@ +services: + timetracker: + build: . + container_name: timetracker + restart: unless-stopped + ports: + - 34225:3000 + environment: + - NODE_ENV=production + - DATABASE_URL=file:/app/data/timetracker.db + - JWT_SECRET=${JWT_SECRET:-change-this-secret-in-production} + - PORT=3000 + volumes: + - timetracker-data:/app/data + healthcheck: + test: + - CMD + - wget + - -q + - --spider + - http://localhost:3000/api/auth/me + interval: 30s + timeout: 10s + retries: 3 + start_period: 10s +volumes: + timetracker-data: null +networks: {} diff --git a/frontend/dist/assets/index-Dd05-Q9W.css b/frontend/dist/assets/index-Dd05-Q9W.css new file mode 100644 index 0000000..4d53b84 --- /dev/null +++ b/frontend/dist/assets/index-Dd05-Q9W.css @@ -0,0 +1 @@ +*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.fixed{position:fixed}.inset-0{top:0;right:0;bottom:0;left:0}.bottom-6{bottom:1.5rem}.right-6{right:1.5rem}.z-50{z-index:50}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mt-1{margin-top:.25rem}.mt-4{margin-top:1rem}.block{display:block}.flex{display:flex}.h-12{height:3rem}.h-14{height:3.5rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.min-h-screen{min-height:100vh}.w-12{width:3rem}.w-14{width:3.5rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.min-w-0{min-width:0px}.max-w-4xl{max-width:56rem}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.resize-none{resize:none}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-blue-600{--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-opacity-50{--tw-bg-opacity: .5}.p-2{padding:.5rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pt-2{padding-top:.5rem}.text-center{text-align:center}.text-right{text-align:right}.text-2xl{font-size:1.5rem;line-height:2rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.capitalize{text-transform:capitalize}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif}.hover\:bg-blue-700:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-50:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:text-gray-700:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.hover\:text-red-500:hover{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.disabled\:opacity-50:disabled{opacity:.5} diff --git a/frontend/dist/assets/index-Ou6fj0Qi.js b/frontend/dist/assets/index-Ou6fj0Qi.js new file mode 100644 index 0000000..5b03d06 --- /dev/null +++ b/frontend/dist/assets/index-Ou6fj0Qi.js @@ -0,0 +1,49 @@ +var Em=c=>{throw TypeError(c)};var Xr=(c,u,s)=>u.has(c)||Em("Cannot "+s);var m=(c,u,s)=>(Xr(c,u,"read from private field"),s?s.call(c):u.get(c)),J=(c,u,s)=>u.has(c)?Em("Cannot add the same private member more than once"):u instanceof WeakSet?u.add(c):u.set(c,s),Y=(c,u,s,r)=>(Xr(c,u,"write to private field"),r?r.call(c,s):u.set(c,s),s),ut=(c,u,s)=>(Xr(c,u,"access private method"),s);var gc=(c,u,s,r)=>({set _(d){Y(c,u,d,s)},get _(){return m(c,u,r)}});(function(){const u=document.createElement("link").relList;if(u&&u.supports&&u.supports("modulepreload"))return;for(const d of document.querySelectorAll('link[rel="modulepreload"]'))r(d);new MutationObserver(d=>{for(const y of d)if(y.type==="childList")for(const O of y.addedNodes)O.tagName==="LINK"&&O.rel==="modulepreload"&&r(O)}).observe(document,{childList:!0,subtree:!0});function s(d){const y={};return d.integrity&&(y.integrity=d.integrity),d.referrerPolicy&&(y.referrerPolicy=d.referrerPolicy),d.crossOrigin==="use-credentials"?y.credentials="include":d.crossOrigin==="anonymous"?y.credentials="omit":y.credentials="same-origin",y}function r(d){if(d.ep)return;d.ep=!0;const y=s(d);fetch(d.href,y)}})();function vy(c){return c&&c.__esModule&&Object.prototype.hasOwnProperty.call(c,"default")?c.default:c}var Zr={exports:{}},Lu={};/** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var xm;function dg(){if(xm)return Lu;xm=1;var c=Symbol.for("react.transitional.element"),u=Symbol.for("react.fragment");function s(r,d,y){var O=null;if(y!==void 0&&(O=""+y),d.key!==void 0&&(O=""+d.key),"key"in d){y={};for(var E in d)E!=="key"&&(y[E]=d[E])}else y=d;return d=y.ref,{$$typeof:c,type:r,key:O,ref:d!==void 0?d:null,props:y}}return Lu.Fragment=u,Lu.jsx=s,Lu.jsxs=s,Lu}var Dm;function hg(){return Dm||(Dm=1,Zr.exports=dg()),Zr.exports}var U=hg(),Vr={exports:{}},tt={};/** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var zm;function mg(){if(zm)return tt;zm=1;var c=Symbol.for("react.transitional.element"),u=Symbol.for("react.portal"),s=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),d=Symbol.for("react.profiler"),y=Symbol.for("react.consumer"),O=Symbol.for("react.context"),E=Symbol.for("react.forward_ref"),x=Symbol.for("react.suspense"),b=Symbol.for("react.memo"),j=Symbol.for("react.lazy"),_=Symbol.for("react.activity"),H=Symbol.iterator;function Q(g){return g===null||typeof g!="object"?null:(g=H&&g[H]||g["@@iterator"],typeof g=="function"?g:null)}var G={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},L=Object.assign,F={};function P(g,R,q){this.props=g,this.context=R,this.refs=F,this.updater=q||G}P.prototype.isReactComponent={},P.prototype.setState=function(g,R){if(typeof g!="object"&&typeof g!="function"&&g!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,g,R,"setState")},P.prototype.forceUpdate=function(g){this.updater.enqueueForceUpdate(this,g,"forceUpdate")};function et(){}et.prototype=P.prototype;function K(g,R,q){this.props=g,this.context=R,this.refs=F,this.updater=q||G}var B=K.prototype=new et;B.constructor=K,L(B,P.prototype),B.isPureReactComponent=!0;var bt=Array.isArray;function Mt(){}var I={H:null,A:null,T:null,S:null},Dt=Object.prototype.hasOwnProperty;function Kt(g,R,q){var Z=q.ref;return{$$typeof:c,type:g,key:R,ref:Z!==void 0?Z:null,props:q}}function ct(g,R){return Kt(g.type,R,g.props)}function yt(g){return typeof g=="object"&&g!==null&&g.$$typeof===c}function Jt(g){var R={"=":"=0",":":"=2"};return"$"+g.replace(/[=:]/g,function(q){return R[q]})}var $e=/\/+/g;function he(g,R){return typeof g=="object"&&g!==null&&g.key!=null?Jt(""+g.key):R.toString(36)}function ne(g){switch(g.status){case"fulfilled":return g.value;case"rejected":throw g.reason;default:switch(typeof g.status=="string"?g.then(Mt,Mt):(g.status="pending",g.then(function(R){g.status==="pending"&&(g.status="fulfilled",g.value=R)},function(R){g.status==="pending"&&(g.status="rejected",g.reason=R)})),g.status){case"fulfilled":return g.value;case"rejected":throw g.reason}}throw g}function A(g,R,q,Z,at){var st=typeof g;(st==="undefined"||st==="boolean")&&(g=null);var pt=!1;if(g===null)pt=!0;else switch(st){case"bigint":case"string":case"number":pt=!0;break;case"object":switch(g.$$typeof){case c:case u:pt=!0;break;case j:return pt=g._init,A(pt(g._payload),R,q,Z,at)}}if(pt)return at=at(g),pt=Z===""?"."+he(g,0):Z,bt(at)?(q="",pt!=null&&(q=pt.replace($e,"$&/")+"/"),A(at,R,q,"",function(kn){return kn})):at!=null&&(yt(at)&&(at=ct(at,q+(at.key==null||g&&g.key===at.key?"":(""+at.key).replace($e,"$&/")+"/")+pt)),R.push(at)),1;pt=0;var ce=Z===""?".":Z+":";if(bt(g))for(var Qt=0;Qt>>1,Ct=A[zt];if(0>>1;ztd(q,$))Zd(at,q)?(A[zt]=at,A[Z]=$,zt=Z):(A[zt]=q,A[R]=$,zt=R);else if(Zd(at,$))A[zt]=at,A[Z]=$,zt=Z;else break t}}return w}function d(A,w){var $=A.sortIndex-w.sortIndex;return $!==0?$:A.id-w.id}if(c.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var y=performance;c.unstable_now=function(){return y.now()}}else{var O=Date,E=O.now();c.unstable_now=function(){return O.now()-E}}var x=[],b=[],j=1,_=null,H=3,Q=!1,G=!1,L=!1,F=!1,P=typeof setTimeout=="function"?setTimeout:null,et=typeof clearTimeout=="function"?clearTimeout:null,K=typeof setImmediate<"u"?setImmediate:null;function B(A){for(var w=s(b);w!==null;){if(w.callback===null)r(b);else if(w.startTime<=A)r(b),w.sortIndex=w.expirationTime,u(x,w);else break;w=s(b)}}function bt(A){if(L=!1,B(A),!G)if(s(x)!==null)G=!0,Mt||(Mt=!0,Jt());else{var w=s(b);w!==null&&ne(bt,w.startTime-A)}}var Mt=!1,I=-1,Dt=5,Kt=-1;function ct(){return F?!0:!(c.unstable_now()-KtA&&ct());){var zt=_.callback;if(typeof zt=="function"){_.callback=null,H=_.priorityLevel;var Ct=zt(_.expirationTime<=A);if(A=c.unstable_now(),typeof Ct=="function"){_.callback=Ct,B(A),w=!0;break e}_===s(x)&&r(x),B(A)}else r(x);_=s(x)}if(_!==null)w=!0;else{var g=s(b);g!==null&&ne(bt,g.startTime-A),w=!1}}break t}finally{_=null,H=$,Q=!1}w=void 0}}finally{w?Jt():Mt=!1}}}var Jt;if(typeof K=="function")Jt=function(){K(yt)};else if(typeof MessageChannel<"u"){var $e=new MessageChannel,he=$e.port2;$e.port1.onmessage=yt,Jt=function(){he.postMessage(null)}}else Jt=function(){P(yt,0)};function ne(A,w){I=P(function(){A(c.unstable_now())},w)}c.unstable_IdlePriority=5,c.unstable_ImmediatePriority=1,c.unstable_LowPriority=4,c.unstable_NormalPriority=3,c.unstable_Profiling=null,c.unstable_UserBlockingPriority=2,c.unstable_cancelCallback=function(A){A.callback=null},c.unstable_forceFrameRate=function(A){0>A||125zt?(A.sortIndex=$,u(b,A),s(x)===null&&A===s(b)&&(L?(et(I),I=-1):L=!0,ne(bt,$-zt))):(A.sortIndex=Ct,u(x,A),G||Q||(G=!0,Mt||(Mt=!0,Jt()))),A},c.unstable_shouldYield=ct,c.unstable_wrapCallback=function(A){var w=H;return function(){var $=H;H=w;try{return A.apply(this,arguments)}finally{H=$}}}})(Wr)),Wr}var _m;function gg(){return _m||(_m=1,Jr.exports=vg()),Jr.exports}var kr={exports:{}},ue={};/** + * @license React + * react-dom.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Cm;function bg(){if(Cm)return ue;Cm=1;var c=mf();function u(x){var b="https://react.dev/errors/"+x;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(c)}catch(u){console.error(u)}}return c(),kr.exports=bg(),kr.exports}/** + * @license React + * react-dom-client.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Rm;function pg(){if(Rm)return Xu;Rm=1;var c=gg(),u=mf(),s=Sg();function r(t){var e="https://react.dev/errors/"+t;if(1Ct||(t.current=zt[Ct],zt[Ct]=null,Ct--)}function q(t,e){Ct++,zt[Ct]=t.current,t.current=e}var Z=g(null),at=g(null),st=g(null),pt=g(null);function ce(t,e){switch(q(st,e),q(at,t),q(Z,null),e.nodeType){case 9:case 11:t=(t=e.documentElement)&&(t=t.namespaceURI)?Jh(t):0;break;default:if(t=e.tagName,e=e.namespaceURI)e=Jh(e),t=Wh(e,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}R(Z),q(Z,t)}function Qt(){R(Z),R(at),R(st)}function kn(t){t.memoizedState!==null&&q(pt,t);var e=Z.current,a=Wh(e,t.type);e!==a&&(q(at,t),q(Z,a))}function Iu(t){at.current===t&&(R(Z),R(at)),pt.current===t&&(R(pt),Yu._currentValue=$)}var xc,Mf;function yl(t){if(xc===void 0)try{throw Error()}catch(a){var e=a.stack.trim().match(/\n( *(at )?)/);xc=e&&e[1]||"",Mf=-1)":-1n||h[l]!==T[n]){var z=` +`+h[l].replace(" at new "," at ");return t.displayName&&z.includes("")&&(z=z.replace("",t.displayName)),z}while(1<=l&&0<=n);break}}}finally{Dc=!1,Error.prepareStackTrace=a}return(a=t?t.displayName||t.name:"")?yl(a):""}function Xy(t,e){switch(t.tag){case 26:case 27:case 5:return yl(t.type);case 16:return yl("Lazy");case 13:return t.child!==e&&e!==null?yl("Suspense Fallback"):yl("Suspense");case 19:return yl("SuspenseList");case 0:case 15:return zc(t.type,!1);case 11:return zc(t.type.render,!1);case 1:return zc(t.type,!0);case 31:return yl("Activity");default:return""}}function Of(t){try{var e="",a=null;do e+=Xy(t,a),a=t,t=t.return;while(t);return e}catch(l){return` +Error generating stack: `+l.message+` +`+l.stack}}var Ac=Object.prototype.hasOwnProperty,Nc=c.unstable_scheduleCallback,_c=c.unstable_cancelCallback,Zy=c.unstable_shouldYield,Vy=c.unstable_requestPaint,Oe=c.unstable_now,Ky=c.unstable_getCurrentPriorityLevel,Ef=c.unstable_ImmediatePriority,xf=c.unstable_UserBlockingPriority,ti=c.unstable_NormalPriority,Jy=c.unstable_LowPriority,Df=c.unstable_IdlePriority,Wy=c.log,ky=c.unstable_setDisableYieldValue,Fn=null,Ee=null;function Ca(t){if(typeof Wy=="function"&&ky(t),Ee&&typeof Ee.setStrictMode=="function")try{Ee.setStrictMode(Fn,t)}catch{}}var xe=Math.clz32?Math.clz32:Py,Fy=Math.log,$y=Math.LN2;function Py(t){return t>>>=0,t===0?32:31-(Fy(t)/$y|0)|0}var ei=256,ai=262144,li=4194304;function vl(t){var e=t&42;if(e!==0)return e;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return t&261888;case 262144:case 524288:case 1048576:case 2097152:return t&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function ni(t,e,a){var l=t.pendingLanes;if(l===0)return 0;var n=0,i=t.suspendedLanes,f=t.pingedLanes;t=t.warmLanes;var o=l&134217727;return o!==0?(l=o&~i,l!==0?n=vl(l):(f&=o,f!==0?n=vl(f):a||(a=o&~t,a!==0&&(n=vl(a))))):(o=l&~i,o!==0?n=vl(o):f!==0?n=vl(f):a||(a=l&~t,a!==0&&(n=vl(a)))),n===0?0:e!==0&&e!==n&&(e&i)===0&&(i=n&-n,a=e&-e,i>=a||i===32&&(a&4194048)!==0)?e:n}function $n(t,e){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&e)===0}function Iy(t,e){switch(t){case 1:case 2:case 4:case 8:case 64:return e+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function zf(){var t=li;return li<<=1,(li&62914560)===0&&(li=4194304),t}function Cc(t){for(var e=[],a=0;31>a;a++)e.push(t);return e}function Pn(t,e){t.pendingLanes|=e,e!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function t0(t,e,a,l,n,i){var f=t.pendingLanes;t.pendingLanes=a,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=a,t.entangledLanes&=a,t.errorRecoveryDisabledLanes&=a,t.shellSuspendCounter=0;var o=t.entanglements,h=t.expirationTimes,T=t.hiddenUpdates;for(a=f&~a;0"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var i0=/[\n"\\]/g;function je(t){return t.replace(i0,function(e){return"\\"+e.charCodeAt(0).toString(16)+" "})}function qc(t,e,a,l,n,i,f,o){t.name="",f!=null&&typeof f!="function"&&typeof f!="symbol"&&typeof f!="boolean"?t.type=f:t.removeAttribute("type"),e!=null?f==="number"?(e===0&&t.value===""||t.value!=e)&&(t.value=""+Re(e)):t.value!==""+Re(e)&&(t.value=""+Re(e)):f!=="submit"&&f!=="reset"||t.removeAttribute("value"),e!=null?Yc(t,f,Re(e)):a!=null?Yc(t,f,Re(a)):l!=null&&t.removeAttribute("value"),n==null&&i!=null&&(t.defaultChecked=!!i),n!=null&&(t.checked=n&&typeof n!="function"&&typeof n!="symbol"),o!=null&&typeof o!="function"&&typeof o!="symbol"&&typeof o!="boolean"?t.name=""+Re(o):t.removeAttribute("name")}function Gf(t,e,a,l,n,i,f,o){if(i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(t.type=i),e!=null||a!=null){if(!(i!=="submit"&&i!=="reset"||e!=null)){Hc(t);return}a=a!=null?""+Re(a):"",e=e!=null?""+Re(e):a,o||e===t.value||(t.value=e),t.defaultValue=e}l=l??n,l=typeof l!="function"&&typeof l!="symbol"&&!!l,t.checked=o?t.checked:!!l,t.defaultChecked=!!l,f!=null&&typeof f!="function"&&typeof f!="symbol"&&typeof f!="boolean"&&(t.name=f),Hc(t)}function Yc(t,e,a){e==="number"&&ci(t.ownerDocument)===t||t.defaultValue===""+a||(t.defaultValue=""+a)}function tn(t,e,a,l){if(t=t.options,e){e={};for(var n=0;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Xc=!1;if(ra)try{var au={};Object.defineProperty(au,"passive",{get:function(){Xc=!0}}),window.addEventListener("test",au,au),window.removeEventListener("test",au,au)}catch{Xc=!1}var Ra=null,Zc=null,ri=null;function Jf(){if(ri)return ri;var t,e=Zc,a=e.length,l,n="value"in Ra?Ra.value:Ra.textContent,i=n.length;for(t=0;t=uu),If=" ",to=!1;function eo(t,e){switch(t){case"keyup":return j0.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function ao(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var nn=!1;function H0(t,e){switch(t){case"compositionend":return ao(e);case"keypress":return e.which!==32?null:(to=!0,If);case"textInput":return t=e.data,t===If&&to?null:t;default:return null}}function q0(t,e){if(nn)return t==="compositionend"||!kc&&eo(t,e)?(t=Jf(),ri=Zc=Ra=null,nn=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:a,offset:e-t};t=l}t:{for(;a;){if(a.nextSibling){a=a.nextSibling;break t}a=a.parentNode}a=void 0}a=fo(a)}}function ho(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?ho(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function mo(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var e=ci(t.document);e instanceof t.HTMLIFrameElement;){try{var a=typeof e.contentWindow.location.href=="string"}catch{a=!1}if(a)t=e.contentWindow;else break;e=ci(t.document)}return e}function Pc(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}var V0=ra&&"documentMode"in document&&11>=document.documentMode,un=null,Ic=null,ru=null,ts=!1;function yo(t,e,a){var l=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;ts||un==null||un!==ci(l)||(l=un,"selectionStart"in l&&Pc(l)?l={start:l.selectionStart,end:l.selectionEnd}:(l=(l.ownerDocument&&l.ownerDocument.defaultView||window).getSelection(),l={anchorNode:l.anchorNode,anchorOffset:l.anchorOffset,focusNode:l.focusNode,focusOffset:l.focusOffset}),ru&&su(ru,l)||(ru=l,l=ac(Ic,"onSelect"),0>=f,n-=f,Pe=1<<32-xe(e)+n|a<nt?(dt=V,V=null):dt=V.sibling;var gt=M(S,V,p[nt],N);if(gt===null){V===null&&(V=dt);break}t&&V&>.alternate===null&&e(S,V),v=i(gt,v,nt),vt===null?W=gt:vt.sibling=gt,vt=gt,V=dt}if(nt===p.length)return a(S,V),ht&&oa(S,nt),W;if(V===null){for(;ntnt?(dt=V,V=null):dt=V.sibling;var el=M(S,V,gt.value,N);if(el===null){V===null&&(V=dt);break}t&&V&&el.alternate===null&&e(S,V),v=i(el,v,nt),vt===null?W=el:vt.sibling=el,vt=el,V=dt}if(gt.done)return a(S,V),ht&&oa(S,nt),W;if(V===null){for(;!gt.done;nt++,gt=p.next())gt=C(S,gt.value,N),gt!==null&&(v=i(gt,v,nt),vt===null?W=gt:vt.sibling=gt,vt=gt);return ht&&oa(S,nt),W}for(V=l(V);!gt.done;nt++,gt=p.next())gt=D(V,S,nt,gt.value,N),gt!==null&&(t&>.alternate!==null&&V.delete(gt.key===null?nt:gt.key),v=i(gt,v,nt),vt===null?W=gt:vt.sibling=gt,vt=gt);return t&&V.forEach(function(og){return e(S,og)}),ht&&oa(S,nt),W}function _t(S,v,p,N){if(typeof p=="object"&&p!==null&&p.type===L&&p.key===null&&(p=p.props.children),typeof p=="object"&&p!==null){switch(p.$$typeof){case Q:t:{for(var W=p.key;v!==null;){if(v.key===W){if(W=p.type,W===L){if(v.tag===7){a(S,v.sibling),N=n(v,p.props.children),N.return=S,S=N;break t}}else if(v.elementType===W||typeof W=="object"&&W!==null&&W.$$typeof===Dt&&zl(W)===v.type){a(S,v.sibling),N=n(v,p.props),yu(N,p),N.return=S,S=N;break t}a(S,v);break}else e(S,v);v=v.sibling}p.type===L?(N=Ml(p.props.children,S.mode,N,p.key),N.return=S,S=N):(N=Si(p.type,p.key,p.props,null,S.mode,N),yu(N,p),N.return=S,S=N)}return f(S);case G:t:{for(W=p.key;v!==null;){if(v.key===W)if(v.tag===4&&v.stateNode.containerInfo===p.containerInfo&&v.stateNode.implementation===p.implementation){a(S,v.sibling),N=n(v,p.children||[]),N.return=S,S=N;break t}else{a(S,v);break}else e(S,v);v=v.sibling}N=cs(p,S.mode,N),N.return=S,S=N}return f(S);case Dt:return p=zl(p),_t(S,v,p,N)}if(ne(p))return X(S,v,p,N);if(Jt(p)){if(W=Jt(p),typeof W!="function")throw Error(r(150));return p=W.call(p),k(S,v,p,N)}if(typeof p.then=="function")return _t(S,v,Di(p),N);if(p.$$typeof===K)return _t(S,v,Mi(S,p),N);zi(S,p)}return typeof p=="string"&&p!==""||typeof p=="number"||typeof p=="bigint"?(p=""+p,v!==null&&v.tag===6?(a(S,v.sibling),N=n(v,p),N.return=S,S=N):(a(S,v),N=is(p,S.mode,N),N.return=S,S=N),f(S)):a(S,v)}return function(S,v,p,N){try{mu=0;var W=_t(S,v,p,N);return gn=null,W}catch(V){if(V===vn||V===Ei)throw V;var vt=ze(29,V,null,S.mode);return vt.lanes=N,vt.return=S,vt}finally{}}}var Nl=Yo(!0),Qo=Yo(!1),Ya=!1;function Ss(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function ps(t,e){t=t.updateQueue,e.updateQueue===t&&(e.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,callbacks:null})}function Qa(t){return{lane:t,tag:0,payload:null,callback:null,next:null}}function Ga(t,e,a){var l=t.updateQueue;if(l===null)return null;if(l=l.shared,(St&2)!==0){var n=l.pending;return n===null?e.next=e:(e.next=n.next,n.next=e),l.pending=e,e=bi(t),Mo(t,null,a),e}return gi(t,l,e,a),bi(t)}function vu(t,e,a){if(e=e.updateQueue,e!==null&&(e=e.shared,(a&4194048)!==0)){var l=e.lanes;l&=t.pendingLanes,a|=l,e.lanes=a,Nf(t,a)}}function Ts(t,e){var a=t.updateQueue,l=t.alternate;if(l!==null&&(l=l.updateQueue,a===l)){var n=null,i=null;if(a=a.firstBaseUpdate,a!==null){do{var f={lane:a.lane,tag:a.tag,payload:a.payload,callback:null,next:null};i===null?n=i=f:i=i.next=f,a=a.next}while(a!==null);i===null?n=i=e:i=i.next=e}else n=i=e;a={baseState:l.baseState,firstBaseUpdate:n,lastBaseUpdate:i,shared:l.shared,callbacks:l.callbacks},t.updateQueue=a;return}t=a.lastBaseUpdate,t===null?a.firstBaseUpdate=e:t.next=e,a.lastBaseUpdate=e}var Ms=!1;function gu(){if(Ms){var t=yn;if(t!==null)throw t}}function bu(t,e,a,l){Ms=!1;var n=t.updateQueue;Ya=!1;var i=n.firstBaseUpdate,f=n.lastBaseUpdate,o=n.shared.pending;if(o!==null){n.shared.pending=null;var h=o,T=h.next;h.next=null,f===null?i=T:f.next=T,f=h;var z=t.alternate;z!==null&&(z=z.updateQueue,o=z.lastBaseUpdate,o!==f&&(o===null?z.firstBaseUpdate=T:o.next=T,z.lastBaseUpdate=h))}if(i!==null){var C=n.baseState;f=0,z=T=h=null,o=i;do{var M=o.lane&-536870913,D=M!==o.lane;if(D?(ot&M)===M:(l&M)===M){M!==0&&M===mn&&(Ms=!0),z!==null&&(z=z.next={lane:0,tag:o.tag,payload:o.payload,callback:null,next:null});t:{var X=t,k=o;M=e;var _t=a;switch(k.tag){case 1:if(X=k.payload,typeof X=="function"){C=X.call(_t,C,M);break t}C=X;break t;case 3:X.flags=X.flags&-65537|128;case 0:if(X=k.payload,M=typeof X=="function"?X.call(_t,C,M):X,M==null)break t;C=_({},C,M);break t;case 2:Ya=!0}}M=o.callback,M!==null&&(t.flags|=64,D&&(t.flags|=8192),D=n.callbacks,D===null?n.callbacks=[M]:D.push(M))}else D={lane:M,tag:o.tag,payload:o.payload,callback:o.callback,next:null},z===null?(T=z=D,h=C):z=z.next=D,f|=M;if(o=o.next,o===null){if(o=n.shared.pending,o===null)break;D=o,o=D.next,D.next=null,n.lastBaseUpdate=D,n.shared.pending=null}}while(!0);z===null&&(h=C),n.baseState=h,n.firstBaseUpdate=T,n.lastBaseUpdate=z,i===null&&(n.shared.lanes=0),Va|=f,t.lanes=f,t.memoizedState=C}}function Go(t,e){if(typeof t!="function")throw Error(r(191,t));t.call(e)}function Bo(t,e){var a=t.callbacks;if(a!==null)for(t.callbacks=null,t=0;ti?i:8;var f=A.T,o={};A.T=o,Bs(t,!1,e,a);try{var h=n(),T=A.S;if(T!==null&&T(o,h),h!==null&&typeof h=="object"&&typeof h.then=="function"){var z=tv(h,l);Tu(t,e,z,Ue(t))}else Tu(t,e,l,Ue(t))}catch(C){Tu(t,e,{then:function(){},status:"rejected",reason:C},Ue())}finally{w.p=i,f!==null&&o.types!==null&&(f.types=o.types),A.T=f}}function iv(){}function Qs(t,e,a,l){if(t.tag!==5)throw Error(r(476));var n=Sd(t).queue;bd(t,n,e,$,a===null?iv:function(){return pd(t),a(l)})}function Sd(t){var e=t.memoizedState;if(e!==null)return e;e={memoizedState:$,baseState:$,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ya,lastRenderedState:$},next:null};var a={};return e.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ya,lastRenderedState:a},next:null},t.memoizedState=e,t=t.alternate,t!==null&&(t.memoizedState=e),e}function pd(t){var e=Sd(t);e.next===null&&(e=t.alternate.memoizedState),Tu(t,e.next.queue,{},Ue())}function Gs(){return ee(Yu)}function Td(){return Bt().memoizedState}function Md(){return Bt().memoizedState}function cv(t){for(var e=t.return;e!==null;){switch(e.tag){case 24:case 3:var a=Ue();t=Qa(a);var l=Ga(e,t,a);l!==null&&(pe(l,e,a),vu(l,e,a)),e={cache:ys()},t.payload=e;return}e=e.return}}function sv(t,e,a){var l=Ue();a={lane:l,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},qi(t)?Ed(e,a):(a=ns(t,e,a,l),a!==null&&(pe(a,t,l),xd(a,e,l)))}function Od(t,e,a){var l=Ue();Tu(t,e,a,l)}function Tu(t,e,a,l){var n={lane:l,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null};if(qi(t))Ed(e,n);else{var i=t.alternate;if(t.lanes===0&&(i===null||i.lanes===0)&&(i=e.lastRenderedReducer,i!==null))try{var f=e.lastRenderedState,o=i(f,a);if(n.hasEagerState=!0,n.eagerState=o,De(o,f))return gi(t,e,n,0),Ut===null&&vi(),!1}catch{}finally{}if(a=ns(t,e,n,l),a!==null)return pe(a,t,l),xd(a,e,l),!0}return!1}function Bs(t,e,a,l){if(l={lane:2,revertLane:Sr(),gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},qi(t)){if(e)throw Error(r(479))}else e=ns(t,a,l,2),e!==null&&pe(e,t,2)}function qi(t){var e=t.alternate;return t===lt||e!==null&&e===lt}function Ed(t,e){Sn=_i=!0;var a=t.pending;a===null?e.next=e:(e.next=a.next,a.next=e),t.pending=e}function xd(t,e,a){if((a&4194048)!==0){var l=e.lanes;l&=t.pendingLanes,a|=l,e.lanes=a,Nf(t,a)}}var Mu={readContext:ee,use:Ri,useCallback:Ht,useContext:Ht,useEffect:Ht,useImperativeHandle:Ht,useLayoutEffect:Ht,useInsertionEffect:Ht,useMemo:Ht,useReducer:Ht,useRef:Ht,useState:Ht,useDebugValue:Ht,useDeferredValue:Ht,useTransition:Ht,useSyncExternalStore:Ht,useId:Ht,useHostTransitionStatus:Ht,useFormState:Ht,useActionState:Ht,useOptimistic:Ht,useMemoCache:Ht,useCacheRefresh:Ht};Mu.useEffectEvent=Ht;var Dd={readContext:ee,use:Ri,useCallback:function(t,e){return se().memoizedState=[t,e===void 0?null:e],t},useContext:ee,useEffect:rd,useImperativeHandle:function(t,e,a){a=a!=null?a.concat([t]):null,wi(4194308,4,hd.bind(null,e,t),a)},useLayoutEffect:function(t,e){return wi(4194308,4,t,e)},useInsertionEffect:function(t,e){wi(4,2,t,e)},useMemo:function(t,e){var a=se();e=e===void 0?null:e;var l=t();if(_l){Ca(!0);try{t()}finally{Ca(!1)}}return a.memoizedState=[l,e],l},useReducer:function(t,e,a){var l=se();if(a!==void 0){var n=a(e);if(_l){Ca(!0);try{a(e)}finally{Ca(!1)}}}else n=e;return l.memoizedState=l.baseState=n,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:n},l.queue=t,t=t.dispatch=sv.bind(null,lt,t),[l.memoizedState,t]},useRef:function(t){var e=se();return t={current:t},e.memoizedState=t},useState:function(t){t=js(t);var e=t.queue,a=Od.bind(null,lt,e);return e.dispatch=a,[t.memoizedState,a]},useDebugValue:qs,useDeferredValue:function(t,e){var a=se();return Ys(a,t,e)},useTransition:function(){var t=js(!1);return t=bd.bind(null,lt,t.queue,!0,!1),se().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,e,a){var l=lt,n=se();if(ht){if(a===void 0)throw Error(r(407));a=a()}else{if(a=e(),Ut===null)throw Error(r(349));(ot&127)!==0||Jo(l,e,a)}n.memoizedState=a;var i={value:a,getSnapshot:e};return n.queue=i,rd(ko.bind(null,l,i,t),[t]),l.flags|=2048,Tn(9,{destroy:void 0},Wo.bind(null,l,i,a,e),null),a},useId:function(){var t=se(),e=Ut.identifierPrefix;if(ht){var a=Ie,l=Pe;a=(l&~(1<<32-xe(l)-1)).toString(32)+a,e="_"+e+"R_"+a,a=Ci++,0<\/script>",i=i.removeChild(i.firstChild);break;case"select":i=typeof l.is=="string"?f.createElement("select",{is:l.is}):f.createElement("select"),l.multiple?i.multiple=!0:l.size&&(i.size=l.size);break;default:i=typeof l.is=="string"?f.createElement(n,{is:l.is}):f.createElement(n)}}i[It]=e,i[me]=l;t:for(f=e.child;f!==null;){if(f.tag===5||f.tag===6)i.appendChild(f.stateNode);else if(f.tag!==4&&f.tag!==27&&f.child!==null){f.child.return=f,f=f.child;continue}if(f===e)break t;for(;f.sibling===null;){if(f.return===null||f.return===e)break t;f=f.return}f.sibling.return=f.return,f=f.sibling}e.stateNode=i;t:switch(le(i,n,l),n){case"button":case"input":case"select":case"textarea":l=!!l.autoFocus;break t;case"img":l=!0;break t;default:l=!1}l&&ga(e)}}return jt(e),er(e,e.type,t===null?null:t.memoizedProps,e.pendingProps,a),null;case 6:if(t&&e.stateNode!=null)t.memoizedProps!==l&&ga(e);else{if(typeof l!="string"&&e.stateNode===null)throw Error(r(166));if(t=st.current,dn(e)){if(t=e.stateNode,a=e.memoizedProps,l=null,n=te,n!==null)switch(n.tag){case 27:case 5:l=n.memoizedProps}t[It]=e,t=!!(t.nodeValue===a||l!==null&&l.suppressHydrationWarning===!0||Vh(t.nodeValue,a)),t||Ha(e,!0)}else t=lc(t).createTextNode(l),t[It]=e,e.stateNode=t}return jt(e),null;case 31:if(a=e.memoizedState,t===null||t.memoizedState!==null){if(l=dn(e),a!==null){if(t===null){if(!l)throw Error(r(318));if(t=e.memoizedState,t=t!==null?t.dehydrated:null,!t)throw Error(r(557));t[It]=e}else Ol(),(e.flags&128)===0&&(e.memoizedState=null),e.flags|=4;jt(e),t=!1}else a=os(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=a),t=!0;if(!t)return e.flags&256?(Ne(e),e):(Ne(e),null);if((e.flags&128)!==0)throw Error(r(558))}return jt(e),null;case 13:if(l=e.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(n=dn(e),l!==null&&l.dehydrated!==null){if(t===null){if(!n)throw Error(r(318));if(n=e.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(r(317));n[It]=e}else Ol(),(e.flags&128)===0&&(e.memoizedState=null),e.flags|=4;jt(e),n=!1}else n=os(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=n),n=!0;if(!n)return e.flags&256?(Ne(e),e):(Ne(e),null)}return Ne(e),(e.flags&128)!==0?(e.lanes=a,e):(a=l!==null,t=t!==null&&t.memoizedState!==null,a&&(l=e.child,n=null,l.alternate!==null&&l.alternate.memoizedState!==null&&l.alternate.memoizedState.cachePool!==null&&(n=l.alternate.memoizedState.cachePool.pool),i=null,l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(i=l.memoizedState.cachePool.pool),i!==n&&(l.flags|=2048)),a!==t&&a&&(e.child.flags|=8192),Li(e,e.updateQueue),jt(e),null);case 4:return Qt(),t===null&&Or(e.stateNode.containerInfo),jt(e),null;case 10:return ha(e.type),jt(e),null;case 19:if(R(Gt),l=e.memoizedState,l===null)return jt(e),null;if(n=(e.flags&128)!==0,i=l.rendering,i===null)if(n)Eu(l,!1);else{if(qt!==0||t!==null&&(t.flags&128)!==0)for(t=e.child;t!==null;){if(i=Ni(t),i!==null){for(e.flags|=128,Eu(l,!1),t=i.updateQueue,e.updateQueue=t,Li(e,t),e.subtreeFlags=0,t=a,a=e.child;a!==null;)Oo(a,t),a=a.sibling;return q(Gt,Gt.current&1|2),ht&&oa(e,l.treeForkCount),e.child}t=t.sibling}l.tail!==null&&Oe()>Ji&&(e.flags|=128,n=!0,Eu(l,!1),e.lanes=4194304)}else{if(!n)if(t=Ni(i),t!==null){if(e.flags|=128,n=!0,t=t.updateQueue,e.updateQueue=t,Li(e,t),Eu(l,!0),l.tail===null&&l.tailMode==="hidden"&&!i.alternate&&!ht)return jt(e),null}else 2*Oe()-l.renderingStartTime>Ji&&a!==536870912&&(e.flags|=128,n=!0,Eu(l,!1),e.lanes=4194304);l.isBackwards?(i.sibling=e.child,e.child=i):(t=l.last,t!==null?t.sibling=i:e.child=i,l.last=i)}return l.tail!==null?(t=l.tail,l.rendering=t,l.tail=t.sibling,l.renderingStartTime=Oe(),t.sibling=null,a=Gt.current,q(Gt,n?a&1|2:a&1),ht&&oa(e,l.treeForkCount),t):(jt(e),null);case 22:case 23:return Ne(e),Es(),l=e.memoizedState!==null,t!==null?t.memoizedState!==null!==l&&(e.flags|=8192):l&&(e.flags|=8192),l?(a&536870912)!==0&&(e.flags&128)===0&&(jt(e),e.subtreeFlags&6&&(e.flags|=8192)):jt(e),a=e.updateQueue,a!==null&&Li(e,a.retryQueue),a=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(a=t.memoizedState.cachePool.pool),l=null,e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(l=e.memoizedState.cachePool.pool),l!==a&&(e.flags|=2048),t!==null&&R(Dl),null;case 24:return a=null,t!==null&&(a=t.memoizedState.cache),e.memoizedState.cache!==a&&(e.flags|=2048),ha(Lt),jt(e),null;case 25:return null;case 30:return null}throw Error(r(156,e.tag))}function hv(t,e){switch(rs(e),e.tag){case 1:return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 3:return ha(Lt),Qt(),t=e.flags,(t&65536)!==0&&(t&128)===0?(e.flags=t&-65537|128,e):null;case 26:case 27:case 5:return Iu(e),null;case 31:if(e.memoizedState!==null){if(Ne(e),e.alternate===null)throw Error(r(340));Ol()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 13:if(Ne(e),t=e.memoizedState,t!==null&&t.dehydrated!==null){if(e.alternate===null)throw Error(r(340));Ol()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 19:return R(Gt),null;case 4:return Qt(),null;case 10:return ha(e.type),null;case 22:case 23:return Ne(e),Es(),t!==null&&R(Dl),t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 24:return ha(Lt),null;case 25:return null;default:return null}}function Fd(t,e){switch(rs(e),e.tag){case 3:ha(Lt),Qt();break;case 26:case 27:case 5:Iu(e);break;case 4:Qt();break;case 31:e.memoizedState!==null&&Ne(e);break;case 13:Ne(e);break;case 19:R(Gt);break;case 10:ha(e.type);break;case 22:case 23:Ne(e),Es(),t!==null&&R(Dl);break;case 24:ha(Lt)}}function xu(t,e){try{var a=e.updateQueue,l=a!==null?a.lastEffect:null;if(l!==null){var n=l.next;a=n;do{if((a.tag&t)===t){l=void 0;var i=a.create,f=a.inst;l=i(),f.destroy=l}a=a.next}while(a!==n)}}catch(o){Et(e,e.return,o)}}function Xa(t,e,a){try{var l=e.updateQueue,n=l!==null?l.lastEffect:null;if(n!==null){var i=n.next;l=i;do{if((l.tag&t)===t){var f=l.inst,o=f.destroy;if(o!==void 0){f.destroy=void 0,n=e;var h=a,T=o;try{T()}catch(z){Et(n,h,z)}}}l=l.next}while(l!==i)}}catch(z){Et(e,e.return,z)}}function $d(t){var e=t.updateQueue;if(e!==null){var a=t.stateNode;try{Bo(e,a)}catch(l){Et(t,t.return,l)}}}function Pd(t,e,a){a.props=Cl(t.type,t.memoizedProps),a.state=t.memoizedState;try{a.componentWillUnmount()}catch(l){Et(t,e,l)}}function Du(t,e){try{var a=t.ref;if(a!==null){switch(t.tag){case 26:case 27:case 5:var l=t.stateNode;break;case 30:l=t.stateNode;break;default:l=t.stateNode}typeof a=="function"?t.refCleanup=a(l):a.current=l}}catch(n){Et(t,e,n)}}function ta(t,e){var a=t.ref,l=t.refCleanup;if(a!==null)if(typeof l=="function")try{l()}catch(n){Et(t,e,n)}finally{t.refCleanup=null,t=t.alternate,t!=null&&(t.refCleanup=null)}else if(typeof a=="function")try{a(null)}catch(n){Et(t,e,n)}else a.current=null}function Id(t){var e=t.type,a=t.memoizedProps,l=t.stateNode;try{t:switch(e){case"button":case"input":case"select":case"textarea":a.autoFocus&&l.focus();break t;case"img":a.src?l.src=a.src:a.srcSet&&(l.srcset=a.srcSet)}}catch(n){Et(t,t.return,n)}}function ar(t,e,a){try{var l=t.stateNode;wv(l,t.type,a,e),l[me]=e}catch(n){Et(t,t.return,n)}}function th(t){return t.tag===5||t.tag===3||t.tag===26||t.tag===27&&Fa(t.type)||t.tag===4}function lr(t){t:for(;;){for(;t.sibling===null;){if(t.return===null||th(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.tag===27&&Fa(t.type)||t.flags&2||t.child===null||t.tag===4)continue t;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function nr(t,e,a){var l=t.tag;if(l===5||l===6)t=t.stateNode,e?(a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a).insertBefore(t,e):(e=a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a,e.appendChild(t),a=a._reactRootContainer,a!=null||e.onclick!==null||(e.onclick=sa));else if(l!==4&&(l===27&&Fa(t.type)&&(a=t.stateNode,e=null),t=t.child,t!==null))for(nr(t,e,a),t=t.sibling;t!==null;)nr(t,e,a),t=t.sibling}function Xi(t,e,a){var l=t.tag;if(l===5||l===6)t=t.stateNode,e?a.insertBefore(t,e):a.appendChild(t);else if(l!==4&&(l===27&&Fa(t.type)&&(a=t.stateNode),t=t.child,t!==null))for(Xi(t,e,a),t=t.sibling;t!==null;)Xi(t,e,a),t=t.sibling}function eh(t){var e=t.stateNode,a=t.memoizedProps;try{for(var l=t.type,n=e.attributes;n.length;)e.removeAttributeNode(n[0]);le(e,l,a),e[It]=t,e[me]=a}catch(i){Et(t,t.return,i)}}var ba=!1,Vt=!1,ur=!1,ah=typeof WeakSet=="function"?WeakSet:Set,$t=null;function mv(t,e){if(t=t.containerInfo,Dr=fc,t=mo(t),Pc(t)){if("selectionStart"in t)var a={start:t.selectionStart,end:t.selectionEnd};else t:{a=(a=t.ownerDocument)&&a.defaultView||window;var l=a.getSelection&&a.getSelection();if(l&&l.rangeCount!==0){a=l.anchorNode;var n=l.anchorOffset,i=l.focusNode;l=l.focusOffset;try{a.nodeType,i.nodeType}catch{a=null;break t}var f=0,o=-1,h=-1,T=0,z=0,C=t,M=null;e:for(;;){for(var D;C!==a||n!==0&&C.nodeType!==3||(o=f+n),C!==i||l!==0&&C.nodeType!==3||(h=f+l),C.nodeType===3&&(f+=C.nodeValue.length),(D=C.firstChild)!==null;)M=C,C=D;for(;;){if(C===t)break e;if(M===a&&++T===n&&(o=f),M===i&&++z===l&&(h=f),(D=C.nextSibling)!==null)break;C=M,M=C.parentNode}C=D}a=o===-1||h===-1?null:{start:o,end:h}}else a=null}a=a||{start:0,end:0}}else a=null;for(zr={focusedElem:t,selectionRange:a},fc=!1,$t=e;$t!==null;)if(e=$t,t=e.child,(e.subtreeFlags&1028)!==0&&t!==null)t.return=e,$t=t;else for(;$t!==null;){switch(e=$t,i=e.alternate,t=e.flags,e.tag){case 0:if((t&4)!==0&&(t=e.updateQueue,t=t!==null?t.events:null,t!==null))for(a=0;a title"))),le(i,l,a),i[It]=t,Ft(i),l=i;break t;case"link":var f=sm("link","href",n).get(l+(a.href||""));if(f){for(var o=0;o_t&&(f=_t,_t=k,k=f);var S=oo(o,k),v=oo(o,_t);if(S&&v&&(D.rangeCount!==1||D.anchorNode!==S.node||D.anchorOffset!==S.offset||D.focusNode!==v.node||D.focusOffset!==v.offset)){var p=C.createRange();p.setStart(S.node,S.offset),D.removeAllRanges(),k>_t?(D.addRange(p),D.extend(v.node,v.offset)):(p.setEnd(v.node,v.offset),D.addRange(p))}}}}for(C=[],D=o;D=D.parentNode;)D.nodeType===1&&C.push({element:D,left:D.scrollLeft,top:D.scrollTop});for(typeof o.focus=="function"&&o.focus(),o=0;oa?32:a,A.T=null,a=dr,dr=null;var i=Ja,f=Oa;if(Wt=0,Dn=Ja=null,Oa=0,(St&6)!==0)throw Error(r(331));var o=St;if(St|=4,hh(i.current),fh(i,i.current,f,a),St=o,Uu(0,!1),Ee&&typeof Ee.onPostCommitFiberRoot=="function")try{Ee.onPostCommitFiberRoot(Fn,i)}catch{}return!0}finally{w.p=n,A.T=l,Ch(t,e)}}function Rh(t,e,a){e=He(a,e),e=Vs(t.stateNode,e,2),t=Ga(t,e,2),t!==null&&(Pn(t,2),ea(t))}function Et(t,e,a){if(t.tag===3)Rh(t,t,a);else for(;e!==null;){if(e.tag===3){Rh(e,t,a);break}else if(e.tag===1){var l=e.stateNode;if(typeof e.type.getDerivedStateFromError=="function"||typeof l.componentDidCatch=="function"&&(Ka===null||!Ka.has(l))){t=He(a,t),a=jd(2),l=Ga(e,a,2),l!==null&&(wd(a,l,e,t),Pn(l,2),ea(l));break}}e=e.return}}function vr(t,e,a){var l=t.pingCache;if(l===null){l=t.pingCache=new gv;var n=new Set;l.set(e,n)}else n=l.get(e),n===void 0&&(n=new Set,l.set(e,n));n.has(a)||(sr=!0,n.add(a),t=Mv.bind(null,t,e,a),e.then(t,t))}function Mv(t,e,a){var l=t.pingCache;l!==null&&l.delete(e),t.pingedLanes|=t.suspendedLanes&a,t.warmLanes&=~a,Ut===t&&(ot&a)===a&&(qt===4||qt===3&&(ot&62914560)===ot&&300>Oe()-Ki?(St&2)===0&&zn(t,0):rr|=a,xn===ot&&(xn=0)),ea(t)}function jh(t,e){e===0&&(e=zf()),t=Tl(t,e),t!==null&&(Pn(t,e),ea(t))}function Ov(t){var e=t.memoizedState,a=0;e!==null&&(a=e.retryLane),jh(t,a)}function Ev(t,e){var a=0;switch(t.tag){case 31:case 13:var l=t.stateNode,n=t.memoizedState;n!==null&&(a=n.retryLane);break;case 19:l=t.stateNode;break;case 22:l=t.stateNode._retryCache;break;default:throw Error(r(314))}l!==null&&l.delete(e),jh(t,a)}function xv(t,e){return Nc(t,e)}var Ii=null,Nn=null,gr=!1,tc=!1,br=!1,ka=0;function ea(t){t!==Nn&&t.next===null&&(Nn===null?Ii=Nn=t:Nn=Nn.next=t),tc=!0,gr||(gr=!0,zv())}function Uu(t,e){if(!br&&tc){br=!0;do for(var a=!1,l=Ii;l!==null;){if(t!==0){var n=l.pendingLanes;if(n===0)var i=0;else{var f=l.suspendedLanes,o=l.pingedLanes;i=(1<<31-xe(42|t)+1)-1,i&=n&~(f&~o),i=i&201326741?i&201326741|1:i?i|2:0}i!==0&&(a=!0,Yh(l,i))}else i=ot,i=ni(l,l===Ut?i:0,l.cancelPendingCommit!==null||l.timeoutHandle!==-1),(i&3)===0||$n(l,i)||(a=!0,Yh(l,i));l=l.next}while(a);br=!1}}function Dv(){wh()}function wh(){tc=gr=!1;var t=0;ka!==0&&qv()&&(t=ka);for(var e=Oe(),a=null,l=Ii;l!==null;){var n=l.next,i=Hh(l,e);i===0?(l.next=null,a===null?Ii=n:a.next=n,n===null&&(Nn=a)):(a=l,(t!==0||(i&3)!==0)&&(tc=!0)),l=n}Wt!==0&&Wt!==5||Uu(t),ka!==0&&(ka=0)}function Hh(t,e){for(var a=t.suspendedLanes,l=t.pingedLanes,n=t.expirationTimes,i=t.pendingLanes&-62914561;0o)break;var z=h.transferSize,C=h.initiatorType;z&&Kh(C)&&(h=h.responseEnd,f+=z*(h"u"?null:document;function nm(t,e,a){var l=_n;if(l&&typeof e=="string"&&e){var n=je(e);n='link[rel="'+t+'"][href="'+n+'"]',typeof a=="string"&&(n+='[crossorigin="'+a+'"]'),lm.has(n)||(lm.add(n),t={rel:t,crossOrigin:a,href:e},l.querySelector(n)===null&&(e=l.createElement("link"),le(e,"link",t),Ft(e),l.head.appendChild(e)))}}function Kv(t){Ea.D(t),nm("dns-prefetch",t,null)}function Jv(t,e){Ea.C(t,e),nm("preconnect",t,e)}function Wv(t,e,a){Ea.L(t,e,a);var l=_n;if(l&&t&&e){var n='link[rel="preload"][as="'+je(e)+'"]';e==="image"&&a&&a.imageSrcSet?(n+='[imagesrcset="'+je(a.imageSrcSet)+'"]',typeof a.imageSizes=="string"&&(n+='[imagesizes="'+je(a.imageSizes)+'"]')):n+='[href="'+je(t)+'"]';var i=n;switch(e){case"style":i=Cn(t);break;case"script":i=Un(t)}Le.has(i)||(t=_({rel:"preload",href:e==="image"&&a&&a.imageSrcSet?void 0:t,as:e},a),Le.set(i,t),l.querySelector(n)!==null||e==="style"&&l.querySelector(Hu(i))||e==="script"&&l.querySelector(qu(i))||(e=l.createElement("link"),le(e,"link",t),Ft(e),l.head.appendChild(e)))}}function kv(t,e){Ea.m(t,e);var a=_n;if(a&&t){var l=e&&typeof e.as=="string"?e.as:"script",n='link[rel="modulepreload"][as="'+je(l)+'"][href="'+je(t)+'"]',i=n;switch(l){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":i=Un(t)}if(!Le.has(i)&&(t=_({rel:"modulepreload",href:t},e),Le.set(i,t),a.querySelector(n)===null)){switch(l){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(a.querySelector(qu(i)))return}l=a.createElement("link"),le(l,"link",t),Ft(l),a.head.appendChild(l)}}}function Fv(t,e,a){Ea.S(t,e,a);var l=_n;if(l&&t){var n=Pl(l).hoistableStyles,i=Cn(t);e=e||"default";var f=n.get(i);if(!f){var o={loading:0,preload:null};if(f=l.querySelector(Hu(i)))o.loading=5;else{t=_({rel:"stylesheet",href:t,"data-precedence":e},a),(a=Le.get(i))&&jr(t,a);var h=f=l.createElement("link");Ft(h),le(h,"link",t),h._p=new Promise(function(T,z){h.onload=T,h.onerror=z}),h.addEventListener("load",function(){o.loading|=1}),h.addEventListener("error",function(){o.loading|=2}),o.loading|=4,uc(f,e,l)}f={type:"stylesheet",instance:f,count:1,state:o},n.set(i,f)}}}function $v(t,e){Ea.X(t,e);var a=_n;if(a&&t){var l=Pl(a).hoistableScripts,n=Un(t),i=l.get(n);i||(i=a.querySelector(qu(n)),i||(t=_({src:t,async:!0},e),(e=Le.get(n))&&wr(t,e),i=a.createElement("script"),Ft(i),le(i,"link",t),a.head.appendChild(i)),i={type:"script",instance:i,count:1,state:null},l.set(n,i))}}function Pv(t,e){Ea.M(t,e);var a=_n;if(a&&t){var l=Pl(a).hoistableScripts,n=Un(t),i=l.get(n);i||(i=a.querySelector(qu(n)),i||(t=_({src:t,async:!0,type:"module"},e),(e=Le.get(n))&&wr(t,e),i=a.createElement("script"),Ft(i),le(i,"link",t),a.head.appendChild(i)),i={type:"script",instance:i,count:1,state:null},l.set(n,i))}}function um(t,e,a,l){var n=(n=st.current)?nc(n):null;if(!n)throw Error(r(446));switch(t){case"meta":case"title":return null;case"style":return typeof a.precedence=="string"&&typeof a.href=="string"?(e=Cn(a.href),a=Pl(n).hoistableStyles,l=a.get(e),l||(l={type:"style",instance:null,count:0,state:null},a.set(e,l)),l):{type:"void",instance:null,count:0,state:null};case"link":if(a.rel==="stylesheet"&&typeof a.href=="string"&&typeof a.precedence=="string"){t=Cn(a.href);var i=Pl(n).hoistableStyles,f=i.get(t);if(f||(n=n.ownerDocument||n,f={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},i.set(t,f),(i=n.querySelector(Hu(t)))&&!i._p&&(f.instance=i,f.state.loading=5),Le.has(t)||(a={rel:"preload",as:"style",href:a.href,crossOrigin:a.crossOrigin,integrity:a.integrity,media:a.media,hrefLang:a.hrefLang,referrerPolicy:a.referrerPolicy},Le.set(t,a),i||Iv(n,t,a,f.state))),e&&l===null)throw Error(r(528,""));return f}if(e&&l!==null)throw Error(r(529,""));return null;case"script":return e=a.async,a=a.src,typeof a=="string"&&e&&typeof e!="function"&&typeof e!="symbol"?(e=Un(a),a=Pl(n).hoistableScripts,l=a.get(e),l||(l={type:"script",instance:null,count:0,state:null},a.set(e,l)),l):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,t))}}function Cn(t){return'href="'+je(t)+'"'}function Hu(t){return'link[rel="stylesheet"]['+t+"]"}function im(t){return _({},t,{"data-precedence":t.precedence,precedence:null})}function Iv(t,e,a,l){t.querySelector('link[rel="preload"][as="style"]['+e+"]")?l.loading=1:(e=t.createElement("link"),l.preload=e,e.addEventListener("load",function(){return l.loading|=1}),e.addEventListener("error",function(){return l.loading|=2}),le(e,"link",a),Ft(e),t.head.appendChild(e))}function Un(t){return'[src="'+je(t)+'"]'}function qu(t){return"script[async]"+t}function cm(t,e,a){if(e.count++,e.instance===null)switch(e.type){case"style":var l=t.querySelector('style[data-href~="'+je(a.href)+'"]');if(l)return e.instance=l,Ft(l),l;var n=_({},a,{"data-href":a.href,"data-precedence":a.precedence,href:null,precedence:null});return l=(t.ownerDocument||t).createElement("style"),Ft(l),le(l,"style",n),uc(l,a.precedence,t),e.instance=l;case"stylesheet":n=Cn(a.href);var i=t.querySelector(Hu(n));if(i)return e.state.loading|=4,e.instance=i,Ft(i),i;l=im(a),(n=Le.get(n))&&jr(l,n),i=(t.ownerDocument||t).createElement("link"),Ft(i);var f=i;return f._p=new Promise(function(o,h){f.onload=o,f.onerror=h}),le(i,"link",l),e.state.loading|=4,uc(i,a.precedence,t),e.instance=i;case"script":return i=Un(a.src),(n=t.querySelector(qu(i)))?(e.instance=n,Ft(n),n):(l=a,(n=Le.get(i))&&(l=_({},a),wr(l,n)),t=t.ownerDocument||t,n=t.createElement("script"),Ft(n),le(n,"link",l),t.head.appendChild(n),e.instance=n);case"void":return null;default:throw Error(r(443,e.type))}else e.type==="stylesheet"&&(e.state.loading&4)===0&&(l=e.instance,e.state.loading|=4,uc(l,a.precedence,t));return e.instance}function uc(t,e,a){for(var l=a.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),n=l.length?l[l.length-1]:null,i=n,f=0;f title"):null)}function tg(t,e,a){if(a===1||e.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof e.precedence!="string"||typeof e.href!="string"||e.href==="")break;return!0;case"link":if(typeof e.rel!="string"||typeof e.href!="string"||e.href===""||e.onLoad||e.onError)break;switch(e.rel){case"stylesheet":return t=e.disabled,typeof e.precedence=="string"&&t==null;default:return!0}case"script":if(e.async&&typeof e.async!="function"&&typeof e.async!="symbol"&&!e.onLoad&&!e.onError&&e.src&&typeof e.src=="string")return!0}return!1}function fm(t){return!(t.type==="stylesheet"&&(t.state.loading&3)===0)}function eg(t,e,a,l){if(a.type==="stylesheet"&&(typeof l.media!="string"||matchMedia(l.media).matches!==!1)&&(a.state.loading&4)===0){if(a.instance===null){var n=Cn(l.href),i=e.querySelector(Hu(n));if(i){e=i._p,e!==null&&typeof e=="object"&&typeof e.then=="function"&&(t.count++,t=cc.bind(t),e.then(t,t)),a.state.loading|=4,a.instance=i,Ft(i);return}i=e.ownerDocument||e,l=im(l),(n=Le.get(n))&&jr(l,n),i=i.createElement("link"),Ft(i);var f=i;f._p=new Promise(function(o,h){f.onload=o,f.onerror=h}),le(i,"link",l),a.instance=i}t.stylesheets===null&&(t.stylesheets=new Map),t.stylesheets.set(a,e),(e=a.state.preload)&&(a.state.loading&3)===0&&(t.count++,a=cc.bind(t),e.addEventListener("load",a),e.addEventListener("error",a))}}var Hr=0;function ag(t,e){return t.stylesheets&&t.count===0&&rc(t,t.stylesheets),0Hr?50:800)+e);return t.unsuspend=a,function(){t.unsuspend=null,clearTimeout(l),clearTimeout(n)}}:null}function cc(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)rc(this,this.stylesheets);else if(this.unsuspend){var t=this.unsuspend;this.unsuspend=null,t()}}}var sc=null;function rc(t,e){t.stylesheets=null,t.unsuspend!==null&&(t.count++,sc=new Map,e.forEach(lg,t),sc=null,cc.call(t))}function lg(t,e){if(!(e.state.loading&4)){var a=sc.get(t);if(a)var l=a.get(null);else{a=new Map,sc.set(t,a);for(var n=t.querySelectorAll("link[data-precedence],style[data-precedence]"),i=0;i"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(c)}catch(u){console.error(u)}}return c(),Kr.exports=pg(),Kr.exports}var Mg=Tg();const Og=vy(Mg);var Wn=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(c){return this.listeners.add(c),this.onSubscribe(),()=>{this.listeners.delete(c),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},Eg={setTimeout:(c,u)=>setTimeout(c,u),clearTimeout:c=>clearTimeout(c),setInterval:(c,u)=>setInterval(c,u),clearInterval:c=>clearInterval(c)},nl,hf,uy,xg=(uy=class{constructor(){J(this,nl,Eg);J(this,hf,!1)}setTimeoutProvider(c){Y(this,nl,c)}setTimeout(c,u){return m(this,nl).setTimeout(c,u)}clearTimeout(c){m(this,nl).clearTimeout(c)}setInterval(c,u){return m(this,nl).setInterval(c,u)}clearInterval(c){m(this,nl).clearInterval(c)}},nl=new WeakMap,hf=new WeakMap,uy),wl=new xg;function Dg(c){setTimeout(c,0)}var Kl=typeof window>"u"||"Deno"in globalThis;function de(){}function zg(c,u){return typeof c=="function"?c(u):c}function Pr(c){return typeof c=="number"&&c>=0&&c!==1/0}function gy(c,u){return Math.max(c+(u||0)-Date.now(),0)}function hl(c,u){return typeof c=="function"?c(u):c}function Ze(c,u){return typeof c=="function"?c(u):c}function wm(c,u){const{type:s="all",exact:r,fetchStatus:d,predicate:y,queryKey:O,stale:E}=c;if(O){if(r){if(u.queryHash!==yf(O,u.options))return!1}else if(!Ju(u.queryKey,O))return!1}if(s!=="all"){const x=u.isActive();if(s==="active"&&!x||s==="inactive"&&x)return!1}return!(typeof E=="boolean"&&u.isStale()!==E||d&&d!==u.state.fetchStatus||y&&!y(u))}function Hm(c,u){const{exact:s,status:r,predicate:d,mutationKey:y}=c;if(y){if(!u.options.mutationKey)return!1;if(s){if(Jl(u.options.mutationKey)!==Jl(y))return!1}else if(!Ju(u.options.mutationKey,y))return!1}return!(r&&u.state.status!==r||d&&!d(u))}function yf(c,u){return((u==null?void 0:u.queryKeyHashFn)||Jl)(c)}function Jl(c){return JSON.stringify(c,(u,s)=>Ir(s)?Object.keys(s).sort().reduce((r,d)=>(r[d]=s[d],r),{}):s)}function Ju(c,u){return c===u?!0:typeof c!=typeof u?!1:c&&u&&typeof c=="object"&&typeof u=="object"?Object.keys(u).every(s=>Ju(c[s],u[s])):!1}var Ag=Object.prototype.hasOwnProperty;function by(c,u,s=0){if(c===u)return c;if(s>500)return u;const r=qm(c)&&qm(u);if(!r&&!(Ir(c)&&Ir(u)))return u;const y=(r?c:Object.keys(c)).length,O=r?u:Object.keys(u),E=O.length,x=r?new Array(E):{};let b=0;for(let j=0;j{wl.setTimeout(u,c)})}function tf(c,u,s){return typeof s.structuralSharing=="function"?s.structuralSharing(c,u):s.structuralSharing!==!1?by(c,u):u}function _g(c,u,s=0){const r=[...c,u];return s&&r.length>s?r.slice(1):r}function Cg(c,u,s=0){const r=[u,...c];return s&&r.length>s?r.slice(0,-1):r}var vf=Symbol();function Sy(c,u){return!c.queryFn&&(u!=null&&u.initialPromise)?()=>u.initialPromise:!c.queryFn||c.queryFn===vf?()=>Promise.reject(new Error(`Missing queryFn: '${c.queryHash}'`)):c.queryFn}function gf(c,u){return typeof c=="function"?c(...u):!!c}function Ug(c,u,s){let r=!1,d;return Object.defineProperty(c,"signal",{enumerable:!0,get:()=>(d??(d=u()),r||(r=!0,d.aborted?s():d.addEventListener("abort",s,{once:!0})),d)}),c}var ql,ul,Hn,iy,Rg=(iy=class extends Wn{constructor(){super();J(this,ql);J(this,ul);J(this,Hn);Y(this,Hn,u=>{if(!Kl&&window.addEventListener){const s=()=>u();return window.addEventListener("visibilitychange",s,!1),()=>{window.removeEventListener("visibilitychange",s)}}})}onSubscribe(){m(this,ul)||this.setEventListener(m(this,Hn))}onUnsubscribe(){var u;this.hasListeners()||((u=m(this,ul))==null||u.call(this),Y(this,ul,void 0))}setEventListener(u){var s;Y(this,Hn,u),(s=m(this,ul))==null||s.call(this),Y(this,ul,u(r=>{typeof r=="boolean"?this.setFocused(r):this.onFocus()}))}setFocused(u){m(this,ql)!==u&&(Y(this,ql,u),this.onFocus())}onFocus(){const u=this.isFocused();this.listeners.forEach(s=>{s(u)})}isFocused(){var u;return typeof m(this,ql)=="boolean"?m(this,ql):((u=globalThis.document)==null?void 0:u.visibilityState)!=="hidden"}},ql=new WeakMap,ul=new WeakMap,Hn=new WeakMap,iy),bf=new Rg;function ef(){let c,u;const s=new Promise((d,y)=>{c=d,u=y});s.status="pending",s.catch(()=>{});function r(d){Object.assign(s,d),delete s.resolve,delete s.reject}return s.resolve=d=>{r({status:"fulfilled",value:d}),c(d)},s.reject=d=>{r({status:"rejected",reason:d}),u(d)},s}var jg=Dg;function wg(){let c=[],u=0,s=E=>{E()},r=E=>{E()},d=jg;const y=E=>{u?c.push(E):d(()=>{s(E)})},O=()=>{const E=c;c=[],E.length&&d(()=>{r(()=>{E.forEach(x=>{s(x)})})})};return{batch:E=>{let x;u++;try{x=E()}finally{u--,u||O()}return x},batchCalls:E=>(...x)=>{y(()=>{E(...x)})},schedule:y,setNotifyFunction:E=>{s=E},setBatchNotifyFunction:E=>{r=E},setScheduler:E=>{d=E}}}var kt=wg(),qn,il,Yn,cy,Hg=(cy=class extends Wn{constructor(){super();J(this,qn,!0);J(this,il);J(this,Yn);Y(this,Yn,u=>{if(!Kl&&window.addEventListener){const s=()=>u(!0),r=()=>u(!1);return window.addEventListener("online",s,!1),window.addEventListener("offline",r,!1),()=>{window.removeEventListener("online",s),window.removeEventListener("offline",r)}}})}onSubscribe(){m(this,il)||this.setEventListener(m(this,Yn))}onUnsubscribe(){var u;this.hasListeners()||((u=m(this,il))==null||u.call(this),Y(this,il,void 0))}setEventListener(u){var s;Y(this,Yn,u),(s=m(this,il))==null||s.call(this),Y(this,il,u(this.setOnline.bind(this)))}setOnline(u){m(this,qn)!==u&&(Y(this,qn,u),this.listeners.forEach(r=>{r(u)}))}isOnline(){return m(this,qn)}},qn=new WeakMap,il=new WeakMap,Yn=new WeakMap,cy),Mc=new Hg;function qg(c){return Math.min(1e3*2**c,3e4)}function py(c){return(c??"online")==="online"?Mc.isOnline():!0}var af=class extends Error{constructor(c){super("CancelledError"),this.revert=c==null?void 0:c.revert,this.silent=c==null?void 0:c.silent}};function Ty(c){let u=!1,s=0,r;const d=ef(),y=()=>d.status!=="pending",O=L=>{var F;if(!y()){const P=new af(L);H(P),(F=c.onCancel)==null||F.call(c,P)}},E=()=>{u=!0},x=()=>{u=!1},b=()=>bf.isFocused()&&(c.networkMode==="always"||Mc.isOnline())&&c.canRun(),j=()=>py(c.networkMode)&&c.canRun(),_=L=>{y()||(r==null||r(),d.resolve(L))},H=L=>{y()||(r==null||r(),d.reject(L))},Q=()=>new Promise(L=>{var F;r=P=>{(y()||b())&&L(P)},(F=c.onPause)==null||F.call(c)}).then(()=>{var L;r=void 0,y()||(L=c.onContinue)==null||L.call(c)}),G=()=>{if(y())return;let L;const F=s===0?c.initialPromise:void 0;try{L=F??c.fn()}catch(P){L=Promise.reject(P)}Promise.resolve(L).then(_).catch(P=>{var Mt;if(y())return;const et=c.retry??(Kl?0:3),K=c.retryDelay??qg,B=typeof K=="function"?K(s,P):K,bt=et===!0||typeof et=="number"&&sb()?void 0:Q()).then(()=>{u?H(P):G()})})};return{promise:d,status:()=>d.status,cancel:O,continue:()=>(r==null||r(),d),cancelRetry:E,continueRetry:x,canStart:j,start:()=>(j()?G():Q().then(G),d)}}var Yl,sy,My=(sy=class{constructor(){J(this,Yl)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),Pr(this.gcTime)&&Y(this,Yl,wl.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(c){this.gcTime=Math.max(this.gcTime||0,c??(Kl?1/0:300*1e3))}clearGcTimeout(){m(this,Yl)&&(wl.clearTimeout(m(this,Yl)),Y(this,Yl,void 0))}},Yl=new WeakMap,sy),Ql,Qn,Xe,Gl,Pt,Wu,Bl,We,xa,ry,Yg=(ry=class extends My{constructor(u){super();J(this,We);J(this,Ql);J(this,Qn);J(this,Xe);J(this,Gl);J(this,Pt);J(this,Wu);J(this,Bl);Y(this,Bl,!1),Y(this,Wu,u.defaultOptions),this.setOptions(u.options),this.observers=[],Y(this,Gl,u.client),Y(this,Xe,m(this,Gl).getQueryCache()),this.queryKey=u.queryKey,this.queryHash=u.queryHash,Y(this,Ql,Gm(this.options)),this.state=u.state??m(this,Ql),this.scheduleGc()}get meta(){return this.options.meta}get promise(){var u;return(u=m(this,Pt))==null?void 0:u.promise}setOptions(u){if(this.options={...m(this,Wu),...u},this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){const s=Gm(this.options);s.data!==void 0&&(this.setState(Qm(s.data,s.dataUpdatedAt)),Y(this,Ql,s))}}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&m(this,Xe).remove(this)}setData(u,s){const r=tf(this.state.data,u,this.options);return ut(this,We,xa).call(this,{data:r,type:"success",dataUpdatedAt:s==null?void 0:s.updatedAt,manual:s==null?void 0:s.manual}),r}setState(u,s){ut(this,We,xa).call(this,{type:"setState",state:u,setStateOptions:s})}cancel(u){var r,d;const s=(r=m(this,Pt))==null?void 0:r.promise;return(d=m(this,Pt))==null||d.cancel(u),s?s.then(de).catch(de):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(m(this,Ql))}isActive(){return this.observers.some(u=>Ze(u.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===vf||this.state.dataUpdateCount+this.state.errorUpdateCount===0}isStatic(){return this.getObserversCount()>0?this.observers.some(u=>hl(u.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(u=>u.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(u=0){return this.state.data===void 0?!0:u==="static"?!1:this.state.isInvalidated?!0:!gy(this.state.dataUpdatedAt,u)}onFocus(){var s;const u=this.observers.find(r=>r.shouldFetchOnWindowFocus());u==null||u.refetch({cancelRefetch:!1}),(s=m(this,Pt))==null||s.continue()}onOnline(){var s;const u=this.observers.find(r=>r.shouldFetchOnReconnect());u==null||u.refetch({cancelRefetch:!1}),(s=m(this,Pt))==null||s.continue()}addObserver(u){this.observers.includes(u)||(this.observers.push(u),this.clearGcTimeout(),m(this,Xe).notify({type:"observerAdded",query:this,observer:u}))}removeObserver(u){this.observers.includes(u)&&(this.observers=this.observers.filter(s=>s!==u),this.observers.length||(m(this,Pt)&&(m(this,Bl)?m(this,Pt).cancel({revert:!0}):m(this,Pt).cancelRetry()),this.scheduleGc()),m(this,Xe).notify({type:"observerRemoved",query:this,observer:u}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||ut(this,We,xa).call(this,{type:"invalidate"})}async fetch(u,s){var x,b,j,_,H,Q,G,L,F,P,et,K;if(this.state.fetchStatus!=="idle"&&((x=m(this,Pt))==null?void 0:x.status())!=="rejected"){if(this.state.data!==void 0&&(s!=null&&s.cancelRefetch))this.cancel({silent:!0});else if(m(this,Pt))return m(this,Pt).continueRetry(),m(this,Pt).promise}if(u&&this.setOptions(u),!this.options.queryFn){const B=this.observers.find(bt=>bt.options.queryFn);B&&this.setOptions(B.options)}const r=new AbortController,d=B=>{Object.defineProperty(B,"signal",{enumerable:!0,get:()=>(Y(this,Bl,!0),r.signal)})},y=()=>{const B=Sy(this.options,s),Mt=(()=>{const I={client:m(this,Gl),queryKey:this.queryKey,meta:this.meta};return d(I),I})();return Y(this,Bl,!1),this.options.persister?this.options.persister(B,Mt,this):B(Mt)},E=(()=>{const B={fetchOptions:s,options:this.options,queryKey:this.queryKey,client:m(this,Gl),state:this.state,fetchFn:y};return d(B),B})();(b=this.options.behavior)==null||b.onFetch(E,this),Y(this,Qn,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((j=E.fetchOptions)==null?void 0:j.meta))&&ut(this,We,xa).call(this,{type:"fetch",meta:(_=E.fetchOptions)==null?void 0:_.meta}),Y(this,Pt,Ty({initialPromise:s==null?void 0:s.initialPromise,fn:E.fetchFn,onCancel:B=>{B instanceof af&&B.revert&&this.setState({...m(this,Qn),fetchStatus:"idle"}),r.abort()},onFail:(B,bt)=>{ut(this,We,xa).call(this,{type:"failed",failureCount:B,error:bt})},onPause:()=>{ut(this,We,xa).call(this,{type:"pause"})},onContinue:()=>{ut(this,We,xa).call(this,{type:"continue"})},retry:E.options.retry,retryDelay:E.options.retryDelay,networkMode:E.options.networkMode,canRun:()=>!0}));try{const B=await m(this,Pt).start();if(B===void 0)throw new Error(`${this.queryHash} data is undefined`);return this.setData(B),(Q=(H=m(this,Xe).config).onSuccess)==null||Q.call(H,B,this),(L=(G=m(this,Xe).config).onSettled)==null||L.call(G,B,this.state.error,this),B}catch(B){if(B instanceof af){if(B.silent)return m(this,Pt).promise;if(B.revert){if(this.state.data===void 0)throw B;return this.state.data}}throw ut(this,We,xa).call(this,{type:"error",error:B}),(P=(F=m(this,Xe).config).onError)==null||P.call(F,B,this),(K=(et=m(this,Xe).config).onSettled)==null||K.call(et,this.state.data,B,this),B}finally{this.scheduleGc()}}},Ql=new WeakMap,Qn=new WeakMap,Xe=new WeakMap,Gl=new WeakMap,Pt=new WeakMap,Wu=new WeakMap,Bl=new WeakMap,We=new WeakSet,xa=function(u){const s=r=>{switch(u.type){case"failed":return{...r,fetchFailureCount:u.failureCount,fetchFailureReason:u.error};case"pause":return{...r,fetchStatus:"paused"};case"continue":return{...r,fetchStatus:"fetching"};case"fetch":return{...r,...Oy(r.data,this.options),fetchMeta:u.meta??null};case"success":const d={...r,...Qm(u.data,u.dataUpdatedAt),dataUpdateCount:r.dataUpdateCount+1,...!u.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};return Y(this,Qn,u.manual?d:void 0),d;case"error":const y=u.error;return{...r,error:y,errorUpdateCount:r.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:r.fetchFailureCount+1,fetchFailureReason:y,fetchStatus:"idle",status:"error",isInvalidated:!0};case"invalidate":return{...r,isInvalidated:!0};case"setState":return{...r,...u.state}}};this.state=s(this.state),kt.batch(()=>{this.observers.forEach(r=>{r.onQueryUpdate()}),m(this,Xe).notify({query:this,type:"updated",action:u})})},ry);function Oy(c,u){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:py(u.networkMode)?"fetching":"paused",...c===void 0&&{error:null,status:"pending"}}}function Qm(c,u){return{data:c,dataUpdatedAt:u??Date.now(),error:null,isInvalidated:!1,status:"success"}}function Gm(c){const u=typeof c.initialData=="function"?c.initialData():c.initialData,s=u!==void 0,r=s?typeof c.initialDataUpdatedAt=="function"?c.initialDataUpdatedAt():c.initialDataUpdatedAt:0;return{data:u,dataUpdateCount:0,dataUpdatedAt:s?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:s?"success":"pending",fetchStatus:"idle"}}var Te,mt,ku,fe,Ll,Gn,Da,cl,Fu,Bn,Ln,Xl,Zl,sl,Xn,Tt,Ku,lf,nf,uf,cf,sf,rf,ff,Ey,fy,Qg=(fy=class extends Wn{constructor(u,s){super();J(this,Tt);J(this,Te);J(this,mt);J(this,ku);J(this,fe);J(this,Ll);J(this,Gn);J(this,Da);J(this,cl);J(this,Fu);J(this,Bn);J(this,Ln);J(this,Xl);J(this,Zl);J(this,sl);J(this,Xn,new Set);this.options=s,Y(this,Te,u),Y(this,cl,null),Y(this,Da,ef()),this.bindMethods(),this.setOptions(s)}bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(m(this,mt).addObserver(this),Bm(m(this,mt),this.options)?ut(this,Tt,Ku).call(this):this.updateResult(),ut(this,Tt,cf).call(this))}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return of(m(this,mt),this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return of(m(this,mt),this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,ut(this,Tt,sf).call(this),ut(this,Tt,rf).call(this),m(this,mt).removeObserver(this)}setOptions(u){const s=this.options,r=m(this,mt);if(this.options=m(this,Te).defaultQueryOptions(u),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof Ze(this.options.enabled,m(this,mt))!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");ut(this,Tt,ff).call(this),m(this,mt).setOptions(this.options),s._defaulted&&!Tc(this.options,s)&&m(this,Te).getQueryCache().notify({type:"observerOptionsUpdated",query:m(this,mt),observer:this});const d=this.hasListeners();d&&Lm(m(this,mt),r,this.options,s)&&ut(this,Tt,Ku).call(this),this.updateResult(),d&&(m(this,mt)!==r||Ze(this.options.enabled,m(this,mt))!==Ze(s.enabled,m(this,mt))||hl(this.options.staleTime,m(this,mt))!==hl(s.staleTime,m(this,mt)))&&ut(this,Tt,lf).call(this);const y=ut(this,Tt,nf).call(this);d&&(m(this,mt)!==r||Ze(this.options.enabled,m(this,mt))!==Ze(s.enabled,m(this,mt))||y!==m(this,sl))&&ut(this,Tt,uf).call(this,y)}getOptimisticResult(u){const s=m(this,Te).getQueryCache().build(m(this,Te),u),r=this.createResult(s,u);return Bg(this,r)&&(Y(this,fe,r),Y(this,Gn,this.options),Y(this,Ll,m(this,mt).state)),r}getCurrentResult(){return m(this,fe)}trackResult(u,s){return new Proxy(u,{get:(r,d)=>(this.trackProp(d),s==null||s(d),d==="promise"&&(this.trackProp("data"),!this.options.experimental_prefetchInRender&&m(this,Da).status==="pending"&&m(this,Da).reject(new Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(r,d))})}trackProp(u){m(this,Xn).add(u)}getCurrentQuery(){return m(this,mt)}refetch({...u}={}){return this.fetch({...u})}fetchOptimistic(u){const s=m(this,Te).defaultQueryOptions(u),r=m(this,Te).getQueryCache().build(m(this,Te),s);return r.fetch().then(()=>this.createResult(r,s))}fetch(u){return ut(this,Tt,Ku).call(this,{...u,cancelRefetch:u.cancelRefetch??!0}).then(()=>(this.updateResult(),m(this,fe)))}createResult(u,s){var Kt;const r=m(this,mt),d=this.options,y=m(this,fe),O=m(this,Ll),E=m(this,Gn),b=u!==r?u.state:m(this,ku),{state:j}=u;let _={...j},H=!1,Q;if(s._optimisticResults){const ct=this.hasListeners(),yt=!ct&&Bm(u,s),Jt=ct&&Lm(u,r,s,d);(yt||Jt)&&(_={..._,...Oy(j.data,u.options)}),s._optimisticResults==="isRestoring"&&(_.fetchStatus="idle")}let{error:G,errorUpdatedAt:L,status:F}=_;Q=_.data;let P=!1;if(s.placeholderData!==void 0&&Q===void 0&&F==="pending"){let ct;y!=null&&y.isPlaceholderData&&s.placeholderData===(E==null?void 0:E.placeholderData)?(ct=y.data,P=!0):ct=typeof s.placeholderData=="function"?s.placeholderData((Kt=m(this,Ln))==null?void 0:Kt.state.data,m(this,Ln)):s.placeholderData,ct!==void 0&&(F="success",Q=tf(y==null?void 0:y.data,ct,s),H=!0)}if(s.select&&Q!==void 0&&!P)if(y&&Q===(O==null?void 0:O.data)&&s.select===m(this,Fu))Q=m(this,Bn);else try{Y(this,Fu,s.select),Q=s.select(Q),Q=tf(y==null?void 0:y.data,Q,s),Y(this,Bn,Q),Y(this,cl,null)}catch(ct){Y(this,cl,ct)}m(this,cl)&&(G=m(this,cl),Q=m(this,Bn),L=Date.now(),F="error");const et=_.fetchStatus==="fetching",K=F==="pending",B=F==="error",bt=K&&et,Mt=Q!==void 0,Dt={status:F,fetchStatus:_.fetchStatus,isPending:K,isSuccess:F==="success",isError:B,isInitialLoading:bt,isLoading:bt,data:Q,dataUpdatedAt:_.dataUpdatedAt,error:G,errorUpdatedAt:L,failureCount:_.fetchFailureCount,failureReason:_.fetchFailureReason,errorUpdateCount:_.errorUpdateCount,isFetched:_.dataUpdateCount>0||_.errorUpdateCount>0,isFetchedAfterMount:_.dataUpdateCount>b.dataUpdateCount||_.errorUpdateCount>b.errorUpdateCount,isFetching:et,isRefetching:et&&!K,isLoadingError:B&&!Mt,isPaused:_.fetchStatus==="paused",isPlaceholderData:H,isRefetchError:B&&Mt,isStale:Sf(u,s),refetch:this.refetch,promise:m(this,Da),isEnabled:Ze(s.enabled,u)!==!1};if(this.options.experimental_prefetchInRender){const ct=Dt.data!==void 0,yt=Dt.status==="error"&&!ct,Jt=ne=>{yt?ne.reject(Dt.error):ct&&ne.resolve(Dt.data)},$e=()=>{const ne=Y(this,Da,Dt.promise=ef());Jt(ne)},he=m(this,Da);switch(he.status){case"pending":u.queryHash===r.queryHash&&Jt(he);break;case"fulfilled":(yt||Dt.data!==he.value)&&$e();break;case"rejected":(!yt||Dt.error!==he.reason)&&$e();break}}return Dt}updateResult(){const u=m(this,fe),s=this.createResult(m(this,mt),this.options);if(Y(this,Ll,m(this,mt).state),Y(this,Gn,this.options),m(this,Ll).data!==void 0&&Y(this,Ln,m(this,mt)),Tc(s,u))return;Y(this,fe,s);const r=()=>{if(!u)return!0;const{notifyOnChangeProps:d}=this.options,y=typeof d=="function"?d():d;if(y==="all"||!y&&!m(this,Xn).size)return!0;const O=new Set(y??m(this,Xn));return this.options.throwOnError&&O.add("error"),Object.keys(m(this,fe)).some(E=>{const x=E;return m(this,fe)[x]!==u[x]&&O.has(x)})};ut(this,Tt,Ey).call(this,{listeners:r()})}onQueryUpdate(){this.updateResult(),this.hasListeners()&&ut(this,Tt,cf).call(this)}},Te=new WeakMap,mt=new WeakMap,ku=new WeakMap,fe=new WeakMap,Ll=new WeakMap,Gn=new WeakMap,Da=new WeakMap,cl=new WeakMap,Fu=new WeakMap,Bn=new WeakMap,Ln=new WeakMap,Xl=new WeakMap,Zl=new WeakMap,sl=new WeakMap,Xn=new WeakMap,Tt=new WeakSet,Ku=function(u){ut(this,Tt,ff).call(this);let s=m(this,mt).fetch(this.options,u);return u!=null&&u.throwOnError||(s=s.catch(de)),s},lf=function(){ut(this,Tt,sf).call(this);const u=hl(this.options.staleTime,m(this,mt));if(Kl||m(this,fe).isStale||!Pr(u))return;const r=gy(m(this,fe).dataUpdatedAt,u)+1;Y(this,Xl,wl.setTimeout(()=>{m(this,fe).isStale||this.updateResult()},r))},nf=function(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(m(this,mt)):this.options.refetchInterval)??!1},uf=function(u){ut(this,Tt,rf).call(this),Y(this,sl,u),!(Kl||Ze(this.options.enabled,m(this,mt))===!1||!Pr(m(this,sl))||m(this,sl)===0)&&Y(this,Zl,wl.setInterval(()=>{(this.options.refetchIntervalInBackground||bf.isFocused())&&ut(this,Tt,Ku).call(this)},m(this,sl)))},cf=function(){ut(this,Tt,lf).call(this),ut(this,Tt,uf).call(this,ut(this,Tt,nf).call(this))},sf=function(){m(this,Xl)&&(wl.clearTimeout(m(this,Xl)),Y(this,Xl,void 0))},rf=function(){m(this,Zl)&&(wl.clearInterval(m(this,Zl)),Y(this,Zl,void 0))},ff=function(){const u=m(this,Te).getQueryCache().build(m(this,Te),this.options);if(u===m(this,mt))return;const s=m(this,mt);Y(this,mt,u),Y(this,ku,u.state),this.hasListeners()&&(s==null||s.removeObserver(this),u.addObserver(this))},Ey=function(u){kt.batch(()=>{u.listeners&&this.listeners.forEach(s=>{s(m(this,fe))}),m(this,Te).getQueryCache().notify({query:m(this,mt),type:"observerResultsUpdated"})})},fy);function Gg(c,u){return Ze(u.enabled,c)!==!1&&c.state.data===void 0&&!(c.state.status==="error"&&u.retryOnMount===!1)}function Bm(c,u){return Gg(c,u)||c.state.data!==void 0&&of(c,u,u.refetchOnMount)}function of(c,u,s){if(Ze(u.enabled,c)!==!1&&hl(u.staleTime,c)!=="static"){const r=typeof s=="function"?s(c):s;return r==="always"||r!==!1&&Sf(c,u)}return!1}function Lm(c,u,s,r){return(c!==u||Ze(r.enabled,c)===!1)&&(!s.suspense||c.state.status!=="error")&&Sf(c,s)}function Sf(c,u){return Ze(u.enabled,c)!==!1&&c.isStaleByTime(hl(u.staleTime,c))}function Bg(c,u){return!Tc(c.getCurrentResult(),u)}function Xm(c){return{onFetch:(u,s)=>{var j,_,H,Q,G;const r=u.options,d=(H=(_=(j=u.fetchOptions)==null?void 0:j.meta)==null?void 0:_.fetchMore)==null?void 0:H.direction,y=((Q=u.state.data)==null?void 0:Q.pages)||[],O=((G=u.state.data)==null?void 0:G.pageParams)||[];let E={pages:[],pageParams:[]},x=0;const b=async()=>{let L=!1;const F=K=>{Ug(K,()=>u.signal,()=>L=!0)},P=Sy(u.options,u.fetchOptions),et=async(K,B,bt)=>{if(L)return Promise.reject();if(B==null&&K.pages.length)return Promise.resolve(K);const I=(()=>{const yt={client:u.client,queryKey:u.queryKey,pageParam:B,direction:bt?"backward":"forward",meta:u.options.meta};return F(yt),yt})(),Dt=await P(I),{maxPages:Kt}=u.options,ct=bt?Cg:_g;return{pages:ct(K.pages,Dt,Kt),pageParams:ct(K.pageParams,B,Kt)}};if(d&&y.length){const K=d==="backward",B=K?Lg:Zm,bt={pages:y,pageParams:O},Mt=B(r,bt);E=await et(bt,Mt,K)}else{const K=c??y.length;do{const B=x===0?O[0]??r.initialPageParam:Zm(r,E);if(x>0&&B==null)break;E=await et(E,B),x++}while(x{var L,F;return(F=(L=u.options).persister)==null?void 0:F.call(L,b,{client:u.client,queryKey:u.queryKey,meta:u.options.meta,signal:u.signal},s)}:u.fetchFn=b}}}function Zm(c,{pages:u,pageParams:s}){const r=u.length-1;return u.length>0?c.getNextPageParam(u[r],u,s[r],s):void 0}function Lg(c,{pages:u,pageParams:s}){var r;return u.length>0?(r=c.getPreviousPageParam)==null?void 0:r.call(c,u[0],u,s[0],s):void 0}var $u,aa,oe,Vl,la,ll,oy,Xg=(oy=class extends My{constructor(u){super();J(this,la);J(this,$u);J(this,aa);J(this,oe);J(this,Vl);Y(this,$u,u.client),this.mutationId=u.mutationId,Y(this,oe,u.mutationCache),Y(this,aa,[]),this.state=u.state||xy(),this.setOptions(u.options),this.scheduleGc()}setOptions(u){this.options=u,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(u){m(this,aa).includes(u)||(m(this,aa).push(u),this.clearGcTimeout(),m(this,oe).notify({type:"observerAdded",mutation:this,observer:u}))}removeObserver(u){Y(this,aa,m(this,aa).filter(s=>s!==u)),this.scheduleGc(),m(this,oe).notify({type:"observerRemoved",mutation:this,observer:u})}optionalRemove(){m(this,aa).length||(this.state.status==="pending"?this.scheduleGc():m(this,oe).remove(this))}continue(){var u;return((u=m(this,Vl))==null?void 0:u.continue())??this.execute(this.state.variables)}async execute(u){var O,E,x,b,j,_,H,Q,G,L,F,P,et,K,B,bt,Mt,I,Dt,Kt;const s=()=>{ut(this,la,ll).call(this,{type:"continue"})},r={client:m(this,$u),meta:this.options.meta,mutationKey:this.options.mutationKey};Y(this,Vl,Ty({fn:()=>this.options.mutationFn?this.options.mutationFn(u,r):Promise.reject(new Error("No mutationFn found")),onFail:(ct,yt)=>{ut(this,la,ll).call(this,{type:"failed",failureCount:ct,error:yt})},onPause:()=>{ut(this,la,ll).call(this,{type:"pause"})},onContinue:s,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>m(this,oe).canRun(this)}));const d=this.state.status==="pending",y=!m(this,Vl).canStart();try{if(d)s();else{ut(this,la,ll).call(this,{type:"pending",variables:u,isPaused:y}),await((E=(O=m(this,oe).config).onMutate)==null?void 0:E.call(O,u,this,r));const yt=await((b=(x=this.options).onMutate)==null?void 0:b.call(x,u,r));yt!==this.state.context&&ut(this,la,ll).call(this,{type:"pending",context:yt,variables:u,isPaused:y})}const ct=await m(this,Vl).start();return await((_=(j=m(this,oe).config).onSuccess)==null?void 0:_.call(j,ct,u,this.state.context,this,r)),await((Q=(H=this.options).onSuccess)==null?void 0:Q.call(H,ct,u,this.state.context,r)),await((L=(G=m(this,oe).config).onSettled)==null?void 0:L.call(G,ct,null,this.state.variables,this.state.context,this,r)),await((P=(F=this.options).onSettled)==null?void 0:P.call(F,ct,null,u,this.state.context,r)),ut(this,la,ll).call(this,{type:"success",data:ct}),ct}catch(ct){try{await((K=(et=m(this,oe).config).onError)==null?void 0:K.call(et,ct,u,this.state.context,this,r))}catch(yt){Promise.reject(yt)}try{await((bt=(B=this.options).onError)==null?void 0:bt.call(B,ct,u,this.state.context,r))}catch(yt){Promise.reject(yt)}try{await((I=(Mt=m(this,oe).config).onSettled)==null?void 0:I.call(Mt,void 0,ct,this.state.variables,this.state.context,this,r))}catch(yt){Promise.reject(yt)}try{await((Kt=(Dt=this.options).onSettled)==null?void 0:Kt.call(Dt,void 0,ct,u,this.state.context,r))}catch(yt){Promise.reject(yt)}throw ut(this,la,ll).call(this,{type:"error",error:ct}),ct}finally{m(this,oe).runNext(this)}}},$u=new WeakMap,aa=new WeakMap,oe=new WeakMap,Vl=new WeakMap,la=new WeakSet,ll=function(u){const s=r=>{switch(u.type){case"failed":return{...r,failureCount:u.failureCount,failureReason:u.error};case"pause":return{...r,isPaused:!0};case"continue":return{...r,isPaused:!1};case"pending":return{...r,context:u.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:u.isPaused,status:"pending",variables:u.variables,submittedAt:Date.now()};case"success":return{...r,data:u.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...r,data:void 0,error:u.error,failureCount:r.failureCount+1,failureReason:u.error,isPaused:!1,status:"error"}}};this.state=s(this.state),kt.batch(()=>{m(this,aa).forEach(r=>{r.onMutationUpdate(u)}),m(this,oe).notify({mutation:this,type:"updated",action:u})})},oy);function xy(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var za,ke,Pu,dy,Zg=(dy=class extends Wn{constructor(u={}){super();J(this,za);J(this,ke);J(this,Pu);this.config=u,Y(this,za,new Set),Y(this,ke,new Map),Y(this,Pu,0)}build(u,s,r){const d=new Xg({client:u,mutationCache:this,mutationId:++gc(this,Pu)._,options:u.defaultMutationOptions(s),state:r});return this.add(d),d}add(u){m(this,za).add(u);const s=bc(u);if(typeof s=="string"){const r=m(this,ke).get(s);r?r.push(u):m(this,ke).set(s,[u])}this.notify({type:"added",mutation:u})}remove(u){if(m(this,za).delete(u)){const s=bc(u);if(typeof s=="string"){const r=m(this,ke).get(s);if(r)if(r.length>1){const d=r.indexOf(u);d!==-1&&r.splice(d,1)}else r[0]===u&&m(this,ke).delete(s)}}this.notify({type:"removed",mutation:u})}canRun(u){const s=bc(u);if(typeof s=="string"){const r=m(this,ke).get(s),d=r==null?void 0:r.find(y=>y.state.status==="pending");return!d||d===u}else return!0}runNext(u){var r;const s=bc(u);if(typeof s=="string"){const d=(r=m(this,ke).get(s))==null?void 0:r.find(y=>y!==u&&y.state.isPaused);return(d==null?void 0:d.continue())??Promise.resolve()}else return Promise.resolve()}clear(){kt.batch(()=>{m(this,za).forEach(u=>{this.notify({type:"removed",mutation:u})}),m(this,za).clear(),m(this,ke).clear()})}getAll(){return Array.from(m(this,za))}find(u){const s={exact:!0,...u};return this.getAll().find(r=>Hm(s,r))}findAll(u={}){return this.getAll().filter(s=>Hm(u,s))}notify(u){kt.batch(()=>{this.listeners.forEach(s=>{s(u)})})}resumePausedMutations(){const u=this.getAll().filter(s=>s.state.isPaused);return kt.batch(()=>Promise.all(u.map(s=>s.continue().catch(de))))}},za=new WeakMap,ke=new WeakMap,Pu=new WeakMap,dy);function bc(c){var u;return(u=c.options.scope)==null?void 0:u.id}var Aa,rl,Me,Na,_a,pc,df,hy,Vg=(hy=class extends Wn{constructor(s,r){super();J(this,_a);J(this,Aa);J(this,rl);J(this,Me);J(this,Na);Y(this,Aa,s),this.setOptions(r),this.bindMethods(),ut(this,_a,pc).call(this)}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(s){var d;const r=this.options;this.options=m(this,Aa).defaultMutationOptions(s),Tc(this.options,r)||m(this,Aa).getMutationCache().notify({type:"observerOptionsUpdated",mutation:m(this,Me),observer:this}),r!=null&&r.mutationKey&&this.options.mutationKey&&Jl(r.mutationKey)!==Jl(this.options.mutationKey)?this.reset():((d=m(this,Me))==null?void 0:d.state.status)==="pending"&&m(this,Me).setOptions(this.options)}onUnsubscribe(){var s;this.hasListeners()||(s=m(this,Me))==null||s.removeObserver(this)}onMutationUpdate(s){ut(this,_a,pc).call(this),ut(this,_a,df).call(this,s)}getCurrentResult(){return m(this,rl)}reset(){var s;(s=m(this,Me))==null||s.removeObserver(this),Y(this,Me,void 0),ut(this,_a,pc).call(this),ut(this,_a,df).call(this)}mutate(s,r){var d;return Y(this,Na,r),(d=m(this,Me))==null||d.removeObserver(this),Y(this,Me,m(this,Aa).getMutationCache().build(m(this,Aa),this.options)),m(this,Me).addObserver(this),m(this,Me).execute(s)}},Aa=new WeakMap,rl=new WeakMap,Me=new WeakMap,Na=new WeakMap,_a=new WeakSet,pc=function(){var r;const s=((r=m(this,Me))==null?void 0:r.state)??xy();Y(this,rl,{...s,isPending:s.status==="pending",isSuccess:s.status==="success",isError:s.status==="error",isIdle:s.status==="idle",mutate:this.mutate,reset:this.reset})},df=function(s){kt.batch(()=>{var r,d,y,O,E,x,b,j;if(m(this,Na)&&this.hasListeners()){const _=m(this,rl).variables,H=m(this,rl).context,Q={client:m(this,Aa),meta:this.options.meta,mutationKey:this.options.mutationKey};if((s==null?void 0:s.type)==="success"){try{(d=(r=m(this,Na)).onSuccess)==null||d.call(r,s.data,_,H,Q)}catch(G){Promise.reject(G)}try{(O=(y=m(this,Na)).onSettled)==null||O.call(y,s.data,null,_,H,Q)}catch(G){Promise.reject(G)}}else if((s==null?void 0:s.type)==="error"){try{(x=(E=m(this,Na)).onError)==null||x.call(E,s.error,_,H,Q)}catch(G){Promise.reject(G)}try{(j=(b=m(this,Na)).onSettled)==null||j.call(b,void 0,s.error,_,H,Q)}catch(G){Promise.reject(G)}}}this.listeners.forEach(_=>{_(m(this,rl))})})},hy),na,my,Kg=(my=class extends Wn{constructor(u={}){super();J(this,na);this.config=u,Y(this,na,new Map)}build(u,s,r){const d=s.queryKey,y=s.queryHash??yf(d,s);let O=this.get(y);return O||(O=new Yg({client:u,queryKey:d,queryHash:y,options:u.defaultQueryOptions(s),state:r,defaultOptions:u.getQueryDefaults(d)}),this.add(O)),O}add(u){m(this,na).has(u.queryHash)||(m(this,na).set(u.queryHash,u),this.notify({type:"added",query:u}))}remove(u){const s=m(this,na).get(u.queryHash);s&&(u.destroy(),s===u&&m(this,na).delete(u.queryHash),this.notify({type:"removed",query:u}))}clear(){kt.batch(()=>{this.getAll().forEach(u=>{this.remove(u)})})}get(u){return m(this,na).get(u)}getAll(){return[...m(this,na).values()]}find(u){const s={exact:!0,...u};return this.getAll().find(r=>wm(s,r))}findAll(u={}){const s=this.getAll();return Object.keys(u).length>0?s.filter(r=>wm(u,r)):s}notify(u){kt.batch(()=>{this.listeners.forEach(s=>{s(u)})})}onFocus(){kt.batch(()=>{this.getAll().forEach(u=>{u.onFocus()})})}onOnline(){kt.batch(()=>{this.getAll().forEach(u=>{u.onOnline()})})}},na=new WeakMap,my),Yt,fl,ol,Zn,Vn,dl,Kn,Jn,yy,Jg=(yy=class{constructor(c={}){J(this,Yt);J(this,fl);J(this,ol);J(this,Zn);J(this,Vn);J(this,dl);J(this,Kn);J(this,Jn);Y(this,Yt,c.queryCache||new Kg),Y(this,fl,c.mutationCache||new Zg),Y(this,ol,c.defaultOptions||{}),Y(this,Zn,new Map),Y(this,Vn,new Map),Y(this,dl,0)}mount(){gc(this,dl)._++,m(this,dl)===1&&(Y(this,Kn,bf.subscribe(async c=>{c&&(await this.resumePausedMutations(),m(this,Yt).onFocus())})),Y(this,Jn,Mc.subscribe(async c=>{c&&(await this.resumePausedMutations(),m(this,Yt).onOnline())})))}unmount(){var c,u;gc(this,dl)._--,m(this,dl)===0&&((c=m(this,Kn))==null||c.call(this),Y(this,Kn,void 0),(u=m(this,Jn))==null||u.call(this),Y(this,Jn,void 0))}isFetching(c){return m(this,Yt).findAll({...c,fetchStatus:"fetching"}).length}isMutating(c){return m(this,fl).findAll({...c,status:"pending"}).length}getQueryData(c){var s;const u=this.defaultQueryOptions({queryKey:c});return(s=m(this,Yt).get(u.queryHash))==null?void 0:s.state.data}ensureQueryData(c){const u=this.defaultQueryOptions(c),s=m(this,Yt).build(this,u),r=s.state.data;return r===void 0?this.fetchQuery(c):(c.revalidateIfStale&&s.isStaleByTime(hl(u.staleTime,s))&&this.prefetchQuery(u),Promise.resolve(r))}getQueriesData(c){return m(this,Yt).findAll(c).map(({queryKey:u,state:s})=>{const r=s.data;return[u,r]})}setQueryData(c,u,s){const r=this.defaultQueryOptions({queryKey:c}),d=m(this,Yt).get(r.queryHash),y=d==null?void 0:d.state.data,O=zg(u,y);if(O!==void 0)return m(this,Yt).build(this,r).setData(O,{...s,manual:!0})}setQueriesData(c,u,s){return kt.batch(()=>m(this,Yt).findAll(c).map(({queryKey:r})=>[r,this.setQueryData(r,u,s)]))}getQueryState(c){var s;const u=this.defaultQueryOptions({queryKey:c});return(s=m(this,Yt).get(u.queryHash))==null?void 0:s.state}removeQueries(c){const u=m(this,Yt);kt.batch(()=>{u.findAll(c).forEach(s=>{u.remove(s)})})}resetQueries(c,u){const s=m(this,Yt);return kt.batch(()=>(s.findAll(c).forEach(r=>{r.reset()}),this.refetchQueries({type:"active",...c},u)))}cancelQueries(c,u={}){const s={revert:!0,...u},r=kt.batch(()=>m(this,Yt).findAll(c).map(d=>d.cancel(s)));return Promise.all(r).then(de).catch(de)}invalidateQueries(c,u={}){return kt.batch(()=>(m(this,Yt).findAll(c).forEach(s=>{s.invalidate()}),(c==null?void 0:c.refetchType)==="none"?Promise.resolve():this.refetchQueries({...c,type:(c==null?void 0:c.refetchType)??(c==null?void 0:c.type)??"active"},u)))}refetchQueries(c,u={}){const s={...u,cancelRefetch:u.cancelRefetch??!0},r=kt.batch(()=>m(this,Yt).findAll(c).filter(d=>!d.isDisabled()&&!d.isStatic()).map(d=>{let y=d.fetch(void 0,s);return s.throwOnError||(y=y.catch(de)),d.state.fetchStatus==="paused"?Promise.resolve():y}));return Promise.all(r).then(de)}fetchQuery(c){const u=this.defaultQueryOptions(c);u.retry===void 0&&(u.retry=!1);const s=m(this,Yt).build(this,u);return s.isStaleByTime(hl(u.staleTime,s))?s.fetch(u):Promise.resolve(s.state.data)}prefetchQuery(c){return this.fetchQuery(c).then(de).catch(de)}fetchInfiniteQuery(c){return c.behavior=Xm(c.pages),this.fetchQuery(c)}prefetchInfiniteQuery(c){return this.fetchInfiniteQuery(c).then(de).catch(de)}ensureInfiniteQueryData(c){return c.behavior=Xm(c.pages),this.ensureQueryData(c)}resumePausedMutations(){return Mc.isOnline()?m(this,fl).resumePausedMutations():Promise.resolve()}getQueryCache(){return m(this,Yt)}getMutationCache(){return m(this,fl)}getDefaultOptions(){return m(this,ol)}setDefaultOptions(c){Y(this,ol,c)}setQueryDefaults(c,u){m(this,Zn).set(Jl(c),{queryKey:c,defaultOptions:u})}getQueryDefaults(c){const u=[...m(this,Zn).values()],s={};return u.forEach(r=>{Ju(c,r.queryKey)&&Object.assign(s,r.defaultOptions)}),s}setMutationDefaults(c,u){m(this,Vn).set(Jl(c),{mutationKey:c,defaultOptions:u})}getMutationDefaults(c){const u=[...m(this,Vn).values()],s={};return u.forEach(r=>{Ju(c,r.mutationKey)&&Object.assign(s,r.defaultOptions)}),s}defaultQueryOptions(c){if(c._defaulted)return c;const u={...m(this,ol).queries,...this.getQueryDefaults(c.queryKey),...c,_defaulted:!0};return u.queryHash||(u.queryHash=yf(u.queryKey,u)),u.refetchOnReconnect===void 0&&(u.refetchOnReconnect=u.networkMode!=="always"),u.throwOnError===void 0&&(u.throwOnError=!!u.suspense),!u.networkMode&&u.persister&&(u.networkMode="offlineFirst"),u.queryFn===vf&&(u.enabled=!1),u}defaultMutationOptions(c){return c!=null&&c._defaulted?c:{...m(this,ol).mutations,...(c==null?void 0:c.mutationKey)&&this.getMutationDefaults(c.mutationKey),...c,_defaulted:!0}}clear(){m(this,Yt).clear(),m(this,fl).clear()}},Yt=new WeakMap,fl=new WeakMap,ol=new WeakMap,Zn=new WeakMap,Vn=new WeakMap,dl=new WeakMap,Kn=new WeakMap,Jn=new WeakMap,yy),Dy=it.createContext(void 0),pf=c=>{const u=it.useContext(Dy);if(!u)throw new Error("No QueryClient set, use QueryClientProvider to set one");return u},Wg=({client:c,children:u})=>(it.useEffect(()=>(c.mount(),()=>{c.unmount()}),[c]),U.jsx(Dy.Provider,{value:c,children:u})),zy=it.createContext(!1),kg=()=>it.useContext(zy);zy.Provider;function Fg(){let c=!1;return{clearReset:()=>{c=!1},reset:()=>{c=!0},isReset:()=>c}}var $g=it.createContext(Fg()),Pg=()=>it.useContext($g),Ig=(c,u,s)=>{const r=s!=null&&s.state.error&&typeof c.throwOnError=="function"?gf(c.throwOnError,[s.state.error,s]):c.throwOnError;(c.suspense||c.experimental_prefetchInRender||r)&&(u.isReset()||(c.retryOnMount=!1))},t1=c=>{it.useEffect(()=>{c.clearReset()},[c])},e1=({result:c,errorResetBoundary:u,throwOnError:s,query:r,suspense:d})=>c.isError&&!u.isReset()&&!c.isFetching&&r&&(d&&c.data===void 0||gf(s,[c.error,r])),a1=c=>{if(c.suspense){const s=d=>d==="static"?d:Math.max(d??1e3,1e3),r=c.staleTime;c.staleTime=typeof r=="function"?(...d)=>s(r(...d)):s(r),typeof c.gcTime=="number"&&(c.gcTime=Math.max(c.gcTime,1e3))}},l1=(c,u)=>c.isLoading&&c.isFetching&&!u,n1=(c,u)=>(c==null?void 0:c.suspense)&&u.isPending,Vm=(c,u,s)=>u.fetchOptimistic(c).catch(()=>{s.clearReset()});function u1(c,u,s){var H,Q,G,L;const r=kg(),d=Pg(),y=pf(),O=y.defaultQueryOptions(c);(Q=(H=y.getDefaultOptions().queries)==null?void 0:H._experimental_beforeQuery)==null||Q.call(H,O);const E=y.getQueryCache().get(O.queryHash);O._optimisticResults=r?"isRestoring":"optimistic",a1(O),Ig(O,d,E),t1(d);const x=!y.getQueryCache().get(O.queryHash),[b]=it.useState(()=>new u(y,O)),j=b.getOptimisticResult(O),_=!r&&c.subscribed!==!1;if(it.useSyncExternalStore(it.useCallback(F=>{const P=_?b.subscribe(kt.batchCalls(F)):de;return b.updateResult(),P},[b,_]),()=>b.getCurrentResult(),()=>b.getCurrentResult()),it.useEffect(()=>{b.setOptions(O)},[O,b]),n1(O,j))throw Vm(O,b,d);if(e1({result:j,errorResetBoundary:d,throwOnError:O.throwOnError,query:E,suspense:O.suspense}))throw j.error;if((L=(G=y.getDefaultOptions().queries)==null?void 0:G._experimental_afterQuery)==null||L.call(G,O,j),O.experimental_prefetchInRender&&!Kl&&l1(j,r)){const F=x?Vm(O,b,d):E==null?void 0:E.promise;F==null||F.catch(de).finally(()=>{b.updateResult()})}return O.notifyOnChangeProps?j:b.trackResult(j)}function i1(c,u){return u1(c,Qg)}function Fr(c,u){const s=pf(),[r]=it.useState(()=>new Vg(s,c));it.useEffect(()=>{r.setOptions(c)},[r,c]);const d=it.useSyncExternalStore(it.useCallback(O=>r.subscribe(kt.batchCalls(O)),[r]),()=>r.getCurrentResult(),()=>r.getCurrentResult()),y=it.useCallback((O,E)=>{r.mutate(O,E).catch(de)},[r]);if(d.error&&gf(r.options.throwOnError,[d.error]))throw d.error;return{...d,mutate:y,mutateAsync:d.mutate}}const Ay="/api";function Ny(){return localStorage.getItem("token")}function Km(c){localStorage.setItem("token",c)}function Jm(){localStorage.removeItem("token")}async function Hl(c,u={}){const s=Ny(),r={"Content-Type":"application/json",...s&&{Authorization:`Bearer ${s}`},...u.headers},d=await fetch(`${Ay}${c}`,{...u,headers:r});if(!d.ok){const y=await d.json().catch(()=>({error:"Request failed"}));throw new Error(y.error||"Request failed")}return d.json()}async function c1(c,u,s){const r=Ny(),d=await fetch(`${Ay}/reports/generate`,{method:"POST",headers:{"Content-Type":"application/json",...r&&{Authorization:`Bearer ${r}`}},body:JSON.stringify({startDate:c,endDate:u,format:s})});if(!d.ok)throw new Error("Failed to generate report");const y=await d.blob(),O=s==="excel"?"xlsx":s,E=window.URL.createObjectURL(y),x=document.createElement("a");x.href=E,x.download=`report_${c}_${u}.${O}`,document.body.appendChild(x),x.click(),window.URL.revokeObjectURL(E),document.body.removeChild(x)}function s1(){const[c,u]=it.useState({user:null,isLoading:!0,isAuthenticated:!1}),s=it.useCallback(async()=>{if(!localStorage.getItem("token")){u({user:null,isLoading:!1,isAuthenticated:!1});return}try{const E=await Hl("/auth/me");u({user:E,isLoading:!1,isAuthenticated:!0})}catch{Jm(),u({user:null,isLoading:!1,isAuthenticated:!1})}},[]);return it.useEffect(()=>{s()},[s]),{...c,login:async(O,E)=>{const{token:x,user:b}=await Hl("/auth/login",{method:"POST",body:JSON.stringify({username:O,password:E})});Km(x),u({user:b,isLoading:!1,isAuthenticated:!0})},register:async(O,E)=>{const{token:x,user:b}=await Hl("/auth/register",{method:"POST",body:JSON.stringify({username:O,password:E})});Km(x),u({user:b,isLoading:!1,isAuthenticated:!0})},logout:()=>{Jm(),u({user:null,isLoading:!1,isAuthenticated:!1})}}}function r1({onLogin:c,onRegister:u}){const[s,r]=it.useState(!1),[d,y]=it.useState(""),[O,E]=it.useState(""),[x,b]=it.useState(""),[j,_]=it.useState(!1),H=async Q=>{Q.preventDefault(),b(""),_(!0);try{s?await u(d,O):await c(d,O)}catch(G){b(G instanceof Error?G.message:"Ошибка")}finally{_(!1)}};return U.jsx("div",{className:"min-h-screen flex items-center justify-center bg-gray-50",children:U.jsxs("div",{className:"max-w-md w-full p-8 bg-white rounded-lg shadow-md",children:[U.jsx("h1",{className:"text-2xl font-bold text-center mb-6 text-gray-800",children:"TimeTracker"}),U.jsx("h2",{className:"text-lg text-center mb-6 text-gray-600",children:s?"Регистрация":"Вход"}),U.jsxs("form",{onSubmit:H,className:"space-y-4",children:[U.jsxs("div",{children:[U.jsx("label",{className:"block text-sm font-medium text-gray-700 mb-1",children:"Логин"}),U.jsx("input",{type:"text",value:d,onChange:Q=>y(Q.target.value),className:"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500",required:!0,minLength:3})]}),U.jsxs("div",{children:[U.jsx("label",{className:"block text-sm font-medium text-gray-700 mb-1",children:"Пароль"}),U.jsx("input",{type:"password",value:O,onChange:Q=>E(Q.target.value),className:"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500",required:!0,minLength:6})]}),x&&U.jsx("p",{className:"text-red-500 text-sm",children:x}),U.jsx("button",{type:"submit",disabled:j,className:"w-full py-2 px-4 bg-blue-600 text-white rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 disabled:opacity-50",children:j?"Загрузка...":s?"Зарегистрироваться":"Войти"})]}),U.jsxs("p",{className:"mt-4 text-center text-sm text-gray-600",children:[s?"Уже есть аккаунт?":"Нет аккаунта?"," ",U.jsx("button",{onClick:()=>r(!s),className:"text-blue-600 hover:underline",children:s?"Войти":"Зарегистрироваться"})]})]})})}const _y=6048e5,f1=864e5,Cy=6e4,Uy=36e5,Wm=Symbol.for("constructDateFrom");function Fe(c,u){return typeof c=="function"?c(u):c&&typeof c=="object"&&Wm in c?c[Wm](u):c instanceof Date?new c.constructor(u):new Date(u)}function ie(c,u){return Fe(u||c,c)}function Ry(c,u,s){const r=ie(c,s==null?void 0:s.in);if(isNaN(u))return Fe(c,NaN);if(!u)return r;const d=r.getDate(),y=Fe(c,r.getTime());y.setMonth(r.getMonth()+u+1,0);const O=y.getDate();return d>=O?y:(r.setFullYear(y.getFullYear(),y.getMonth(),d),r)}let o1={};function Ec(){return o1}function Wl(c,u){var E,x,b,j;const s=Ec(),r=(u==null?void 0:u.weekStartsOn)??((x=(E=u==null?void 0:u.locale)==null?void 0:E.options)==null?void 0:x.weekStartsOn)??s.weekStartsOn??((j=(b=s.locale)==null?void 0:b.options)==null?void 0:j.weekStartsOn)??0,d=ie(c,u==null?void 0:u.in),y=d.getDay(),O=(y=y.getTime()?r+1:s.getTime()>=E.getTime()?r:r-1}function km(c){const u=ie(c),s=new Date(Date.UTC(u.getFullYear(),u.getMonth(),u.getDate(),u.getHours(),u.getMinutes(),u.getSeconds(),u.getMilliseconds()));return s.setUTCFullYear(u.getFullYear()),+c-+s}function wy(c,...u){const s=Fe.bind(null,c||u.find(r=>typeof r=="object"));return u.map(s)}function Fm(c,u){const s=ie(c,u==null?void 0:u.in);return s.setHours(0,0,0,0),s}function d1(c,u,s){const[r,d]=wy(s==null?void 0:s.in,c,u),y=Fm(r),O=Fm(d),E=+y-km(y),x=+O-km(O);return Math.round((E-x)/f1)}function h1(c,u){const s=jy(c,u),r=Fe(c,0);return r.setFullYear(s,0,4),r.setHours(0,0,0,0),Oc(r)}function m1(c){return c instanceof Date||typeof c=="object"&&Object.prototype.toString.call(c)==="[object Date]"}function y1(c){return!(!m1(c)&&typeof c!="number"||isNaN(+ie(c)))}function Hy(c,u){const s=ie(c,u==null?void 0:u.in),r=s.getMonth();return s.setFullYear(s.getFullYear(),r+1,0),s.setHours(23,59,59,999),s}function qy(c,u){const s=ie(c,u==null?void 0:u.in);return s.setDate(1),s.setHours(0,0,0,0),s}function v1(c,u){const s=ie(c,u==null?void 0:u.in);return s.setFullYear(s.getFullYear(),0,1),s.setHours(0,0,0,0),s}const g1={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},b1=(c,u,s)=>{let r;const d=g1[c];return typeof d=="string"?r=d:u===1?r=d.one:r=d.other.replace("{{count}}",u.toString()),s!=null&&s.addSuffix?s.comparison&&s.comparison>0?"in "+r:r+" ago":r};function wn(c){return(u={})=>{const s=u.width?String(u.width):c.defaultWidth;return c.formats[s]||c.formats[c.defaultWidth]}}const S1={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},p1={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},T1={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},M1={date:wn({formats:S1,defaultWidth:"full"}),time:wn({formats:p1,defaultWidth:"full"}),dateTime:wn({formats:T1,defaultWidth:"full"})},O1={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},E1=(c,u,s,r)=>O1[c];function ua(c){return(u,s)=>{const r=s!=null&&s.context?String(s.context):"standalone";let d;if(r==="formatting"&&c.formattingValues){const O=c.defaultFormattingWidth||c.defaultWidth,E=s!=null&&s.width?String(s.width):O;d=c.formattingValues[E]||c.formattingValues[O]}else{const O=c.defaultWidth,E=s!=null&&s.width?String(s.width):c.defaultWidth;d=c.values[E]||c.values[O]}const y=c.argumentCallback?c.argumentCallback(u):u;return d[y]}}const x1={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},D1={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},z1={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},A1={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},N1={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},_1={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},C1=(c,u)=>{const s=Number(c),r=s%100;if(r>20||r<10)switch(r%10){case 1:return s+"st";case 2:return s+"nd";case 3:return s+"rd"}return s+"th"},U1={ordinalNumber:C1,era:ua({values:x1,defaultWidth:"wide"}),quarter:ua({values:D1,defaultWidth:"wide",argumentCallback:c=>c-1}),month:ua({values:z1,defaultWidth:"wide"}),day:ua({values:A1,defaultWidth:"wide"}),dayPeriod:ua({values:N1,defaultWidth:"wide",formattingValues:_1,defaultFormattingWidth:"wide"})};function ia(c){return(u,s={})=>{const r=s.width,d=r&&c.matchPatterns[r]||c.matchPatterns[c.defaultMatchWidth],y=u.match(d);if(!y)return null;const O=y[0],E=r&&c.parsePatterns[r]||c.parsePatterns[c.defaultParseWidth],x=Array.isArray(E)?j1(E,_=>_.test(O)):R1(E,_=>_.test(O));let b;b=c.valueCallback?c.valueCallback(x):x,b=s.valueCallback?s.valueCallback(b):b;const j=u.slice(O.length);return{value:b,rest:j}}}function R1(c,u){for(const s in c)if(Object.prototype.hasOwnProperty.call(c,s)&&u(c[s]))return s}function j1(c,u){for(let s=0;s{const r=u.match(c.matchPattern);if(!r)return null;const d=r[0],y=u.match(c.parsePattern);if(!y)return null;let O=c.valueCallback?c.valueCallback(y[0]):y[0];O=s.valueCallback?s.valueCallback(O):O;const E=u.slice(d.length);return{value:O,rest:E}}}const w1=/^(\d+)(th|st|nd|rd)?/i,H1=/\d+/i,q1={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},Y1={any:[/^b/i,/^(a|c)/i]},Q1={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},G1={any:[/1/i,/2/i,/3/i,/4/i]},B1={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},L1={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},X1={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},Z1={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},V1={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},K1={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},J1={ordinalNumber:Yy({matchPattern:w1,parsePattern:H1,valueCallback:c=>parseInt(c,10)}),era:ia({matchPatterns:q1,defaultMatchWidth:"wide",parsePatterns:Y1,defaultParseWidth:"any"}),quarter:ia({matchPatterns:Q1,defaultMatchWidth:"wide",parsePatterns:G1,defaultParseWidth:"any",valueCallback:c=>c+1}),month:ia({matchPatterns:B1,defaultMatchWidth:"wide",parsePatterns:L1,defaultParseWidth:"any"}),day:ia({matchPatterns:X1,defaultMatchWidth:"wide",parsePatterns:Z1,defaultParseWidth:"any"}),dayPeriod:ia({matchPatterns:V1,defaultMatchWidth:"any",parsePatterns:K1,defaultParseWidth:"any"})},W1={code:"en-US",formatDistance:b1,formatLong:M1,formatRelative:E1,localize:U1,match:J1,options:{weekStartsOn:0,firstWeekContainsDate:1}};function k1(c,u){const s=ie(c,u==null?void 0:u.in);return d1(s,v1(s))+1}function F1(c,u){const s=ie(c,u==null?void 0:u.in),r=+Oc(s)-+h1(s);return Math.round(r/_y)+1}function Qy(c,u){var j,_,H,Q;const s=ie(c,u==null?void 0:u.in),r=s.getFullYear(),d=Ec(),y=(u==null?void 0:u.firstWeekContainsDate)??((_=(j=u==null?void 0:u.locale)==null?void 0:j.options)==null?void 0:_.firstWeekContainsDate)??d.firstWeekContainsDate??((Q=(H=d.locale)==null?void 0:H.options)==null?void 0:Q.firstWeekContainsDate)??1,O=Fe((u==null?void 0:u.in)||c,0);O.setFullYear(r+1,0,y),O.setHours(0,0,0,0);const E=Wl(O,u),x=Fe((u==null?void 0:u.in)||c,0);x.setFullYear(r,0,y),x.setHours(0,0,0,0);const b=Wl(x,u);return+s>=+E?r+1:+s>=+b?r:r-1}function $1(c,u){var E,x,b,j;const s=Ec(),r=(u==null?void 0:u.firstWeekContainsDate)??((x=(E=u==null?void 0:u.locale)==null?void 0:E.options)==null?void 0:x.firstWeekContainsDate)??s.firstWeekContainsDate??((j=(b=s.locale)==null?void 0:b.options)==null?void 0:j.firstWeekContainsDate)??1,d=Qy(c,u),y=Fe((u==null?void 0:u.in)||c,0);return y.setFullYear(d,0,r),y.setHours(0,0,0,0),Wl(y,u)}function P1(c,u){const s=ie(c,u==null?void 0:u.in),r=+Wl(s,u)-+$1(s,u);return Math.round(r/_y)+1}function xt(c,u){const s=c<0?"-":"",r=Math.abs(c).toString().padStart(u,"0");return s+r}const al={y(c,u){const s=c.getFullYear(),r=s>0?s:1-s;return xt(u==="yy"?r%100:r,u.length)},M(c,u){const s=c.getMonth();return u==="M"?String(s+1):xt(s+1,2)},d(c,u){return xt(c.getDate(),u.length)},a(c,u){const s=c.getHours()/12>=1?"pm":"am";switch(u){case"a":case"aa":return s.toUpperCase();case"aaa":return s;case"aaaaa":return s[0];case"aaaa":default:return s==="am"?"a.m.":"p.m."}},h(c,u){return xt(c.getHours()%12||12,u.length)},H(c,u){return xt(c.getHours(),u.length)},m(c,u){return xt(c.getMinutes(),u.length)},s(c,u){return xt(c.getSeconds(),u.length)},S(c,u){const s=u.length,r=c.getMilliseconds(),d=Math.trunc(r*Math.pow(10,s-3));return xt(d,u.length)}},jn={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},$m={G:function(c,u,s){const r=c.getFullYear()>0?1:0;switch(u){case"G":case"GG":case"GGG":return s.era(r,{width:"abbreviated"});case"GGGGG":return s.era(r,{width:"narrow"});case"GGGG":default:return s.era(r,{width:"wide"})}},y:function(c,u,s){if(u==="yo"){const r=c.getFullYear(),d=r>0?r:1-r;return s.ordinalNumber(d,{unit:"year"})}return al.y(c,u)},Y:function(c,u,s,r){const d=Qy(c,r),y=d>0?d:1-d;if(u==="YY"){const O=y%100;return xt(O,2)}return u==="Yo"?s.ordinalNumber(y,{unit:"year"}):xt(y,u.length)},R:function(c,u){const s=jy(c);return xt(s,u.length)},u:function(c,u){const s=c.getFullYear();return xt(s,u.length)},Q:function(c,u,s){const r=Math.ceil((c.getMonth()+1)/3);switch(u){case"Q":return String(r);case"QQ":return xt(r,2);case"Qo":return s.ordinalNumber(r,{unit:"quarter"});case"QQQ":return s.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return s.quarter(r,{width:"narrow",context:"formatting"});case"QQQQ":default:return s.quarter(r,{width:"wide",context:"formatting"})}},q:function(c,u,s){const r=Math.ceil((c.getMonth()+1)/3);switch(u){case"q":return String(r);case"qq":return xt(r,2);case"qo":return s.ordinalNumber(r,{unit:"quarter"});case"qqq":return s.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return s.quarter(r,{width:"narrow",context:"standalone"});case"qqqq":default:return s.quarter(r,{width:"wide",context:"standalone"})}},M:function(c,u,s){const r=c.getMonth();switch(u){case"M":case"MM":return al.M(c,u);case"Mo":return s.ordinalNumber(r+1,{unit:"month"});case"MMM":return s.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return s.month(r,{width:"narrow",context:"formatting"});case"MMMM":default:return s.month(r,{width:"wide",context:"formatting"})}},L:function(c,u,s){const r=c.getMonth();switch(u){case"L":return String(r+1);case"LL":return xt(r+1,2);case"Lo":return s.ordinalNumber(r+1,{unit:"month"});case"LLL":return s.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return s.month(r,{width:"narrow",context:"standalone"});case"LLLL":default:return s.month(r,{width:"wide",context:"standalone"})}},w:function(c,u,s,r){const d=P1(c,r);return u==="wo"?s.ordinalNumber(d,{unit:"week"}):xt(d,u.length)},I:function(c,u,s){const r=F1(c);return u==="Io"?s.ordinalNumber(r,{unit:"week"}):xt(r,u.length)},d:function(c,u,s){return u==="do"?s.ordinalNumber(c.getDate(),{unit:"date"}):al.d(c,u)},D:function(c,u,s){const r=k1(c);return u==="Do"?s.ordinalNumber(r,{unit:"dayOfYear"}):xt(r,u.length)},E:function(c,u,s){const r=c.getDay();switch(u){case"E":case"EE":case"EEE":return s.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return s.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return s.day(r,{width:"short",context:"formatting"});case"EEEE":default:return s.day(r,{width:"wide",context:"formatting"})}},e:function(c,u,s,r){const d=c.getDay(),y=(d-r.weekStartsOn+8)%7||7;switch(u){case"e":return String(y);case"ee":return xt(y,2);case"eo":return s.ordinalNumber(y,{unit:"day"});case"eee":return s.day(d,{width:"abbreviated",context:"formatting"});case"eeeee":return s.day(d,{width:"narrow",context:"formatting"});case"eeeeee":return s.day(d,{width:"short",context:"formatting"});case"eeee":default:return s.day(d,{width:"wide",context:"formatting"})}},c:function(c,u,s,r){const d=c.getDay(),y=(d-r.weekStartsOn+8)%7||7;switch(u){case"c":return String(y);case"cc":return xt(y,u.length);case"co":return s.ordinalNumber(y,{unit:"day"});case"ccc":return s.day(d,{width:"abbreviated",context:"standalone"});case"ccccc":return s.day(d,{width:"narrow",context:"standalone"});case"cccccc":return s.day(d,{width:"short",context:"standalone"});case"cccc":default:return s.day(d,{width:"wide",context:"standalone"})}},i:function(c,u,s){const r=c.getDay(),d=r===0?7:r;switch(u){case"i":return String(d);case"ii":return xt(d,u.length);case"io":return s.ordinalNumber(d,{unit:"day"});case"iii":return s.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return s.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return s.day(r,{width:"short",context:"formatting"});case"iiii":default:return s.day(r,{width:"wide",context:"formatting"})}},a:function(c,u,s){const d=c.getHours()/12>=1?"pm":"am";switch(u){case"a":case"aa":return s.dayPeriod(d,{width:"abbreviated",context:"formatting"});case"aaa":return s.dayPeriod(d,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return s.dayPeriod(d,{width:"narrow",context:"formatting"});case"aaaa":default:return s.dayPeriod(d,{width:"wide",context:"formatting"})}},b:function(c,u,s){const r=c.getHours();let d;switch(r===12?d=jn.noon:r===0?d=jn.midnight:d=r/12>=1?"pm":"am",u){case"b":case"bb":return s.dayPeriod(d,{width:"abbreviated",context:"formatting"});case"bbb":return s.dayPeriod(d,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return s.dayPeriod(d,{width:"narrow",context:"formatting"});case"bbbb":default:return s.dayPeriod(d,{width:"wide",context:"formatting"})}},B:function(c,u,s){const r=c.getHours();let d;switch(r>=17?d=jn.evening:r>=12?d=jn.afternoon:r>=4?d=jn.morning:d=jn.night,u){case"B":case"BB":case"BBB":return s.dayPeriod(d,{width:"abbreviated",context:"formatting"});case"BBBBB":return s.dayPeriod(d,{width:"narrow",context:"formatting"});case"BBBB":default:return s.dayPeriod(d,{width:"wide",context:"formatting"})}},h:function(c,u,s){if(u==="ho"){let r=c.getHours()%12;return r===0&&(r=12),s.ordinalNumber(r,{unit:"hour"})}return al.h(c,u)},H:function(c,u,s){return u==="Ho"?s.ordinalNumber(c.getHours(),{unit:"hour"}):al.H(c,u)},K:function(c,u,s){const r=c.getHours()%12;return u==="Ko"?s.ordinalNumber(r,{unit:"hour"}):xt(r,u.length)},k:function(c,u,s){let r=c.getHours();return r===0&&(r=24),u==="ko"?s.ordinalNumber(r,{unit:"hour"}):xt(r,u.length)},m:function(c,u,s){return u==="mo"?s.ordinalNumber(c.getMinutes(),{unit:"minute"}):al.m(c,u)},s:function(c,u,s){return u==="so"?s.ordinalNumber(c.getSeconds(),{unit:"second"}):al.s(c,u)},S:function(c,u){return al.S(c,u)},X:function(c,u,s){const r=c.getTimezoneOffset();if(r===0)return"Z";switch(u){case"X":return Im(r);case"XXXX":case"XX":return jl(r);case"XXXXX":case"XXX":default:return jl(r,":")}},x:function(c,u,s){const r=c.getTimezoneOffset();switch(u){case"x":return Im(r);case"xxxx":case"xx":return jl(r);case"xxxxx":case"xxx":default:return jl(r,":")}},O:function(c,u,s){const r=c.getTimezoneOffset();switch(u){case"O":case"OO":case"OOO":return"GMT"+Pm(r,":");case"OOOO":default:return"GMT"+jl(r,":")}},z:function(c,u,s){const r=c.getTimezoneOffset();switch(u){case"z":case"zz":case"zzz":return"GMT"+Pm(r,":");case"zzzz":default:return"GMT"+jl(r,":")}},t:function(c,u,s){const r=Math.trunc(+c/1e3);return xt(r,u.length)},T:function(c,u,s){return xt(+c,u.length)}};function Pm(c,u=""){const s=c>0?"-":"+",r=Math.abs(c),d=Math.trunc(r/60),y=r%60;return y===0?s+String(d):s+String(d)+u+xt(y,2)}function Im(c,u){return c%60===0?(c>0?"-":"+")+xt(Math.abs(c)/60,2):jl(c,u)}function jl(c,u=""){const s=c>0?"-":"+",r=Math.abs(c),d=xt(Math.trunc(r/60),2),y=xt(r%60,2);return s+d+u+y}const ty=(c,u)=>{switch(c){case"P":return u.date({width:"short"});case"PP":return u.date({width:"medium"});case"PPP":return u.date({width:"long"});case"PPPP":default:return u.date({width:"full"})}},Gy=(c,u)=>{switch(c){case"p":return u.time({width:"short"});case"pp":return u.time({width:"medium"});case"ppp":return u.time({width:"long"});case"pppp":default:return u.time({width:"full"})}},I1=(c,u)=>{const s=c.match(/(P+)(p+)?/)||[],r=s[1],d=s[2];if(!d)return ty(c,u);let y;switch(r){case"P":y=u.dateTime({width:"short"});break;case"PP":y=u.dateTime({width:"medium"});break;case"PPP":y=u.dateTime({width:"long"});break;case"PPPP":default:y=u.dateTime({width:"full"});break}return y.replace("{{date}}",ty(r,u)).replace("{{time}}",Gy(d,u))},tb={p:Gy,P:I1},eb=/^D+$/,ab=/^Y+$/,lb=["D","DD","YY","YYYY"];function nb(c){return eb.test(c)}function ub(c){return ab.test(c)}function ib(c,u,s){const r=cb(c,u,s);if(console.warn(r),lb.includes(c))throw new RangeError(r)}function cb(c,u,s){const r=c[0]==="Y"?"years":"days of the month";return`Use \`${c.toLowerCase()}\` instead of \`${c}\` (in \`${u}\`) for formatting ${r} to the input \`${s}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const sb=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,rb=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,fb=/^'([^]*?)'?$/,ob=/''/g,db=/[a-zA-Z]/;function ml(c,u,s){var j,_,H,Q,G,L,F,P;const r=Ec(),d=(s==null?void 0:s.locale)??r.locale??W1,y=(s==null?void 0:s.firstWeekContainsDate)??((_=(j=s==null?void 0:s.locale)==null?void 0:j.options)==null?void 0:_.firstWeekContainsDate)??r.firstWeekContainsDate??((Q=(H=r.locale)==null?void 0:H.options)==null?void 0:Q.firstWeekContainsDate)??1,O=(s==null?void 0:s.weekStartsOn)??((L=(G=s==null?void 0:s.locale)==null?void 0:G.options)==null?void 0:L.weekStartsOn)??r.weekStartsOn??((P=(F=r.locale)==null?void 0:F.options)==null?void 0:P.weekStartsOn)??0,E=ie(c,s==null?void 0:s.in);if(!y1(E))throw new RangeError("Invalid time value");let x=u.match(rb).map(et=>{const K=et[0];if(K==="p"||K==="P"){const B=tb[K];return B(et,d.formatLong)}return et}).join("").match(sb).map(et=>{if(et==="''")return{isToken:!1,value:"'"};const K=et[0];if(K==="'")return{isToken:!1,value:hb(et)};if($m[K])return{isToken:!0,value:et};if(K.match(db))throw new RangeError("Format string contains an unescaped latin alphabet character `"+K+"`");return{isToken:!1,value:et}});d.localize.preprocessor&&(x=d.localize.preprocessor(E,x));const b={firstWeekContainsDate:y,weekStartsOn:O,locale:d};return x.map(et=>{if(!et.isToken)return et.value;const K=et.value;(!(s!=null&&s.useAdditionalWeekYearTokens)&&ub(K)||!(s!=null&&s.useAdditionalDayOfYearTokens)&&nb(K))&&ib(K,u,String(c));const B=$m[K[0]];return B(E,K,d.localize,b)}).join("")}function hb(c){const u=c.match(fb);return u?u[1].replace(ob,"'"):c}function ey(c,u,s){const[r,d]=wy(s==null?void 0:s.in,c,u);return+Wl(r,s)==+Wl(d,s)}function ay(c,u){const s=()=>Fe(u==null?void 0:u.in,NaN),d=gb(c);let y;if(d.date){const b=bb(d.date,2);y=Sb(b.restDateString,b.year)}if(!y||isNaN(+y))return s();const O=+y;let E=0,x;if(d.time&&(E=pb(d.time),isNaN(E)))return s();if(d.timezone){if(x=Tb(d.timezone),isNaN(x))return s()}else{const b=new Date(O+E),j=ie(0,u==null?void 0:u.in);return j.setFullYear(b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()),j.setHours(b.getUTCHours(),b.getUTCMinutes(),b.getUTCSeconds(),b.getUTCMilliseconds()),j}return ie(O+E+x,u==null?void 0:u.in)}const Sc={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},mb=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,yb=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,vb=/^([+-])(\d{2})(?::?(\d{2}))?$/;function gb(c){const u={},s=c.split(Sc.dateTimeDelimiter);let r;if(s.length>2)return u;if(/:/.test(s[0])?r=s[0]:(u.date=s[0],r=s[1],Sc.timeZoneDelimiter.test(u.date)&&(u.date=c.split(Sc.timeZoneDelimiter)[0],r=c.substr(u.date.length,c.length))),r){const d=Sc.timezone.exec(r);d?(u.time=r.replace(d[1],""),u.timezone=d[1]):u.time=r}return u}function bb(c,u){const s=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+u)+"})|(\\d{2}|[+-]\\d{"+(2+u)+"})$)"),r=c.match(s);if(!r)return{year:NaN,restDateString:""};const d=r[1]?parseInt(r[1]):null,y=r[2]?parseInt(r[2]):null;return{year:y===null?d:y*100,restDateString:c.slice((r[1]||r[2]).length)}}function Sb(c,u){if(u===null)return new Date(NaN);const s=c.match(mb);if(!s)return new Date(NaN);const r=!!s[4],d=Zu(s[1]),y=Zu(s[2])-1,O=Zu(s[3]),E=Zu(s[4]),x=Zu(s[5])-1;if(r)return Db(u,E,x)?Mb(u,E,x):new Date(NaN);{const b=new Date(0);return!Eb(u,y,O)||!xb(u,d)?new Date(NaN):(b.setUTCFullYear(u,y,Math.max(d,O)),b)}}function Zu(c){return c?parseInt(c):1}function pb(c){const u=c.match(yb);if(!u)return NaN;const s=$r(u[1]),r=$r(u[2]),d=$r(u[3]);return zb(s,r,d)?s*Uy+r*Cy+d*1e3:NaN}function $r(c){return c&&parseFloat(c.replace(",","."))||0}function Tb(c){if(c==="Z")return 0;const u=c.match(vb);if(!u)return 0;const s=u[1]==="+"?-1:1,r=parseInt(u[2]),d=u[3]&&parseInt(u[3])||0;return Ab(r,d)?s*(r*Uy+d*Cy):NaN}function Mb(c,u,s){const r=new Date(0);r.setUTCFullYear(c,0,4);const d=r.getUTCDay()||7,y=(u-1)*7+s+1-d;return r.setUTCDate(r.getUTCDate()+y),r}const Ob=[31,null,31,30,31,30,31,31,30,31,30,31];function By(c){return c%400===0||c%4===0&&c%100!==0}function Eb(c,u,s){return u>=0&&u<=11&&s>=1&&s<=(Ob[u]||(By(c)?29:28))}function xb(c,u){return u>=1&&u<=(By(c)?366:365)}function Db(c,u,s){return u>=1&&u<=53&&s>=0&&s<=6}function zb(c,u,s){return c===24?u===0&&s===0:s>=0&&s<60&&u>=0&&u<60&&c>=0&&c<25}function Ab(c,u){return u>=0&&u<=59}function Nb(c,u,s){return Ry(c,-1,s)}function Vu(c,u){if(c.one!==void 0&&u===1)return c.one;const s=u%10,r=u%100;return s===1&&r!==11?c.singularNominative.replace("{{count}}",String(u)):s>=2&&s<=4&&(r<10||r>20)?c.singularGenitive.replace("{{count}}",String(u)):c.pluralGenitive.replace("{{count}}",String(u))}function re(c){return(u,s)=>s!=null&&s.addSuffix?s.comparison&&s.comparison>0?c.future?Vu(c.future,u):"через "+Vu(c.regular,u):c.past?Vu(c.past,u):Vu(c.regular,u)+" назад":Vu(c.regular,u)}const _b={lessThanXSeconds:re({regular:{one:"меньше секунды",singularNominative:"меньше {{count}} секунды",singularGenitive:"меньше {{count}} секунд",pluralGenitive:"меньше {{count}} секунд"},future:{one:"меньше, чем через секунду",singularNominative:"меньше, чем через {{count}} секунду",singularGenitive:"меньше, чем через {{count}} секунды",pluralGenitive:"меньше, чем через {{count}} секунд"}}),xSeconds:re({regular:{singularNominative:"{{count}} секунда",singularGenitive:"{{count}} секунды",pluralGenitive:"{{count}} секунд"},past:{singularNominative:"{{count}} секунду назад",singularGenitive:"{{count}} секунды назад",pluralGenitive:"{{count}} секунд назад"},future:{singularNominative:"через {{count}} секунду",singularGenitive:"через {{count}} секунды",pluralGenitive:"через {{count}} секунд"}}),halfAMinute:(c,u)=>u!=null&&u.addSuffix?u.comparison&&u.comparison>0?"через полминуты":"полминуты назад":"полминуты",lessThanXMinutes:re({regular:{one:"меньше минуты",singularNominative:"меньше {{count}} минуты",singularGenitive:"меньше {{count}} минут",pluralGenitive:"меньше {{count}} минут"},future:{one:"меньше, чем через минуту",singularNominative:"меньше, чем через {{count}} минуту",singularGenitive:"меньше, чем через {{count}} минуты",pluralGenitive:"меньше, чем через {{count}} минут"}}),xMinutes:re({regular:{singularNominative:"{{count}} минута",singularGenitive:"{{count}} минуты",pluralGenitive:"{{count}} минут"},past:{singularNominative:"{{count}} минуту назад",singularGenitive:"{{count}} минуты назад",pluralGenitive:"{{count}} минут назад"},future:{singularNominative:"через {{count}} минуту",singularGenitive:"через {{count}} минуты",pluralGenitive:"через {{count}} минут"}}),aboutXHours:re({regular:{singularNominative:"около {{count}} часа",singularGenitive:"около {{count}} часов",pluralGenitive:"около {{count}} часов"},future:{singularNominative:"приблизительно через {{count}} час",singularGenitive:"приблизительно через {{count}} часа",pluralGenitive:"приблизительно через {{count}} часов"}}),xHours:re({regular:{singularNominative:"{{count}} час",singularGenitive:"{{count}} часа",pluralGenitive:"{{count}} часов"}}),xDays:re({regular:{singularNominative:"{{count}} день",singularGenitive:"{{count}} дня",pluralGenitive:"{{count}} дней"}}),aboutXWeeks:re({regular:{singularNominative:"около {{count}} недели",singularGenitive:"около {{count}} недель",pluralGenitive:"около {{count}} недель"},future:{singularNominative:"приблизительно через {{count}} неделю",singularGenitive:"приблизительно через {{count}} недели",pluralGenitive:"приблизительно через {{count}} недель"}}),xWeeks:re({regular:{singularNominative:"{{count}} неделя",singularGenitive:"{{count}} недели",pluralGenitive:"{{count}} недель"}}),aboutXMonths:re({regular:{singularNominative:"около {{count}} месяца",singularGenitive:"около {{count}} месяцев",pluralGenitive:"около {{count}} месяцев"},future:{singularNominative:"приблизительно через {{count}} месяц",singularGenitive:"приблизительно через {{count}} месяца",pluralGenitive:"приблизительно через {{count}} месяцев"}}),xMonths:re({regular:{singularNominative:"{{count}} месяц",singularGenitive:"{{count}} месяца",pluralGenitive:"{{count}} месяцев"}}),aboutXYears:re({regular:{singularNominative:"около {{count}} года",singularGenitive:"около {{count}} лет",pluralGenitive:"около {{count}} лет"},future:{singularNominative:"приблизительно через {{count}} год",singularGenitive:"приблизительно через {{count}} года",pluralGenitive:"приблизительно через {{count}} лет"}}),xYears:re({regular:{singularNominative:"{{count}} год",singularGenitive:"{{count}} года",pluralGenitive:"{{count}} лет"}}),overXYears:re({regular:{singularNominative:"больше {{count}} года",singularGenitive:"больше {{count}} лет",pluralGenitive:"больше {{count}} лет"},future:{singularNominative:"больше, чем через {{count}} год",singularGenitive:"больше, чем через {{count}} года",pluralGenitive:"больше, чем через {{count}} лет"}}),almostXYears:re({regular:{singularNominative:"почти {{count}} год",singularGenitive:"почти {{count}} года",pluralGenitive:"почти {{count}} лет"},future:{singularNominative:"почти через {{count}} год",singularGenitive:"почти через {{count}} года",pluralGenitive:"почти через {{count}} лет"}})},Cb=(c,u,s)=>_b[c](u,s),Ub={full:"EEEE, d MMMM y 'г.'",long:"d MMMM y 'г.'",medium:"d MMM y 'г.'",short:"dd.MM.y"},Rb={full:"H:mm:ss zzzz",long:"H:mm:ss z",medium:"H:mm:ss",short:"H:mm"},jb={any:"{{date}}, {{time}}"},wb={date:wn({formats:Ub,defaultWidth:"full"}),time:wn({formats:Rb,defaultWidth:"full"}),dateTime:wn({formats:jb,defaultWidth:"any"})},Tf=["воскресенье","понедельник","вторник","среду","четверг","пятницу","субботу"];function Hb(c){const u=Tf[c];switch(c){case 0:return"'в прошлое "+u+" в' p";case 1:case 2:case 4:return"'в прошлый "+u+" в' p";case 3:case 5:case 6:return"'в прошлую "+u+" в' p"}}function ly(c){const u=Tf[c];return c===2?"'во "+u+" в' p":"'в "+u+" в' p"}function qb(c){const u=Tf[c];switch(c){case 0:return"'в следующее "+u+" в' p";case 1:case 2:case 4:return"'в следующий "+u+" в' p";case 3:case 5:case 6:return"'в следующую "+u+" в' p"}}const Yb={lastWeek:(c,u,s)=>{const r=c.getDay();return ey(c,u,s)?ly(r):Hb(r)},yesterday:"'вчера в' p",today:"'сегодня в' p",tomorrow:"'завтра в' p",nextWeek:(c,u,s)=>{const r=c.getDay();return ey(c,u,s)?ly(r):qb(r)},other:"P"},Qb=(c,u,s,r)=>{const d=Yb[c];return typeof d=="function"?d(u,s,r):d},Gb={narrow:["до н.э.","н.э."],abbreviated:["до н. э.","н. э."],wide:["до нашей эры","нашей эры"]},Bb={narrow:["1","2","3","4"],abbreviated:["1-й кв.","2-й кв.","3-й кв.","4-й кв."],wide:["1-й квартал","2-й квартал","3-й квартал","4-й квартал"]},Lb={narrow:["Я","Ф","М","А","М","И","И","А","С","О","Н","Д"],abbreviated:["янв.","фев.","март","апр.","май","июнь","июль","авг.","сент.","окт.","нояб.","дек."],wide:["январь","февраль","март","апрель","май","июнь","июль","август","сентябрь","октябрь","ноябрь","декабрь"]},Xb={narrow:["Я","Ф","М","А","М","И","И","А","С","О","Н","Д"],abbreviated:["янв.","фев.","мар.","апр.","мая","июн.","июл.","авг.","сент.","окт.","нояб.","дек."],wide:["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"]},Zb={narrow:["В","П","В","С","Ч","П","С"],short:["вс","пн","вт","ср","чт","пт","сб"],abbreviated:["вск","пнд","втр","срд","чтв","птн","суб"],wide:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"]},Vb={narrow:{am:"ДП",pm:"ПП",midnight:"полн.",noon:"полд.",morning:"утро",afternoon:"день",evening:"веч.",night:"ночь"},abbreviated:{am:"ДП",pm:"ПП",midnight:"полн.",noon:"полд.",morning:"утро",afternoon:"день",evening:"веч.",night:"ночь"},wide:{am:"ДП",pm:"ПП",midnight:"полночь",noon:"полдень",morning:"утро",afternoon:"день",evening:"вечер",night:"ночь"}},Kb={narrow:{am:"ДП",pm:"ПП",midnight:"полн.",noon:"полд.",morning:"утра",afternoon:"дня",evening:"веч.",night:"ночи"},abbreviated:{am:"ДП",pm:"ПП",midnight:"полн.",noon:"полд.",morning:"утра",afternoon:"дня",evening:"веч.",night:"ночи"},wide:{am:"ДП",pm:"ПП",midnight:"полночь",noon:"полдень",morning:"утра",afternoon:"дня",evening:"вечера",night:"ночи"}},Jb=(c,u)=>{const s=Number(c),r=u==null?void 0:u.unit;let d;return r==="date"?d="-е":r==="week"||r==="minute"||r==="second"?d="-я":d="-й",s+d},Wb={ordinalNumber:Jb,era:ua({values:Gb,defaultWidth:"wide"}),quarter:ua({values:Bb,defaultWidth:"wide",argumentCallback:c=>c-1}),month:ua({values:Lb,defaultWidth:"wide",formattingValues:Xb,defaultFormattingWidth:"wide"}),day:ua({values:Zb,defaultWidth:"wide"}),dayPeriod:ua({values:Vb,defaultWidth:"any",formattingValues:Kb,defaultFormattingWidth:"wide"})},kb=/^(\d+)(-?(е|я|й|ое|ье|ая|ья|ый|ой|ий|ый))?/i,Fb=/\d+/i,$b={narrow:/^((до )?н\.?\s?э\.?)/i,abbreviated:/^((до )?н\.?\s?э\.?)/i,wide:/^(до нашей эры|нашей эры|наша эра)/i},Pb={any:[/^д/i,/^н/i]},Ib={narrow:/^[1234]/i,abbreviated:/^[1234](-?[ыои]?й?)? кв.?/i,wide:/^[1234](-?[ыои]?й?)? квартал/i},tS={any:[/1/i,/2/i,/3/i,/4/i]},eS={narrow:/^[яфмаисонд]/i,abbreviated:/^(янв|фев|март?|апр|ма[йя]|июн[ья]?|июл[ья]?|авг|сент?|окт|нояб?|дек)\.?/i,wide:/^(январ[ья]|феврал[ья]|марта?|апрел[ья]|ма[йя]|июн[ья]|июл[ья]|августа?|сентябр[ья]|октябр[ья]|октябр[ья]|ноябр[ья]|декабр[ья])/i},aS={narrow:[/^я/i,/^ф/i,/^м/i,/^а/i,/^м/i,/^и/i,/^и/i,/^а/i,/^с/i,/^о/i,/^н/i,/^я/i],any:[/^я/i,/^ф/i,/^мар/i,/^ап/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^ав/i,/^с/i,/^о/i,/^н/i,/^д/i]},lS={narrow:/^[впсч]/i,short:/^(вс|во|пн|по|вт|ср|чт|че|пт|пя|сб|су)\.?/i,abbreviated:/^(вск|вос|пнд|пон|втр|вто|срд|сре|чтв|чет|птн|пят|суб).?/i,wide:/^(воскресень[ея]|понедельника?|вторника?|сред[аы]|четверга?|пятниц[аы]|суббот[аы])/i},nS={narrow:[/^в/i,/^п/i,/^в/i,/^с/i,/^ч/i,/^п/i,/^с/i],any:[/^в[ос]/i,/^п[он]/i,/^в/i,/^ср/i,/^ч/i,/^п[ят]/i,/^с[уб]/i]},uS={narrow:/^([дп]п|полн\.?|полд\.?|утр[оа]|день|дня|веч\.?|ноч[ьи])/i,abbreviated:/^([дп]п|полн\.?|полд\.?|утр[оа]|день|дня|веч\.?|ноч[ьи])/i,wide:/^([дп]п|полночь|полдень|утр[оа]|день|дня|вечера?|ноч[ьи])/i},iS={any:{am:/^дп/i,pm:/^пп/i,midnight:/^полн/i,noon:/^полд/i,morning:/^у/i,afternoon:/^д[ен]/i,evening:/^в/i,night:/^н/i}},cS={ordinalNumber:Yy({matchPattern:kb,parsePattern:Fb,valueCallback:c=>parseInt(c,10)}),era:ia({matchPatterns:$b,defaultMatchWidth:"wide",parsePatterns:Pb,defaultParseWidth:"any"}),quarter:ia({matchPatterns:Ib,defaultMatchWidth:"wide",parsePatterns:tS,defaultParseWidth:"any",valueCallback:c=>c+1}),month:ia({matchPatterns:eS,defaultMatchWidth:"wide",parsePatterns:aS,defaultParseWidth:"any"}),day:ia({matchPatterns:lS,defaultMatchWidth:"wide",parsePatterns:nS,defaultParseWidth:"any"}),dayPeriod:ia({matchPatterns:uS,defaultMatchWidth:"wide",parsePatterns:iS,defaultParseWidth:"any"})},Ly={code:"ru",formatDistance:Cb,formatLong:wb,formatRelative:Qb,localize:Wb,match:cS,options:{weekStartsOn:1,firstWeekContainsDate:1}};function sS(c,u){const s=pf(),r=i1({queryKey:["logs",c,u],queryFn:async()=>{const E=new URLSearchParams;c&&E.append("startDate",c),u&&E.append("endDate",u);const x=E.toString();return Hl(`/logs${x?`?${x}`:""}`)}}),d=Fr({mutationFn:E=>Hl("/logs",{method:"POST",body:JSON.stringify(E)}),onSuccess:()=>{s.invalidateQueries({queryKey:["logs"]})}}),y=Fr({mutationFn:({id:E,data:x})=>Hl(`/logs/${E}`,{method:"PUT",body:JSON.stringify(x)}),onSuccess:()=>{s.invalidateQueries({queryKey:["logs"]})}}),O=Fr({mutationFn:E=>Hl(`/logs/${E}`,{method:"DELETE"}),onSuccess:()=>{s.invalidateQueries({queryKey:["logs"]})}});return{logs:r.data||[],isLoading:r.isLoading,error:r.error,createLog:d.mutateAsync,updateLog:y.mutateAsync,deleteLog:O.mutateAsync,isCreating:d.isPending}}function ny(c,u){return u===0?`${c} ч`:`${c}:${String(u).padStart(2,"0")}`}function rS({logs:c,onDelete:u,isLoading:s}){if(s)return U.jsx("div",{className:"flex justify-center py-8",children:U.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600"})});if(c.length===0)return U.jsx("div",{className:"text-center py-8 text-gray-500",children:"Нет записей за этот период"});const r=c.reduce((y,O)=>{const E=ml(ay(O.date),"yyyy-MM-dd");return y[E]||(y[E]=[]),y[E].push(O),y},{}),d=Object.keys(r).sort((y,O)=>O.localeCompare(y));return U.jsx("div",{className:"space-y-4",children:d.map(y=>{const O=r[y],E=O.reduce((j,_)=>j+_.minutes,0),x=Math.floor(E/60),b=E%60;return U.jsxs("div",{className:"bg-white rounded-lg shadow-sm border",children:[U.jsxs("div",{className:"px-4 py-3 bg-gray-50 border-b flex justify-between items-center rounded-t-lg",children:[U.jsx("span",{className:"font-medium text-gray-700",children:ml(ay(y),"d MMMM yyyy",{locale:Ly})}),U.jsxs("span",{className:"text-sm text-gray-500",children:["Всего: ",ny(x,b)]})]}),U.jsx("div",{className:"divide-y",children:O.map(j=>U.jsxs("div",{className:"px-4 py-3 flex items-start justify-between gap-4",children:[U.jsx("div",{className:"flex-1 min-w-0",children:U.jsx("p",{className:"text-gray-800 break-words",children:j.description})}),U.jsxs("div",{className:"flex items-center gap-3 flex-shrink-0",children:[U.jsx("span",{className:"text-blue-600 font-medium whitespace-nowrap",children:ny(j.hours,j.mins)}),U.jsx("button",{onClick:()=>u(j.id),className:"text-gray-400 hover:text-red-500 transition-colors",title:"Удалить",children:U.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-5 w-5",viewBox:"0 0 20 20",fill:"currentColor",children:U.jsx("path",{fillRule:"evenodd",d:"M9 2a1 1 0 00-.894.553L7.382 4H4a1 1 0 000 2v10a2 2 0 002 2h8a2 2 0 002-2V6a1 1 0 100-2h-3.382l-.724-1.447A1 1 0 0011 2H9zM7 8a1 1 0 012 0v6a1 1 0 11-2 0V8zm5-1a1 1 0 00-1 1v6a1 1 0 102 0V8a1 1 0 00-1-1z",clipRule:"evenodd"})})})]})]},j.id))})]},y)})})}function fS({isOpen:c,onClose:u,onSave:s}){const[r,d]=it.useState(ml(new Date,"yyyy-MM-dd")),[y,O]=it.useState("8"),[E,x]=it.useState(""),[b,j]=it.useState(""),[_,H]=it.useState(!1);if(!c)return null;const Q=async L=>{L.preventDefault(),j(""),H(!0);try{await s({date:r,time:y,description:E}),O("8"),x(""),u()}catch(F){j(F instanceof Error?F.message:"Ошибка")}finally{H(!1)}},G=L=>{O(L)};return U.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50",children:U.jsxs("div",{className:"bg-white rounded-lg p-6 w-full max-w-md mx-4",children:[U.jsx("h2",{className:"text-xl font-semibold mb-4",children:"Новая запись"}),U.jsxs("form",{onSubmit:Q,className:"space-y-4",children:[U.jsxs("div",{children:[U.jsx("label",{className:"block text-sm font-medium text-gray-700 mb-1",children:"Дата"}),U.jsx("input",{type:"date",value:r,onChange:L=>d(L.target.value),className:"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500",required:!0})]}),U.jsxs("div",{children:[U.jsx("label",{className:"block text-sm font-medium text-gray-700 mb-1",children:"Часы"}),U.jsxs("div",{className:"flex gap-2 mb-2",children:[U.jsx("button",{type:"button",onClick:()=>G("8"),className:`px-3 py-1 rounded-md text-sm ${y==="8"?"bg-blue-600 text-white":"bg-gray-100 text-gray-700 hover:bg-gray-200"}`,children:"8 ч"}),U.jsx("button",{type:"button",onClick:()=>G("4"),className:`px-3 py-1 rounded-md text-sm ${y==="4"?"bg-blue-600 text-white":"bg-gray-100 text-gray-700 hover:bg-gray-200"}`,children:"4 ч"}),U.jsx("button",{type:"button",onClick:()=>G("1"),className:`px-3 py-1 rounded-md text-sm ${y==="1"?"bg-blue-600 text-white":"bg-gray-100 text-gray-700 hover:bg-gray-200"}`,children:"1 ч"})]}),U.jsx("input",{type:"text",value:y,onChange:L=>O(L.target.value),placeholder:"8, 8:30, 8,5",className:"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500",required:!0}),U.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"Форматы: 8, 8:30, 8,5, 8.5"})]}),U.jsxs("div",{children:[U.jsx("label",{className:"block text-sm font-medium text-gray-700 mb-1",children:"Описание"}),U.jsx("textarea",{value:E,onChange:L=>x(L.target.value),className:"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 resize-none",rows:3,required:!0})]}),b&&U.jsx("p",{className:"text-red-500 text-sm",children:b}),U.jsxs("div",{className:"flex gap-3 pt-2",children:[U.jsx("button",{type:"button",onClick:u,className:"flex-1 py-2 px-4 border border-gray-300 text-gray-700 rounded-md hover:bg-gray-50",children:"Отмена"}),U.jsx("button",{type:"submit",disabled:_,className:"flex-1 py-2 px-4 bg-blue-600 text-white rounded-md hover:bg-blue-700 disabled:opacity-50",children:_?"Сохранение...":"Сохранить"})]})]})]})})}function oS({isOpen:c,onClose:u}){const s=new Date,[r,d]=it.useState(ml(qy(s),"yyyy-MM-dd")),[y,O]=it.useState(ml(Hy(s),"yyyy-MM-dd")),[E,x]=it.useState("excel"),[b,j]=it.useState(""),[_,H]=it.useState(!1);if(!c)return null;const Q=async G=>{G.preventDefault(),j(""),H(!0);try{await c1(r,y,E),u()}catch(L){j(L instanceof Error?L.message:"Ошибка генерации отчёта")}finally{H(!1)}};return U.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50",children:U.jsxs("div",{className:"bg-white rounded-lg p-6 w-full max-w-md mx-4",children:[U.jsx("h2",{className:"text-xl font-semibold mb-4",children:"Создать отчёт"}),U.jsxs("form",{onSubmit:Q,className:"space-y-4",children:[U.jsxs("div",{children:[U.jsx("label",{className:"block text-sm font-medium text-gray-700 mb-1",children:"Начало периода"}),U.jsx("input",{type:"date",value:r,onChange:G=>d(G.target.value),className:"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500",required:!0})]}),U.jsxs("div",{children:[U.jsx("label",{className:"block text-sm font-medium text-gray-700 mb-1",children:"Конец периода"}),U.jsx("input",{type:"date",value:y,onChange:G=>O(G.target.value),className:"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500",required:!0})]}),U.jsxs("div",{children:[U.jsx("label",{className:"block text-sm font-medium text-gray-700 mb-2",children:"Формат"}),U.jsx("div",{className:"flex gap-2",children:["excel","pdf","csv"].map(G=>U.jsx("button",{type:"button",onClick:()=>x(G),className:`flex-1 py-2 px-3 rounded-md text-sm font-medium ${E===G?"bg-blue-600 text-white":"bg-gray-100 text-gray-700 hover:bg-gray-200"}`,children:G.toUpperCase()},G))})]}),b&&U.jsx("p",{className:"text-red-500 text-sm",children:b}),U.jsxs("div",{className:"flex gap-3 pt-2",children:[U.jsx("button",{type:"button",onClick:u,className:"flex-1 py-2 px-4 border border-gray-300 text-gray-700 rounded-md hover:bg-gray-50",children:"Отмена"}),U.jsx("button",{type:"submit",disabled:_,className:"flex-1 py-2 px-4 bg-green-600 text-white rounded-md hover:bg-green-700 disabled:opacity-50",children:_?"Генерация...":"Скачать"})]})]})]})})}function dS({username:c,onLogout:u}){const[s,r]=it.useState(new Date),[d,y]=it.useState(!1),[O,E]=it.useState(!1),x=ml(qy(s),"yyyy-MM-dd"),b=ml(Hy(s),"yyyy-MM-dd"),{logs:j,isLoading:_,createLog:H,deleteLog:Q}=sS(x,b),G=j.reduce((B,bt)=>B+bt.minutes,0),L=Math.floor(G/60),F=G%60,P=()=>r(Nb(s)),et=()=>r(Ry(s,1)),K=async B=>{window.confirm("Удалить эту запись?")&&await Q(B)};return U.jsxs("div",{className:"min-h-screen bg-gray-50",children:[U.jsx("header",{className:"bg-white shadow-sm",children:U.jsxs("div",{className:"max-w-4xl mx-auto px-4 py-4 flex items-center justify-between",children:[U.jsx("h1",{className:"text-xl font-bold text-gray-800",children:"TimeTracker"}),U.jsxs("div",{className:"flex items-center gap-4",children:[U.jsx("span",{className:"text-gray-600 text-sm",children:c}),U.jsx("button",{onClick:u,className:"text-gray-500 hover:text-gray-700 text-sm",children:"Выйти"})]})]})}),U.jsxs("main",{className:"max-w-4xl mx-auto px-4 py-6",children:[U.jsxs("div",{className:"flex items-center justify-between mb-6",children:[U.jsx("button",{onClick:P,className:"p-2 hover:bg-gray-100 rounded-lg transition-colors",children:U.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-5 w-5 text-gray-600",viewBox:"0 0 20 20",fill:"currentColor",children:U.jsx("path",{fillRule:"evenodd",d:"M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z",clipRule:"evenodd"})})}),U.jsx("h2",{className:"text-lg font-semibold text-gray-700 capitalize",children:ml(s,"LLLL yyyy",{locale:Ly})}),U.jsx("button",{onClick:et,className:"p-2 hover:bg-gray-100 rounded-lg transition-colors",children:U.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-5 w-5 text-gray-600",viewBox:"0 0 20 20",fill:"currentColor",children:U.jsx("path",{fillRule:"evenodd",d:"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z",clipRule:"evenodd"})})})]}),U.jsx("div",{className:"bg-white rounded-lg shadow-sm border p-4 mb-6",children:U.jsxs("div",{className:"flex items-center justify-between",children:[U.jsxs("div",{children:[U.jsx("p",{className:"text-sm text-gray-500",children:"Всего за месяц"}),U.jsxs("p",{className:"text-2xl font-bold text-blue-600",children:[L,":",String(F).padStart(2,"0")]})]}),U.jsxs("div",{className:"text-right",children:[U.jsx("p",{className:"text-sm text-gray-500",children:"Записей"}),U.jsx("p",{className:"text-2xl font-bold text-gray-700",children:j.length})]})]})}),U.jsx(rS,{logs:j,onDelete:K,isLoading:_})]}),U.jsxs("div",{className:"fixed bottom-6 right-6 flex flex-col gap-3",children:[U.jsx("button",{onClick:()=>E(!0),className:"w-14 h-14 bg-green-600 text-white rounded-full shadow-lg hover:bg-green-700 transition-colors flex items-center justify-center",title:"Создать отчёт",children:U.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:U.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})})}),U.jsx("button",{onClick:()=>y(!0),className:"w-14 h-14 bg-blue-600 text-white rounded-full shadow-lg hover:bg-blue-700 transition-colors flex items-center justify-center",title:"Добавить запись",children:U.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-8 w-8",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:U.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 4v16m8-8H4"})})})]}),U.jsx(fS,{isOpen:d,onClose:()=>y(!1),onSave:H}),U.jsx(oS,{isOpen:O,onClose:()=>E(!1)})]})}function hS(){const{user:c,isLoading:u,isAuthenticated:s,login:r,register:d,logout:y}=s1();return u?U.jsx("div",{className:"min-h-screen flex items-center justify-center bg-gray-50",children:U.jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600"})}):!s||!c?U.jsx(r1,{onLogin:r,onRegister:d}):U.jsx(dS,{username:c.username,onLogout:y})}const mS=new Jg;Og.createRoot(document.getElementById("root")).render(U.jsx(yg.StrictMode,{children:U.jsx(Wg,{client:mS,children:U.jsx(hS,{})})})); diff --git a/frontend/dist/index.html b/frontend/dist/index.html new file mode 100644 index 0000000..7addb45 --- /dev/null +++ b/frontend/dist/index.html @@ -0,0 +1,14 @@ + + + + + + + TimeTracker + + + + +
+ + diff --git a/frontend/dist/vite.svg b/frontend/dist/vite.svg new file mode 100644 index 0000000..fabddc0 --- /dev/null +++ b/frontend/dist/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..6f6b647 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,13 @@ + + + + + + + TimeTracker + + +
+ + + diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..57d1b10 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,27 @@ +{ + "name": "timetracker-frontend", + "private": true, + "version": "1.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@tanstack/react-query": "^5.64.2", + "date-fns": "^4.1.0", + "react": "^19.0.0", + "react-dom": "^19.0.0" + }, + "devDependencies": { + "@types/react": "^19.0.7", + "@types/react-dom": "^19.0.3", + "@vitejs/plugin-react": "^4.3.4", + "autoprefixer": "^10.4.20", + "postcss": "^8.5.1", + "tailwindcss": "^3.4.17", + "typescript": "^5.7.3", + "vite": "^6.0.7" + } +} diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js new file mode 100644 index 0000000..2aa7205 --- /dev/null +++ b/frontend/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/frontend/public/vite.svg b/frontend/public/vite.svg new file mode 100644 index 0000000..fabddc0 --- /dev/null +++ b/frontend/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx new file mode 100644 index 0000000..0e934e5 --- /dev/null +++ b/frontend/src/App.tsx @@ -0,0 +1,23 @@ +import { useAuth } from './hooks/useAuth'; +import { LoginForm } from './components/LoginForm'; +import { Dashboard } from './components/Dashboard'; + +function App() { + const { user, isLoading, isAuthenticated, login, register, logout } = useAuth(); + + if (isLoading) { + return ( +
+
+
+ ); + } + + if (!isAuthenticated || !user) { + return ; + } + + return ; +} + +export default App; diff --git a/frontend/src/api/client.ts b/frontend/src/api/client.ts new file mode 100644 index 0000000..ab003c9 --- /dev/null +++ b/frontend/src/api/client.ts @@ -0,0 +1,69 @@ +const API_BASE = '/api'; + +function getToken(): string | null { + return localStorage.getItem('token'); +} + +export function setToken(token: string): void { + localStorage.setItem('token', token); +} + +export function clearToken(): void { + localStorage.removeItem('token'); +} + +export async function apiRequest( + endpoint: string, + options: RequestInit = {} +): Promise { + const token = getToken(); + const hasBody = options.body !== undefined; + const headers: HeadersInit = { + ...(hasBody && { 'Content-Type': 'application/json' }), + ...(token && { Authorization: `Bearer ${token}` }), + ...options.headers, + }; + + const response = await fetch(`${API_BASE}${endpoint}`, { + ...options, + headers, + }); + + if (!response.ok) { + const error = await response.json().catch(() => ({ error: 'Request failed' })); + throw new Error(error.error || 'Request failed'); + } + + return response.json(); +} + +export async function downloadReport( + startDate: string, + endDate: string, + format: 'pdf' | 'excel' | 'csv' +): Promise { + const token = getToken(); + const response = await fetch(`${API_BASE}/reports/generate`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + ...(token && { Authorization: `Bearer ${token}` }), + }, + body: JSON.stringify({ startDate, endDate, format }), + }); + + if (!response.ok) { + throw new Error('Failed to generate report'); + } + + const blob = await response.blob(); + const extension = format === 'excel' ? 'xlsx' : format; + const url = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = `report_${startDate}_${endDate}.${extension}`; + document.body.appendChild(a); + a.click(); + window.URL.revokeObjectURL(url); + document.body.removeChild(a); +} diff --git a/frontend/src/components/AddLogModal.tsx b/frontend/src/components/AddLogModal.tsx new file mode 100644 index 0000000..daf7134 --- /dev/null +++ b/frontend/src/components/AddLogModal.tsx @@ -0,0 +1,146 @@ +import { useState } from 'react'; +import { format } from 'date-fns'; + +interface Props { + isOpen: boolean; + onClose: () => void; + onSave: (data: { date: string; time: string; description: string }) => Promise; +} + +export function AddLogModal({ isOpen, onClose, onSave }: Props) { + const [date, setDate] = useState(format(new Date(), 'yyyy-MM-dd')); + const [time, setTime] = useState('8'); + const [description, setDescription] = useState(''); + const [error, setError] = useState(''); + const [isLoading, setIsLoading] = useState(false); + + if (!isOpen) return null; + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + setError(''); + setIsLoading(true); + + try { + await onSave({ date, time, description }); + setTime('8'); + setDescription(''); + onClose(); + } catch (err) { + setError(err instanceof Error ? err.message : 'Ошибка'); + } finally { + setIsLoading(false); + } + }; + + const setQuickTime = (value: string) => { + setTime(value); + }; + + return ( +
+
+

Новая запись

+ +
+
+ + setDate(e.target.value)} + className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" + required + /> +
+ +
+ +
+ + + +
+ setTime(e.target.value)} + placeholder="8, 8:30, 8,5" + className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" + required + /> +

+ Форматы: 8, 8:30, 8,5, 8.5 +

+
+ +
+ +