From 12e6dee14e4a912306e78a73a2070a1ac3e4ee66 Mon Sep 17 00:00:00 2001 From: ExoPrisma Date: Sun, 15 Jun 2025 16:28:48 +0000 Subject: [PATCH 01/10] Created new nextjs UI --- teleop/robot-controller-ui/.gitignore | 41 + teleop/robot-controller-ui/README.md | 36 + teleop/robot-controller-ui/eslint.config.mjs | 16 + teleop/robot-controller-ui/next.config.ts | 7 + teleop/robot-controller-ui/package-lock.json | 6146 +++++++++++++++++ teleop/robot-controller-ui/package.json | 28 + teleop/robot-controller-ui/postcss.config.mjs | 5 + .../robot-controller-ui/src/app/favicon.ico | Bin 0 -> 25931 bytes .../robot-controller-ui/src/app/globals.css | 62 + teleop/robot-controller-ui/src/app/layout.tsx | 39 + teleop/robot-controller-ui/src/app/page.tsx | 5 + .../src/app/status/page.tsx | 40 + .../src/assets/images/logo.png | Bin 0 -> 106945 bytes .../src/assets/images/logo.svg | 433 ++ .../components/layout/navbar/BurgerButton.tsx | 17 + .../src/components/layout/navbar/Logo.tsx | 21 + .../src/components/layout/navbar/NavLink.tsx | 14 + .../src/components/layout/navbar/NavLinks.tsx | 14 + .../src/components/layout/navbar/Navbar.tsx | 28 + .../layout/navbar/NavbarContainer.tsx | 9 + .../src/components/ui/IconButton.tsx | 17 + .../src/context/NavbarContext.tsx | 24 + teleop/robot-controller-ui/tsconfig.json | 27 + 23 files changed, 7029 insertions(+) create mode 100644 teleop/robot-controller-ui/.gitignore create mode 100644 teleop/robot-controller-ui/README.md create mode 100644 teleop/robot-controller-ui/eslint.config.mjs create mode 100644 teleop/robot-controller-ui/next.config.ts create mode 100644 teleop/robot-controller-ui/package-lock.json create mode 100644 teleop/robot-controller-ui/package.json create mode 100644 teleop/robot-controller-ui/postcss.config.mjs create mode 100644 teleop/robot-controller-ui/src/app/favicon.ico create mode 100644 teleop/robot-controller-ui/src/app/globals.css create mode 100644 teleop/robot-controller-ui/src/app/layout.tsx create mode 100644 teleop/robot-controller-ui/src/app/page.tsx create mode 100644 teleop/robot-controller-ui/src/app/status/page.tsx create mode 100644 teleop/robot-controller-ui/src/assets/images/logo.png create mode 100644 teleop/robot-controller-ui/src/assets/images/logo.svg create mode 100644 teleop/robot-controller-ui/src/components/layout/navbar/BurgerButton.tsx create mode 100644 teleop/robot-controller-ui/src/components/layout/navbar/Logo.tsx create mode 100644 teleop/robot-controller-ui/src/components/layout/navbar/NavLink.tsx create mode 100644 teleop/robot-controller-ui/src/components/layout/navbar/NavLinks.tsx create mode 100644 teleop/robot-controller-ui/src/components/layout/navbar/Navbar.tsx create mode 100644 teleop/robot-controller-ui/src/components/layout/navbar/NavbarContainer.tsx create mode 100644 teleop/robot-controller-ui/src/components/ui/IconButton.tsx create mode 100644 teleop/robot-controller-ui/src/context/NavbarContext.tsx create mode 100644 teleop/robot-controller-ui/tsconfig.json diff --git a/teleop/robot-controller-ui/.gitignore b/teleop/robot-controller-ui/.gitignore new file mode 100644 index 00000000..5ef6a520 --- /dev/null +++ b/teleop/robot-controller-ui/.gitignore @@ -0,0 +1,41 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/teleop/robot-controller-ui/README.md b/teleop/robot-controller-ui/README.md new file mode 100644 index 00000000..e215bc4c --- /dev/null +++ b/teleop/robot-controller-ui/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/teleop/robot-controller-ui/eslint.config.mjs b/teleop/robot-controller-ui/eslint.config.mjs new file mode 100644 index 00000000..c85fb67c --- /dev/null +++ b/teleop/robot-controller-ui/eslint.config.mjs @@ -0,0 +1,16 @@ +import { dirname } from "path"; +import { fileURLToPath } from "url"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const compat = new FlatCompat({ + baseDirectory: __dirname, +}); + +const eslintConfig = [ + ...compat.extends("next/core-web-vitals", "next/typescript"), +]; + +export default eslintConfig; diff --git a/teleop/robot-controller-ui/next.config.ts b/teleop/robot-controller-ui/next.config.ts new file mode 100644 index 00000000..e9ffa308 --- /dev/null +++ b/teleop/robot-controller-ui/next.config.ts @@ -0,0 +1,7 @@ +import type { NextConfig } from "next"; + +const nextConfig: NextConfig = { + /* config options here */ +}; + +export default nextConfig; diff --git a/teleop/robot-controller-ui/package-lock.json b/teleop/robot-controller-ui/package-lock.json new file mode 100644 index 00000000..3bbae969 --- /dev/null +++ b/teleop/robot-controller-ui/package-lock.json @@ -0,0 +1,6146 @@ +{ + "name": "robot-controller-ui", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "robot-controller-ui", + "version": "0.1.0", + "dependencies": { + "lucide-react": "^0.515.0", + "next": "15.3.3", + "react": "^19.0.0", + "react-dom": "^19.0.0" + }, + "devDependencies": { + "@eslint/eslintrc": "^3", + "@tailwindcss/postcss": "^4", + "@types/node": "^20", + "@types/react": "^19", + "@types/react-dom": "^19", + "eslint": "^9", + "eslint-config-next": "15.3.3", + "tailwindcss": "^4", + "typescript": "^5" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz", + "integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", + "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz", + "integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", + "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", + "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", + "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "9.28.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.28.0.tgz", + "integrity": "sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", + "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.14.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz", + "integrity": "sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.1.0" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz", + "integrity": "sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.1.0" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz", + "integrity": "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz", + "integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz", + "integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz", + "integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz", + "integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz", + "integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz", + "integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz", + "integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz", + "integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz", + "integrity": "sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.1.0" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz", + "integrity": "sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.1.0" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz", + "integrity": "sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.1.0" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz", + "integrity": "sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.1.0" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz", + "integrity": "sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.1.0" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz", + "integrity": "sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.1.0" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz", + "integrity": "sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.4.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz", + "integrity": "sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz", + "integrity": "sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz", + "integrity": "sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz", + "integrity": "sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.9.0" + } + }, + "node_modules/@next/env": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.3.3.tgz", + "integrity": "sha512-OdiMrzCl2Xi0VTjiQQUK0Xh7bJHnOuET2s+3V+Y40WJBAXrJeGA3f+I8MZJ/YQ3mVGi5XGR1L66oFlgqXhQ4Vw==", + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.3.3.tgz", + "integrity": "sha512-VKZJEiEdpKkfBmcokGjHu0vGDG+8CehGs90tBEy/IDoDDKGngeyIStt2MmE5FYNyU9BhgR7tybNWTAJY/30u+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "3.3.1" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.3.tgz", + "integrity": "sha512-WRJERLuH+O3oYB4yZNVahSVFmtxRNjNF1I1c34tYMoJb0Pve+7/RaLAJJizyYiFhjYNGHRAE1Ri2Fd23zgDqhg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.3.3.tgz", + "integrity": "sha512-XHdzH/yBc55lu78k/XwtuFR/ZXUTcflpRXcsu0nKmF45U96jt1tsOZhVrn5YH+paw66zOANpOnFQ9i6/j+UYvw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.3.3.tgz", + "integrity": "sha512-VZ3sYL2LXB8znNGcjhocikEkag/8xiLgnvQts41tq6i+wql63SMS1Q6N8RVXHw5pEUjiof+II3HkDd7GFcgkzw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.3.3.tgz", + "integrity": "sha512-h6Y1fLU4RWAp1HPNJWDYBQ+e3G7sLckyBXhmH9ajn8l/RSMnhbuPBV/fXmy3muMcVwoJdHL+UtzRzs0nXOf9SA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.3.3.tgz", + "integrity": "sha512-jJ8HRiF3N8Zw6hGlytCj5BiHyG/K+fnTKVDEKvUCyiQ/0r5tgwO7OgaRiOjjRoIx2vwLR+Rz8hQoPrnmFbJdfw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.3.3.tgz", + "integrity": "sha512-HrUcTr4N+RgiiGn3jjeT6Oo208UT/7BuTr7K0mdKRBtTbT4v9zJqCDKO97DUqqoBK1qyzP1RwvrWTvU6EPh/Cw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.3.3.tgz", + "integrity": "sha512-SxorONgi6K7ZUysMtRF3mIeHC5aA3IQLmKFQzU0OuhuUYwpOBc1ypaLJLP5Bf3M9k53KUUUj4vTPwzGvl/NwlQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.3.tgz", + "integrity": "sha512-4QZG6F8enl9/S2+yIiOiju0iCTFd93d8VC1q9LZS4p/Xuk81W2QDjCFeoogmrWWkAD59z8ZxepBQap2dKS5ruw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz", + "integrity": "sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" + }, + "node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.8.tgz", + "integrity": "sha512-OWwBsbC9BFAJelmnNcrKuf+bka2ZxCE2A4Ft53Tkg4uoiE67r/PMEYwCsourC26E+kmxfwE0hVzMdxqeW+xu7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "enhanced-resolve": "^5.18.1", + "jiti": "^2.4.2", + "lightningcss": "1.30.1", + "magic-string": "^0.30.17", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.8" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.8.tgz", + "integrity": "sha512-d7qvv9PsM5N3VNKhwVUhpK6r4h9wtLkJ6lz9ZY9aeZgrUWk1Z8VPyqyDT9MZlem7GTGseRQHkeB1j3tC7W1P+A==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.4", + "tar": "^7.4.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.8", + "@tailwindcss/oxide-darwin-arm64": "4.1.8", + "@tailwindcss/oxide-darwin-x64": "4.1.8", + "@tailwindcss/oxide-freebsd-x64": "4.1.8", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.8", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.8", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.8", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.8", + "@tailwindcss/oxide-linux-x64-musl": "4.1.8", + "@tailwindcss/oxide-wasm32-wasi": "4.1.8", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.8", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.8" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.8.tgz", + "integrity": "sha512-Fbz7qni62uKYceWYvUjRqhGfZKwhZDQhlrJKGtnZfuNtHFqa8wmr+Wn74CTWERiW2hn3mN5gTpOoxWKk0jRxjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.8.tgz", + "integrity": "sha512-RdRvedGsT0vwVVDztvyXhKpsU2ark/BjgG0huo4+2BluxdXo8NDgzl77qh0T1nUxmM11eXwR8jA39ibvSTbi7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.8.tgz", + "integrity": "sha512-t6PgxjEMLp5Ovf7uMb2OFmb3kqzVTPPakWpBIFzppk4JE4ix0yEtbtSjPbU8+PZETpaYMtXvss2Sdkx8Vs4XRw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.8.tgz", + "integrity": "sha512-g8C8eGEyhHTqwPStSwZNSrOlyx0bhK/V/+zX0Y+n7DoRUzyS8eMbVshVOLJTDDC+Qn9IJnilYbIKzpB9n4aBsg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.8.tgz", + "integrity": "sha512-Jmzr3FA4S2tHhaC6yCjac3rGf7hG9R6Gf2z9i9JFcuyy0u79HfQsh/thifbYTF2ic82KJovKKkIB6Z9TdNhCXQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.8.tgz", + "integrity": "sha512-qq7jXtO1+UEtCmCeBBIRDrPFIVI4ilEQ97qgBGdwXAARrUqSn/L9fUrkb1XP/mvVtoVeR2bt/0L77xx53bPZ/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.8.tgz", + "integrity": "sha512-O6b8QesPbJCRshsNApsOIpzKt3ztG35gfX9tEf4arD7mwNinsoCKxkj8TgEE0YRjmjtO3r9FlJnT/ENd9EVefQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.8.tgz", + "integrity": "sha512-32iEXX/pXwikshNOGnERAFwFSfiltmijMIAbUhnNyjFr3tmWmMJWQKU2vNcFX0DACSXJ3ZWcSkzNbaKTdngH6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.8.tgz", + "integrity": "sha512-s+VSSD+TfZeMEsCaFaHTaY5YNj3Dri8rST09gMvYQKwPphacRG7wbuQ5ZJMIJXN/puxPcg/nU+ucvWguPpvBDg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.8.tgz", + "integrity": "sha512-CXBPVFkpDjM67sS1psWohZ6g/2/cd+cq56vPxK4JeawelxwK4YECgl9Y9TjkE2qfF+9/s1tHHJqrC4SS6cVvSg==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@emnapi/wasi-threads": "^1.0.2", + "@napi-rs/wasm-runtime": "^0.2.10", + "@tybys/wasm-util": "^0.9.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.8.tgz", + "integrity": "sha512-7GmYk1n28teDHUjPlIx4Z6Z4hHEgvP5ZW2QS9ygnDAdI/myh3HTHjDqtSqgu1BpRoI4OiLx+fThAyA1JePoENA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.8.tgz", + "integrity": "sha512-fou+U20j+Jl0EHwK92spoWISON2OBnCazIc038Xj2TdweYV33ZRkS9nwqiUi2d/Wba5xg5UoHfvynnb/UB49cQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.8.tgz", + "integrity": "sha512-vB/vlf7rIky+w94aWMw34bWW1ka6g6C3xIOdICKX2GC0VcLtL6fhlLiafF0DVIwa9V6EHz8kbWMkS2s2QvvNlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.1.8", + "@tailwindcss/oxide": "4.1.8", + "postcss": "^8.4.41", + "tailwindcss": "4.1.8" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.19.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.0.tgz", + "integrity": "sha512-hfrc+1tud1xcdVTABC2JiomZJEklMcXYNTVtZLAeqTVWD+qL5jkHKT+1lOtqDdGxt+mB53DTtiz673vfjU8D1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/react": { + "version": "19.1.6", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.6.tgz", + "integrity": "sha512-JeG0rEWak0N6Itr6QUx+X60uQmN+5t3j9r/OVDtWzFXKaj6kD1BwJzOksD0FF6iWxZlbE1kB0q9vtnU2ekqa1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.1.6", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz", + "integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.1.tgz", + "integrity": "sha512-TDCXj+YxLgtvxvFlAvpoRv9MAncDLBV2oT9Bd7YBGC/b/sEURoOYuIwLI99rjWOfY3QtDzO+mk0n4AmdFExW8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.33.1", + "@typescript-eslint/type-utils": "8.33.1", + "@typescript-eslint/utils": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.33.1", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.1.tgz", + "integrity": "sha512-qwxv6dq682yVvgKKp2qWwLgRbscDAYktPptK4JPojCwwi3R9cwrvIxS4lvBpzmcqzR4bdn54Z0IG1uHFskW4dA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.33.1", + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/typescript-estree": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.1.tgz", + "integrity": "sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.33.1", + "@typescript-eslint/types": "^8.33.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.1.tgz", + "integrity": "sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.1.tgz", + "integrity": "sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.33.1.tgz", + "integrity": "sha512-1cG37d9xOkhlykom55WVwG2QRNC7YXlxMaMzqw2uPeJixBFfKWZgaP/hjAObqMN/u3fr5BrTwTnc31/L9jQ2ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.33.1", + "@typescript-eslint/utils": "8.33.1", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.1.tgz", + "integrity": "sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.1.tgz", + "integrity": "sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.33.1", + "@typescript-eslint/tsconfig-utils": "8.33.1", + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.1.tgz", + "integrity": "sha512-52HaBiEQUaRYqAXpfzWSR2U3gxk92Kw006+xZpElaPMg3C4PgM+A5LqwoQI1f9E5aZ/qlxAZxzm42WX+vn92SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.33.1", + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/typescript-estree": "8.33.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.1.tgz", + "integrity": "sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.33.1", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.7.11.tgz", + "integrity": "sha512-i3/wlWjQJXMh1uiGtiv7k1EYvrrS3L1hdwmWJJiz1D8jWy726YFYPIxQWbEIVPVAgrfRR0XNlLrTQwq17cuCGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.7.11.tgz", + "integrity": "sha512-8XXyFvc6w6kmMmi6VYchZhjd5CDcp+Lv6Cn1YmUme0ypsZ/0Kzd+9ESrWtDrWibKPTgSteDTxp75cvBOY64FQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.7.11.tgz", + "integrity": "sha512-0qJBYzP8Qk24CZ05RSWDQUjdiQUeIJGfqMMzbtXgCKl/a5xa6thfC0MQkGIr55LCLd6YmMyO640ifYUa53lybQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.7.11.tgz", + "integrity": "sha512-1sGwpgvx+WZf0GFT6vkkOm6UJ+mlsVnjw+Yv9esK71idWeRAG3bbpkf3AoY8KIqKqmnzJExi0uKxXpakQ5Pcbg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.7.11.tgz", + "integrity": "sha512-D/1F/2lTe+XAl3ohkYj51NjniVly8sIqkA/n1aOND3ZMO418nl2JNU95iVa1/RtpzaKcWEsNTtHRogykrUflJg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.7.11.tgz", + "integrity": "sha512-7vFWHLCCNFLEQlmwKQfVy066ohLLArZl+AV/AdmrD1/pD1FlmqM+FKbtnONnIwbHtgetFUCV/SRi1q4D49aTlw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.7.11.tgz", + "integrity": "sha512-tYkGIx8hjWPh4zcn17jLEHU8YMmdP2obRTGkdaB3BguGHh31VCS3ywqC4QjTODjmhhNyZYkj/1Dz/+0kKvg9YA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.7.11.tgz", + "integrity": "sha512-6F328QIUev29vcZeRX6v6oqKxfUoGwIIAhWGD8wSysnBYFY0nivp25jdWmAb1GildbCCaQvOKEhCok7YfWkj4Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.7.11.tgz", + "integrity": "sha512-NqhWmiGJGdzbZbeucPZIG9Iav4lyYLCarEnxAceguMx9qlpeEF7ENqYKOwB8Zqk7/CeuYMEcLYMaW2li6HyDzQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.7.11.tgz", + "integrity": "sha512-J2RPIFKMdTrLtBdfR1cUMKl8Gcy05nlQ+bEs/6al7EdWLk9cs3tnDREHZ7mV9uGbeghpjo4i8neNZNx3PYUY9w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.7.11.tgz", + "integrity": "sha512-bDpGRerHvvHdhun7MmFUNDpMiYcJSqWckwAVVRTJf8F+RyqYJOp/mx04PDc7DhpNPeWdnTMu91oZRMV+gGaVcQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.7.11.tgz", + "integrity": "sha512-G9U7bVmylzRLma3cK39RBm3guoD1HOvY4o0NS4JNm37AD0lS7/xyMt7kn0JejYyc0Im8J+rH69/dXGM9DAJcSQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.7.11.tgz", + "integrity": "sha512-7qL20SBKomekSunm7M9Fe5L93bFbn+FbHiGJbfTlp0RKhPVoJDP73vOxf1QrmJHyDPECsGWPFnKa/f8fO2FsHw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.7.11.tgz", + "integrity": "sha512-jisvIva8MidjI+B1lFRZZMfCPaCISePgTyR60wNT1MeQvIh5Ksa0G3gvI+Iqyj3jqYbvOHByenpa5eDGcSdoSg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.10" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.7.11.tgz", + "integrity": "sha512-G+H5nQZ8sRZ8ebMY6mRGBBvTEzMYEcgVauLsNHpvTUavZoCCRVP1zWkCZgOju2dW3O22+8seTHniTdl1/uLz3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.7.11.tgz", + "integrity": "sha512-Hfy46DBfFzyv0wgR0MMOwFFib2W2+Btc8oE5h4XlPhpelnSyA6nFxkVIyTgIXYGTdFaLoZFNn62fmqx3rjEg3A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.7.11.tgz", + "integrity": "sha512-7L8NdsQlCJ8T106Gbz/AjzM4QKWVsoQbKpB9bMBGcIZswUuAnJMHpvbqGW3RBqLHCIwX4XZ5fxSBHEFcK2h9wA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", + "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001721", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001721.tgz", + "integrity": "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "devOptional": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "dev": true, + "license": "MIT", + "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-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "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", + "stop-iteration-iterator": "^1.1.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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.28.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.28.0.tgz", + "integrity": "sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.20.0", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.14.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.28.0", + "@eslint/plugin-kit": "^0.3.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-next": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.3.3.tgz", + "integrity": "sha512-QJLv/Ouk2vZnxL4b67njJwTLjTf7uZRltI0LL4GERYR4qMF5z08+gxkfODAeaK7TiC6o+cER91bDaEnwrTWV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@next/eslint-plugin-next": "15.3.3", + "@rushstack/eslint-patch": "^1.10.3", + "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsx-a11y": "^6.10.0", + "eslint-plugin-react": "^7.37.0", + "eslint-plugin-react-hooks": "^5.0.0" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", + "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.4.0", + "get-tsconfig": "^4.10.0", + "is-bun-module": "^2.0.0", + "stable-hash": "^0.0.5", + "tinyglobby": "^0.2.13", + "unrs-resolver": "^1.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-resolver-typescript" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "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.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", + "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT", + "optional": true + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bun-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", + "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.7.1" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", + "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.30.1", + "lightningcss-darwin-x64": "1.30.1", + "lightningcss-freebsd-x64": "1.30.1", + "lightningcss-linux-arm-gnueabihf": "1.30.1", + "lightningcss-linux-arm64-gnu": "1.30.1", + "lightningcss-linux-arm64-musl": "1.30.1", + "lightningcss-linux-x64-gnu": "1.30.1", + "lightningcss-linux-x64-musl": "1.30.1", + "lightningcss-win32-arm64-msvc": "1.30.1", + "lightningcss-win32-x64-msvc": "1.30.1" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", + "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", + "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", + "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", + "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", + "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", + "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", + "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", + "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", + "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", + "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lucide-react": { + "version": "0.515.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.515.0.tgz", + "integrity": "sha512-Sy7bY0MeicRm2pzrnoHm2h6C1iVoeHyBU2fjdQDsXGP51fhkhau1/ZV/dzrcxEmAKsxYb6bGaIsMnGHuQ5s0dw==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-postinstall": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.2.4.tgz", + "integrity": "sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/next": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/next/-/next-15.3.3.tgz", + "integrity": "sha512-JqNj29hHNmCLtNvd090SyRbXJiivQ+58XjCcrC50Crb5g5u2zi7Y2YivbsEfzk6AtVI80akdOQbaMZwWB1Hthw==", + "license": "MIT", + "dependencies": { + "@next/env": "15.3.3", + "@swc/counter": "0.1.3", + "@swc/helpers": "0.5.15", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.4.31", + "styled-jsx": "5.1.6" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "15.3.3", + "@next/swc-darwin-x64": "15.3.3", + "@next/swc-linux-arm64-gnu": "15.3.3", + "@next/swc-linux-arm64-musl": "15.3.3", + "@next/swc-linux-x64-gnu": "15.3.3", + "@next/swc-linux-x64-musl": "15.3.3", + "@next/swc-win32-arm64-msvc": "15.3.3", + "@next/swc-win32-x64-msvc": "15.3.3", + "sharp": "^0.34.1" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz", + "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", + "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "devOptional": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/sharp": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.2.tgz", + "integrity": "sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.4", + "semver": "^7.7.2" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.2", + "@img/sharp-darwin-x64": "0.34.2", + "@img/sharp-libvips-darwin-arm64": "1.1.0", + "@img/sharp-libvips-darwin-x64": "1.1.0", + "@img/sharp-libvips-linux-arm": "1.1.0", + "@img/sharp-libvips-linux-arm64": "1.1.0", + "@img/sharp-libvips-linux-ppc64": "1.1.0", + "@img/sharp-libvips-linux-s390x": "1.1.0", + "@img/sharp-libvips-linux-x64": "1.1.0", + "@img/sharp-libvips-linuxmusl-arm64": "1.1.0", + "@img/sharp-libvips-linuxmusl-x64": "1.1.0", + "@img/sharp-linux-arm": "0.34.2", + "@img/sharp-linux-arm64": "0.34.2", + "@img/sharp-linux-s390x": "0.34.2", + "@img/sharp-linux-x64": "0.34.2", + "@img/sharp-linuxmusl-arm64": "0.34.2", + "@img/sharp-linuxmusl-x64": "0.34.2", + "@img/sharp-wasm32": "0.34.2", + "@img/sharp-win32-arm64": "0.34.2", + "@img/sharp-win32-ia32": "0.34.2", + "@img/sharp-win32-x64": "0.34.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stable-hash": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", + "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", + "dev": true, + "license": "MIT" + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.8.tgz", + "integrity": "sha512-kjeW8gjdxasbmFKpVGrGd5T4i40mV5J2Rasw48QARfYeQ8YS9x02ON9SFWax3Qf616rt4Cp3nVNIj6Hd1mP3og==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", + "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unrs-resolver": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.7.11.tgz", + "integrity": "sha512-OhuAzBImFPjKNgZ2JwHMfGFUA6NSbRegd1+BPjC1Y0E6X9Y/vJ4zKeGmIMqmlYboj6cMNEwKI+xQisrg4J0HaQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.2.2" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-darwin-arm64": "1.7.11", + "@unrs/resolver-binding-darwin-x64": "1.7.11", + "@unrs/resolver-binding-freebsd-x64": "1.7.11", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.7.11", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.7.11", + "@unrs/resolver-binding-linux-arm64-gnu": "1.7.11", + "@unrs/resolver-binding-linux-arm64-musl": "1.7.11", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.7.11", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.7.11", + "@unrs/resolver-binding-linux-riscv64-musl": "1.7.11", + "@unrs/resolver-binding-linux-s390x-gnu": "1.7.11", + "@unrs/resolver-binding-linux-x64-gnu": "1.7.11", + "@unrs/resolver-binding-linux-x64-musl": "1.7.11", + "@unrs/resolver-binding-wasm32-wasi": "1.7.11", + "@unrs/resolver-binding-win32-arm64-msvc": "1.7.11", + "@unrs/resolver-binding-win32-ia32-msvc": "1.7.11", + "@unrs/resolver-binding-win32-x64-msvc": "1.7.11" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/teleop/robot-controller-ui/package.json b/teleop/robot-controller-ui/package.json new file mode 100644 index 00000000..a9c8403f --- /dev/null +++ b/teleop/robot-controller-ui/package.json @@ -0,0 +1,28 @@ +{ + "name": "robot-controller-ui", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev --turbopack", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "lucide-react": "^0.515.0", + "next": "15.3.3", + "react": "^19.0.0", + "react-dom": "^19.0.0" + }, + "devDependencies": { + "@eslint/eslintrc": "^3", + "@tailwindcss/postcss": "^4", + "@types/node": "^20", + "@types/react": "^19", + "@types/react-dom": "^19", + "eslint": "^9", + "eslint-config-next": "15.3.3", + "tailwindcss": "^4", + "typescript": "^5" + } +} diff --git a/teleop/robot-controller-ui/postcss.config.mjs b/teleop/robot-controller-ui/postcss.config.mjs new file mode 100644 index 00000000..c7bcb4b1 --- /dev/null +++ b/teleop/robot-controller-ui/postcss.config.mjs @@ -0,0 +1,5 @@ +const config = { + plugins: ["@tailwindcss/postcss"], +}; + +export default config; diff --git a/teleop/robot-controller-ui/src/app/favicon.ico b/teleop/robot-controller-ui/src/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/teleop/robot-controller-ui/src/app/globals.css b/teleop/robot-controller-ui/src/app/globals.css new file mode 100644 index 00000000..0f9c37f2 --- /dev/null +++ b/teleop/robot-controller-ui/src/app/globals.css @@ -0,0 +1,62 @@ +@import url('https://fonts.googleapis.com/css2?family=Quantico:ital,wght@0,400;0,700;1,400;1,700&display=swap'); +@import "tailwindcss"; + +/* CSS Variables for Theme */ +:root { + --background: #24252A; + --foreground: #ffffff; + --font-sans: 'Quantico', serif; + --font-mono: var(--font-geist-mono); +} + +@theme inline { + --color-background: var(--background); + --color-foreground: var(--foreground); + --font-sans: var(--font-sans); + --font-mono: var(--font-mono); +} + +@media (prefers-color-scheme: dark) { + :root { + --background: #0a0a0a; + --foreground: #ededed; + } +} + +/* Base Styling */ +body { + width: 100%; + height: 100%; + background-color: var(--background); + color: var(--foreground); + font-family: var(--font-sans); + font-optical-sizing: auto; + font-weight: 300; + font-style: normal; + user-select: none; + overflow: scroll; +} + +/* Hide scrollbar */ +body::-webkit-scrollbar { + width: 0; + height: 0; +} +body::-webkit-scrollbar-thumb, +body::-webkit-scrollbar-track { + background: transparent; +} + +/* Header and Content Styling */ +header { + margin: 0 auto; + text-align: center; +} + +.content { + border-top: 3px solid black; + padding-top: 15px; + height: 100dvh; + overflow: hidden; +} + diff --git a/teleop/robot-controller-ui/src/app/layout.tsx b/teleop/robot-controller-ui/src/app/layout.tsx new file mode 100644 index 00000000..27bc8664 --- /dev/null +++ b/teleop/robot-controller-ui/src/app/layout.tsx @@ -0,0 +1,39 @@ +import type { Metadata } from "next"; +import { Geist, Geist_Mono } from "next/font/google"; +import Navbar from '@/components/layout/navbar/Navbar'; +import { NavbarProvider } from '@/context/NavbarContext'; +import "./globals.css"; + +const geistSans = Geist({ + variable: "--font-geist-sans", + subsets: ["latin"], +}); + +const geistMono = Geist_Mono({ + variable: "--font-geist-mono", + subsets: ["latin"], +}); + +export const metadata: Metadata = { + title: 'Rover UI', + description: 'Rover Control Interface', +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + + + + {children} + + + + ); +} diff --git a/teleop/robot-controller-ui/src/app/page.tsx b/teleop/robot-controller-ui/src/app/page.tsx new file mode 100644 index 00000000..4083939d --- /dev/null +++ b/teleop/robot-controller-ui/src/app/page.tsx @@ -0,0 +1,5 @@ +import { redirect } from 'next/navigation'; + +export default function Home() { + redirect('/status'); +} diff --git a/teleop/robot-controller-ui/src/app/status/page.tsx b/teleop/robot-controller-ui/src/app/status/page.tsx new file mode 100644 index 00000000..e0fda7a1 --- /dev/null +++ b/teleop/robot-controller-ui/src/app/status/page.tsx @@ -0,0 +1,40 @@ +'use client'; + +// import { useEffect, useState } from 'react'; +// import ros from '@/services/ros'; // Update path if needed + +export default function RosStatusPage() { + // const [status, setStatus] = useState('Status'); + + // useEffect(() => { + // ros.on('connection', () => { + // setStatus('✅ Connected'); + // }); + + // ros.on('error', (error: Error) => { + // setStatus(`❌ Error: ${error.message}`); + // }); + + // ros.on('close', () => { + // setStatus('⚠️ Connection closed'); + // }); + // }, []); + + return ( +
+
+

+ ROS Bridge Status +

+ +
+ Status: {status} +
+ + {/*
+
{JSON.stringify(ros, null, 2)}
+
*/} +
+
+ ); +} diff --git a/teleop/robot-controller-ui/src/assets/images/logo.png b/teleop/robot-controller-ui/src/assets/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8efc39b0e64c1f1af760ce1b2ab7257195667133 GIT binary patch literal 106945 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

