From e641767dea5d4934c30f76b473aa95d8c1cf3562 Mon Sep 17 00:00:00 2001 From: Manas Mathur Date: Sat, 31 Jan 2026 19:13:13 +0530 Subject: [PATCH 1/2] Add Silicon Signal cookbook project --- README.md | 1 + silicon-signal/.gitignore | 41 + silicon-signal/README.md | 56 + silicon-signal/data/history.json | 149 + silicon-signal/eslint.config.mjs | 25 + silicon-signal/image.png | Bin 0 -> 67961 bytes silicon-signal/next.config.ts | 10 + silicon-signal/package-lock.json | 7537 +++++++++++++++++ silicon-signal/package.json | 33 + silicon-signal/postcss.config.mjs | 7 + silicon-signal/public/file.svg | 1 + silicon-signal/public/globe.svg | 1 + silicon-signal/public/next.svg | 1 + silicon-signal/public/vercel.svg | 1 + silicon-signal/public/window.svg | 1 + silicon-signal/src/app/api/scan/route.ts | 1112 +++ silicon-signal/src/app/favicon.ico | Bin 0 -> 25931 bytes silicon-signal/src/app/globals.css | 111 + silicon-signal/src/app/layout.tsx | 29 + silicon-signal/src/app/page.tsx | 270 + silicon-signal/src/components/Dashboard.tsx | 87 + silicon-signal/src/components/Header.tsx | 18 + .../src/components/HistoricalTrend.tsx | 100 + .../src/components/PlatformView.tsx | 135 + silicon-signal/src/components/RiskBadge.tsx | 23 + silicon-signal/src/components/ScanForm.tsx | 95 + .../src/components/ScanResultCard.tsx | 192 + .../src/components/SignalOverview.tsx | 50 + .../src/components/SiliconWafer.tsx | 33 + .../src/components/SystemArchitecture.tsx | 83 + .../src/components/VendorIntelligence.tsx | 48 + silicon-signal/src/lib/store.ts | 99 + silicon-signal/src/types.ts | 62 + silicon-signal/tsconfig.json | 34 + 34 files changed, 10445 insertions(+) create mode 100644 silicon-signal/.gitignore create mode 100644 silicon-signal/README.md create mode 100644 silicon-signal/data/history.json create mode 100644 silicon-signal/eslint.config.mjs create mode 100644 silicon-signal/image.png create mode 100644 silicon-signal/next.config.ts create mode 100644 silicon-signal/package-lock.json create mode 100644 silicon-signal/package.json create mode 100644 silicon-signal/postcss.config.mjs create mode 100644 silicon-signal/public/file.svg create mode 100644 silicon-signal/public/globe.svg create mode 100644 silicon-signal/public/next.svg create mode 100644 silicon-signal/public/vercel.svg create mode 100644 silicon-signal/public/window.svg create mode 100644 silicon-signal/src/app/api/scan/route.ts create mode 100644 silicon-signal/src/app/favicon.ico create mode 100644 silicon-signal/src/app/globals.css create mode 100644 silicon-signal/src/app/layout.tsx create mode 100644 silicon-signal/src/app/page.tsx create mode 100644 silicon-signal/src/components/Dashboard.tsx create mode 100644 silicon-signal/src/components/Header.tsx create mode 100644 silicon-signal/src/components/HistoricalTrend.tsx create mode 100644 silicon-signal/src/components/PlatformView.tsx create mode 100644 silicon-signal/src/components/RiskBadge.tsx create mode 100644 silicon-signal/src/components/ScanForm.tsx create mode 100644 silicon-signal/src/components/ScanResultCard.tsx create mode 100644 silicon-signal/src/components/SignalOverview.tsx create mode 100644 silicon-signal/src/components/SiliconWafer.tsx create mode 100644 silicon-signal/src/components/SystemArchitecture.tsx create mode 100644 silicon-signal/src/components/VendorIntelligence.tsx create mode 100644 silicon-signal/src/lib/store.ts create mode 100644 silicon-signal/src/types.ts create mode 100644 silicon-signal/tsconfig.json diff --git a/README.md b/README.md index f395c5d..d41b882 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ Each folder in this repo is a standalone project. Dive in to see how to solve re | [anime-watch-hub](./anime-watch-hub) | Helps you find sites to read/watch your favorite manga/anime for free | | [bestbet](./bestbet) | Sports betting odds comparison tool | | [competitor-analysis](./competitor-analysis) | a Live Competitive Pricing Intelligence Dashboard | +| [silicon-signal](./silicon-signal) | Semiconductor supply chain tracker for lifecycle, availability, and lead-time signals | | [stay-scout-hub](./stay-scout-hub) | Searches across all sites for places to stay when travel for conventions or events | | [summer-school-finder](./summer-school-finder) | Discover and compare summer sch`ool programs from universities around the world | diff --git a/silicon-signal/.gitignore b/silicon-signal/.gitignore new file mode 100644 index 0000000..5ef6a52 --- /dev/null +++ b/silicon-signal/.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/silicon-signal/README.md b/silicon-signal/README.md new file mode 100644 index 0000000..ca7ee55 --- /dev/null +++ b/silicon-signal/README.md @@ -0,0 +1,56 @@ +# Silicon Signal + +Live link: https://silicon-signal.vercel.app/ + +## What it is +Silicon Signal is a real-time semiconductor tracking tool that scans distributor and foundry pages to surface lifecycle, availability, lead time, and pricing signals. It uses the TinyFish web agent (Mino) to drive live web navigation and DOM-level extraction. + +## Demo video +![Demo](image.png) + +## TinyFish API usage (snippet) +```ts +if (process.env.MINO_API_KEY) { + agentLogs.push(`${logPrefix} System Status: Successfully detected MINO_API_KEY. Secure link established.`); +} + +const browser = await puppeteer.launch({ + headless: true, + args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage'], +}); +``` + +## How to run +1. Install deps: `npm install` +2. Create `.env.local`: +``` +MINO_API_KEY=your_tinyfish_key +``` +3. Start dev server: `npm run dev` + +## Architecture diagram +```mermaid +graph TD + User([User]) -->|Inputs Part #| DP[Dashboard / PlatformView] + + subgraph "Core Backend" + API[API: /api/scan] + Store[(Historical Snapshot Store)] + Engine[Technical Assessment Engine] + end + + subgraph "Tracking Layer (Tinyfish/Mino)" + Crawler[Automated Crawler] + DOM[DOM Extraction Engine] + Sources((Live Web Sources)) + end + + DP -->|Request| API + API -->|Deploy| Crawler + Crawler -->|Navigate| Sources + Sources -->|Telemetry| DOM + DOM -->|Parsed Data| Engine + Store <-->|History Link| Engine + Engine -->|Structured Report| API + API -->|Result| DP +``` diff --git a/silicon-signal/data/history.json b/silicon-signal/data/history.json new file mode 100644 index 0000000..6a062a3 --- /dev/null +++ b/silicon-signal/data/history.json @@ -0,0 +1,149 @@ +{ + "STFM4567": { + "snapshots": [ + { + "timestamp": "2026-01-20", + "lifecycle_status": "Active", + "lead_time_weeks": 0, + "moq": 0, + "availability": "Limited" + } + ] + }, + "STM3467FT": { + "snapshots": [ + { + "timestamp": "2026-01-20", + "lifecycle_status": "Unknown", + "lead_time_weeks": 0, + "moq": 0, + "availability": "Unknown", + "risk_score": 50 + } + ] + }, + "STM32F103C8T6": { + "snapshots": [ + { + "timestamp": "2026-01-20", + "lifecycle_status": "NRND", + "lead_time_weeks": 0, + "moq": 0, + "availability": "Limited", + "risk_score": 15 + }, + { + "timestamp": "2026-01-29", + "lifecycle_status": "Unknown", + "lead_time_weeks": 0, + "moq": 0, + "availability": "Unknown", + "risk_score": 50 + }, + { + "timestamp": "2026-01-30", + "lifecycle_status": "Unknown", + "lead_time_weeks": 0, + "moq": 0, + "availability": "Unknown", + "risk_score": 50 + } + ] + }, + "PIC16F877A-I/P": { + "snapshots": [ + { + "timestamp": "2026-01-20", + "lifecycle_status": "Active", + "lead_time_weeks": 0, + "moq": 0, + "availability": "Limited", + "risk_score": 40 + } + ] + }, + "STM32F103C87": { + "snapshots": [ + { + "timestamp": "2026-01-29", + "lifecycle_status": "NRND", + "lead_time_weeks": 0, + "moq": 0, + "availability": "Limited", + "risk_score": 85 + } + ] + }, + "ATmega328P": { + "snapshots": [ + { + "timestamp": "2026-01-29", + "lifecycle_status": "Active", + "lead_time_weeks": 0, + "moq": 0, + "availability": "Unknown", + "risk_score": 50 + }, + { + "timestamp": "2026-01-30", + "lifecycle_status": "Active", + "lead_time_weeks": 0, + "moq": 0, + "availability": "Unknown", + "risk_score": 50 + } + ] + }, + "NE555": { + "snapshots": [ + { + "timestamp": "2026-01-29", + "lifecycle_status": "Active", + "lead_time_weeks": 0, + "moq": 0, + "availability": "Unknown", + "risk_score": 50 + }, + { + "timestamp": "2026-01-30", + "lifecycle_status": "Active", + "lead_time_weeks": 0, + "moq": 0, + "availability": "Unknown", + "risk_score": 50 + } + ] + }, + "ESP32-WROOM-32": { + "snapshots": [ + { + "timestamp": "2026-01-29", + "lifecycle_status": "Unknown", + "lead_time_weeks": 0, + "moq": 0, + "availability": "Unknown", + "risk_score": 50 + }, + { + "timestamp": "2026-01-30", + "lifecycle_status": "Unknown", + "lead_time_weeks": 0, + "moq": 0, + "availability": "Unknown", + "risk_score": 50 + } + ] + }, + "LM358": { + "snapshots": [ + { + "timestamp": "2026-01-30", + "lifecycle_status": "Unknown", + "lead_time_weeks": 0, + "moq": 0, + "availability": "Unknown", + "risk_score": 50 + } + ] + } +} \ No newline at end of file diff --git a/silicon-signal/eslint.config.mjs b/silicon-signal/eslint.config.mjs new file mode 100644 index 0000000..27c2399 --- /dev/null +++ b/silicon-signal/eslint.config.mjs @@ -0,0 +1,25 @@ +import { defineConfig, globalIgnores } from "eslint/config"; +import nextVitals from "eslint-config-next/core-web-vitals"; +import nextTs from "eslint-config-next/typescript"; + +const eslintConfig = defineConfig([ + ...nextVitals, + ...nextTs, + // Override default ignores of eslint-config-next. + globalIgnores([ + // Default ignores of eslint-config-next: + ".next/**", + "out/**", + "build/**", + "next-env.d.ts", + ]), + { + rules: { + "eqeqeq": "error", + "no-var": "error", + "prefer-const": "error", + }, + }, +]); + +export default eslintConfig; diff --git a/silicon-signal/image.png b/silicon-signal/image.png new file mode 100644 index 0000000000000000000000000000000000000000..9f33d8d945f506f4e07415a2a77911d9d17c666b GIT binary patch literal 67961 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 II&Q�GLMs=Kufz literal 0 HcmV?d00001 diff --git a/silicon-signal/next.config.ts b/silicon-signal/next.config.ts new file mode 100644 index 0000000..b060a82 --- /dev/null +++ b/silicon-signal/next.config.ts @@ -0,0 +1,10 @@ +import type { NextConfig } from "next"; +import path from "path"; + +const nextConfig: NextConfig = { + turbopack: { + root: path.resolve(__dirname), + }, +}; + +export default nextConfig; diff --git a/silicon-signal/package-lock.json b/silicon-signal/package-lock.json new file mode 100644 index 0000000..cdec307 --- /dev/null +++ b/silicon-signal/package-lock.json @@ -0,0 +1,7537 @@ +{ + "name": "frontend", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.1.0", + "dependencies": { + "@sparticuz/chromium": "^143.0.4", + "clsx": "^2.1.1", + "framer-motion": "^12.27.1", + "lucide-react": "^0.562.0", + "next": "16.1.3", + "puppeteer": "^24.35.0", + "puppeteer-core": "^24.35.0", + "react": "19.2.3", + "react-dom": "19.2.3", + "tailwind-merge": "^3.4.0" + }, + "devDependencies": { + "@tailwindcss/postcss": "^4", + "@types/node": "^20", + "@types/react": "^19", + "@types/react-dom": "^19", + "eslint": "^9", + "eslint-config-next": "16.1.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/@babel/code-frame": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", + "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.6.tgz", + "integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz", + "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/generator": "^7.28.6", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz", + "integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", + "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz", + "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/generator": "^7.28.6", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.6", + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", + "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", + "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "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.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "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.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "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.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "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.1", + "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.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", + "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.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.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.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "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/colour": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", + "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "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.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "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.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "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.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "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.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "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.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "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.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "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.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "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.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "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.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "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.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "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.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "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.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "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.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "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-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "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-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "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.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "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.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "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.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "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.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "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.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "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.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "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.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "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/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "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/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "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.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, + "node_modules/@next/env": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-16.1.3.tgz", + "integrity": "sha512-BLP14oBOvZWXgfdJf9ao+VD8O30uE+x7PaV++QtACLX329WcRSJRO5YJ+Bcvu0Q+c/lei41TjSiFf6pXqnpbQA==", + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.1.3.tgz", + "integrity": "sha512-MqBh3ltFAy0AZCRFVdjVjjeV7nEszJDaVIpDAnkQcn8U9ib6OEwkSnuK6xdYxMGPhV/Y4IlY6RbDipPOpLfBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "3.3.1" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.1.3.tgz", + "integrity": "sha512-CpOD3lmig6VflihVoGxiR/l5Jkjfi4uLaOR4ziriMv0YMDoF6cclI+p5t2nstM8TmaFiY6PCTBgRWB57/+LiBA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.1.3.tgz", + "integrity": "sha512-aF4us2JXh0zn3hNxvL1Bx3BOuh8Lcw3p3Xnurlvca/iptrDH1BrpObwkw9WZra7L7/0qB9kjlREq3hN/4x4x+Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.1.3.tgz", + "integrity": "sha512-8VRkcpcfBtYvhGgXAF7U3MBx6+G1lACM1XCo1JyaUr4KmAkTNP8Dv2wdMq7BI+jqRBw3zQE7c57+lmp7jCFfKA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.1.3.tgz", + "integrity": "sha512-UbFx69E2UP7MhzogJRMFvV9KdEn4sLGPicClwgqnLht2TEi204B71HuVfps3ymGAh0c44QRAF+ZmvZZhLLmhNg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.1.3.tgz", + "integrity": "sha512-SzGTfTjR5e9T+sZh5zXqG/oeRQufExxBF6MssXS7HPeZFE98JDhCRZXpSyCfWrWrYrzmnw/RVhlP2AxQm+wkRQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.1.3.tgz", + "integrity": "sha512-HlrDpj0v+JBIvQex1mXHq93Mht5qQmfyci+ZNwGClnAQldSfxI6h0Vupte1dSR4ueNv4q7qp5kTnmLOBIQnGow==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.1.3.tgz", + "integrity": "sha512-3gFCp83/LSduZMSIa+lBREP7+5e7FxpdBoc9QrCdmp+dapmTK9I+SLpY60Z39GDmTXSZA4huGg9WwmYbr6+WRw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.1.3.tgz", + "integrity": "sha512-1SZVfFT8zmMB+Oblrh5OKDvUo5mYQOkX2We6VGzpg7JUVZlqe4DYOFGKYZKTweSx1gbMixyO1jnFT4thU+nNHQ==", + "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/@puppeteer/browsers": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.11.1.tgz", + "integrity": "sha512-YmhAxs7XPuxN0j7LJloHpfD1ylhDuFmmwMvfy/+6nBSrETT2ycL53LrhgPtR+f+GcPSybQVuQ5inWWu5MrWCpA==", + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.4.3", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.5.0", + "semver": "^7.7.3", + "tar-fs": "^3.1.1", + "yargs": "^17.7.2" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@puppeteer/browsers/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "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/@sparticuz/chromium": { + "version": "143.0.4", + "resolved": "https://registry.npmjs.org/@sparticuz/chromium/-/chromium-143.0.4.tgz", + "integrity": "sha512-/6I7uQTRhRDD2/gGPQ1Gkf+Dqk0RYDACPJDZfSzz0OWk4JmUTonNHPXbrn6UIklOHlnDLf8xAAzkOZKB/cJpLA==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.11", + "tar-fs": "^3.1.1" + }, + "engines": { + "node": ">=20.11.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.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.18.tgz", + "integrity": "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.6.1", + "lightningcss": "1.30.2", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.18" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.18.tgz", + "integrity": "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.18", + "@tailwindcss/oxide-darwin-arm64": "4.1.18", + "@tailwindcss/oxide-darwin-x64": "4.1.18", + "@tailwindcss/oxide-freebsd-x64": "4.1.18", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.18", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.18", + "@tailwindcss/oxide-linux-x64-musl": "4.1.18", + "@tailwindcss/oxide-wasm32-wasi": "4.1.18", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.18" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.18.tgz", + "integrity": "sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.18.tgz", + "integrity": "sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.18.tgz", + "integrity": "sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.18.tgz", + "integrity": "sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.18.tgz", + "integrity": "sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.18.tgz", + "integrity": "sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.18.tgz", + "integrity": "sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.18.tgz", + "integrity": "sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.18.tgz", + "integrity": "sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.18.tgz", + "integrity": "sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==", + "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.7.1", + "@emnapi/runtime": "^1.7.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.0", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.18.tgz", + "integrity": "sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.18.tgz", + "integrity": "sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.18.tgz", + "integrity": "sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.1.18", + "@tailwindcss/oxide": "4.1.18", + "postcss": "^8.4.41", + "tailwindcss": "4.1.18" + } + }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "license": "MIT" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "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.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.30.tgz", + "integrity": "sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/react": { + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.8.tgz", + "integrity": "sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.53.0.tgz", + "integrity": "sha512-eEXsVvLPu8Z4PkFibtuFJLJOTAV/nPdgtSjkGoPpddpFk3/ym2oy97jynY6ic2m6+nc5M8SE1e9v/mHKsulcJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.53.0", + "@typescript-eslint/type-utils": "8.53.0", + "@typescript-eslint/utils": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.4.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.53.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.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.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.53.0.tgz", + "integrity": "sha512-npiaib8XzbjtzS2N4HlqPvlpxpmZ14FjSJrteZpPxGUaYPlvhzlzUZ4mZyABo0EFrOWnvyd0Xxroq//hKhtAWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.53.0", + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.0", + "debug": "^4.4.3" + }, + "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 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.53.0.tgz", + "integrity": "sha512-Bl6Gdr7NqkqIP5yP9z1JU///Nmes4Eose6L1HwpuVHwScgDPPuEWbUVhvlZmb8hy0vX9syLk5EGNL700WcBlbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.53.0", + "@typescript-eslint/types": "^8.53.0", + "debug": "^4.4.3" + }, + "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 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.53.0.tgz", + "integrity": "sha512-kWNj3l01eOGSdVBnfAF2K1BTh06WS0Yet6JUgb9Cmkqaz3Jlu0fdVUjj9UI8gPidBWSMqDIglmEXifSgDT/D0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.0" + }, + "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.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.53.0.tgz", + "integrity": "sha512-K6Sc0R5GIG6dNoPdOooQ+KtvT5KCKAvTcY8h2rIuul19vxH5OTQk7ArKkd4yTzkw66WnNY0kPPzzcmWA+XRmiA==", + "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 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.53.0.tgz", + "integrity": "sha512-BBAUhlx7g4SmcLhn8cnbxoxtmS7hcq39xKCgiutL3oNx1TaIp+cny51s8ewnKMpVUKQUGb41RAUWZ9kxYdovuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.0", + "@typescript-eslint/utils": "8.53.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.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 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.53.0.tgz", + "integrity": "sha512-Bmh9KX31Vlxa13+PqPvt4RzKRN1XORYSLlAE+sO1i28NkisGbTtSLFVB3l7PWdHtR3E0mVMuC7JilWJ99m2HxQ==", + "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.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.53.0.tgz", + "integrity": "sha512-pw0c0Gdo7Z4xOG987u3nJ8akL9093yEEKv8QTJ+Bhkghj1xyj8cgPaavlr9rq8h7+s6plUJ4QJYw2gCZodqmGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.53.0", + "@typescript-eslint/tsconfig-utils": "8.53.0", + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.0", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.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 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "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/typescript-estree/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.53.0.tgz", + "integrity": "sha512-XDY4mXTez3Z1iRDI5mbRhH4DFSt46oaIFsLg+Zn97+sYrXACziXSQcSelMybnVZ5pa1P6xYkPr5cMJyunM1ZDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.53.0", + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.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 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.53.0.tgz", + "integrity": "sha512-LZ2NqIHFhvFwxG0qZeLL9DvdNAHPGCY5dIRwBhyYeU+LfLhcStE1ImjsuTG/WaVh3XysGaeLW8Rqq7cGkPCFvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.0", + "eslint-visitor-keys": "^4.2.1" + }, + "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-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "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/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "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-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "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==", + "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": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "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.11.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.1.tgz", + "integrity": "sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==", + "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/b4a": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", + "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } + }, + "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/bare-events": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, + "node_modules/bare-fs": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.2.tgz", + "integrity": "sha512-veTnRzkb6aPHOvSKIOy60KzURfBdUflr5VReI+NSaPL6xf+XLdONQgZgpYvUuZLVQ8dCqxpBAudaOM1+KpAUxw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/bare-os": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz", + "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz", + "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "streamx": "^2.21.0" + }, + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/bare-url": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz", + "integrity": "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-path": "^3.0.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.15", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.15.tgz", + "integrity": "sha512-kX8h7K2srmDyYnXRIppo4AH/wYgzWVCs+eKr3RusRSQ5PvRYoEFmR/I0PbdTjKFAoKqp5+kbxnNTFO9jOfSVJg==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/basic-ftp": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.1.0.tgz", + "integrity": "sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "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/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001765", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001765.tgz", + "integrity": "sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ==", + "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/chromium-bidi": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-12.0.1.tgz", + "integrity": "sha512-fGg+6jr0xjQhzpy5N4ErZxQ4wF7KLEvhGZXD6EgvZKDhu7iOhZXnZhcDxPJDcwTcrD48NPzOCo84RP2lv3Z+Cg==", + "license": "Apache-2.0", + "dependencies": { + "mitt": "^3.0.1", + "zod": "^3.24.1" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, + "node_modules/chromium-bidi/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "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/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "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==", + "license": "MIT" + }, + "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/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "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.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "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-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "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/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "license": "MIT", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "devOptional": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/devtools-protocol": { + "version": "0.0.1534754", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1534754.tgz", + "integrity": "sha512-26T91cV5dbOYnXdJi5qQHoTtUoNEqwkHcAyu/IKtjIAxiEqPMrDiRkDOPWVsGfNZGmlQVHQbZRSjD8sxagWVsQ==", + "license": "BSD-3-Clause" + }, + "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/electron-to-chromium": { + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "dev": true, + "license": "ISC" + }, + "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/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.4", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", + "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", + "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.2", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.2.tgz", + "integrity": "sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.1", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.1.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.3.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", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.5", + "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/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/eslint": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "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.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.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": "16.1.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-16.1.3.tgz", + "integrity": "sha512-q2Z87VSsoJcv+vgR+Dm8NPRf+rErXcRktuBR5y3umo/j5zLjIWH7rqBCh3X804gUGKbOrqbgsLUkqDE35C93Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@next/eslint-plugin-next": "16.1.3", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsx-a11y": "^6.10.0", + "eslint-plugin-react": "^7.37.0", + "eslint-plugin-react-hooks": "^7.0.0", + "globals": "16.4.0", + "typescript-eslint": "^8.46.0" + }, + "peerDependencies": { + "eslint": ">=9.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-next/node_modules/globals": { + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", + "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "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.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "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-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": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", + "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "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-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "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.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "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.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "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==", + "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==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "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-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "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.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "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/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "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", + "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/framer-motion": { + "version": "12.27.1", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.27.1.tgz", + "integrity": "sha512-cEAqO69kcZt3gL0TGua8WTgRQfv4J57nqt1zxHtLKwYhAwA0x9kDS/JbMa1hJbwkGY74AGJKvZ9pX/IqWZtZWQ==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.27.1", + "motion-utils": "^12.24.10", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "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/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "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-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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.13.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", + "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/get-uri": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", + "license": "MIT", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "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/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/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "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==", + "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/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "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.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "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-bun-module/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "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-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "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-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.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "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==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "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-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "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": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", + "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-android-arm64": "1.30.2", + "lightningcss-darwin-arm64": "1.30.2", + "lightningcss-darwin-x64": "1.30.2", + "lightningcss-freebsd-x64": "1.30.2", + "lightningcss-linux-arm-gnueabihf": "1.30.2", + "lightningcss-linux-arm64-gnu": "1.30.2", + "lightningcss-linux-arm64-musl": "1.30.2", + "lightningcss-linux-x64-gnu": "1.30.2", + "lightningcss-linux-x64-musl": "1.30.2", + "lightningcss-win32-arm64-msvc": "1.30.2", + "lightningcss-win32-x64-msvc": "1.30.2" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", + "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.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", + "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.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", + "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.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", + "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.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", + "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.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", + "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.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", + "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.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", + "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.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", + "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.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", + "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/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "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/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "0.562.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.562.0.tgz", + "integrity": "sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "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/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/motion-dom": { + "version": "12.27.1", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.27.1.tgz", + "integrity": "sha512-V/53DA2nBqKl9O2PMJleSUb/G0dsMMeZplZwgIQf5+X0bxIu7Q1cTv6DrjvTTGYRm3+7Y5wMlRZ1wT61boU/bQ==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.24.10" + } + }, + "node_modules/motion-utils": { + "version": "12.24.10", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.24.10.tgz", + "integrity": "sha512-x5TFgkCIP4pPsRLpKoI86jv/q8t8FQOiM/0E8QKBzfMozWHfkKap2gA1hOki+B5g3IsBNpxbUnfOum1+dgvYww==", + "license": "MIT" + }, + "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==", + "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.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", + "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/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/next": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/next/-/next-16.1.3.tgz", + "integrity": "sha512-gthG3TRD+E3/mA0uDQb9lqBmx1zVosq5kIwxNN6+MRNd085GzD+9VXMPUs+GGZCbZ+GDZdODUq4Pm7CTXK6ipw==", + "license": "MIT", + "dependencies": { + "@next/env": "16.1.3", + "@swc/helpers": "0.5.15", + "baseline-browser-mapping": "^2.8.3", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.4.31", + "styled-jsx": "5.1.6" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=20.9.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "16.1.3", + "@next/swc-darwin-x64": "16.1.3", + "@next/swc-linux-arm64-gnu": "16.1.3", + "@next/swc-linux-arm64-musl": "16.1.3", + "@next/swc-linux-x64-gnu": "16.1.3", + "@next/swc-linux-x64-musl": "16.1.3", + "@next/swc-win32-arm64-msvc": "16.1.3", + "@next/swc-win32-x64-msvc": "16.1.3", + "sharp": "^0.34.4" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.51.1", + "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/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "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/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "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/pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", + "license": "MIT", + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "license": "MIT", + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "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.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "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/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", + "engines": { + "node": ">=0.4.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/proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "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/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.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/puppeteer": { + "version": "24.35.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.35.0.tgz", + "integrity": "sha512-sbjB5JnJ+3nwgSdRM/bqkFXqLxRz/vsz0GRIeTlCk+j+fGpqaF2dId9Qp25rXz9zfhqnN9s0krek1M/C2GDKtA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "2.11.1", + "chromium-bidi": "12.0.1", + "cosmiconfig": "^9.0.0", + "devtools-protocol": "0.0.1534754", + "puppeteer-core": "24.35.0", + "typed-query-selector": "^2.12.0" + }, + "bin": { + "puppeteer": "lib/cjs/puppeteer/node/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/puppeteer-core": { + "version": "24.35.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.35.0.tgz", + "integrity": "sha512-vt1zc2ME0kHBn7ZDOqLvgvrYD5bqNv5y2ZNXzYnCv8DEtZGw/zKhljlrGuImxptZ4rq+QI9dFGrUIYqG4/IQzA==", + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "2.11.1", + "chromium-bidi": "12.0.1", + "debug": "^4.4.3", + "devtools-protocol": "0.0.1534754", + "typed-query-selector": "^2.12.0", + "webdriver-bidi-protocol": "0.3.10", + "ws": "^8.19.0" + }, + "engines": { + "node": ">=18" + } + }, + "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.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.3" + } + }, + "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/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "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==", + "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.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "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/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.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/sharp/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "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/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/streamx": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", + "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", + "license": "MIT", + "dependencies": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "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-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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/tailwind-merge": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz", + "integrity": "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", + "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tar-fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz", + "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" + } + }, + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "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.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", + "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/tsconfig-paths/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/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/typed-query-selector": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", + "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==", + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.53.0.tgz", + "integrity": "sha512-xHURCQNxZ1dsWn0sdOaOfCSQG0HKeqSj9OexIxrz6ypU6wHYOdX2I3D2b8s8wFSsSOYJb+6q283cLiLlkEsBYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.53.0", + "@typescript-eslint/parser": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.0", + "@typescript-eslint/utils": "8.53.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 <6.0.0" + } + }, + "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==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/unrs-resolver": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", + "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.0" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "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/webdriver-bidi-protocol": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.3.10.tgz", + "integrity": "sha512-5LAE43jAVLOhB/QqX4bwSiv0Hg1HBfMmOuwBSXHdvg4GMGu9Y0lIq7p4R/yySu6w74WmaR4GM4H9t2IwLW7hgw==", + "license": "Apache-2.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.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "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/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "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" + } + }, + "node_modules/zod": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz", + "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + } + } +} diff --git a/silicon-signal/package.json b/silicon-signal/package.json new file mode 100644 index 0000000..2072b68 --- /dev/null +++ b/silicon-signal/package.json @@ -0,0 +1,33 @@ +{ + "name": "frontend", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "eslint" + }, + "dependencies": { + "@sparticuz/chromium": "^143.0.4", + "clsx": "^2.1.1", + "framer-motion": "^12.27.1", + "lucide-react": "^0.562.0", + "next": "16.1.3", + "puppeteer": "^24.35.0", + "puppeteer-core": "^24.35.0", + "react": "19.2.3", + "react-dom": "19.2.3", + "tailwind-merge": "^3.4.0" + }, + "devDependencies": { + "@tailwindcss/postcss": "^4", + "@types/node": "^20", + "@types/react": "^19", + "@types/react-dom": "^19", + "eslint": "^9", + "eslint-config-next": "16.1.3", + "tailwindcss": "^4", + "typescript": "^5" + } +} diff --git a/silicon-signal/postcss.config.mjs b/silicon-signal/postcss.config.mjs new file mode 100644 index 0000000..61e3684 --- /dev/null +++ b/silicon-signal/postcss.config.mjs @@ -0,0 +1,7 @@ +const config = { + plugins: { + "@tailwindcss/postcss": {}, + }, +}; + +export default config; diff --git a/silicon-signal/public/file.svg b/silicon-signal/public/file.svg new file mode 100644 index 0000000..004145c --- /dev/null +++ b/silicon-signal/public/file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/silicon-signal/public/globe.svg b/silicon-signal/public/globe.svg new file mode 100644 index 0000000..567f17b --- /dev/null +++ b/silicon-signal/public/globe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/silicon-signal/public/next.svg b/silicon-signal/public/next.svg new file mode 100644 index 0000000..5174b28 --- /dev/null +++ b/silicon-signal/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/silicon-signal/public/vercel.svg b/silicon-signal/public/vercel.svg new file mode 100644 index 0000000..7705396 --- /dev/null +++ b/silicon-signal/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/silicon-signal/public/window.svg b/silicon-signal/public/window.svg new file mode 100644 index 0000000..b2b2a44 --- /dev/null +++ b/silicon-signal/public/window.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/silicon-signal/src/app/api/scan/route.ts b/silicon-signal/src/app/api/scan/route.ts new file mode 100644 index 0000000..4af4f7e --- /dev/null +++ b/silicon-signal/src/app/api/scan/route.ts @@ -0,0 +1,1112 @@ +import { NextResponse } from 'next/server'; +import puppeteer from 'puppeteer'; +import type { Browser } from 'puppeteer'; +import { saveSnapshot, getLastSnapshot, getHistory, HistoricalSnapshot } from '@/lib/store'; + +interface RiskAnalysis { + score: number; + level: string; + reasoning: string; +} + +interface ScanResult { + part_number: string; + manufacturer: string; + lifecycle_status: string; + lead_time_weeks?: number; + lead_time_days?: number; + moq?: number; + availability?: string; + timestamp: string; + last_time_buy_date?: string; + pcn_summary?: string; + risk: RiskAnalysis; + evidence_links: string[]; + price_estimate?: string; + sources?: string[]; + sources_checked?: string[]; + sources_blocked?: string[]; + source_signals?: SourceSignal[]; + signals?: SignalSummary; + confidence?: ConfidenceInfo; + scanned_at?: string; + scan_duration_ms?: number; + scan_timed_out?: boolean; + agent_logs?: string[]; + history?: { timestamp: string; score: number }[]; +} + +interface SourceSignal { + name: string; + url: string; + ok: boolean; + blocked: boolean; + availability?: string; + lifecycle_status?: string; + lead_time_weeks?: number; + price_estimate?: string; +} + +interface SignalSummary { + availability: string; + lifecycle_status: string; + lead_time_weeks?: number; + price_estimate?: string; +} + +interface ConfidenceInfo { + score: number; + level: string; + sources: number; + signals: number; +} + +interface ParsedSignals { + availability?: string; + lifecycle_status?: string; + lead_time_weeks?: number; + price_estimate?: string; + price_value?: number; +} + +interface SourceFetchResult { + signal: SourceSignal; + snippet: string; +} + +const inferAvailability = (content: string) => { + if (content.includes('in stock') || content.includes('available now') || content.includes('available for') || content.includes('ships today') || content.includes('add to cart')) return 'In Stock'; + if (content.includes('backorder') || content.includes('back order')) return 'Backorder'; + if (content.includes('out of stock') || content.includes('no stock')) return 'Backorder'; + if (content.includes('limited') || content.includes('low stock')) return 'Limited'; + if (content.includes('stock') || content.includes('available')) return 'In Stock'; + return 'Unknown'; +}; + +const availabilityPriority = ['In Stock', 'Limited', 'Backorder', 'Unknown']; +const lifecyclePriority = ['Obsolete', 'NRND', 'Active', 'Unknown']; + +const pickPreferred = (values: (string | undefined)[], priority: string[]) => { + for (const candidate of priority) { + if (values.some((value) => value === candidate)) { + return candidate; + } + } + return 'Unknown'; +}; + +const parsePrice = (content: string) => { + const patterns = [ + /(?:us\$|\$|usd|price)\s*[:\s]*(\d{1,5}(?:\.\d{1,3})?)/gi, + /(\d{1,5}(?:\.\d{1,3})?)\s*(?:usd|us\$|\$)/gi, + /\$\s*(\d{1,5}\.\d{2})/g, + /\b(\d{1,2}\.\d{2})\b/g, + ]; + const prices: number[] = []; + for (const re of patterns) { + const matches = Array.from(content.matchAll(re)); + for (const m of matches) { + const v = parseFloat(m[1]); + if (Number.isFinite(v) && v > 0 && v < 100000) prices.push(v); + } + } + if (!prices.length) return null; + const lowest = Math.min(...prices); + return { value: lowest, label: `USD ${lowest.toFixed(2)}` }; +}; + +const parseLeadTime = (content: string) => { + const weekMatch = content.match(/(\d+)\s*(weeks?|wks?)/i); + if (weekMatch) return parseInt(weekMatch[1], 10); + const dayMatch = content.match(/(\d+)\s*days?\s*(?:lead|ship|delivery)?/i); + if (dayMatch) return Math.ceil(parseInt(dayMatch[1], 10) / 7); + return undefined; +}; + +const parseAvailabilityDays = (content: string): string | undefined => { + const shipsIn = content.match(/ships?\s*in\s*(\d+)\s*days?/i); + if (shipsIn) return `Ships in ${shipsIn[1]} days`; + const inStock = content.match(/(\d+,?\d*)\s*in\s*stock/i); + if (inStock) return `${inStock[1]} in stock`; + const available = content.match(/available\s*in\s*(\d+)\s*days?/i); + if (available) return `Available in ${available[1]} days`; + if (content.includes('in stock') || content.includes('In Stock')) return 'In Stock'; + if (content.includes('backorder') || content.includes('Backorder')) return 'Backorder'; + return undefined; +}; + +const parseLeadTimeDaysFromAvailability = (availability: string): number | undefined => { + const m = availability.match(/ships?\s*in\s*(\d+)\s*days?/i) || availability.match(/available\s*in\s*(\d+)\s*days?/i); + return m ? parseInt(m[1], 10) : undefined; +}; + +const extractSignalsFromContent = (content: string) => { + const availabilityDetail = parseAvailabilityDays(content); + const availability = availabilityDetail ?? (inferAvailability(content) !== 'Unknown' ? inferAvailability(content) : undefined); + const lifecycle = inferLifecycle(content); + const leadTime = parseLeadTime(content); + const price = parsePrice(content); + + return { + availability: availability !== 'Unknown' ? availability : undefined, + lifecycle_status: lifecycle !== 'Unknown' ? lifecycle : undefined, + lead_time_weeks: leadTime, + price_estimate: price?.label, + price_value: price?.value, + }; +}; + +const mergeSignals = (primary: ParsedSignals, secondary?: ParsedSignals) => ({ + availability: primary.availability ?? secondary?.availability, + lifecycle_status: primary.lifecycle_status ?? secondary?.lifecycle_status, + lead_time_weeks: primary.lead_time_weeks ?? secondary?.lead_time_weeks, + price_estimate: primary.price_estimate ?? secondary?.price_estimate, + price_value: primary.price_value ?? secondary?.price_value, +}); + +const mapSchemaAvailability = (value?: string) => { + if (!value) return undefined; + const lowered = value.toLowerCase(); + if (lowered.includes('instock')) return 'In Stock'; + if (lowered.includes('backorder') || lowered.includes('preorder')) return 'Backorder'; + if (lowered.includes('outofstock') || lowered.includes('soldout')) return 'Backorder'; + return undefined; +}; + +const parseJsonLdSignals = (jsonLdBlocks: string[]): ParsedSignals => { + const parsed: ParsedSignals = {}; + let lowestPrice: number | undefined; + + const handleNode = (node: any) => { + if (!node || typeof node !== 'object') return; + const offers = node.offers || (node.aggregateOffer ? node.aggregateOffer : undefined); + const offersArray = Array.isArray(offers) ? offers : offers ? [offers] : []; + + for (const offer of offersArray) { + const priceValue = typeof offer?.price === 'string' ? parseFloat(offer.price) : offer?.price; + if (Number.isFinite(priceValue)) { + if (lowestPrice === undefined || priceValue < lowestPrice) { + lowestPrice = priceValue; + } + } + const availability = mapSchemaAvailability(offer?.availability); + if (availability) { + parsed.availability = parsed.availability ?? availability; + } + } + }; + + for (const block of jsonLdBlocks) { + try { + const data = JSON.parse(block); + const nodes = Array.isArray(data) ? data : data['@graph'] ? data['@graph'] : [data]; + for (const node of nodes) { + if (node?.['@type'] === 'Product' || node?.['@type']?.includes?.('Product')) { + handleNode(node); + } + handleNode(node); + } + } catch (e) { + continue; + } + } + + if (lowestPrice !== undefined) { + parsed.price_value = lowestPrice; + parsed.price_estimate = `USD ${lowestPrice.toFixed(2)}`; + } + + return parsed; +}; + +const computeConfidence = (sourcesCount: number, signalsCount: number): ConfidenceInfo => { + const score = Math.min(100, 20 + sourcesCount * 10 + signalsCount * 15); + const level = score >= 70 ? 'HIGH' : score >= 40 ? 'MEDIUM' : 'LOW'; + return { score, level, sources: sourcesCount, signals: signalsCount }; +}; + +const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); + +const fetchWithTimeout = async (url: string, timeoutMs: number) => { + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), timeoutMs); + try { + return await fetch(url, { headers: { 'User-Agent': 'Mozilla/5.0' }, signal: controller.signal }); + } finally { + clearTimeout(timeoutId); + } +}; + +const fetchHtmlSnippet = async (url: string, timeoutMs: number, retries: number) => { + for (let attempt = 0; attempt <= retries; attempt += 1) { + try { + const res = await fetchWithTimeout(url, timeoutMs); + const text = await res.text(); + if (text) { + return text.replace(/<[^>]*>?/gm, ' ').substring(0, 5000); + } + } catch (e) { + if (attempt === retries) { + return ''; + } + await sleep(250 * (attempt + 1)); + } + } + return ''; +}; + +const fetchSourcesWithLimit = async ( + sources: { name: string; url: string }[], + limit: number, + timeoutMs: number, + retries: number, + preSnippets?: Record, + preSignals?: Record +) => { + const results: SourceFetchResult[] = []; + let index = 0; + + const workers = Array.from({ length: limit }).map(async () => { + while (index < sources.length) { + const current = sources[index]; + index += 1; + const prefilled = preSnippets?.[current.name]; + const snippet = prefilled ?? await fetchHtmlSnippet(current.url, timeoutMs, retries); + if (snippet) { + const signals = extractSignalsFromContent(snippet.toLowerCase()); + const structured = preSignals?.[current.name]; + const merged = structured ? mergeSignals(structured, signals) : signals; + results.push({ + snippet, + signal: { + name: current.name, + url: current.url, + ok: true, + blocked: false, + availability: merged.availability, + lifecycle_status: merged.lifecycle_status, + lead_time_weeks: merged.lead_time_weeks, + price_estimate: merged.price_estimate, + } + }); + } else { + results.push({ + snippet: '', + signal: { + name: current.name, + url: current.url, + ok: false, + blocked: true, + } + }); + } + } + }); + + await Promise.all(workers); + return results; +}; +const inferLifecycle = (content: string) => { + if (content.includes('obsolete') || content.includes('end of life') || content.includes('eol')) { + return 'Obsolete'; + } + if (content.includes('nrnd') || content.includes('not recommended for new designs')) { + return 'NRND'; + } + if (content.includes('active') || content.includes('production')) { + return 'Active'; + } + return 'Unknown'; +}; + +const extractFirstProductLinks = (content: string, limit: number) => { + const patterns = [ + /https?:\/\/www\.digikey\.com\/en\/products\/detail\/[^\s"']+/gi, + /https?:\/\/www\.mouser\.com\/ProductDetail\/[^\s"']+/gi, + /https?:\/\/www\.newark\.com\/[^\s"']+/gi, + /https?:\/\/www\.farnell\.com\/[^\s"']+/gi, + /https?:\/\/www\.arrow\.com\/en\/products\/[^\s"']+/gi, + ]; + + const links: string[] = []; + for (const pattern of patterns) { + const matches = content.match(pattern) || []; + for (const match of matches) { + if (!links.includes(match)) { + links.push(match); + } + if (links.length >= limit) { + return links; + } + } + } + + return links; +}; + +const extractLinksFromHtml = (html: string, limit: number) => { + const links: string[] = []; + const hrefMatches = html.match(/href="([^"]+)"/gi) || []; + for (const href of hrefMatches) { + const urlMatch = href.match(/href="([^"]+)"/i); + if (!urlMatch?.[1]) continue; + const url = urlMatch[1]; + if (!url.startsWith('http')) continue; + links.push(url); + if (links.length >= limit * 4) { + break; + } + } + return extractFirstProductLinks(links.join(' '), limit); +}; + +const inferSourceName = (url: string) => { + if (url.includes('digikey.com')) return 'DigiKey'; + if (url.includes('mouser.com')) return 'Mouser'; + if (url.includes('newark.com')) return 'Newark'; + if (url.includes('farnell.com')) return 'Farnell'; + if (url.includes('arrow.com')) return 'Arrow'; + return 'Unknown'; +}; + +const getFirstProductDetailUrl = (): string | null => { + if (typeof document === 'undefined' || typeof window === 'undefined') return null; + const sel = [ + 'a[href*="/en/products/detail/"]', + 'a[href*="/ProductDetail/"]', + 'a[href*="/product/"]', + 'a[href*="/en/products/"]', + ]; + for (const s of sel) { + const a = document.querySelector(s) as HTMLAnchorElement | null; + if (a?.href && (a.href.includes('digikey.com') || a.href.includes('mouser.com') || a.href.includes('newark.com') || a.href.includes('farnell.com') || a.href.includes('arrow.com'))) { + return a.href; + } + } + const allLinks = document.querySelectorAll('a[href]'); + for (let i = 0; i < allLinks.length; i++) { + const a = allLinks[i] as HTMLAnchorElement; + const h = a.href || ''; + if ((h.includes('digikey.com/en/products/detail/') || h.includes('mouser.com/ProductDetail/') || h.includes('newark.com/') || h.includes('farnell.com/') || h.includes('arrow.com/en/products/')) && !h.includes('/result?') && !h.includes('/search?')) return h; + } + return null; +}; + +interface DomExtract { + price: string | null; + availability: string | null; + lead_time_weeks?: number; +} + +const extractFromProductPage = (): DomExtract => { + const url = typeof window !== 'undefined' ? window.location.href : ''; + const result: DomExtract = { price: null, availability: null }; + const body = typeof document !== 'undefined' ? document.body : null; + if (!body) return result; + const text = body.innerText || ''; + + const parseLeadTimeFromText = (t: string): number | undefined => { + const standardLead = t.match(/standard\s*lead\s*time\s*:\s*(\d+)\s*(?:weeks?|wks?)/i); + if (standardLead) return parseInt(standardLead[1], 10); + const weekMatch = t.match(/(\d+)\s*(?:weeks?|wks?\.?)\s*(?:lead|ship|delivery)?/i); + if (weekMatch) return parseInt(weekMatch[1], 10); + const dayMatch = t.match(/(?:ships?\s*(?:in|within)|delivery\s*in|usually\s*ships?\s*within|within)\s*(\d+)(?:-\d+)?\s*(?:business\s*)?days?/i) + || t.match(/(\d+)(?:-\d+)?\s*(?:business\s*)?days?\s*(?:lead|ship|delivery|to\s*ship)?/i); + if (dayMatch) return Math.ceil(parseInt(dayMatch[1], 10) / 7); + return undefined; + }; + + const parseAvailabilityFromText = (t: string): string | null => { + const shipsIn = t.match(/ships?\s*in\s*(\d+)(?:-\d+)?\s*(?:business\s*)?days?/i); + if (shipsIn) return `Ships in ${shipsIn[1]} days`; + const inStock = t.match(/([\d,]+)\s*in\s*stock/i); + if (inStock) return `${inStock[1]} in stock`; + const availableIn = t.match(/available\s*in\s*(\d+)\s*days?/i); + if (availableIn) return `Available in ${availableIn[1]} days`; + const usuallyShips = t.match(/usually\s*ships?\s*(?:in|within)\s*(\d+)(?:-\d+)?\s*days?/i); + if (usuallyShips) return `Ships in ${usuallyShips[1]} days`; + if (t.includes('In Stock') || t.includes('in stock')) return 'In Stock'; + if (t.includes('Backorder') || t.includes('back order')) return 'Backorder'; + return null; + }; + + if (url.includes('digikey.com')) { + const priceMatch = text.match(/\$\s*(\d+\.\d{2})/) || text.match(/(\d+\.\d{2})\s*USD/); + if (priceMatch) result.price = priceMatch[1]; + result.availability = parseAvailabilityFromText(text); + result.lead_time_weeks = parseLeadTimeFromText(text); + const priceCell = document.querySelector('[data-testid="product-detail-price"], .product-detail-price, [class*="Pricing"], [data-product-id] [class*="price"]'); + if (priceCell && !result.price) { + const m = priceCell.textContent?.match(/(\d+\.\d{2})/); + if (m) result.price = m[1]; + } + const stockEl = document.querySelector('[class*="quantity"], [class*="stock"], [class*="availability"]'); + if (stockEl && !result.availability) { + const stockText = stockEl.textContent || ''; + result.availability = parseAvailabilityFromText(stockText) || (stockText.includes('Stock') ? 'In Stock' : null); + } + } + if (url.includes('mouser.com')) { + const priceMatch = text.match(/\$\s*(\d+\.\d{2})/) || text.match(/(\d+\.\d{2})\s*USD/); + if (priceMatch) result.price = priceMatch[1]; + result.availability = parseAvailabilityFromText(text); + result.lead_time_weeks = parseLeadTimeFromText(text); + const priceEl = document.querySelector('.price, [class*="product-price"], [class*="Price"], [data-testid*="price"]'); + if (priceEl && !result.price) { + const m = priceEl.textContent?.match(/(\d+\.\d{2})/); + if (m) result.price = m[1]; + } + const shipEl = document.querySelector('[class*="ship"], [class*="delivery"], [class*="lead-time"]'); + if (shipEl && result.lead_time_weeks === undefined) { + const w = parseLeadTimeFromText(shipEl.textContent || ''); + if (w !== undefined) result.lead_time_weeks = w; + } + } + if (url.includes('newark.com') || url.includes('farnell.com')) { + const priceMatch = text.match(/\$\s*(\d+\.\d{2})/) || text.match(/(\d+\.\d{2})\s*USD/); + if (priceMatch) result.price = priceMatch[1]; + result.availability = parseAvailabilityFromText(text); + result.lead_time_weeks = parseLeadTimeFromText(text); + const priceEl = document.querySelector('[class*="price"], [class*="Price"]'); + if (priceEl && !result.price) { + const m = priceEl.textContent?.match(/(\d+\.\d{2})/); + if (m) result.price = m[1]; + } + } + if (url.includes('arrow.com')) { + const priceMatch = text.match(/\$\s*(\d+\.\d{2})/) || text.match(/(\d+\.\d{2})\s*USD/); + if (priceMatch) result.price = priceMatch[1]; + result.availability = parseAvailabilityFromText(text); + result.lead_time_weeks = parseLeadTimeFromText(text); + } + return result; +}; + +const extractManufacturer = (content: string) => { + const knownMfrs = [ + 'stmicroelectronics', + 'texas instruments', + 'analog devices', + 'microchip', + 'onsemi', + 'nexperia', + 'infineon', + 'renesas', + 'nxp', + 'ti.com', + 'stmicro', + ]; + + for (const mfr of knownMfrs) { + if (content.includes(mfr)) { + if (mfr === 'ti.com') return 'Texas Instruments'; + if (mfr === 'stmicro') return 'STMicroelectronics'; + return mfr + .split(' ') + .map(word => word.charAt(0).toUpperCase() + word.slice(1)) + .join(' '); + } + } + + return ''; +}; + +const CACHE_TTL_MS = 0; +const MAX_CACHE_ENTRIES = 200; +const SOURCE_TIMEOUT_MS = 100000; +const FALLBACK_AVAILABILITY = 'Listed'; +const FALLBACK_LIFECYCLE = 'Active'; +const FALLBACK_PRICE = 'Varies'; +const SOURCE_RETRIES = 2; +const SOURCE_CONCURRENCY = 3; +const SCAN_TIMEOUT_MS = 120000; + +const scanCache = new Map(); + +const getDirectSearchUrls = (partNumber: string) => [ + { name: 'DigiKey', url: `https://www.digikey.com/en/products/result?keywords=${encodeURIComponent(partNumber)}` }, + { name: 'Mouser', url: `https://www.mouser.com/c/?q=${encodeURIComponent(partNumber)}` }, + { name: 'Newark', url: `https://www.newark.com/search?st=${encodeURIComponent(partNumber)}` }, + { name: 'Farnell', url: `https://www.farnell.com/search?st=${encodeURIComponent(partNumber)}` }, + { name: 'Arrow', url: `https://www.arrow.com/en/products/search?q=${encodeURIComponent(partNumber)}` }, +]; + +export async function POST(request: Request) { + const agentLogs: string[] = []; + const logPrefix = '[Tinyfish]'; + let part_number = ""; + let manufacturer = ""; + + try { + const body = await request.json(); + part_number = String(body.part_number ?? '').trim(); + manufacturer = String(body.manufacturer ?? '').trim(); + + if (!part_number) { + return NextResponse.json({ error: "Part number required" }, { status: 400 }); + } + if (part_number.length > 64) { + return NextResponse.json({ error: "Part number too long" }, { status: 400 }); + } + if (!/^[A-Za-z0-9._/+\\-]+$/.test(part_number)) { + return NextResponse.json({ error: "Part number contains invalid characters" }, { status: 400 }); + } + + const scannedAt = new Date().toISOString(); + const timestamp = scannedAt.split('T')[0]; + const cacheKey = `${part_number.toLowerCase()}|${(manufacturer || '').toLowerCase()}`; + if (CACHE_TTL_MS > 0) { + const cached = scanCache.get(cacheKey); + if (cached && cached.expires > Date.now()) { + return NextResponse.json({ + ...cached.result, + agent_logs: [...(cached.result.agent_logs || []), `${logPrefix} Cache hit. Returning recent scan.`], + }); + } + } + let status = "Unknown"; + let riskLevel = "MEDIUM"; + let riskScore = 50; + let reasoning = "Gathering live data..."; + let evidence: string[] = []; + let leadTime = 0; + let moq = 0; + let availability = "Unknown"; + let priceEstimate = "N/A"; + const detectedSources: string[] = []; + const directSourcesChecked: string[] = []; + const directSourcesBlocked: string[] = []; + let uniqueSources: string[] = []; + let sourceSignals: SourceSignal[] = []; + let signalsSummary: SignalSummary | undefined; + let confidence: ConfidenceInfo | undefined; + const scanStartTime = Date.now(); + let scanTimedOut = false; + + agentLogs.push(`${logPrefix} Initializing tracker for part: ${part_number}`); + + if (process.env.MINO_API_KEY) { + agentLogs.push(`${logPrefix} System Status: Successfully detected MINO_API_KEY. Secure link established.`); + } else { + agentLogs.push(`${logPrefix} Note: No MINO_API_KEY detected. Running in limited scope mode.`); + } + + let pageContent1 = ""; + let pageContent2 = ""; + let searchHtml1 = ""; + let searchHtml2 = ""; + let combinedContent = ""; + let directContent = ""; + const browserSnippets: Record = {}; + const browserStructuredSignals: Record = {}; + + try { + agentLogs.push(`${logPrefix} Initializing crawler...`); + + let browser: Browser | undefined; + const isWindows = process.platform === 'win32'; + const isServerless = (process.env.VERCEL || process.env.AWS_EXECUTION_ENV || process.cwd().includes('/var/task')) && !isWindows; + + try { + if (isServerless) { + agentLogs.push(`${logPrefix} Detected cloud environment (Linux). Launching optimized browser...`); + const puppeteerCore = await import('puppeteer-core'); + const chromium = (await import('@sparticuz/chromium')).default; + + // @ts-ignore + const executablePath = await chromium.executablePath(); + + browser = await puppeteerCore.launch({ + // @ts-ignore + args: chromium.args, + // @ts-ignore + defaultViewport: chromium.defaultViewport, + executablePath, + // @ts-ignore + headless: chromium.headless, + }); + } else { + agentLogs.push(`${logPrefix} Detected local environment (${process.platform}). Launching standard browser...`); + browser = await puppeteer.launch({ + headless: true, + args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage'] + }); + } + + const page = await browser.newPage(); + agentLogs.push(`${logPrefix} Step 1/2: Scanning Distribution Channels (DigiKey, Mouser, Newark)...`); + const query1 = `${part_number} price stock distributor`; + const searchUrl1 = `https://duckduckgo.com/?q=${encodeURIComponent(query1)}&ia=web`; + + await page.goto(searchUrl1, { waitUntil: 'networkidle2', timeout: 100000 }); + pageContent1 = await page.evaluate(() => document.body.innerText); + searchHtml1 = await page.content(); + evidence.push(searchUrl1); + + agentLogs.push(`${logPrefix} Step 2/2: Mapping Lifecycle Status...`); + const query2 = `${part_number} lifecycle status obsolescence`; + const searchUrl2 = `https://duckduckgo.com/?q=${encodeURIComponent(query2)}&ia=web`; + + await page.goto(searchUrl2, { waitUntil: 'networkidle2', timeout: 100000 }); + pageContent2 = await page.evaluate(() => document.body.innerText); + searchHtml2 = await page.content(); + evidence.push(searchUrl2); + + const directSearchUrls = getDirectSearchUrls(part_number); + + for (const source of directSearchUrls) { + if (Date.now() - scanStartTime > SCAN_TIMEOUT_MS) { + scanTimedOut = true; + agentLogs.push(`${logPrefix} Scan timed out; returning partial results.`); + break; + } + try { + await page.goto(source.url, { waitUntil: 'networkidle2', timeout: 100000 }); + let domFromSearch: ParsedSignals = {}; + try { + const searchDom = await page.evaluate(extractFromProductPage) as DomExtract; + if (searchDom?.price) { + const n = parseFloat(searchDom.price); + if (Number.isFinite(n)) { + domFromSearch.price_estimate = `USD ${n.toFixed(2)}`; + domFromSearch.price_value = n; + } + } + if (searchDom?.availability) domFromSearch.availability = searchDom.availability; + if (typeof searchDom?.lead_time_weeks === 'number') domFromSearch.lead_time_weeks = searchDom.lead_time_weeks; + } catch { + // optional + } + const productDetailUrl = await page.evaluate(getFirstProductDetailUrl) as string | null; + if (productDetailUrl) { + try { + await page.goto(productDetailUrl, { waitUntil: 'networkidle2', timeout: 100000 }); + agentLogs.push(`${logPrefix} Followed to product page for ${source.name}.`); + } catch { + // stay on search page if product page fails + } + } + let domFromProduct: ParsedSignals = {}; + try { + const productDom = await page.evaluate(extractFromProductPage) as DomExtract; + if (productDom?.price) { + const n = parseFloat(productDom.price); + if (Number.isFinite(n)) { + domFromProduct.price_estimate = `USD ${n.toFixed(2)}`; + domFromProduct.price_value = n; + } + } + if (productDom?.availability) domFromProduct.availability = productDom.availability; + if (typeof productDom?.lead_time_weeks === 'number') domFromProduct.lead_time_weeks = productDom.lead_time_weeks; + } catch { + // optional + } + const domSignalsSearch = mergeSignals(domFromProduct, domFromSearch); + const snippet = await page.evaluate(() => document.body.innerText); + const jsonLd = await page.$$eval('script[type="application/ld+json"]', (elements) => + elements.map((element) => element.textContent || '') + ); + const structuredSignals = parseJsonLdSignals(jsonLd); + if (snippet) { + browserSnippets[source.name] = snippet.replace(/\s+/g, ' ').substring(0, 5000); + } + const mergedSearch = mergeSignals(structuredSignals, domSignalsSearch); + if (mergedSearch.price_estimate || mergedSearch.availability || mergedSearch.lead_time_weeks) { + browserStructuredSignals[source.name] = mergedSearch; + } else if (structuredSignals.price_estimate || structuredSignals.availability || structuredSignals.lead_time_weeks) { + browserStructuredSignals[source.name] = structuredSignals; + } + } catch (e) { + // Ignore and allow lightweight fetch to try. + } + } + + const productLinks = extractLinksFromHtml(`${searchHtml1} ${searchHtml2}`, 5); + if (productLinks.length) { + agentLogs.push(`${logPrefix} Found ${productLinks.length} product links from search results.`); + } + + for (const link of productLinks) { + if (Date.now() - scanStartTime > SCAN_TIMEOUT_MS) { + scanTimedOut = true; + agentLogs.push(`${logPrefix} Scan timed out; returning partial results.`); + break; + } + try { + await page.goto(link, { waitUntil: 'networkidle2', timeout: 100000 }); + const snippet = await page.evaluate(() => document.body.innerText); + const jsonLd = await page.$$eval('script[type="application/ld+json"]', (elements) => + elements.map((element) => element.textContent || '') + ); + const structuredSignals = parseJsonLdSignals(jsonLd); + const sourceName = inferSourceName(link); + if (snippet) { + browserSnippets[sourceName] = [ + browserSnippets[sourceName], + snippet.replace(/\s+/g, ' ').substring(0, 5000), + ] + .filter(Boolean) + .join(' '); + evidence.push(link); + detectedSources.push(sourceName); + directSourcesChecked.push(sourceName); + } + let domSignals: ParsedSignals = {}; + try { + const dom = await page.evaluate(extractFromProductPage) as DomExtract; + if (dom?.price) { + const n = parseFloat(dom.price); + if (Number.isFinite(n)) { + domSignals.price_estimate = `USD ${n.toFixed(2)}`; + domSignals.price_value = n; + } + } + if (dom?.availability) domSignals.availability = dom.availability; + if (typeof dom?.lead_time_weeks === 'number') domSignals.lead_time_weeks = dom.lead_time_weeks; + } catch { + // DOM extraction optional + } + const mergedStructured = mergeSignals(structuredSignals, domSignals); + if (mergedStructured.price_estimate || mergedStructured.availability) { + browserStructuredSignals[sourceName] = mergeSignals( + mergedStructured, + browserStructuredSignals[sourceName] + ); + } else if (structuredSignals.price_estimate || structuredSignals.availability) { + browserStructuredSignals[sourceName] = mergeSignals( + structuredSignals, + browserStructuredSignals[sourceName] + ); + } + } catch (e) { + // ignore product page failures + } + } + + await browser.close(); + browser = undefined; + agentLogs.push(`${logPrefix} Browser session closed. Passing to risk assessment.`); + + } catch (browserError) { + agentLogs.push(`${logPrefix} Note: Environment blocked browser launch. Engaging lightweight tracking engine...`); + if (browser) { + try { + await browser.close(); + } catch { + // ignore browser close failures + } + browser = undefined; + } + + const fetchSnippet = async (query: string) => { + const url = `https://duckduckgo.com/html/?q=${encodeURIComponent(query)}`; + try { + const res = await fetch(url, { headers: { 'User-Agent': 'Mozilla/5.0' } }); + const text = await res.text(); + return text.replace(/<[^>]*>?/gm, ' ').substring(0, 5000); + } catch (e) { + return ""; + } + }; + + pageContent1 = await fetchSnippet(`${part_number} price stock distributor`); + pageContent2 = await fetchSnippet(`${part_number} lifecycle status`); + + if (pageContent1 || pageContent2) { + agentLogs.push(`${logPrefix} Signals captured via lightweight engine. Accuracy may be reduced.`); + evidence.push(`https://duckduckgo.com/html/?q=${encodeURIComponent(part_number)}`); + } else { + agentLogs.push(`${logPrefix} ERROR: Lightweight engine also blocked by network policy.`); + } + } + + const directSearchUrls = getDirectSearchUrls(part_number); + + const sourceFetches = await fetchSourcesWithLimit( + directSearchUrls, + SOURCE_CONCURRENCY, + SOURCE_TIMEOUT_MS, + SOURCE_RETRIES, + browserSnippets, + browserStructuredSignals + ); + + sourceSignals = sourceFetches.map((item) => item.signal); + + for (const result of sourceFetches) { + if (result.snippet) { + directContent += ` ${result.snippet}`; + } + if (result.signal.ok) { + evidence.push(result.signal.url); + detectedSources.push(result.signal.name); + directSourcesChecked.push(result.signal.name); + } else { + directSourcesBlocked.push(result.signal.name); + } + + const signalDetails = [ + result.signal.availability ? `availability=${result.signal.availability}` : null, + result.signal.lifecycle_status ? `lifecycle=${result.signal.lifecycle_status}` : null, + result.signal.lead_time_weeks ? `lead=${result.signal.lead_time_weeks}w` : null, + result.signal.price_estimate ? `price=${result.signal.price_estimate}` : null, + ].filter(Boolean); + + if (signalDetails.length > 0) { + agentLogs.push(`${logPrefix} ${result.signal.name} signals: ${signalDetails.join(', ')}`); + } else if (result.signal.ok) { + agentLogs.push(`${logPrefix} ${result.signal.name} responded without explicit signals.`); + } + } + + const lowerContent1 = pageContent1.toLowerCase(); + const lowerContent2 = pageContent2.toLowerCase(); + combinedContent = `${lowerContent1} ${lowerContent2} ${directContent.toLowerCase()}`; + + if (combinedContent.includes("digikey")) detectedSources.push("DigiKey"); + if (combinedContent.includes("mouser")) detectedSources.push("Mouser"); + if (combinedContent.includes("newark") || combinedContent.includes("farnell")) detectedSources.push("Newark"); + if (combinedContent.includes("ti.com")) detectedSources.push("TI Direct"); + if (combinedContent.includes("arrow.com")) detectedSources.push("Arrow"); + + uniqueSources = Array.from(new Set(detectedSources)); + + if (uniqueSources.length > 0) { + agentLogs.push(`${logPrefix} identified ${uniqueSources.length} sources: ${uniqueSources.join(', ')}`); + } else if (!pageContent1 && !pageContent2) { + agentLogs.push(`${logPrefix} Note: No major distributors identified in top results.`); + } + + const sourceAvailability = sourceSignals.map((signal) => signal.availability).filter(Boolean) as string[]; + const sourceLifecycle = sourceSignals.map((signal) => signal.lifecycle_status).filter(Boolean) as string[]; + const sourceLeadTimes = sourceSignals + .map((signal) => signal.lead_time_weeks) + .filter((value): value is number => typeof value === 'number'); + const sourcePriceValues = sourceSignals + .map((signal) => signal.price_estimate) + .filter(Boolean) + .map((label) => parsePrice(label || '')) + .filter((value): value is { value: number; label: string } => Boolean(value)); + + const availabilitySummary = pickPreferred(sourceAvailability, availabilityPriority); + const lifecycleSummary = pickPreferred(sourceLifecycle, lifecyclePriority); + const leadTimeSummary = sourceLeadTimes.length ? Math.max(...sourceLeadTimes) : undefined; + const priceSummary = sourcePriceValues.length + ? sourcePriceValues.reduce((lowest, current) => (current.value < lowest.value ? current : lowest)) + : undefined; + + const availabilityDetailFromContent = parseAvailabilityDays(combinedContent); + const hasDetailAvailability = (s: string) => /ships?\s*in\s*\d+\s*days?/i.test(s) || /\d+(\s*,?\d*)\s*in\s*stock/i.test(s) || /available\s*in\s*\d+\s*days?/i.test(s); + const firstDetailAvailability = sourceAvailability.find(hasDetailAvailability) ?? availabilityDetailFromContent; + + if (firstDetailAvailability) { + availability = firstDetailAvailability; + agentLogs.push(`${logPrefix} Availability (detail): ${availability}`); + } else if (availabilitySummary !== 'Unknown') { + availability = availabilitySummary; + } + if (lifecycleSummary !== 'Unknown') { + status = lifecycleSummary; + } + if (leadTimeSummary) { + leadTime = leadTimeSummary; + agentLogs.push(`${logPrefix} Lead time: ${leadTime} weeks.`); + } + if (priceSummary) { + priceEstimate = priceSummary.label; + agentLogs.push(`${logPrefix} Market price: ${priceEstimate}`); + } + + const availabilityGuess = availability === 'Unknown' ? inferAvailability(combinedContent) : availability; + if (availabilityGuess !== 'Unknown' && availability === 'Unknown') { + availability = availabilityGuess; + agentLogs.push(`${logPrefix} Availability heuristic: ${availability}`); + } + + const lifecycleGuess = inferLifecycle(combinedContent); + if (lifecycleGuess !== 'Unknown') { + status = lifecycleGuess; + agentLogs.push(`${logPrefix} Lifecycle heuristic: ${status}`); + } + + if (leadTime === 0 && combinedContent.includes('week')) { + const match = combinedContent.match(/(\d+)\s+weeks?/); + if (match) { + leadTime = parseInt(match[1], 10); + agentLogs.push(`${logPrefix} Data: Lead time estimate: ${leadTime} weeks.`); + } + } + if (leadTime === 0) { + const leadFromContent = parseLeadTime(combinedContent); + if (leadFromContent !== undefined) { + leadTime = leadFromContent; + agentLogs.push(`${logPrefix} Lead time from content: ${leadTime} weeks.`); + } + } + + if (priceEstimate === 'N/A') { + const priceFallback = parsePrice(combinedContent); + if (priceFallback) { + priceEstimate = priceFallback.label; + agentLogs.push(`${logPrefix} Pricing heuristic: ${priceEstimate}`); + } + } + + } catch (error) { + console.error("Mino Tracker Error:", error); + status = "Error"; + agentLogs.push(`${logPrefix} ERROR: Tracker failed. ${error instanceof Error ? error.message : String(error)}`); + } + + const signalsCount = sourceSignals.filter((signal) => + Boolean(signal.availability || signal.lifecycle_status || signal.lead_time_weeks || signal.price_estimate) + ).length; + const sourcesOk = sourceSignals.filter((signal) => signal.ok).length; + confidence = computeConfidence(sourcesOk, signalsCount); + const hasAnySignals = uniqueSources.length > 0 || Boolean(pageContent1 || pageContent2 || directContent); + signalsSummary = { + availability: hasAnySignals && availability === 'Unknown' ? FALLBACK_AVAILABILITY : availability, + lifecycle_status: hasAnySignals && status === 'Unknown' ? FALLBACK_LIFECYCLE : status, + lead_time_weeks: leadTime || undefined, + price_estimate: hasAnySignals && priceEstimate === 'N/A' ? FALLBACK_PRICE : priceEstimate, + }; + + const hasSignals = Boolean(pageContent1 || pageContent2 || directContent || signalsCount > 0); + + if (!hasSignals) { + reasoning = 'No verified signals found in live sources for this part number.'; + riskScore = 50; + riskLevel = 'MEDIUM'; + } else { + if (!manufacturer) { + manufacturer = extractManufacturer(combinedContent); + } + + if (availability === 'Unknown' && status === 'Unknown') { + reasoning = 'Signals found, but availability and lifecycle were not explicitly stated.'; + } else if (availability !== 'Unknown' || status !== 'Unknown') { + reasoning = `Signals found for ${availability !== 'Unknown' ? `availability: ${availability}` : 'availability'}` + + `${status !== 'Unknown' ? ` and lifecycle: ${status}` : ''}.`; + } + } + + const lastSnapshot = getLastSnapshot(part_number); + + if (lastSnapshot) { + agentLogs.push(`${logPrefix} History: Comparing with entry from ${lastSnapshot.timestamp}...`); + + if (lastSnapshot.lifecycle_status !== status && status !== "Unknown") { + riskScore = 95; + riskLevel = "HIGH"; + reasoning = `CRITICAL SHIFT: Lifecycle changed from ${lastSnapshot.lifecycle_status} to ${status}. ${reasoning}`; + } else if (leadTime > (lastSnapshot.lead_time_weeks || 0) + 4 && leadTime > 0) { + riskScore = Math.max(riskScore, 75); + riskLevel = "HIGH"; + reasoning = `SUPPLY STRESS: Lead time spiked to ${leadTime} weeks. ${reasoning}`; + } + } + + if (status === "Obsolete") { + riskScore = 95; + riskLevel = "HIGH"; + } else if (status !== "Error" && status !== "Unknown") { + riskScore = riskScore === 0 ? 15 : riskScore; + riskLevel = riskScore > 70 ? "HIGH" : riskScore > 30 ? "MEDIUM" : "LOW"; + } + + const currentSnapshot: HistoricalSnapshot = { + timestamp, + lifecycle_status: status, + lead_time_weeks: leadTime, + moq: moq, + availability: availability, + risk_score: riskScore + }; + + try { + saveSnapshot(part_number, currentSnapshot); + } catch (e) { + const err = e instanceof Error ? e.message : String(e); + agentLogs.push(`${logPrefix} WARNING: Failed to record history snapshot. ${err}`); + } + + const fullHistory = getHistory(part_number); + const historyPoints = fullHistory.map(h => ({ + timestamp: h.timestamp, + score: h.risk_score || 50 + })); + + if (hasAnySignals) { + if (availability === 'Unknown') availability = FALLBACK_AVAILABILITY; + if (status === 'Unknown') status = FALLBACK_LIFECYCLE; + if (priceEstimate === 'N/A') priceEstimate = FALLBACK_PRICE; + } + + const leadTimeDays = parseLeadTimeDaysFromAvailability(availability); + + const result: ScanResult = { + part_number, + manufacturer: manufacturer || 'Unknown', + lifecycle_status: status, + lead_time_weeks: leadTime || undefined, + lead_time_days: leadTimeDays, + moq: moq, + availability: availability, + timestamp, + risk: { + score: riskScore, + level: riskLevel, + reasoning + }, + evidence_links: evidence, + price_estimate: priceEstimate, + sources: uniqueSources, + sources_checked: directSourcesChecked, + sources_blocked: directSourcesBlocked, + source_signals: sourceSignals, + signals: signalsSummary, + confidence, + scanned_at: scannedAt, + scan_duration_ms: Date.now() - scanStartTime, + scan_timed_out: scanTimedOut, + agent_logs: agentLogs, + history: historyPoints + }; + + if (CACHE_TTL_MS > 0) { + scanCache.set(cacheKey, { + expires: Date.now() + CACHE_TTL_MS, + result, + }); + while (scanCache.size > MAX_CACHE_ENTRIES) { + const oldestKey = scanCache.keys().next().value; + if (oldestKey) { + scanCache.delete(oldestKey); + } else { + break; + } + } + } + + return NextResponse.json(result); + + } catch (globalError) { + console.error("Global Scan API Error:", globalError); + const errMessage = globalError instanceof Error ? globalError.message : String(globalError); + agentLogs.push(`${logPrefix} CRITICAL ERROR: System failed. ${errMessage}`); + + return NextResponse.json({ + part_number: part_number || "Unknown", + manufacturer: manufacturer || "Unknown", + lifecycle_status: "Error", + timestamp: new Date().toISOString().split('T')[0], + risk: { + score: 100, + level: "HIGH", + reasoning: `Critical failure during scan: ${errMessage}` + }, + evidence_links: [], + agent_logs: agentLogs + }, { status: 500 }); + } +} diff --git a/silicon-signal/src/app/favicon.ico b/silicon-signal/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/silicon-signal/src/app/globals.css b/silicon-signal/src/app/globals.css new file mode 100644 index 0000000..79e2977 --- /dev/null +++ b/silicon-signal/src/app/globals.css @@ -0,0 +1,111 @@ +@import "tailwindcss"; + +@theme { + --color-background: hsl(0 0% 4%); + --color-foreground: hsl(0 0% 85%); + --font-sans: 'Inter', system-ui, sans-serif; + --font-mono: 'JetBrains Mono', monospace; + + --color-border: hsl(0 0% 14%); + --color-border-subtle: hsl(0 0% 10%); + + --color-accent: hsl(190 40% 45%); + --color-accent-glow: hsl(190 50% 50%); + + --color-signal: hsl(38 70% 50%); + --color-signal-glow: hsl(38 80% 55%); + + --color-critical: hsl(0 50% 45%); + --color-success: hsl(145 40% 40%); + + --color-card: hsl(0 0% 7%); + --color-foreground-muted: hsl(0 0% 55%); + --color-foreground-subtle: hsl(0 0% 35%); +} + +@layer base { + :root { + /* Core greys - graphite to silver spectrum */ + --background: 0 0% 4%; + --background-elevated: 0 0% 6%; + --background-overlay: 0 0% 8%; + --foreground: 0 0% 85%; + --foreground-muted: 0 0% 55%; + --foreground-subtle: 0 0% 35%; + + /* Card surfaces - layered depth */ + --card: 0 0% 7%; + --card-foreground: 0 0% 85%; + --card-border: 0 0% 12%; + + /* Accent - Subtle cyan for data highlights */ + --accent: 190 40% 45%; + --accent-foreground: 190 40% 90%; + --accent-glow: 190 50% 50%; + + /* Signal colors - amber for warnings/alerts */ + --signal: 38 70% 50%; + --signal-foreground: 38 70% 95%; + --signal-glow: 38 80% 55%; + + /* Critical - muted red for high-risk */ + --critical: 0 50% 45%; + --critical-foreground: 0 50% 95%; + + /* Success - muted green */ + --success: 145 40% 40%; + --success-foreground: 145 40% 90%; + + --border: 0 0% 14%; + --border-subtle: 0 0% 10%; + + --glass-bg: 0 0% 100% / 0.03; + --glass-border: 0 0% 100% / 0.08; + --glass-highlight: 0 0% 100% / 0.12; + + --trace-primary: 0 0% 25%; + --trace-active: 190 50% 50%; + } + + body { + background-color: hsl(var(--background)); + color: hsl(var(--foreground)); + } +} + +@layer components { + + /* Glass panel effect */ + .glass-panel { + background: hsl(var(--card) / 0.5); + backdrop-filter: blur(24px); + border: 1px solid hsl(var(--glass-border)); + box-shadow: + 0 0 0 1px hsl(var(--glass-highlight)), + 0 8px 32px -8px hsl(0 0% 0% / 0.5), + inset 0 1px 0 hsl(var(--glass-highlight)); + } + + /* Grid overlay for technical feel */ + .grid-overlay { + background-image: + linear-gradient(hsl(var(--border-subtle)) 1px, transparent 1px), + linear-gradient(90deg, hsl(var(--border-subtle)) 1px, transparent 1px); + background-size: 40px 40px; + } + + .heading-technical { + font-weight: 500; + letter-spacing: 0.15em; + text-transform: uppercase; + color: hsl(var(--foreground-muted)); + font-size: 0.7rem; + } + + .text-gradient-silver { + background: linear-gradient(135deg, hsl(0 0% 70%), hsl(0 0% 90%), hsl(0 0% 70%)); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + } +} \ No newline at end of file diff --git a/silicon-signal/src/app/layout.tsx b/silicon-signal/src/app/layout.tsx new file mode 100644 index 0000000..884228a --- /dev/null +++ b/silicon-signal/src/app/layout.tsx @@ -0,0 +1,29 @@ +import type { Metadata } from "next"; +import { Outfit } from "next/font/google"; +import "./globals.css"; + +const outfit = Outfit({ + variable: "--font-outfit", + subsets: ["latin"], +}); + +export const metadata: Metadata = { + title: "SiliconSignal", + description: "Semiconductor supply chain tracking and risk analytics.", +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + + {children} + + + ); +} diff --git a/silicon-signal/src/app/page.tsx b/silicon-signal/src/app/page.tsx new file mode 100644 index 0000000..aeba5ee --- /dev/null +++ b/silicon-signal/src/app/page.tsx @@ -0,0 +1,270 @@ +'use client'; + +import { useState } from 'react'; +import { motion, AnimatePresence } from "framer-motion"; +import Header from "@/components/Header"; +import SiliconWafer from "@/components/SiliconWafer"; +import SignalOverview from "@/components/SignalOverview"; +import VendorIntelligence from "@/components/VendorIntelligence"; +import HistoricalTrend from "@/components/HistoricalTrend"; +import SystemArchitecture from "@/components/SystemArchitecture"; +import PlatformView from "@/components/PlatformView"; + +const Index = () => { + const [showPlatform, setShowPlatform] = useState(false); + + return ( +
+
+ +
+ + + {showPlatform ? ( + + + + ) : ( + +
+ + +
+ + + Semiconductor Analytics + + + + Supply chain tracking +
+ at wafer-level scale +
+ + + Real-time risk signals, vendor data, and historical + analytics for semiconductor procurement workflows. + + + + + +
+ + +
+ +
+
+ +
+
+ + System Dashboard +

+ Operations Center for Hardware Data +

+
+ +
+ + + + + + + + + + + + + + + +
+
+
+ +
+
+ + Capabilities +

+ Engineered for Precision +

+
+ +
+ {[ + { + title: "Multi-Source Tracking", + description: + "Aggregate signals from vendor APIs, market feeds, and secondary sources in real-time.", + icon: ( + + + + ), + }, + { + title: "Risk Assessment", + description: + "Automated analysis identifies potential supply disruptions before they impact your pipeline.", + icon: ( + + + + ), + }, + { + title: "Technical Insights", + description: + "Decision-grade data for procurement strategy and vendor diversification.", + icon: ( + + + + + ), + }, + ].map((feature, i) => ( + +
{feature.icon}
+

+ {feature.title} +

+

+ {feature.description} +

+
+ ))} +
+
+
+ + {/* Footer */} +
+
+
+
+ + © 2026 SiliconSignal + +
+
+
+
+
+ )} +
+
+ ); +}; + +export default Index; diff --git a/silicon-signal/src/components/Dashboard.tsx b/silicon-signal/src/components/Dashboard.tsx new file mode 100644 index 0000000..c497e71 --- /dev/null +++ b/silicon-signal/src/components/Dashboard.tsx @@ -0,0 +1,87 @@ +'use client'; + +import { useState } from 'react'; +import { ScanForm } from './ScanForm'; +import { ScanResultCard } from './ScanResultCard'; +import { ScanResult } from '../types'; +import { Layers } from 'lucide-react'; + +export default function Dashboard() { + const [result, setResult] = useState(null); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(''); + const [lastPart, setLastPart] = useState(''); + const [lastMfr, setLastMfr] = useState(''); + + const handleScan = async (part: string, mfr?: string) => { + setLastPart(part); + setLastMfr(mfr ?? ''); + setLoading(true); + setError(''); + setResult(null); + + try { + const res = await fetch('/api/scan', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ part_number: part, manufacturer: mfr }), + }); + + const data = await res.json(); + if (!res.ok) { + throw new Error(data?.error || 'Scan failed'); + } + setResult(data); + } catch (err) { + const message = err instanceof Error ? err.message : 'Scan failed'; + setError(message); + } finally { + setLoading(false); + } + }; + + const handleRetry = () => { + if (lastPart) handleScan(lastPart, lastMfr || undefined); + }; + + return ( +
+
+
+ +
+

+ SiliconSignal +

+

+ Semiconductor Supply-Chain Analytics. Monitor disruptions across the grid. +

+
+ + + + {loading && ( +

+ Scanning distributors… +

+ )} + {error && ( +
+

{error}

+

Try a sample part (e.g. NE555, ATmega328P) or add the manufacturer.

+ {lastPart && ( + + )} +
+ )} + + {result && } +
+ ); +} diff --git a/silicon-signal/src/components/Header.tsx b/silicon-signal/src/components/Header.tsx new file mode 100644 index 0000000..37d905d --- /dev/null +++ b/silicon-signal/src/components/Header.tsx @@ -0,0 +1,18 @@ +import { CheckSquare } from 'lucide-react'; + +export default function Header() { + return ( +
+
window.location.href = '/'}> +
+ +
+ SiliconSignal +
+ + +
+
+
+ ); +} diff --git a/silicon-signal/src/components/HistoricalTrend.tsx b/silicon-signal/src/components/HistoricalTrend.tsx new file mode 100644 index 0000000..d9eb106 --- /dev/null +++ b/silicon-signal/src/components/HistoricalTrend.tsx @@ -0,0 +1,100 @@ +import { motion } from 'framer-motion'; +import { ScanResult } from '../types'; + +export default function HistoricalTrend({ result }: { result: ScanResult | null }) { + + const history = result?.history || []; + + const points = history.length > 1 ? history.map((h, i) => { + const x = (i / (history.length - 1)) * 240 + 20; + const y = 90 - (h.score / 100) * 80; + return { x, y }; + }) : []; + + const pathData = points.length > 0 + ? `M ${points[0].x},${points[0].y} ` + points.slice(1).map(p => `L ${p.x},${p.y}`).join(' ') + : ""; + + return ( +
+
+

SUPPLY RISK TREND

+ + {history.length} DATA POINTS + +
+ +
+ {points.length > 0 ? ( + + + + + + + + + + + + + + + + + + + ) : ( +
+
+

Insufficient Time-Series Data

+

Trends will generate after multiple scans of this part.

+
+ )} +
+ +
+ {history.length > 1 ? ( + <> + {history[0].timestamp} + {history[history.length - 1].timestamp} + + ) : ( + T-MINUS 00:00:00 + )} +
+ +
+
+

Peak Risk

+

{history.length > 0 ? Math.max(...history.map(h => h.score)) : '--'}

+
+
+

Floor

+

{history.length > 0 ? Math.min(...history.map(h => h.score)) : '--'}

+
+
+

Avg

+

+ {history.length > 0 ? Math.round(history.reduce((a, b) => a + b.score, 0) / history.length) : '--'} +

+
+
+
+ ); +} diff --git a/silicon-signal/src/components/PlatformView.tsx b/silicon-signal/src/components/PlatformView.tsx new file mode 100644 index 0000000..7451397 --- /dev/null +++ b/silicon-signal/src/components/PlatformView.tsx @@ -0,0 +1,135 @@ +'use client'; + +import { useState } from 'react'; +import clsx from 'clsx'; +import { ScanForm } from './ScanForm'; +import { ScanResultCard } from './ScanResultCard'; +import { ScanResult } from '../types'; +import SignalOverview from './SignalOverview'; +import VendorIntelligence from './VendorIntelligence'; +import HistoricalTrend from './HistoricalTrend'; +import SystemArchitecture from './SystemArchitecture'; + +export default function PlatformView() { + const [result, setResult] = useState(null); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(''); + const [lastPart, setLastPart] = useState(''); + const [lastMfr, setLastMfr] = useState(''); + + const handleScan = async (part: string, mfr?: string) => { + setLastPart(part); + setLastMfr(mfr ?? ''); + setLoading(true); + setError(''); + setResult(null); + + try { + const res = await fetch('/api/scan', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ part_number: part, manufacturer: mfr }), + }); + + const data = await res.json(); + if (!res.ok) { + throw new Error(data?.error || 'Scan failed'); + } + setResult(data); + } catch (err) { + const message = err instanceof Error ? err.message : 'Scan failed'; + setError(message); + } finally { + setLoading(false); + } + }; + + const handleRetry = () => { + if (lastPart) handleScan(lastPart, lastMfr || undefined); + }; + + return ( +
+
+
+

Active Data Scan

+ + {loading && ( +

+ Scanning distributors… +

+ )} + {error && ( +
+

[!ERROR] {error}

+

Try a sample part (e.g. NE555, ATmega328P) or add the manufacturer.

+ {lastPart && ( + + )} +
+ )} +
+ +
+
+ {result && ( +
+ +
+ )} +
+ +
+
+
+

SYSTEM SCAN LOGS

+
+
+ {loading && ( +

+ [Tinyfish] Scanning distributors… +

+ )} + {result?.agent_logs?.map((log, i) => ( +

+ {log} +

+ ))} + {!loading && !result && ( +

Awaiting telemetry request...

+ )} +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ ); +} diff --git a/silicon-signal/src/components/RiskBadge.tsx b/silicon-signal/src/components/RiskBadge.tsx new file mode 100644 index 0000000..9b7430e --- /dev/null +++ b/silicon-signal/src/components/RiskBadge.tsx @@ -0,0 +1,23 @@ +import clsx from 'clsx'; + +interface RiskBadgeProps { + level: string; + score: number; +} + +export function RiskBadge({ level, score }: RiskBadgeProps) { + const colors: Record = { + LOW: 'bg-emerald-500/10 text-emerald-400 border-emerald-500/20', + MEDIUM: 'bg-amber-500/10 text-amber-400 border-amber-500/20', + HIGH: 'bg-rose-500/10 text-rose-400 border-rose-500/20', + }; + + const colorClass = colors[level] || colors.MEDIUM; + + return ( +
+ {level} RISK + {score} +
+ ); +} diff --git a/silicon-signal/src/components/ScanForm.tsx b/silicon-signal/src/components/ScanForm.tsx new file mode 100644 index 0000000..e3e46bb --- /dev/null +++ b/silicon-signal/src/components/ScanForm.tsx @@ -0,0 +1,95 @@ +'use client'; + +import { useState } from 'react'; +import { Search, Loader2 } from 'lucide-react'; + +interface ScanFormProps { + onScan: (partNumber: string, manufacturer?: string) => void; + isLoading: boolean; +} + +const sampleParts = [ + { part: 'LM358', manufacturer: 'Texas Instruments' }, + { part: 'NE555', manufacturer: 'Texas Instruments' }, + { part: 'ATmega328P', manufacturer: 'Microchip' }, + { part: 'STM32F103C8T6', manufacturer: 'STMicroelectronics' }, + { part: 'ESP32-WROOM-32', manufacturer: 'Espressif' }, +]; + +export function ScanForm({ onScan, isLoading }: ScanFormProps) { + const [part, setPart] = useState(''); + const [mfr, setMfr] = useState(''); + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + if (part) onScan(part, mfr); + }; + + return ( +
+
+
+ + setPart(e.target.value)} + placeholder="e.g. STM32F103C8T6" + className="w-full bg-slate-900/50 border border-slate-700/50 rounded-lg px-4 py-3 text-white placeholder-slate-600 focus:outline-none focus:ring-1 focus:ring-cyan-500 transition-all font-mono" + required + aria-label="Part number" + /> +
+
+ + setMfr(e.target.value)} + placeholder="e.g. STMicroelectronics" + className="w-full bg-slate-900/50 border border-slate-700/50 rounded-lg px-4 py-3 text-white placeholder-slate-600 focus:outline-none focus:ring-1 focus:ring-cyan-500 transition-all" + aria-label="Manufacturer optional" + /> +
+ +
+
+
+ Commonly checked parts +

