diff --git a/package.json b/package.json index 25376d8..32e1b06 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "@radix-ui/react-popover": "^1.1.1", "@radix-ui/react-progress": "^1.1.0", "@radix-ui/react-radio-group": "^1.2.0", + "@radix-ui/react-scroll-area": "^1.1.0", "@radix-ui/react-select": "^2.1.1", "@radix-ui/react-slot": "^1.1.0", "@radix-ui/react-switch": "^1.1.0", @@ -37,13 +38,13 @@ "drizzle-orm": "^0.30.10", "geist": "^1.3.1", "lucide-react": "^0.411.0", - "mysql2": "^3.10.3", + "mysql2": "^3.11.0", "next": "^14.2.5", "next-auth": "5.0.0-beta.19", "next-themes": "^0.3.0", "pm2": "^5.4.2", "react": "^18.3.1", - "react-day-picker": "^9.0.3", + "react-day-picker": "^9.0.5", "react-dom": "^18.3.1", "react-hook-form": "^7.52.1", "server-only": "^0.0.1", @@ -56,19 +57,19 @@ }, "devDependencies": { "@types/eslint": "^8.56.11", - "@types/node": "^20.14.12", + "@types/node": "^20.14.13", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", - "@typescript-eslint/eslint-plugin": "^7.17.0", - "@typescript-eslint/parser": "^7.17.0", + "@typescript-eslint/eslint-plugin": "^7.18.0", + "@typescript-eslint/parser": "^7.18.0", "drizzle-kit": "^0.21.4", "eslint": "^8.57.0", "eslint-config-next": "^14.2.5", "eslint-plugin-drizzle": "^0.2.3", - "postcss": "^8.4.39", + "postcss": "^8.4.40", "prettier": "^3.3.3", "prettier-plugin-tailwindcss": "^0.6.5", - "tailwindcss": "^3.4.6", + "tailwindcss": "^3.4.7", "typescript": "^5.5.4" }, "ct3aMetadata": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c1fbda5..7be1597 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,6 +32,9 @@ importers: '@radix-ui/react-radio-group': specifier: ^1.2.0 version: 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-scroll-area': + specifier: ^1.1.0 + version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-select': specifier: ^2.1.1 version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -67,7 +70,7 @@ importers: version: 3.6.0 drizzle-orm: specifier: ^0.30.10 - version: 0.30.10(@types/react@18.3.3)(mysql2@3.10.3)(react@18.3.1) + version: 0.30.10(@types/react@18.3.3)(mysql2@3.11.0)(react@18.3.1) geist: specifier: ^1.3.1 version: 1.3.1(next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) @@ -75,8 +78,8 @@ importers: specifier: ^0.411.0 version: 0.411.0(react@18.3.1) mysql2: - specifier: ^3.10.3 - version: 3.10.3 + specifier: ^3.11.0 + version: 3.11.0 next: specifier: ^14.2.5 version: 14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -93,8 +96,8 @@ importers: specifier: ^18.3.1 version: 18.3.1 react-day-picker: - specifier: ^9.0.3 - version: 9.0.3(react@18.3.1) + specifier: ^9.0.5 + version: 9.0.5(react@18.3.1) react-dom: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) @@ -115,7 +118,7 @@ importers: version: 2.4.0 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.6) + version: 1.0.7(tailwindcss@3.4.7) vaul: specifier: ^0.9.1 version: 0.9.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -127,8 +130,8 @@ importers: specifier: ^8.56.11 version: 8.56.11 '@types/node': - specifier: ^20.14.12 - version: 20.14.12 + specifier: ^20.14.13 + version: 20.14.13 '@types/react': specifier: ^18.3.3 version: 18.3.3 @@ -136,11 +139,11 @@ importers: specifier: ^18.3.0 version: 18.3.0 '@typescript-eslint/eslint-plugin': - specifier: ^7.17.0 - version: 7.17.0(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) + specifier: ^7.18.0 + version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/parser': - specifier: ^7.17.0 - version: 7.17.0(eslint@8.57.0)(typescript@5.5.4) + specifier: ^7.18.0 + version: 7.18.0(eslint@8.57.0)(typescript@5.5.4) drizzle-kit: specifier: ^0.21.4 version: 0.21.4 @@ -154,8 +157,8 @@ importers: specifier: ^0.2.3 version: 0.2.3(eslint@8.57.0) postcss: - specifier: ^8.4.39 - version: 8.4.39 + specifier: ^8.4.40 + version: 8.4.40 prettier: specifier: ^3.3.3 version: 3.3.3 @@ -163,8 +166,8 @@ importers: specifier: ^0.6.5 version: 0.6.5(prettier@3.3.3) tailwindcss: - specifier: ^3.4.6 - version: 3.4.6 + specifier: ^3.4.7 + version: 3.4.7 typescript: specifier: ^5.5.4 version: 5.5.4 @@ -189,8 +192,8 @@ packages: nodemailer: optional: true - '@babel/runtime@7.24.8': - resolution: {integrity: sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==} + '@babel/runtime@7.25.0': + resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==} engines: {node: '>=6.9.0'} '@emnapi/runtime@1.2.0': @@ -1140,6 +1143,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-scroll-area@1.1.0': + resolution: {integrity: sha512-9ArIZ9HWhsrfqS765h+GZuLoxaRHD/j0ZWOWilsCvYTpYJp8XwCqNG7Dt9Nu/TItKOdgLGkOPCodQvDc+UMwYg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-select@2.1.1': resolution: {integrity: sha512-8iRDfyLtzxlprOo9IicnzvpsO1wNCkuwzzCM+Z5Rb5tNOpCdMvcc2AkzX0Fz+Tz9v6NJ5B/7EEgyZveo4FBRfQ==} peerDependencies: @@ -1338,8 +1354,8 @@ packages: '@radix-ui/rect@1.1.0': resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} - '@rushstack/eslint-patch@1.10.3': - resolution: {integrity: sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==} + '@rushstack/eslint-patch@1.10.4': + resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} @@ -1383,8 +1399,8 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/node@20.14.12': - resolution: {integrity: sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==} + '@types/node@20.14.13': + resolution: {integrity: sha512-+bHoGiZb8UiQ0+WEtmph2IWQCjIqg8MDZMAV+ppRRhUZnquF5mQkP/9vpSwJClEiSM/C7fZZExPzfU0vJTyp8w==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1395,8 +1411,8 @@ packages: '@types/react@18.3.3': resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} - '@typescript-eslint/eslint-plugin@7.17.0': - resolution: {integrity: sha512-pyiDhEuLM3PuANxH7uNYan1AaFs5XE0zw1hq69JBvGvE7gSuEoQl1ydtEe/XQeoC3GQxLXyOVa5kNOATgM638A==} + '@typescript-eslint/eslint-plugin@7.18.0': + resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -1406,8 +1422,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@7.17.0': - resolution: {integrity: sha512-puiYfGeg5Ydop8eusb/Hy1k7QmOU6X3nvsqCgzrB2K4qMavK//21+PzNE8qeECgNOIoertJPUC1SpegHDI515A==} + '@typescript-eslint/parser@7.18.0': + resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -1426,16 +1442,16 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@7.17.0': - resolution: {integrity: sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==} + '@typescript-eslint/scope-manager@7.18.0': + resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} engines: {node: ^18.18.0 || >=20.0.0} '@typescript-eslint/scope-manager@7.2.0': resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/type-utils@7.17.0': - resolution: {integrity: sha512-XD3aaBt+orgkM/7Cei0XNEm1vwUxQ958AOLALzPlbPqb8C1G8PZK85tND7Jpe69Wualri81PLU+Zc48GVKIMMA==} + '@typescript-eslint/type-utils@7.18.0': + resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -1444,16 +1460,16 @@ packages: typescript: optional: true - '@typescript-eslint/types@7.17.0': - resolution: {integrity: sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==} + '@typescript-eslint/types@7.18.0': + resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} engines: {node: ^18.18.0 || >=20.0.0} '@typescript-eslint/types@7.2.0': resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/typescript-estree@7.17.0': - resolution: {integrity: sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==} + '@typescript-eslint/typescript-estree@7.18.0': + resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -1470,14 +1486,14 @@ packages: typescript: optional: true - '@typescript-eslint/utils@7.17.0': - resolution: {integrity: sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==} + '@typescript-eslint/utils@7.18.0': + resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/visitor-keys@7.17.0': - resolution: {integrity: sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==} + '@typescript-eslint/visitor-keys@7.18.0': + resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} engines: {node: ^18.18.0 || >=20.0.0} '@typescript-eslint/visitor-keys@7.2.0': @@ -1607,8 +1623,8 @@ packages: resolution: {integrity: sha512-+H+kuK34PfMaI9PNU/NSjBKL5hh/KDM9J72kwYeYEm0A8B1AC4fuCy3qsjnA7lxklgyXsB68yn8Z2xoZEjgwCQ==} engines: {node: '>= 6.0.0'} - axe-core@4.9.1: - resolution: {integrity: sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==} + axe-core@4.10.0: + resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} engines: {node: '>=4'} axobject-query@3.1.1: @@ -1662,8 +1678,8 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - caniuse-lite@1.0.30001643: - resolution: {integrity: sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==} + caniuse-lite@1.0.30001644: + resolution: {integrity: sha512-YGvlOZB4QhZuiis+ETS0VXR+MExbFf4fZYYeMTEE0aTQd/RdIjkTyZjLrbYVKnHzppDvnOhritRVv+i7Go6mHw==} chalk@3.0.0: resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} @@ -1798,8 +1814,8 @@ packages: supports-color: optional: true - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -2015,8 +2031,8 @@ packages: es6-weak-map@2.0.3: resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} - esbuild-register@3.5.0: - resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} + esbuild-register@3.6.0: + resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} peerDependencies: esbuild: '>=0.12 <1' @@ -2725,8 +2741,8 @@ packages: mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - mysql2@3.10.3: - resolution: {integrity: sha512-k43gmH9i79rZD4hGPdj7pDuT0UBiFjs4UzXEy1cJrV0QqcSABomoLwvejqdbcXN+Vd7gi999CVM6o9vCPKq29g==} + mysql2@3.11.0: + resolution: {integrity: sha512-J9phbsXGvTOcRVPR95YedzVSxJecpW5A5+cQ57rhHIFXteTP10HCs+VBjS7DHIKfEaI1zQ5tlVrquCd64A6YvA==} engines: {node: '>= 8.0'} mz@2.7.0: @@ -2994,8 +3010,8 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.4.39: - resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} + postcss@8.4.40: + resolution: {integrity: sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==} engines: {node: ^10 || ^12 || >=14} preact-render-to-string@5.2.3: @@ -3090,8 +3106,8 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - react-day-picker@9.0.3: - resolution: {integrity: sha512-/vz4hWvNWFzBAaxS/US9Q/Yj1tYMe6u5UgzAxy58XCSkEsldZ/jLb+mLSl9vdcmCkAbV846Ypb7R3FpKGrYPag==} + react-day-picker@9.0.5: + resolution: {integrity: sha512-hHeB+auG71OHNcas+/S6oeqzk/szQaMEKNuU1sTBg7wmpYkVJdRaqv8BIWgSkLT+3KdjmvnEdZUURaleNAKMvQ==} peerDependencies: react: '>=16.8.0' @@ -3425,8 +3441,8 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || insiders' - tailwindcss@3.4.6: - resolution: {integrity: sha512-1uRHzPB+Vzu57ocybfZ4jh5Q3SdlH7XW23J5sQoM9LhE9eIOlzxer/3XPSsycvih3rboRsvt0QCmzSrqyOYUIA==} + tailwindcss@3.4.7: + resolution: {integrity: sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ==} engines: {node: '>=14.0.0'} hasBin: true @@ -3558,8 +3574,8 @@ packages: which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - which-builtin-type@1.1.3: - resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + which-builtin-type@1.1.4: + resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} engines: {node: '>= 0.4'} which-collection@1.0.2: @@ -3608,8 +3624,8 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.4.5: - resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==} + yaml@2.5.0: + resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} engines: {node: '>= 14'} hasBin: true @@ -3634,7 +3650,7 @@ snapshots: preact: 10.11.3 preact-render-to-string: 5.2.3(preact@10.11.3) - '@babel/runtime@7.24.8': + '@babel/runtime@7.25.0': dependencies: regenerator-runtime: 0.14.1 @@ -3798,7 +3814,7 @@ snapshots: '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.5 + debug: 4.3.6 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.1 @@ -3835,7 +3851,7 @@ snapshots: '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.5 + debug: 4.3.6 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -4000,7 +4016,7 @@ snapshots: async: 3.2.5 chalk: 3.0.0 dayjs: 1.8.36 - debug: 4.3.5 + debug: 4.3.6 eventemitter2: 5.0.1 fast-json-patch: 3.1.1 fclone: 1.0.11 @@ -4018,7 +4034,7 @@ snapshots: '@pm2/io@6.0.1': dependencies: async: 2.6.4 - debug: 4.3.5 + debug: 4.3.6 eventemitter2: 6.4.9 require-in-the-middle: 5.2.0 semver: 7.5.4 @@ -4031,9 +4047,9 @@ snapshots: '@pm2/js-api@0.8.0': dependencies: async: 2.6.4 - debug: 4.3.5 + debug: 4.3.6 eventemitter2: 6.4.9 - extrareqp2: 1.0.0(debug@4.3.5) + extrareqp2: 1.0.0(debug@4.3.6) ws: 7.5.10 transitivePeerDependencies: - bufferutil @@ -4042,7 +4058,7 @@ snapshots: '@pm2/pm2-version-check@1.0.4': dependencies: - debug: 4.3.5 + debug: 4.3.6 transitivePeerDependencies: - supports-color @@ -4050,7 +4066,7 @@ snapshots: '@radix-ui/primitive@1.0.1': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 '@radix-ui/primitive@1.1.0': {} @@ -4093,7 +4109,7 @@ snapshots: '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 react: 18.3.1 optionalDependencies: '@types/react': 18.3.3 @@ -4106,7 +4122,7 @@ snapshots: '@radix-ui/react-context@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 react: 18.3.1 optionalDependencies: '@types/react': 18.3.3 @@ -4119,7 +4135,7 @@ snapshots: '@radix-ui/react-dialog@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) @@ -4170,7 +4186,7 @@ snapshots: '@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -4212,7 +4228,7 @@ snapshots: '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 react: 18.3.1 optionalDependencies: '@types/react': 18.3.3 @@ -4225,7 +4241,7 @@ snapshots: '@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) @@ -4248,7 +4264,7 @@ snapshots: '@radix-ui/react-id@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -4339,7 +4355,7 @@ snapshots: '@radix-ui/react-portal@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -4359,7 +4375,7 @@ snapshots: '@radix-ui/react-presence@1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 @@ -4380,7 +4396,7 @@ snapshots: '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -4442,6 +4458,23 @@ snapshots: '@types/react': 18.3.3 '@types/react-dom': 18.3.0 + '@radix-ui/react-scroll-area@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/number': 1.1.0 + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + '@radix-ui/react-select@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/number': 1.1.0 @@ -4473,7 +4506,7 @@ snapshots: '@radix-ui/react-slot@1.0.2(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -4549,7 +4582,7 @@ snapshots: '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 react: 18.3.1 optionalDependencies: '@types/react': 18.3.3 @@ -4562,7 +4595,7 @@ snapshots: '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -4577,7 +4610,7 @@ snapshots: '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -4592,7 +4625,7 @@ snapshots: '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.0 react: 18.3.1 optionalDependencies: '@types/react': 18.3.3 @@ -4634,7 +4667,7 @@ snapshots: '@radix-ui/rect@1.1.0': {} - '@rushstack/eslint-patch@1.10.3': {} + '@rushstack/eslint-patch@1.10.4': {} '@swc/counter@0.1.3': {} @@ -4671,7 +4704,7 @@ snapshots: '@types/json5@0.0.29': {} - '@types/node@20.14.12': + '@types/node@20.14.13': dependencies: undici-types: 5.26.5 @@ -4686,14 +4719,14 @@ snapshots: '@types/prop-types': 15.7.12 csstype: 3.1.3 - '@typescript-eslint/eslint-plugin@7.17.0(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)': dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/scope-manager': 7.17.0 - '@typescript-eslint/type-utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 7.17.0 + '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 7.18.0 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 @@ -4704,13 +4737,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4)': dependencies: - '@typescript-eslint/scope-manager': 7.17.0 - '@typescript-eslint/types': 7.17.0 - '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 7.17.0 - debug: 4.3.5 + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.3.6 eslint: 8.57.0 optionalDependencies: typescript: 5.5.4 @@ -4723,28 +4756,28 @@ snapshots: '@typescript-eslint/types': 7.2.0 '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 7.2.0 - debug: 4.3.5 + debug: 4.3.6 eslint: 8.57.0 optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@7.17.0': + '@typescript-eslint/scope-manager@7.18.0': dependencies: - '@typescript-eslint/types': 7.17.0 - '@typescript-eslint/visitor-keys': 7.17.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 '@typescript-eslint/scope-manager@7.2.0': dependencies: '@typescript-eslint/types': 7.2.0 '@typescript-eslint/visitor-keys': 7.2.0 - '@typescript-eslint/type-utils@7.17.0(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/type-utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)': dependencies: - '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4) - '@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4) - debug: 4.3.5 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + debug: 4.3.6 eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: @@ -4752,15 +4785,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@7.17.0': {} + '@typescript-eslint/types@7.18.0': {} '@typescript-eslint/types@7.2.0': {} - '@typescript-eslint/typescript-estree@7.17.0(typescript@5.5.4)': + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4)': dependencies: - '@typescript-eslint/types': 7.17.0 - '@typescript-eslint/visitor-keys': 7.17.0 - debug: 4.3.5 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.3.6 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 @@ -4775,7 +4808,7 @@ snapshots: dependencies: '@typescript-eslint/types': 7.2.0 '@typescript-eslint/visitor-keys': 7.2.0 - debug: 4.3.5 + debug: 4.3.6 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 @@ -4786,20 +4819,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.17.0(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@typescript-eslint/scope-manager': 7.17.0 - '@typescript-eslint/types': 7.17.0 - '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@7.17.0': + '@typescript-eslint/visitor-keys@7.18.0': dependencies: - '@typescript-eslint/types': 7.17.0 + '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 '@typescript-eslint/visitor-keys@7.2.0': @@ -4817,7 +4850,7 @@ snapshots: agent-base@7.1.1: dependencies: - debug: 4.3.5 + debug: 4.3.6 transitivePeerDependencies: - supports-color @@ -4950,7 +4983,7 @@ snapshots: aws-ssl-profiles@1.1.1: {} - axe-core@4.9.1: {} + axe-core@4.10.0: {} axobject-query@3.1.1: dependencies: @@ -4997,7 +5030,7 @@ snapshots: camelcase-css@2.0.1: {} - caniuse-lite@1.0.30001643: {} + caniuse-lite@1.0.30001644: {} chalk@3.0.0: dependencies: @@ -5132,7 +5165,7 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.5: + debug@4.3.6: dependencies: ms: 2.1.2 @@ -5213,7 +5246,7 @@ snapshots: commander: 9.5.0 env-paths: 3.0.0 esbuild: 0.19.12 - esbuild-register: 3.5.0(esbuild@0.19.12) + esbuild-register: 3.6.0(esbuild@0.19.12) glob: 8.1.0 hanji: 0.0.5 json-diff: 0.9.0 @@ -5221,10 +5254,10 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.30.10(@types/react@18.3.3)(mysql2@3.10.3)(react@18.3.1): + drizzle-orm@0.30.10(@types/react@18.3.3)(mysql2@3.11.0)(react@18.3.1): optionalDependencies: '@types/react': 18.3.3 - mysql2: 3.10.3 + mysql2: 3.11.0 react: 18.3.1 eastasianwidth@0.2.0: {} @@ -5373,9 +5406,9 @@ snapshots: es6-iterator: 2.0.3 es6-symbol: 3.1.4 - esbuild-register@3.5.0(esbuild@0.19.12): + esbuild-register@3.6.0(esbuild@0.19.12): dependencies: - debug: 4.3.5 + debug: 4.3.6 esbuild: 0.19.12 transitivePeerDependencies: - supports-color @@ -5444,12 +5477,12 @@ snapshots: eslint-config-next@14.2.5(eslint@8.57.0)(typescript@5.5.4): dependencies: '@next/eslint-plugin-next': 14.2.5 - '@rushstack/eslint-patch': 1.10.3 + '@rushstack/eslint-patch': 1.10.4 '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.9.0(eslint@8.57.0) eslint-plugin-react: 7.35.0(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) @@ -5469,11 +5502,11 @@ snapshots: eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): dependencies: - debug: 4.3.5 + debug: 4.3.6 enhanced-resolve: 5.17.1 eslint: 8.57.0 eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.6 is-core-module: 2.15.0 @@ -5484,11 +5517,11 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: @@ -5509,7 +5542,7 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 @@ -5519,7 +5552,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.15.0 is-glob: 4.0.3 @@ -5530,7 +5563,7 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -5542,7 +5575,7 @@ snapshots: array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 ast-types-flow: 0.0.8 - axe-core: 4.9.1 + axe-core: 4.10.0 axobject-query: 3.1.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 @@ -5602,7 +5635,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.5 + debug: 4.3.6 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -5674,9 +5707,9 @@ snapshots: dependencies: type: 2.7.3 - extrareqp2@1.0.0(debug@4.3.5): + extrareqp2@1.0.0(debug@4.3.6): dependencies: - follow-redirects: 1.15.6(debug@4.3.5) + follow-redirects: 1.15.6(debug@4.3.6) transitivePeerDependencies: - debug @@ -5723,9 +5756,9 @@ snapshots: flatted@3.3.1: {} - follow-redirects@1.15.6(debug@4.3.5): + follow-redirects@1.15.6(debug@4.3.6): optionalDependencies: - debug: 4.3.5 + debug: 4.3.6 for-each@0.3.3: dependencies: @@ -5790,7 +5823,7 @@ snapshots: dependencies: basic-ftp: 5.0.5 data-uri-to-buffer: 6.0.2 - debug: 4.3.5 + debug: 4.3.6 fs-extra: 11.2.0 transitivePeerDependencies: - supports-color @@ -5899,14 +5932,14 @@ snapshots: http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.1 - debug: 4.3.5 + debug: 4.3.6 transitivePeerDependencies: - supports-color https-proxy-agent@7.0.5: dependencies: agent-base: 7.1.1 - debug: 4.3.5 + debug: 4.3.6 transitivePeerDependencies: - supports-color @@ -6240,7 +6273,7 @@ snapshots: mute-stream@0.0.8: {} - mysql2@3.10.3: + mysql2@3.11.0: dependencies: aws-ssl-profiles: 1.1.1 denque: 2.1.0 @@ -6294,7 +6327,7 @@ snapshots: '@next/env': 14.2.5 '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001643 + caniuse-lite: 1.0.30001644 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.3.1 @@ -6393,7 +6426,7 @@ snapshots: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.1 - debug: 4.3.5 + debug: 4.3.6 get-uri: 6.0.3 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 @@ -6449,7 +6482,7 @@ snapshots: pm2-axon-rpc@0.7.1: dependencies: - debug: 4.3.5 + debug: 4.3.6 transitivePeerDependencies: - supports-color @@ -6457,7 +6490,7 @@ snapshots: dependencies: amp: 0.3.1 amp-message: 0.1.2 - debug: 4.3.5 + debug: 4.3.6 escape-string-regexp: 4.0.0 transitivePeerDependencies: - supports-color @@ -6474,7 +6507,7 @@ snapshots: pm2-sysmonit@1.2.8: dependencies: async: 3.2.5 - debug: 4.3.5 + debug: 4.3.6 pidusage: 2.0.21 systeminformation: 5.22.11 tx2: 1.0.5 @@ -6496,7 +6529,7 @@ snapshots: commander: 2.15.1 croner: 4.1.97 dayjs: 1.11.12 - debug: 4.3.5 + debug: 4.3.6 enquirer: 2.3.6 eventemitter2: 5.0.1 fclone: 1.0.11 @@ -6522,28 +6555,28 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss-import@15.1.0(postcss@8.4.39): + postcss-import@15.1.0(postcss@8.4.40): dependencies: - postcss: 8.4.39 + postcss: 8.4.40 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.39): + postcss-js@4.0.1(postcss@8.4.40): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.39 + postcss: 8.4.40 - postcss-load-config@4.0.2(postcss@8.4.39): + postcss-load-config@4.0.2(postcss@8.4.40): dependencies: lilconfig: 3.1.2 - yaml: 2.4.5 + yaml: 2.5.0 optionalDependencies: - postcss: 8.4.39 + postcss: 8.4.40 - postcss-nested@6.2.0(postcss@8.4.39): + postcss-nested@6.2.0(postcss@8.4.40): dependencies: - postcss: 8.4.39 + postcss: 8.4.40 postcss-selector-parser: 6.1.1 postcss-selector-parser@6.1.1: @@ -6559,7 +6592,7 @@ snapshots: picocolors: 1.0.1 source-map-js: 1.2.0 - postcss@8.4.39: + postcss@8.4.40: dependencies: nanoid: 3.3.7 picocolors: 1.0.1 @@ -6595,7 +6628,7 @@ snapshots: proxy-agent@6.3.1: dependencies: agent-base: 7.1.1 - debug: 4.3.5 + debug: 4.3.6 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 lru-cache: 7.18.3 @@ -6611,7 +6644,7 @@ snapshots: queue-microtask@1.2.3: {} - react-day-picker@9.0.3(react@18.3.1): + react-day-picker@9.0.5(react@18.3.1): dependencies: date-fns: 3.6.0 react: 18.3.1 @@ -6691,7 +6724,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.4 globalthis: 1.0.4 - which-builtin-type: 1.1.3 + which-builtin-type: 1.1.4 regenerator-runtime@0.14.1: {} @@ -6704,7 +6737,7 @@ snapshots: require-in-the-middle@5.2.0: dependencies: - debug: 4.3.5 + debug: 4.3.6 module-details-from-path: 1.0.3 resolve: 1.22.8 transitivePeerDependencies: @@ -6847,7 +6880,7 @@ snapshots: socks-proxy-agent@8.0.4: dependencies: agent-base: 7.1.1 - debug: 4.3.5 + debug: 4.3.6 socks: 2.8.3 transitivePeerDependencies: - supports-color @@ -6977,11 +7010,11 @@ snapshots: tailwind-merge@2.4.0: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.6): + tailwindcss-animate@1.0.7(tailwindcss@3.4.7): dependencies: - tailwindcss: 3.4.6 + tailwindcss: 3.4.7 - tailwindcss@3.4.6: + tailwindcss@3.4.7: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -6997,11 +7030,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.1 - postcss: 8.4.39 - postcss-import: 15.1.0(postcss@8.4.39) - postcss-js: 4.0.1(postcss@8.4.39) - postcss-load-config: 4.0.2(postcss@8.4.39) - postcss-nested: 6.2.0(postcss@8.4.39) + postcss: 8.4.40 + postcss-import: 15.1.0(postcss@8.4.40) + postcss-js: 4.0.1(postcss@8.4.40) + postcss-load-config: 4.0.2(postcss@8.4.40) + postcss-nested: 6.2.0(postcss@8.4.40) postcss-selector-parser: 6.1.1 resolve: 1.22.8 sucrase: 3.35.0 @@ -7151,7 +7184,7 @@ snapshots: is-string: 1.0.7 is-symbol: 1.0.4 - which-builtin-type@1.1.3: + which-builtin-type@1.1.4: dependencies: function.prototype.name: 1.1.6 has-tostringtag: 1.0.2 @@ -7207,7 +7240,7 @@ snapshots: yallist@4.0.0: {} - yaml@2.4.5: {} + yaml@2.5.0: {} yocto-queue@0.1.0: {} diff --git a/src/app/api/get_paginated_history/route.ts b/src/app/api/get_paginated_history/route.ts index 8fd3d7b..f359f4f 100644 --- a/src/app/api/get_paginated_history/route.ts +++ b/src/app/api/get_paginated_history/route.ts @@ -1,12 +1,13 @@ "use server"; import { NextResponse } from 'next/server'; -import { getHistory } from '~/server/functions'; +import { get_history } from '~/server/functions'; import { auth } from '~/auth'; export const GET = async (request: Request) => { try { const url = new URL(request.url); const apiKey = url.searchParams.get('apikey'); + const userId = Number(url.searchParams.get('user_id')) || -1; const page = Number(url.searchParams.get('page')) || 1; const perPage = Number(url.searchParams.get('per_page')) || 50; if (apiKey !== process.env.API_KEY) { @@ -17,7 +18,7 @@ export const GET = async (request: Request) => { { status: 401 } ); } - const historyData = await getHistory(page, perPage); + const historyData = await get_history(userId, page, perPage); return NextResponse.json(historyData, { status: 200 }); } catch (error) { console.error('Error fetching history data:', error); diff --git a/src/components/ui/History_Drawer.tsx b/src/components/ui/History_Drawer.tsx index 04674a0..1a86a1e 100644 --- a/src/components/ui/History_Drawer.tsx +++ b/src/components/ui/History_Drawer.tsx @@ -1,8 +1,7 @@ import React, { useState, useEffect } from "react"; import Image from "next/image"; +import { ScrollArea } from "~/components/ui/shadcn/scroll-area"; import { - Drawer, - DrawerTrigger, DrawerClose, DrawerContent, DrawerFooter, @@ -30,7 +29,7 @@ type HistoryEntry = { name: string; status: string; updatedAt: Date; -} +}; type PaginatedHistory = { data: HistoryEntry[]; meta: { @@ -39,112 +38,116 @@ type PaginatedHistory = { total_pages: number; total_count: number; } -} +}; +type History_Drawer_Props = { + user_id: number; +}; -export default function History_Drawer() { +const History_Drawer: React.FC = ({ user_id }) => { const [history, setHistory] = useState([]); const [page, setPage] = useState(1); const [totalPages, setTotalPages] = useState(1); - const perPage = 5; + const perPage = 50; + + const fetchHistory = async (currentPage: number, user_id: number) => { + try { + const response = await fetch(`/api/get_paginated_history?user_id=${user_id}&page=${currentPage}&per_page=${perPage}`); + if (!response.ok) throw new Error('Failed to fetch history'); + const data: PaginatedHistory = await response.json() as PaginatedHistory; + setHistory(data.data); + setTotalPages(data.meta.total_pages); + } catch (error) { + console.error('Error fetching history:', error); + } + }; useEffect(() => { - const fetchHistory = async (currentPage: number) => { - try { - const response = await fetch(`/api/get_paginated_history?page=${currentPage}&per_page=${perPage}`); - if (!response.ok) - throw new Error('Failed to fetch history'); - const data: PaginatedHistory = await response.json() as PaginatedHistory; - setHistory(data.data); - setTotalPages(data.meta.total_pages); - } catch (error) { - console.error('Error fetching history:', error); - } - }; - fetchHistory(page) - .catch((error) => { + fetchHistory(page, user_id).catch((error) => { console.error('Error fetching history:', error); }); - }, [page]); + }, [page, user_id]); const handlePageChange = (newPage: number) => { setPage(newPage); }; return ( - - - Status - - - - -
- Tech Tracker Logo -

- History -

-
-
-
- + + + +
+ +

+ History +

+
+
+
+ +
- Name - Status - Updated At + Name + Status + Updated At {history.map((entry, index) => ( - {entry.name} - {entry.status} - {new Date(entry.updatedAt).toLocaleString()} + {entry.name} + {entry.status} + {new Date(entry.updatedAt).toLocaleString()} ))}
- - - - {page > 1 && ( - - { - e.preventDefault(); - handlePageChange(page - 1); - }} - /> - - )} -