qw- zLM0nDO>(@tJLE3G?w6Ksw+~wV`8e{xS9`^dbC!0X`!nq6-TIYBDLT zHur|&l@Ha-N*3^6V@VQUd2O@FaYA1|?zdM3$J%4uFO_W_9d7wxI~0D=BG<$?S_K4B z89ex?*tj@h-~_h%dw0$!ShKC#E=}@Ww%+F#9kxq)B`MPWNwe-}(KJjnA~sn7cVt0# zSUGd{EcevUpIVj6G#RhWtbgy{JWLk3thpPMKNy2}@FVB;8pfNVYm>+6#dpW_%w<3R6LW2;`Ls=cUBda-DMk4^_`M-H>w^8{5R^#GcXs9(#VW z8;f+OkK_cp%OCw{s?SJP&vgE2L4ni^MOd@>xpVCNGvRTJ3keJP&D!N#DVZCBAzl?of`RND96%m>2M2}W_V%k2 zf93`z!CBqMWg(gtqE34KL+J)&CmMbAzqF|yYEw-*eEl9N`iCsiNx}>SLtTg#s?LZ$ z%7=m47EDM2v5y>ad*GP$E|v|R16?+Q72dHzFTojlf(Brs9yoUEP`T$d zU4_=D?7fgkDG3OS72(Rig&SkMrE;>E%8O5#8=scg zrYV6ntB*vn3+K;!7h&w3hd%0g_+mn z!C$_G-D+mjH|PQdYb7#3xNCxyO8j#QE4bBMhP=F7MN!eG-dT1AW82-+o5z@Lg+In| zyemAroKwDZ56?kRO}bdpc$rLayNEpzhlGsya%I>*xeN$GYObC0^ZM<5^oJ2wDS)m< z3X}C1z7I5Fwpw@MLHE}@Q=ld#vF-Uv7}bMip?Zsj#rZZite9h`r>34kHnk7UmmlWy z^&Akt!v2Jef4oV80FkutFCKHCkF2C*duMHJP?U}!AX& zXGTYd;i@XX@GZst;$%sai!z{p5H#1X_|t=m-6|j*A$DLpO}WRgESt{3-#aL~a@~)- z6~lI0^2#}TN5?~hZ?BFmBN=rL8p(E{#|J=GivSC5-4?sAKpa7fCn4aEJp`i`#JNw7 z{A3N#rv>xSOL!Dx%g4^ioV1Dyyqj)&rn^RL?T<5O4dPIGW^`Ilyz{iaAJ zx$!qGaWs+q<1HmXa{ka>E*gnGdbTeGy53J;`QInh9f-O#X_2#Wqo%1vJ7P5E+9x?+ zhhf-=g=1-ufCkm#!TtLitzejPlk>-xM|^2vucpBM7@i=vcu8R|%%KB~Q&<|o`$_i6 zavw1PdGRMOe$l*7ZqZ7ZJ=p@WXZUd)9eI(MCPPSxh0s>nBF#>ik6EHtYF93&t&!+i z;)z4s2@ZM2`e0#o3=KW7UrzysQH2gs2`)$F9VRkBJxms$=`P#K-V_s_2+~zOeyA=u zU%mp;tvrmhS1Y}Q#_M20aLta6=8^Oy;@B5SAySe8Q8i9zcM7a(sWlq{Lz5@oM~@W0 zbv_-$c)aJRoUYEEKt_7i-3m%6S3yV5gbgW2+XjNVPHSs7%%KT@nOoo%{+7csNZ+cQ zy4M(XLjXp?I`+g?9wo1?odlL^ftl&dJp4C0`Dh%cAZL{pH_d*`82rv-@tZvsQXIOM z-Yy04@bV_(*H!@{AD&==+=^KqXoT?Vlrbrpt7KBVd~_C}kFO{{T3ND+K1bl z@yqMKpH;Q^ulSkjKO7C%>t;4#O#Cdt;PhFGSM9m`%FhdV?e=LntorDmtYHI5iuKj= zs;IOVnrJ!pFwdNj7M7emd<{FHCR`!|XgOISqIiS9@MH^xe7<7D^5s*CDzOyD`;WGA z|Fmts6}%R}GC~&BFY&ZG3%c$W5O2!xep^GdA{18NAt5VEy^~(jN!;{X@jq)20Y3nn zH1k;d9y@52dftAyWR6GPbtae)J+^f5^bp|Gg58Y(UU%}w)tVQwM_V7^6tRgTX`9xs z;zF9uFi2EXWBK{*Ta8xl=T7A}^n`B>Pq(BKTb_-QQSAXR@0AbgiyeL-8cL7KBjxa{cyS(yzc{5%z7R#Lp!w*+q zNSY4>4@jei3yuy@7=*w(4JzFaK!*Gsk^dZSHf7}e@CiO! zLzP@>U&sWP7jaM0tDvaZ9<1ND?at$4-33p27T2XdOLR@*6RzIc^>RDh^R{70%WQn@ z^}Bc83S?*G^)P$~UBVR(AA=?fC@!~w6ZH&Zj+*jk;_K}bTz+q_ktJ*4RuCjsWu}k+ z^@!MhcfO#_y(NBfaUai_p|PjIoKK(cGJWvY`OlG!-5=!L9Bx}JO4aVmfBw977 zSlp1sNXIJ5&Stb3Gx}|J;|yVXc4C4JRw{pcasG2a<+uw>QVD%{-v~$B5^%YTQF+q| z!3i=vzlU3sYi;d@L}i^TeLM`Z+uQ+EHA6?*PFoo0@b2|%y|4ZKhhJef!R0XwVE3K0 zqT+pf7g-s0&)L)DaI5~9eZHjfDpsf-T#ws^G$;b?Hv98hdHOHEM&J&B9K0B00X9(Y zC3iR$WzLm^$acFaTTWE5(jToCuRZfvezuoWGu_)^ z9Kw8i7;-Yw{-_nRVk~@DV;K*Vmcal!tG><5B;x8#{5Cns&dJP71WYci#GR(e&z#Kk+q8ib^0ZDj8#{#xc4-zS<+{^6u#$W!gu@#sj+ z)hC&Cl5l;zhea@Ic=!bF;34dY#6fX4%g@leCqS+=Punfhvn5bj1cIA zxK7z*6-d@funfu7@7VXv(Y0tpaFSio&Iq~O3Z>sJ>#(ZG%j=-z#^HM&jgT4w6eWkG z&RRsL_>901>Uw*@Fv>H9E?kdIXJYUwNZkhdH(Lm z)Fb-GCdZc7JPE|mWmhk+1W2ggs=AY$5DKAuxryfGqMpdL&3Bc&(E_~7zkY2TJ9+YC z+a1O|W>9awKs^_gmVStsj#My>3@|NJ``tYdVEd3Nlxv5A-#;D7!wUVkqyKdyRHU~7?Z6u3AWRfOmKu$_Y$v`0X4=ghh!%86RG=1GYWbf=;-Ze0=-heOZcYbbtt}{RZf(uJ-_?2Si zr7!X@-me9M9tkxKKX@FW_wJ=ye!PD5s?~G*MS*8OOxO%spBEZ>#Mhbz)3NsNx7j7d z!BB*!wF@BDd{J?+xk-j@;^5CH-T|n#Fh&kG4Gee}L`1X>*If97-@?va=<3az>|^{v zrNUjBOLkOt;nrjtDBwZdhB_K*>x(l_sDwL${HTj7hx0DtyX0ge(#__goU|boAE| zSN#CfK{7b8<;seRrcOe?0nT5&__c**1OW(H zeKv!&cGLk26hWvp=aU@18L3tR$b~AUD%%OJnh1XPWsejwLT7j_-YV|5Hn`AtTp zg47e4oxUa5!oNTVeLAyqbnub&rz-#wL;pXTzB{hwHtzp)+B->0>XfzyNrlEKsgn^x zLP|=dJt!$nsYH{sOC^!COGtarLfW)6xC;#$TF?7Dzu)una{t4fbH3xcKG%D~@_y*? zm3_K$ydi4%m%?>3_O_2-xt)C_ex*s^_Kzo5UWI4>&<@j8>H`nVb<2a0_5p*x6DG)a z7?wqllXpWBlHe`t*)zquGaQ`a+fHwO$GCa+kbsZaO&rt3n;S<`iHGatappgY3>$ZO z#jpqh=^%c{Yw-GmH~xG2ejJNuCSe9w6P)B*P+NRSuX+%l(Z>_C&cMyfOtEiPUU(iNN zwLMHBRjy_WUG$E9GtE61#s0~_+2A~!e)Q0xnCgEui{YLrt~*5>2J1Ug9|@got@Qh* zbo68LwPPn?W(k8f#J_ou*R(KMOcps)zmMTzTS>jSaMr-gOqkZ3=gZrgkcP)huk;@e z=ak>ylOWIe^wwhd*pH}}DE_kYIv(H&YtXgP`mktNzt*ongwaOH{bWc}^_-Q6RTVi1EOVk_v0wpLke|@3I(R+vROZKN zEHA0o@6Yv2c><31q|zkFd}v05;6zD@at~BLac}Q-&{pxD(rAg+a^5t$Xr)=eaQV?s z{Ou$5_B%SieEAZ5zXXfl7K{Saq3uW6?PFi-{xNY0Y}ryO0aW5zu+9h{j>rM5G)8hn zwK?lS@97E79Umgr+mnjCWHtWq8KV@6} zflZsDktQ>ft@9{UL0bAEjyC)Ne|KfPT$+}d4>bt$uzJA9UUh|8^DK$8o#O8e+oGn| zTo!tVb5Nl^ZvtKEl&oqPPgNi{na-L*X&#ywA75(&pOgddqQ}viNe<4*$$HsZ5R%h!q(=Nlja>!frf>X+`EIs+hnT*&~yH ztFUtHYH04BGK`7M!i&0QW`mp{45$PhS)^W8maC@ipnOmecTI}QBW5$^v#lcf_utVI zJ6#SR&+TF(+G8adgyU*u{lf2PzoEmmmJg)4!_TT-ioE+OzVE!s$aeaGs ztWbnm4LTOTy{f8HPdT(Pom$y6^1hU(#L7qc8Agm;X1#)2hEFn` z2H#xS=eNG<3nSQDwK=(?L?`e!8!(lxcO6YqIRWBpXK+Z!;q+PU#J%kfjA11^Ty* z&3+dU(}|2tXQ0s6-#`uK{PWxx{~p9QWFy!wJW0ioh33LBBO`9Hz_Xo-&Uz*KQA(V; zVjrUStR)_ioCTcFTzV_gJ7j{zQV7o)u9| z*MY0#vo z1hpEMOj9DC%K>qYweSmfau-uSIM-qE`i@<^zq6CpY2R)ov7D~|SW*njJB?Kycg5bS zdmtqJu;nirnPvuGx@PW`le?>7x+x1myG@BN@(yNAyTtfXLI~E?X^dXb$lbwM^7Pp= z*(I$+z)0&qX?HJ_cP9?k(KPx40`e(MPahtF{eQdRp+h>#JGZI@)d`lUsY@hlEIeQo z@uAzjYEu(m)4)`4U$_>t)G&15TADhCx9no$bOfM zr5Wo);)dK~q5e?TJdMEBhWC6^!WRV|>c2Gh_ZA?`K@J0T+Qc!)hu3=SQuAmRz?UlC5nYI4m#^!$HGjN1Dh} zI6@(CFf)yfQ!|!m$J|{tfJgEXbk7D^MluTuaa>#1zkH#8_rhE5V%y7y?R?v6Uo{A@ zTvXb%%fiXo`Jri*Zzaa6rQdL{50*;!QIr>H8RGt6$`W}$KDVtoV#~H|ZP_R38aV&$ z96HwZg3;0Jn=1{uU?(G~4Gejxd^)m_RKH^LLjd$lXV=yJE_8&aK=Gnkf_2#B#TiM< zLW$NG4;G9M3Qtik3j15FouU(@xJ2*4BWRi-TG+m%ekgCNiUU~YcNI~{dg9#efkswk zWe3^A!vag+_FhsR%WQVo^R}gU8+m}}S4Nf8f<GJwz{G&QxH(Mjd&L+~Cf+8_g zrwa3^|4Dy#3ENKZeK(;eV#?=@4Nku-aZ+D$9DEot@Z@NyT$8%aG+|=P7tv|~G;FV$ zQ@aBVFz&C}*_Figsg6kuMaRW0G(hCw2-bX%Vlh2Asfy0yNd>m-Ydi0VbUz5BjpCV* z^7P6=^rH5|Me2NWfJpkSm75+g4FQh!p~o@C(mc>m3GwbVnGR$2PRMnYsA^m$U)rsN zL925n0D9Bg%t^8e3MyBW6ZhpAzYfljKEEscxz*yfO1UsBQ$dJry#!szFYFo!chmW| zOXVl@Jh7UZjXWza=SpR#BB2 zou^}>qILqMd^4F);KeR3x~FW;C@nugmq&$>lz{0ZFz9)7C)u}|=78|)m}(qZQ;~V* zJ^A!WsuJGEZF?t2B11F_`t>u`%qvI6IQ)3k(UQEm=q}EhA8;UhnS9jzwMSk$R7+7I ziq1^Q07a`#py$dD*|4l4lvqSA(FuCAI-B10+ITg-#d+({=p>g-yY31M@f6qxaqXS5gRH*aOHd%Z=T$`(8UP3j2=*+D;@DF#DUf^%aK}i7=2LWAq`- z8_&m;gj&a(iIbsGRV@$2yRHhids-D{0$DM!z`q*AbZwSBJcr3+O2I4s`Lo&jLL|ro zC1ELJ7PE<#qy%lq zdNBg8m*GOLURt_t2^ksAJVV>JPO5D`lLBzHYb%)f4VD%v07t#>|Jc#MOBaq z96rWpeu@&@x^xe-+@=#Ike=fCO+@UBUT#aJoFCtjA4zhSs^(8Y+af?(@zkVCV44t*YAihH*F+f4Xud8euu8wd`)d zk+}ysD7)qq>kiUpwY}uo9@;4URryw;e#Gc)`g*twKLaJ1%T8)f-aCH-(au^x)=7^a zUC_ix{1h0}P*lq}BiR10_^WL|3T7-C5(6YZb#9XOy`E<3zY1dX9U2a3NV#Y{p+SX2 zMItg%$LtP0ykE&r=u7Xia}Uj~e<8)nw3>FJya2Bfk5^JBSVxrp zm=!R*%{)AGuXdSGdU?`)^d5CNwH$ib@p1E4*7T&5l*|1C0}aFe>No%W5x_F0gt_fT z7%VQ2^&i|{+{7$bd+S2OEV=)$Ug==S*OrzY2(i;H}bzx-Odu74#gT)Cj79`FMS4+!p)O3m5#M;(=Hx4+CFFb#A2~)GxLnW7LG(+(WPhQ<(@zRuTFsf9=c*{tEPd}2wNNL zsg-y7JX^OWVd7nu$Lw8lM3UA|zPZs$XUW^r_86b(x)?!TP5L3%AH4gw|2%HR=GO*! zNfnZ$H*&isrtuXI#!1MG`Er}k`9J?`SGv65+bOZz-whJ7794{8dJ8S}eXOk|(cb*- zlWp~vrV~ef=#FzI$X_7p5SR^h)NzRVMPf>pafBi_**G_NXtUUnck{N~E;zcZSs+c> z-0|zH2mMukTJ(1OOUz;^qJ$8Q=<)e%`_Nly`j|}Rz5_FPM)juj0D@h_j?^UNpyhGM zz~BVr$!}wT*d-s4WNlRYx4ay%Kl+KnrKV0Zau$Ic_$Ot2YIQwk z$xNgZEXthVr&^J8Y%hy^`fhZD=7VN-c#!M7ysf-l^&r(06do3~?5nLEuo6Ja*h>~9 zQ0PMYVmY(8)QRGc*6`S#g6n@7auN-2N&n!D$W|4){woxHI-furp%dk}5YiSrQNn0} z#EF_TJI{(X$U0V@LNbt4Wt!V%1mG^+toE`Jf(b5m$-JS8d>c!g>~2!H?iu76^FbT) zL}oIB5IPaQvdHY`2lJ?O4uM-2_jVoFQgGN~bPo40H^{R&&k?0kn-NA)VR`ECWv za1Gnf0-ArtN=__on`cVYpHat<%?T>v4a%ffPj7wiTIoi+^f5*kI)kl7Mn;2JW@T7{ zYc(V#8F;kr>WWo7RBq{Blr&ojJw~8pMQ#%ic;p)W{MoaN_bn|65W=!!rO8bVxI<{} zN_>`OYE0y$jRMkSvq@f$Ln9<%X9keyVDxsaEq#k*^h>{|3`o8}-2vGF%{%YzAdA~5 z6xnl>l?v^G+$=kRc1e#w5DU1rZ(AVNT79J0X+G(h8j_UJKI3u92bnHl6#5Z#`h!Xm zeWLWd>pb~L^8B%TQhy#CaJOKOPf6K>SeIFh$WNdsGV8QeuKGSb{ie7mrnv8uE*8nR za7l>3uCM{>Z$yxfFQi&fMVdv%q{6kdujQvYi(*#f9_*87t2vYd4jp&j8Z69yL_B-m zDAf#>SU)!8sp+ zU?cj|J>Yyun{>~YUb^^kW4m)WsY@a}9Dv(XAYR!oUO3HR@Nz~n#Ri6OuIs`*UE3cV z3PNaNBz*1j5D?ub_3ZUw{tfj5C)w?ry}MfiCkX-m@z5~+!%DQ%90l)3`*Di7UrMn! zM96A8%GqT1p^gBG-uEyHSjJ2$B`cZP+3!);0&lEOt+SRptNA`TWr*~+ z-M?PYHa_#1hJ<6NfE5cmykn_)N^qoA{a?S{bS?d{ue)fd%=jTFW-X*sEGK~yVxvzV zfzVd(_nc<%QUh$DrY+e2SZiELK>{~`peRfMpg}`e#3f};tKwmH87QT41aQjI|LBoOGbD2SP z!dl5yIsAf*LQY`rCW?xbTv4oc6*E*h7G__A6Zb!!`)SJg7tZ({$QupD`O<593-?PB zjo7BB+Sfe2qhH1+xf+=Qcx^$e?l_Wi4+O2>c|_~IOjQ&HRBVRHs}fdcN7@b;k9Th+ z(eJGh{bam$KKKaR&exU>(ZT<P5%&26rV7jwX+Oq82jmqz*sn+cQq|GQn;y)I0o)L{>w~rmnc+PNvL)kA~nUb%}pqs%bZUbG;C) zEY6wIc1Lrt@|&)$*<9$sZuUypw`?9n=UZS5|C<2Z|I*b`EzmCNzYj=s6b@4y+#ayU zPxAVNO&cPxOG+<&_=_E1Y$*Vph3hCtTwg?R?&#u6m6q`K*48%}Mo(3sdP2i@DA>N< z&bKnL`Hp?;S=u~!`J$Wl@#Xd2;YOD=H`CXPBeg*u@&3&_5DOf z14r}z=i6&f7nnJIV!RT4!EDYxFr8856JH{iRXie0E%3mhVe*nCd`}IySotyO2@>Ip z(Ql)05?zB$EI;Rz>Mi2Sw_z85PNII* zx{sOqoCq?oh8pPF;o!jWm+f`;Hq;~;z1zg&bXteF?LIub(B^|bC}XxKhk<~-CcE+y3o zKEoQ|PMnEQ`;_{RU6U&|^U5+iNN4{DBy#v1qD$0&Z>wyC+=S3)Jm^zOfV{K|R6Qqk z`+iQY%nFsDkYr`;9-flb2$?>FsDogEBnkHVy+M~8W|Kz<;<*QdJdP4bD}Zq|eerCz zObL;7XqUac>7w40G7P(-cS6869?pKlp*LRhKOpF4r6cq`HhN05IOp$o2uQ@# zW;}?At!W{~b31|4-(oVkra{WnJygQ_``H5-TX8 z5aJdPIGYBE*mbC6CAV)6>PjAv@fU)-dSeNCa78Y{@+0N}Vdbb*vjDHQ6`JEF4X0=qY9*EDu5D(>r=t+_}Gk z&eqxa_e(q`ituJv7NOT>2xLD5tRbk%^V#Q&&12gL06_w?|EY-4=}voY(lTgqAs!cXP1hKE;f zYX$_h+bWA?(siMDXL~=Y2`i8*QkC0f=Z6L!hPLfq&!uQ4@e_Yfj*s7*eQ?I?(TEa# z-rfo6{7prrtnEb2sF}S_6fe9|MpE=_A0DeJv(u-q_1q9Eb!r0>@d7MGQ>3uQzx$Om zlxe`I~kf*2h4+-HW9MS9veBv0}&(%s@zP>lb_zhe9=|0X0a)X8#TA?x0Yp6-t%9aFY8wU-8;)b1h(P zJMkSBqy%9B0asw`dsLK_L!s2D>08VP=QIRVJw$KhfJIc(Ic_d`I=VM8P-#qIPko6& zr|6tU``_U~p;F^-yw4VC2yR6g8Ke7wj%y*F(QJ2t#o;3D^W<;aW8WDHY23J4r9q@D zeT8aARFn}pERAq^`2D7J9P{j!B_@4Ma&$cYuvgfY6ijgQ<$*HzFwgfxRqOxzavcM@ z%Xj9LnNjKm3K@jIC!$ILx)D{asi{72xO3!G`%YJE6F7N#nU8G1q>vb;1s1E!zY6nM(S?)sbIStsQgu&M5VW0c;wdBfX zVz0x#&G)#-mj*4;AZE`V^qSn3ot35AiR_wLtYlGj`F)nZ2}VFIFAg8+4Xstd))lr_ zm=b5{6#QcgIjlOB#$H9o!)z0PZ??M73e(;r|34KaXRr;2ohlf^(#q$ZVkWd+(WxVn zxg5lkFv1~1uvY#U8?$mfb&6*T7nlEPU32EWqh_u2{gkLTEUbx;kp7Ce zbGP(GUR^sGXpRjj36x4NJNpo;|6=nLfJ<+SjU&_|gYU&#|*F zzVe~Uvq0j!!-W!iAnL8@T2bJ*FO*@0os$G{Tn;kyP9h}X4UoaLPk3@aoa4yePG~k% z2({LXR%?+duO+z2H#Lg>m-r;W3YZTKsR8IR)H3T}RBrZ(?mN71HitVMLuKsR>grpV z1YUX}d1DilmoX5G()EU_I`k4q?--J2`nRmdcK#{6HAYM`Sn@P5-mE+KgJ2u{7Hx zvY`Xo{ICEc``&i`EM*=BpFF!Ayl0naL+g)XE^-Fu-ho3`q(YHeh<6)Qi2IQ|`MJ=t zNyU|5L=pGxn6ucijZe?QlC%Egg$s`V>O|H_@TN>mL0xxo_u0;LX>Z1;c4#2Z1?$u> zek2_ryiPwVxp}IkAe1C%maFEM+S;R}uu%E9T{Y?O!;;S&>fdh)6{JhoFob9Q2FQUN z3{|z<9Lze!81AGX9^l+@R!XMjm&EY&=qUHpGE9fb2?~m9|A+Brqe3Wo(YG4aX}}@wK0CcXkU8>p}83N zp5I3-GY-YIX5+U-8~%e$+#<^7)JyU*mUyWn>9ghTFrWWS_tQj80P@&@ zE!h^ngpC{9rf|JB;Evy|A0hPayg%hjHbzTjt4A_BcI@7mjr7ZcLM8$n{)TH_)2Bh2 zEECxWahTgHjGof@^SGat|MhX{gK}lRvL@&Ll(;PBvs26k{ePK-{LV^U7FxirGy&>$ zUNedj@f=K!?+%C;MA6lAhw1(|IvRsQwaV?{;$sF+PyH7`N&>1atEBV^yNthQIiNqOA3u@7}bjoB$< za%T3Up0D|zYLMY;^2&v#>oIQHuZH{Mp})}rKo35#6Q_>0(rbiwzb#fZ>2n*AwtM>A zx%Y2o8@CSow~lhNKmT#OPs1MyG9PLRtmSY3nw4}mtMHbLtJ(W1uNB)_aSvmv^&H*WIM_gQ7 zt{*=hwIk30dPo5z)NYJiUgzUG>xmZ zFJY-UUSJJK{lxFLE5B?3XviHrVgIYc?l<9+48qp6ux9UI2@Yh>!1`m+)*b3m|Li(t zg5}YMC?`*_|E9}wJYMp2!I3OGmm8*X$gzI|#%k2Xu2{T(?J`2Vh6wvceAKlmug&Kl z?qAHjCOB1(0p2qoiBjcQt2bk<{sJxZrY-h&LPNRmVsv6dJq61O_U(p$IU^yes+s>D z>$b2wy?*`PzSeIai2k=3$>^u*_|nrO)%ZnEB>@L;uAr^Ztwe0S*JuvXg`_2)QOGR1 zlzFeJw2Ixse~8*ixcW{iEi0;J+rvv{v{w`fIBypL9~HqQ?_6F+&O42O-RlJ9D7;!H zTs5P7cvR{Vcd7l`X7-MEF>$F)(K~Ol z#;&`Gmf~Rw`nVP9@6q$+P64e8H-Pf9Qu&(PK7vu%fkV{~GNe6W|38jdB?t%AG;ltg z%q%QQj0_BSyz;U_LKxXMZ(sdln}(y+IY}n!Sk~YX_96uxnli5~~D-E>hyU=mR*%;N9@9JCyvh#V%>)@O)-| zA*W~rK`070@(2h)XSkp?=Aw6;)1!fS;UGrQ0WcbGH$j)bS4qi;=qDXbv4RQVg-{-m zRjh(Nxkq{~QU8OFf0#(~wkpd^kxAdlJ@nW4cFik%iM+MqH`6gPc_Kjky(jT2)4>yO z19z3|X@9r;aWsmrrDl<2b|hlr)?ZHU@P@m&xjQuA-x|a<&grt-s4Og;6`!R&-}qj_ zd_;n<`BDz#K};8Kf)K#p_)-QE$iWq*$WU5bLx*)N0NLG3vokYX-#U>5bK>Fia8~kT zAQl=oNb%Xh7dKTMs8iO^XghN3Sn;_gT)uf|^*-7vFJRs@#`Aa>kHnf}>=j(8GDkZ* zmXCRK%KL`Z*_oIqfL5M+uP;yj!03HPTmG`5wz6GmV#W1YF&uzS48cvA4x#;T{{tmC z3V1D-QBzsX$bF*MWJ5(Dn0*S+s?gM(kV=-7XtR8M4u@wM8AQ^YK&4rv`_(oP3=BLk zlhGWSI_TW9CI{ftdWLiW;;y|%^$)lY0mX-Mvg%=<+Dwp z3By6LkMTJ1pcQvF;n5dV@Fc_gS7;*lLORld|Naj#?yzLU8Z+Ia5lcaRL1^doqVyQg z7nAxAXp5#dMlbk`4!vCb@Iq?u&c?Z(yk&=%e!=RSlm@GR+lpAV1e!MM6SBP=We0=U zKBQX;ogp2c51M|ZdO!}ZcGCo|~d6BId8;}uq^=df4p!W#8Y6l{TwAA|1i3#Ij zG`$VufCXQc!UzoV#5()F&LtR=Jb$ z{?}mTz{_qShaD0-joM=*h7syHuvW{exCGofN#fPy_H{>P7Vo#5;{N)M040m3F3>_N ze_c={i9YI$1f6>e!k?#FLU@udT&HDToT|4(+%Pce|%b;``R7d4B_HF^%1meB&Vd% z_gd6^#Qd9FUaoqt`8@^-WYu-OgTxrQPszjS&PoZUTo>51v~F7v#9$S>d*JQ^d4I9R zy7jG#o(r+G$)tS@XF+3$_GkjDWYHhWWsIFMaK+wuIB~NR928v*!soLMN zvvP4}Qc_Q>ap$oCH6eaV67GiX`!iSRyIEvveISHCWS*qo zyyYE!OVx5-hG8=L{%*(;zs1)<0aB?BAs+f-TtAAyaCwB_|kxry^*H%urV zkz&V6wx+Yby-@Z?&g#`VcC;q?BJPE)Rr5*{Z8NJDtQl5j3uT}6Kk+s_Bq&6F`0rb- z`|s!GwKtmHG^jUTzQg6af8EFHA}6v1BScUaFbutbiIS`CrFj|l*@nk-SMuVdCqFI~ zs6Tzf{JN+J^o%WNrP8i^f})R$waUFv zxMf?MK8^a0el8>a9WA5e0T@NT}P zs8Hww+3@Jm1XONF`Xa6n5w?j`I|#=)dp2hOlDILx7iV&|+_d$-vn9!pkhLZF*fU9P z5_iE1I#7j+)4he?+Tc|6UkeK4<@PNpyZI{9vt+& z<|uCMU5dFpMEb$|-PD<{(1Kl@m9)vW<#OL82s6L$IP>CoQ>2Ipocew!M;?7unsu0v zRVu!5k?^jQy^oG_OV6oCiepZ9G8FpazEkW&>8QWD^@!MK-(o1QWhBsXK1fIibD+qn zN_Q|`*$y<0N%;&>ghKa`4KdApu+F}Cey`pkpVylZ75MzD+-8;uv{aL>{rDu&iG=mj zUweD6yC6Nu?uRt4cb*r!)Xl+nL&jnSqM{Z&D*dGoZAp&yqfy;l%v{XRpVFB^__Qt^ z`!2QrjaRX_s_MhX^S~gI+SuaN9GJ-MPi6y{y~%mTesFqyds9l>*?qNyH%D&gPM4rV zkN5fEetm|JHB5Vwo?VHYlxM{=D!txoCC$`?0=gD zTvgdi<}ZyBvw@hUdb$essW@bXsk^GFG-@DkCBDGX>LO+L|6UkVq9Hs9Lr1}4y+=uo zIAFRbV3KTgoBL_}Z!x$Pz_%ESgi@RCUH)t>ZEf=EH~vTy#JO2}dHlyt<^(zmgea`q z|Nc@@2Rcb~SCcM__*VwAUtN*;_+Qzxz>{BJ8+c%%?87Ef0d~MM4 z$^62?#Jh6s@$KTj&E~(JI6mTYG^g)Up-^&s{Pnch**dF$b=IS^I)WlPKP=m#C9ZA8 z6_qweza)AZXSr0OWgn}QQm z`UzW70)9ur-5_lhYQcY7g6+u_!CPO|J+~@#kWPy#U-66<4sFQ_JR-Ar{VOsRnyWWj zSym?9di^FhB95(wbx0RSrMuXh4FC3t6Et49&iJ!|zV1??PvDLaRe|mLB~RGdYJCnp zvd8X0C*C>?tR#3y`%e4(Ptm`byC>^tDg;J?>i!lFT`K&H@+4#64n1exX?pz~3^r5m z;Pi1KbO{5GjeZPZO_}!_4U_7nOeZ7=5GWq!%gflkg*nCT6Sr`MMI!sgH@mpF^BJK& zu@24}Vc4M>>`8rhPnB8KHeMf5BD(L(_zuNo+l@*y(=%t9plADk+8pf4W!Y>$w~+T? zLUo#(`?v8kh56L^o|KJzVNOvM(VY}xPz^sq`Gd4;`L{NCq`WjpY1k~~l)_&gn^5My z&+*B;md5T*!-2k-v->(dZe*vV8a|XeI%+Vg=E1Az|1-Xx-(j<&gVIFYpg2+5SW0tX4{9P~Q09iss_mC%;#|4sm;%>*&q~vxFn*Ct6p!60x zS80aK>*0FQdqYJM#{@MwiHvreSROO~uu*^ix5itUGh=4&E~$(sUG6U`cpCV+!rgty z&r8{VKcyF;6yAPe^T|@C=bgM+;ANg$@}aH;dUs4OJ}*esRVXo3W4dOsRhVx7OfvBd zN9yFGtdUX>ajY2dBcPjY#8YDUTtqJ9O5-jPjrdNH0F0cir*n-f*JkQCCpAzgA&%sc zyS3Sx_DXXBS;YDSAnq=yZ5$zI-y1Ni&hsQ=sP=MhxRW2g%v%{e>=X7zW1uoc?M>%YY6e^5bj4*2^PvFK-Q@#^ zLU!Ge@txRb=v;VYnN??7{k}c#5EZ`9QDtBlF+UvCpxzHNGcMkKep;W~8|_2_k}prQ zGLr%hZt|x%AkOT+NzKKI6zE1J!7G&8U1C*jiDA$gtRWiETVd`}%`={AdGv~wN1Vv* zqzm7Kv0u_J{c_Un0R_<+-(=mV(qD^!l&KccYDr`HVk66KLCDhcQF9Egrw15o!wP+>4H@L-=`15fL1h3Qe*h)oe4){p-mQ@{Jyr^Bte%7WteV z_?Yp8x~S5nb1V!2dRWUB_8QwXp18-JpCZYzm(MG;>aRClH$_I+orxk$+=&UTnz;8P zin-*&8|IRZSH5kx2p9uM`ZW3g#}%K8>uM3-OyVwEgkVv6h=j{PAuZo8eV;zfea16W zPd1i`fD(|T(v2@lWr9z&5ybV23qj=r9d8F?+mRN%3^Z1iHPJ23JH~j{1>cHa)wP< zgF8ww0I4b(KxY+UG&q@%me%q8?+r~^**gKljK`xd2HgK|@jC)5UOant$I;f7pY<9| z0um4(?ekY^;d~)+*QPB3x@ZXEtdt5dXtZ%?gprX=< zS+NjXFE+`)RBs~0$U=pE4!?l~l|qH--@*7#f0SE?NFloskrq%;Qu60B)RUHQp*6wH zK8O4Rw}p?k4kLp4`PTw`Tep*>j!1Tvw^`3C>ilgq&F`^6+R*{7dk*yCt)jYrc04$g z4S};3l6(FBeE;|eVXSgb*F?r8Nh5405oOgNZ~k^QoND#*fKvDrz-|2xL#7$#C3>|gwQ%Hp?e|a>u`?%Xy<))8|( zbN>8*r#x>d>$klwBIi(HghRV3H$YRJszpm&`Gh~-k~la3}XX|5x|n zAs&JR^&9Z*XV3>gl=iTC^C8`^ZoTG4&Heii-xN5Q`{45r?!d)4sh`aaM^<#+?)Xnt zeBw>uYlZ7K9USgf_^$2CQY37o6ynuC5mGnXiRq9JtB~H93%9}HP2T#r6FNi-T&gCl zOH~bsmqrv2n>df>zLXL%b_a{PJx6a7V^BD$1+r~J@Y()-f%Hb*MDFg=VO9f@-tf=z zAxWywUHXfj`Vn&!(YUrXpachjWUx{DWTK6&m;Y~`q&NYF^5lM9+em4^d(_3qq55)II;=} z3kf|>OHQ6>D!ywp$(|4u*1i6ZMZLC|8=2dwtQJBk|d@u;1S zU^|c|JQ|(o@q1x-*1L%0vZInS)Sy78wwseDnr}kDl=ou$Ug^y$s1lq;nz}9CRJ`*_ zeGX-@crdSF1vvvenc+C){Ut+JE(*zt$;#SV&^X_0%@E;?3nL*S6UKSx8g!02^vVa> z$GfbtsBtQaP!eel^jP>7T42m)`|CtoQjg|r{bnCS zLk?OAcF~T!BlO}~v#vO(Y5?Y0-+M|v>Rg`3gPMy3*0Do-&yqCg#qXcFRc%z<*XkRy z5}my7+OxkH&&QDvae&5b!rg<9Li5z5%;7Ae+FO6)g|co=K)1Fopwv*ad?~?uw+rNU zoD;Y*sC`2D&Ny9zk$>$}O;qOz4tF6o%a^6s*yHrISHBj?v5s?DBqa?V3@R2kk!fmd zBvS&NLjmK5Ar9myxT+0&{Qr8e>2k=0^Ru0dwA3Zm93ugy|4NNavIYb`jRQ;*E)5z} z^{~Z#W;ej^WR%%m81=M+zuR4a_{MFHz9S7Ukc#y z92r*R|9nvude9!||DNCsD@8RA6@v*#TX7UsEVA%pq0ld>Jv;R*4`1Q1lhd!YC?<7; z6$HpC!8At~V;LC6Yq;~6)}|wE#m#5g0wTQ!6T)OT>MzY-ya(})q$;L>liR5ImVHnM z`eOZEbWj-(c+%;$jK?QFRGqGySy+raD$w67-w)y2qkPA-)~*t#pLT@m zQld|RMXzbSrD z%fLi2aEkUQE!}u3LcZQf$;f{1F6**$MEA^1OIzFTm5@hG1^S6!(j(%1Sh`Eb@zl)A zYq>(vXN1*`i6JHTjZ^x;F(EHfgVF6vJPSiCUZev>JA;z36>j72!I!*_7vRmxuh%|~ zj(JniW)DE_-?8j4qEIMm&Pri;9)a7m5uKR$N`C+T^Yme-wUrglm))h+(x))II3;_w zU?0o6Q+d(f@a%PRn(bk$P;*W$nvSt&seJk~;kWkCPBC*Y>CmB2l4+=?r%9*aD0Qs- z*}o^e&3a`8N5}2_R-4nA>ztyi5>%o{HmnVd9w+ zd^EE_%Yb$MLUG?}>~VHAI+`oWg1H<*YEhEq@(!FdKakmehT0hDGgHHO65Fqr$Lp_R z4?EvKBpOluR`s~}>k{(vjuK0%5IPnh(~ugrLu)K{o$Ms%qQKkwuYAtx(e?W+F-#Gz zp?vy}Cgj>AnE9^6UG{o#=%8XhNqidzV};MM5*4=o+$-#^Cd7w6pN$v!`T5!k5zRH) zLi%BJQPta+bg5138vnj$B29xjaGDIk z#27k_QhDgaIZyvW@TT+Q578OquqT}2CZrKbn5yo*`S)M$DkQi+F||^4jwdRT!`^a7 zy+>w`BF^kT+ge%%;-jN?MdP2Nm5Mgb9S5>p-4T69uYj9b>b^8m7gHXMpHOJgS^qZk zC+t?bLumh#@)b7P($XLOfk_XLdh3gMyma8F57_fvNo_9rixwbewptf2OXxIbtw!?d zhtfs)w=&-X%%AoXJAoEcGd1%Cf^6fAfF#ph`Q{|QZxfrNs2VTFLK9!!TB6%gK>Mem zlmW=&*2hGdEoZ;$#AV91-xm54qBokIUSR;pyT$dyw4L6Zi4tu1WB^H3v)ys>=TBir zPES~}czy2aslk61i*mAxsk)*k5QU@kDK= zerU@=6H`e1YR&uTj>7H|HbD@8;t>Z;$@%a&D3v%=+?PL}ntK zrzhp&>O_j66b>dV=ZQYRd^e!1FkccM?-1E96k%O;k7FxdX_7b-M0XmmFo>T)cs+~V zrTlZHcdYqosvIml#nV6bdKQplut4sLefQ@K?iJr7S<>GdH_cpKcbSl4$E^Z*JnR}u zZqMv*c=PAe;dZQgii>~$*1SkKuORg~h92X=#3FSN6XCz7CoGl+1&nAEgWJW5FHYs3 z_G@t7(XTkNR;j`9@t?Gr?uep;bFo|thV!WY{&Ozko@R(O4@ncha?{Yz^V;G<>+na> z0Poo9J6m?l;o#Pe8s&QAKg?ss`s~h1CvF-^OtH{?xo|@3h-manllRA;>&~-3$}V!C zGa#M0O(NMNLOvGO2Z5Qr$*HN?4YKt`?*fD(CnMxmx32DjK)eDI=mKgfZlW;48!@(H zLEZ*rJs8~Hu6{?EEM~ICpzF83@Al_hw;_o5796xW#S9taJ%{Eqy8jT)ihy#{sPfm*t(*szj7n{+F*zAbG222o8$NJ4aLy1k}1=e z#nSrnfV{&A@_I$XrR96cbnm_vRVDrQVxpwz^OT7bjg+s4#@Q{gKIkUNU$C^yoQD(r zClnr$5VQ`yOtP#DK7987v;cp5Jmaha@CRmROiY#*fYEhA%%E0!t}XD+;*94Q|LsRI z-ZKGoS)}310a?cWNG~PQ?12UE8_t~nz{oBJ1y_5IRc6BxO zn5F?qBt2+SHt4F%O{MJGp%MdPwhVGGVuk@34#7`Zjx;!&>HQL~*WqIvzyBXrUU>e5l-6qzZ9*z5C+AImJt#Ge5Ac zSJpI#?z-v#jf^6VOtv}>Nmrjt*9Nm5fi}4YGUGGcI@#k_edP?OD$TE0rt@)ci-wii zh(^6lA>Vfw=w7P6n{2&bxk*PcIW@pk;bAyKr@ucHe5L!m+CJjq6U?QwB{6g+CmJXP zeZZ|-w>Hke0_6i04K?ciUy^jDw1XHEg()LpXTlM`ODaj6n507ddF-Fm9c5fKOK7t; zI&+5c?Z0Vw^nLNx{5x7fuP$#u#*n0e9&|GX8fHy8C@7U5?M@DbUSQwvjG;_Lg~Pp# zMogi`6qE3bllzw*;v>0@g~BcK-^;p@UVSD3^Fvxo7x0|vB$3gLT?d{sgi}bZ8hgb~ zB$1{aYT>5rbJw--J48m@i7$2X4FGI{a}%>T7hGVX7_&^VDlfKL&(8;#YO(&XHy|1T z9Urt+e#<1)g5ZNkZ}*to(0oAh5e=&DAkp}7&)jv|OrK>NfKS2%!TSp=@voUgx33E^ zmfgeiUU`)K*eI{LqrjjUi`bA6(^QFp5u6_llumwL%EQ z@*-u7Ui?;9)4@_U%Tn(>jYbYIQ? z*ZrAAraY)|_7-n|7o9lTz`oj+4|sCv+&&P_CM?fQCTb#x11$+<$O;#SFzzhyha)gs zUztg@F*qQyxYx#AIAhF%=!QCvy?2R5|CBXnw$h*Pb;+bT-#hagE5lslR_B*sUP2%r z+5uiEe2j^hP{UB^%_PHPcq@Z#Dl`72GM*E8} zNn_2@?8Uda4Mw35prKV?(Pd@9^Kw`CbB6Tt)uTS=x7QK(UQ$Znh;N(NE~-Fk&>g*0 z|Heiz&0nCp{=R#Gur?Viw||&&~ zg6sRm#0no0)}SHosFT7J{s*>?c-=#~ySk#$!1u8W6vsUr)y=tetZ9q<`93nUG#{+4 zjbxAtSf;Z=q*Q6$$kKM5W?L6w(Fj3+T@_puB#(ZAqR|&p(`RzBvSI)Y#Fdm{vgc`{ zxpM9(;}g9R8xtor3`s8`Mj4Wwu{usID>I+jhNs})zSY<3#+r7QPpTa!zjrluIie|1 z;4eR&>G68)icaWs8IunSaq9shrTRA=tRY2!wmRUC6DK>6wY6#f2Hm=&?8Y4hcfX?uR&j7gEUg)2t`LH0u;;4VxG;%)VElkdzZ>d`7xBm<4 zhQh=1>-w{AuxfSg;NocUq~j%#%!>wo##6p{HWx~WbA6)2oO2GK)WfymAWj_}*Nl(0 zW0E9&ov%b-(JW*#RxwEkMdvZV9Z8>xJJ2o26~$#j|AKv3YQM6wZfvL@cBC%|Zujl_ z@`bJHXpv94|NZfj;dCE^i+IedN(O#LjSu~3@hz06E+VmHsBoqbc6DsJzcd^rVC-|+ zpSYi0v>-krJ)r-zgVT!gWESG)DafFhn(3J7#Y+zb`QM`4oQVzQz70i-&xH%yK3Dse zRaS0$fAswv)|$A^z@Rw^>f?e2&ko?*=I`^`a})(Go~NF+Bm51YtUxw6xQM2zUE{Qz z>SWy39L_9h677jcj;W-?r`_G%Xsh^Vo#SL7B_Xjz@LuCd0Emfu>BR3_E_id;@46W& zjhQyHxH#5lb+*YAM(fY;f|ucyili-f$o3fH| z%=9;9(O7jl&Sm27zp9U?YVlT7Lb@7BNE{1Qkt7#1;)y9K7gpfAd~$Q4IPGx-Nt6rj z)i1Jtr+(AU6p@Y0_bbvYKksw!rJi#^7`f3fpXfoZ_UC>SD=%R`Ul?r&9|PPl1~-wE z9B+#y6p5;9mBzoyZt_HV9_FaxQ>HskW@tM#LXNJk)FD4WNmKjwNcEyEa#8SEmKebV z)|;1e-p|>xV{`CN2b9ltUn+dV{fuaYQWh3%yf|Jr~~{ic@)~7?V)djTjkezqUV{Laoe>D&*gEYZ;J6EUEBASp_vvd2{X}1 z?lNUE#3G)|Lh0udPYPL$#P}=;*_kM{c`>HXVLdN-l94`3QDIB(?dQyLWU{7n`9M`9 z(WtvKH0S`aMwd{Qmo|tr2IpT@8@@3QA2z`g6bpvL&NVRaaBq9uaq=sw){37#>nhRc zWwd{3^)9wLKu$_(YRzfbwf0{9&V_uq{;q)mRGPQB(gd!(QDi+B zt^$J~9Z4)!kQGjMz_d#k$P7bGcp ziISt-V))9VMI*Dz_pm2#!NRyab?5|f+Zw1q@>xcFaKTjP(@G(gylVQm5lY(xNF|X9 zgk;U-&4;V~DYC9bI@)VOIaYXkaKa@Gc{2k<$xAo&B!z@gF33@+77Sj~XiNta6VAs$ zGxj)L-CSUYE71Ikq;_g3mO2ag6=205K&QY$wjrVZEn#0iOanWQyv1cR*pQf#)MfnT zBamwa%v*Cow3QB~8uL+rXf!JPa(ei$^cDzfL?O;n=bk99z9Xz4UW{4I=9Yc*rglP3 zbbt>wL5y5cM@I(((Epwh(3729>pd)Z9UR#-b#+7c1f>~lVdu$Q=`iTnH}6;(xre>t zgU9aeWEbwkSr^=q0Si%Z8qa~75(6~*^T0WZ$_n6-c`?_J5da)agG*ZC&PIsmqNxn0 zC=pl%nC4XH{rFRZ87lYZuT#|#tjM0k0-%(@%5a57oZN3sGWf02+0pR@(up0{#>-c% zcOlHdWm*B69EFMgyZm%fW;s#i(d>V1hb9U!{nz#UL*ZHXtEwX2dDqHhg-1h7?R}n= zFnhg65qtms{gKD?xo~dTaamq&K}kph3PpO|v>>Q_>z4-PBnL9E1vtEX8TW7C@ixCS zDMz)OZ-f^Z7Fs1AiL>D`dwY3XaPbpkt-1FEb+EuBLO8 z!mL9ZbMsD0FY;SjMU(cX2?2pzx&m2O23qqwMT0*={D zd&+3AAzlX&)y6Z}$pw?zhA*%>hyW-E?8Y4SyI3krUI_oHj4ejK0hs@NZ!aEJxhTH) zetrF+Dj@M&{aAh^kJu?D_Uj~=80{A&`xj33N{{?G>}5R{A4g=NHHANyE=;pZ0}aGN z+$>nsZ!E!=_5}?WI)eXtZ7;v2ytER6yR#eSB<6rQmW{JBjn(6&Lxrs2osZpvoO(w2=gA;Ke)lg=WglsOnc43 zILr}SJjTu8jzS8nl1G4{$c#a1R$C7YBQ>Fsm#|49H%#?a*dBud;Y4^i)&2)UtGXsz z1>0y1b9m%L$su<#_Ct8@Fr^MP@N<^ty9%`@a>U-i+t|F*13^161PaXa(1QiLr(L}C zEPWc+QT)=;JHr0_VGdYBd}P1N!_Dw=-VU&cwdIw!i;Z!c#>)$H`3de;lSS&mN0|Tq zJ$AicE5Qn$UUB!XqT&vFJ)RCi&Th%^bQCn@)}VUzgqCaMbHz(e!W^5LaMaS#$w1*x zZ6+`%T+$)Y$|@?cb~s?CN`f(xg@t%3#?0C0LilN{ZY}*ys-YH`a}}}*T7e0N0SHeu z)mF13jRrhRr=X|Da`FwL4%LyrI(?&Xj?b~XYv0TTr^PtE$W5Ja0DGALkgq2;uCHF8 zS_qNl!5-a;f7?rS*q`0X%{4?z0s_-vPaQgQ9JO;PXk7A-c%Yh9v&Ck1pLBK>MEV0d-p~E~Zt7zHcOj3n z{UB<;r|msx=4lOc#BGb!N>7!{5{DZ9=J)cD`Y}C?n?`3-XI%K%p``TbCogXk^ zRAhJ2X-MI`DH!h2G-eJc$J%&1>2NEh?Y!pP<4;~PiQi{Y$R+l(yf(l--w~-J)rr_?mPuW;G5^k}bT=_BordHHMd z-OfvUW8=iHA4S6VLC^F73?GcxTIqidyQ>+L5myMx_o;S>luS3Hm08}B@iWoUvyi3l zR>H=)+4z;4VUtnNrCO?mHe4p$a=wQcU*f!igSEGlN;rjukE)yGgnYE$rs`6v&N!_i z%9FfVW<3IE5z-=iW^-+sOHom=5tzGDk0uP=KC469Bd8t?m^%)AvQ6MG0s@qzn_dIr`MS`}9y8qN54`g|7O;AZ;mpLZs zEl{BUcu1c!i6@imB^vb}F<6N{#t2X8pQpi%6ngsfPBnKJP|f?Bl;1t!5^*->XALej zR=AS9z!vj8@L+Kl_pi^M6hpPyuHoTfCjSSN7Xef@_F$s?0j!%9FTF3bymI`m9QlUO zQlOFV4JApFMO0Kh=NF^N;pP2f#N-RAAT3}3{bRB#bI(_RdEq-xHG+2ogOqmZ?|Zb{ z(HW`ws}lQ=yl65Z<{uKKBifQXIG)2OHQMxcCybh?P*YcTZUB+6H-wVP?uinN5?UeP zG`4Lft5!#}In>lAjfqja=n~lp^E%9Hc*Y`y3)aLBwvlAJx zWK1ZTR)b)M8lZfda4E?jJShI;5O3&y@Mh*O5mI|mfY`@-OU61mY$B>unFt)na^^T- zHVhc}M1n@o#C52(iWV(aa--vw6c%LB2=%ttGwqylmPy!{=Nw;Q@*lLDV+I}b2{Ed# zuzBczBttsPu=_Z60TfDtTFr-rUqMtVaqL1TMCkFB-u2D5Fdp8!MVboMMs-0Zk5(RR zmx+3P=0%`;DX{Hl0HMz$nAy$ESEQt+ITq&ThAMz0<|2&!tZOC^0AMkldPPTm)5TaV zhESg`{>Bjnh|;4zAt5>u0EVZ7eA^#fQoNuc2%ejCb_fTC<7tg{h&9MtHr0$ZxRJt} zfiV(Imz70R*Orvlc6W8QryZ{p`M&I?DnnZKzIoGAfT*iJ9Axj){x&-zGBshEwrlX) zGJs?|rKIj$>xRR&8)AvrT=0hLzUz#ky|SCEP`8Xmr9mkEsOV0NtOlLDQe5+wJ~u6u zeJ}7mh70u~9PMiNvyF-wcH%qz_MAkk?yaR)#g90mi%SlOsOF6|0+?-Z;6NLnfB+~& z1Ry~Rss_%cE4ZLA#Z?W(5vNX8LiOn3;P5#B=IfpW3s~i|dw@=w2MmwW&NlE`2pR1( zHa70j8n+fuf60TIYYB>CF4y>OwgF#iaVARVWMt#|+{ zXZiqle39?f610Bn?J1uOC2{xd60)(`sm9fsAhj16I33ft5I^@892Fk`^#{)L8z?d+ zpazHoo2$w2n?FlPdqMa!N_pxqhpRtRSlK@lT4mqe+TOkl(r;*}tH!v(6}ZJ~RW2_o zB!nJVrZXLV#6t9!_b~x{j8Pj+;0r zZKned3Ib#MlNfH0ynfyTaM8b^cXbr}KD&SxbrP(!`51>|ldq(t$bw*mYZ1jHrKY+x zg;m>Zb~{wF8> z)h|J+=S2CwOW_--2$p%tHtgLHNifyg|X`QU@c43O4< zR;~yBFhCxjS_wOJRhI4j7|dEd-JFVYAxlX}jI%6nLO>;x>L3ZQRHyE( zOl=KpuV!&>D;3Sroe~n=FsDirmdrsN){_AxbDju_g9)P5%U~^mNq+%DmHZ%~O~Ry2 z$i%*_BAB!CN-#j9%nnhrHFofcJ|Lvt-Pk;Hk@5UvtD5JXg~@+DmOoehyWxq$&~f>_ z#`=3((=Y3F)8|5ZB{EI&@xy$F8pEi+^w-uLr-vSF(Yd#%QnX7xlKQc3(=Rv*i$S9P z1NzIaH|85@g@?j}NpCLd)uARC)^No^;{{DPl~o0n%8k%geBJf>^?9JGnAq6b>YB;2 z)89cj4%`S0474LI0nJ4pW&Uh2p-=sUM%%YQ0Z6H8fvHq58rqOJ{!AjCtV}VC(c4+K zx{;T{$RV-0mFN`5k5(Spoi_l4$)I?0`^%OVX>jg-AG2b8$L1jx3vX$%Xjc1T6ugV3 zp*LYU0^Xyy$7EDVAblr91Og*%^G5f?`aH-z%41Epn6cj;LXiQi9vE>ro((voBRDtd zEO4=n@ENiV2`fjgCgfWYdTN7Spo^zzy0?60h#D@T4K?1EB?GvRGG<-YR~2tlz3Fqo zY1gL5Ecw4ON-oc!5to6%x*s070n)&@lE6NvxF&T7MOZPUHIx~g9#6v#gK%pY<}$Uw zM39qkXYiNBNTq`i%d~p$yT-lQo?R3EPT=&0JD{f*eq~&z4GjB1O%yyh;UB};fl<9; zsA%+6Q+fFc`x6^cS$XaP)o#;AsuHgrdD#G-q@8u)GVCpRr6kk^IZlf^7I$o#EuLh^ zPZvR*uXrj4K9%~xeyh$pNp&Rlh;8=lT z3F8ormWK4)8xuzFhd!j^VpM9_L*$%2wO8O49)!c|!nSDCd{SsnQg8hLg&~HM>&a$_ z`zG|8SbyJYP;{RE^@Ta?$$KVFyMCkLR-3g~0M4`Wa`^DFz?ziuypgR^fz^$WBx(64QXO~gNdosId8hinTz@CnE^GZD1!XaZ8HV4JUdta%< zTbF9-5upHaN)ihvPHgsv?K9(;n^Hf#?^B>6eJ^E6V8v0@+7zbCKwObG%Clc zmVRhISiSB8uJd73F1h{e;E+<53f3LEIu+cYyigbAX%mSjqYNw3O7;*1EHHJ7JX+Sz znmx%a1p9^4)T&M?;~Vt3G8X{_W3=@`1S%?NzS%jXuwk3f3BH$2tub!#Zc2=v(k}sQ ziVAgtBgHNWQ=#b4pBqL7`gMXSCOZ?0f##e#*(5NMaBf+&D4@P9+GMiRlwpu;G*31A zTrlu}fou00^DGok91y76fx%$5#ll6Cq`}ADX+3%zh0*z^2;be(_{~$AndpDqR}McV zfa6t+rq3lZU#1wENbHNYvvdjES*QMleI!YdNUD*Il-WclG!#3nzeozXGb2=!%PBM) zA+p5vEP<9PX`;bBgVNG=vel>2_VMj6IiV!!T^rsq7wm|VT?N|qVY%wR<3X6l0U#tE zX-2T-Anw9)dWtCdg&5r|VT+ad*_P8Mw*2Y2K;VOU+U{5Sjd~*+!&|CBSJLvZ1`&+l zWnBLZuan$xA@%()%;z$Sp!1W9Et08!?fBI~T+b7!N&4S+{&J0@bX~UH9Vh~9tm@^@ z6Hzuus22jqdxyJu^?Z1Ec?=}1H^88?%&Jz d|7|BRWiZ`h{x!EM1L3Q(nVTFpeqcn1{U6^tC_?}M literal 0 HcmV?d00001 diff --git a/teleop/robot-controller-ui/src/assets/images/logo.svg b/teleop/robot-controller-ui/src/assets/images/logo.svg new file mode 100644 index 00000000..a373e242 --- /dev/null +++ b/teleop/robot-controller-ui/src/assets/images/logo.svg @@ -0,0 +1,433 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/teleop/robot-controller-ui/src/components/layout/navbar/BurgerButton.tsx b/teleop/robot-controller-ui/src/components/layout/navbar/BurgerButton.tsx new file mode 100644 index 00000000..d49ee156 --- /dev/null +++ b/teleop/robot-controller-ui/src/components/layout/navbar/BurgerButton.tsx @@ -0,0 +1,17 @@ +'use client'; +import { useNavbar } from '@/context/NavbarContext'; +import { Menu } from 'lucide-react'; +import IconButton from '@/components/ui/IconButton'; + +export default function BurgerButton() { + const { toggleNavbar } = useNavbar(); + + return ( + } + aria-label="Open navbar" + className="fixed top-4 right-4 z-50 bg-[#24252A] text-white hover:bg-white hover:text-black" + /> + ); +} diff --git a/teleop/robot-controller-ui/src/components/layout/navbar/Logo.tsx b/teleop/robot-controller-ui/src/components/layout/navbar/Logo.tsx new file mode 100644 index 00000000..15dcfa01 --- /dev/null +++ b/teleop/robot-controller-ui/src/components/layout/navbar/Logo.tsx @@ -0,0 +1,21 @@ +'use client'; + +import Image from 'next/image'; +import logo from '@/assets/images/logo.png'; +import { useNavbar } from '@/context/NavbarContext'; + +const Logo = () => { + const { toggleNavbar } = useNavbar(); + + return ( + + ); +}; + +export default Logo; diff --git a/teleop/robot-controller-ui/src/components/layout/navbar/NavLink.tsx b/teleop/robot-controller-ui/src/components/layout/navbar/NavLink.tsx new file mode 100644 index 00000000..9c5b6d20 --- /dev/null +++ b/teleop/robot-controller-ui/src/components/layout/navbar/NavLink.tsx @@ -0,0 +1,14 @@ +import Link from 'next/link'; + +const NavLink = ({ label }: { label: string }) => { + const path = label.toLowerCase() === 'status' ? '/' : `/${label.toLowerCase()}`; + return ( +

  • + + {label} + +
  • + ); +}; + +export default NavLink; diff --git a/teleop/robot-controller-ui/src/components/layout/navbar/NavLinks.tsx b/teleop/robot-controller-ui/src/components/layout/navbar/NavLinks.tsx new file mode 100644 index 00000000..4e424fa8 --- /dev/null +++ b/teleop/robot-controller-ui/src/components/layout/navbar/NavLinks.tsx @@ -0,0 +1,14 @@ +import NavLink from './NavLink'; + +const navItems = ['Status', 'Control', 'Dashboard']; + +const NavLinks = () => ( +
      + {navItems.map((item) => ( + + ))} +
    +); + +export default NavLinks; + diff --git a/teleop/robot-controller-ui/src/components/layout/navbar/Navbar.tsx b/teleop/robot-controller-ui/src/components/layout/navbar/Navbar.tsx new file mode 100644 index 00000000..ded96cf7 --- /dev/null +++ b/teleop/robot-controller-ui/src/components/layout/navbar/Navbar.tsx @@ -0,0 +1,28 @@ +'use client'; + +import { useNavbar } from '@/context/NavbarContext'; +import NavbarContainer from './NavbarContainer'; +import NavLinks from './NavLinks'; +import Logo from './Logo'; +import BurgerButton from './BurgerButton'; + +export default function Navbar() { + const { isVisible } = useNavbar(); + + return ( + <> + {/* Show burger menu only when navbar is hidden */} + {!isVisible && } + + {/* Render navbar when visible */} + {isVisible && ( + +
    + {/* Now used to close the navbar */} +
    + +
    + )} + + ); +} diff --git a/teleop/robot-controller-ui/src/components/layout/navbar/NavbarContainer.tsx b/teleop/robot-controller-ui/src/components/layout/navbar/NavbarContainer.tsx new file mode 100644 index 00000000..4398c35b --- /dev/null +++ b/teleop/robot-controller-ui/src/components/layout/navbar/NavbarContainer.tsx @@ -0,0 +1,9 @@ +const NavbarContainer = ({ children }: { children: React.ReactNode }) => ( +
    + +
    +); + +export default NavbarContainer; diff --git a/teleop/robot-controller-ui/src/components/ui/IconButton.tsx b/teleop/robot-controller-ui/src/components/ui/IconButton.tsx new file mode 100644 index 00000000..e7a9284e --- /dev/null +++ b/teleop/robot-controller-ui/src/components/ui/IconButton.tsx @@ -0,0 +1,17 @@ +import { ButtonHTMLAttributes } from 'react'; + +type IconButtonProps = ButtonHTMLAttributes & { + icon: React.ReactNode; + className?: string; +}; + +export default function IconButton({ icon, className, ...props }: IconButtonProps) { + return ( + + ); +} diff --git a/teleop/robot-controller-ui/src/context/NavbarContext.tsx b/teleop/robot-controller-ui/src/context/NavbarContext.tsx new file mode 100644 index 00000000..fb58aa2f --- /dev/null +++ b/teleop/robot-controller-ui/src/context/NavbarContext.tsx @@ -0,0 +1,24 @@ +'use client'; + +import { createContext, useContext, useState, ReactNode } from 'react'; + +const NavbarContext = createContext<{ + isVisible: boolean; + toggleNavbar: () => void; +}>({ + isVisible: true, + toggleNavbar: () => {}, +}); + +export const NavbarProvider = ({ children }: { children: ReactNode }) => { + const [isVisible, setIsVisible] = useState(true); + const toggleNavbar = () => setIsVisible((prev) => !prev); + + return ( + + {children} + + ); +}; + +export const useNavbar = () => useContext(NavbarContext); \ No newline at end of file diff --git a/teleop/robot-controller-ui/tsconfig.json b/teleop/robot-controller-ui/tsconfig.json new file mode 100644 index 00000000..c1334095 --- /dev/null +++ b/teleop/robot-controller-ui/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "target": "ES2017", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} From a0f9e5b1234d3e3650ae760a36f33e70fc341009 Mon Sep 17 00:00:00 2001 From: ExoPrisma Date: Sun, 15 Jun 2025 23:46:18 +0000 Subject: [PATCH 02/10] FEAT: Added drive page --- teleop/robot-controller-ui/package-lock.json | 526 +++++++++++++++++- teleop/robot-controller-ui/package.json | 1 + .../logo.svg => public/mcgillRobotics.svg} | 0 .../robot-controller-ui/src/app/arm/page.tsx | 0 .../src/app/drive/page.tsx | 22 + .../robot-controller-ui/src/app/favicon.ico | Bin 25931 -> 0 bytes .../robot-controller-ui/src/app/globals.css | 9 + teleop/robot-controller-ui/src/app/layout.tsx | 3 + .../src/components/layout/navbar/NavLinks.tsx | 2 +- .../sections/drive/camera/CameraView.tsx | 161 ++++++ .../components/sections/drive/camera/DPad.tsx | 107 ++++ .../sections/drive/camera/WebRTCPlayer.tsx | 86 +++ .../components/sections/drive/camera/index.ts | 3 + .../sections/drive/mobility/MobilityPanel.tsx | 42 ++ .../drive/mobility/control/DriveControl.tsx | 27 + .../mobility/control/Headlight/Headlight.css | 58 ++ .../mobility/control/Headlight/Headlight.tsx | 35 ++ .../control/MaxSpeedKnob/MaxSpeedKnob.css | 43 ++ .../control/MaxSpeedKnob/MaxSpeedKnob.tsx | 76 +++ .../sections/drive/mobility/control/index.ts | 3 + .../sections/drive/mobility/index.ts | 5 + .../drive/mobility/info/DriveInfo.tsx | 41 ++ .../mobility/info/Speedometer/Speedometer.css | 5 + .../mobility/info/Speedometer/Speedometer.tsx | 150 +++++ .../sections/drive/mobility/info/index.ts | 2 + .../drive/mobility/navigation/GPSPanel.tsx | 5 + .../drive/mobility/navigation/index.ts | 1 + .../robot-controller-ui/src/config/config.ts | 1 + .../src/hooks/useWebRTCStreams.ts | 100 ++++ 29 files changed, 1491 insertions(+), 23 deletions(-) rename teleop/robot-controller-ui/{src/assets/images/logo.svg => public/mcgillRobotics.svg} (100%) create mode 100644 teleop/robot-controller-ui/src/app/arm/page.tsx create mode 100644 teleop/robot-controller-ui/src/app/drive/page.tsx delete mode 100644 teleop/robot-controller-ui/src/app/favicon.ico create mode 100644 teleop/robot-controller-ui/src/components/sections/drive/camera/CameraView.tsx create mode 100644 teleop/robot-controller-ui/src/components/sections/drive/camera/DPad.tsx create mode 100644 teleop/robot-controller-ui/src/components/sections/drive/camera/WebRTCPlayer.tsx create mode 100644 teleop/robot-controller-ui/src/components/sections/drive/camera/index.ts create mode 100644 teleop/robot-controller-ui/src/components/sections/drive/mobility/MobilityPanel.tsx create mode 100644 teleop/robot-controller-ui/src/components/sections/drive/mobility/control/DriveControl.tsx create mode 100644 teleop/robot-controller-ui/src/components/sections/drive/mobility/control/Headlight/Headlight.css create mode 100644 teleop/robot-controller-ui/src/components/sections/drive/mobility/control/Headlight/Headlight.tsx create mode 100644 teleop/robot-controller-ui/src/components/sections/drive/mobility/control/MaxSpeedKnob/MaxSpeedKnob.css create mode 100644 teleop/robot-controller-ui/src/components/sections/drive/mobility/control/MaxSpeedKnob/MaxSpeedKnob.tsx create mode 100644 teleop/robot-controller-ui/src/components/sections/drive/mobility/control/index.ts create mode 100644 teleop/robot-controller-ui/src/components/sections/drive/mobility/index.ts create mode 100644 teleop/robot-controller-ui/src/components/sections/drive/mobility/info/DriveInfo.tsx create mode 100644 teleop/robot-controller-ui/src/components/sections/drive/mobility/info/Speedometer/Speedometer.css create mode 100644 teleop/robot-controller-ui/src/components/sections/drive/mobility/info/Speedometer/Speedometer.tsx create mode 100644 teleop/robot-controller-ui/src/components/sections/drive/mobility/info/index.ts create mode 100644 teleop/robot-controller-ui/src/components/sections/drive/mobility/navigation/GPSPanel.tsx create mode 100644 teleop/robot-controller-ui/src/components/sections/drive/mobility/navigation/index.ts create mode 100644 teleop/robot-controller-ui/src/config/config.ts create mode 100644 teleop/robot-controller-ui/src/hooks/useWebRTCStreams.ts diff --git a/teleop/robot-controller-ui/package-lock.json b/teleop/robot-controller-ui/package-lock.json index 3bbae969..01ada112 100644 --- a/teleop/robot-controller-ui/package-lock.json +++ b/teleop/robot-controller-ui/package-lock.json @@ -8,6 +8,7 @@ "name": "robot-controller-ui", "version": "0.1.0", "dependencies": { + "axios": "^1.10.0", "lucide-react": "^0.515.0", "next": "15.3.3", "react": "^19.0.0", @@ -959,6 +960,330 @@ "node": ">=12.4.0" } }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -2104,6 +2429,12 @@ "node": ">= 0.4" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -2130,6 +2461,17 @@ "node": ">=4" } }, + "node_modules/axios": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", + "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/axobject-query": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", @@ -2162,7 +2504,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -2205,7 +2547,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -2279,6 +2620,23 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/chownr": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", @@ -2340,6 +2698,18 @@ "simple-swizzle": "^0.2.2" } }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2491,6 +2861,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/detect-libc": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", @@ -2518,7 +2897,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -2623,7 +3001,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -2633,7 +3010,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -2671,7 +3047,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -2684,7 +3059,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -3244,7 +3618,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -3291,6 +3665,26 @@ "dev": true, "license": "ISC" }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/for-each": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", @@ -3307,11 +3701,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/form-data": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", + "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3352,7 +3761,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -3377,7 +3785,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -3465,7 +3872,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -3544,7 +3950,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -3557,7 +3962,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -3573,7 +3977,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -3592,6 +3995,14 @@ "node": ">= 4" } }, + "node_modules/immutable": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", + "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", @@ -3790,7 +4201,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -3835,7 +4246,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -3874,7 +4285,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -4496,7 +4907,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4516,7 +4926,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -4526,6 +4936,27 @@ "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -4718,6 +5149,14 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -4959,7 +5398,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -5029,6 +5468,12 @@ "react-is": "^16.13.1" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -5088,6 +5533,21 @@ "dev": true, "license": "MIT" }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -5263,6 +5723,28 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sass": { + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz", + "integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, "node_modules/scheduler": { "version": "0.26.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", @@ -5789,7 +6271,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" diff --git a/teleop/robot-controller-ui/package.json b/teleop/robot-controller-ui/package.json index a9c8403f..77c02375 100644 --- a/teleop/robot-controller-ui/package.json +++ b/teleop/robot-controller-ui/package.json @@ -9,6 +9,7 @@ "lint": "next lint" }, "dependencies": { + "axios": "^1.10.0", "lucide-react": "^0.515.0", "next": "15.3.3", "react": "^19.0.0", diff --git a/teleop/robot-controller-ui/src/assets/images/logo.svg b/teleop/robot-controller-ui/public/mcgillRobotics.svg similarity index 100% rename from teleop/robot-controller-ui/src/assets/images/logo.svg rename to teleop/robot-controller-ui/public/mcgillRobotics.svg diff --git a/teleop/robot-controller-ui/src/app/arm/page.tsx b/teleop/robot-controller-ui/src/app/arm/page.tsx new file mode 100644 index 00000000..e69de29b diff --git a/teleop/robot-controller-ui/src/app/drive/page.tsx b/teleop/robot-controller-ui/src/app/drive/page.tsx new file mode 100644 index 00000000..64a78944 --- /dev/null +++ b/teleop/robot-controller-ui/src/app/drive/page.tsx @@ -0,0 +1,22 @@ +'use client'; + +import { CameraView } from '@/components/sections/drive/camera'; +import { MobilityPanel } from '@/components/sections/drive/mobility'; + +const Drive: React.FC = () => { + + return ( +
    +
    +
    + +
    +
    + +
    +
    +
    + ); +}; + +export default Drive; diff --git a/teleop/robot-controller-ui/src/app/favicon.ico b/teleop/robot-controller-ui/src/app/favicon.ico deleted file mode 100644 index 718d6fea4835ec2d246af9800eddb7ffb276240c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25931 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 LrJugUA?W`A8`#=m diff --git a/teleop/robot-controller-ui/src/app/globals.css b/teleop/robot-controller-ui/src/app/globals.css index 0f9c37f2..006c7c9e 100644 --- a/teleop/robot-controller-ui/src/app/globals.css +++ b/teleop/robot-controller-ui/src/app/globals.css @@ -60,3 +60,12 @@ header { overflow: hidden; } +.camera-connection.connected { + background: radial-gradient(circle, #5ffb5f 10%, #2e8b57 90%); + box-shadow: 0 0 6px #5ffb5f, inset 2px 2px 3px rgba(0, 0, 0, 0.2); +} + +.camera-connection.disconnected { + background: radial-gradient(circle, #ff6666 10%, #b30000 90%); + box-shadow: 0 0 6px #ff6666, inset 2px 2px 3px rgba(0, 0, 0, 0.2); +} \ No newline at end of file diff --git a/teleop/robot-controller-ui/src/app/layout.tsx b/teleop/robot-controller-ui/src/app/layout.tsx index 27bc8664..ea372166 100644 --- a/teleop/robot-controller-ui/src/app/layout.tsx +++ b/teleop/robot-controller-ui/src/app/layout.tsx @@ -17,6 +17,9 @@ const geistMono = Geist_Mono({ export const metadata: Metadata = { title: 'Rover UI', description: 'Rover Control Interface', + icons: { + icon: '/mcgillRobotics.svg', + }, }; export default function RootLayout({ diff --git a/teleop/robot-controller-ui/src/components/layout/navbar/NavLinks.tsx b/teleop/robot-controller-ui/src/components/layout/navbar/NavLinks.tsx index 4e424fa8..e8897f84 100644 --- a/teleop/robot-controller-ui/src/components/layout/navbar/NavLinks.tsx +++ b/teleop/robot-controller-ui/src/components/layout/navbar/NavLinks.tsx @@ -1,6 +1,6 @@ import NavLink from './NavLink'; -const navItems = ['Status', 'Control', 'Dashboard']; +const navItems = ['Arm', 'Drive', 'Status']; const NavLinks = () => (
      diff --git a/teleop/robot-controller-ui/src/components/sections/drive/camera/CameraView.tsx b/teleop/robot-controller-ui/src/components/sections/drive/camera/CameraView.tsx new file mode 100644 index 00000000..9732e4cc --- /dev/null +++ b/teleop/robot-controller-ui/src/components/sections/drive/camera/CameraView.tsx @@ -0,0 +1,161 @@ +"use client"; + +import React, { useEffect, useState } from "react"; +import WebRTCPlayer from "./WebRTCPlayer"; +import DPad from "./DPad"; +// import PowerButton from "../arm/ui/PowerButton"; +import axios from "axios"; +import { useWebRTCStream } from "@/hooks/useWebRTCStreams"; +import { CAMERAIP } from "@/config/config" + +const targetCameraNames = [ + "USB 2.0 Camera", + "Logitech HD Webcam", + "VGA USB Camera", + "CC HD webcam " +]; + +interface CameraInfo { + name: string; + path: string; +} + +const CameraView: React.FC = () => { + const [cameras, setCameras] = useState([]); + const [currentIndex, setCurrentIndex] = useState(0); + const [bitrate_kbps, setBitrate] = useState("N/A"); + const [ping_ms, setPing] = useState(null); + + const currentCamera = cameras[currentIndex]; + const { + isStreaming, + startStream, + stopStream, + videoKey, + videoRef, + fps, + isLive, + } = useWebRTCStream({ devicePath: currentCamera?.path || "" }); + + useEffect(() => { + const fetchCameraPaths = async () => { + try { + const res = await axios.get(`http://${CAMERAIP}:8081/video-devices`); + const deviceMap: CameraInfo[] = []; + + res.data.devices.forEach((entry: { name: string; devices: string[] }) => { + for (const targetName of targetCameraNames) { + if (entry.name.includes(targetName)) { + deviceMap.push({ name: targetName, path: entry.devices[0] }); + } + } + }); + + setCameras(deviceMap); + } catch (error) { + console.error("Failed to fetch camera devices:", error); + } + }; + + fetchCameraPaths(); + }, []); + + // Automatically reconnect stream when camera changes + useEffect(() => { + if (!currentCamera?.path) return; + + if (isStreaming) { + stopStream(); + setTimeout(() => { + startStream(); + }, 100); + } + }, [currentCamera?.path, isStreaming, startStream, stopStream]); + + useEffect(() => { + let intervalId: NodeJS.Timeout; + + const fetchStats = async () => { + try { + const res = await axios.get(`http://${CAMERAIP}:8081/bandwidth-stats`); + const stats = res.data.bandwidth_stats?.[0]; + if (stats?.rtt_ms != null) setBitrate(stats.bitrate_kbps); + if (res.data?.ping_ms != null) setPing(res.data.ping_ms); + } catch (err) { + console.error("Failed to fetch bandwidth stats:", err); + } + }; + + if (isStreaming) { + fetchStats(); + intervalId = setInterval(fetchStats, 2000); + } + + return () => clearInterval(intervalId); + }, [isStreaming]); + + const handleNext = () => { + setCurrentIndex((prev) => (prev + 1) % cameras.length); + }; + + const handlePrevious = () => { + setCurrentIndex((prev) => (prev - 1 + cameras.length) % cameras.length); + }; + + return ( +
      + {currentCamera && isStreaming ? ( +
      + + + {/* Camera Info Top Left */} +
      + {currentCamera.name}
      + + Live +
      + + {/* Stream Stats Top Right */} +
      + FPS: {fps}
      + Bitrate: {bitrate_kbps ? `${bitrate_kbps} kbps` : "N/A"}
      + Ping: {ping_ms ? `${ping_ms} ms` : "N/A"} +
      + + {/* Previous Button */} + + + {/* Next Button */} + + + {/* DPad Overlay */} + {currentCamera.name.includes("USB 2.0 Camera") && ( +
      + +
      + )} +
      + ) : ( +
      +

      + No stream yet.
      Click Start to begin. +

      +
      + )} + + {/* Power Button */} +
      + {/* (isStreaming ? stopStream() : startStream())} + /> */} +
      +
      + ); +}; + +export default CameraView; diff --git a/teleop/robot-controller-ui/src/components/sections/drive/camera/DPad.tsx b/teleop/robot-controller-ui/src/components/sections/drive/camera/DPad.tsx new file mode 100644 index 00000000..06aac056 --- /dev/null +++ b/teleop/robot-controller-ui/src/components/sections/drive/camera/DPad.tsx @@ -0,0 +1,107 @@ +'use client'; + +import React, { useState, useEffect } from 'react'; + +interface DPadProps { + inputStream: string; // "up", "down", "left", "right" +} + +const DPad: React.FC = ({ inputStream }) => { + const [activeButton, setActiveButton] = useState(null); + + useEffect(() => { + setActiveButton(inputStream); + }, [inputStream]); + + const getFill = (dir: string) => (activeButton === dir ? 'black' : 'lightgrey'); + + return ( +
      + + {/* Top */} + + + + + + {/* Bottom */} + + + + + + {/* Left */} + + + + + + {/* Right */} + + + + + +
      + ); +}; + +export default DPad; diff --git a/teleop/robot-controller-ui/src/components/sections/drive/camera/WebRTCPlayer.tsx b/teleop/robot-controller-ui/src/components/sections/drive/camera/WebRTCPlayer.tsx new file mode 100644 index 00000000..885a8647 --- /dev/null +++ b/teleop/robot-controller-ui/src/components/sections/drive/camera/WebRTCPlayer.tsx @@ -0,0 +1,86 @@ +import React, { useEffect, useRef } from "react"; +import { CAMERAIP } from "@/config/config"; + +interface WebRTCPlayerProps { + devicePath: string; + forwardedRef?: React.RefObject; +} + +const WebRTCPlayer: React.FC = ({ devicePath, forwardedRef }) => { + const localRef = useRef(null); + const videoRef = forwardedRef || localRef; + + useEffect(() => { + const pc = new RTCPeerConnection(); + let isCancelled = false; + + pc.addTransceiver("video", { direction: "recvonly" }); + + pc.ontrack = (event) => { + if (!isCancelled && videoRef.current) { + videoRef.current.srcObject = event.streams[0]; + } + }; + + pc.oniceconnectionstatechange = () => { + console.log("[ICE] Connection state:", pc.iceConnectionState); + if (pc.iceConnectionState === "failed" || pc.iceConnectionState === "disconnected") { + console.warn("[ICE] Connection lost."); + } + }; + + const negotiate = async () => { + try { + const offer = await pc.createOffer(); + await pc.setLocalDescription(offer); + + const start = performance.now(); + const response = await fetch( + `http://${CAMERAIP}:8081/offer?id=${encodeURIComponent(devicePath)}`, + { + method: "POST", + body: JSON.stringify({ + sdp: pc.localDescription?.sdp, + type: pc.localDescription?.type, + }), + headers: { "Content-Type": "application/json" }, + } + ); + + const latency = performance.now() - start; + const data = await response.json(); + + if (!data?.sdp || !data?.type) { + throw new Error("Invalid response from WebRTC server"); + } + + await pc.setRemoteDescription(new RTCSessionDescription(data)); + console.log(`[PING] Offer/answer exchange latency: ${latency.toFixed(1)} ms`); + } catch (err) { + if (!isCancelled) console.error("[WebRTC] Negotiation failed:", err); + pc.close(); + } + }; + + negotiate(); + + return () => { + isCancelled = true; + pc.getSenders().forEach((sender) => sender.track?.stop()); + pc.getReceivers().forEach((receiver) => receiver.track?.stop()); + pc.close(); + }; + }, [devicePath, videoRef]); + + return ( +