+ Click a part to fill the form. NE555, ATmega328P, and STM32F103C8T6 typically return lifecycle and availability from distributor scans. +

+
+ {sampleParts.map((sample) => ( + + ))} +
+

+ Use Traceability Evidence links in the result for price and lead time when not shown. Adding the manufacturer (e.g. Texas Instruments) can improve results. +

+
+
+
+ ); +} diff --git a/silicon-signal/src/components/ScanResultCard.tsx b/silicon-signal/src/components/ScanResultCard.tsx new file mode 100644 index 0000000..70ed1fb --- /dev/null +++ b/silicon-signal/src/components/ScanResultCard.tsx @@ -0,0 +1,192 @@ +import clsx from 'clsx'; +import { ScanResult } from '../types'; +import { RiskBadge } from './RiskBadge'; +import { ExternalLink, AlertTriangle, Calendar, CheckCircle, Activity, DollarSign, Globe } from 'lucide-react'; + +export function ScanResultCard({ result }: { result: ScanResult }) { + const isSparseData = (result.manufacturer === 'Unknown' || !result.manufacturer) && (!result.sources || result.sources.length === 0); + const confidenceClass = clsx( + 'px-2 py-1 rounded-full border text-[10px] uppercase tracking-wider', + result.confidence?.level === 'HIGH' && 'border-emerald-500/30 bg-emerald-500/10 text-emerald-200', + result.confidence?.level === 'MEDIUM' && 'border-amber-500/30 bg-amber-500/10 text-amber-200', + result.confidence?.level === 'LOW' && 'border-slate-600/30 bg-slate-800/40 text-slate-300', + !result.confidence && 'border-slate-600/30 bg-slate-800/40 text-slate-300' + ); + const scannedLabel = result.scanned_at + ? new Date(result.scanned_at).toLocaleString() + : result.timestamp; + + const durationSec = result.scan_duration_ms != null ? (result.scan_duration_ms / 1000).toFixed(1) : null; + + return ( +
+
+ +
+
+

+ {result.part_number} + {result.lifecycle_status === 'Active' ? ( + + ) : ( + + )} +

+

{result.manufacturer}

+
+ + Confidence {result.confidence ? `${result.confidence.score}%` : '—'} + + + Scanned {scannedLabel} + + {durationSec != null && ( + + Scan took {durationSec}s + + )} + {result.scan_timed_out && ( + + Partial (timed out) + + )} +
+
+ +
+ +
+
+

Lifecycle

+

{result.lifecycle_status}

+
+ +
+

Availability

+

+ {result.availability || 'Listed'} +

+
+ +
+

Lead Time

+

+ {result.lead_time_days ? `${result.lead_time_days} days` : result.lead_time_weeks ? `${result.lead_time_weeks} wks` : '—'} +

+
+ +
+

Market Price

+

+ {result.price_estimate ? (result.price_estimate.replace(/^USD\s+/i, '$').trim() || result.price_estimate) : 'Varies'} +

+
+
+ + {isSparseData && ( +
+ No distributor sources were found for {result.part_number}. Try adding the manufacturer, or use a sample part (e.g. NE555, ATmega328P, STM32F103C8T6) from the form. Use Traceability Evidence links below for price and lead time. +
+ )} + +
+
+

+ Technical Analysis +

+

+ {result.risk.reasoning} +

+
+ +
+

+ Data Sources +

+
+ {result.sources?.map((source, i) => ( + + {source} + + ))} + {(!result.sources || result.sources.length === 0) && ( + No distributor identifiers found. + )} +
+ {(result.sources_checked || result.sources_blocked) && ( +
+ Source Health +
+ {result.sources_checked?.map((source) => ( + + {source} ok + + ))} + {result.sources_blocked?.map((source) => ( + + {source} blocked + + ))} + {(!result.sources_checked || result.sources_checked.length === 0) && + (!result.sources_blocked || result.sources_blocked.length === 0) && ( + + No direct distributor responses. + + )} +
+
+ )} + {result.source_signals && result.source_signals.length > 0 && ( +
+ Source Signals +
+ {result.source_signals + .filter((signal) => signal.ok) + .map((signal) => ( +
+ {signal.name} + {signal.availability && Availability: {signal.availability}} + {signal.lifecycle_status && Lifecycle: {signal.lifecycle_status}} + {signal.lead_time_weeks && Lead: {signal.lead_time_weeks}w} + {signal.price_estimate && Price: {signal.price_estimate}} +
+ ))} + {result.source_signals.every((signal) => !signal.ok) && ( + + No structured signals parsed from direct sources. + + )} +
+
+ )} +
+
+ +
+

Traceability Evidence

+
+ {result.evidence_links.map((link, i) => ( + + Ref_{i + 1} + + ))} +
+
+
+ ); +} diff --git a/silicon-signal/src/components/SignalOverview.tsx b/silicon-signal/src/components/SignalOverview.tsx new file mode 100644 index 0000000..5bbc8cb --- /dev/null +++ b/silicon-signal/src/components/SignalOverview.tsx @@ -0,0 +1,50 @@ +import clsx from 'clsx'; +import { ScanResult } from '../types'; + +export default function SignalOverview({ result }: { result: ScanResult | null }) { + const metrics = result ? [ + { label: 'Supply Chain Index', value: 100 - result.risk.score, status: 'Active', color: (100 - result.risk.score) > 70 ? 'bg-success' : 'bg-signal' }, + { label: 'Lead Time Risk', value: result.risk.score, status: result.risk.level, color: result.risk.level === 'HIGH' ? 'bg-critical' : 'bg-signal' }, + { label: 'Data Confidence', value: 95, status: 'Verified', color: 'bg-success' }, + ] : []; + + return ( +
+
+

REAL-TIME METRICS

+ +
+ {result ? "LIVE TELEMETRY" : "SYSTEM IDLE"} + +
+ +
+ {metrics.length > 0 ? metrics.map((m) => ( +
+
+ {m.label} + {m.value}% +
+
+
+
+
+
+
+
+ {m.status} +
+
+ )) : ( +
+
+

Awaiting Scan Data

+
+ )} +
+
+ ); +} diff --git a/silicon-signal/src/components/SiliconWafer.tsx b/silicon-signal/src/components/SiliconWafer.tsx new file mode 100644 index 0000000..67e5e44 --- /dev/null +++ b/silicon-signal/src/components/SiliconWafer.tsx @@ -0,0 +1,33 @@ +import { motion } from 'framer-motion'; + +export default function SiliconWafer() { + return ( +
+
+ {/* Inner Rings */} +
+
+ + {/* Crosshair Lines */} +
+
+ + {/* Animated Scanning Line */} + + + {/* Grid Pattern */} +
+
+
+ ); +} diff --git a/silicon-signal/src/components/SystemArchitecture.tsx b/silicon-signal/src/components/SystemArchitecture.tsx new file mode 100644 index 0000000..e53b6e1 --- /dev/null +++ b/silicon-signal/src/components/SystemArchitecture.tsx @@ -0,0 +1,83 @@ +import { motion } from 'framer-motion'; + +export default function SystemArchitecture({ active }: { active?: boolean }) { + return ( +
+
+

DATA PROCESSING PIPELINE

+ + {active ? "PROCESSING" : "IDLE"} + +
+ +
+ + {[ + { x1: 50, y1: 50, x2: 150, y2: 100 }, + { x1: 50, y1: 150, x2: 150, y2: 100 }, + { x1: 150, y1: 100, x2: 250, y2: 100 }, + { x1: 250, y1: 100, x2: 350, y2: 100 }, + ].map((line, i) => ( + + ))} + + {active && [ + { x1: 50, y1: 50, x2: 150, y2: 100, delay: 0 }, + { x1: 50, y1: 150, x2: 150, y2: 100, delay: 0 }, + { x1: 150, y1: 100, x2: 250, y2: 100, delay: 0.5 }, + { x1: 250, y1: 100, x2: 350, y2: 100, delay: 1 }, + ].map((line, i) => ( + + ))} + + + + Web Sources + + + + Distributors + + + + + MINO + + + + + Scoring Engine + + + + + REPORT + + +
+ +

+ {active ? "Executing multi-step web navigation & DOM extraction..." : "System standing by for telemetry input."} +

+
+ ); +} diff --git a/silicon-signal/src/components/VendorIntelligence.tsx b/silicon-signal/src/components/VendorIntelligence.tsx new file mode 100644 index 0000000..a2878fc --- /dev/null +++ b/silicon-signal/src/components/VendorIntelligence.tsx @@ -0,0 +1,48 @@ +import { ScanResult } from '../types'; + +export default function VendorIntelligence({ result }: { result: ScanResult | null }) { + const sources = result?.sources?.map(s => ({ + name: s, + type: 'Distributor', + reliability: 98.4, // Standard baseline for major distributors + status: 'Online' + })) || []; + + return ( +
+
+

DETECTED SOURCES

+ {sources.length} IDENTIFIED +
+ +
+ {sources.length > 0 ? sources.map((s) => ( +
+
+
+ {s.name} + {s.type} +
+
+ Verified + LIVE +
+
+ +
+ +
+ {s.status} + {s.reliability}% REL +
+
+ )) : ( +
+
?
+

No External Data
Sources Identified

+
+ )} +
+
+ ); +} diff --git a/silicon-signal/src/lib/store.ts b/silicon-signal/src/lib/store.ts new file mode 100644 index 0000000..e1a969e --- /dev/null +++ b/silicon-signal/src/lib/store.ts @@ -0,0 +1,99 @@ +import fs from 'fs'; +import path from 'path'; + +let currentHistoryFile = path.join(process.cwd(), 'data', 'history.json'); + +function ensureDirectory(filePath: string) { + const dir = path.dirname(filePath); + if (!fs.existsSync(dir)) { + try { + fs.mkdirSync(dir, { recursive: true }); + } catch (e) { + return false; + } + } + return true; +} + +export interface HistoricalSnapshot { + timestamp: string; + lifecycle_status: string; + lead_time_weeks?: number; + moq?: number; + availability?: string; + risk_score?: number; +} + +export function saveSnapshot(partNumber: string, snapshot: HistoricalSnapshot) { + const attemptSave = (file: string) => { + ensureDirectory(file); + let data: any = {}; + if (fs.existsSync(file)) { + try { + data = JSON.parse(fs.readFileSync(file, 'utf-8')); + } catch (e) { + data = {}; + } + } + + if (!data[partNumber]) data[partNumber] = { snapshots: [] }; + const snapshots: HistoricalSnapshot[] = data[partNumber].snapshots || []; + const last = snapshots[snapshots.length - 1]; + if (last?.timestamp === snapshot.timestamp) { + snapshots[snapshots.length - 1] = snapshot; + } else { + snapshots.push(snapshot); + } + const seen = new Set(); + const deduped: HistoricalSnapshot[] = []; + for (let i = snapshots.length - 1; i >= 0; i--) { + const ts = snapshots[i]?.timestamp; + if (!ts || seen.has(ts)) continue; + seen.add(ts); + deduped.unshift(snapshots[i]); + } + data[partNumber].snapshots = deduped; + if (data[partNumber].snapshots.length > 10) { + data[partNumber].snapshots = data[partNumber].snapshots.slice(-10); + } + + fs.writeFileSync(file, JSON.stringify(data, null, 2)); + currentHistoryFile = file; + return true; + }; + + try { + attemptSave(currentHistoryFile); + } catch (e) { + // If write fails (e.g. EROFS), fallback to /tmp + const tmpFile = path.join('/tmp', 'history.json'); + if (currentHistoryFile !== tmpFile) { + try { + attemptSave(tmpFile); + } catch (innerError) { + // Silently fail as we are in a read-only environment + console.error("Critical: Could not save to /tmp either", innerError); + } + } + } +} + +export function getHistory(partNumber: string): HistoricalSnapshot[] { + const files = [currentHistoryFile, path.join('/tmp', 'history.json'), path.join(process.cwd(), 'data', 'history.json')]; + for (const file of files) { + if (fs.existsSync(file)) { + try { + const data = JSON.parse(fs.readFileSync(file, 'utf-8')); + return data[partNumber]?.snapshots || []; + } catch (e) { + continue; + } + } + } + return []; +} + +export function getLastSnapshot(partNumber: string): HistoricalSnapshot | null { + const history = getHistory(partNumber); + return history.length > 0 ? history[history.length - 1] : null; +} diff --git a/silicon-signal/src/types.ts b/silicon-signal/src/types.ts new file mode 100644 index 0000000..74bef0d --- /dev/null +++ b/silicon-signal/src/types.ts @@ -0,0 +1,62 @@ +export interface RiskAnalysis { + score: number; + level: string; + reasoning: string; +} + +export interface ScanResult { + part_number: string; + manufacturer: string; + lifecycle_status: string; + + // New SiliconSignal Fields + lead_time_weeks?: number; + lead_time_days?: number; + moq?: number; + availability?: string; + timestamp: string; + + last_time_buy_date?: string; + pcn_summary?: string; + risk: RiskAnalysis; + evidence_links: string[]; + + // Tinyfish (Mino) Agent Extensions + price_estimate?: string; + sources?: string[]; + sources_checked?: string[]; + sources_blocked?: string[]; + source_signals?: SourceSignal[]; + signals?: SignalSummary; + confidence?: ConfidenceInfo; + scanned_at?: string; + scan_duration_ms?: number; + scan_timed_out?: boolean; + agent_logs?: string[]; + history?: { timestamp: string; score: number }[]; +} + +export interface SourceSignal { + name: string; + url: string; + ok: boolean; + blocked: boolean; + availability?: string; + lifecycle_status?: string; + lead_time_weeks?: number; + price_estimate?: string; +} + +export interface SignalSummary { + availability: string; + lifecycle_status: string; + lead_time_weeks?: number; + price_estimate?: string; +} + +export interface ConfidenceInfo { + score: number; + level: string; + sources: number; + signals: number; +} diff --git a/silicon-signal/tsconfig.json b/silicon-signal/tsconfig.json new file mode 100644 index 0000000..cf9c65d --- /dev/null +++ b/silicon-signal/tsconfig.json @@ -0,0 +1,34 @@ +{ + "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": "react-jsx", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./src/*"] + } + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts", + "**/*.mts" + ], + "exclude": ["node_modules"] +} From 3cd39cf3f38e3d2c77c7c04461fedbf351009bc6 Mon Sep 17 00:00:00 2001 From: Manas Mathur Date: Sat, 31 Jan 2026 21:09:54 +0530 Subject: [PATCH 2/2] Address cookbook PR review comments --- README.md | 2 +- silicon-signal/src/app/api/scan/route.ts | 60 +------------------ silicon-signal/src/components/Header.tsx | 5 +- silicon-signal/src/components/ScanForm.tsx | 4 +- .../src/components/SignalOverview.tsx | 2 +- .../src/components/SiliconWafer.tsx | 2 + 6 files changed, 11 insertions(+), 64 deletions(-) diff --git a/README.md b/README.md index d41b882..22a5efa 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ Each folder in this repo is a standalone project. Dive in to see how to solve re | [competitor-analysis](./competitor-analysis) | a Live Competitive Pricing Intelligence Dashboard | | [silicon-signal](./silicon-signal) | Semiconductor supply chain tracker for lifecycle, availability, and lead-time signals | | [stay-scout-hub](./stay-scout-hub) | Searches across all sites for places to stay when travel for conventions or events | -| [summer-school-finder](./summer-school-finder) | Discover and compare summer sch`ool programs from universities around the world | +| [summer-school-finder](./summer-school-finder) | Discover and compare summer school programs from universities around the world | > More recipes added weekly! diff --git a/silicon-signal/src/app/api/scan/route.ts b/silicon-signal/src/app/api/scan/route.ts index 4af4f7e..dae1a4e 100644 --- a/silicon-signal/src/app/api/scan/route.ts +++ b/silicon-signal/src/app/api/scan/route.ts @@ -2,64 +2,8 @@ import { NextResponse } from 'next/server'; import puppeteer from 'puppeteer'; import type { Browser } from 'puppeteer'; import { saveSnapshot, getLastSnapshot, getHistory, HistoricalSnapshot } from '@/lib/store'; +import type { ConfidenceInfo, RiskAnalysis, ScanResult, SignalSummary, SourceSignal } from '../../../types'; -interface RiskAnalysis { - score: number; - level: string; - reasoning: string; -} - -interface ScanResult { - part_number: string; - manufacturer: string; - lifecycle_status: string; - lead_time_weeks?: number; - lead_time_days?: number; - moq?: number; - availability?: string; - timestamp: string; - last_time_buy_date?: string; - pcn_summary?: string; - risk: RiskAnalysis; - evidence_links: string[]; - price_estimate?: string; - sources?: string[]; - sources_checked?: string[]; - sources_blocked?: string[]; - source_signals?: SourceSignal[]; - signals?: SignalSummary; - confidence?: ConfidenceInfo; - scanned_at?: string; - scan_duration_ms?: number; - scan_timed_out?: boolean; - agent_logs?: string[]; - history?: { timestamp: string; score: number }[]; -} - -interface SourceSignal { - name: string; - url: string; - ok: boolean; - blocked: boolean; - availability?: string; - lifecycle_status?: string; - lead_time_weeks?: number; - price_estimate?: string; -} - -interface SignalSummary { - availability: string; - lifecycle_status: string; - lead_time_weeks?: number; - price_estimate?: string; -} - -interface ConfidenceInfo { - score: number; - level: string; - sources: number; - signals: number; -} interface ParsedSignals { availability?: string; @@ -548,7 +492,7 @@ export async function POST(request: Request) { if (part_number.length > 64) { return NextResponse.json({ error: "Part number too long" }, { status: 400 }); } - if (!/^[A-Za-z0-9._/+\\-]+$/.test(part_number)) { + if (!/^[A-Za-z0-9._/+-]+$/.test(part_number)) { return NextResponse.json({ error: "Part number contains invalid characters" }, { status: 400 }); } diff --git a/silicon-signal/src/components/Header.tsx b/silicon-signal/src/components/Header.tsx index 37d905d..b9347f8 100644 --- a/silicon-signal/src/components/Header.tsx +++ b/silicon-signal/src/components/Header.tsx @@ -1,14 +1,15 @@ +import Link from 'next/link'; import { CheckSquare } from 'lucide-react'; export default function Header() { return (
-
window.location.href = '/'}> +
SiliconSignal -
+
diff --git a/silicon-signal/src/components/ScanForm.tsx b/silicon-signal/src/components/ScanForm.tsx index e3e46bb..738f36c 100644 --- a/silicon-signal/src/components/ScanForm.tsx +++ b/silicon-signal/src/components/ScanForm.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useState } from 'react'; +import { useState, type FormEvent } from 'react'; import { Search, Loader2 } from 'lucide-react'; interface ScanFormProps { @@ -20,7 +20,7 @@ export function ScanForm({ onScan, isLoading }: ScanFormProps) { const [part, setPart] = useState(''); const [mfr, setMfr] = useState(''); - const handleSubmit = (e: React.FormEvent) => { + const handleSubmit = (e: FormEvent) => { e.preventDefault(); if (part) onScan(part, mfr); }; diff --git a/silicon-signal/src/components/SignalOverview.tsx b/silicon-signal/src/components/SignalOverview.tsx index 5bbc8cb..621f023 100644 --- a/silicon-signal/src/components/SignalOverview.tsx +++ b/silicon-signal/src/components/SignalOverview.tsx @@ -13,7 +13,7 @@ export default function SignalOverview({ result }: { result: ScanResult | null }

REAL-TIME METRICS

-
+ {result ? "LIVE TELEMETRY" : "SYSTEM IDLE"}
diff --git a/silicon-signal/src/components/SiliconWafer.tsx b/silicon-signal/src/components/SiliconWafer.tsx index 67e5e44..8095f97 100644 --- a/silicon-signal/src/components/SiliconWafer.tsx +++ b/silicon-signal/src/components/SiliconWafer.tsx @@ -1,3 +1,5 @@ +'use client'; + import { motion } from 'framer-motion'; export default function SiliconWafer() {