Page {page}

- {page < totalPages && ( - - { - e.preventDefault(); - handlePageChange(page + 1); - }} - /> - - )} -
-
- - -
-
-
+ + + + + {page > 1 && ( + + { + e.preventDefault(); + handlePageChange(page - 1); + }} + /> + + )} +

+ Page +

+ {page} +

+ of +

+ {totalPages} +

+ + {page < totalPages && ( + + { + e.preventDefault(); + handlePageChange(page + 1); + }} + /> + + )} +
+
+ + +
+ ); -} +}; + +export default History_Drawer; // If you want to show all page numbers: //{Array.from({ length: totalPages }).map((_, idx) => ( // @@ -158,4 +161,3 @@ export default function History_Drawer() { // // //))} - diff --git a/src/components/ui/Tech_Table.tsx b/src/components/ui/Tech_Table.tsx index 7eb10fa..3fc42f2 100644 --- a/src/components/ui/Tech_Table.tsx +++ b/src/components/ui/Tech_Table.tsx @@ -3,6 +3,8 @@ import { useState, useEffect, useCallback } from 'react'; import { useSession } from "next-auth/react"; import Loading from "~/components/ui/Loading"; import { useTVMode } from "~/components/context/TVModeContext"; +import { Drawer, DrawerTrigger } from "~/components/ui/shadcn/drawer"; + import History_Drawer from "~/components/ui/History_Drawer"; type Employee = { @@ -20,6 +22,7 @@ export default function Tech_Table({ employees }: { employees: Employee[] }) { const [selectAll, setSelectAll] = useState(false); const [employeeStatus, setStatus] = useState(''); const [employeeData, setEmployeeData] = useState(employees); + const [selectedUserId, setSelectedUserId] = useState(-1); const fetch_employees = useCallback(async (): Promise => { const res = await fetch('/api/get_technicians', { @@ -95,6 +98,10 @@ export default function Tech_Table({ employees }: { employees: Employee[] }) { } }; + const handleStatusClick = (id: number) => { + setSelectedUserId(id); + }; + const formatTime = (timestamp: Date) => { const date = new Date(timestamp); const time = date.toLocaleTimeString('en-US', { @@ -167,7 +174,12 @@ export default function Tech_Table({ employees }: { employees: Employee[] }) { )} Name - + + + Status + + + Updated At @@ -193,9 +205,16 @@ export default function Tech_Table({ employees }: { employees: Employee[] }) { {employee.name} - + + + + + {selectedUserId !== -1 && ( + + )} + {formatTime(employee.updatedAt)} diff --git a/src/components/ui/shadcn/scroll-area.tsx b/src/components/ui/shadcn/scroll-area.tsx new file mode 100644 index 0000000..f66ab4f --- /dev/null +++ b/src/components/ui/shadcn/scroll-area.tsx @@ -0,0 +1,48 @@ +"use client" + +import * as React from "react" +import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area" + +import { cn } from "~/lib/utils" + +const ScrollArea = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + {children} + + + + +)) +ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName + +const ScrollBar = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, orientation = "vertical", ...props }, ref) => ( + + + +)) +ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName + +export { ScrollArea, ScrollBar } diff --git a/src/server/functions.ts b/src/server/functions.ts index db4638e..91dc22c 100644 --- a/src/server/functions.ts +++ b/src/server/functions.ts @@ -68,32 +68,46 @@ type PaginatedHistory = { } } -export const getHistory = - async (page: number, perPage: number): Promise => { +export const get_history = async (user_id: number, page: number, perPage: number): Promise => { const offset = (page - 1) * perPage; - const historyQuery = sql` + let historyQuery = sql` SELECT u.name, h.status, h.updatedAt FROM history h JOIN users u ON h.user_id = u.id + WHERE h.user_id = ${user_id} ORDER BY h.id DESC LIMIT ${perPage} OFFSET ${offset} `; - const countQuery = sql` + let countQuery = sql` SELECT COUNT(*) AS total_count FROM history + WHERE user_id = ${user_id} `; - const [historyResults, countResults] = await Promise.all([ + if (user_id === -1) { + historyQuery = sql` + SELECT u.name, h.status, h.updatedAt + FROM history h + JOIN users u ON h.user_id = u.id + ORDER BY h.id DESC + LIMIT ${perPage} OFFSET ${offset} + `; + countQuery = sql` + SELECT COUNT(*) AS total_count + FROM history + `; + } + const [historyresults, countresults] = await Promise.all([ db.execute(historyQuery), db.execute(countQuery), ]); // Safely cast results - const historyRows = historyResults[0] as unknown as + const historyrows = historyresults[0] as unknown as { name: string, status: string, updatedAt: Date }[]; - const countRow = countResults[0] as unknown as { total_count: number }[]; - const totalCount = countRow[0]?.total_count ?? 0; + const countrow = countresults[0] as unknown as { total_count: number }[]; + const totalCount = countrow[0]?.total_count ?? 0; const totalPages = Math.ceil(totalCount / perPage); // Format and map results - const formattedResults: HistoryEntry[] = historyRows.map(row => ({ + const formattedResults: HistoryEntry[] = historyrows.map(row => ({ name: row.name, status: row.status, updatedAt: new Date(row.updatedAt), @@ -109,3 +123,44 @@ export const getHistory = }; }; +//export const getHistory = + //async (page: number, perPage: number): Promise => { + //const offset = (page - 1) * perPage; + //const historyQuery = sql` + //SELECT u.name, h.status, h.updatedAt + //FROM history h + //JOIN users u ON h.user_id = u.id + //ORDER BY h.id DESC + //LIMIT ${perPage} OFFSET ${offset} + //`; + //const countQuery = sql` + //SELECT COUNT(*) AS total_count + //FROM history + //`; + //const [historyResults, countResults] = await Promise.all([ + //db.execute(historyQuery), + //db.execute(countQuery), + //]); + //// Safely cast results + //const historyRows = historyResults[0] as unknown as + //{ name: string, status: string, updatedAt: Date }[]; + //const countRow = countResults[0] as unknown as { total_count: number }[]; + //const totalCount = countRow[0]?.total_count ?? 0; + //const totalPages = Math.ceil(totalCount / perPage); + //// Format and map results + //const formattedResults: HistoryEntry[] = historyRows.map(row => ({ + //name: row.name, + //status: row.status, + //updatedAt: new Date(row.updatedAt), + //})); + //return { + //data: formattedResults, + //meta: { + //current_page: page, + //per_page: perPage, + //total_pages: totalPages, + //total_count: totalCount, + //} + //}; +//}; +