diff --git a/CLAUDE.md b/CLAUDE.md index ff6b330..1331703 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -10,10 +10,10 @@ pnpm build # Lint + production build pnpm test # Format + lint + build + Playwright E2E tests (full CI suite) ``` -Playwright tests require a running server (`next start` or existing dev server). To run a single test file: +Playwright tests run against the production build via `next start`. **Always run `pnpm build` before running tests**, otherwise Playwright will use a stale build and tests may fail against outdated code. To run a single test file: ```bash -npx playwright test tests/public/00_initial_load.spec.ts +pnpm build && npx playwright test tests/public/00_initial_load.spec.ts ``` Husky pre-commit hooks run Prettier automatically on staged files. diff --git a/package.json b/package.json index 60c3406..6a1adfe 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "@vercel/speed-insights": "^1.3.1", "bcrypt": "^6.0.0", "dotenv": "^17.4.0", + "framer-motion": "^12.6.2", "next": "^16.1.7", "next-auth": "5.0.0-beta.30", "react": "^19.2.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4e80169..72398ec 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,37 +12,40 @@ importers: dependencies: "@mantine/core": specifier: ^8.3.14 - version: 8.3.14(@mantine/hooks@8.3.14(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 8.3.18(@mantine/hooks@8.3.18(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) "@mantine/form": specifier: ^8.3.18 version: 8.3.18(react@19.2.4) "@mantine/hooks": specifier: ^8.3.14 - version: 8.3.14(react@19.2.4) + version: 8.3.18(react@19.2.4) "@tabler/icons-react": specifier: ^3.36.1 - version: 3.36.1(react@19.2.4) + version: 3.41.1(react@19.2.4) "@vercel/analytics": specifier: ^1.6.1 - version: 1.6.1(next@16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) + version: 1.6.1(next@16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) "@vercel/postgres": specifier: ^0.10.0 version: 0.10.0 "@vercel/speed-insights": specifier: ^1.3.1 - version: 1.3.1(next@16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) + version: 1.3.1(next@16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) bcrypt: specifier: ^6.0.0 version: 6.0.0 dotenv: specifier: ^17.4.0 version: 17.4.0 + framer-motion: + specifier: ^12.6.2 + version: 12.6.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) next: specifier: ^16.1.7 - version: 16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) next-auth: specifier: 5.0.0-beta.30 - version: 5.0.0-beta.30(next@16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) + version: 5.0.0-beta.30(next@16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4) react: specifier: ^19.2.4 version: 19.2.4 @@ -70,13 +73,13 @@ importers: version: 16.1.7 "@playwright/test": specifier: ^1.58.1 - version: 1.58.1 + version: 1.59.1 "@types/bcrypt": specifier: ^6.0.0 version: 6.0.0 "@types/node": specifier: ^25.2.0 - version: 25.2.0 + version: 25.5.2 "@types/react": specifier: ^19.2.14 version: 19.2.14 @@ -85,34 +88,34 @@ importers: version: 19.2.3(@types/react@19.2.14) "@typescript-eslint/eslint-plugin": specifier: ^8.54.0 - version: 8.54.0(@typescript-eslint/parser@8.58.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3) + version: 8.58.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3) "@typescript-eslint/parser": specifier: ^8.58.0 - version: 8.58.0(eslint@9.39.2)(typescript@5.9.3) + version: 8.58.0(eslint@9.39.4)(typescript@5.9.3) eslint: specifier: ^9.39.2 - version: 9.39.2 + version: 9.39.4 eslint-config-next: specifier: 16.2.2 - version: 16.2.2(@typescript-eslint/parser@8.58.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3) + version: 16.2.2(@typescript-eslint/parser@8.58.0(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.39.2) + version: 10.1.8(eslint@9.39.4) eslint-plugin-jsx-a11y: specifier: 6.10.2 - version: 6.10.2(eslint@9.39.2) + version: 6.10.2(eslint@9.39.4) eslint-plugin-next: specifier: ^0.0.0 version: 0.0.0 eslint-plugin-promise: specifier: ^7.2.1 - version: 7.2.1(eslint@9.39.2) + version: 7.2.1(eslint@9.39.4) eslint-plugin-react: specifier: 7.37.5 - version: 7.37.5(eslint@9.39.2) + version: 7.37.5(eslint@9.39.4) eslint-plugin-react-hooks: specifier: 7.0.1 - version: 7.0.1(eslint@9.39.2) + version: 7.0.1(eslint@9.39.4) husky: specifier: ^9.1.7 version: 9.1.7 @@ -136,7 +139,7 @@ importers: version: 5.9.3 typescript-eslint: specifier: 8.54.0 - version: 8.54.0(eslint@9.39.2)(typescript@5.9.3) + version: 8.54.0(eslint@9.39.4)(typescript@5.9.3) packages: "@auth/core@0.41.0": @@ -177,10 +180,10 @@ packages: } engines: { node: ">=6.9.0" } - "@babel/generator@7.29.0": + "@babel/generator@7.29.1": resolution: { - integrity: sha512-vSH118/wwM/pLR38g/Sgk05sNtro6TlTJKuiMXDaZqPUfjTFcudpCOt00IhOfj+1BFAX+UFAlzCU+6WXr3GLFQ==, + integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==, } engines: { node: ">=6.9.0" } @@ -235,25 +238,25 @@ packages: } engines: { node: ">=6.9.0" } - "@babel/helpers@7.28.6": + "@babel/helpers@7.29.2": resolution: { - integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==, + integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==, } engines: { node: ">=6.9.0" } - "@babel/parser@7.29.0": + "@babel/parser@7.29.2": resolution: { - integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==, + integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==, } engines: { node: ">=6.0.0" } hasBin: true - "@babel/runtime@7.28.6": + "@babel/runtime@7.26.10": resolution: { - integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==, + integrity: sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==, } engines: { node: ">=6.9.0" } @@ -278,30 +281,39 @@ packages: } engines: { node: ">=6.9.0" } - "@emnapi/core@1.9.1": + "@emnapi/core@1.3.1": resolution: { - integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==, + integrity: sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==, } - "@emnapi/runtime@1.8.1": + "@emnapi/runtime@1.3.1": resolution: { - integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==, + integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==, } - "@emnapi/runtime@1.9.1": + "@emnapi/runtime@1.9.2": resolution: { - integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==, + integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==, } - "@emnapi/wasi-threads@1.2.0": + "@emnapi/wasi-threads@1.0.1": resolution: { - integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==, + integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==, } + "@eslint-community/eslint-utils@4.5.1": + resolution: + { + integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + "@eslint-community/eslint-utils@4.9.1": resolution: { @@ -311,6 +323,13 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + "@eslint-community/regexpp@4.12.1": + resolution: + { + integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==, + } + engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } + "@eslint-community/regexpp@4.12.2": resolution: { @@ -318,10 +337,10 @@ packages: } engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } - "@eslint/config-array@0.21.1": + "@eslint/config-array@0.21.2": resolution: { - integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==, + integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } @@ -339,17 +358,10 @@ packages: } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - "@eslint/eslintrc@3.3.3": + "@eslint/eslintrc@3.3.5": resolution: { - integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==, - } - engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - - "@eslint/js@9.39.2": - resolution: - { - integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==, + integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } @@ -374,40 +386,40 @@ packages: } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - "@floating-ui/core@1.7.4": + "@floating-ui/core@1.7.5": resolution: { - integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==, + integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==, } - "@floating-ui/dom@1.7.5": + "@floating-ui/dom@1.7.6": resolution: { - integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==, + integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==, } - "@floating-ui/react-dom@2.1.7": + "@floating-ui/react-dom@2.1.8": resolution: { - integrity: sha512-0tLRojf/1Go2JgEVm+3Frg9A3IW8bJgKgdO0BN5RkF//ufuz2joZM63Npau2ff3J6lUVYgDSNzNkR+aH3IVfjg==, + integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==, } peerDependencies: react: ">=16.8.0" react-dom: ">=16.8.0" - "@floating-ui/react@0.27.17": + "@floating-ui/react@0.27.19": resolution: { - integrity: sha512-LGVZKHwmWGg6MRHjLLgsfyaX2y2aCNgnD1zT/E6B+/h+vxg+nIJUqHPAlTzsHDyqdgEpJ1Np5kxWuFEErXzoGg==, + integrity: sha512-31B8h5mm8YxotlE7/AU/PhNAl8eWxAmjL/v2QOxroDNkTFLk3Uu82u63N3b6TXa4EGJeeZLVcd/9AlNlVqzeog==, } peerDependencies: react: ">=17.0.0" react-dom: ">=17.0.0" - "@floating-ui/utils@0.2.10": + "@floating-ui/utils@0.2.11": resolution: { - integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==, + integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==, } "@humanfs/core@0.19.1": @@ -417,10 +429,10 @@ packages: } engines: { node: ">=18.18.0" } - "@humanfs/node@0.16.7": + "@humanfs/node@0.16.6": resolution: { - integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==, + integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==, } engines: { node: ">=18.18.0" } @@ -431,17 +443,24 @@ packages: } engines: { node: ">=12.22" } - "@humanwhocodes/retry@0.4.3": + "@humanwhocodes/retry@0.3.1": resolution: { - integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==, + integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==, } engines: { node: ">=18.18" } - "@img/colour@1.0.0": + "@humanwhocodes/retry@0.4.2": resolution: { - integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==, + integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==, + } + engines: { node: ">=18.18" } + + "@img/colour@1.1.0": + resolution: + { + integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==, } engines: { node: ">=18" } @@ -697,13 +716,13 @@ packages: integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==, } - "@mantine/core@8.3.14": + "@mantine/core@8.3.18": resolution: { - integrity: sha512-ZOxggx65Av1Ii1NrckCuqzluRpmmG+8DyEw24wDom3rmwsPg9UV+0le2QTyI5Eo60LzPfUju1KuEPiUzNABIPg==, + integrity: sha512-9tph1lTVogKPjTx02eUxDUOdXacPzK62UuSqb4TdGliI54/Xgxftq0Dfqu6XuhCxn9J5MDJaNiLDvL/1KRkYqA==, } peerDependencies: - "@mantine/hooks": 8.3.14 + "@mantine/hooks": 8.3.18 react: ^18.x || ^19.x react-dom: ^18.x || ^19.x @@ -715,18 +734,18 @@ packages: peerDependencies: react: ^18.x || ^19.x - "@mantine/hooks@8.3.14": + "@mantine/hooks@8.3.18": resolution: { - integrity: sha512-0SbHnGEuHcF2QyjzBBcqidpjNmIb6n7TC3obnhkBToYhUTbMcJSK/8ei/yHtAelridJH4CPeohRlQdc0HajHyQ==, + integrity: sha512-QoWr9+S8gg5050TQ06aTSxtlpGjYOpIllRbjYYXlRvZeTsUqiTbVfvQROLexu4rEaK+yy9Wwriwl9PMRgbLqPw==, } peerDependencies: react: ^18.x || ^19.x - "@napi-rs/wasm-runtime@0.2.12": + "@napi-rs/wasm-runtime@0.2.7": resolution: { - integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==, + integrity: sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw==, } "@neondatabase/serverless@0.9.5": @@ -735,10 +754,10 @@ packages: integrity: sha512-siFas6gItqv6wD/pZnvdu34wEqgG3nSE6zWZdq5j2DEsa+VvX8i/5HXJOo06qrw5axPXn+lGCxeR+NLaSPIXug==, } - "@next/env@16.2.1": + "@next/env@16.2.2": resolution: { - integrity: sha512-n8P/HCkIWW+gVal2Z8XqXJ6aB3J0tuM29OcHpCsobWlChH/SITBs1DFBk/HajgrwDkqqBXPbuUuzgDvUekREPg==, + integrity: sha512-LqSGz5+xGk9EL/iBDr2yo/CgNQV6cFsNhRR2xhSXYh7B/hb4nePCxlmDvGEKG30NMHDFf0raqSyOZiQrO7BkHQ==, } "@next/eslint-plugin-next@16.1.7": @@ -753,77 +772,77 @@ packages: integrity: sha512-IOPbWzDQ+76AtjZioaCjpIY72xNSDMnarZ2GMQ4wjNLvnJEJHqxQwGFhgnIWLV9klb4g/+amg88Tk5OXVpyLTw==, } - "@next/swc-darwin-arm64@16.2.1": + "@next/swc-darwin-arm64@16.2.2": resolution: { - integrity: sha512-BwZ8w8YTaSEr2HIuXLMLxIdElNMPvY9fLqb20LX9A9OMGtJilhHLbCL3ggyd0TwjmMcTxi0XXt+ur1vWUoxj2Q==, + integrity: sha512-B92G3ulrwmkDSEJEp9+XzGLex5wC1knrmCSIylyVeiAtCIfvEJYiN3v5kXPlYt5R4RFlsfO/v++aKV63Acrugg==, } engines: { node: ">= 10" } cpu: [arm64] os: [darwin] - "@next/swc-darwin-x64@16.2.1": + "@next/swc-darwin-x64@16.2.2": resolution: { - integrity: sha512-/vrcE6iQSJq3uL3VGVHiXeaKbn8Es10DGTGRJnRZlkNQQk3kaNtAJg8Y6xuAlrx/6INKVjkfi5rY0iEXorZ6uA==, + integrity: sha512-7ZwSgNKJNQiwW0CKhNm9B1WS2L1Olc4B2XY0hPYCAL3epFnugMhuw5TMWzMilQ3QCZcCHoYm9NGWTHbr5REFxw==, } engines: { node: ">= 10" } cpu: [x64] os: [darwin] - "@next/swc-linux-arm64-gnu@16.2.1": + "@next/swc-linux-arm64-gnu@16.2.2": resolution: { - integrity: sha512-uLn+0BK+C31LTVbQ/QU+UaVrV0rRSJQ8RfniQAHPghDdgE+SlroYqcmFnO5iNjNfVWCyKZHYrs3Nl0mUzWxbBw==, + integrity: sha512-c3m8kBHMziMgo2fICOP/cd/5YlrxDU5YYjAJeQLyFsCqVF8xjOTH/QYG4a2u48CvvZZSj1eHQfBCbyh7kBr30Q==, } engines: { node: ">= 10" } cpu: [arm64] os: [linux] libc: [glibc] - "@next/swc-linux-arm64-musl@16.2.1": + "@next/swc-linux-arm64-musl@16.2.2": resolution: { - integrity: sha512-ssKq6iMRnHdnycGp9hCuGnXJZ0YPr4/wNwrfE5DbmvEcgl9+yv97/Kq3TPVDfYome1SW5geciLB9aiEqKXQjlQ==, + integrity: sha512-VKLuscm0P/mIfzt+SDdn2+8TNNJ7f0qfEkA+az7OqQbjzKdBxAHs0UvuiVoCtbwX+dqMEL9U54b5wQ/aN3dHeg==, } engines: { node: ">= 10" } cpu: [arm64] os: [linux] libc: [musl] - "@next/swc-linux-x64-gnu@16.2.1": + "@next/swc-linux-x64-gnu@16.2.2": resolution: { - integrity: sha512-HQm7SrHRELJ30T1TSmT706IWovFFSRGxfgUkyWJZF/RKBMdbdRWJuFrcpDdE5vy9UXjFOx6L3mRdqH04Mmx0hg==, + integrity: sha512-kU3OPHJq6sBUjOk7wc5zJ7/lipn8yGldMoAv4z67j6ov6Xo/JvzA7L7LCsyzzsXmgLEhk3Qkpwqaq/1+XpNR3g==, } engines: { node: ">= 10" } cpu: [x64] os: [linux] libc: [glibc] - "@next/swc-linux-x64-musl@16.2.1": + "@next/swc-linux-x64-musl@16.2.2": resolution: { - integrity: sha512-aV2iUaC/5HGEpbBkE+4B8aHIudoOy5DYekAKOMSHoIYQ66y/wIVeaRx8MS2ZMdxe/HIXlMho4ubdZs/J8441Tg==, + integrity: sha512-CKXRILyErMtUftp+coGcZ38ZwE/Aqq45VMCcRLr2I4OXKrgxIBDXHnBgeX/UMil0S09i2JXaDL3Q+TN8D/cKmg==, } engines: { node: ">= 10" } cpu: [x64] os: [linux] libc: [musl] - "@next/swc-win32-arm64-msvc@16.2.1": + "@next/swc-win32-arm64-msvc@16.2.2": resolution: { - integrity: sha512-IXdNgiDHaSk0ZUJ+xp0OQTdTgnpx1RCfRTalhn3cjOP+IddTMINwA7DXZrwTmGDO8SUr5q2hdP/du4DcrB1GxA==, + integrity: sha512-sS/jSk5VUoShUqINJFvNjVT7JfR5ORYj/+/ZpOYbbIohv/lQfduWnGAycq2wlknbOql2xOR0DoV0s6Xfcy49+g==, } engines: { node: ">= 10" } cpu: [arm64] os: [win32] - "@next/swc-win32-x64-msvc@16.2.1": + "@next/swc-win32-x64-msvc@16.2.2": resolution: { - integrity: sha512-qvU+3a39Hay+ieIztkGSbF7+mccbbg1Tk25hc4JDylf8IHjYmY/Zm64Qq1602yPyQqvie+vf5T/uPwNxDNIoeg==, + integrity: sha512-aHaKceJgdySReT7qeck5oShucxWRiiEuwCGK8HHALe6yZga8uyFpLkPgaRw3kkF04U7ROogL/suYCNt/+CuXGA==, } engines: { node: ">= 10" } cpu: [x64] @@ -863,10 +882,10 @@ packages: integrity: sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==, } - "@playwright/test@1.58.1": + "@playwright/test@1.59.1": resolution: { - integrity: sha512-6LdVIUERWxQMmUSSQi0I53GgCBYgM2RpGngCPY7hSeju+VrKjq3lvs7HpJoPbDiY5QM5EYRtRX5fvrinnMAz3w==, + integrity: sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==, } engines: { node: ">=18" } hasBin: true @@ -883,24 +902,24 @@ packages: integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==, } - "@tabler/icons-react@3.36.1": + "@tabler/icons-react@3.41.1": resolution: { - integrity: sha512-/8nOXeNeMoze9xY/QyEKG65wuvRhkT3q9aytaur6Gj8bYU2A98YVJyLc9MRmc5nVvpy+bRlrrwK/Ykr8WGyUWg==, + integrity: sha512-kUgweE+DJtAlMZVIns1FTDdcbpRVnkK7ZpUOXmoxy3JAF0rSHj0TcP4VHF14+gMJGnF+psH2Zt26BLT6owetBA==, } peerDependencies: react: ">= 16" - "@tabler/icons@3.36.1": + "@tabler/icons@3.41.1": resolution: { - integrity: sha512-f4Jg3Fof/Vru5ioix/UO4GX+sdDsF9wQo47FbtvG+utIYYVQ/QVAC0QYgcBbAjQGfbdOh2CCf0BgiFOF9Ixtjw==, + integrity: sha512-OaRnVbRmH2nHtFeg+RmMJ/7m2oBIF9XCJAUD5gQnMrpK9f05ydj8MZrAf3NZQqOXyxGN1UBL0D5IKLLEUfr74Q==, } - "@tybys/wasm-util@0.10.1": + "@tybys/wasm-util@0.9.0": resolution: { - integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==, + integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==, } "@types/bcrypt@6.0.0": @@ -909,10 +928,10 @@ packages: integrity: sha512-/oJGukuH3D2+D+3H4JWLaAsJ/ji86dhRidzZ/Od7H/i8g+aCmvkeCc6Ni/f9uxGLSQVCRZkX2/lqEFG2BvWtlQ==, } - "@types/estree@1.0.8": + "@types/estree@1.0.6": resolution: { - integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==, + integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==, } "@types/json-schema@7.0.15": @@ -927,10 +946,10 @@ packages: integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==, } - "@types/node@25.2.0": + "@types/node@25.5.2": resolution: { - integrity: sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==, + integrity: sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==, } "@types/pg@8.11.6": @@ -964,6 +983,17 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <6.0.0" + "@typescript-eslint/eslint-plugin@8.58.0": + resolution: + { + integrity: sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + "@typescript-eslint/parser": ^8.58.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" + "@typescript-eslint/parser@8.54.0": resolution: { @@ -1044,6 +1074,16 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <6.0.0" + "@typescript-eslint/type-utils@8.58.0": + resolution: + { + integrity: sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" + "@typescript-eslint/types@8.54.0": resolution: { @@ -1086,176 +1126,118 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <6.0.0" - "@typescript-eslint/visitor-keys@8.54.0": + "@typescript-eslint/utils@8.58.0": resolution: { - integrity: sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==, + integrity: sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" - "@typescript-eslint/visitor-keys@8.58.0": + "@typescript-eslint/visitor-keys@8.54.0": resolution: { - integrity: sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==, + integrity: sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - "@unrs/resolver-binding-android-arm-eabi@1.11.1": - resolution: - { - integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==, - } - cpu: [arm] - os: [android] - - "@unrs/resolver-binding-android-arm64@1.11.1": + "@typescript-eslint/visitor-keys@8.58.0": resolution: { - integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==, + integrity: sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==, } - cpu: [arm64] - os: [android] + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - "@unrs/resolver-binding-darwin-arm64@1.11.1": + "@unrs/rspack-resolver-binding-darwin-arm64@1.2.2": resolution: { - integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==, + integrity: sha512-i7z0B+C0P8Q63O/5PXJAzeFtA1ttY3OR2VSJgGv18S+PFNwD98xHgAgPOT1H5HIV6jlQP8Avzbp09qxJUdpPNw==, } cpu: [arm64] os: [darwin] - "@unrs/resolver-binding-darwin-x64@1.11.1": + "@unrs/rspack-resolver-binding-darwin-x64@1.2.2": resolution: { - integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==, + integrity: sha512-YEdFzPjIbDUCfmehC6eS+AdJYtFWY35YYgWUnqqTM2oe/N58GhNy5yRllxYhxwJ9GcfHoNc6Ubze1yjkNv+9Qg==, } cpu: [x64] os: [darwin] - "@unrs/resolver-binding-freebsd-x64@1.11.1": + "@unrs/rspack-resolver-binding-freebsd-x64@1.2.2": resolution: { - integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==, + integrity: sha512-TU4ntNXDgPN2giQyyzSnGWf/dVCem5lvwxg0XYvsvz35h5H19WrhTmHgbrULMuypCB3aHe1enYUC9rPLDw45mA==, } cpu: [x64] os: [freebsd] - "@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1": - resolution: - { - integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==, - } - cpu: [arm] - os: [linux] - - "@unrs/resolver-binding-linux-arm-musleabihf@1.11.1": + "@unrs/rspack-resolver-binding-linux-arm-gnueabihf@1.2.2": resolution: { - integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==, + integrity: sha512-ik3w4/rU6RujBvNWiDnKdXi1smBhqxEDhccNi/j2rHaMjm0Fk49KkJ6XKsoUnD2kZ5xaMJf9JjailW/okfUPIw==, } cpu: [arm] os: [linux] - "@unrs/resolver-binding-linux-arm64-gnu@1.11.1": + "@unrs/rspack-resolver-binding-linux-arm64-gnu@1.2.2": resolution: { - integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==, + integrity: sha512-fp4Azi8kHz6TX8SFmKfyScZrMLfp++uRm2srpqRjsRZIIBzH74NtSkdEUHImR4G7f7XJ+sVZjCc6KDDK04YEpQ==, } cpu: [arm64] os: [linux] libc: [glibc] - "@unrs/resolver-binding-linux-arm64-musl@1.11.1": + "@unrs/rspack-resolver-binding-linux-arm64-musl@1.2.2": resolution: { - integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==, + integrity: sha512-gMiG3DCFioJxdGBzhlL86KcFgt9HGz0iDhw0YVYPsShItpN5pqIkNrI+L/Q/0gfDiGrfcE0X3VANSYIPmqEAlQ==, } cpu: [arm64] os: [linux] libc: [musl] - "@unrs/resolver-binding-linux-ppc64-gnu@1.11.1": - resolution: - { - integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==, - } - cpu: [ppc64] - os: [linux] - libc: [glibc] - - "@unrs/resolver-binding-linux-riscv64-gnu@1.11.1": - resolution: - { - integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==, - } - cpu: [riscv64] - os: [linux] - libc: [glibc] - - "@unrs/resolver-binding-linux-riscv64-musl@1.11.1": - resolution: - { - integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==, - } - cpu: [riscv64] - os: [linux] - libc: [musl] - - "@unrs/resolver-binding-linux-s390x-gnu@1.11.1": + "@unrs/rspack-resolver-binding-linux-x64-gnu@1.2.2": resolution: { - integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==, - } - cpu: [s390x] - os: [linux] - libc: [glibc] - - "@unrs/resolver-binding-linux-x64-gnu@1.11.1": - resolution: - { - integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==, + integrity: sha512-n/4n2CxaUF9tcaJxEaZm+lqvaw2gflfWQ1R9I7WQgYkKEKbRKbpG/R3hopYdUmLSRI4xaW1Cy0Bz40eS2Yi4Sw==, } cpu: [x64] os: [linux] libc: [glibc] - "@unrs/resolver-binding-linux-x64-musl@1.11.1": + "@unrs/rspack-resolver-binding-linux-x64-musl@1.2.2": resolution: { - integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==, + integrity: sha512-cHyhAr6rlYYbon1L2Ag449YCj3p6XMfcYTP0AQX+KkQo025d1y/VFtPWvjMhuEsE2lLvtHm7GdJozj6BOMtzVg==, } cpu: [x64] os: [linux] libc: [musl] - "@unrs/resolver-binding-wasm32-wasi@1.11.1": + "@unrs/rspack-resolver-binding-wasm32-wasi@1.2.2": resolution: { - integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==, + integrity: sha512-eogDKuICghDLGc32FtP+WniG38IB1RcGOGz0G3z8406dUdjJvxfHGuGs/dSlM9YEp/v0lEqhJ4mBu6X2nL9pog==, } engines: { node: ">=14.0.0" } cpu: [wasm32] - "@unrs/resolver-binding-win32-arm64-msvc@1.11.1": + "@unrs/rspack-resolver-binding-win32-arm64-msvc@1.2.2": resolution: { - integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==, + integrity: sha512-7sWRJumhpXSi2lccX8aQpfFXHsSVASdWndLv8AmD8nDRA/5PBi8IplQVZNx2mYRx6+Bp91Z00kuVqpXO9NfCTg==, } cpu: [arm64] os: [win32] - "@unrs/resolver-binding-win32-ia32-msvc@1.11.1": - resolution: - { - integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==, - } - cpu: [ia32] - os: [win32] - - "@unrs/resolver-binding-win32-x64-msvc@1.11.1": + "@unrs/rspack-resolver-binding-win32-x64-msvc@1.2.2": resolution: { - integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==, + integrity: sha512-hewo/UMGP1a7O6FG/ThcPzSJdm/WwrYDNkdGgWl6M18H6K6MSitklomWpT9MUtT5KGj++QJb06va/14QBC4pvw==, } cpu: [x64] os: [win32] @@ -1295,7 +1277,6 @@ packages: integrity: sha512-fSD23DxGND40IzSkXjcFcxr53t3Tiym59Is0jSYIFpG4/0f0KO9SGtcp1sXiebvPaGe7N/tU05cH4yt2S6/IPg==, } engines: { node: ">=18.14" } - deprecated: "@vercel/postgres is deprecated. If you are setting up a new database, you can choose an alternate storage solution from the Vercel Marketplace. If you had an existing Vercel Postgres database, it should have been migrated to Neon as a native Vercel integration. You can find more details and the guide to migrate to Neon's SDKs here: https://neon.com/docs/guides/vercel-postgres-transition-guide" "@vercel/speed-insights@1.3.1": resolution: @@ -1331,10 +1312,10 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.15.0: + acorn@8.16.0: resolution: { - integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==, + integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==, } engines: { node: ">=0.4.0" } hasBin: true @@ -1345,13 +1326,20 @@ packages: integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==, } - ansi-escapes@7.3.0: + ansi-escapes@7.0.0: resolution: { - integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==, + integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==, } engines: { node: ">=18" } + ansi-regex@6.1.0: + resolution: + { + integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==, + } + engines: { node: ">=12" } + ansi-regex@6.2.2: resolution: { @@ -1366,6 +1354,13 @@ packages: } engines: { node: ">=8" } + ansi-styles@6.2.1: + resolution: + { + integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==, + } + engines: { node: ">=12" } + ansi-styles@6.2.3: resolution: { @@ -1393,6 +1388,13 @@ packages: } engines: { node: ">= 0.4" } + array-includes@3.1.8: + resolution: + { + integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==, + } + engines: { node: ">= 0.4" } + array-includes@3.1.9: resolution: { @@ -1462,10 +1464,10 @@ packages: } engines: { node: ">= 0.4" } - axe-core@4.11.1: + axe-core@4.10.3: resolution: { - integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==, + integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==, } engines: { node: ">=4" } @@ -1489,11 +1491,12 @@ packages: } engines: { node: 18 || 20 || >=22 } - baseline-browser-mapping@2.9.19: + baseline-browser-mapping@2.10.14: resolution: { - integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==, + integrity: sha512-fOVLPAsFTsQfuCkvahZkzq6nf8KvGWanlYoTh0SVA0A/PIUxQGU2AOZAoD95n2gFLVDW/jP6sbGLny95nmEuHA==, } + engines: { node: ">=6.0.0" } hasBin: true bcrypt@6.0.0: @@ -1503,16 +1506,16 @@ packages: } engines: { node: ">= 18" } - brace-expansion@1.1.13: + brace-expansion@1.1.11: resolution: { - integrity: sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==, + integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, } - brace-expansion@2.0.3: + brace-expansion@2.0.1: resolution: { - integrity: sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==, + integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, } brace-expansion@5.0.5: @@ -1529,18 +1532,18 @@ packages: } engines: { node: ">=8" } - browserslist@4.28.1: + browserslist@4.28.2: resolution: { - integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==, + integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==, } engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } hasBin: true - bufferutil@4.1.0: + bufferutil@4.0.9: resolution: { - integrity: sha512-ZMANVnAixE6AWWnPzlW2KpUrxhm9woycYvPOo67jWHyFowASTEd9s+QN1EIMsSDtwhIxN4sWE1jotpuDUIgyIw==, + integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==, } engines: { node: ">=6.14.2" } @@ -1579,10 +1582,16 @@ packages: } engines: { node: ">= 6" } - caniuse-lite@1.0.30001767: + caniuse-lite@1.0.30001706: resolution: { - integrity: sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ==, + integrity: sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==, + } + + caniuse-lite@1.0.30001785: + resolution: + { + integrity: sha512-blhOL/WNR+Km1RI/LCVAvA73xplXA7ZbjzI4YkMK9pa6T/P3F2GxjNpEkyw5repTw9IvkyrjyHpwjnhZ5FOvYQ==, } chalk@4.1.2: @@ -1716,6 +1725,18 @@ packages: supports-color: optional: true + debug@4.4.0: + resolution: + { + integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==, + } + engines: { node: ">=6.0" } + peerDependencies: + supports-color: "*" + peerDependenciesMeta: + supports-color: + optional: true + debug@4.4.3: resolution: { @@ -1782,16 +1803,16 @@ packages: } engines: { node: ">= 0.4" } - electron-to-chromium@1.5.283: + electron-to-chromium@1.5.331: resolution: { - integrity: sha512-3vifjt1HgrGW/h76UEeny+adYApveS9dH2h3p57JYzBSXJIKUJAvtmIytDKjcSCt9xHfrNCFJ7gts6vkhuq++w==, + integrity: sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q==, } - emoji-regex@10.6.0: + emoji-regex@10.4.0: resolution: { - integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==, + integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==, } emoji-regex@9.2.2: @@ -1807,6 +1828,13 @@ packages: } engines: { node: ">=18" } + es-abstract@1.23.9: + resolution: + { + integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==, + } + engines: { node: ">= 0.4" } + es-abstract@1.24.1: resolution: { @@ -1828,10 +1856,10 @@ packages: } engines: { node: ">= 0.4" } - es-iterator-helpers@1.2.2: + es-iterator-helpers@1.2.1: resolution: { - integrity: sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w==, + integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==, } engines: { node: ">= 0.4" } @@ -1904,10 +1932,10 @@ packages: integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==, } - eslint-import-resolver-typescript@3.10.1: + eslint-import-resolver-typescript@3.9.1: resolution: { - integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==, + integrity: sha512-euxa5rTGqHeqVxmOHT25hpk58PxkQ4mNoX6Yun4ooGaCHAxOCojJYNvjmyeOQxj/LyW+3fulH0+xtk+p2kPPTw==, } engines: { node: ^14.18.0 || >=16.0.0 } peerDependencies: @@ -2027,10 +2055,10 @@ packages: } engines: { node: ^20.19.0 || ^22.13.0 || >=24 } - eslint@9.39.2: + eslint@9.39.4: resolution: { - integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==, + integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==, } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } hasBin: true @@ -2047,10 +2075,10 @@ packages: } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - esquery@1.7.0: + esquery@1.6.0: resolution: { - integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==, + integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==, } engines: { node: ">=0.10" } @@ -2075,10 +2103,10 @@ packages: } engines: { node: ">=0.10.0" } - eventemitter3@5.0.4: + eventemitter3@5.0.1: resolution: { - integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==, + integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==, } fast-deep-equal@3.1.3: @@ -2106,12 +2134,23 @@ packages: integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, } - fastq@1.20.1: + fastq@1.19.1: resolution: { - integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==, + integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==, } + fdir@6.4.3: + resolution: + { + integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==, + } + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + fdir@6.5.0: resolution: { @@ -2165,6 +2204,23 @@ packages: } engines: { node: ">= 0.4" } + framer-motion@12.6.2: + resolution: + { + integrity: sha512-7LgPRlPs5aG8UxeZiMCMZz8firC53+2+9TnWV22tuSi38D3IFRxHRUqOREKckAkt6ztX+Dn6weLcatQilJTMcg==, + } + peerDependencies: + "@emotion/is-prop-valid": "*" + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@emotion/is-prop-valid": + optional: true + react: + optional: true + react-dom: + optional: true + fsevents@2.3.2: resolution: { @@ -2192,19 +2248,19 @@ packages: integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, } - generator-function@2.0.1: + gensync@1.0.0-beta.2: resolution: { - integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==, + integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, } - engines: { node: ">= 0.4" } + engines: { node: ">=6.9.0" } - gensync@1.0.0-beta.2: + get-east-asian-width@1.3.0: resolution: { - integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, + integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==, } - engines: { node: ">=6.9.0" } + engines: { node: ">=18" } get-east-asian-width@1.5.0: resolution: @@ -2241,10 +2297,10 @@ packages: } engines: { node: ">= 0.4" } - get-tsconfig@4.13.7: + get-tsconfig@4.10.0: resolution: { - integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==, + integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==, } glob-parent@5.1.2: @@ -2420,10 +2476,10 @@ packages: } engines: { node: ">= 0.4" } - is-bun-module@2.0.0: + is-bun-module@1.3.0: resolution: { - integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==, + integrity: sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==, } is-callable@1.2.7: @@ -2468,6 +2524,13 @@ packages: } engines: { node: ">= 0.4" } + is-fullwidth-code-point@5.0.0: + resolution: + { + integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==, + } + engines: { node: ">=18" } + is-fullwidth-code-point@5.1.0: resolution: { @@ -2475,10 +2538,10 @@ packages: } engines: { node: ">=18" } - is-generator-function@1.1.2: + is-generator-function@1.1.0: resolution: { - integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==, + integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==, } engines: { node: ">= 0.4" } @@ -2599,10 +2662,10 @@ packages: } engines: { node: ">= 0.4" } - jose@6.1.3: + jose@6.2.2: resolution: { - integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==, + integrity: sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==, } js-tokens@4.0.0: @@ -2782,16 +2845,22 @@ packages: } engines: { node: 18 || 20 || >=22 } + minimatch@3.1.2: + resolution: + { + integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, + } + minimatch@3.1.5: resolution: { integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==, } - minimatch@9.0.9: + minimatch@9.0.5: resolution: { - integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==, + integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==, } engines: { node: ">=16 || 14 >=14.17" } @@ -2801,6 +2870,18 @@ packages: integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, } + motion-dom@12.6.1: + resolution: + { + integrity: sha512-8XVsriTUEVOepoIDgE/LDGdg7qaKXWdt+wQA/8z0p8YzJDLYL8gbimZ3YkCLlj7bB2i/4UBD/g+VO7y9ZY0zHQ==, + } + + motion-utils@12.5.0: + resolution: + { + integrity: sha512-+hFFzvimn0sBMP9iPxBa9OtRX35ZQ3py0UHnb8U29VD+d8lQ8zH3dTygJWqK7av2v6yhg7scj9iZuvTS0f4+SA==, + } + ms@2.1.3: resolution: { @@ -2815,14 +2896,6 @@ packages: engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } hasBin: true - napi-postinstall@0.3.4: - resolution: - { - integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==, - } - engines: { node: ^12.20.0 || ^14.18.0 || >=16.0.0 } - hasBin: true - natural-compare@1.4.0: resolution: { @@ -2848,10 +2921,10 @@ packages: nodemailer: optional: true - next@16.2.1: + next@16.2.2: resolution: { - integrity: sha512-VaChzNL7o9rbfdt60HUj8tev4m6d7iC1igAy157526+cJlXOQu5LzsBXNT+xaJnTP/k+utSX5vMv7m0G+zKH+Q==, + integrity: sha512-i6AJdyVa4oQjyvX/6GeER8dpY/xlIV+4NMv/svykcLtURJSy/WzDnnUk/TM4d0uewFHK7xSQz4TbIwPgjky+3A==, } engines: { node: ">=20.9.0" } hasBin: true @@ -2872,10 +2945,10 @@ packages: sass: optional: true - node-addon-api@8.5.0: + node-addon-api@8.7.0: resolution: { - integrity: sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==, + integrity: sha512-9MdFxmkKaOYVTV+XVRG8ArDwwQ77XIgIPyKASB1k3JPq3M8fGQQQE3YpMOrKm6g//Ktx8ivZr8xo1Qmtqub+GA==, } engines: { node: ^18 || ^20 || >= 21 } @@ -2886,16 +2959,16 @@ packages: } hasBin: true - node-releases@2.0.27: + node-releases@2.0.37: resolution: { - integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==, + integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==, } - oauth4webapi@3.8.3: + oauth4webapi@3.3.1: resolution: { - integrity: sha512-pQ5BsX3QRTgnt5HxgHwgunIRaDXBdkT23tf8dfzmtTIL2LTpdmxgbpbBm0VgFWAIDlezQvQCTgnVIUmHupXHxw==, + integrity: sha512-ZwX7UqYrP3Lr+Glhca3a1/nF2jqf7VVyJfhGuW5JtrfDUxt0u+IoBPzFjZ2dd7PJGkdM6CFPVVYzuDYKHv101A==, } object-assign@4.1.1: @@ -3036,16 +3109,16 @@ packages: } engines: { node: ">=4" } - pg-protocol@1.11.0: + pg-protocol@1.8.0: resolution: { - integrity: sha512-pfsxk2M9M3BuGgDOfuy37VNRRX3jmKgMjcvAcWqNDpZSf4cUmv8HSOl5ViRQFsfARFn0KuUQTgLxVMbNq5NW3g==, + integrity: sha512-jvuYlEkL03NRvOoyoRktBK7+qU5kOvlAwvmrH8sr3wbLrOdVWsRxQfz8mMy9sZFsqJ1hEWNfdWKI4SAmoL+j7g==, } - pg-types@4.1.0: + pg-types@4.0.2: resolution: { - integrity: sha512-o2XFanIMy/3+mThw69O8d4n1E5zsLhdO+OPqswezu7Z5ekP4hYDqlDjlmOpYMbzY2Br0ufCwJLdDIXeNVwcWFg==, + integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==, } engines: { node: ">=10" } @@ -3055,13 +3128,20 @@ packages: integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, } - picomatch@2.3.2: + picomatch@2.3.1: resolution: { - integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==, + integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, } engines: { node: ">=8.6" } + picomatch@4.0.2: + resolution: + { + integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==, + } + engines: { node: ">=12" } + picomatch@4.0.4: resolution: { @@ -3069,18 +3149,18 @@ packages: } engines: { node: ">=12" } - playwright-core@1.58.1: + playwright-core@1.59.1: resolution: { - integrity: sha512-bcWzOaTxcW+VOOGBCQgnaKToLJ65d6AqfLVKEWvexyS3AS6rbXl+xdpYRMGSRBClPvyj44njOWoxjNdL/H9UNg==, + integrity: sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==, } engines: { node: ">=18" } hasBin: true - playwright@1.58.1: + playwright@1.59.1: resolution: { - integrity: sha512-+2uTZHxSCcxjvGc5C891LrS1/NlxglGxzrC4seZiVjcYVQfUa87wBL6rTDqzGjuoWNjnBzRqKmF6zRYGMvQUaQ==, + integrity: sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==, } engines: { node: ">=18" } hasBin: true @@ -3092,10 +3172,10 @@ packages: } engines: { node: ">= 0.4" } - postcss-js@4.1.0: + postcss-js@4.0.1: resolution: { - integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==, + integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==, } engines: { node: ^12 || ^14 || >= 16 } peerDependencies: @@ -3261,10 +3341,10 @@ packages: integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==, } - react-number-format@5.4.4: + react-number-format@5.4.5: resolution: { - integrity: sha512-wOmoNZoOpvMminhifQYiYSTCLUDOiUbBunrMrMjA+dV52sY+vck1S4UhR6PkgnoCquvvMSeJjErXZ4qSaWCliA==, + integrity: sha512-y8O2yHHj3w0aE9XO8d2BCcUOOdQTRSVq+WIuMlLVucAm5XNjJAy+BoOJiuQMldVYVOKTMyvVNfnbl2Oqp+YxGw==, } peerDependencies: react: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -3332,6 +3412,12 @@ packages: } engines: { node: ">= 0.4" } + regenerator-runtime@0.14.1: + resolution: + { + integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==, + } + regexp.prototype.flags@1.5.4: resolution: { @@ -3352,10 +3438,10 @@ packages: integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==, } - resolve@1.22.11: + resolve@1.22.10: resolution: { - integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==, + integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==, } engines: { node: ">= 0.4" } hasBin: true @@ -3387,6 +3473,13 @@ packages: integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==, } + rspack-resolver@1.2.2: + resolution: + { + integrity: sha512-Fwc19jMBA3g+fxDJH2B4WxwZjE0VaaOL7OX/A4Wn5Zv7bOD/vyPZhzXfaO73Xc2GAlfi96g5fGUa378WbIGfFw==, + } + deprecated: Please migrate to the brand new `@rspack/resolver` or `unrs-resolver` instead + run-parallel@1.2.0: resolution: { @@ -3427,10 +3520,10 @@ packages: } hasBin: true - semver@7.7.3: + semver@7.7.1: resolution: { - integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==, + integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==, } engines: { node: ">=10" } hasBin: true @@ -3520,10 +3613,10 @@ packages: } engines: { node: ">=14" } - slice-ansi@7.1.2: + slice-ansi@7.1.0: resolution: { - integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==, + integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==, } engines: { node: ">=18" } @@ -3616,6 +3709,13 @@ packages: } engines: { node: ">= 0.4" } + strip-ansi@7.1.0: + resolution: + { + integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==, + } + engines: { node: ">=12" } + strip-ansi@7.2.0: resolution: { @@ -3676,10 +3776,10 @@ packages: } engines: { node: ">= 0.4" } - tabbable@6.4.0: + tabbable@6.2.0: resolution: { - integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==, + integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==, } tinyexec@1.0.4: @@ -3689,6 +3789,13 @@ packages: } engines: { node: ">=18" } + tinyglobby@0.2.12: + resolution: + { + integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==, + } + engines: { node: ">=12.0.0" } + tinyglobby@0.2.15: resolution: { @@ -3703,15 +3810,6 @@ packages: } engines: { node: ">=8.0" } - ts-api-utils@2.4.0: - resolution: - { - integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==, - } - engines: { node: ">=18.12" } - peerDependencies: - typescript: ">=4.8.4" - ts-api-utils@2.5.0: resolution: { @@ -3800,16 +3898,10 @@ packages: } engines: { node: ">= 0.4" } - undici-types@7.16.0: - resolution: - { - integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==, - } - - unrs-resolver@1.11.1: + undici-types@7.18.2: resolution: { - integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==, + integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==, } update-browserslist-db@1.2.3: @@ -3852,10 +3944,10 @@ packages: "@types/react": optional: true - use-isomorphic-layout-effect@1.2.1: + use-isomorphic-layout-effect@1.2.0: resolution: { - integrity: sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==, + integrity: sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w==, } peerDependencies: "@types/react": "*" @@ -3923,10 +4015,10 @@ packages: } engines: { node: ">= 0.4" } - which-typed-array@1.1.20: + which-typed-array@1.1.19: resolution: { - integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==, + integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==, } engines: { node: ">= 0.4" } @@ -3945,17 +4037,17 @@ packages: } engines: { node: ">=0.10.0" } - wrap-ansi@9.0.2: + wrap-ansi@9.0.0: resolution: { - integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==, + integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==, } engines: { node: ">=18" } - ws@8.19.0: + ws@8.18.1: resolution: { - integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==, + integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==, } engines: { node: ">=10.0.0" } peerDependencies: @@ -4007,8 +4099,8 @@ snapshots: "@auth/core@0.41.0": dependencies: "@panva/hkdf": 1.2.1 - jose: 6.1.3 - oauth4webapi: 3.8.3 + jose: 6.2.2 + oauth4webapi: 3.3.1 preact: 10.24.3 preact-render-to-string: 6.5.11(preact@10.24.3) @@ -4023,26 +4115,26 @@ snapshots: "@babel/core@7.29.0": dependencies: "@babel/code-frame": 7.29.0 - "@babel/generator": 7.29.0 + "@babel/generator": 7.29.1 "@babel/helper-compilation-targets": 7.28.6 "@babel/helper-module-transforms": 7.28.6(@babel/core@7.29.0) - "@babel/helpers": 7.28.6 - "@babel/parser": 7.29.0 + "@babel/helpers": 7.29.2 + "@babel/parser": 7.29.2 "@babel/template": 7.28.6 "@babel/traverse": 7.29.0 "@babel/types": 7.29.0 "@jridgewell/remapping": 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.3 + debug: 4.4.0 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - "@babel/generator@7.29.0": + "@babel/generator@7.29.1": dependencies: - "@babel/parser": 7.29.0 + "@babel/parser": 7.29.2 "@babel/types": 7.29.0 "@jridgewell/gen-mapping": 0.3.13 "@jridgewell/trace-mapping": 0.3.31 @@ -4052,7 +4144,7 @@ snapshots: dependencies: "@babel/compat-data": 7.29.0 "@babel/helper-validator-option": 7.27.1 - browserslist: 4.28.1 + browserslist: 4.28.2 lru-cache: 5.1.1 semver: 6.3.1 @@ -4080,32 +4172,34 @@ snapshots: "@babel/helper-validator-option@7.27.1": {} - "@babel/helpers@7.28.6": + "@babel/helpers@7.29.2": dependencies: "@babel/template": 7.28.6 "@babel/types": 7.29.0 - "@babel/parser@7.29.0": + "@babel/parser@7.29.2": dependencies: "@babel/types": 7.29.0 - "@babel/runtime@7.28.6": {} + "@babel/runtime@7.26.10": + dependencies: + regenerator-runtime: 0.14.1 "@babel/template@7.28.6": dependencies: "@babel/code-frame": 7.29.0 - "@babel/parser": 7.29.0 + "@babel/parser": 7.29.2 "@babel/types": 7.29.0 "@babel/traverse@7.29.0": dependencies: "@babel/code-frame": 7.29.0 - "@babel/generator": 7.29.0 + "@babel/generator": 7.29.1 "@babel/helper-globals": 7.28.0 - "@babel/parser": 7.29.0 + "@babel/parser": 7.29.2 "@babel/template": 7.28.6 "@babel/types": 7.29.0 - debug: 4.4.3 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -4114,38 +4208,45 @@ snapshots: "@babel/helper-string-parser": 7.27.1 "@babel/helper-validator-identifier": 7.28.5 - "@emnapi/core@1.9.1": + "@emnapi/core@1.3.1": dependencies: - "@emnapi/wasi-threads": 1.2.0 + "@emnapi/wasi-threads": 1.0.1 tslib: 2.8.1 optional: true - "@emnapi/runtime@1.8.1": + "@emnapi/runtime@1.3.1": dependencies: tslib: 2.8.1 optional: true - "@emnapi/runtime@1.9.1": + "@emnapi/runtime@1.9.2": dependencies: tslib: 2.8.1 optional: true - "@emnapi/wasi-threads@1.2.0": + "@emnapi/wasi-threads@1.0.1": dependencies: tslib: 2.8.1 optional: true - "@eslint-community/eslint-utils@4.9.1(eslint@9.39.2)": + "@eslint-community/eslint-utils@4.5.1(eslint@9.39.4)": dependencies: - eslint: 9.39.2 + eslint: 9.39.4 eslint-visitor-keys: 3.4.3 + "@eslint-community/eslint-utils@4.9.1(eslint@9.39.4)": + dependencies: + eslint: 9.39.4 + eslint-visitor-keys: 3.4.3 + + "@eslint-community/regexpp@4.12.1": {} + "@eslint-community/regexpp@4.12.2": {} - "@eslint/config-array@0.21.1": + "@eslint/config-array@0.21.2": dependencies: "@eslint/object-schema": 2.1.7 - debug: 4.4.3 + debug: 4.4.0 minimatch: 3.1.5 transitivePeerDependencies: - supports-color @@ -4158,10 +4259,10 @@ snapshots: dependencies: "@types/json-schema": 7.0.15 - "@eslint/eslintrc@3.3.3": + "@eslint/eslintrc@3.3.5": dependencies: ajv: 6.14.0 - debug: 4.4.3 + debug: 4.4.0 espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 @@ -4172,8 +4273,6 @@ snapshots: transitivePeerDependencies: - supports-color - "@eslint/js@9.39.2": {} - "@eslint/js@9.39.4": {} "@eslint/object-schema@2.1.7": {} @@ -4183,43 +4282,45 @@ snapshots: "@eslint/core": 0.17.0 levn: 0.4.1 - "@floating-ui/core@1.7.4": + "@floating-ui/core@1.7.5": dependencies: - "@floating-ui/utils": 0.2.10 + "@floating-ui/utils": 0.2.11 - "@floating-ui/dom@1.7.5": + "@floating-ui/dom@1.7.6": dependencies: - "@floating-ui/core": 1.7.4 - "@floating-ui/utils": 0.2.10 + "@floating-ui/core": 1.7.5 + "@floating-ui/utils": 0.2.11 - "@floating-ui/react-dom@2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + "@floating-ui/react-dom@2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": dependencies: - "@floating-ui/dom": 1.7.5 + "@floating-ui/dom": 1.7.6 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - "@floating-ui/react@0.27.17(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + "@floating-ui/react@0.27.19(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": dependencies: - "@floating-ui/react-dom": 2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@floating-ui/utils": 0.2.10 + "@floating-ui/react-dom": 2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + "@floating-ui/utils": 0.2.11 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - tabbable: 6.4.0 + tabbable: 6.2.0 - "@floating-ui/utils@0.2.10": {} + "@floating-ui/utils@0.2.11": {} "@humanfs/core@0.19.1": {} - "@humanfs/node@0.16.7": + "@humanfs/node@0.16.6": dependencies: "@humanfs/core": 0.19.1 - "@humanwhocodes/retry": 0.4.3 + "@humanwhocodes/retry": 0.3.1 "@humanwhocodes/module-importer@1.0.1": {} - "@humanwhocodes/retry@0.4.3": {} + "@humanwhocodes/retry@0.3.1": {} - "@img/colour@1.0.0": {} + "@humanwhocodes/retry@0.4.2": {} + + "@img/colour@1.1.0": {} "@img/sharp-darwin-arm64@0.34.5": optionalDependencies: @@ -4303,7 +4404,7 @@ snapshots: "@img/sharp-wasm32@0.34.5": dependencies: - "@emnapi/runtime": 1.8.1 + "@emnapi/runtime": 1.9.2 optional: true "@img/sharp-win32-arm64@0.34.5": @@ -4334,14 +4435,14 @@ snapshots: "@jridgewell/resolve-uri": 3.1.2 "@jridgewell/sourcemap-codec": 1.5.5 - "@mantine/core@8.3.14(@mantine/hooks@8.3.14(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": + "@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.4))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)": dependencies: - "@floating-ui/react": 0.27.17(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - "@mantine/hooks": 8.3.14(react@19.2.4) + "@floating-ui/react": 0.27.19(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + "@mantine/hooks": 8.3.18(react@19.2.4) clsx: 2.1.1 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - react-number-format: 5.4.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react-number-format: 5.4.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.4) react-textarea-autosize: 8.5.9(@types/react@19.2.14)(react@19.2.4) type-fest: 4.41.0 @@ -4354,22 +4455,22 @@ snapshots: klona: 2.0.6 react: 19.2.4 - "@mantine/hooks@8.3.14(react@19.2.4)": + "@mantine/hooks@8.3.18(react@19.2.4)": dependencies: react: 19.2.4 - "@napi-rs/wasm-runtime@0.2.12": + "@napi-rs/wasm-runtime@0.2.7": dependencies: - "@emnapi/core": 1.9.1 - "@emnapi/runtime": 1.9.1 - "@tybys/wasm-util": 0.10.1 + "@emnapi/core": 1.3.1 + "@emnapi/runtime": 1.3.1 + "@tybys/wasm-util": 0.9.0 optional: true "@neondatabase/serverless@0.9.5": dependencies: "@types/pg": 8.11.6 - "@next/env@16.2.1": {} + "@next/env@16.2.2": {} "@next/eslint-plugin-next@16.1.7": dependencies: @@ -4379,28 +4480,28 @@ snapshots: dependencies: fast-glob: 3.3.1 - "@next/swc-darwin-arm64@16.2.1": + "@next/swc-darwin-arm64@16.2.2": optional: true - "@next/swc-darwin-x64@16.2.1": + "@next/swc-darwin-x64@16.2.2": optional: true - "@next/swc-linux-arm64-gnu@16.2.1": + "@next/swc-linux-arm64-gnu@16.2.2": optional: true - "@next/swc-linux-arm64-musl@16.2.1": + "@next/swc-linux-arm64-musl@16.2.2": optional: true - "@next/swc-linux-x64-gnu@16.2.1": + "@next/swc-linux-x64-gnu@16.2.2": optional: true - "@next/swc-linux-x64-musl@16.2.1": + "@next/swc-linux-x64-musl@16.2.2": optional: true - "@next/swc-win32-arm64-msvc@16.2.1": + "@next/swc-win32-arm64-msvc@16.2.2": optional: true - "@next/swc-win32-x64-msvc@16.2.1": + "@next/swc-win32-x64-msvc@16.2.2": optional: true "@nodelib/fs.scandir@2.1.5": @@ -4413,15 +4514,15 @@ snapshots: "@nodelib/fs.walk@1.2.8": dependencies: "@nodelib/fs.scandir": 2.1.5 - fastq: 1.20.1 + fastq: 1.19.1 "@nolyfill/is-core-module@1.0.39": {} "@panva/hkdf@1.2.1": {} - "@playwright/test@1.58.1": + "@playwright/test@1.59.1": dependencies: - playwright: 1.58.1 + playwright: 1.59.1 "@rtsao/scc@1.1.0": {} @@ -4429,37 +4530,37 @@ snapshots: dependencies: tslib: 2.8.1 - "@tabler/icons-react@3.36.1(react@19.2.4)": + "@tabler/icons-react@3.41.1(react@19.2.4)": dependencies: - "@tabler/icons": 3.36.1 + "@tabler/icons": 3.41.1 react: 19.2.4 - "@tabler/icons@3.36.1": {} + "@tabler/icons@3.41.1": {} - "@tybys/wasm-util@0.10.1": + "@tybys/wasm-util@0.9.0": dependencies: tslib: 2.8.1 optional: true "@types/bcrypt@6.0.0": dependencies: - "@types/node": 25.2.0 + "@types/node": 25.5.2 - "@types/estree@1.0.8": {} + "@types/estree@1.0.6": {} "@types/json-schema@7.0.15": {} "@types/json5@0.0.29": {} - "@types/node@25.2.0": + "@types/node@25.5.2": dependencies: - undici-types: 7.16.0 + undici-types: 7.18.2 "@types/pg@8.11.6": dependencies: - "@types/node": 25.2.0 - pg-protocol: 1.11.0 - pg-types: 4.1.0 + "@types/node": 25.5.2 + pg-protocol: 1.8.0 + pg-types: 4.0.2 "@types/react-dom@19.2.3(@types/react@19.2.14)": dependencies: @@ -4469,66 +4570,66 @@ snapshots: dependencies: csstype: 3.2.3 - "@typescript-eslint/eslint-plugin@8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3)": + "@typescript-eslint/eslint-plugin@8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3)": dependencies: "@eslint-community/regexpp": 4.12.2 - "@typescript-eslint/parser": 8.54.0(eslint@9.39.2)(typescript@5.9.3) + "@typescript-eslint/parser": 8.54.0(eslint@9.39.4)(typescript@5.9.3) "@typescript-eslint/scope-manager": 8.54.0 - "@typescript-eslint/type-utils": 8.54.0(eslint@9.39.2)(typescript@5.9.3) - "@typescript-eslint/utils": 8.54.0(eslint@9.39.2)(typescript@5.9.3) + "@typescript-eslint/type-utils": 8.54.0(eslint@9.39.4)(typescript@5.9.3) + "@typescript-eslint/utils": 8.54.0(eslint@9.39.4)(typescript@5.9.3) "@typescript-eslint/visitor-keys": 8.54.0 - eslint: 9.39.2 + eslint: 9.39.4 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@5.9.3) + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/eslint-plugin@8.54.0(@typescript-eslint/parser@8.58.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3)": + "@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3)": dependencies: "@eslint-community/regexpp": 4.12.2 - "@typescript-eslint/parser": 8.58.0(eslint@9.39.2)(typescript@5.9.3) - "@typescript-eslint/scope-manager": 8.54.0 - "@typescript-eslint/type-utils": 8.54.0(eslint@9.39.2)(typescript@5.9.3) - "@typescript-eslint/utils": 8.54.0(eslint@9.39.2)(typescript@5.9.3) - "@typescript-eslint/visitor-keys": 8.54.0 - eslint: 9.39.2 + "@typescript-eslint/parser": 8.58.0(eslint@9.39.4)(typescript@5.9.3) + "@typescript-eslint/scope-manager": 8.58.0 + "@typescript-eslint/type-utils": 8.58.0(eslint@9.39.4)(typescript@5.9.3) + "@typescript-eslint/utils": 8.58.0(eslint@9.39.4)(typescript@5.9.3) + "@typescript-eslint/visitor-keys": 8.58.0 + eslint: 9.39.4 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@5.9.3) + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/parser@8.54.0(eslint@9.39.2)(typescript@5.9.3)": + "@typescript-eslint/parser@8.54.0(eslint@9.39.4)(typescript@5.9.3)": dependencies: "@typescript-eslint/scope-manager": 8.54.0 "@typescript-eslint/types": 8.54.0 "@typescript-eslint/typescript-estree": 8.54.0(typescript@5.9.3) "@typescript-eslint/visitor-keys": 8.54.0 debug: 4.4.3 - eslint: 9.39.2 + eslint: 9.39.4 typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/parser@8.58.0(eslint@9.39.2)(typescript@5.9.3)": + "@typescript-eslint/parser@8.58.0(eslint@9.39.4)(typescript@5.9.3)": dependencies: "@typescript-eslint/scope-manager": 8.58.0 "@typescript-eslint/types": 8.58.0 "@typescript-eslint/typescript-estree": 8.58.0(typescript@5.9.3) "@typescript-eslint/visitor-keys": 8.58.0 debug: 4.4.3 - eslint: 9.39.2 + eslint: 9.39.4 typescript: 5.9.3 transitivePeerDependencies: - supports-color "@typescript-eslint/project-service@8.54.0(typescript@5.9.3)": dependencies: - "@typescript-eslint/tsconfig-utils": 8.58.0(typescript@5.9.3) - "@typescript-eslint/types": 8.58.0 + "@typescript-eslint/tsconfig-utils": 8.54.0(typescript@5.9.3) + "@typescript-eslint/types": 8.54.0 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: @@ -4561,14 +4662,26 @@ snapshots: dependencies: typescript: 5.9.3 - "@typescript-eslint/type-utils@8.54.0(eslint@9.39.2)(typescript@5.9.3)": + "@typescript-eslint/type-utils@8.54.0(eslint@9.39.4)(typescript@5.9.3)": dependencies: "@typescript-eslint/types": 8.54.0 "@typescript-eslint/typescript-estree": 8.54.0(typescript@5.9.3) - "@typescript-eslint/utils": 8.54.0(eslint@9.39.2)(typescript@5.9.3) + "@typescript-eslint/utils": 8.54.0(eslint@9.39.4)(typescript@5.9.3) debug: 4.4.3 - eslint: 9.39.2 - ts-api-utils: 2.4.0(typescript@5.9.3) + eslint: 9.39.4 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/type-utils@8.58.0(eslint@9.39.4)(typescript@5.9.3)": + dependencies: + "@typescript-eslint/types": 8.58.0 + "@typescript-eslint/typescript-estree": 8.58.0(typescript@5.9.3) + "@typescript-eslint/utils": 8.58.0(eslint@9.39.4)(typescript@5.9.3) + debug: 4.4.3 + eslint: 9.39.4 + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -4584,10 +4697,10 @@ snapshots: "@typescript-eslint/types": 8.54.0 "@typescript-eslint/visitor-keys": 8.54.0 debug: 4.4.3 - minimatch: 9.0.9 - semver: 7.7.3 + minimatch: 9.0.5 + semver: 7.7.4 tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.9.3) + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -4607,13 +4720,24 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/utils@8.54.0(eslint@9.39.2)(typescript@5.9.3)": + "@typescript-eslint/utils@8.54.0(eslint@9.39.4)(typescript@5.9.3)": dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@9.39.2) + "@eslint-community/eslint-utils": 4.9.1(eslint@9.39.4) "@typescript-eslint/scope-manager": 8.54.0 "@typescript-eslint/types": 8.54.0 "@typescript-eslint/typescript-estree": 8.54.0(typescript@5.9.3) - eslint: 9.39.2 + eslint: 9.39.4 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/utils@8.58.0(eslint@9.39.4)(typescript@5.9.3)": + dependencies: + "@eslint-community/eslint-utils": 4.9.1(eslint@9.39.4) + "@typescript-eslint/scope-manager": 8.58.0 + "@typescript-eslint/types": 8.58.0 + "@typescript-eslint/typescript-estree": 8.58.0(typescript@5.9.3) + eslint: 9.39.4 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -4628,88 +4752,64 @@ snapshots: "@typescript-eslint/types": 8.58.0 eslint-visitor-keys: 5.0.1 - "@unrs/resolver-binding-android-arm-eabi@1.11.1": + "@unrs/rspack-resolver-binding-darwin-arm64@1.2.2": optional: true - "@unrs/resolver-binding-android-arm64@1.11.1": + "@unrs/rspack-resolver-binding-darwin-x64@1.2.2": optional: true - "@unrs/resolver-binding-darwin-arm64@1.11.1": + "@unrs/rspack-resolver-binding-freebsd-x64@1.2.2": optional: true - "@unrs/resolver-binding-darwin-x64@1.11.1": + "@unrs/rspack-resolver-binding-linux-arm-gnueabihf@1.2.2": optional: true - "@unrs/resolver-binding-freebsd-x64@1.11.1": + "@unrs/rspack-resolver-binding-linux-arm64-gnu@1.2.2": optional: true - "@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1": + "@unrs/rspack-resolver-binding-linux-arm64-musl@1.2.2": optional: true - "@unrs/resolver-binding-linux-arm-musleabihf@1.11.1": + "@unrs/rspack-resolver-binding-linux-x64-gnu@1.2.2": optional: true - "@unrs/resolver-binding-linux-arm64-gnu@1.11.1": + "@unrs/rspack-resolver-binding-linux-x64-musl@1.2.2": optional: true - "@unrs/resolver-binding-linux-arm64-musl@1.11.1": - optional: true - - "@unrs/resolver-binding-linux-ppc64-gnu@1.11.1": - optional: true - - "@unrs/resolver-binding-linux-riscv64-gnu@1.11.1": - optional: true - - "@unrs/resolver-binding-linux-riscv64-musl@1.11.1": - optional: true - - "@unrs/resolver-binding-linux-s390x-gnu@1.11.1": - optional: true - - "@unrs/resolver-binding-linux-x64-gnu@1.11.1": - optional: true - - "@unrs/resolver-binding-linux-x64-musl@1.11.1": - optional: true - - "@unrs/resolver-binding-wasm32-wasi@1.11.1": + "@unrs/rspack-resolver-binding-wasm32-wasi@1.2.2": dependencies: - "@napi-rs/wasm-runtime": 0.2.12 - optional: true - - "@unrs/resolver-binding-win32-arm64-msvc@1.11.1": + "@napi-rs/wasm-runtime": 0.2.7 optional: true - "@unrs/resolver-binding-win32-ia32-msvc@1.11.1": + "@unrs/rspack-resolver-binding-win32-arm64-msvc@1.2.2": optional: true - "@unrs/resolver-binding-win32-x64-msvc@1.11.1": + "@unrs/rspack-resolver-binding-win32-x64-msvc@1.2.2": optional: true - "@vercel/analytics@1.6.1(next@16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)": + "@vercel/analytics@1.6.1(next@16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)": optionalDependencies: - next: 16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next: 16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 "@vercel/postgres@0.10.0": dependencies: "@neondatabase/serverless": 0.9.5 - bufferutil: 4.1.0 - ws: 8.19.0(bufferutil@4.1.0) + bufferutil: 4.0.9 + ws: 8.18.1(bufferutil@4.0.9) transitivePeerDependencies: - utf-8-validate - "@vercel/speed-insights@1.3.1(next@16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)": + "@vercel/speed-insights@1.3.1(next@16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)": optionalDependencies: - next: 16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next: 16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 - acorn-jsx@5.3.2(acorn@8.15.0): + acorn-jsx@5.3.2(acorn@8.16.0): dependencies: - acorn: 8.15.0 + acorn: 8.16.0 - acorn@8.15.0: {} + acorn@8.16.0: {} ajv@6.14.0: dependencies: @@ -4718,16 +4818,20 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ansi-escapes@7.3.0: + ansi-escapes@7.0.0: dependencies: environment: 1.1.0 + ansi-regex@6.1.0: {} + ansi-regex@6.2.2: {} ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 + ansi-styles@6.2.1: {} + ansi-styles@6.2.3: {} argparse@2.0.1: {} @@ -4739,6 +4843,15 @@ snapshots: call-bound: 1.0.4 is-array-buffer: 3.0.5 + array-includes@3.1.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + is-string: 1.1.1 + array-includes@3.1.9: dependencies: call-bind: 1.0.8 @@ -4754,7 +4867,7 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.23.9 es-errors: 1.3.0 es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 @@ -4764,7 +4877,7 @@ snapshots: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.23.9 es-errors: 1.3.0 es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 @@ -4773,21 +4886,21 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.23.9 es-shim-unscopables: 1.1.0 array.prototype.flatmap@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.23.9 es-shim-unscopables: 1.1.0 array.prototype.tosorted@1.1.4: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.23.9 es-errors: 1.3.0 es-shim-unscopables: 1.1.0 @@ -4796,7 +4909,7 @@ snapshots: array-buffer-byte-length: 1.0.2 call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.23.9 es-errors: 1.3.0 get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 @@ -4809,7 +4922,7 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - axe-core@4.11.1: {} + axe-core@4.10.3: {} axobject-query@4.1.0: {} @@ -4817,19 +4930,19 @@ snapshots: balanced-match@4.0.4: {} - baseline-browser-mapping@2.9.19: {} + baseline-browser-mapping@2.10.14: {} bcrypt@6.0.0: dependencies: - node-addon-api: 8.5.0 + node-addon-api: 8.7.0 node-gyp-build: 4.8.4 - brace-expansion@1.1.13: + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.3: + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 @@ -4841,15 +4954,15 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.28.1: + browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.9.19 - caniuse-lite: 1.0.30001767 - electron-to-chromium: 1.5.283 - node-releases: 2.0.27 - update-browserslist-db: 1.2.3(browserslist@4.28.1) + baseline-browser-mapping: 2.10.14 + caniuse-lite: 1.0.30001785 + electron-to-chromium: 1.5.331 + node-releases: 2.0.37 + update-browserslist-db: 1.2.3(browserslist@4.28.2) - bufferutil@4.1.0: + bufferutil@4.0.9: dependencies: node-gyp-build: 4.8.4 @@ -4874,7 +4987,9 @@ snapshots: camelcase-css@2.0.1: {} - caniuse-lite@1.0.30001767: {} + caniuse-lite@1.0.30001706: {} + + caniuse-lite@1.0.30001785: {} chalk@4.1.2: dependencies: @@ -4942,6 +5057,10 @@ snapshots: dependencies: ms: 2.1.3 + debug@4.4.0: + dependencies: + ms: 2.1.3 + debug@4.4.3: dependencies: ms: 2.1.3 @@ -4976,14 +5095,68 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - electron-to-chromium@1.5.283: {} + electron-to-chromium@1.5.331: {} - emoji-regex@10.6.0: {} + emoji-regex@10.4.0: {} emoji-regex@9.2.2: {} environment@1.1.0: {} + es-abstract@1.23.9: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.19 + es-abstract@1.24.1: dependencies: array-buffer-byte-length: 1.0.2 @@ -5039,18 +5212,18 @@ snapshots: typed-array-byte-offset: 1.0.4 typed-array-length: 1.0.7 unbox-primitive: 1.1.0 - which-typed-array: 1.1.20 + which-typed-array: 1.1.19 es-define-property@1.0.1: {} es-errors@1.3.0: {} - es-iterator-helpers@1.2.2: + es-iterator-helpers@1.2.1: dependencies: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.23.9 es-errors: 1.3.0 es-set-tostringtag: 2.1.0 function-bind: 1.1.2 @@ -5089,18 +5262,18 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@16.2.2(@typescript-eslint/parser@8.58.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3): + eslint-config-next@16.2.2(@typescript-eslint/parser@8.58.0(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3): dependencies: "@next/eslint-plugin-next": 16.2.2 - eslint: 9.39.2 + eslint: 9.39.4 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.0(eslint@9.39.2)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.2) - eslint-plugin-react: 7.37.5(eslint@9.39.2) - eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2) + eslint-import-resolver-typescript: 3.9.1(eslint-plugin-import@2.32.0)(eslint@9.39.4) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4)(typescript@5.9.3))(eslint-import-resolver-typescript@3.9.1)(eslint@9.39.4) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.4) + eslint-plugin-react: 7.37.5(eslint@9.39.4) + eslint-plugin-react-hooks: 7.0.1(eslint@9.39.4) globals: 16.4.0 - typescript-eslint: 8.54.0(eslint@9.39.2)(typescript@5.9.3) + typescript-eslint: 8.54.0(eslint@9.39.4)(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: @@ -5109,45 +5282,45 @@ snapshots: - eslint-plugin-import-x - supports-color - eslint-config-prettier@10.1.8(eslint@9.39.2): + eslint-config-prettier@10.1.8(eslint@9.39.4): dependencies: - eslint: 9.39.2 + eslint: 9.39.4 eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 is-core-module: 2.16.1 - resolve: 1.22.11 + resolve: 1.22.10 transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2): + eslint-import-resolver-typescript@3.9.1(eslint-plugin-import@2.32.0)(eslint@9.39.4): dependencies: "@nolyfill/is-core-module": 1.0.39 - debug: 4.4.3 - eslint: 9.39.2 - get-tsconfig: 4.13.7 - is-bun-module: 2.0.0 + debug: 4.4.0 + eslint: 9.39.4 + get-tsconfig: 4.10.0 + is-bun-module: 1.3.0 + rspack-resolver: 1.2.2 stable-hash: 0.0.5 - tinyglobby: 0.2.15 - unrs-resolver: 1.11.1 + tinyglobby: 0.2.12 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.0(eslint@9.39.2)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4)(typescript@5.9.3))(eslint-import-resolver-typescript@3.9.1)(eslint@9.39.4) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.58.0(eslint@9.39.2)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.58.0(eslint@9.39.4)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.1)(eslint@9.39.4): dependencies: debug: 3.2.7 optionalDependencies: - "@typescript-eslint/parser": 8.58.0(eslint@9.39.2)(typescript@5.9.3) - eslint: 9.39.2 + "@typescript-eslint/parser": 8.58.0(eslint@9.39.4)(typescript@5.9.3) + eslint: 9.39.4 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2) + eslint-import-resolver-typescript: 3.9.1(eslint-plugin-import@2.32.0)(eslint@9.39.4) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.0(eslint@9.39.2)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.0(eslint@9.39.4)(typescript@5.9.3))(eslint-import-resolver-typescript@3.9.1)(eslint@9.39.4): dependencies: "@rtsao/scc": 1.1.0 array-includes: 3.1.9 @@ -5156,13 +5329,13 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.39.2 + eslint: 9.39.4 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.58.0(eslint@9.39.2)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.58.0(eslint@9.39.4)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.1)(eslint@9.39.4) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 - minimatch: 3.1.5 + minimatch: 3.1.2 object.fromentries: 2.0.8 object.groupby: 1.0.3 object.values: 1.2.1 @@ -5170,62 +5343,62 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - "@typescript-eslint/parser": 8.58.0(eslint@9.39.2)(typescript@5.9.3) + "@typescript-eslint/parser": 8.58.0(eslint@9.39.4)(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.2): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.4): dependencies: aria-query: 5.3.2 - array-includes: 3.1.9 + array-includes: 3.1.8 array.prototype.flatmap: 1.3.3 ast-types-flow: 0.0.8 - axe-core: 4.11.1 + axe-core: 4.10.3 axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.39.2 + eslint: 9.39.4 hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 - minimatch: 3.1.5 + minimatch: 3.1.2 object.fromentries: 2.0.8 safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 eslint-plugin-next@0.0.0: {} - eslint-plugin-promise@7.2.1(eslint@9.39.2): + eslint-plugin-promise@7.2.1(eslint@9.39.4): dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@9.39.2) - eslint: 9.39.2 + "@eslint-community/eslint-utils": 4.5.1(eslint@9.39.4) + eslint: 9.39.4 - eslint-plugin-react-hooks@7.0.1(eslint@9.39.2): + eslint-plugin-react-hooks@7.0.1(eslint@9.39.4): dependencies: "@babel/core": 7.29.0 - "@babel/parser": 7.29.0 - eslint: 9.39.2 + "@babel/parser": 7.29.2 + eslint: 9.39.4 hermes-parser: 0.25.1 zod: 4.3.6 zod-validation-error: 4.0.2(zod@4.3.6) transitivePeerDependencies: - supports-color - eslint-plugin-react@7.37.5(eslint@9.39.2): + eslint-plugin-react@7.37.5(eslint@9.39.4): dependencies: - array-includes: 3.1.9 + array-includes: 3.1.8 array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.3 array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 - es-iterator-helpers: 1.2.2 - eslint: 9.39.2 + es-iterator-helpers: 1.2.1 + eslint: 9.39.4 estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 - minimatch: 3.1.5 + minimatch: 3.1.2 object.entries: 1.1.9 object.fromentries: 2.0.8 object.values: 1.2.1 @@ -5246,29 +5419,29 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@9.39.2: + eslint@9.39.4: dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@9.39.2) - "@eslint-community/regexpp": 4.12.2 - "@eslint/config-array": 0.21.1 + "@eslint-community/eslint-utils": 4.9.1(eslint@9.39.4) + "@eslint-community/regexpp": 4.12.1 + "@eslint/config-array": 0.21.2 "@eslint/config-helpers": 0.4.2 "@eslint/core": 0.17.0 - "@eslint/eslintrc": 3.3.3 - "@eslint/js": 9.39.2 + "@eslint/eslintrc": 3.3.5 + "@eslint/js": 9.39.4 "@eslint/plugin-kit": 0.4.1 - "@humanfs/node": 0.16.7 + "@humanfs/node": 0.16.6 "@humanwhocodes/module-importer": 1.0.1 - "@humanwhocodes/retry": 0.4.3 - "@types/estree": 1.0.8 + "@humanwhocodes/retry": 0.4.2 + "@types/estree": 1.0.6 ajv: 6.14.0 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.3 + debug: 4.4.0 escape-string-regexp: 4.0.0 eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - esquery: 1.7.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 8.0.0 @@ -5287,11 +5460,11 @@ snapshots: espree@10.4.0: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 4.2.1 - esquery@1.7.0: + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -5303,7 +5476,7 @@ snapshots: esutils@2.0.3: {} - eventemitter3@5.0.4: {} + eventemitter3@5.0.1: {} fast-deep-equal@3.1.3: {} @@ -5319,10 +5492,14 @@ snapshots: fast-levenshtein@2.0.6: {} - fastq@1.20.1: + fastq@1.19.1: dependencies: reusify: 1.1.0 + fdir@6.4.3(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + fdir@6.5.0(picomatch@4.0.4): optionalDependencies: picomatch: 4.0.4 @@ -5351,6 +5528,15 @@ snapshots: dependencies: is-callable: 1.2.7 + framer-motion@12.6.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + dependencies: + motion-dom: 12.6.1 + motion-utils: 12.5.0 + tslib: 2.8.1 + optionalDependencies: + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + fsevents@2.3.2: optional: true @@ -5367,10 +5553,10 @@ snapshots: functions-have-names@1.2.3: {} - generator-function@2.0.1: {} - gensync@1.0.0-beta.2: {} + get-east-asian-width@1.3.0: {} + get-east-asian-width@1.5.0: {} get-intrinsic@1.3.0: @@ -5399,7 +5585,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.13.7: + get-tsconfig@4.10.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -5492,9 +5678,9 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-bun-module@2.0.0: + is-bun-module@1.3.0: dependencies: - semver: 7.7.4 + semver: 7.7.1 is-callable@1.2.7: {} @@ -5519,14 +5705,17 @@ snapshots: dependencies: call-bound: 1.0.4 + is-fullwidth-code-point@5.0.0: + dependencies: + get-east-asian-width: 1.3.0 + is-fullwidth-code-point@5.1.0: dependencies: get-east-asian-width: 1.5.0 - is-generator-function@1.1.2: + is-generator-function@1.1.0: dependencies: call-bound: 1.0.4 - generator-function: 2.0.1 get-proto: 1.0.1 has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 @@ -5572,7 +5761,7 @@ snapshots: is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.20 + which-typed-array: 1.1.19 is-weakmap@2.0.2: {} @@ -5598,7 +5787,7 @@ snapshots: has-symbols: 1.1.0 set-function-name: 2.0.2 - jose@6.1.3: {} + jose@6.2.2: {} js-tokens@4.0.0: {} @@ -5622,7 +5811,7 @@ snapshots: jsx-ast-utils@3.3.5: dependencies: - array-includes: 3.1.9 + array-includes: 3.1.8 array.prototype.flat: 1.3.3 object.assign: 4.1.7 object.values: 1.2.1 @@ -5657,10 +5846,10 @@ snapshots: dependencies: cli-truncate: 5.2.0 colorette: 2.0.20 - eventemitter3: 5.0.4 + eventemitter3: 5.0.1 log-update: 6.1.0 rfdc: 1.4.1 - wrap-ansi: 9.0.2 + wrap-ansi: 9.0.0 locate-path@6.0.0: dependencies: @@ -5670,11 +5859,11 @@ snapshots: log-update@6.1.0: dependencies: - ansi-escapes: 7.3.0 + ansi-escapes: 7.0.0 cli-cursor: 5.0.0 - slice-ansi: 7.1.2 - strip-ansi: 7.2.0 - wrap-ansi: 9.0.2 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 loose-envify@1.4.0: dependencies: @@ -5691,7 +5880,7 @@ snapshots: micromatch@4.0.8: dependencies: braces: 3.0.3 - picomatch: 2.3.2 + picomatch: 2.3.1 mimic-function@5.0.1: {} @@ -5699,62 +5888,70 @@ snapshots: dependencies: brace-expansion: 5.0.5 + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + minimatch@3.1.5: dependencies: - brace-expansion: 1.1.13 + brace-expansion: 1.1.11 - minimatch@9.0.9: + minimatch@9.0.5: dependencies: - brace-expansion: 2.0.3 + brace-expansion: 2.0.1 minimist@1.2.8: {} + motion-dom@12.6.1: + dependencies: + motion-utils: 12.5.0 + + motion-utils@12.5.0: {} + ms@2.1.3: {} nanoid@3.3.11: {} - napi-postinstall@0.3.4: {} - natural-compare@1.4.0: {} - next-auth@5.0.0-beta.30(next@16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4): + next-auth@5.0.0-beta.30(next@16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4): dependencies: "@auth/core": 0.41.0 - next: 16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + next: 16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 - next@16.2.1(@babel/core@7.29.0)(@playwright/test@1.58.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + next@16.2.2(@babel/core@7.29.0)(@playwright/test@1.59.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - "@next/env": 16.2.1 + "@next/env": 16.2.2 "@swc/helpers": 0.5.15 - baseline-browser-mapping: 2.9.19 - caniuse-lite: 1.0.30001767 + baseline-browser-mapping: 2.10.14 + caniuse-lite: 1.0.30001706 postcss: 8.4.31 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.4) optionalDependencies: - "@next/swc-darwin-arm64": 16.2.1 - "@next/swc-darwin-x64": 16.2.1 - "@next/swc-linux-arm64-gnu": 16.2.1 - "@next/swc-linux-arm64-musl": 16.2.1 - "@next/swc-linux-x64-gnu": 16.2.1 - "@next/swc-linux-x64-musl": 16.2.1 - "@next/swc-win32-arm64-msvc": 16.2.1 - "@next/swc-win32-x64-msvc": 16.2.1 - "@playwright/test": 1.58.1 + "@next/swc-darwin-arm64": 16.2.2 + "@next/swc-darwin-x64": 16.2.2 + "@next/swc-linux-arm64-gnu": 16.2.2 + "@next/swc-linux-arm64-musl": 16.2.2 + "@next/swc-linux-x64-gnu": 16.2.2 + "@next/swc-linux-x64-musl": 16.2.2 + "@next/swc-win32-arm64-msvc": 16.2.2 + "@next/swc-win32-x64-msvc": 16.2.2 + "@playwright/test": 1.59.1 sharp: 0.34.5 transitivePeerDependencies: - "@babel/core" - babel-plugin-macros - node-addon-api@8.5.0: {} + node-addon-api@8.7.0: {} node-gyp-build@4.8.4: {} - node-releases@2.0.27: {} + node-releases@2.0.37: {} - oauth4webapi@3.8.3: {} + oauth4webapi@3.3.1: {} object-assign@4.1.1: {} @@ -5782,14 +5979,14 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.23.9 es-object-atoms: 1.1.1 object.groupby@1.0.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.23.9 object.values@1.2.1: dependencies: @@ -5841,9 +6038,9 @@ snapshots: pg-numeric@1.0.2: {} - pg-protocol@1.11.0: {} + pg-protocol@1.8.0: {} - pg-types@4.1.0: + pg-types@4.0.2: dependencies: pg-int8: 1.0.1 pg-numeric: 1.0.2 @@ -5855,21 +6052,23 @@ snapshots: picocolors@1.1.1: {} - picomatch@2.3.2: {} + picomatch@2.3.1: {} + + picomatch@4.0.2: {} picomatch@4.0.4: {} - playwright-core@1.58.1: {} + playwright-core@1.59.1: {} - playwright@1.58.1: + playwright@1.59.1: dependencies: - playwright-core: 1.58.1 + playwright-core: 1.59.1 optionalDependencies: fsevents: 2.3.2 possible-typed-array-names@1.1.0: {} - postcss-js@4.1.0(postcss@8.5.8): + postcss-js@4.0.1(postcss@8.5.8): dependencies: camelcase-css: 2.0.1 postcss: 8.5.8 @@ -5877,7 +6076,7 @@ snapshots: postcss-mixins@12.1.2(postcss@8.5.8): dependencies: postcss: 8.5.8 - postcss-js: 4.1.0(postcss@8.5.8) + postcss-js: 4.0.1(postcss@8.5.8) postcss-simple-vars: 7.0.1(postcss@8.5.8) sugarss: 5.0.1(postcss@8.5.8) tinyglobby: 0.2.15 @@ -5957,7 +6156,7 @@ snapshots: react-is@16.13.1: {} - react-number-format@5.4.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + react-number-format@5.4.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) @@ -5991,7 +6190,7 @@ snapshots: react-textarea-autosize@8.5.9(@types/react@19.2.14)(react@19.2.4): dependencies: - "@babel/runtime": 7.28.6 + "@babel/runtime": 7.26.10 react: 19.2.4 use-composed-ref: 1.4.0(@types/react@19.2.14)(react@19.2.4) use-latest: 1.3.0(@types/react@19.2.14)(react@19.2.4) @@ -6004,13 +6203,15 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.23.9 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 get-proto: 1.0.1 which-builtin-type: 1.2.1 + regenerator-runtime@0.14.1: {} + regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.8 @@ -6024,7 +6225,7 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve@1.22.11: + resolve@1.22.10: dependencies: is-core-module: 2.16.1 path-parse: 1.0.7 @@ -6045,6 +6246,20 @@ snapshots: rfdc@1.4.1: {} + rspack-resolver@1.2.2: + optionalDependencies: + "@unrs/rspack-resolver-binding-darwin-arm64": 1.2.2 + "@unrs/rspack-resolver-binding-darwin-x64": 1.2.2 + "@unrs/rspack-resolver-binding-freebsd-x64": 1.2.2 + "@unrs/rspack-resolver-binding-linux-arm-gnueabihf": 1.2.2 + "@unrs/rspack-resolver-binding-linux-arm64-gnu": 1.2.2 + "@unrs/rspack-resolver-binding-linux-arm64-musl": 1.2.2 + "@unrs/rspack-resolver-binding-linux-x64-gnu": 1.2.2 + "@unrs/rspack-resolver-binding-linux-x64-musl": 1.2.2 + "@unrs/rspack-resolver-binding-wasm32-wasi": 1.2.2 + "@unrs/rspack-resolver-binding-win32-arm64-msvc": 1.2.2 + "@unrs/rspack-resolver-binding-win32-x64-msvc": 1.2.2 + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -6072,7 +6287,7 @@ snapshots: semver@6.3.1: {} - semver@7.7.3: {} + semver@7.7.1: {} semver@7.7.4: {} @@ -6100,9 +6315,9 @@ snapshots: sharp@0.34.5: dependencies: - "@img/colour": 1.0.0 + "@img/colour": 1.1.0 detect-libc: 2.1.2 - semver: 7.7.3 + semver: 7.7.4 optionalDependencies: "@img/sharp-darwin-arm64": 0.34.5 "@img/sharp-darwin-x64": 0.34.5 @@ -6165,10 +6380,10 @@ snapshots: signal-exit@4.1.0: {} - slice-ansi@7.1.2: + slice-ansi@7.1.0: dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 5.1.0 + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.0 slice-ansi@8.0.0: dependencies: @@ -6188,9 +6403,9 @@ snapshots: string-width@7.2.0: dependencies: - emoji-regex: 10.6.0 - get-east-asian-width: 1.5.0 - strip-ansi: 7.2.0 + emoji-regex: 10.4.0 + get-east-asian-width: 1.3.0 + strip-ansi: 7.1.0 string-width@8.2.0: dependencies: @@ -6201,14 +6416,14 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.23.9 string.prototype.matchall@4.0.12: dependencies: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.23.9 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 @@ -6222,7 +6437,7 @@ snapshots: string.prototype.repeat@1.0.0: dependencies: define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.23.9 string.prototype.trim@1.2.10: dependencies: @@ -6230,7 +6445,7 @@ snapshots: call-bound: 1.0.4 define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.24.1 + es-abstract: 1.23.9 es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 @@ -6247,6 +6462,10 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + strip-ansi@7.2.0: dependencies: ansi-regex: 6.2.2 @@ -6272,10 +6491,15 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - tabbable@6.4.0: {} + tabbable@6.2.0: {} tinyexec@1.0.4: {} + tinyglobby@0.2.12: + dependencies: + fdir: 6.4.3(picomatch@4.0.2) + picomatch: 4.0.2 + tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.4) @@ -6285,10 +6509,6 @@ snapshots: dependencies: is-number: 7.0.0 - ts-api-utils@2.4.0(typescript@5.9.3): - dependencies: - typescript: 5.9.3 - ts-api-utils@2.5.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -6341,13 +6561,13 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.54.0(eslint@9.39.2)(typescript@5.9.3): + typescript-eslint@8.54.0(eslint@9.39.4)(typescript@5.9.3): dependencies: - "@typescript-eslint/eslint-plugin": 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3) - "@typescript-eslint/parser": 8.54.0(eslint@9.39.2)(typescript@5.9.3) + "@typescript-eslint/eslint-plugin": 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3) + "@typescript-eslint/parser": 8.54.0(eslint@9.39.4)(typescript@5.9.3) "@typescript-eslint/typescript-estree": 8.54.0(typescript@5.9.3) - "@typescript-eslint/utils": 8.54.0(eslint@9.39.2)(typescript@5.9.3) - eslint: 9.39.2 + "@typescript-eslint/utils": 8.54.0(eslint@9.39.4)(typescript@5.9.3) + eslint: 9.39.4 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -6361,35 +6581,11 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - undici-types@7.16.0: {} + undici-types@7.18.2: {} - unrs-resolver@1.11.1: + update-browserslist-db@1.2.3(browserslist@4.28.2): dependencies: - napi-postinstall: 0.3.4 - optionalDependencies: - "@unrs/resolver-binding-android-arm-eabi": 1.11.1 - "@unrs/resolver-binding-android-arm64": 1.11.1 - "@unrs/resolver-binding-darwin-arm64": 1.11.1 - "@unrs/resolver-binding-darwin-x64": 1.11.1 - "@unrs/resolver-binding-freebsd-x64": 1.11.1 - "@unrs/resolver-binding-linux-arm-gnueabihf": 1.11.1 - "@unrs/resolver-binding-linux-arm-musleabihf": 1.11.1 - "@unrs/resolver-binding-linux-arm64-gnu": 1.11.1 - "@unrs/resolver-binding-linux-arm64-musl": 1.11.1 - "@unrs/resolver-binding-linux-ppc64-gnu": 1.11.1 - "@unrs/resolver-binding-linux-riscv64-gnu": 1.11.1 - "@unrs/resolver-binding-linux-riscv64-musl": 1.11.1 - "@unrs/resolver-binding-linux-s390x-gnu": 1.11.1 - "@unrs/resolver-binding-linux-x64-gnu": 1.11.1 - "@unrs/resolver-binding-linux-x64-musl": 1.11.1 - "@unrs/resolver-binding-wasm32-wasi": 1.11.1 - "@unrs/resolver-binding-win32-arm64-msvc": 1.11.1 - "@unrs/resolver-binding-win32-ia32-msvc": 1.11.1 - "@unrs/resolver-binding-win32-x64-msvc": 1.11.1 - - update-browserslist-db@1.2.3(browserslist@4.28.1): - dependencies: - browserslist: 4.28.1 + browserslist: 4.28.2 escalade: 3.2.0 picocolors: 1.1.1 @@ -6410,7 +6606,7 @@ snapshots: optionalDependencies: "@types/react": 19.2.14 - use-isomorphic-layout-effect@1.2.1(@types/react@19.2.14)(react@19.2.4): + use-isomorphic-layout-effect@1.2.0(@types/react@19.2.14)(react@19.2.4): dependencies: react: 19.2.4 optionalDependencies: @@ -6419,7 +6615,7 @@ snapshots: use-latest@1.3.0(@types/react@19.2.14)(react@19.2.4): dependencies: react: 19.2.4 - use-isomorphic-layout-effect: 1.2.1(@types/react@19.2.14)(react@19.2.4) + use-isomorphic-layout-effect: 1.2.0(@types/react@19.2.14)(react@19.2.4) optionalDependencies: "@types/react": 19.2.14 @@ -6451,13 +6647,13 @@ snapshots: is-async-function: 2.1.1 is-date-object: 1.1.0 is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.2 + is-generator-function: 1.1.0 is-regex: 1.2.1 is-weakref: 1.1.1 isarray: 2.0.5 which-boxed-primitive: 1.1.1 which-collection: 1.0.2 - which-typed-array: 1.1.20 + which-typed-array: 1.1.19 which-collection@1.0.2: dependencies: @@ -6466,7 +6662,7 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.4 - which-typed-array@1.1.20: + which-typed-array@1.1.19: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.8 @@ -6482,15 +6678,15 @@ snapshots: word-wrap@1.2.5: {} - wrap-ansi@9.0.2: + wrap-ansi@9.0.0: dependencies: - ansi-styles: 6.2.3 + ansi-styles: 6.2.1 string-width: 7.2.0 - strip-ansi: 7.2.0 + strip-ansi: 7.1.0 - ws@8.19.0(bufferutil@4.1.0): + ws@8.18.1(bufferutil@4.0.9): optionalDependencies: - bufferutil: 4.1.0 + bufferutil: 4.0.9 yallist@3.1.1: {} diff --git a/src/app/games/(games)/page.tsx b/src/app/games/(games)/page.tsx index 2236bb6..77bf3ee 100644 --- a/src/app/games/(games)/page.tsx +++ b/src/app/games/(games)/page.tsx @@ -51,6 +51,14 @@ export default function Games() { linktext="Boom Boom Pirate" /> + + + + + + Cow racing + + + + > + ); +} diff --git a/src/components/cowrace.tsx b/src/components/cowrace.tsx new file mode 100644 index 0000000..4d443ab --- /dev/null +++ b/src/components/cowrace.tsx @@ -0,0 +1,305 @@ +"use client"; + +import { useState, useEffect, useRef } from "react"; +import { Button, Slider, Text, Stack, Group } from "@mantine/core"; +import { motion } from "framer-motion"; +import { IconTrophy, IconFlag } from "@tabler/icons-react"; +import playConfetti from "@/components/playconfetti"; + +const CowRace = () => { + const [numCows, setNumCows] = useState(4); // Start with 4 cows + const [raceDuration, setRaceDuration] = useState(3); // 1=Short, 3=Medium, 5=Long + const [raceStarted, setRaceStarted] = useState(false); + const [cowPositions, setCowPositions] = useState([]); + const [finishedOrder, setFinishedOrder] = useState([]); + const finishedOrderRef = useRef([]); + const cowPositionsRef = useRef([]); + const raceTrackRef = useRef(null); + const raceIntervalRef = useRef(null); + + const startRace = () => { + const initial = Array(numCows).fill(0) as number[]; + cowPositionsRef.current = initial; + setCowPositions(initial); + setFinishedOrder([]); + finishedOrderRef.current = []; + setRaceStarted(true); + }; + + useEffect(() => { + if (raceStarted && raceTrackRef.current) { + const finishLine = + raceTrackRef.current.getBoundingClientRect().width * 0.95; + + const intervalId = setInterval(() => { + // Compute new positions — read from ref to avoid stale closures + const prev = cowPositionsRef.current; + const next = prev.map((pos, index) => { + if (finishedOrderRef.current.includes(index)) return finishLine; + return pos + Math.random() * (21 / raceDuration); + }); + + // Detect cows that just crossed the line this tick + const newlyFinished = next + .map((pos, index) => ({ pos, index })) + .filter( + ({ pos, index }) => + pos >= finishLine && !finishedOrderRef.current.includes(index), + ) + .sort((a, b) => b.pos - a.pos); + + // Clamp positions to the finish line and push to state for rendering + const clamped = next.map((pos) => Math.min(pos, finishLine)); + cowPositionsRef.current = clamped; + setCowPositions(clamped); + + // Handle newly finished cows (side effects outside any setState updater) + if (newlyFinished.length > 0) { + const updatedOrder = [ + ...finishedOrderRef.current, + ...newlyFinished.map(({ index }) => index), + ]; + finishedOrderRef.current = updatedOrder; + setFinishedOrder([...updatedOrder]); + + if (updatedOrder.length === numCows) { + clearInterval(intervalId); + raceIntervalRef.current = null; + try { + playConfetti(); + } catch { + // External confetti script may not be loaded (e.g. in tests) + } + } + } + }, 100); + + raceIntervalRef.current = intervalId; + } else { + if (raceIntervalRef.current) clearInterval(raceIntervalRef.current); + raceIntervalRef.current = null; + } + }, [raceStarted, numCows, raceDuration]); + + const resetRace = () => { + setRaceStarted(false); + setCowPositions([]); + setFinishedOrder([]); + finishedOrderRef.current = []; + cowPositionsRef.current = []; + if (raceIntervalRef.current) clearInterval(raceIntervalRef.current); + raceIntervalRef.current = null; + }; + + const raceComplete = finishedOrder.length === numCows; + + const cowImageUrl = "/images/cow.svg"; + + return ( + + {!raceStarted ? ( + + + Number of racing cows: {numCows} + + `${String(value)} Cows`} + thumbLabel="Number of cows" + /> + + Race duration:{" "} + {raceDuration === 1 + ? "Short" + : raceDuration === 2 + ? "Short-Medium" + : raceDuration === 3 + ? "Medium" + : raceDuration === 4 + ? "Medium-Long" + : "Long"} + + + value === 1 + ? "Short" + : value === 2 + ? "Short-Medium" + : value === 3 + ? "Medium" + : value === 4 + ? "Medium-Long" + : "Long" + } + /> + + Start Race + + + ) : ( + + + {Array.from({ length: numCows }).map((_, index) => ( + + ))} + + + + Finish + + + + + + + {raceComplete ? "Start new race" : "Cancel Race"} + + + + {raceComplete && ( + + + Final Leaderboard: + + + {finishedOrder.map((cowIndex, rank) => { + const placeText = + rank === 0 + ? "1st" + : rank === 1 + ? "2nd" + : rank === 2 + ? "3rd" + : `${String(rank + 1)}th`; + const trophyColor = + rank === 0 + ? "#FFD700" + : rank === 1 + ? "#C0C0C0" + : rank === 2 + ? "#CD7F32" + : "#808080"; + return ( + + + + {placeText}: Cow {cowIndex + 1} + + + ); + })} + + + )} + + )} + + ); +}; + +export default CowRace; diff --git a/src/components/irishbingo.tsx b/src/components/irishbingo.tsx index 6fb61eb..59f32d7 100644 --- a/src/components/irishbingo.tsx +++ b/src/components/irishbingo.tsx @@ -68,7 +68,7 @@ const CalloutBox: React.FC<{ card: Card | null }> = ({ card }) => ( export default function IrishBingo() { // Initialize state for the decks - const [mainDeck, setMainDeck] = useState(createCardDeck()); + const [mainDeck, setMainDeck] = useState(createCardDeck()); const [drawnCards, setDrawnCards] = useState([]); const [latestCard, setLatestCard] = useState(null); const progressColor = drawnCards.length > 35 ? "red" : ""; diff --git a/src/components/snakesandladders.tsx b/src/components/snakesandladders.tsx index 53f49c0..9537bec 100644 --- a/src/components/snakesandladders.tsx +++ b/src/components/snakesandladders.tsx @@ -175,15 +175,13 @@ const PlayerList: React.FC = ({ players, currentPlayer }) => ( const SnakesAndLadders = () => { const [playerPositions, setPlayerPositions] = useState([]); const [players, setPlayers] = useState<{ name: string; icon: string }[]>([]); - const [currentPlayer, setCurrentPlayer] = useState(0); + const [currentPlayer, setCurrentPlayer] = useState(0); const [diceResult, setDiceResult] = useState(null); const [popupMessage, setPopupMessage] = useState(null); const [winner, setWinner] = useState(null); const [specialMove, setSpecialMove] = useState(null); - const [numPlayers, setNumPlayers] = useState(2); - const [specialSpaces, setSpecialSpaces] = useState>( - new Map(), - ); + const [numPlayers, setNumPlayers] = useState(2); + const [specialSpaces, setSpecialSpaces] = useState(new Map()); const [isRolling, setIsRolling] = useState(false); const [showDiceResult, setShowDiceResult] = useState(false); const [gameInitialized, setGameInitialized] = useState(false); diff --git a/tests/public/01_navigation.spec.ts b/tests/public/01_navigation.spec.ts index ce1e906..fa9e3ab 100644 --- a/tests/public/01_navigation.spec.ts +++ b/tests/public/01_navigation.spec.ts @@ -46,6 +46,12 @@ test("Can navigate to the games page and through its subpages", async ({ await expect(page).toHaveURL("/games/boomboompirate"); await expect(page.locator("h1")).toContainText("Boom"); + await page.getByLabel("Back to our games list").click(); + await page.getByRole("link", { name: "Cow racing!" }).click(); + await expect(page).toHaveTitle("Cow racing | Almost Yellow"); + await expect(page).toHaveURL("/games/cowrace"); + await expect(page.locator("h1")).toContainText("Cow"); + await page.getByLabel("Back to our games list").click(); await page.getByRole("link", { name: "Home" }).click(); await expect(page).toHaveURL("/"); diff --git a/tests/public/05_cowrace.spec.ts b/tests/public/05_cowrace.spec.ts new file mode 100644 index 0000000..b4a8af2 --- /dev/null +++ b/tests/public/05_cowrace.spec.ts @@ -0,0 +1,178 @@ +import { test, expect, type Page } from "@playwright/test"; + +// Sets up the sliders and starts a race. Defaults to 2 cows and shortest +// duration for the fastest possible race. +async function startFastRace(page: Page, numCows = 2) { + await page.goto("/games/cowrace"); + + const cowSlider = page.getByRole("slider", { name: "Number of cows" }); + const durationSlider = page.getByRole("slider", { name: "Race duration" }); + + // Default is 4 cows — adjust left/right to reach numCows + const defaultCows = 4; + const cowPresses = numCows - defaultCows; + for (let i = 0; i < Math.abs(cowPresses); i++) { + await cowSlider.press(cowPresses < 0 ? "ArrowLeft" : "ArrowRight"); + } + + // Default duration is 3 (Medium) — press left twice to reach 1 (Short/fastest) + await durationSlider.press("ArrowLeft"); + await durationSlider.press("ArrowLeft"); + + await page.getByRole("button", { name: "Start Race" }).click(); +} + +test("Cow race page loads with sliders", async ({ page }) => { + await page.goto("/games/cowrace"); + + await expect( + page.getByRole("slider", { name: "Number of cows" }), + ).toBeVisible(); + await expect( + page.getByRole("slider", { name: "Race duration" }), + ).toBeVisible(); +}); + +test("Race duration slider can be used", async ({ page }) => { + await page.goto("/games/cowrace"); + + await expect(page.getByText("Race duration: Medium")).toBeVisible(); + + const durationSlider = page.getByRole("slider", { name: "Race duration" }); + await expect(durationSlider).toBeVisible(); + await expect(durationSlider).toHaveAttribute("aria-valuenow", "3"); + + // Move slider left to set a shorter race + await durationSlider.press("ArrowLeft"); + await expect(durationSlider).toHaveAttribute("aria-valuenow", "2"); + await expect(page.getByText("Race duration: Short-Medium")).toBeVisible(); + + // Move slider right past start to set a longer race + await durationSlider.press("ArrowRight"); + await durationSlider.press("ArrowRight"); + await expect(durationSlider).toHaveAttribute("aria-valuenow", "4"); + await expect(page.getByText("Race duration: Medium-Long")).toBeVisible(); +}); + +test("Number of cows slider can be used", async ({ page }) => { + await page.goto("/games/cowrace"); + + await expect(page.getByText("Number of racing cows: 4")).toBeVisible(); + + const cowSlider = page.getByRole("slider", { name: "Number of cows" }); + await expect(cowSlider).toBeVisible(); + await expect(cowSlider).toHaveAttribute("aria-valuenow", "4"); + + await cowSlider.press("ArrowRight"); + await expect(cowSlider).toHaveAttribute("aria-valuenow", "5"); + await expect(page.getByText("Number of racing cows: 5")).toBeVisible(); +}); + +test("Final leaderboard appears once all cows finish", async ({ page }) => { + await startFastRace(page, 2); + + // Leaderboard should not be visible during the race + await expect(page.getByText("Final Leaderboard:")).not.toBeVisible(); + + // Wait for the leaderboard — only renders when every cow has crossed + await expect(page.getByText("Final Leaderboard:")).toBeVisible({ + timeout: 30000, + }); + + // Both cows must have individual place entries + await expect(page.getByText(/^1st:/)).toBeVisible(); + await expect(page.getByText(/^2nd:/)).toBeVisible(); +}); + +test("Every cow gets an individual entry in the leaderboard", async ({ + page, +}) => { + // Use 4 cows so we exceed the old top-3 limit and catch regressions + await startFastRace(page, 4); + + await expect(page.getByText("Final Leaderboard:")).toBeVisible({ + timeout: 30000, + }); + + // All four positions must appear individually + await expect(page.getByText(/^1st:/)).toBeVisible(); + await expect(page.getByText(/^2nd:/)).toBeVisible(); + await expect(page.getByText(/^3rd:/)).toBeVisible(); + await expect(page.getByText(/^4th:/)).toBeVisible(); + + // Old code showed a collapsed "Other finishers:" line — ensure that's gone + await expect(page.getByText(/Other finishers/)).not.toBeVisible(); +}); + +test("Button changes to 'Start new race' only after all cows finish", async ({ + page, +}) => { + await startFastRace(page, 2); + + // While the race is running the button should read "Cancel Race" + await expect(page.getByRole("button", { name: "Cancel Race" })).toBeVisible(); + + // After all cows cross the finish line, it flips to "Start new race" + await expect(page.getByText("Final Leaderboard:")).toBeVisible({ + timeout: 30000, + }); + await expect( + page.getByRole("button", { name: "Start new race" }), + ).toBeVisible(); + await expect( + page.getByRole("button", { name: "Cancel Race" }), + ).not.toBeVisible(); +}); + +test("All cows are at the finish line when the race ends", async ({ page }) => { + await startFastRace(page, 2); + + await expect(page.getByText("Final Leaderboard:")).toBeVisible({ + timeout: 30000, + }); + + // Read each cow's x translation from the computed CSS transform. + // If a cow stopped early (old behaviour: race ends on first finisher) its + // x value would be less than the lead cow's, so the spread would be large. + // With correct behaviour every cow reaches the finish line, so all x values + // should be equal (within a small rounding tolerance). + const xPositions = await page.evaluate(() => { + const cows = document.querySelectorAll('img[alt^="Cow "]'); + return Array.from(cows).map((cow) => { + const matrix = new DOMMatrix(getComputedStyle(cow).transform); + return matrix.m41; // x component of the 4×4 transform matrix + }); + }); + + expect(xPositions.length).toBe(2); + + // Every cow must have moved forward + xPositions.forEach((x) => { + expect(x).toBeGreaterThan(0); + }); + + // All cows must be at the same x position (the finish line) + const maxX = Math.max(...xPositions); + xPositions.forEach((x) => { + expect(Math.abs(x - maxX)).toBeLessThan(5); + }); +}); + +test("Can start a new race after the previous one finishes", async ({ + page, +}) => { + await startFastRace(page, 2); + + await expect(page.getByText("Final Leaderboard:")).toBeVisible({ + timeout: 30000, + }); + + await page.getByRole("button", { name: "Start new race" }).click(); + + // Should be back on the setup screen + await expect( + page.getByRole("slider", { name: "Number of cows" }), + ).toBeVisible(); + await expect(page.getByRole("button", { name: "Start Race" })).toBeVisible(); + await expect(page.getByText("Final Leaderboard:")).not.toBeVisible(); +});