diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index a3c5257..0000000
--- a/.gitattributes
+++ /dev/null
@@ -1,11 +0,0 @@
-# Normalize line endings: store LF in repo; Git will convert on checkout per OS.
-* text=auto eol=lf
-
-# Binary files: do not change line endings
-*.png binary
-*.ico binary
-*.jpg binary
-*.jpeg binary
-*.gif binary
-*.woff binary
-*.woff2 binary
diff --git a/package.json b/package.json
index 802a59d..2142636 100644
--- a/package.json
+++ b/package.json
@@ -12,7 +12,7 @@
"@auth0/nextjs-auth0": "^3.5.0",
"chart.js": "^4.4.7",
"cookies-next": "^5.0.2",
- "next": "15.0.2",
+ "next": "15.0.7",
"next-intl": "^3.25.3",
"plotly.js": "^3.0.1",
"react": "19.0.0-rc-02c0e824-20241028",
diff --git a/src/app/api/auth/[auth0]/route.ts b/src/app/api/auth/[auth0]/route.ts
index aa8b000..7e57b8d 100644
--- a/src/app/api/auth/[auth0]/route.ts
+++ b/src/app/api/auth/[auth0]/route.ts
@@ -1,3 +1,13 @@
-import { handleAuth } from '@auth0/nextjs-auth0';
+import { handleAuth, handleLogin } from "@auth0/nextjs-auth0";
-export const GET = handleAuth();
\ No newline at end of file
+export const GET = handleAuth({
+ login: handleLogin({
+ returnTo: "/chat",
+ }),
+ signup: handleLogin({
+ authorizationParams: {
+ screen_hint: "signup",
+ },
+ returnTo: "/chat",
+ }),
+});
\ No newline at end of file
diff --git a/src/app/components/login/tinyLogin.tsx b/src/app/components/login/tinyLogin.tsx
index a11c4d0..da93049 100644
--- a/src/app/components/login/tinyLogin.tsx
+++ b/src/app/components/login/tinyLogin.tsx
@@ -1,28 +1,49 @@
"use client"
+import { useEffect } from 'react';
import { useRouter } from 'next/navigation';
import styles from "./login.module.scss";
-import { redirect } from "next/navigation";
import { useAuthApi } from '@/app/hooks/useAuthApi';
-export default function TinyLogin(text: {label:string}) {
+export default function TinyLogin({ label }: { label: string }) {
const { user, error, fetchToken } = useAuthApi();
const router = useRouter();
- if (error) return
{error.message}
;
- if (user){
- fetchToken().catch(console.error);
- redirect('/chat');
- }
+ useEffect(() => {
+ if (user) {
+ fetchToken().catch(console.error);
+ router.push('/chat'); // Internal app navigation is fine with router.push
+ }
+ }, [user, fetchToken, router]);
- const handleAuth = (action: 'login' | 'logout') => (e: React.MouseEvent) => {
+ if (error) return {error.message}
;
+
+ const handleAuth = (action: 'login' | 'logout' | 'signup') => (e: React.MouseEvent) => {
e.preventDefault();
- if (action === 'login') {router.push(`/api/auth/login?returnTo=/chat`)} else {router.push(`/api/auth/logout`)}
+
+ if (action === 'login') {
+ // This hits the default login handler
+ window.location.assign('/api/auth/login?returnTo=/chat');
+ } else if (action === 'signup') {
+ // This hits your specific signup handler defined in your GET route
+ window.location.assign('/api/auth/signup');
+ } else {
+ window.location.assign('/api/auth/logout');
+ }
};
+ // If user is already logged in, we don't need to show the login button
+ if (user) return null;
+
return (
- {text.label}
+
+ {label}
+
);
+
}
\ No newline at end of file
diff --git a/web_extension/Veracity_Extension/.gitignore b/web_extension/Veracity_Extension/.gitignore
deleted file mode 100644
index 82394fd..0000000
--- a/web_extension/Veracity_Extension/.gitignore
+++ /dev/null
@@ -1,26 +0,0 @@
-# Dependencies (recreate with npm install)
-node_modules/
-
-# Next.js build output (recreate with npm run build)
-.next/
-out/
-
-# Extension build output (recreate with npm run build; load this folder in Chrome)
-dist/
-
-# Env and secrets
-.env
-.env.*
-!.env.example
-
-# OS and editor
-.DS_Store
-Thumbs.db
-*.log
-.idea/
-.vscode/
-
-# Debug
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
diff --git a/web_extension/Veracity_Extension/README.md b/web_extension/Veracity_Extension/README.md
deleted file mode 100644
index 5df8048..0000000
--- a/web_extension/Veracity_Extension/README.md
+++ /dev/null
@@ -1,82 +0,0 @@
-# Veracity Side Panel Extension
-
-
-## Project structure (source only)
-
-```
-Veracity_Extension/
-├── package.json # Scripts, dependencies (next, react, typescript)
-├── package-lock.json # Locked dependency versions
-├── tsconfig.json # TypeScript config
-├── next.config.js # Next.js config (output: export)
-├── next-env.d.ts # Next type references (do not edit)
-│
-├── pages/ # Next.js pages (static shell for panel)
-│ ├── _app.tsx # App wrapper, global CSS
-│ └── index.tsx # Home shell; panel.js replaces body at runtime
-│
-├── public/ # Static extension assets (copied to dist/)
-│ ├── manifest.json # Chrome extension manifest (MV3)
-│ ├── background.js # Service worker: context menu, VERIFY_CLAIM, API routing
-│ ├── content.js # Injected script: selection → REQUEST_SELECTION
-│ ├── panel.css # Panel UI styles (verify button, results, discussion)
-│ ├── config.json # API_URL, AUTH0_CLIENT_ID (runtime config)
-│ └── icons/
-│ └── icon128.png
-│
-├── scripts/
-│ └── postbuild.js # Build script: Next output + public → dist/, inlines auth + panel UI into panel.js
-│
-├── src/
-│ └── lib/
-│ ├── auth.js # Browser auth (PKCE, JWKS); inlined into panel.js by postbuild
-│ ├── auth.ts # Auth type definitions
-│ └── auth0.ts # Node-only auth helpers (not used in extension runtime)
-│
-├── styles/ # CSS for Next pages and landing hero
-│ ├── globals.css # Resets, design tokens (used by _app.tsx)
-│ ├── Home.module.css # index.tsx component styles
-│ ├── webapp-hero.css # Landing hero; copied to dist/ and linked by panel HTML
-│ └── LoginForm.module.css # Unused login form styles
-│
-└── README.md
-```
-
----
-
-## Build and load in Chrome
-
-### 1. Install dependencies
-
-```bash
-cd web_extension/Veracity_Extension
-npm install
-```
-
-### 2. Build the extension (creates `dist/`)
-
-```bash
-npm run build
-```
-
-This runs `next build` then `node scripts/postbuild.js`. The **`dist/`** folder is the complete, loadable Chrome extension (manifest, background.js, content.js, panel.js, panel.css, config, icons, HTML).
-
-
-### 3. Load unpacked in Chrome
-
-1. Open **Chrome** and go to **`chrome://extensions/`**.
-2. Turn on **Developer mode** (toggle in the top-right).
-3. Click **Load unpacked**.
-4. Select the **`dist`** folder inside `Veracity_Extension` (the folder that contains `manifest.json`, `panel.js`, `background.js`, etc.).
-5. The Veracity extension should appear in the list. Use the extensions puzzle icon or the side panel to open it.
-
----
-
-## Config
-
-Edit **`public/config.json`** (or **`dist/config.json`** after a build) to set:
-
-- **`API_URL`** — backend API base URL for verification and discussions.
-- **`AUTH0_CLIENT_ID`** — Auth0 client ID for sign‑in.
-
-Rebuild after changing `public/config.json` so `dist/config.json` is updated.
diff --git a/web_extension/Veracity_Extension/next.config.js b/web_extension/Veracity_Extension/next.config.js
deleted file mode 100644
index bdb1eab..0000000
--- a/web_extension/Veracity_Extension/next.config.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/** @type {import('next').NextConfig} */
-const nextConfig = {
- output: 'export',
- images: {
- unoptimized: true,
- },
-};
-
-module.exports = nextConfig;
-
diff --git a/web_extension/Veracity_Extension/package-lock.json b/web_extension/Veracity_Extension/package-lock.json
deleted file mode 100644
index 593329d..0000000
--- a/web_extension/Veracity_Extension/package-lock.json
+++ /dev/null
@@ -1,5466 +0,0 @@
-{
- "name": "veracity-extension-side-panel",
- "version": "0.0.1",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "veracity-extension-side-panel",
- "version": "0.0.1",
- "dependencies": {
- "next": "^15.5.9",
- "react": "19.0.0-rc-de68d2f4-20241204",
- "react-dom": "19.0.0-rc-de68d2f4-20241204"
- },
- "devDependencies": {
- "@types/node": "^20.17.10",
- "@types/react": "^18.3.12",
- "@types/react-dom": "^18.3.0",
- "eslint": "^8.57.1",
- "eslint-config-next": "^15.5.9",
- "typescript": "^5.6.3"
- }
- },
- "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/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/eslintrc": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
- "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.6.0",
- "globals": "^13.19.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint/js": {
- "version": "8.57.1",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
- "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.13.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
- "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
- "deprecated": "Use @eslint/config-array instead",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@humanwhocodes/object-schema": "^2.0.3",
- "debug": "^4.3.1",
- "minimatch": "^3.0.5"
- },
- "engines": {
- "node": ">=10.10.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/object-schema": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
- "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
- "deprecated": "Use @eslint/object-schema instead",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "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/@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": "15.5.9",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.9.tgz",
- "integrity": "sha512-4GlTZ+EJM7WaW2HEZcyU317tIQDjkQIyENDLxYJfSWlfqguN+dHkZgyQTV/7ykvobU7yEH5gKvreNrH4B6QgIg==",
- "license": "MIT"
- },
- "node_modules/@next/eslint-plugin-next": {
- "version": "15.5.9",
- "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.5.9.tgz",
- "integrity": "sha512-kUzXx0iFiXw27cQAViE1yKWnz/nF8JzRmwgMRTMh8qMY90crNsdXJRh2e+R0vBpFR3kk1yvAR7wev7+fCCb79Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-glob": "3.3.1"
- }
- },
- "node_modules/@next/swc-darwin-arm64": {
- "version": "15.5.7",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.7.tgz",
- "integrity": "sha512-IZwtxCEpI91HVU/rAUOOobWSZv4P2DeTtNaCdHqLcTJU4wdNXgAySvKa/qJCgR5m6KI8UsKDXtO2B31jcaw1Yw==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-darwin-x64": {
- "version": "15.5.7",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.7.tgz",
- "integrity": "sha512-UP6CaDBcqaCBuiq/gfCEJw7sPEoX1aIjZHnBWN9v9qYHQdMKvCKcAVs4OX1vIjeE+tC5EIuwDTVIoXpUes29lg==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-arm64-gnu": {
- "version": "15.5.7",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.7.tgz",
- "integrity": "sha512-NCslw3GrNIw7OgmRBxHtdWFQYhexoUCq+0oS2ccjyYLtcn1SzGzeM54jpTFonIMUjNbHmpKpziXnpxhSWLcmBA==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-arm64-musl": {
- "version": "15.5.7",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.7.tgz",
- "integrity": "sha512-nfymt+SE5cvtTrG9u1wdoxBr9bVB7mtKTcj0ltRn6gkP/2Nu1zM5ei8rwP9qKQP0Y//umK+TtkKgNtfboBxRrw==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-x64-gnu": {
- "version": "15.5.7",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.7.tgz",
- "integrity": "sha512-hvXcZvCaaEbCZcVzcY7E1uXN9xWZfFvkNHwbe/n4OkRhFWrs1J1QV+4U1BN06tXLdaS4DazEGXwgqnu/VMcmqw==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-x64-musl": {
- "version": "15.5.7",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.7.tgz",
- "integrity": "sha512-4IUO539b8FmF0odY6/SqANJdgwn1xs1GkPO5doZugwZ3ETF6JUdckk7RGmsfSf7ws8Qb2YB5It33mvNL/0acqA==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-arm64-msvc": {
- "version": "15.5.7",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.7.tgz",
- "integrity": "sha512-CpJVTkYI3ZajQkC5vajM7/ApKJUOlm6uP4BknM3XKvJ7VXAvCqSjSLmM0LKdYzn6nBJVSjdclx8nYJSa3xlTgQ==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-x64-msvc": {
- "version": "15.5.7",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.7.tgz",
- "integrity": "sha512-gMzgBX164I6DN+9/PGA+9dQiwmTkE4TloBNx8Kv9UiGARsr9Nba7IpcBRA1iTV9vwlYnrE3Uy6I7Aj6qLjQuqw==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nolyfill/is-core-module": {
- "version": "1.0.39",
- "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz",
- "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.4.0"
- }
- },
- "node_modules/@rtsao/scc": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
- "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@rushstack/eslint-patch": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.15.0.tgz",
- "integrity": "sha512-ojSshQPKwVvSMR8yT2L/QtUkV5SXi/IfDiJ4/8d6UbTPjiHVmxZzUAzGD8Tzks1b9+qQkZa0isUOvYObedITaw==",
- "dev": true,
- "license": "MIT"
- },
- "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/@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/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.27",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.27.tgz",
- "integrity": "sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "undici-types": "~6.21.0"
- }
- },
- "node_modules/@types/prop-types": {
- "version": "15.7.15",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
- "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/react": {
- "version": "18.3.27",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.27.tgz",
- "integrity": "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@types/prop-types": "*",
- "csstype": "^3.2.2"
- }
- },
- "node_modules/@types/react-dom": {
- "version": "18.3.7",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz",
- "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "@types/react": "^18.0.0"
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.52.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.52.0.tgz",
- "integrity": "sha512-okqtOgqu2qmZJ5iN4TWlgfF171dZmx2FzdOv2K/ixL2LZWDStL8+JgQerI2sa8eAEfoydG9+0V96m7V+P8yE1Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/regexpp": "^4.12.2",
- "@typescript-eslint/scope-manager": "8.52.0",
- "@typescript-eslint/type-utils": "8.52.0",
- "@typescript-eslint/utils": "8.52.0",
- "@typescript-eslint/visitor-keys": "8.52.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.52.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.52.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.52.0.tgz",
- "integrity": "sha512-iIACsx8pxRnguSYhHiMn2PvhvfpopO9FXHyn1mG5txZIsAaB6F0KwbFnUQN3KCiG3Jcuad/Cao2FAs1Wp7vAyg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@typescript-eslint/scope-manager": "8.52.0",
- "@typescript-eslint/types": "8.52.0",
- "@typescript-eslint/typescript-estree": "8.52.0",
- "@typescript-eslint/visitor-keys": "8.52.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.52.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.52.0.tgz",
- "integrity": "sha512-xD0MfdSdEmeFa3OmVqonHi+Cciab96ls1UhIF/qX/O/gPu5KXD0bY9lu33jj04fjzrXHcuvjBcBC+D3SNSadaw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.52.0",
- "@typescript-eslint/types": "^8.52.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.52.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.52.0.tgz",
- "integrity": "sha512-ixxqmmCcc1Nf8S0mS0TkJ/3LKcC8mruYJPOU6Ia2F/zUUR4pApW7LzrpU3JmtePbRUTes9bEqRc1Gg4iyRnDzA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "8.52.0",
- "@typescript-eslint/visitor-keys": "8.52.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.52.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.52.0.tgz",
- "integrity": "sha512-jl+8fzr/SdzdxWJznq5nvoI7qn2tNYV/ZBAEcaFMVXf+K6jmXvAFrgo/+5rxgnL152f//pDEAYAhhBAZGrVfwg==",
- "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.52.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.52.0.tgz",
- "integrity": "sha512-JD3wKBRWglYRQkAtsyGz1AewDu3mTc7NtRjR/ceTyGoPqmdS5oCdx/oZMWD5Zuqmo6/MpsYs0wp6axNt88/2EQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "8.52.0",
- "@typescript-eslint/typescript-estree": "8.52.0",
- "@typescript-eslint/utils": "8.52.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.52.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.52.0.tgz",
- "integrity": "sha512-LWQV1V4q9V4cT4H5JCIx3481iIFxH1UkVk+ZkGGAV1ZGcjGI9IoFOfg3O6ywz8QqCDEp7Inlg6kovMofsNRaGg==",
- "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.52.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.52.0.tgz",
- "integrity": "sha512-XP3LClsCc0FsTK5/frGjolyADTh3QmsLp6nKd476xNI9CsSsLnmn4f0jrzNoAulmxlmNIpeXuHYeEQv61Q6qeQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/project-service": "8.52.0",
- "@typescript-eslint/tsconfig-utils": "8.52.0",
- "@typescript-eslint/types": "8.52.0",
- "@typescript-eslint/visitor-keys": "8.52.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/utils": {
- "version": "8.52.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.52.0.tgz",
- "integrity": "sha512-wYndVMWkweqHpEpwPhwqE2lnD2DxC6WVLupU/DOt/0/v+/+iQbbzO3jOHjmBMnhu0DgLULvOaU4h4pwHYi2oRQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.9.1",
- "@typescript-eslint/scope-manager": "8.52.0",
- "@typescript-eslint/types": "8.52.0",
- "@typescript-eslint/typescript-estree": "8.52.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.52.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.52.0.tgz",
- "integrity": "sha512-ink3/Zofus34nmBsPjow63FP5M7IGff0RKAgqR6+CFpdk22M7aLwC9gOcLGYqr7MczLPzZVERW9hRog3O4n1sQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "8.52.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/@typescript-eslint/visitor-keys/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/@ungap/structured-clone": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
- "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
- "dev": true,
- "license": "ISC"
- },
- "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",
- "peer": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "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==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true,
- "license": "Python-2.0"
- },
- "node_modules/aria-query": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
- "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/array-buffer-byte-length": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
- "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "is-array-buffer": "^3.0.5"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array-includes": {
- "version": "3.1.9",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz",
- "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.24.0",
- "es-object-atoms": "^1.1.1",
- "get-intrinsic": "^1.3.0",
- "is-string": "^1.1.1",
- "math-intrinsics": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.findlast": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
- "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.findlastindex": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz",
- "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.9",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "es-shim-unscopables": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.flat": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
- "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.flatmap": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
- "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.tosorted": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
- "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.3",
- "es-errors": "^1.3.0",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/arraybuffer.prototype.slice": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
- "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-buffer-byte-length": "^1.0.1",
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "is-array-buffer": "^3.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/ast-types-flow": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
- "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/async-function": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
- "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/available-typed-arrays": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
- "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "possible-typed-array-names": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/axe-core": {
- "version": "4.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/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/brace-expansion": {
- "version": "1.1.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/call-bind": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
- "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.0",
- "es-define-property": "^1.0.0",
- "get-intrinsic": "^1.2.4",
- "set-function-length": "^1.2.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/call-bind-apply-helpers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
- "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/call-bound": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
- "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "get-intrinsic": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001762",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz",
- "integrity": "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==",
- "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/client-only": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
- "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
- "license": "MIT"
- },
- "node_modules/color-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==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true,
- "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/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-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==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/define-data-property": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
- "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/define-properties": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
- "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/detect-libc": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
- "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
- "license": "Apache-2.0",
- "optional": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/dunder-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.1",
- "es-errors": "^1.3.0",
- "gopd": "^1.2.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/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/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint": {
- "version": "8.57.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
- "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
- "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.4",
- "@eslint/js": "8.57.1",
- "@humanwhocodes/config-array": "^0.13.0",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@nodelib/fs.walk": "^1.2.8",
- "@ungap/structured-clone": "^1.2.0",
- "ajv": "^6.12.4",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "doctrine": "^3.0.0",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.2.2",
- "eslint-visitor-keys": "^3.4.3",
- "espree": "^9.6.1",
- "esquery": "^1.4.2",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "globals": "^13.19.0",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "is-path-inside": "^3.0.3",
- "js-yaml": "^4.1.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.3",
- "strip-ansi": "^6.0.1",
- "text-table": "^0.2.0"
- },
- "bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-config-next": {
- "version": "15.5.9",
- "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.5.9.tgz",
- "integrity": "sha512-852JYI3NkFNzW8CqsMhI0K2CDRxTObdZ2jQJj5CtpEaOkYHn13107tHpNuD/h0WRpU4FAbCdUaxQsrfBtNK9Kw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@next/eslint-plugin-next": "15.5.9",
- "@rushstack/eslint-patch": "^1.10.3",
- "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
- "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
- "eslint-import-resolver-node": "^0.3.6",
- "eslint-import-resolver-typescript": "^3.5.2",
- "eslint-plugin-import": "^2.31.0",
- "eslint-plugin-jsx-a11y": "^6.10.0",
- "eslint-plugin-react": "^7.37.0",
- "eslint-plugin-react-hooks": "^5.0.0"
- },
- "peerDependencies": {
- "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0",
- "typescript": ">=3.3.1"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-import-resolver-node": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
- "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^3.2.7",
- "is-core-module": "^2.13.0",
- "resolve": "^1.22.4"
- }
- },
- "node_modules/eslint-import-resolver-node/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-import-resolver-typescript": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz",
- "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@nolyfill/is-core-module": "1.0.39",
- "debug": "^4.4.0",
- "get-tsconfig": "^4.10.0",
- "is-bun-module": "^2.0.0",
- "stable-hash": "^0.0.5",
- "tinyglobby": "^0.2.13",
- "unrs-resolver": "^1.6.2"
- },
- "engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint-import-resolver-typescript"
- },
- "peerDependencies": {
- "eslint": "*",
- "eslint-plugin-import": "*",
- "eslint-plugin-import-x": "*"
- },
- "peerDependenciesMeta": {
- "eslint-plugin-import": {
- "optional": true
- },
- "eslint-plugin-import-x": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-module-utils": {
- "version": "2.12.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",
- "peer": true,
- "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-import/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/eslint-plugin-import/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/eslint-plugin-jsx-a11y": {
- "version": "6.10.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz",
- "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "aria-query": "^5.3.2",
- "array-includes": "^3.1.8",
- "array.prototype.flatmap": "^1.3.2",
- "ast-types-flow": "^0.0.8",
- "axe-core": "^4.10.0",
- "axobject-query": "^4.1.0",
- "damerau-levenshtein": "^1.0.8",
- "emoji-regex": "^9.2.2",
- "hasown": "^2.0.2",
- "jsx-ast-utils": "^3.3.5",
- "language-tags": "^1.0.9",
- "minimatch": "^3.1.2",
- "object.fromentries": "^2.0.8",
- "safe-regex-test": "^1.0.3",
- "string.prototype.includes": "^2.0.1"
- },
- "engines": {
- "node": ">=4.0"
- },
- "peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
- }
- },
- "node_modules/eslint-plugin-react": {
- "version": "7.37.5",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz",
- "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-includes": "^3.1.8",
- "array.prototype.findlast": "^1.2.5",
- "array.prototype.flatmap": "^1.3.3",
- "array.prototype.tosorted": "^1.1.4",
- "doctrine": "^2.1.0",
- "es-iterator-helpers": "^1.2.1",
- "estraverse": "^5.3.0",
- "hasown": "^2.0.2",
- "jsx-ast-utils": "^2.4.1 || ^3.0.0",
- "minimatch": "^3.1.2",
- "object.entries": "^1.1.9",
- "object.fromentries": "^2.0.8",
- "object.values": "^1.2.1",
- "prop-types": "^15.8.1",
- "resolve": "^2.0.0-next.5",
- "semver": "^6.3.1",
- "string.prototype.matchall": "^4.0.12",
- "string.prototype.repeat": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
- }
- },
- "node_modules/eslint-plugin-react-hooks": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz",
- "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
- }
- },
- "node_modules/eslint-plugin-react/node_modules/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/eslint-plugin-react/node_modules/resolve": {
- "version": "2.0.0-next.5",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
- "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/eslint-plugin-react/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/eslint-scope": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
- "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "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/espree": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
- "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "acorn": "^8.9.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "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==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-glob": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
- "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fastq": {
- "version": "1.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/file-entry-cache": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "flat-cache": "^3.0.4"
- },
- "engines": {
- "node": "^10.12.0 || >=12.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": "3.2.0",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
- "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "flatted": "^3.2.9",
- "keyv": "^4.5.3",
- "rimraf": "^3.0.2"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/flatted": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
- "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/for-each": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
- "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-callable": "^1.2.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true,
- "license": "ISC"
- },
- "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/get-intrinsic": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "es-define-property": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "function-bind": "^1.1.2",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "math-intrinsics": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
- "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/get-symbol-description": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
- "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-tsconfig": {
- "version": "4.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/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "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": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "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/graphemer": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/has-bigints": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
- "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/has-property-descriptors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
- "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-define-property": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-proto": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
- "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-tostringtag": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
- "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-symbols": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/ignore": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
- "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/import-fresh": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
- "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/internal-slot": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
- "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "hasown": "^2.0.2",
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/is-array-buffer": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
- "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "get-intrinsic": "^1.2.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-async-function": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
- "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "async-function": "^1.0.0",
- "call-bound": "^1.0.3",
- "get-proto": "^1.0.1",
- "has-tostringtag": "^1.0.2",
- "safe-regex-test": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-bigint": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
- "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-bigints": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-boolean-object": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
- "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-bun-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz",
- "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "semver": "^7.7.1"
- }
- },
- "node_modules/is-callable": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
- "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.16.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
- "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-data-view": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
- "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "get-intrinsic": "^1.2.6",
- "is-typed-array": "^1.1.13"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-date-object": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
- "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-finalizationregistry": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
- "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-generator-function": {
- "version": "1.1.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-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "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/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/js-yaml": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/json-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "minimist": "^1.2.0"
- },
- "bin": {
- "json5": "lib/cli.js"
- }
- },
- "node_modules/jsx-ast-utils": {
- "version": "3.3.5",
- "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
- "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.flat": "^1.3.1",
- "object.assign": "^4.1.4",
- "object.values": "^1.1.6"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/keyv": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
- "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "json-buffer": "3.0.1"
- }
- },
- "node_modules/language-subtag-registry": {
- "version": "0.3.23",
- "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
- "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
- "dev": true,
- "license": "CC0-1.0"
- },
- "node_modules/language-tags": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
- "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "language-subtag-registry": "^0.3.20"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/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/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/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/napi-postinstall": {
- "version": "0.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/next": {
- "version": "15.5.9",
- "resolved": "https://registry.npmjs.org/next/-/next-15.5.9.tgz",
- "integrity": "sha512-agNLK89seZEtC5zUHwtut0+tNrc0Xw4FT/Dg+B/VLEo9pAcS9rtTKpek3V6kVcVwsB2YlqMaHdfZL4eLEVYuCg==",
- "license": "MIT",
- "dependencies": {
- "@next/env": "15.5.9",
- "@swc/helpers": "0.5.15",
- "caniuse-lite": "^1.0.30001579",
- "postcss": "8.4.31",
- "styled-jsx": "5.1.6"
- },
- "bin": {
- "next": "dist/bin/next"
- },
- "engines": {
- "node": "^18.18.0 || ^19.8.0 || >= 20.0.0"
- },
- "optionalDependencies": {
- "@next/swc-darwin-arm64": "15.5.7",
- "@next/swc-darwin-x64": "15.5.7",
- "@next/swc-linux-arm64-gnu": "15.5.7",
- "@next/swc-linux-arm64-musl": "15.5.7",
- "@next/swc-linux-x64-gnu": "15.5.7",
- "@next/swc-linux-x64-musl": "15.5.7",
- "@next/swc-win32-arm64-msvc": "15.5.7",
- "@next/swc-win32-x64-msvc": "15.5.7",
- "sharp": "^0.34.3"
- },
- "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/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==",
- "dev": true,
- "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/parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/possible-typed-array-names": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
- "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/postcss": {
- "version": "8.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/prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/prop-types": {
- "version": "15.8.1",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
- "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.13.1"
- }
- },
- "node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/react": {
- "version": "19.0.0-rc-de68d2f4-20241204",
- "resolved": "https://registry.npmjs.org/react/-/react-19.0.0-rc-de68d2f4-20241204.tgz",
- "integrity": "sha512-bEE63RAe0Leh2BYkaPjwzEYqqfYo+PzICvRNRplR3Q5NJzH8fUe3yApqzvu2qeFQXVEo7/yNel5IdKBqTtAYfg==",
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dom": {
- "version": "19.0.0-rc-de68d2f4-20241204",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0-rc-de68d2f4-20241204.tgz",
- "integrity": "sha512-DrJ+o2bSvinvpQxBO49C8rDgkCshg/z4wU3P1RTAXzu2AgEqZwZqKQ8YJpHVNGEP7/4jg5FjJmuwPtzoNZpeIg==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "scheduler": "0.25.0-rc-de68d2f4-20241204"
- },
- "peerDependencies": {
- "react": "19.0.0-rc-de68d2f4-20241204"
- }
- },
- "node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/reflect.getprototypeof": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
- "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.9",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.7",
- "get-proto": "^1.0.1",
- "which-builtin-type": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/regexp.prototype.flags": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
- "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-errors": "^1.3.0",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "set-function-name": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve": {
- "version": "1.22.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==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/resolve-pkg-maps": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
- "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
- }
- },
- "node_modules/reusify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
- "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "deprecated": "Rimraf versions prior to v4 are no longer supported",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "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.25.0-rc-de68d2f4-20241204",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0-rc-de68d2f4-20241204.tgz",
- "integrity": "sha512-kIA/yZOHbaauorXX0FzrE1dXrNyNsJD6WzPsfoIMjlrdcBkzo8Y8nVRVFSpQEt6SaoHcKNGqLPUtQq+nIY8C2g==",
- "license": "MIT"
- },
- "node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "devOptional": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/set-function-length": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
- "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/set-function-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
- "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "functions-have-names": "^1.2.3",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/set-proto": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
- "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/sharp": {
- "version": "0.34.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/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/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/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==",
- "dev": true,
- "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/text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true,
- "license": "MIT"
- },
- "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",
- "peer": true,
- "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/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/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/typed-array-buffer": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
- "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-typed-array": "^1.1.14"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/typed-array-byte-length": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
- "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "for-each": "^0.3.3",
- "gopd": "^1.2.0",
- "has-proto": "^1.2.0",
- "is-typed-array": "^1.1.14"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-byte-offset": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
- "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "for-each": "^0.3.3",
- "gopd": "^1.2.0",
- "has-proto": "^1.2.0",
- "is-typed-array": "^1.1.15",
- "reflect.getprototypeof": "^1.0.9"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-length": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
- "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "is-typed-array": "^1.1.13",
- "possible-typed-array-names": "^1.0.0",
- "reflect.getprototypeof": "^1.0.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typescript": {
- "version": "5.9.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
- "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/unbox-primitive": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
- "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-bigints": "^1.0.2",
- "has-symbols": "^1.1.0",
- "which-boxed-primitive": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/undici-types": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
- "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/unrs-resolver": {
- "version": "1.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/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/which-boxed-primitive": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
- "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-bigint": "^1.1.0",
- "is-boolean-object": "^1.2.1",
- "is-number-object": "^1.1.1",
- "is-string": "^1.1.1",
- "is-symbol": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-builtin-type": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
- "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "function.prototype.name": "^1.1.6",
- "has-tostringtag": "^1.0.2",
- "is-async-function": "^2.0.0",
- "is-date-object": "^1.1.0",
- "is-finalizationregistry": "^1.1.0",
- "is-generator-function": "^1.0.10",
- "is-regex": "^1.2.1",
- "is-weakref": "^1.0.2",
- "isarray": "^2.0.5",
- "which-boxed-primitive": "^1.1.0",
- "which-collection": "^1.0.2",
- "which-typed-array": "^1.1.16"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-collection": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
- "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-map": "^2.0.3",
- "is-set": "^2.0.3",
- "is-weakmap": "^2.0.2",
- "is-weakset": "^2.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-typed-array": {
- "version": "1.1.19",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz",
- "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "for-each": "^0.3.5",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/word-wrap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- }
-}
diff --git a/web_extension/Veracity_Extension/package.json b/web_extension/Veracity_Extension/package.json
deleted file mode 100644
index 2b937a9..0000000
--- a/web_extension/Veracity_Extension/package.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "name": "veracity-extension-side-panel",
- "version": "0.0.1",
- "private": true,
- "scripts": {
- "dev": "next dev",
- "build": "next build && node scripts/postbuild.js",
- "export": "npm run build",
- "lint": "next lint"
- },
- "dependencies": {
- "next": "^15.5.9",
- "react": "19.0.0-rc-de68d2f4-20241204",
- "react-dom": "19.0.0-rc-de68d2f4-20241204"
- },
- "devDependencies": {
- "@types/node": "^20.17.10",
- "@types/react": "^18.3.12",
- "@types/react-dom": "^18.3.0",
- "eslint": "^8.57.1",
- "eslint-config-next": "^15.5.9",
- "typescript": "^5.6.3"
- }
-}
-
diff --git a/web_extension/Veracity_Extension/pages/_app.tsx b/web_extension/Veracity_Extension/pages/_app.tsx
deleted file mode 100644
index 260b2b3..0000000
--- a/web_extension/Veracity_Extension/pages/_app.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Next.js custom App — wraps every page.
- * Used by the extension build only to supply global CSS and the root layout.
- * The actual panel runtime (auth, verify, tabs, discussion) is driven by the
- * inlined panel.js produced in scripts/postbuild.js.
- */
-import type { AppProps } from "next/app";
-import "../styles/globals.css";
-
-export default function App({ Component, pageProps }: AppProps) {
- return ;
-}
-
diff --git a/web_extension/Veracity_Extension/pages/index.tsx b/web_extension/Veracity_Extension/pages/index.tsx
deleted file mode 100644
index 014f35c..0000000
--- a/web_extension/Veracity_Extension/pages/index.tsx
+++ /dev/null
@@ -1,88 +0,0 @@
-"use client";
-
-/**
- * Next.js home page — static shell for the extension panel.
- * This markup is exported as HTML; postbuild then replaces the body with
- * a single root div and injects panel.js. All behavior (auth, verify button,
- * tabs, results, discussion hub) comes from the inlined script in
- * scripts/postbuild.js.
- */
-import Head from "next/head";
-import styles from "../styles/Home.module.css";
-
-export default function Home() {
- return (
-
-
- Veracity
-
-
-
-
V
-
Welcome to Veracity
-
- Navigate information with clarity and confidence guided by{" "}
- a conversational {" "}
- assistant.
-
-
- Sign up or log in to verify information and build trust with those you share it with.
-
-
- Log in
- I’m logged in → Continue
-
-
-
-
-
-
- AI Fact Verification
-
-
- Discussion Hub
-
-
- Contact an Expert
-
-
-
-
-
-
AI Fact Verification
-
- TEST MODE (mock)
-
-
-
- Claim
-
-
-
-
- Verify
-
-
-
-
-
-
- © ComplexData Lab · McGill · Mila
-
- );
-}
-
diff --git a/web_extension/Veracity_Extension/public/background.js b/web_extension/Veracity_Extension/public/background.js
deleted file mode 100644
index 73ca16d..0000000
--- a/web_extension/Veracity_Extension/public/background.js
+++ /dev/null
@@ -1,279 +0,0 @@
-/**
- * background.js — Extension service worker
- *
- * Handles: (1) Context menu "Send to Veracity" and action click → open side panel.
- * (2) Message router: VERIFY_CLAIM (run verification flow), GET_ME, GET_DISCUSSIONS,
- * GET_DISCUSSION, GET_POSTS, CREATE_DISCUSSION, CREATE_POST, VOTE_POST. Panel and
- * content scripts send messages here; this script calls the backend API with the
- * panel’s access token.
- */
-chrome.runtime.onInstalled.addListener(() => {
- try {
- chrome.contextMenus.create({
- id: "veracitySendSelection",
- title: "Send to Veracity",
- contexts: ["selection"],
- });
- } catch (err) {
- console.error("Veracity: context menu creation failed", err);
- }
-});
-
-chrome.action.onClicked.addListener(async (tab) => {
- try {
- if (chrome.sidePanel?.open) await chrome.sidePanel.open({ windowId: tab.windowId });
- } catch (e) {
- console.error("Veracity: failed to open side panel", e);
- }
-});
-
-// Context menu: open panel and broadcast selection so panel can prefill and start verify.
-chrome.contextMenus.onClicked.addListener((info, tab) => {
- if (info.menuItemId !== "veracitySendSelection" || !info.selectionText) return;
- const tabId = tab?.id;
- if (chrome.sidePanel?.open && tabId) {
- chrome.sidePanel.open({ tabId }).catch((e) => console.error("Veracity: side panel open failed", e));
- }
- chrome.runtime.sendMessage({
- type: "SELECTION_TO_VERIFY",
- text: info.selectionText,
- pageUrl: info.pageUrl || "",
- pageTitle: tab?.title || "",
- });
-});
-
-async function runVerification(apiUrl, accessToken, claimText) {
- const headers = {
- "Content-Type": "application/json",
- "Accept": "application/json",
- "Authorization": `Bearer ${accessToken}`,
- };
-
- const url1 = `${apiUrl}/v1/claims/`;
- const res1 = await fetch(url1, {
- method: "POST",
- headers,
- body: JSON.stringify({ claim_text: claimText, context: "veracity_chrome_extension" }),
- });
- const body1 = await res1.text();
- if (!res1.ok) throw new Error(`POST ${url1} ${res1.status}: ${body1}`);
- const claimData = JSON.parse(body1);
- const claimId = claimData.id;
- if (!claimId) throw new Error("No claim id");
-
- const url2 = `${apiUrl}/v1/claims/${claimId}/embedding`;
- const res2 = await fetch(url2, { method: "PATCH", headers });
- const body2 = await res2.text();
- if (!res2.ok) throw new Error(`PATCH ${url2} ${res2.status}: ${body2}`);
-
- const streamUrl = `${apiUrl}/v1/analysis/claim/${claimId}/stream`;
- const streamHeaders = { Accept: "text/event-stream", Authorization: `Bearer ${accessToken}` };
- const resStream = await fetch(streamUrl, { method: "GET", headers: streamHeaders });
- if (!resStream.ok) {
- const errBody = await resStream.text();
- throw new Error(`GET ${streamUrl} ${resStream.status}: ${errBody}`);
- }
- const reader = resStream.body.getReader();
- const decoder = new TextDecoder();
- let buffer = "";
- while (true) {
- const { done, value } = await reader.read();
- if (done) break;
- buffer += decoder.decode(value, { stream: true });
- if (buffer.includes("[DONE]")) break;
- }
-
- const claimAnalysisUrl = `${apiUrl}/v1/analysis/claim/${claimId}`;
- const resClaim = await fetch(claimAnalysisUrl, {
- method: "GET",
- headers: { Accept: "application/json", Authorization: `Bearer ${accessToken}` },
- });
- const bodyClaim = await resClaim.text();
- if (!resClaim.ok) throw new Error(`GET ${claimAnalysisUrl} ${resClaim.status}: ${bodyClaim}`);
- const claimAnalyses = JSON.parse(bodyClaim);
- const list = Array.isArray(claimAnalyses) ? claimAnalyses : (claimAnalyses?.analyses ?? [claimAnalyses]);
- const latest = list.length > 0 ? list.reduce((a, b) => (a.id > b.id ? a : b)) : null;
- if (!latest) throw new Error("No analysis returned for claim");
- const analysisId = latest.id;
- const veracity_score = latest.veracity_score;
- const analysis_text = latest.analysis_text || "";
-
- const url5 = `${apiUrl}/v1/sources/analysis/${analysisId}`;
- const res5 = await fetch(url5, {
- method: "GET",
- headers: { Accept: "application/json", Authorization: `Bearer ${accessToken}` },
- });
- const body5 = await res5.text();
- if (!res5.ok) throw new Error(`GET ${url5} ${res5.status}: ${body5}`);
- const sourcesPayload = JSON.parse(body5);
- const sources = Array.isArray(sourcesPayload) ? sourcesPayload : (sourcesPayload?.sources || sourcesPayload?.data || []);
-
- return { veracity_score, analysis_text, sources, claim_id: claimId, analysis_id: analysisId };
-}
-
-async function apiGet(apiUrl, path, accessToken) {
- const url = `${apiUrl}${path}`;
- const res = await fetch(url, {
- method: "GET",
- headers: { Accept: "application/json", Authorization: `Bearer ${accessToken}` },
- });
- const text = await res.text();
- if (!res.ok) throw new Error(`${res.status}: ${text}`);
- return text ? JSON.parse(text) : null;
-}
-
-async function apiPost(apiUrl, path, accessToken, body) {
- const url = `${apiUrl}${path}`;
- const res = await fetch(url, {
- method: "POST",
- headers: { "Content-Type": "application/json", Accept: "application/json", Authorization: `Bearer ${accessToken}` },
- body: JSON.stringify(body),
- });
- const text = await res.text();
- if (!res.ok) throw new Error(`${res.status}: ${text}`);
- return text ? JSON.parse(text) : null;
-}
-
-async function apiPut(apiUrl, path, accessToken, body) {
- const url = `${apiUrl}${path}`;
- const res = await fetch(url, {
- method: "PUT",
- headers: { "Content-Type": "application/json", Accept: "application/json", Authorization: `Bearer ${accessToken}` },
- body: JSON.stringify(body),
- });
- const text = await res.text();
- if (!res.ok) throw new Error(`${res.status}: ${text}`);
- return text ? JSON.parse(text) : null;
-}
-
-chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
- if (message?.type === "ping") {
- sendResponse({ ok: true, source: "background" });
- }
- // Panel asks for current tab’s selection; we forward to content script.
- if (message?.type === "REQUEST_SELECTION") {
- chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
- const activeTab = tabs?.[0];
- if (!activeTab?.id) {
- sendResponse({ ok: false });
- return;
- }
- chrome.tabs.sendMessage(
- activeTab.id,
- { type: "REQUEST_SELECTION" },
- (resp) => {
- if (chrome.runtime.lastError) {
- sendResponse({ ok: false, error: chrome.runtime.lastError.message });
- return;
- }
- sendResponse(resp);
- }
- );
- });
- return true;
- }
- // Full verification: claim → embedding → stream → analysis → sources.
- if (message?.type === "VERIFY_CLAIM") {
- const { claimText, accessToken, apiUrl } = message;
- if (!apiUrl || !accessToken || typeof claimText !== "string") {
- sendResponse({ success: false, error: "Missing apiUrl, accessToken, or claimText" });
- return;
- }
- runVerification(apiUrl, accessToken, claimText.trim())
- .then((data) => sendResponse({ success: true, ...data }))
- .catch((err) => sendResponse({ success: false, error: err?.message || String(err) }));
- return true;
- }
- if (message?.type === "GET_DISCUSSIONS") {
- const { apiUrl, accessToken } = message;
- if (!apiUrl || !accessToken) {
- sendResponse({ success: false, error: "Missing apiUrl or accessToken" });
- return;
- }
- (async () => {
- try {
- let data = await apiGet(apiUrl, "/v1/discussions/user", accessToken);
- if (!Array.isArray(data)) data = data?.discussions || data?.items || (data ? [data] : []);
- if (!Array.isArray(data)) {
- data = await apiGet(apiUrl, "/v1/discussions/", accessToken);
- if (!Array.isArray(data)) data = data?.discussions || data?.items || (data ? [data] : []);
- }
- sendResponse({ success: true, discussions: Array.isArray(data) ? data : [] });
- } catch (err) {
- sendResponse({ success: false, error: err?.message || String(err) });
- }
- })();
- return true;
- }
- if (message?.type === "GET_DISCUSSION") {
- const { apiUrl, accessToken, discussionId } = message;
- if (!apiUrl || !accessToken || !discussionId) {
- sendResponse({ success: false, error: "Missing apiUrl, accessToken, or discussionId" });
- return;
- }
- apiGet(apiUrl, `/v1/discussions/${discussionId}`, accessToken)
- .then((data) => sendResponse({ success: true, discussion: data }))
- .catch((err) => sendResponse({ success: false, error: err?.message || String(err) }));
- return true;
- }
- if (message?.type === "GET_POSTS") {
- const { apiUrl, accessToken, discussionId } = message;
- if (!apiUrl || !accessToken || !discussionId) {
- sendResponse({ success: false, error: "Missing apiUrl, accessToken, or discussionId" });
- return;
- }
- apiGet(apiUrl, `/v1/posts/discussion/${discussionId}`, accessToken)
- .then((data) => {
- const posts = Array.isArray(data) ? data : (data?.posts || data?.items || []);
- sendResponse({ success: true, posts });
- })
- .catch((err) => sendResponse({ success: false, error: err?.message || String(err) }));
- return true;
- }
- if (message?.type === "CREATE_DISCUSSION") {
- const { apiUrl, accessToken, title, description, analysis_id } = message;
- if (!apiUrl || !accessToken || !title || !description) {
- sendResponse({ success: false, error: "Missing apiUrl, accessToken, title, or description" });
- return;
- }
- const body = { title, description, analysis_id };
- apiPost(apiUrl, "/v1/discussions/", accessToken, body)
- .then((data) => sendResponse({ success: true, discussion: data }))
- .catch((err) => sendResponse({ success: false, error: err?.message || String(err) }));
- return true;
- }
- if (message?.type === "CREATE_POST") {
- const { apiUrl, accessToken, discussion_id, text } = message;
- if (!apiUrl || !accessToken || !discussion_id || !text) {
- sendResponse({ success: false, error: "Missing apiUrl, accessToken, discussion_id, or text" });
- return;
- }
- apiPost(apiUrl, "/v1/posts/", accessToken, { discussion_id, text })
- .then((data) => sendResponse({ success: true, post: data }))
- .catch((err) => sendResponse({ success: false, error: err?.message || String(err) }));
- return true;
- }
- if (message?.type === "GET_ME") {
- const { apiUrl, accessToken } = message;
- if (!apiUrl || !accessToken) {
- sendResponse({ success: false, error: "Missing apiUrl or accessToken" });
- return;
- }
- apiGet(apiUrl, "/v1/users/me", accessToken)
- .then((data) => sendResponse({ success: true, id: data?.id ?? data?.user_id ?? data?.sub, user: data }))
- .catch((err) => sendResponse({ success: false, error: err?.message || String(err) }));
- return true;
- }
- if (message?.type === "VOTE_POST") {
- const { apiUrl, accessToken, post_id, vote } = message;
- if (!apiUrl || !accessToken || !post_id || !vote) {
- sendResponse({ success: false, error: "Missing apiUrl, accessToken, post_id, or vote" });
- return;
- }
- apiPut(apiUrl, `/v1/posts/${post_id}/vote`, accessToken, { vote_type: vote })
- .then((data) => sendResponse({ success: true, data }))
- .catch((err) => sendResponse({ success: false, error: err?.message || String(err) }));
- return true;
- }
-});
-
diff --git a/web_extension/Veracity_Extension/public/config.json b/web_extension/Veracity_Extension/public/config.json
deleted file mode 100644
index 5709e79..0000000
--- a/web_extension/Veracity_Extension/public/config.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "API_URL": "https://api.veri-fact.ai",
- "AUTH0_CLIENT_ID": "IbuOc8IXQe6Z6PRsbCpPjxiJlub4npTp",
- "FORGOT_PASSWORD_URL": "https://www.veri-fact.ai/",
- "AUTH_LOGIN_URL": "https://www.veri-fact.ai/api/auth/login?returnTo=/chat",
- "AUTH_RESET_URL": "https://www.veri-fact.ai/api/auth/login?screen_hint=reset"
-}
diff --git a/web_extension/Veracity_Extension/public/content.js b/web_extension/Veracity_Extension/public/content.js
deleted file mode 100644
index a56198d..0000000
--- a/web_extension/Veracity_Extension/public/content.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * content.js — Injected into web pages
- *
- * Listens for REQUEST_SELECTION from the background (or panel). Returns the
- * current page selection and page URL/title so the side panel can prefill the
- * claim input and start verification. Only runs on pages where the extension
- * is allowed; does not modify the page.
- */
-(() => {
- const getSelectionPayload = () => {
- const text = window.getSelection()?.toString() || "";
- return {
- type: "VERACITY_SELECTION",
- text,
- url: window.location.href,
- title: document.title,
- };
- };
-
- chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
- if (message?.type === "REQUEST_SELECTION") {
- sendResponse(getSelectionPayload());
- return true;
- }
- });
-})();
-
diff --git a/web_extension/Veracity_Extension/public/icons/icon128.png b/web_extension/Veracity_Extension/public/icons/icon128.png
deleted file mode 100644
index 18ca0fb..0000000
Binary files a/web_extension/Veracity_Extension/public/icons/icon128.png and /dev/null differ
diff --git a/web_extension/Veracity_Extension/public/manifest.json b/web_extension/Veracity_Extension/public/manifest.json
deleted file mode 100644
index 6a15409..0000000
--- a/web_extension/Veracity_Extension/public/manifest.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "manifest_version": 3,
- "name": "Veracity",
- "description": "Veracity helps you verify claims, evaluate reliability, and discuss evidence with confidence.",
- "version": "0.0.1",
- "icons": {
- "128": "icons/icon128.png"
- },
- "action": {
- "default_title": "Veracity"
- },
- "permissions": ["sidePanel", "activeTab", "storage", "contextMenus", "tabs", "identity"],
- "host_permissions": ["https://www.veri-fact.ai/*", "https://api.veri-fact.ai/*", "https://veri-fact.ca.auth0.com/*"],
- "side_panel": {
- "default_path": "index.html"
- },
- "background": {
- "service_worker": "background.js",
- "type": "module"
- },
- "content_security_policy": {
- "extension_pages": "script-src 'self' 'wasm-unsafe-eval'; object-src 'self'; connect-src 'self' https://www.veri-fact.ai https://api.veri-fact.ai https://veri-fact.ca.auth0.com;"
- },
- "content_scripts": [
- {
- "matches": ["https://*/*", "http://*/*"],
- "js": ["content.js"],
- "run_at": "document_idle"
- }
- ],
- "web_accessible_resources": [
- {
- "resources": ["next/**", "icons/*", "panel.js", "index.html", "content.js", "background.js"],
- "matches": [""]
- }
- ]
-}
-
diff --git a/web_extension/Veracity_Extension/public/panel.css b/web_extension/Veracity_Extension/public/panel.css
deleted file mode 100644
index 4764acc..0000000
--- a/web_extension/Veracity_Extension/public/panel.css
+++ /dev/null
@@ -1,1020 +0,0 @@
-#root {
- font-family: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
- background: #fff;
- outline: 2px solid transparent;
-}
-
-/* Logout + Read more/Show less: force blue link style, no button chrome */
-#root button#logoutBtn.logout-link,
-#root #logoutBtn.logout-link,
-#root #discussionDescriptionToggle.logout-link {
- color: #1683ff !important;
- background: none !important;
- border: none !important;
- box-shadow: none !important;
- padding: 0 !important;
- font: inherit !important;
- cursor: pointer !important;
- text-decoration: none !important;
- min-width: 0 !important;
- border-radius: 0 !important;
-}
-#root button#logoutBtn.logout-link:hover,
-#root button#logoutBtn.logout-link:focus,
-#root #logoutBtn.logout-link:hover,
-#root #logoutBtn.logout-link:focus,
-#root #discussionDescriptionToggle.logout-link:hover,
-#root #discussionDescriptionToggle.logout-link:focus {
- color: #1683ff !important;
- background: none !important;
- border: none !important;
- box-shadow: none !important;
- text-decoration: underline !important;
- transform: none !important;
-}
-
-#root .verifyButton {
- border: none !important;
- outline: none !important;
- box-shadow: none !important;
-}
-
-#root .Home_primaryBtn__nO8b8.verifyButton {
- background-image: var(--gradient-brand);
- color: #fff;
- border: none;
- box-shadow: 0 8px 20px rgba(0, 0, 0, 0.08);
-}
-
-:root {
- --color-border: #e5e7eb;
- --color-surface: #ffffff;
- --color-ink: #0f172a;
- --color-muted: #6b7280;
- --gradient-brand: linear-gradient(135deg, #5B8CFF, #7CE7AC);
- --credibility-gradient: linear-gradient(268.88deg, #11F90E -27.27%, #1683FF 94.82%);
- --shadow-soft: 0 8px 20px rgba(0, 0, 0, 0.08);
-}
-
-.Home_panel__UGulu {
- font-family: inherit;
- background: #fff;
- padding: 10px 10px 14px;
- min-height: 100vh;
- display: flex;
- flex-direction: column;
- gap: 12px;
-}
-
-.Home_tabList__81_8M {
- display: flex;
- gap: 8px;
- flex-wrap: nowrap;
- overflow: visible;
- padding: 0;
- width: 100%;
- margin-top: 14px;
-}
-
-.Home_tabButton__yY1n3 {
- border: 1px solid var(--color-border);
- background: var(--color-surface);
- padding: 8px 8px;
- border-radius: 8px;
- cursor: pointer;
- transition: all 0.2s ease;
- min-width: 0;
- flex: 1;
- white-space: normal;
- text-align: center;
- overflow: visible;
-}
-
-.Home_tabButton__yY1n3:hover {
- box-shadow: var(--shadow-soft);
- transform: translateY(-1px);
-}
-
-.Home_tabButtonActive__zVobV {
- border-color: transparent;
- background-image: var(--gradient-brand);
- color: #ffffff;
- box-shadow: var(--shadow-soft);
-}
-
-.Home_tabLabel__IC30v {
- display: block;
- font-weight: 700;
- font-size: 12px;
- line-height: 16px;
-}
-
-.Home_card__E5spL {
- background: var(--color-surface);
- border: 1px solid var(--color-border);
- border-radius: 10px;
- box-shadow: none;
- padding: 12px;
- display: flex;
- flex-direction: column;
- gap: 12px;
- width: 100%;
-}
-
-.Home_headingRow__XUO2e {
- display: flex;
- align-items: center;
- justify-content: space-between;
- gap: 8px;
-}
-
-#root .expertHeadingRow {
- justify-content: center;
- text-align: center;
-}
-
-#root .expertHeroHeading {
- text-align: center;
- color: var(--color-ink);
- margin: 10px 0 16px;
-}
-
-#root .expertErrorText {
- font-size: 12px;
- color: #b91c1c;
- text-align: center;
- min-height: 16px;
-}
-
-#root .discussionHub {
- display: flex;
- flex-direction: column;
- gap: 12px;
-}
-
-#root .discussionHeader {
- display: flex;
- align-items: center;
- justify-content: space-between;
- gap: 8px;
-}
-
-#root .discussionCreateRow {
- display: flex;
- justify-content: center;
- margin-top: 12px;
-}
-
-#root .createDiscussionCta {
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: 6px;
- margin-top: 12px;
-}
-
-#root .createDiscussionHelper {
- font-size: 12px;
- font-weight: 400;
- color: #6b7280;
- text-align: center;
-}
-
-#root .createDiscussionForm {
- margin-top: 10px;
- width: 100%;
-}
-
-#root .discussionTitle {
- font-weight: 600;
- margin-bottom: 6px;
-}
-
-#root .discussionDetailHeader {
- display: flex;
- flex-direction: column;
- gap: 6px;
-}
-
-#root .discussionDetailTitle {
- font-weight: 600;
- font-size: 16px;
- margin: 0;
-}
-
-#root .discussionDetailDescription {
- margin: 0;
- font-size: 14px;
- color: #6b7280;
- white-space: pre-line;
-}
-
-#root .discussionDescriptionPreview {
- display: -webkit-box;
- -webkit-line-clamp: 2;
- -webkit-box-orient: vertical;
- overflow: hidden;
-}
-
-#root .discussionActionBtn {
- min-width: 140px;
-}
-
-#root .discussionScroll {
- max-height: calc(100vh - 260px);
- overflow-y: auto;
- padding-right: 4px;
-}
-
-#root .discussionList,
-#root .postsList {
- display: flex;
- flex-direction: column;
- gap: 10px;
-}
-
-#root .discussionItem {
- border: 1px solid var(--color-border);
- border-radius: 12px;
- padding: 12px;
- background: #fff;
- cursor: pointer;
- display: flex;
- flex-direction: column;
- gap: 6px;
- transition: box-shadow 0.15s ease, transform 0.15s ease;
-}
-
-#root .discussionItem:hover {
- box-shadow: var(--shadow-soft);
- transform: translateY(-1px);
-}
-
-#root .discussionTitle {
- font-size: 15px;
- font-weight: 700;
- color: var(--color-ink);
-}
-
-#root .discussionDescription {
- font-size: 13px;
- color: #3a3f4b;
- line-height: 18px;
-}
-
-#root .discussionMeta {
- display: flex;
- align-items: center;
- gap: 6px;
- font-size: 12px;
- color: #6b7280;
-}
-
-#root .discussionStats {
- display: flex;
- gap: 10px;
- font-size: 12px;
- color: #0f172a;
- font-weight: 600;
-}
-
-#root .discussionStat {
- background: #f5f6f8;
- border-radius: 999px;
- padding: 4px 8px;
-}
-
-#root .discussionLoading,
-#root .discussionEnd {
- text-align: center;
- font-size: 12px;
- color: #6b7280;
- padding: 8px 0;
-}
-
-#root .discussionForm {
- display: flex;
- flex-direction: column;
- gap: 8px;
- padding: 10px;
- border: 1px solid var(--color-border);
- border-radius: 12px;
- background: #fff;
-}
-
-#root .discussionFormActions {
- display: flex;
- gap: 8px;
- flex-wrap: wrap;
-}
-
-#root .discussionError {
- font-size: 12px;
- color: #b91c1c;
-}
-
-#root .discussionBackBtn {
- align-self: flex-start;
- background: transparent;
- border: none;
- font-size: 13px;
- font-weight: 600;
- color: #0f172a;
- cursor: pointer;
-}
-
-#root .discussionDetailHeader {
- display: flex;
- flex-direction: column;
- gap: 6px;
- padding: 4px 0 2px;
-}
-
-#root .discussionDetailTitle {
- font-size: 18px;
- font-weight: 800;
- color: var(--color-ink);
- line-height: 22px;
-}
-
-#root .discussionDetailDescription {
- font-size: 13px;
- color: #3a3f4b;
- line-height: 18px;
-}
-
-#root .discussionControls {
- display: flex;
- align-items: center;
- justify-content: space-between;
- gap: 10px;
- flex-wrap: wrap;
-}
-
-#root .discussionSort {
- display: flex;
- gap: 8px;
- flex-wrap: nowrap;
-}
-
-#root .sortPill {
- border-radius: 999px;
- padding: 6px 12px;
- font-size: 12px;
- font-weight: 700;
- box-shadow: none;
- min-width: 64px;
-}
-
-#root .sortPillActive {
- opacity: 0.95;
- box-shadow: var(--shadow-soft);
-}
-
-#root .postCard {
- border: 1px solid var(--color-border);
- border-radius: 12px;
- padding: 12px;
- background: #fff;
- display: flex;
- gap: 12px;
- align-items: flex-start;
-}
-
-#root .postContent {
- display: flex;
- flex-direction: column;
- gap: 8px;
- flex: 1 1 auto;
- min-width: 0;
-}
-
-#root .postBody {
- font-size: 13px;
- color: #3a3f4b;
- line-height: 18px;
- word-break: break-word;
-}
-
-#root .postMeta {
- display: flex;
- align-items: center;
- gap: 6px;
- font-size: 12px;
- color: #6b7280;
-}
-
-#root .postVotes {
- display: flex;
- align-items: center;
- gap: 14px;
-}
-
-#root .voteGroup {
- display: inline-flex;
- align-items: center;
- gap: 6px;
-}
-
-#root .voteBtn {
- border: 1px solid var(--color-border);
- background: #fff;
- border-radius: 8px;
- padding: 4px 6px;
- font-size: 12px;
- cursor: pointer;
- color: #6b7280;
- transition: box-shadow 0.15s ease, border-color 0.15s ease, color 0.15s ease, transform 0.15s ease;
-}
-
-#root .voteBtn:hover {
- border-color: #cbd5f5;
- color: #0f172a;
- box-shadow: var(--shadow-soft);
- transform: translateY(-1px);
-}
-
-#root .voteBtn:focus-visible {
- outline: none;
- box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.25);
-}
-
-#root .voteBtn:disabled {
- opacity: 0.5;
- cursor: not-allowed;
- box-shadow: none;
- transform: none;
-}
-
-#root .voteBtn:disabled:hover {
- border-color: var(--color-border);
- color: #6b7280;
- box-shadow: none;
-}
-
-#root .voteBtn.voted {
- border-color: #94a3b8;
- color: #0f172a;
-}
-
-#root .voteCount {
- font-size: 12px;
- font-weight: 700;
- color: #0f172a;
- min-width: 18px;
-}
-
-#root .isHidden {
- display: none;
-}
-
-@media (max-width: 480px) {
- #root .discussionScroll {
- max-height: calc(100vh - 230px);
- }
-}
-
-.Home_sectionTitle__DKb2S {
- font-size: 18px;
- font-weight: 700;
- color: var(--color-ink);
-}
-
-.Home_sectionBody__JASIX {
- font-size: 14px;
- color: #3a3a3a;
- line-height: 18px;
-}
-
-.Home_testBadge__dtTdC {
- display: inline-flex;
- align-items: center;
- padding: 2px 6px;
- border-radius: 999px;
- background: #f8f8f8;
- color: #555;
- font-size: 10px;
- font-weight: 700;
- border: 1px solid #e5e5e5;
- opacity: 0.75;
-}
-
-.Home_textarea__k243o {
- width: 100%;
- border: 1px solid var(--color-border);
- border-radius: 12px;
- padding: 12px;
- font-size: 14px;
- font-family: inherit;
- resize: vertical;
- background: #fff;
- color: var(--color-ink);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.03);
- transition: border-color 0.15s ease, box-shadow 0.15s ease;
-}
-
-.Home_textarea__k243o:focus {
- outline: none;
- border-color: #8ab6ff;
- box-shadow: 0 0 0 3px rgba(90, 134, 255, 0.18);
-}
-
-/* apply same styling to inputs used in expert form */
-input.Home_textarea__k243o {
- height: 38px;
-}
-
-.Home_buttonRow__Cnhie {
- display: flex;
- gap: 8px;
- flex-wrap: nowrap;
- justify-content: center;
-}
-
-.Home_primaryBtn__nO8b8,
-.Home_heroSecondaryBtn__2ba6l {
- flex: 0 0 auto;
- min-width: 120px;
- padding: 12px 18px;
- border-radius: 999px;
- border: 1px solid var(--color-border);
- background: #fff;
- cursor: pointer;
- font-size: 13px;
- font-weight: 700;
- transition: all 0.15s ease;
-}
-
-.Home_primaryBtn__nO8b8 {
- background-image: var(--gradient-brand);
- color: #fff;
- border: none;
- box-shadow: 0 8px 20px rgba(0, 0, 0, 0.08);
-}
-
-.Home_primaryBtn__nO8b8:hover,
-.Home_heroSecondaryBtn__2ba6l:hover {
- box-shadow: var(--shadow-soft);
- transform: translateY(-1px);
-}
-
-#root .verifyButton:disabled,
-#root .verifyButton:disabled:hover,
-#root .verifyButton:disabled:active {
- opacity: 0.6;
- cursor: not-allowed;
- box-shadow: none;
- transform: none;
-}
-
-/* Status chip: single container, used only for "Verifying" state */
-.statusRow {
- display: flex;
- justify-content: flex-start;
-}
-
-.statusChip {
- display: inline-flex;
- align-items: center;
- gap: 8px;
- padding: 8px 14px;
- border-radius: 999px;
- font-size: 13px;
- font-weight: 600;
- transition: opacity 0.2s ease, transform 0.15s ease;
-}
-
-.statusChip-text {
- color: inherit;
-}
-
-/* Verifying: gradient (matches Verify button), white text, spinner left */
-.statusChip.status--verifying {
- background: var(--gradient-brand);
- border: none;
- color: #fff;
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
-}
-
-.statusChip.status--verifying .statusChip-icon {
- width: 14px;
- height: 14px;
- border: 2px solid rgba(255, 255, 255, 0.4);
- border-top-color: #fff;
- border-radius: 50%;
- animation: statusSpinner 0.7s linear infinite;
-}
-
-@keyframes statusSpinner {
- to { transform: rotate(360deg); }
-}
-
-.statusChip .statusChip-icon {
- display: inline-flex;
- align-items: center;
- justify-content: center;
- flex-shrink: 0;
-}
-
-#root .reliabilityCard {
- display: flex;
- flex-direction: column;
- gap: 10px;
- margin-top: 24px;
- padding: 16px;
- border: 1px solid #e5e7eb;
- border-radius: 12px;
- width: 100%;
- background: #fff;
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.04);
-}
-
-#root .reliabilityGrid {
- display: grid;
- grid-template-columns: 110px 1fr;
- gap: 14px;
- align-items: center;
-}
-
-#root .reliabilityGauge {
- position: relative;
- width: 104px;
- height: 104px;
- display: flex;
- align-items: center;
- justify-content: center;
- overflow: visible;
-}
-
-#root .reliabilityGaugeRing {
- width: 104px;
- height: 104px;
- border-radius: 50%;
- position: absolute;
- inset: 0;
- transform: rotate(-90deg);
- background-image:
- conic-gradient(
- transparent 0deg var(--score-deg, 0deg),
- var(--ring-track, #e5e7eb) var(--score-deg, 0deg) 360deg
- ),
- var(--credibility-gradient);
- background-repeat: no-repeat;
- background-size: 100% 100%;
- background-position: center;
- /* Donut cutout (preferred) */
- -webkit-mask: radial-gradient(circle, transparent 55%, #000 56%);
- mask: radial-gradient(circle, transparent 55%, #000 56%);
-}
-
-#root .reliabilityGaugeRing::before {
- content: "";
- position: absolute;
- inset: 10px;
- border-radius: 50%;
- background: #fff;
-}
-
-#root .reliabilityGaugeInner {
- position: absolute;
- inset: 0;
- z-index: 1;
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: 2px;
- text-align: center;
- justify-content: center;
-}
-
-#root .reliabilityGaugeLabel {
- font-size: 12px;
- color: #6b7280;
- font-weight: 600;
-}
-
-#root .reliabilityValue {
- font-size: 30px;
- font-weight: 800;
- background: var(--credibility-gradient);
- -webkit-background-clip: text;
- background-clip: text;
- color: transparent;
-}
-
-#root .reliabilitySummary {
- font-size: 12px;
- color: #3a3f4b;
- line-height: 16px;
-}
-
-#root .reliabilitySummary.summaryCollapsed {
- display: -webkit-box;
- -webkit-line-clamp: 4;
- -webkit-box-orient: vertical;
- overflow: hidden;
-}
-
-#root .reliabilitySummaryWrap {
- display: flex;
- flex-direction: column;
- gap: 4px;
-}
-
-#root .summaryToggle {
- background: none;
- border: none;
- padding: 0;
- font-size: 12px;
- font-weight: 600;
- color: #1683ff;
- cursor: pointer;
- align-self: flex-start;
- text-decoration: none;
-}
-
-#root .summaryToggle:hover {
- text-decoration: underline;
-}
-
-#root .reliabilityCopy {
- display: flex;
- flex-direction: column;
- gap: 6px;
-}
-
-#root .reliabilityHeadline {
- font-size: 18px;
- font-weight: 800;
- color: #0f172a;
-}
-
-#root .reliabilitySubhead {
- font-size: 15px;
- font-weight: 700;
- color: #0f172a;
-}
-
-/* Reliability card (namespaced) */
-#root .reliabilityCard {
- display: flex;
- flex-direction: column;
- gap: 6px;
- padding: 12px;
- border: 1px solid var(--color-border);
- border-radius: 12px;
- width: 100%;
- background: #fff;
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.04);
-}
-
-#root .reliabilityGrid {
- display: grid;
- grid-template-columns: 110px 1fr;
- gap: 12px;
- align-items: center;
-}
-
-#root .reliabilityGauge {
- width: 100%;
- display: flex;
- justify-content: center;
-}
-
-#root .reliabilityGaugeRing {
- width: 96px;
- height: 96px;
- border-radius: 50%;
- background-image:
- conic-gradient(
- transparent 0deg var(--score-deg, 0deg),
- #e5e7eb var(--score-deg, 0deg) 360deg
- ),
- var(--credibility-gradient);
- background-repeat: no-repeat;
- background-size: 100% 100%;
- background-position: center;
- display: flex;
- align-items: center;
- justify-content: center;
- position: relative;
-}
-
-#root .reliabilityGaugeRing::after {
- content: "";
- position: absolute;
- width: 72px;
- height: 72px;
- border-radius: 50%;
- background: #fff;
-}
-
-#root .reliabilityGaugeRing > .reliabilityValue {
- position: relative;
- z-index: 1;
-}
-
-#root .reliabilityValue {
- font-size: 32px;
- font-weight: 800;
- background: var(--credibility-gradient);
- -webkit-background-clip: text;
- background-clip: text;
- color: transparent;
-}
-
-#root .reliabilityLabel {
- font-size: 13px;
- color: #555;
- font-weight: 700;
-}
-
-#root .reliabilitySummary {
- font-size: 12px;
- color: #3a3f4b;
- line-height: 16px;
-}
-
-#root .reliabilityCopy {
- display: flex;
- flex-direction: column;
- gap: 4px;
-}
-
-#root .reliabilityHeadline {
- font-size: 16px;
- font-weight: 800;
- color: #0f172a;
-}
-
-#root .reliabilitySubhead {
- font-size: 14px;
- font-weight: 700;
- color: #0f172a;
-}
-
-.Home_footer__yFiaX {
- margin-top: 14px;
- font-size: 12px;
- color: var(--color-muted);
- text-align: center;
- padding: 8px 0;
-}
-
-#root .sourcesCarousel {
- position: relative;
- width: 100%;
- max-width: 100%;
- box-sizing: border-box;
- padding: 12px 48px;
-}
-
-#root .sourceCardWrapper {
- width: 240px;
- max-width: 240px;
- box-sizing: border-box;
-}
-
-#root .sourceTopText {
- margin-top: 8px;
- font-size: 12px;
-}
-
-#root .sourceNumberBlock {
- background-color: #000;
- color: #fff;
- font-weight: 700;
- padding: 0 6px;
- border-radius: 6px;
-}
-
-#root .sourceCardLink {
- text-decoration: none;
- color: inherit;
- display: block;
-}
-
-#root .sourceCard {
- border: 1px solid #e5e5e5;
- border-radius: 10px;
- margin-top: 8px;
- padding: 14px;
- font-size: 13px;
- font-weight: 400;
- line-height: 16px;
- background: #fff;
- width: 240px;
- max-width: 240px;
- min-height: 100px;
- box-sizing: border-box;
- overflow: hidden;
-}
-
-#root .sourceCredibilityPill {
- display: inline-flex;
- align-items: center;
- padding: 0 7px;
- border-radius: 2px;
- font-weight: 700;
- font-size: 12px;
- background: var(--credibility-gradient);
- color: #fff;
- margin-bottom: 6px;
- opacity: 0.9;
-}
-
-#root .sourceHeading {
- font-size: 16px;
- font-weight: 700;
- line-height: 20px;
- color: #0f172a;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-#root .sourcesDescription {
- font-size: 13px;
- line-height: 16px;
- margin: 6px 0;
- color: #1f2937;
- display: -webkit-box;
- -webkit-line-clamp: 3;
- -webkit-box-orient: vertical;
- overflow: hidden;
-}
-
-#root .sourceName {
- color: #727272;
- font-size: 12px;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-#root .carouselNavButton {
- position: absolute;
- top: 50%;
- transform: translateY(-50%);
- width: 34px;
- height: 34px;
- border-radius: 999px;
- border: 1px solid #e2e8f0;
- background: #fff;
- color: #374151;
- cursor: pointer;
- z-index: 2;
- display: inline-flex;
- align-items: center;
- justify-content: center;
- line-height: 1;
- transition: box-shadow 0.15s ease, border-color 0.15s ease, color 0.15s ease;
-}
-
-#root .carouselNavButtonLeft {
- left: 10px;
-}
-
-#root .carouselNavButtonRight {
- right: 10px;
-}
-
-#root .carouselNavButton:hover {
- box-shadow: 0 6px 16px rgba(15, 23, 42, 0.15);
- border-color: #cbd5f5;
-}
-
-#root .carouselNavButton:focus-visible {
- outline: none;
- box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.25);
-}
-
-#root .carouselNavButtonDisabled {
- opacity: 0.4;
- cursor: not-allowed;
- box-shadow: none;
-}
-
-#root .carouselNavButtonDisabled:hover {
- box-shadow: none;
- border-color: #e2e8f0;
-}
-
-#root .carouselChevron {
- width: 16px;
- height: 16px;
- display: block;
-}
-
-@media (max-width: 360px) {
- #root .sourcesCarousel {
- padding-left: 48px;
- padding-right: 48px;
- }
-
- #root .carouselNavButton {
- width: 28px;
- height: 28px;
- }
-}
-
diff --git a/web_extension/Veracity_Extension/scripts/postbuild.js b/web_extension/Veracity_Extension/scripts/postbuild.js
deleted file mode 100644
index 19c580a..0000000
--- a/web_extension/Veracity_Extension/scripts/postbuild.js
+++ /dev/null
@@ -1,1775 +0,0 @@
-/**
- * postbuild.js — Extension dist builder
- *
- * Run after `npm run export`. Produces web_extension/Veracity_Extension/dist/ from
- * Next.js output: rewrites _next → next for Chrome, injects CSP and panel loader
- * into HTML, copies public assets and inlines auth + panel UI into panel.js.
- * Panel lifecycle: DOMContentLoaded → loadConfig → syncAuthUI (auth gate) →
- * renderAppScreen (tabs: AI / Discussion / Expert) or landing; verify flow and
- * discussion hub talk to backend via background script messaging.
- */
-(function () {
-const fs = require("fs");
-const path = require("path");
-
-const root = process.cwd();
-const out = path.join(root, "out");
-const dist = path.join(root, "dist");
-
-if (fs.existsSync(dist)) {
- fs.rmSync(dist, { recursive: true, force: true });
-}
-
-// --- Path and CSP helpers (Chrome disallows _next in paths) ---
-const rewritePaths = (content) =>
- content
- .replace(/\/_next\//g, "/next/")
- .replace(/\.\/_next\//g, "./next/")
- .replace(/"\/_next\//g, '"/next/')
- .replace(/'\/_next\//g, "'/next/")
- .replace(/"\/next\//g, '"./next/')
- .replace(/'\/next\//g, "'./next/")
- .replace(/_next\//g, "next/");
-
-const upsertCspMeta = (content, cspString) => {
- const cspTag = ` `;
- if (content.includes("Content-Security-Policy")) {
- return content.replace(
- / ]*http-equiv=["']Content-Security-Policy["'][^>]*>/i,
- cspTag
- );
- }
- const viewport =
- ' ';
- if (content.includes(viewport)) {
- return content.replace(viewport, `${viewport}${cspTag}`);
- }
- if (content.includes("")) {
- return content.replace("", `${cspTag}`);
- }
- return `${cspTag}${content}`;
-};
-
-const simpleCsp =
- "script-src 'self' 'wasm-unsafe-eval'; object-src 'self'; connect-src 'self' https://www.veri-fact.ai https://api.veri-fact.ai https://veri-fact.ca.auth0.com;";
-
-const copyRecursive = (src, dest) => {
- if (!fs.existsSync(src)) return;
- const stat = fs.statSync(src);
- if (stat.isDirectory()) {
- fs.mkdirSync(dest, { recursive: true });
- fs.readdirSync(src).forEach((entry) => {
- copyRecursive(path.join(src, entry), path.join(dest, entry));
- });
- } else {
- fs.mkdirSync(path.dirname(dest), { recursive: true });
- fs.copyFileSync(src, dest);
- }
-};
-
-// --- Assemble dist: use existing out/ or synthesize from .next/server/pages ---
-if (!fs.existsSync(out)) {
- const pagesDir = path.join(root, ".next", "server", "pages");
- const staticDir = path.join(root, ".next", "static");
- if (!fs.existsSync(pagesDir)) {
- throw new Error("expected out/ after build");
- }
- fs.mkdirSync(out, { recursive: true });
- copyRecursive(path.join(pagesDir, "index.html"), path.join(out, "index.html"));
- copyRecursive(path.join(pagesDir, "404.html"), path.join(out, "404.html"));
- copyRecursive(staticDir, path.join(out, "_next", "static"));
- const publicDir = path.join(root, "public");
- copyRecursive(path.join(publicDir, "manifest.json"), path.join(out, "manifest.json"));
- copyRecursive(path.join(publicDir, "background.js"), path.join(out, "background.js"));
- copyRecursive(path.join(publicDir, "content.js"), path.join(out, "content.js"));
- copyRecursive(path.join(publicDir, "icons"), path.join(out, "icons"));
- copyRecursive(path.join(publicDir, "config.json"), path.join(out, "config.json"));
-}
-
-// Rename out -> dist
-fs.renameSync(out, dist);
-
-// Copy webapp hero stylesheet into dist for the landing hero
-const heroCssSrc = path.join(root, "styles", "webapp-hero.css");
-const heroCssDest = path.join(dist, "webapp-hero.css");
-if (fs.existsSync(heroCssSrc)) {
- fs.copyFileSync(heroCssSrc, heroCssDest);
-}
-
-// Copy panel stylesheet into dist (plain CSS for panel.js UI)
-const panelCssSrc = path.join(root, "public", "panel.css");
-const panelCssDest = path.join(dist, "panel.css");
-if (fs.existsSync(panelCssSrc)) {
- fs.copyFileSync(panelCssSrc, panelCssDest);
-}
-
-// Rename _next -> next inside dist
-const legacyNext = path.join(dist, "_next");
-const renamedNext = path.join(dist, "next");
-if (fs.existsSync(legacyNext)) {
- if (fs.existsSync(renamedNext)) {
- fs.rmSync(renamedNext, { recursive: true, force: true });
- }
- fs.renameSync(legacyNext, renamedNext);
-}
-
-const targets = [
- path.join(dist, "index.html"),
- path.join(dist, "404.html"),
- path.join(dist, "index.txt"),
- path.join(dist, "manifest.json"),
-];
-
-// --- Rewrite HTML: replace body with root + panel.js, inject styles and CSP ---
-targets.forEach((file) => {
- if (!fs.existsSync(file)) return;
- const data = fs.readFileSync(file, "utf8");
- let updated = rewritePaths(data);
- if (file.endsWith(".html")) {
- updated = updated.replace(/'
- );
- updated = updated.replace(
- "",
- ' '
- );
- updated = upsertCspMeta(
- updated,
- `default-src 'self'; ${simpleCsp} style-src 'self' 'unsafe-inline'; base-uri 'self';`
- );
- }
- fs.writeFileSync(file, updated);
-});
-
-// --- Manifest: CSP and host_permissions from public/manifest.json ---
-const manifestPath = path.join(dist, "manifest.json");
-if (fs.existsSync(manifestPath)) {
- const manifest = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
- const publicManifestPath = path.join(root, "public", "manifest.json");
- const publicManifest = fs.existsSync(publicManifestPath)
- ? JSON.parse(fs.readFileSync(publicManifestPath, "utf8"))
- : null;
- manifest.content_security_policy = manifest.content_security_policy || {};
- manifest.content_security_policy.extension_pages =
- publicManifest?.content_security_policy?.extension_pages || simpleCsp;
- if (publicManifest?.host_permissions) {
- manifest.host_permissions = publicManifest.host_permissions;
- }
- if (manifest.web_accessible_resources) {
- manifest.web_accessible_resources = manifest.web_accessible_resources.map((entry) => {
- if (entry.resources) {
- entry.resources = entry.resources.map((res) =>
- res.replace(/^_next\//, "next/").replace(/\/_next\//g, "/next/")
- );
- }
- return entry;
- });
- }
- fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));
-}
-
-// --- Auth module inlined into panel.js (PKCE + JWKS); no separate script tag ---
-const authJsPath = path.join(root, "src", "lib", "auth.js");
-const authJs = fs.existsSync(authJsPath) ? fs.readFileSync(authJsPath, "utf8") : "";
-
-/**
- * Panel script template. Injected into dist/panel.js after auth.
- * Flow: load config → syncAuthUI (if authenticated render app with tabs, else landing) →
- * AI tab: verify claim via background VERIFY_CLAIM; Discussion: list/detail + GET_* / CREATE_* / VOTE_POST.
- * Discussion store: discussions[], postsByDiscussionId[discussionId]; normalized with created_at, hasVoted, userVote.
- */
-const panelJs = `document.addEventListener('DOMContentLoaded', () => {
- const root = document.getElementById('root');
- try {
- let API_URL = '';
- let AUTH0_CLIENT_ID = '';
- let activeTab = 'ai';
- let authError = null;
- let pendingDiscussionId = null;
- let currentSourceIndex = 0;
- let isVerifying = false;
- let lastClaimText = '';
- let lastVerifiedClaim = '';
- let lastFactCheck = null;
- let lastAnalysisResult = null;
- const normalizeError = (err) => {
- if (!err) return 'Something went wrong. Please try again.';
- if (typeof err === 'string') return err;
- if (err instanceof Error) return err.message || 'Something went wrong. Please try again.';
- if (typeof err === 'object') {
- try {
- return (
- err.error_description ||
- err.message ||
- JSON.stringify(err)
- );
- } catch {
- return 'Something went wrong. Please try again.';
- }
- }
- return 'Something went wrong. Please try again.';
- };
-
- const setInlineMessage = (msg) => {
- const inline = document.getElementById('authErrorDisplay') || root?.querySelector('#authStatusText');
- if (inline) inline.textContent = msg || '';
- };
-
- const setAuthStatus = (msg) => {
- const statusEl = root?.querySelector('#authStatusText') || document.getElementById('authStatusText');
- if (statusEl) statusEl.textContent = msg || '';
- };
-
- const tabs = {
- ai: { label: 'AI Fact Verification', body: 'Placeholder content.' },
- discussion: { label: 'Discussion Hub', body: 'Placeholder content.' },
- expert: { label: 'Contact an Expert', body: 'Placeholder content.' },
- };
-
- /** Show Verifying pill when active === true; remove from DOM when active === false. */
- const toggleVerifyingUI = (active) => {
- if (active) {
- const container = root?.querySelector('#verifyingStatusContainer');
- if (!container || container.querySelector('#statusChip')) return;
- const pill = document.createElement('span');
- pill.id = 'statusChip';
- pill.className = 'statusChip status--verifying';
- pill.setAttribute('aria-live', 'polite');
- pill.innerHTML = 'Verifying ';
- container.appendChild(pill);
- } else {
- const chip = root?.querySelector('#statusChip');
- if (chip) chip.remove();
- }
- };
-
- /** Single source of truth: set isVerifying and show/remove Verifying pill. */
- const setVerifying = (active) => {
- isVerifying = !!active;
- toggleVerifyingUI(active);
- updateVerifyButtonState();
- };
-
- const updateVerifyButtonState = () => {
- const claimInput = root?.querySelector('#claimInput');
- const verifyBtn = root?.querySelector('#verifyBtn');
- if (!verifyBtn) return;
- const trimmed = (claimInput?.value || '').trim();
- verifyBtn.disabled = isVerifying || trimmed.length === 0 || trimmed === lastVerifiedClaim;
- };
-
- const escapeHtml = (value) => {
- return String(value || '')
- .replace(/&/g, '&')
- .replace(//g, '>')
- .replace(/"/g, '"')
- .replace(/'/g, ''');
- };
-
- const truncateAtWord = (text, maxLen) => {
- const str = String(text || '');
- if (str.length <= maxLen) return { display: str, isLong: false };
- const slice = str.slice(0, maxLen);
- const lastSpace = slice.lastIndexOf(' ');
- const cut = lastSpace > 0 ? lastSpace : maxLen;
- return { display: str.slice(0, cut), isLong: true };
- };
-
- const MONTH_NAMES = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
- const formatAbsoluteTime = (timestamp) => {
- if (timestamp == null || !Number.isFinite(timestamp)) return '';
- const t = timestamp < 1e12 ? timestamp * 1000 : timestamp;
- const d = new Date(t);
- const month = MONTH_NAMES[d.getMonth()];
- const day = d.getDate();
- const year = d.getFullYear();
- const h = d.getHours();
- const m = d.getMinutes();
- const hh = String(h).padStart(2, '0');
- const mm = String(m).padStart(2, '0');
- return month + ' ' + day + ', ' + year + ' · ' + hh + ':' + mm;
- };
-
- let currentUserId = null;
- const parseJwtSub = (token) => {
- if (!token || typeof token !== 'string') return null;
- try {
- const parts = token.split('.');
- if (parts.length !== 3) return null;
- const payload = JSON.parse(atob(parts[1].replace(/-/g, '+').replace(/_/g, '/')));
- return payload.sub != null ? String(payload.sub) : null;
- } catch (_) {
- return null;
- }
- };
-
- const truncateText = (text, limit = 140) => {
- const value = String(text || '');
- if (value.length <= limit) return value;
- return value.slice(0, limit).trim() + '…';
- };
-
- const discussionStore = { discussions: [], postsByDiscussionId: {} };
-
- const parseTimestamp = (v) => {
- if (v == null) return null;
- if (typeof v === 'number' && Number.isFinite(v)) return v < 1e12 ? v * 1000 : v;
- if (typeof v === 'string') { const n = Date.parse(v); return Number.isFinite(n) ? n : null; }
- return null;
- };
-
- const mapApiDiscussion = (d) => {
- const id = String(d.id ?? d.discussion_id ?? '');
- const title = d.title ?? 'Discussion';
- const nonEmpty = (v) => v != null && String(v).trim() !== '';
- const trim = (v) => (v != null ? String(v).trim() : '');
- let description = '';
- if (nonEmpty(d.description)) description = trim(d.description);
- else if (nonEmpty(d.text)) description = trim(d.text);
- else if (nonEmpty(d.body)) description = trim(d.body);
- else if (nonEmpty(d.content)) description = trim(d.content);
- const user_id = d.user_id != null ? d.user_id : undefined;
- const author = (user_id != null && String(user_id).trim() !== '') ? ('u/' + String(user_id).trim()) : 'u/anonymous';
- const created_at = parseTimestamp(d.created_at) ?? parseTimestamp(d.createdAt) ?? null;
- const updated_at = parseTimestamp(d.updated_at) ?? parseTimestamp(d.updatedAt) ?? null;
- return {
- id,
- title,
- description,
- analysis_id: d.analysis_id ?? undefined,
- user_id,
- created_at,
- updated_at,
- author,
- createdAt: created_at != null ? created_at : undefined,
- voteScore: d.vote_score ?? d.voteScore ?? 0,
- postCount: d.post_count ?? d.postCount ?? 0,
- };
- };
-
- const mapApiPost = (p, discussionId) => {
- const voteScore = p.vote_score ?? p.voteScore ?? 0;
- const rawUp =
- Number.isFinite(p.up_votes) ? p.up_votes :
- Number.isFinite(p.upvotes) ? p.upvotes :
- undefined;
- const rawDown =
- Number.isFinite(p.down_votes) ? p.down_votes :
- Number.isFinite(p.downvotes) ? p.downvotes :
- undefined;
- const upvotes = Number.isFinite(rawUp) ? rawUp : Math.max(0, Math.floor(voteScore * 0.7));
- const downvotes = Number.isFinite(rawDown) ? rawDown : Math.max(0, Math.round(voteScore) - upvotes);
- const created_at = parseTimestamp(p.created_at) ?? parseTimestamp(p.createdAt) ?? null;
- const userVoteRaw = p.user_vote ?? p.current_user_vote;
- const userVote = (userVoteRaw === 'up' || userVoteRaw === 'down') ? userVoteRaw : null;
- const hasVoted = userVote != null;
- return {
- id: String(p.id ?? p.post_id ?? ''),
- discussionId: String(discussionId),
- title: p.title ?? '',
- body: p.text ?? p.body ?? '',
- created_at,
- createdAt: created_at != null ? created_at : (typeof p.created_at === 'number' ? (p.created_at < 1e12 ? p.created_at * 1000 : p.created_at) : (p.createdAt ?? Date.now())),
- voteScore,
- upvotes,
- downvotes,
- hasVoted,
- userVote,
- };
- };
-
-
- const discussionState = {
- view: 'list',
- selectedId: null,
- discussionCursor: 0,
- discussionsHasMore: true,
- discussionsLoading: false,
- discussionSort: 'new',
- postsCursorById: {},
- postsHasMoreById: {},
- postsLoadingById: {},
- postsSortById: {},
- };
-
- const fetchDiscussions = async ({ cursor = 0, limit = 6, sort = 'new' } = {}) => {
- if (cursor === 0 && discussionStore.discussions.length === 0 && API_URL) {
- try {
- const token = await ensureAccessToken();
- const res = await sendBackgroundMessage({ type: 'GET_DISCUSSIONS', apiUrl: API_URL, accessToken: token });
- if (res.success && Array.isArray(res.discussions)) {
- discussionStore.discussions = res.discussions.map(mapApiDiscussion);
- }
- } catch (_) {}
- }
- const sorted = [...discussionStore.discussions].sort((a, b) => {
- if (sort === 'top') return b.voteScore - a.voteScore;
- return b.createdAt - a.createdAt;
- });
- const start = Math.max(0, cursor);
- const items = sorted.slice(start, start + limit);
- const nextCursor = start + limit < sorted.length ? start + limit : null;
- return { items, nextCursor, hasMore: nextCursor !== null };
- };
-
- const fetchPosts = ({ discussionId, cursor = 0, limit = 6, sort = 'top' } = {}) => {
- const base = discussionStore.postsByDiscussionId[discussionId] || [];
- const sorted = [...base].sort((a, b) => {
- if (sort === 'new') return b.createdAt - a.createdAt;
- return b.voteScore - a.voteScore;
- });
- const start = Math.max(0, cursor);
- const items = sorted.slice(start, start + limit);
- const nextCursor = start + limit < sorted.length ? start + limit : null;
- return Promise.resolve({ items, nextCursor, hasMore: nextCursor !== null });
- };
-
- const buildFactCheckPostBody = ({ claim, score, headline, subhead, summary, sources }) => {
- const lines = [];
- if (claim) lines.push('Claim: ' + claim);
- if (Number.isFinite(score)) lines.push('Reliability: ' + score + '%');
- if (headline) lines.push('Headline: ' + headline);
- if (subhead) lines.push('Subhead: ' + subhead);
- if (summary) {
- lines.push('', 'Summary:', summary);
- }
- if (Array.isArray(sources) && sources.length > 0) {
- lines.push('', 'Sources:');
- sources.forEach((source, index) => {
- const title = source?.title || source?.name || ('Source ' + (index + 1));
- const url = source?.url || source?.link || '';
- const cred = getCredibilityPercent(source, index, 'real');
- let line = '- ' + title;
- if (url) line += ' (' + url + ')';
- if (cred !== null) line += ' — Credibility: ' + cred + '%';
- lines.push(line);
- });
- }
- lines.push('', 'Generated by Veracity AI fact verification.');
- return lines.join(String.fromCharCode(10));
- };
-
- const buildDiscussionItemHtml = (discussion) => {
- const titleText = discussion.title || 'Fact-check discussion';
- const descriptionText = discussion.description || '';
- const previewText = truncateText(descriptionText, 140);
- const timeText = formatAbsoluteTime(discussion.created_at);
- const metaHtml = timeText ? ('' + '' + escapeHtml(timeText) + ' ' + '
') : '';
- return (
- '' +
- '
' + escapeHtml(titleText) + '
' +
- '
' + escapeHtml(previewText) + '
' +
- metaHtml +
- '
'
- );
- };
-
- const buildPostItemHtml = (post) => {
- const bodyHtml = escapeHtml(post.body || '').replace(__VERACITY_BODY_NEWLINE_REGEX__, ' ');
- const upCount = Number.isFinite(post.upvotes) ? post.upvotes : Math.max(0, Math.floor(post.voteScore * 0.7));
- const downCount = Number.isFinite(post.downvotes) ? post.downvotes : Math.max(0, post.voteScore - upCount);
- const timeText = formatAbsoluteTime(post.created_at ?? post.createdAt);
- const metaHtml = timeText ? ('' + escapeHtml(timeText) + '
') : '';
- const voted = post.hasVoted === true;
- const upDisabled = voted ? ' disabled' : '';
- const downDisabled = voted ? ' disabled' : '';
- return (
- '' +
- '
' +
- '
' + bodyHtml + '
' +
- '
' +
- '
' +
- '▲ ' +
- '' + upCount + ' ' +
- '
' +
- '
' +
- '▼ ' +
- '' + downCount + ' ' +
- '
' +
- '
' +
- metaHtml +
- '
' +
- '
'
- );
- };
-
- const renderDiscussionListView = (panelEl) => {
- discussionState.view = 'list';
- discussionState.selectedId = null;
- panelEl.innerHTML = [
- '',
- ].join('');
-
- const listEl = panelEl.querySelector('#discussionList');
- const scrollEl = panelEl.querySelector('#discussionScroll');
- const loadingEl = panelEl.querySelector('#discussionLoading');
- const endEl = panelEl.querySelector('#discussionEnd');
- const appendDiscussions = (items) => {
- if (!listEl) return;
- const html = items.map(buildDiscussionItemHtml).join('');
- listEl.insertAdjacentHTML('beforeend', html);
- };
-
- const loadMore = async () => {
- if (discussionState.discussionsLoading || !discussionState.discussionsHasMore) return;
- discussionState.discussionsLoading = true;
- if (loadingEl) loadingEl.classList.remove('isHidden');
- const result = await fetchDiscussions({
- cursor: discussionState.discussionCursor,
- limit: 6,
- sort: discussionState.discussionSort,
- });
- appendDiscussions(result.items);
- discussionState.discussionCursor = result.nextCursor || discussionState.discussionCursor;
- discussionState.discussionsHasMore = result.hasMore;
- discussionState.discussionsLoading = false;
- if (loadingEl) loadingEl.classList.add('isHidden');
- if (!result.hasMore && endEl) endEl.classList.remove('isHidden');
- };
-
- const resetListState = () => {
- discussionState.discussionCursor = 0;
- discussionState.discussionsHasMore = true;
- discussionState.discussionsLoading = false;
- if (listEl) listEl.innerHTML = '';
- if (endEl) endEl.classList.add('isHidden');
- };
-
- resetListState();
- loadMore();
-
- scrollEl?.addEventListener('scroll', () => {
- if (!scrollEl) return;
- const nearBottom = scrollEl.scrollTop + scrollEl.clientHeight >= scrollEl.scrollHeight - 80;
- if (nearBottom) loadMore();
- });
-
- listEl?.addEventListener('click', (event) => {
- const target = event.target;
- const item = target?.closest?.('[data-discussion-id]');
- if (!item) return;
- const id = item.getAttribute('data-discussion-id');
- if (id) renderDiscussionDetailView(panelEl, id);
- });
-
- };
-
- const renderDiscussionDetailView = async (panelEl, discussionId) => {
- if (API_URL) {
- try {
- const token = await ensureAccessToken();
- const [discRes, postsRes] = await Promise.all([
- sendBackgroundMessage({ type: 'GET_DISCUSSION', apiUrl: API_URL, accessToken: token, discussionId }),
- sendBackgroundMessage({ type: 'GET_POSTS', apiUrl: API_URL, accessToken: token, discussionId }),
- ]);
- if (discRes.success && discRes.discussion) {
- const mapped = mapApiDiscussion(discRes.discussion);
- const sid = String(mapped.id);
- const idx = discussionStore.discussions.findIndex((d) => String(d.id) === sid);
- if (idx >= 0) {
- const existing = discussionStore.discussions[idx];
- const hasExistingDesc = existing.description != null && String(existing.description).trim() !== '';
- const hasIncomingDesc = mapped.description != null && String(mapped.description).trim() !== '';
- let finalDescription = mapped.description;
- if (hasExistingDesc && !hasIncomingDesc) finalDescription = existing.description ?? '';
- const finalUserId = mapped.user_id != null && mapped.user_id !== '' ? mapped.user_id : (existing.user_id ?? mapped.user_id);
- const finalCreatedAt = (mapped.created_at != null && mapped.created_at !== '') ? mapped.created_at : (existing.created_at ?? mapped.created_at);
- const finalUpdatedAt = (mapped.updated_at != null && mapped.updated_at !== '') ? mapped.updated_at : (existing.updated_at ?? mapped.updated_at);
- discussionStore.discussions[idx] = {
- ...mapped,
- description: finalDescription,
- user_id: finalUserId,
- created_at: finalCreatedAt,
- updated_at: finalUpdatedAt,
- author: (finalUserId != null && String(finalUserId).trim() !== '') ? ('u/' + String(finalUserId).trim()) : (mapped.author ?? 'u/anonymous'),
- createdAt: finalCreatedAt != null ? finalCreatedAt : existing.createdAt,
- };
- } else {
- discussionStore.discussions.unshift(mapped);
- }
- }
- if (postsRes.success && Array.isArray(postsRes.posts)) {
- const existingList = discussionStore.postsByDiscussionId[discussionId] || [];
- const existingById = {};
- existingList.forEach((p) => { existingById[String(p.id)] = p; });
- const merged = postsRes.posts.map((p) => {
- const mapped = mapApiPost(p, discussionId);
- const existing = existingById[mapped.id];
- if (existing) {
- const apiUp = Number.isFinite(mapped.upvotes) ? mapped.upvotes : 0;
- const apiDown = Number.isFinite(mapped.downvotes) ? mapped.downvotes : 0;
- const localUp = Number.isFinite(existing.upvotes) ? existing.upvotes : 0;
- const localDown = Number.isFinite(existing.downvotes) ? existing.downvotes : 0;
- const mergedUp = apiUp > 0 ? apiUp : localUp;
- const mergedDown = apiDown > 0 ? apiDown : localDown;
- return { ...mapped, upvotes: mergedUp, downvotes: mergedDown };
- }
- return mapped;
- });
- discussionStore.postsByDiscussionId[discussionId] = merged;
- }
- } catch (_) {}
- }
- const discussion = discussionStore.discussions.find((item) => String(item.id) === String(discussionId));
- if (!discussion) {
- renderDiscussionListView(panelEl);
- return;
- }
- const existingPosts = discussionStore.postsByDiscussionId[discussionId] || [];
- if (!discussion.description && existingPosts.length > 0) {
- const firstPost = existingPosts[0];
- const body = firstPost?.body || '';
- if (body.includes('Generated by Veracity AI fact verification.')) {
- discussion.description = body;
- }
- }
- discussionState.view = 'detail';
- discussionState.selectedId = discussionId;
-
- const currentSort = discussionState.postsSortById[discussionId] || 'top';
- const discussionBody = discussion.description ?? '';
- const descTruncated = discussionBody ? truncateAtWord(discussionBody, 300) : null;
- const descriptionBlockHtml = !discussionBody
- ? ''
- : descTruncated.isLong
- ? '' +
- '
' +
- '
Read more ' +
- '
'
- : '
';
- const detailHeaderHtml =
- '';
- panelEl.innerHTML = [
- '',
- '
← Back ',
- ' ' + detailHeaderHtml,
- '
',
- '
',
- ' Top ',
- ' New ',
- '
',
- '
New post ',
- '
',
- '
',
- '
',
- '
',
- ].join('');
-
- const backBtn = panelEl.querySelector('#discussionBackBtn');
- const postsList = panelEl.querySelector('#postsList');
- const postsScroll = panelEl.querySelector('#postsScroll');
- const loadingEl = panelEl.querySelector('#postsLoading');
- const endEl = panelEl.querySelector('#postsEnd');
- const sortButtons = Array.from(panelEl.querySelectorAll('.sortPill'));
- const newPostToggle = panelEl.querySelector('#newPostToggle');
- const newPostForm = panelEl.querySelector('#newPostForm');
- const newPostCancel = panelEl.querySelector('#newPostCancel');
- const postBody = panelEl.querySelector('#postBody');
- const postError = panelEl.querySelector('#postError');
-
- const descriptionTextEl = panelEl.querySelector('#discussionDetailDescriptionText');
- if (descriptionTextEl && discussionBody) {
- descriptionTextEl.style.whiteSpace = 'pre-wrap';
- if (descTruncated.isLong) {
- descriptionTextEl.textContent = descTruncated.display + '…';
- const toggleBtn = panelEl.querySelector('#discussionDescriptionToggle');
- if (toggleBtn) {
- const runToggle = () => {
- const expanded = descriptionTextEl.getAttribute('data-expanded') === '1';
- if (expanded) {
- descriptionTextEl.textContent = descTruncated.display + '…';
- descriptionTextEl.removeAttribute('data-expanded');
- toggleBtn.textContent = 'Read more';
- } else {
- descriptionTextEl.textContent = discussionBody;
- descriptionTextEl.setAttribute('data-expanded', '1');
- toggleBtn.textContent = 'Show less';
- }
- };
- toggleBtn.addEventListener('click', runToggle);
- toggleBtn.addEventListener('keydown', (e) => {
- if (e.key === 'Enter' || e.key === ' ') {
- e.preventDefault();
- runToggle();
- }
- });
- }
- } else {
- descriptionTextEl.textContent = discussionBody;
- }
- }
-
- const resetPostsState = () => {
- discussionState.postsCursorById[discussionId] = 0;
- discussionState.postsHasMoreById[discussionId] = true;
- discussionState.postsLoadingById[discussionId] = false;
- if (postsList) postsList.innerHTML = '';
- if (endEl) endEl.classList.add('isHidden');
- };
-
- const applyVotedState = (container) => {
- if (!container) return;
- const posts = discussionStore.postsByDiscussionId[discussionId] || [];
- const cards = Array.from(container.querySelectorAll('.postCard'));
- cards.forEach((card) => {
- const postId = card.getAttribute('data-post-id');
- if (!postId) return;
- const post = posts.find((p) => String(p.id) === String(postId));
- if (!post || post.hasVoted !== true) return;
- const upBtn = card.querySelector('.voteBtn.upvote');
- const downBtn = card.querySelector('.voteBtn.downvote');
- if (upBtn) upBtn.disabled = true;
- if (downBtn) downBtn.disabled = true;
- if (post.userVote === 'up' && upBtn) upBtn.classList.add('voted');
- if (post.userVote === 'down' && downBtn) downBtn.classList.add('voted');
- });
- };
-
- const appendPosts = (items) => {
- if (!postsList) return;
- const html = items.map(buildPostItemHtml).join('');
- postsList.insertAdjacentHTML('beforeend', html);
- applyVotedState(postsList);
- };
-
- const loadMorePosts = async () => {
- if (discussionState.postsLoadingById[discussionId]) return;
- if (!discussionState.postsHasMoreById[discussionId]) return;
- discussionState.postsLoadingById[discussionId] = true;
- if (loadingEl) loadingEl.classList.remove('isHidden');
- const result = await fetchPosts({
- discussionId,
- cursor: discussionState.postsCursorById[discussionId] || 0,
- limit: 6,
- sort: discussionState.postsSortById[discussionId] || 'top',
- });
- appendPosts(result.items);
- discussionState.postsCursorById[discussionId] = result.nextCursor || discussionState.postsCursorById[discussionId] || 0;
- discussionState.postsHasMoreById[discussionId] = result.hasMore;
- discussionState.postsLoadingById[discussionId] = false;
- if (loadingEl) loadingEl.classList.add('isHidden');
- if (!result.hasMore && endEl) endEl.classList.remove('isHidden');
- };
-
- resetPostsState();
- loadMorePosts();
-
- postsScroll?.addEventListener('scroll', () => {
- if (!postsScroll) return;
- const nearBottom = postsScroll.scrollTop + postsScroll.clientHeight >= postsScroll.scrollHeight - 80;
- if (nearBottom) loadMorePosts();
- });
-
- postsList?.addEventListener('click', async (event) => {
- const target = event.target;
- const voteButton = target?.closest?.('.voteBtn');
- if (!voteButton) return;
- const postId = voteButton.getAttribute('data-id');
- const post = (discussionStore.postsByDiscussionId[discussionId] || []).find((item) => item.id === postId);
- if (!post) return;
- if (post.hasVoted === true) return;
- const voteType = voteButton.getAttribute('data-vote');
- if (voteType !== 'up' && voteType !== 'down') return;
- if (!Number.isFinite(post.upvotes)) post.upvotes = Math.max(0, Math.floor(post.voteScore * 0.7));
- if (!Number.isFinite(post.downvotes)) post.downvotes = Math.max(0, post.voteScore - post.upvotes);
- const prevUp = post.upvotes;
- const prevDown = post.downvotes;
- if (voteType === 'up') {
- post.upvotes += 1;
- const upEl = panelEl.querySelector('#up-' + post.id);
- if (upEl) upEl.textContent = String(post.upvotes);
- } else {
- post.downvotes += 1;
- const downEl = panelEl.querySelector('#down-' + post.id);
- if (downEl) downEl.textContent = String(post.downvotes);
- }
- const card = voteButton.closest('.postCard');
- if (card) {
- const upBtn = card.querySelector('.voteBtn.upvote');
- const downBtn = card.querySelector('.voteBtn.downvote');
- if (upBtn) upBtn.disabled = true;
- if (downBtn) downBtn.disabled = true;
- if (voteType === 'up' && upBtn) upBtn.classList.add('voted');
- if (voteType === 'down' && downBtn) downBtn.classList.add('voted');
- }
- if (API_URL) {
- try {
- const token = await ensureAccessToken();
- const res = await sendBackgroundMessage({
- type: 'VOTE_POST',
- apiUrl: API_URL,
- accessToken: token,
- post_id: String(postId),
- vote: voteType,
- });
- if (!res || !res.success) {
- post.upvotes = prevUp;
- post.downvotes = prevDown;
- const upEl = panelEl.querySelector('#up-' + post.id);
- const downEl = panelEl.querySelector('#down-' + post.id);
- if (upEl) upEl.textContent = String(prevUp);
- if (downEl) downEl.textContent = String(prevDown);
- if (card) {
- const upB = card.querySelector('.voteBtn.upvote');
- const downB = card.querySelector('.voteBtn.downvote');
- if (upB) { upB.disabled = false; upB.classList.remove('voted'); }
- if (downB) { downB.disabled = false; downB.classList.remove('voted'); }
- }
- } else {
- post.hasVoted = true;
- post.userVote = voteType;
- const data = res.data;
- if (data && (Number.isFinite(data.upvotes) || Number.isFinite(data.downvotes))) {
- if (Number.isFinite(data.upvotes)) post.upvotes = data.upvotes;
- if (Number.isFinite(data.downvotes)) post.downvotes = data.downvotes;
- const upEl = panelEl.querySelector('#up-' + post.id);
- const downEl = panelEl.querySelector('#down-' + post.id);
- if (upEl) upEl.textContent = String(post.upvotes);
- if (downEl) downEl.textContent = String(post.downvotes);
- }
- }
- } catch (_) {
- post.upvotes = prevUp;
- post.downvotes = prevDown;
- const upEl = panelEl.querySelector('#up-' + post.id);
- const downEl = panelEl.querySelector('#down-' + post.id);
- if (upEl) upEl.textContent = String(prevUp);
- if (downEl) downEl.textContent = String(prevDown);
- if (card) {
- const upB = card.querySelector('.voteBtn.upvote');
- const downB = card.querySelector('.voteBtn.downvote');
- if (upB) { upB.disabled = false; upB.classList.remove('voted'); }
- if (downB) { downB.disabled = false; downB.classList.remove('voted'); }
- }
- }
- }
- });
-
- sortButtons.forEach((btn) => {
- btn.addEventListener('click', () => {
- const sort = btn.getAttribute('data-sort');
- if (!sort || sort === discussionState.postsSortById[discussionId]) return;
- discussionState.postsSortById[discussionId] = sort;
- sortButtons.forEach((inner) => {
- inner.classList.toggle('sortPillActive', inner.getAttribute('data-sort') === sort);
- });
- resetPostsState();
- loadMorePosts();
- });
- });
-
- newPostToggle?.addEventListener('click', () => {
- newPostForm?.classList.toggle('isHidden');
- if (postError) postError.textContent = '';
- });
-
- newPostCancel?.addEventListener('click', () => {
- newPostForm?.classList.add('isHidden');
- if (postError) postError.textContent = '';
- });
-
- newPostForm?.addEventListener('submit', async (event) => {
- event.preventDefault();
- const body = (postBody?.value || '').trim();
- if (!body) {
- if (postError) postError.textContent = 'Please enter a post.';
- return;
- }
- if (postError) postError.textContent = '';
- if (!API_URL) {
- if (postError) postError.textContent = 'Something went wrong. Please try again.';
- return;
- }
- try {
- const token = await ensureAccessToken();
- const res = await sendBackgroundMessage({
- type: 'CREATE_POST',
- apiUrl: API_URL,
- accessToken: token,
- discussion_id: discussionId,
- text: body,
- });
- if (!res.success) {
- if (postError) postError.textContent = 'Something went wrong. Please try again.';
- return;
- }
- const postsRes = await sendBackgroundMessage({
- type: 'GET_POSTS',
- apiUrl: API_URL,
- accessToken: token,
- discussionId,
- });
- if (postsRes.success && Array.isArray(postsRes.posts)) {
- discussionStore.postsByDiscussionId[discussionId] = postsRes.posts.map((p) => mapApiPost(p, discussionId));
- }
- resetPostsState();
- loadMorePosts();
- if (postBody) postBody.value = '';
- newPostForm?.classList.add('isHidden');
- } catch (_) {
- if (postError) postError.textContent = 'Something went wrong. Please try again.';
- }
- });
-
- backBtn?.addEventListener('click', () => {
- renderDiscussionListView(panelEl);
- });
- };
-
- const getCredibilityPercent = (source, index, mode) => {
- if (mode === 'test') {
- const mockValues = [93, 88, 79, 91, 85];
- return mockValues[index] ?? 93;
- }
- const raw =
- source?.credibility ??
- source?.credibility_score ??
- source?.reliability ??
- source?.score;
- if (raw === null || raw === undefined) return null;
- const parsed = typeof raw === 'string' ? parseFloat(raw) : Number(raw);
- if (!Number.isFinite(parsed)) return null;
- const normalized = parsed >= 0 && parsed <= 1 ? parsed * 100 : parsed;
- return Math.round(Math.max(0, Math.min(100, normalized)));
- };
-
- const extractSources = (result) => {
- const candidates = [
- result?.sources,
- result?.citations,
- result?.references,
- result?.source_list,
- result?.data?.sources,
- result?.analysis?.sources,
- ];
- const match = candidates.find((item) => Array.isArray(item));
- return match || [];
- };
-
- const renderSources = (sources, mode, activeIndex) => {
- if (!Array.isArray(sources) || sources.length === 0) return '';
- const safeIndex = Math.max(0, Math.min(sources.length - 1, activeIndex || 0));
- const source = sources[safeIndex] || {};
- const credibility = getCredibilityPercent(source, safeIndex, mode);
- const title = source?.title || source?.name || ('Source ' + (safeIndex + 1));
- const snippet = source?.snippet || source?.summary || '';
- const url = source?.url || source?.link || '';
- const displayUrl = url && url.length > 35 ? url.substring(0, 35) + '...' : url;
- const credibilityHtml = credibility === null
- ? ''
- : 'Credibility: ' + credibility + '%
';
- const contentHtml =
- '' +
- credibilityHtml +
- '
' + escapeHtml(title) + '
' +
- (snippet ? '
' + escapeHtml(snippet) + '
' : '') +
- (displayUrl ? '
' + escapeHtml(displayUrl) + '
' : '') +
- '
';
- const wrappedCard = url
- ? '' + contentHtml + ' '
- : contentHtml;
- const showArrows = sources.length > 1;
- return (
- '' +
- (showArrows
- ? '
' +
- '' +
- ' ' +
- ' ' +
- ' '
- : '') +
- '
' +
- '
Source ' + (safeIndex + 1) + '
' +
- wrappedCard +
- '
' +
- (showArrows
- ? '
' +
- '' +
- ' ' +
- ' ' +
- ' '
- : '') +
- '
'
- );
- };
-
- const renderSourcesInto = (mount, sources, mode) => {
- if (!mount) return;
- if (!Array.isArray(sources) || sources.length === 0) {
- mount.innerHTML = '';
- return;
- }
- const update = () => {
- mount.innerHTML = renderSources(sources, mode, currentSourceIndex);
- const prevBtn = mount.querySelector('[data-direction="prev"]');
- const nextBtn = mount.querySelector('[data-direction="next"]');
- prevBtn?.addEventListener('click', () => {
- currentSourceIndex = (currentSourceIndex - 1 + sources.length) % sources.length;
- update();
- });
- nextBtn?.addEventListener('click', () => {
- currentSourceIndex = (currentSourceIndex + 1) % sources.length;
- update();
- });
- };
- update();
- };
-
- const setScore = (score, { summary, headline, subhead, result, claim_id, analysis_id } = {}) => {
- const mount = root?.querySelector('#resultMount');
- if (!mount) return;
-
- if (!Number.isFinite(score)) {
- lastFactCheck = null;
- mount.innerHTML = '';
- ensureCreateDiscussionButton();
- return;
- }
-
- const sources = extractSources(result);
- currentSourceIndex = 0;
- const clamped = Math.max(0, Math.min(100, parseFloat(score)));
- const deg = clamped * 3.6;
- lastFactCheck = {
- claim: lastClaimText,
- score: Number(score),
- headline,
- subhead,
- summary,
- sources,
- result,
- claim_id,
- analysis_id,
- };
- const bucket =
- clamped >= 85
- ? { h: 'The claim is highly reliable,', s: 'you can share with your network.' }
- : clamped >= 60
- ? { h: 'The claim is fairly reliable,', s: 'consider sharing with light caution.' }
- : clamped >= 40
- ? { h: 'The claim is uncertain,', s: 'seek additional verification.' }
- : { h: 'The claim is likely unreliable,', s: 'avoid sharing without verification.' };
-
- const cardHtml =
- '' +
- '
' +
- '
' +
- '
' +
- '
' +
- '
Reliability
' +
- '
' + clamped + '%
' +
- '
' +
- '
' +
- '
' +
- '
' + (headline || bucket.h) + '
' +
- '
' + (subhead || bucket.s) + '
' +
- (summary
- ? '
' +
- '
' + summary + '
' +
- '
Read more ' +
- '
'
- : '') +
- '
' +
- '
' +
- '
';
-
- mount.innerHTML = cardHtml + '
';
- const summaryEl = mount.querySelector('#scoreSummary');
- const toggleBtn = mount.querySelector('#summaryToggle');
- if (summaryEl && toggleBtn) {
- toggleBtn.addEventListener('click', () => {
- const collapsed = summaryEl.classList.contains('summaryCollapsed');
- if (collapsed) {
- summaryEl.classList.remove('summaryCollapsed');
- toggleBtn.textContent = 'Read less';
- } else {
- summaryEl.classList.add('summaryCollapsed');
- toggleBtn.textContent = 'Read more';
- }
- });
- }
- const sourcesMount = mount.querySelector('#sourcesMount');
- if (sourcesMount && sources.length > 0) {
- renderSourcesInto(sourcesMount, sources, 'real');
- }
- ensureCreateDiscussionButton();
- };
- const ensureCreateDiscussionButton = () => {
- if (activeTab !== 'ai') {
- root?.querySelector('#createDiscussionBtn')?.remove();
- root?.querySelector('#createDiscussionContainer')?.remove();
- return;
- }
- const shouldShow = !!lastFactCheck && Number.isFinite(lastFactCheck.score) && !isVerifying;
- const aiPanel = root?.querySelector('#aiTabPanel');
- if (!aiPanel) return;
- const existingBtn = aiPanel.querySelector('#createDiscussionBtn');
- const existingContainer = aiPanel.querySelector('#createDiscussionContainer');
- if (!shouldShow) {
- existingBtn?.remove();
- existingContainer?.remove();
- return;
- }
- if (existingBtn || existingContainer) return;
- root?.querySelector('#createDiscussionContainer')?.remove();
- const anchor =
- aiPanel.querySelector('#sourcesMount') ||
- aiPanel.querySelector('#scoreBox') ||
- aiPanel;
- const container = document.createElement('div');
- container.id = 'createDiscussionContainer';
- container.className = 'createDiscussionCta';
- container.innerHTML =
- 'Want to discuss this result?
' +
- 'Create discussion ' +
- '
';
- if (anchor) {
- anchor.insertAdjacentElement('afterend', container);
- return;
- }
- aiPanel.insertAdjacentElement('beforeend', container);
- };
-
- const getDiscussionDraftDefaults = () => {
- const claim = lastFactCheck?.claim || '';
- const title = claim ? claim.slice(0, 120) : 'Fact-check discussion';
- const body = buildFactCheckPostBody({
- claim: lastFactCheck?.claim,
- score: lastFactCheck?.score,
- headline: lastFactCheck?.headline,
- subhead: lastFactCheck?.subhead,
- summary: lastFactCheck?.summary,
- sources: lastFactCheck?.sources || [],
- });
- return { title, body };
- };
-
- const openCreateDiscussionDraft = () => {
- const aiPanel = root?.querySelector('#aiTabPanel');
- if (!aiPanel || !lastFactCheck) return;
- const mount = aiPanel.querySelector('#createDiscussionFormMount');
- if (!mount) return;
- const defaults = getDiscussionDraftDefaults();
- mount.innerHTML =
- '' +
- 'Title ' +
- ' ' +
- 'Body ' +
- ' ' +
- '' +
- 'Create discussion ' +
- 'Cancel ' +
- '
' +
- '
' +
- ' ';
- const titleInput = mount.querySelector('#discussionTitle');
- const bodyInput = mount.querySelector('#discussionBody');
- if (titleInput) titleInput.value = defaults.title;
- if (bodyInput) bodyInput.value = defaults.body;
- const ctaBtn = root?.querySelector('#createDiscussionBtn');
- if (ctaBtn) ctaBtn.classList.add('isHidden');
- };
-
- const finalizeVerification = () => {
- setVerifying(false);
- lastVerifiedClaim = lastClaimText;
- ensureCreateDiscussionButton();
- };
-
-
- const detectLanguage = () => {
- const lang = navigator.language || '';
- if (lang.toLowerCase().startsWith('fr')) return 'french';
- return 'english';
- };
-
- const ensureAccessToken = async () => {
- const token = await (typeof VeracityAuth !== 'undefined' ? VeracityAuth.getAccessToken() : Promise.resolve(null));
- if (token) {
- if (currentUserId == null && API_URL) {
- try {
- const res = await sendBackgroundMessage({ type: 'GET_ME', apiUrl: API_URL, accessToken: token });
- if (res && res.success && (res.id != null || (res.user && res.user.id != null))) {
- currentUserId = res.id ?? res.user?.id ?? null;
- }
- } catch (_) {}
- }
- if (currentUserId == null) {
- const sub = parseJwtSub(token);
- if (sub) currentUserId = sub;
- }
- return token;
- }
- return await (typeof VeracityAuth !== 'undefined' ? VeracityAuth.login() : Promise.reject(new Error('Auth not loaded')));
- };
-
- const sendBackgroundMessage = (msg) => {
- return new Promise((resolve) => {
- chrome.runtime.sendMessage(msg, (response) => {
- if (chrome.runtime.lastError) resolve({ success: false, error: chrome.runtime.lastError.message });
- else resolve(response || { success: false });
- });
- });
- };
-
- /**
- * Single public verification entry point for all flows.
- *
- * Callers:
- * - AI tab Verify button (no argument → read from textarea)
- * - Context menu “Send to Veracity” (passes selected text)
- *
- * Responsibilities:
- * - Guard against concurrent runs via isVerifying
- * - Normalize + persist claim text and reset result UI
- * - Enforce auth and API configuration
- * - Delegate to background.js VERIFY_CLAIM and map the response into score card UI
- * - Always end via finalizeVerification() so button + status reset correctly
- */
- const startVerification = async (claimTextOverride) => {
- // Ignore if a verification is already in progress.
- if (isVerifying) return;
-
- // Begin verification lifecycle: show Verifying pill and disable Verify button.
- setVerifying(true);
-
- const mount = root?.querySelector('#resultMount');
- const claimInput = root?.querySelector('#claimInput');
- const authStatusText = root?.querySelector('#authStatusText');
-
- // Normalize claim text: prefer explicit argument, otherwise read from textarea.
- let claimText = (typeof claimTextOverride === 'string'
- ? claimTextOverride
- : (claimInput?.value || '')
- ).trim();
-
- // Keep textarea in sync so UI looks identical for all entry points.
- if (claimInput) claimInput.value = claimText;
-
- lastClaimText = claimText;
- lastAnalysisResult = null;
- if (mount) mount.innerHTML = '';
- currentSourceIndex = 0;
- lastFactCheck = null;
- setScore(null);
- ensureCreateDiscussionButton();
-
- // Core verification flow. All completion paths must call finalizeVerification().
- if (!claimText) {
- if (authStatusText) authStatusText.textContent = 'Please enter a claim.';
- finalizeVerification();
- return;
- }
-
- const authed = typeof VeracityAuth !== 'undefined' && await VeracityAuth.isAuthenticated();
- if (!authed) {
- if (authStatusText) authStatusText.textContent = 'Please sign in to verify claims.';
- finalizeVerification();
- return;
- }
-
- if (authStatusText) authStatusText.textContent = '';
-
- const apiConfigured = API_URL && API_URL.indexOf('YOUR_API') === -1;
- if (!apiConfigured) {
- requestAnimationFrame(() => {
- setScore(85, {
- summary: 'Placeholder result for development. Configure API_URL for live verification.',
- headline: 'The claim is fairly reliable,',
- subhead: 'consider sharing with light caution.',
- result: {
- sources: [
- { title: 'Source 1', snippet: 'Placeholder for development.', credibility_score: 0.88 },
- { title: 'Source 2', snippet: 'Placeholder for development.', credibility_score: 0.79 },
- ],
- },
- });
- finalizeVerification();
- });
- return;
- }
-
- let token;
- try {
- token = await ensureAccessToken();
- } catch (err) {
- const msg = 'Something went wrong. Please try again.';
- setInlineMessage(msg);
- if (authStatusText) authStatusText.textContent = msg;
- finalizeVerification();
- return;
- }
-
- if (!token) {
- const msg = 'Please sign in to verify claims.';
- if (authStatusText) authStatusText.textContent = msg;
- setInlineMessage(msg);
- finalizeVerification();
- return;
- }
-
- chrome.runtime.sendMessage(
- { type: 'VERIFY_CLAIM', claimText, accessToken: token, apiUrl: API_URL },
- (response) => {
- if (chrome.runtime.lastError) {
- const msg = 'Something went wrong. Please try again.';
- setInlineMessage(msg);
- if (authStatusText) authStatusText.textContent = msg;
- finalizeVerification();
- return;
- }
- if (!response || response.success !== true) {
- const msg = 'Something went wrong. Please try again.';
- setInlineMessage(msg);
- if (authStatusText) authStatusText.textContent = msg;
- finalizeVerification();
- return;
- }
- const score = Math.round((response.veracity_score || 0) * 100);
- const summary = response.analysis_text || '';
- const result = { sources: Array.isArray(response.sources) ? response.sources : [] };
- const claim_id = response.claim_id ?? null;
- const analysis_id = response.analysis_id ?? null;
- setScore(score, { summary, result, claim_id, analysis_id });
- lastAnalysisResult = { claim: claimText, score, summary, result, claim_id, analysis_id };
- finalizeVerification();
- }
- );
- };
-
- const startWebAuthFlow = async () => {
- const statusEl = document.getElementById('authErrorDisplay');
- if (!AUTH0_CLIENT_ID) {
- const msg = 'Missing AUTH0_CLIENT_ID in config.json';
- authError = msg;
- if (statusEl) statusEl.textContent = msg;
- setAuthStatus(msg);
- await syncAuthUI();
- throw new Error(msg);
- }
- if (statusEl) statusEl.textContent = 'Opening sign-in…';
- try {
- const token = await (typeof VeracityAuth !== 'undefined' ? VeracityAuth.login() : Promise.reject(new Error('Auth not loaded')));
- if (statusEl) statusEl.textContent = '';
- await syncAuthUI();
- return token;
- } catch (err) {
- const fromAuth = err && (err.isCredentialError === true || (typeof err.message === 'string' && /access_denied|invalid_grant|wrong.*password|invalid credentials|username or password/i.test(err.message)));
- if (fromAuth) {
- authError = null;
- if (statusEl) statusEl.textContent = '';
- setAuthStatus('');
- setInlineMessage('');
- } else {
- authError = 'Something went wrong. Please try again.';
- if (statusEl) statusEl.textContent = authError;
- setAuthStatus(authError);
- setInlineMessage(authError);
- }
- if (typeof VeracityAuth !== 'undefined' && VeracityAuth.clearStoredTokens) {
- await VeracityAuth.clearStoredTokens();
- }
- await syncAuthUI();
- throw err;
- }
- };
-
- async function syncAuthUI() {
- if (!root) return;
- try {
- if (typeof VeracityAuth !== 'undefined' && VeracityAuth.isLoginInProgress && VeracityAuth.isLoginInProgress()) {
- renderLandingHero();
- return;
- }
- const ok = typeof VeracityAuth !== 'undefined' && await VeracityAuth.isAuthenticated();
- if (ok) {
- authError = null;
- await renderAppScreen();
- } else {
- renderLandingHero();
- }
- } catch {
- renderLandingHero();
- }
- }
-
-
- const renderLandingHero = () => {
- if (!root) return;
- root.innerHTML = '';
- root.innerHTML = \`
-
-
-
-
-
Welcome to Veracity
-
Navigate information with clarity and confidence guided by a conversational assistant.
-
Sign up or log in to verify information and build trust with those you share it with.
-
-
Log in
-
We strictly limit data collection to only what is essential for functionality—nothing more.
-
Need a larger scale? Visit Veracity Web Application
-
-
-
- \`;
-
- const authErrorEl = root.querySelector('#authErrorDisplay');
- if (authErrorEl) authErrorEl.textContent = authError || '';
-
- const goToLoginBtn = root.querySelector('#goToLoginBtn');
- goToLoginBtn?.addEventListener('click', async () => {
- authError = null;
- try {
- await startWebAuthFlow();
- } catch {}
- });
- };
-
- const renderAppScreen = async () => {
- if (!root) return;
- root.innerHTML = '';
- root.innerHTML = \`
-
-
-
- AI Fact Verification
-
-
- Discussion Hub
-
-
- Contact an Expert
-
-
-
-
-
- \`;
-
- const tabButtons = Array.from(root.querySelectorAll('[data-tab-id]'));
- const panelEl = root.querySelector('#tabPanel');
-
- const renderTabContent = () => {
- if (!panelEl) return;
- if (activeTab === 'ai') {
- panelEl.innerHTML = \`
-
- \`;
- setVerifying(false);
- const verifyBtn = panelEl.querySelector('#verifyBtn');
- const claimInput = panelEl.querySelector('#claimInput');
- updateVerifyButtonState();
- claimInput?.addEventListener('input', updateVerifyButtonState);
- claimInput?.addEventListener('change', updateVerifyButtonState);
- verifyBtn?.addEventListener('click', async () => {
- await startVerification();
- });
- ensureCreateDiscussionButton();
- if (lastAnalysisResult) {
- lastClaimText = lastAnalysisResult.claim;
- lastVerifiedClaim = lastAnalysisResult.claim;
- const input = panelEl.querySelector('#claimInput');
- if (input) input.value = lastAnalysisResult.claim;
- setScore(lastAnalysisResult.score, { summary: lastAnalysisResult.summary, result: lastAnalysisResult.result });
- ensureCreateDiscussionButton();
- updateVerifyButtonState();
- }
- } else if (activeTab === 'discussion') {
- renderDiscussionListView(panelEl);
- } else if (activeTab === 'expert') {
- panelEl.innerHTML = \`
-
-
Need expert insight?
-
-
- \`;
- const expertForm = panelEl.querySelector('#expertForm');
- const nameInput = panelEl.querySelector('#expertName');
- const emailInput = panelEl.querySelector('#expertEmail');
- const messageInput = panelEl.querySelector('#expertMessage');
- const errorText = panelEl.querySelector('#expertErrorText');
- expertForm?.addEventListener('submit', async (event) => {
- event.preventDefault();
- const name = (nameInput?.value || '').trim();
- const email = (emailInput?.value || '').trim();
- const message = (messageInput?.value || '').trim();
- const missing = [];
- if (!name) missing.push('name');
- if (!email) missing.push('email');
- if (!message) missing.push('message');
- if (missing.length > 0) {
- if (errorText) errorText.textContent = 'Please enter your ' + missing.join(', ') + '.';
- return;
- }
- if (errorText) errorText.textContent = '';
- const lines = [
- 'Name: ' + (name || '—'),
- 'Email: ' + (email || '—'),
- '',
- 'Message:',
- message || '—',
- ];
- const subject = 'Veracity – Contact an Expert';
- const body = lines.join('\\n');
- const mailto = 'mailto:veracity@mila.quebec?subject=' +
- encodeURIComponent(subject) +
- '&body=' +
- encodeURIComponent(body);
- window.location.href = mailto;
- });
- }
- };
-
- const updateActiveButtons = () => {
- tabButtons.forEach((btn) => {
- const isActive = btn.dataset.tabId === activeTab;
- btn.setAttribute('aria-selected', String(isActive));
- btn.classList.toggle('Home_tabButtonActive__zVobV', isActive);
- });
- };
-
- tabButtons.forEach((btn) => {
- btn.addEventListener('click', () => {
- const nextTab = btn.dataset.tabId;
- setVerifying(false);
- if (activeTab === 'ai' && nextTab !== 'ai') {
- root?.querySelector('#createDiscussionBtn')?.remove();
- root?.querySelector('#createDiscussionContainer')?.remove();
- lastFactCheck = null;
- lastClaimText = '';
- lastAnalysisResult = null;
- currentSourceIndex = 0;
- setScore(null);
- ensureCreateDiscussionButton();
- }
- activeTab = nextTab;
- updateActiveButtons();
- renderTabContent();
- });
- });
-
- updateActiveButtons();
- renderTabContent();
- if (pendingDiscussionId && panelEl) {
- await renderDiscussionDetailView(panelEl, pendingDiscussionId);
- const postsScroll = panelEl.querySelector('#postsScroll');
- if (postsScroll) postsScroll.scrollTop = 0;
- pendingDiscussionId = null;
- }
-
- const logoutBtn = root.querySelector('#logoutBtn');
- logoutBtn?.addEventListener('click', async () => {
- authError = null;
- currentUserId = null;
- if (typeof VeracityAuth !== 'undefined') await VeracityAuth.logout();
- await syncAuthUI();
- });
- };
-
- /**
- * Handle SELECTION_TO_VERIFY from background.js.
- *
- * Payload comes from the context-menu click and includes raw selected text plus
- * page metadata. This helper:
- * - Ensures the user is authenticated
- * - Forces the AI tab to be active
- * - Prefills the claim textarea with the selected text
- * - Delegates to startVerification(text) so lifecycle matches a manual click
- */
- const handleSelectionToVerify = async (payload) => {
- const text = (payload?.text || '').trim();
- if (!text) return;
- const authed = typeof VeracityAuth !== 'undefined' && await VeracityAuth.isAuthenticated();
- if (!authed) {
- await syncAuthUI();
- return;
- }
- activeTab = 'ai';
- await syncAuthUI();
- const claimInput = root?.querySelector('#claimInput');
- if (claimInput) claimInput.value = text;
- await startVerification(text);
- };
-
- chrome.runtime.onMessage.addListener((msg) => {
- if (msg?.type === 'SELECTION_TO_VERIFY') {
- handleSelectionToVerify(msg);
- }
- });
-
- const loadConfig = async () => {
- const res = await fetch(chrome.runtime.getURL('config.json'));
- const cfg = await res.json();
- API_URL = cfg.API_URL || '';
- AUTH0_CLIENT_ID = cfg.AUTH0_CLIENT_ID || '';
- if (typeof VeracityAuth !== 'undefined') VeracityAuth.init({ clientId: AUTH0_CLIENT_ID });
- };
-
- const init = async () => {
- if (!root) return;
- root.innerHTML = '';
- try {
- await loadConfig();
- await syncAuthUI();
- } catch (err) {
- setInlineMessage(normalizeError(err));
- await syncAuthUI();
- }
-
- root.addEventListener('click', (event) => {
- const target = event.target;
- const btn = target?.closest?.('#createDiscussionBtn');
- if (btn) {
- openCreateDiscussionDraft();
- return;
- }
- const cancelBtn = target?.closest?.('#discussionCancel');
- if (cancelBtn) {
- const formMount = root?.querySelector('#createDiscussionFormMount');
- if (formMount) formMount.innerHTML = '';
- const ctaBtn = root?.querySelector('#createDiscussionBtn');
- if (ctaBtn) ctaBtn.classList.remove('isHidden');
- }
- });
-
- root.addEventListener('submit', async (event) => {
- const form = event.target;
- if (!form || form.id !== 'createDiscussionForm') return;
- event.preventDefault();
- if (!lastFactCheck) return;
- const titleInput = form.querySelector('#discussionTitle');
- const bodyInput = form.querySelector('#discussionBody');
- const errorEl = form.querySelector('#discussionError');
- const title = (titleInput?.value || '').trim();
- const body = (bodyInput?.value || '').trim();
- if (!title || !body) {
- if (errorEl) errorEl.textContent = 'Please enter a title and body.';
- return;
- }
- if (errorEl) errorEl.textContent = '';
- if (!API_URL) {
- if (errorEl) errorEl.textContent = 'Something went wrong. Please try again.';
- return;
- }
- try {
- const token = await ensureAccessToken();
- const res = await sendBackgroundMessage({
- type: 'CREATE_DISCUSSION',
- apiUrl: API_URL,
- accessToken: token,
- title,
- description: body,
- analysis_id: lastFactCheck.analysis_id ?? undefined,
- });
- if (!res.success || !res.discussion) {
- if (errorEl) errorEl.textContent = 'Something went wrong. Please try again.';
- return;
- }
- const discussion = res.discussion;
- const newId = String(discussion.id ?? discussion.discussion_id ?? '');
- if (newId) {
- const mapped = mapApiDiscussion(discussion);
- if (!mapped.description && body) mapped.description = body;
- const idx = discussionStore.discussions.findIndex((d) => String(d.id) === String(mapped.id));
- if (idx >= 0) discussionStore.discussions[idx] = mapped;
- else discussionStore.discussions.unshift(mapped);
- discussionStore.postsByDiscussionId[newId] = [];
- }
- const formMount = root?.querySelector('#createDiscussionFormMount');
- if (formMount) formMount.innerHTML = '';
- const ctaBtn = root?.querySelector('#createDiscussionBtn');
- if (ctaBtn) ctaBtn.classList.remove('isHidden');
- activeTab = 'discussion';
- pendingDiscussionId = newId;
- await syncAuthUI();
- } catch (_) {
- if (errorEl) errorEl.textContent = 'Something went wrong. Please try again.';
- }
- });
-
- window.addEventListener('focus', () => { syncAuthUI(); });
- document.addEventListener('visibilitychange', () => {
- if (document.visibilityState === 'visible') {
- syncAuthUI();
- }
- });
- };
-
- init();
- } catch (err) {
- if (root) {
- const message = (err && err.message) ? err.message : String(err || 'Unknown error');
- const safe = message.replace(/&/g, '&').replace(//g, '>');
- root.innerHTML = '' +
- 'Panel error: ' + safe +
- '
';
- }
- }
-});`;
-
-// Inline auth then panel; replace placeholders used in panel template (newline regexes for body text).
-const panelJsFinal = (authJs ? authJs + "\n" : "") + panelJs
- .replace("__VERACITY_SNIPPET_REGEX__", "/[\\r\\n]+/g")
- .replace("__VERACITY_BODY_NEWLINE_REGEX__", "/\\n/g");
-
-fs.writeFileSync(path.join(dist, "panel.js"), panelJsFinal, "utf8");
-
-const panelContent = fs.readFileSync(path.join(dist, "panel.js"), "utf8");
-// Guard against accidental regex breakage in template
-if (panelContent.includes("replace(/+/g") || panelContent.includes("replace(///g")) {
- throw new Error("panel.js contains invalid replace regex; template placeholders may be broken.");
-}
-})();
-
diff --git a/web_extension/Veracity_Extension/src/lib/auth.js b/web_extension/Veracity_Extension/src/lib/auth.js
deleted file mode 100644
index 073c20d..0000000
--- a/web_extension/Veracity_Extension/src/lib/auth.js
+++ /dev/null
@@ -1,364 +0,0 @@
-/**
- * Browser auth module: PKCE + launchWebAuthFlow, JWT validation with JWKS (RS256).
- * Inlined into panel.js by postbuild. Uses only chrome.storage.local, chrome.identity, fetch, crypto.subtle.
- * Lifecycle: init(clientId) → isAuthenticated() / getAccessToken() / login() / logout().
- */
-(function (global) {
- const AUTH0_DOMAIN = "veri-fact.ca.auth0.com";
- const AUTH0_AUDIENCE = "https://veri-fact.ca.auth0.com/api/v2/";
- const AUTH0_ISSUER = "https://veri-fact.ca.auth0.com/";
- const AUTH0_SCOPE = "openid profile email";
- const JWKS_URL = "https://veri-fact.ca.auth0.com/.well-known/jwks.json";
- const TOKEN_STORAGE_KEY = "veracity_tokens";
-
- let AUTH0_CLIENT_ID = "";
- let loginInProgress = false;
-
- function base64UrlDecode(str) {
- const base64 = str.replace(/-/g, "+").replace(/_/g, "/");
- const pad = base64.length % 4;
- const padded = pad ? base64 + "=".repeat(4 - pad) : base64;
- try {
- return atob(padded);
- } catch {
- return null;
- }
- }
-
- function parseJwt(token) {
- if (!token || typeof token !== "string") return null;
- const parts = token.split(".");
- if (parts.length !== 3) return null;
- const headerJson = base64UrlDecode(parts[0]);
- const payloadJson = base64UrlDecode(parts[1]);
- if (!headerJson || !payloadJson) return null;
- try {
- return {
- header: JSON.parse(headerJson),
- payload: JSON.parse(payloadJson),
- rawHeaderPayload: parts[0] + "." + parts[1],
- signatureB64: parts[2],
- };
- } catch {
- return null;
- }
- }
-
- function signatureToArrayBuffer(base64url) {
- const base64 = base64url.replace(/-/g, "+").replace(/_/g, "/");
- const pad = base64.length % 4;
- const padded = pad ? base64 + "=".repeat(4 - pad) : base64;
- const binary = atob(padded);
- const bytes = new Uint8Array(binary.length);
- for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);
- return bytes.buffer;
- }
-
- let jwksCache = null;
- let jwksCacheTime = 0;
- const JWKS_CACHE_MS = 5 * 60 * 1000;
-
- /** Fetch Auth0 JWKS (cached) for RS256 signature verification. */
- async function getJwks() {
- if (jwksCache && Date.now() - jwksCacheTime < JWKS_CACHE_MS) return jwksCache;
- const res = await fetch(JWKS_URL);
- if (!res.ok) throw new Error("JWKS fetch failed: " + res.status);
- const data = await res.json();
- jwksCache = data && data.keys ? data.keys : [];
- jwksCacheTime = Date.now();
- return jwksCache;
- }
-
- async function importJwkToCryptoKey(jwk) {
- const alg = jwk.alg === "RS256" ? "RS256" : "RS256";
- const key = await crypto.subtle.importKey(
- "jwk",
- {
- kty: jwk.kty,
- n: jwk.n,
- e: jwk.e,
- alg: alg,
- },
- { name: "RSASSA-PKCS1-v1_5", hash: "SHA-256" },
- false,
- ["verify"]
- );
- return key;
- }
-
- async function verifyTokenSignature(token, parsed) {
- if (!parsed || !parsed.rawHeaderPayload || !parsed.signatureB64) return false;
- const kid = parsed.header && parsed.header.kid;
- if (!kid) return false;
- const keys = await getJwks();
- const jwk = keys.find(function (k) {
- return k.kid === kid;
- });
- if (!jwk) return false;
- const cryptoKey = await importJwkToCryptoKey(jwk);
- const signature = signatureToArrayBuffer(parsed.signatureB64);
- const data = new TextEncoder().encode(parsed.rawHeaderPayload);
- return await crypto.subtle.verify(
- { name: "RSASSA-PKCS1-v1_5" },
- cryptoKey,
- signature,
- data
- );
- }
-
- /** Check exp, iss, aud and RS256 signature via JWKS. */
- async function validateAccessToken(token) {
- const parsed = parseJwt(token);
- if (!parsed || !parsed.payload) return false;
- const exp = parsed.payload.exp;
- const nowSec = Date.now() / 1000;
- if (typeof exp !== "number" || exp - 30 <= nowSec) return false;
- const iss = parsed.payload.iss;
- if (iss !== AUTH0_ISSUER && iss !== AUTH0_ISSUER.replace(/\/$/, "")) return false;
- const aud = parsed.payload.aud;
- const audList = Array.isArray(aud) ? aud : aud ? [aud] : [];
- if (audList.indexOf(AUTH0_AUDIENCE) === -1) return false;
- return await verifyTokenSignature(token, parsed);
- }
-
- function getStoredTokens() {
- return new Promise(function (resolve) {
- chrome.storage.local.get([TOKEN_STORAGE_KEY], function (res) {
- resolve(res && res[TOKEN_STORAGE_KEY] ? res[TOKEN_STORAGE_KEY] : null);
- });
- });
- }
-
- function setStoredTokens(tokens) {
- return new Promise(function (resolve) {
- chrome.storage.local.set({ [TOKEN_STORAGE_KEY]: tokens }, resolve);
- });
- }
-
- function clearStoredTokens() {
- return new Promise(function (resolve) {
- chrome.storage.local.remove([TOKEN_STORAGE_KEY], resolve);
- });
- }
-
- async function isAuthenticated() {
- const stored = await getStoredTokens();
- if (!stored || !stored.access_token) return false;
- if (stored.expires_at && stored.expires_at * 1000 <= Date.now()) return false;
- return await validateAccessToken(stored.access_token);
- }
-
- async function getAccessToken() {
- const stored = await getStoredTokens();
- if (!stored || !stored.access_token) return null;
- if (stored.expires_at && stored.expires_at * 1000 <= Date.now()) return null;
- const valid = await validateAccessToken(stored.access_token);
- return valid ? stored.access_token : null;
- }
-
- function generateCodeVerifier(length) {
- length = length || 43;
- const array = new Uint8Array(length);
- crypto.getRandomValues(array);
- return btoa(String.fromCharCode.apply(null, array))
- .replace(/\+/g, "-")
- .replace(/\//g, "_")
- .replace(/=+$/, "")
- .slice(0, length);
- }
-
- async function sha256Base64Url(input) {
- const enc = new TextEncoder();
- const data = enc.encode(input);
- const hash = await crypto.subtle.digest("SHA-256", data);
- const base64 = btoa(String.fromCharCode.apply(null, new Uint8Array(hash)));
- return base64.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
- }
-
- function isCredentialError(error, errorDescription) {
- const err = (error == null ? "" : String(error)).toLowerCase();
- const desc = (errorDescription == null ? "" : String(errorDescription)).toLowerCase();
- if (err === "access_denied" || err === "invalid_grant") return true;
- const credentialPhrases = [
- "wrong email or password",
- "wrong username or password",
- "invalid credentials",
- "invalid user credentials",
- "username or password",
- "login required",
- "incorrect password",
- "invalid password",
- ];
- const combined = (err + " " + desc).toLowerCase();
- for (let i = 0; i < credentialPhrases.length; i++) {
- if (combined.indexOf(credentialPhrases[i]) !== -1) return true;
- }
- return false;
- }
-
- function responseTextSuggestsCredentialError(text) {
- if (typeof text !== "string") return false;
- const t = text.toLowerCase();
- if (t.indexOf("invalid_grant") !== -1 || t.indexOf("access_denied") !== -1) return true;
- if (t.indexOf("wrong") !== -1 && t.indexOf("password") !== -1) return true;
- if (t.indexOf("invalid credentials") !== -1 || t.indexOf("invalid user credentials") !== -1) return true;
- if (t.indexOf("username or password") !== -1) return true;
- return false;
- }
-
- function buildAuthorizeUrl(verifier, state) {
- return sha256Base64Url(verifier).then(function (challenge) {
- const redirectUri = chrome.identity.getRedirectURL("auth");
- const url = new URL("https://" + AUTH0_DOMAIN + "/authorize");
- url.searchParams.set("response_type", "code");
- url.searchParams.set("client_id", AUTH0_CLIENT_ID);
- url.searchParams.set("redirect_uri", redirectUri);
- url.searchParams.set("code_challenge", challenge);
- url.searchParams.set("code_challenge_method", "S256");
- url.searchParams.set("scope", AUTH0_SCOPE);
- url.searchParams.set("audience", AUTH0_AUDIENCE);
- url.searchParams.set("prompt", "login");
- url.searchParams.set("max_age", "0");
- url.searchParams.set("state", state || Math.random().toString(36).slice(2));
- return { url: url.toString(), verifier: verifier, redirectUri: redirectUri };
- });
- }
-
- function exchangeCodeForTokens(code, verifier, redirectUri) {
- const body = {
- grant_type: "authorization_code",
- client_id: AUTH0_CLIENT_ID,
- code: code,
- redirect_uri: redirectUri,
- code_verifier: verifier,
- audience: AUTH0_AUDIENCE,
- };
- return fetch("https://" + AUTH0_DOMAIN + "/oauth/token", {
- method: "POST",
- headers: { "Content-Type": "application/json" },
- body: JSON.stringify(body),
- }).then(function (res) {
- if (!res.ok) {
- return res.text().then(function (t) {
- let credentialError = false;
- try {
- const json = JSON.parse(t);
- const err = json && json.error;
- const errDesc = json && json.error_description;
- credentialError = isCredentialError(err, errDesc);
- } catch {}
- if (!credentialError && responseTextSuggestsCredentialError(t)) credentialError = true;
- const e = new Error("Token exchange failed: " + res.status + " " + t);
- e.isCredentialError = credentialError;
- throw e;
- });
- }
- return res.json();
- });
- }
-
- /** PKCE: launchWebAuthFlow → exchange code for tokens → validate → store. */
- function login() {
- if (!AUTH0_CLIENT_ID) return Promise.reject(new Error("Auth not configured: missing client ID"));
- loginInProgress = true;
- const verifier = generateCodeVerifier();
- const state = Math.random().toString(36).slice(2);
- return clearStoredTokens().then(function () {
- return buildAuthorizeUrl(verifier, state);
- }).then(function (authParams) {
- return new Promise(function (resolve, reject) {
- chrome.identity.launchWebAuthFlow(
- { url: authParams.url, interactive: true },
- function (redirectUrl) {
- if (chrome.runtime.lastError || !redirectUrl) {
- loginInProgress = false;
- clearStoredTokens().then(function () {
- reject(new Error(chrome.runtime.lastError ? chrome.runtime.lastError.message : "Sign-in was closed or blocked."));
- });
- return;
- }
- try {
- const url = new URL(redirectUrl);
- const err = url.searchParams.get("error");
- const errDesc = url.searchParams.get("error_description");
- if (err || errDesc) {
- loginInProgress = false;
- clearStoredTokens().then(function () {
- const e = new Error("Auth0: " + (errDesc || err));
- e.isCredentialError = isCredentialError(err, errDesc);
- reject(e);
- });
- return;
- }
- const code = url.searchParams.get("code");
- if (!code) {
- loginInProgress = false;
- clearStoredTokens().then(function () {
- reject(new Error("No authorization code in redirect"));
- });
- return;
- }
- exchangeCodeForTokens(code, authParams.verifier, authParams.redirectUri)
- .then(function (data) {
- if (!data.access_token) {
- loginInProgress = false;
- clearStoredTokens().then(function () {
- reject(new Error("No access token in response"));
- });
- return;
- }
- const expires_at = Math.floor(Date.now() / 1000) + (data.expires_in || 3600);
- return validateAccessToken(data.access_token).then(function (valid) {
- if (!valid) {
- loginInProgress = false;
- clearStoredTokens().then(function () {
- reject(new Error("Access token failed validation"));
- });
- return;
- }
- return setStoredTokens({ access_token: data.access_token, expires_at: expires_at }).then(function () {
- loginInProgress = false;
- resolve(data.access_token);
- });
- });
- })
- .catch(function (e) {
- loginInProgress = false;
- clearStoredTokens().then(function () { reject(e); });
- });
- } catch (e) {
- loginInProgress = false;
- clearStoredTokens().then(function () { reject(e); });
- }
- }
- );
- });
- });
- }
-
- function logout() {
- return clearStoredTokens();
- }
-
- function init(config) {
- if (config && config.clientId) AUTH0_CLIENT_ID = config.clientId;
- }
-
- function isLoginInProgress() {
- return loginInProgress;
- }
-
- global.VeracityAuth = {
- init: init,
- isAuthenticated: isAuthenticated,
- getAccessToken: getAccessToken,
- login: login,
- logout: logout,
- getStoredTokens: getStoredTokens,
- setStoredTokens: setStoredTokens,
- clearStoredTokens: clearStoredTokens,
- validateAccessToken: validateAccessToken,
- isLoginInProgress: isLoginInProgress,
- TOKEN_STORAGE_KEY: TOKEN_STORAGE_KEY,
- };
-})(typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : this);
diff --git a/web_extension/Veracity_Extension/src/lib/auth.ts b/web_extension/Veracity_Extension/src/lib/auth.ts
deleted file mode 100644
index fe2343c..0000000
--- a/web_extension/Veracity_Extension/src/lib/auth.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Auth module contract for Veracity Extension.
- * Runtime implementation lives in auth.js (browser) and is inlined into panel.js by postbuild.
- *
- * - login(): PKCE + chrome.identity.launchWebAuthFlow, then validate access token and persist.
- * - logout(): Clear chrome.storage.local tokens and reset UI state.
- * - getAccessToken(): Return valid access token or null (caller triggers login).
- * - isAuthenticated(): True only if a valid Auth0 ACCESS TOKEN exists (JWT validated with JWKS).
- *
- * Token validation: JWT exists, exp in future, iss === "https://veri-fact.ca.auth0.com/",
- * aud includes "https://veri-fact.ca.auth0.com/api/v2/", RS256 signature verified via JWKS.
- * Storage: only { access_token, expires_at } in chrome.storage.local.
- */
-
-export const AUTH0_DOMAIN = "veri-fact.ca.auth0.com";
-export const AUTH0_AUDIENCE = "https://veri-fact.ca.auth0.com/api/v2/";
-export const AUTH0_ALGORITHMS = "RS256";
-export const AUTH0_ISSUER = "https://veri-fact.ca.auth0.com/";
-export const AUTH0_SCOPE = "openid profile email";
-export const JWKS_URL = "https://veri-fact.ca.auth0.com/.well-known/jwks.json";
-export const TOKEN_STORAGE_KEY = "veracity_tokens";
-
-export interface AuthConfig {
- clientId: string;
-}
-
-export interface StoredTokens {
- access_token: string;
- expires_at: number;
-}
-
-export interface AuthModule {
- init(config: AuthConfig): void;
- isAuthenticated(): Promise;
- getAccessToken(): Promise;
- login(): Promise;
- logout(): Promise;
-}
diff --git a/web_extension/Veracity_Extension/src/lib/auth0.ts b/web_extension/Veracity_Extension/src/lib/auth0.ts
deleted file mode 100644
index 6951cc4..0000000
--- a/web_extension/Veracity_Extension/src/lib/auth0.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-import crypto from "crypto";
-
-export function generateCodeVerifier(length = 43) {
- const bytes = crypto.randomBytes(length);
- return bytes
- .toString("base64")
- .replace(/\+/g, "-")
- .replace(/\//g, "_")
- .replace(/=+$/, "")
- .slice(0, length);
-}
-
-export async function generateCodeChallengeS256(verifier: string) {
- const hash = crypto.createHash("sha256").update(verifier).digest("base64");
- return hash.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
-}
-
-export function buildAuthorizeUrl(params: {
- domain: string;
- clientId: string;
- redirectUri: string;
- codeChallenge: string;
- audience?: string;
- scope?: string;
-}) {
- const { domain, clientId, redirectUri, codeChallenge, audience, scope } = params;
- const url = new URL(`https://${domain}/authorize`);
- url.searchParams.set("response_type", "code");
- url.searchParams.set("client_id", clientId);
- url.searchParams.set("redirect_uri", redirectUri);
- url.searchParams.set("code_challenge", codeChallenge);
- url.searchParams.set("code_challenge_method", "S256");
- url.searchParams.set("scope", scope || "openid profile email");
- if (audience) url.searchParams.set("audience", audience);
- url.searchParams.set("state", crypto.randomBytes(16).toString("hex"));
- return url.toString();
-}
-
-export async function exchangeCodeForTokens(params: {
- domain: string;
- clientId: string;
- code: string;
- redirectUri: string;
- codeVerifier: string;
- audience?: string;
-}) {
- const { domain, clientId, code, redirectUri, codeVerifier, audience } = params;
- const url = `https://${domain}/oauth/token`;
- const body: Record = {
- grant_type: "authorization_code",
- client_id: clientId,
- code,
- redirect_uri: redirectUri,
- code_verifier: codeVerifier,
- };
- if (audience) body.audience = audience;
-
- const res = await fetch(url, {
- method: "POST",
- headers: { "Content-Type": "application/json" },
- body: JSON.stringify(body),
- });
- if (!res.ok) {
- throw new Error(`Token exchange failed: ${res.status} ${await res.text()}`);
- }
- return res.json();
-}
-
diff --git a/web_extension/Veracity_Extension/styles/Home.module.css b/web_extension/Veracity_Extension/styles/Home.module.css
deleted file mode 100644
index 7018e06..0000000
--- a/web_extension/Veracity_Extension/styles/Home.module.css
+++ /dev/null
@@ -1,448 +0,0 @@
-/**
- * Component styles for index.tsx: .page, .panel, .authHero, .heroIcon, .heroTitle,
- * buttons, card, textarea, etc. Class names are hashed (e.g. Home_page__Yvcrx).
- * Imported in pages/index.tsx → Next bundles it. The exported HTML/CSS is what
- * postbuild starts from; the panel then replaces the body but the same stylesheet
- * is still linked.
- */
-.page {
- min-height: 100vh;
- display: flex;
- flex-direction: column;
- padding: 10px 10px 12px;
- background: #fff;
-}
-
-.panel {
- background: transparent;
- border: none;
- border-radius: 0;
- box-shadow: none;
- padding: 0;
- display: flex;
- flex-direction: column;
- gap: 12px;
- width: 100%;
-}
-
-.authHero {
- background: transparent;
- border: none;
- border-radius: 0;
- padding: 10px 10px 14px;
- display: flex;
- flex-direction: column;
- gap: 16px;
-}
-
-.heroIcon {
- width: 46px;
- height: 46px;
- border-radius: 16px;
- background: #000;
- color: #fff;
- display: flex;
- align-items: center;
- justify-content: center;
- font-weight: 800;
- font-size: 18px;
-}
-
-.heroEyebrow {
- font-size: 0px;
- line-height: 0px;
- color: #8a8f9a;
- font-weight: 600;
-}
-
-.heroTitle {
- font-size: 34px;
- font-weight: 800;
- line-height: 38px;
- color: #0f172a;
-}
-
-.heroSubtext {
- font-size: 13px;
- color: #8a8f9a;
- line-height: 20px;
- max-width: 360px;
-}
-
-.heroButtons {
- display: flex;
- flex-direction: column;
- gap: 10px;
-}
-
-.heroPrimaryBtn {
- background: #000;
- color: #fff;
- border: none;
- border-radius: 999px;
- padding: 16px 24px;
- font-weight: 700;
- font-size: 15px;
- cursor: pointer;
- text-align: left;
- transition: transform 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
-}
-
-.heroPrimaryBtn:hover {
- transform: translateY(-1px);
- box-shadow: 0 8px 20px #0000001a;
- background: #111;
-}
-
-.heroSecondaryBtn {
- background: #fff;
- color: #000;
- border: 1px solid var(--color-border);
- border-radius: 999px;
- padding: 10px 12px;
- font-weight: 700;
- cursor: pointer;
-}
-
-.privacyLine {
- font-size: 12px;
- color: #8a8f9a;
- line-height: 17px;
- max-width: 360px;
-}
-
-.loginCard {
- display: flex;
- flex-direction: column;
- gap: 10px;
- background: #fff;
- border: 1px solid var(--color-border);
- border-radius: 12px;
- padding: 12px;
- box-shadow: none;
-}
-
-.loginIcon {
- width: 36px;
- height: 36px;
- border-radius: 12px;
- background: #000;
- color: #fff;
- display: flex;
- align-items: center;
- justify-content: center;
- font-weight: 800;
- font-size: 15px;
-}
-
-.loginTitle {
- font-size: 16px;
- font-weight: 700;
- color: #0f172a;
-}
-
-.loginHint {
- font-size: 12px;
- color: #6b7280;
-}
-
-.divider {
- display: flex;
- align-items: center;
- gap: 8px;
- color: #8a8f9a;
- font-size: 11px;
- font-weight: 600;
-}
-
-.divider::before,
-.divider::after {
- content: "";
- flex: 1;
- height: 1px;
- background: #e5e5e5;
-}
-
-.passwordRow {
- display: flex;
- gap: 8px;
- align-items: center;
-}
-
-.authStatus {
- font-size: 12px;
- color: #d00;
-}
-
-.kicker {
- display: none;
-}
-
-.title {
- display: none;
-}
-
-.fancy {
- display: none;
-}
-
-.subtitle {
- display: none;
-}
-
-.tabList {
- display: flex;
- gap: 8px;
- flex-wrap: nowrap;
- overflow: visible;
- padding: 0;
- width: 100%;
- margin-top: 14px;
-}
-
-.tabButton {
- border: 1px solid var(--color-border);
- background: var(--color-surface);
- padding: 8px 8px;
- border-radius: 8px;
- cursor: pointer;
- transition: all 0.2s ease;
- min-width: 0;
- flex: 1;
- white-space: normal;
- text-align: center;
- overflow: visible;
-}
-
-.tabButton:hover {
- box-shadow: var(--shadow-soft);
- transform: translateY(-1px);
-}
-
-.tabButtonActive {
- border-color: transparent;
- background-image: var(--gradient-brand);
- color: #ffffff;
- box-shadow: var(--shadow-soft);
-}
-
-.tabLabel {
- display: block;
- font-weight: 700;
- font-size: 12px;
- line-height: 16px;
-}
-
-.card {
- background: var(--color-surface);
- border: 1px solid var(--color-border);
- border-radius: 10px;
- box-shadow: none;
- padding: 12px;
- display: flex;
- flex-direction: column;
- gap: 12px;
- width: 100%;
-}
-
-.pillRow {
- display: none;
-}
-
-.pill {
- display: none;
-}
-
-.pillStrong {
- display: none;
-}
-
-.pillAccent {
- display: none;
-}
-
-.sectionTitle {
- font-size: 18px;
- font-weight: 700;
-}
-
-.headingRow {
- display: flex;
- align-items: center;
- justify-content: space-between;
- gap: 8px;
-}
-
-.testBadge {
- display: inline-flex;
- align-items: center;
- padding: 2px 6px;
- border-radius: 999px;
- background: #f8f8f8;
- color: #555;
- font-size: 10px;
- font-weight: 700;
- border: 1px solid #e5e5e5;
- opacity: 0.75;
-}
-
-.label {
- font-size: 12px;
- font-weight: 600;
- color: #555;
-}
-
-.textarea {
- width: 100%;
- border: 1px solid var(--color-border);
- border-radius: 12px;
- padding: 12px;
- font-size: 14px;
- font-family: inherit;
- resize: vertical;
- background: #fff;
- color: var(--color-ink);
- box-shadow: inset 0 1px 2px rgba(0,0,0,0.03);
-}
-
-.buttonRow {
- display: flex;
- gap: 8px;
- flex-wrap: nowrap;
- justify-content: center;
-}
-
-.primaryBtn,
-.secondaryBtn {
- flex: 0 0 auto;
- min-width: 120px;
- padding: 12px 18px;
- border-radius: 999px;
- border: 1px solid var(--color-border);
- background: #fff;
- cursor: pointer;
- font-size: 13px;
- font-weight: 700;
- transition: all 0.15s ease;
-}
-
-.primaryBtn {
- background-image: var(--gradient-brand);
- color: #fff;
- border: none;
- box-shadow: 0 8px 20px rgba(0,0,0,0.08);
-}
-
-.primaryBtn:hover,
-.secondaryBtn:hover {
- box-shadow: var(--shadow-soft);
- transform: translateY(-1px);
-}
-
-.logBox {
- border: 1px solid var(--color-border);
- border-radius: 8px;
- padding: 8px;
- background: #fff;
-}
-
-.logHeader {
- font-size: 12px;
- font-weight: 700;
- margin-bottom: 4px;
- color: #444;
-}
-
-.logArea {
- width: 100%;
- min-height: 80px;
- max-height: 140px;
- overflow: auto;
- font-size: 12px;
- line-height: 16px;
- color: #222;
- background: #fff;
- border: none;
- white-space: pre-wrap;
-}
-
-.scoreBox {
- display: flex;
- flex-direction: column;
- gap: 6px;
- padding: 12px;
- border: 1px solid var(--color-border);
- border-radius: 12px;
- width: 100%;
- background: #fff;
- box-shadow: 0 4px 12px rgba(0,0,0,0.04);
-}
-
-.scoreHeader {
- display: flex;
- align-items: center;
- gap: 10px;
-}
-
-.scoreValue {
- font-size: 32px;
- font-weight: 800;
- color: #0f172a;
-}
-
-.scoreLabel {
- font-size: 13px;
- color: #555;
- font-weight: 700;
-}
-
-.scoreSummary {
- font-size: 12px;
- color: #3a3f4b;
- line-height: 16px;
-}
-
-.authCta {
- border: 1px solid var(--color-border);
- border-radius: 8px;
- padding: 10px;
- background: #fff;
- display: flex;
- flex-direction: column;
- gap: 8px;
-}
-
-.authText {
- font-size: 12px;
- color: #333;
- font-weight: 600;
-}
-
-.authButtons {
- display: flex;
- gap: 8px;
-}
-
-.authStatus {
- font-size: 12px;
- color: #555;
-}
-
-.sectionBody {
- font-size: 14px;
- color: #3a3a3a;
- line-height: 18px;
-}
-
-.insight {
- display: none;
-}
-
-.footer {
- margin-top: 14px;
- font-size: 12px;
- color: var(--color-muted);
- text-align: center;
- padding: 8px 0;
-}
-
diff --git a/web_extension/Veracity_Extension/styles/LoginForm.module.css b/web_extension/Veracity_Extension/styles/LoginForm.module.css
deleted file mode 100644
index 104fb59..0000000
--- a/web_extension/Veracity_Extension/styles/LoginForm.module.css
+++ /dev/null
@@ -1,213 +0,0 @@
-/**
- * Module styles for a login form (likely an older or alternate UI).
- * Not referenced by any current pages/ or public/ file in the extension.
- * Effectively unused; safe to remove if you don't plan to use it.
- */
-.loginShell {
- padding: 16px 14px 18px;
-}
-
-.loginCard {
- width: 100%;
- background: #fff;
- border: 1px solid #e5e5e5;
- border-radius: 14px;
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
- padding: 18px 18px 20px;
- display: flex;
- flex-direction: column;
- gap: 12px;
-}
-
-.loginLogo {
- width: 56px;
- height: 56px;
- margin: 0 auto;
-}
-
-.loginTitle {
- font-family: 'figtree', Arial, Helvetica, sans-serif;
- font-size: 20px;
- font-weight: 700;
- color: #0f172a;
- text-align: center;
- margin: 4px 0 0 0;
-}
-
-.loginSubtitle {
- font-family: 'figtree', Arial, Helvetica, sans-serif;
- font-size: 13px;
- line-height: 18px;
- color: #4b5563;
- text-align: center;
- margin: 0;
-}
-
-.loginLabel {
- font-family: 'figtree', Arial, Helvetica, sans-serif;
- font-size: 12px;
- font-weight: 600;
- color: #374151;
- margin: 6px 0 2px 0;
-}
-
-.loginInputWrap {
- position: relative;
-}
-
-.loginInput {
- width: 100%;
- border: 1px solid #d1d5db;
- border-radius: 10px;
- padding: 10px 12px;
- font-size: 14px;
- font-family: 'figtree', Arial, Helvetica, sans-serif;
- outline: none;
- transition: border-color 0.15s ease, box-shadow 0.15s ease;
-}
-
-.loginInput:focus {
- border-color: #2563eb;
- box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.18);
-}
-
-.pwdToggle {
- position: absolute;
- right: 10px;
- top: 50%;
- transform: translateY(-50%);
- border: none;
- background: transparent;
- cursor: pointer;
- font-size: 14px;
- color: #4b5563;
-}
-
-.loginPrimary {
- width: 100%;
- border: none;
- border-radius: 10px;
- background: #1d4ed8;
- color: #fff;
- padding: 12px 14px;
- font-size: 15px;
- font-weight: 700;
- cursor: pointer;
- transition: transform 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
-}
-
-.loginPrimary:hover {
- transform: translateY(-1px);
- box-shadow: 0 8px 20px rgba(37, 99, 235, 0.35);
- background: #1b46c2;
-}
-
-.loginHint {
- font-size: 13px;
- color: #0f172a;
- text-align: center;
- margin: 2px 0 0 0;
- font-family: 'figtree', Arial, Helvetica, sans-serif;
-}
-
-.divider {
- display: flex;
- align-items: center;
- gap: 8px;
- color: #6b7280;
- font-size: 12px;
- font-weight: 600;
- margin: 2px 0;
-}
-
-.divider::before,
-.divider::after {
- content: "";
- flex: 1;
- height: 1px;
- background: #e5e7eb;
-}
-
-.googleBtn {
- width: 100%;
- border: 1px solid #d1d5db;
- border-radius: 10px;
- background: #fff;
- color: #111;
- padding: 11px 14px;
- font-size: 14px;
- font-weight: 600;
- cursor: pointer;
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 8px;
- transition: transform 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
-}
-
-.googleBtn:hover {
- transform: translateY(-1px);
- box-shadow: 0 8px 18px rgba(0, 0, 0, 0.12);
- background: #f8fafc;
-}
-
-.loginHintRow {
- display: flex;
- justify-content: center;
- gap: 4px;
- font-family: 'figtree', Arial, Helvetica, sans-serif;
- font-size: 13px;
- color: #0f172a;
- margin: 2px 0 0 0;
-}
-
-.loginHintLink {
- color: #1683ff;
- text-decoration: none;
- font-weight: 600;
- cursor: pointer;
- border: none;
- background: transparent;
- padding: 0;
-}
-
-.loginHintLink:hover {
- text-decoration: underline;
-}
-
-.forgotRow {
- display: flex;
- justify-content: flex-end;
- margin: 2px 0 0 0;
-}
-
-.forgotLink {
- color: #1683ff;
- font-size: 12px;
- font-weight: 600;
- text-decoration: none;
- font-family: 'figtree', Arial, Helvetica, sans-serif;
- cursor: pointer;
- border: none;
- background: transparent;
- padding: 0;
-}
-
-.forgotLink:hover {
- text-decoration: underline;
-}
-
-.inlineInfo {
- font-size: 12px;
- color: #4b5563;
- margin: 2px 0 0 0;
- font-family: 'figtree', Arial, Helvetica, sans-serif;
-}
-
-.errorText {
- font-size: 12px;
- color: #b91c1c;
- margin: 4px 0 0 0;
- font-family: 'figtree', Arial, Helvetica, sans-serif;
-}
-
diff --git a/web_extension/Veracity_Extension/styles/globals.css b/web_extension/Veracity_Extension/styles/globals.css
deleted file mode 100644
index 3c7add5..0000000
--- a/web_extension/Veracity_Extension/styles/globals.css
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Global resets and design tokens
- * html/body/* rules, base link/button styles.
- * Imported in _app.tsx → bundled by Next.js into the exported HTML's CSS.
- * That HTML is then rewritten by postbuild; the compiled CSS is still part of the page.
- */
-:root {
- --color-surface: #ffffff;
- --color-ink: #1a1a1a;
- --color-muted: #727272;
- --color-border: #e5e5e5;
- --color-panel: #f5f5f5;
- --shadow-soft: 2px 2px 10px 0px #0000001A;
- --gradient-brand: linear-gradient(269.47deg, #11F90E 3.4%, #1683FF 99.98%);
- --radius-card: 18px;
-}
-
-html {
- color-scheme: light;
- background: #fff !important;
-}
-
-* {
- box-sizing: border-box;
- padding: 0;
- margin: 0;
-}
-
-html,
-body {
- max-width: 100vw;
- overflow-x: hidden;
- background: #fff !important;
-}
-
-body {
- font-family: 'figtree', 'inter', Arial, Helvetica, sans-serif;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- background: #fff !important;
- color: var(--color-ink);
-}
-
-a {
- color: inherit;
- text-decoration: none;
-}
-
-button {
- font-family: inherit;
-}
-
diff --git a/web_extension/Veracity_Extension/styles/webapp-hero.css b/web_extension/Veracity_Extension/styles/webapp-hero.css
deleted file mode 100644
index 41a98a5..0000000
--- a/web_extension/Veracity_Extension/styles/webapp-hero.css
+++ /dev/null
@@ -1,111 +0,0 @@
-/**
- * Standalone styles for the landing hero (heading, subheading, description,
- * login button, privacy line, etc.). Uses classes like .textWrapper, .heading,
- * .loginButton. Not imported by React. postbuild.js copies this file to
- * dist/webapp-hero.css and adds
- * to the panel HTML. The inlined panel script renders the landing hero with
- * those class names, so this file styles the logged-out view.
- */
-.textWrapper {
- font-family: 'figtree', Arial, Helvetica, sans-serif;
- padding: 14px 18px 18px;
- display: flex;
- flex-direction: column;
- gap: 12px;
-}
-
-.heading {
- margin: 12px 0 6px 0;
- font-family: Figtree;
- font-size: clamp(22px, 4.4vw, 26px);
- font-weight: 600;
- line-height: clamp(26px, 5vw, 32px);
- color: #8a8f9a;
-}
-
-.subheading {
- font-family: Figtree;
- font-size: clamp(28px, 7.4vw, 48px);
- font-weight: 700;
- line-height: clamp(34px, 8vw, 58px);
- margin: 8px 0 10px 0;
-}
-
-.fancyText {
- background: linear-gradient(269.47deg, #11F90E 3.4%, #1683FF 99.98%);
- color: transparent;
- -webkit-background-clip: text;
- background-clip: text;
-}
-
-.description {
- font-family: Figtree;
- font-size: clamp(13px, 3.2vw, 15px);
- line-height: clamp(18px, 4vw, 22px);
- font-weight: 600;
- color: #8a8f9a;
- margin: 6px 0 10px 0;
-}
-
-.loginButton {
- background: #000;
- color: #fff;
- border: none;
- border-radius: 999px;
- padding: 14px 22px;
- font-size: 15px;
- font-weight: 700;
- cursor: pointer;
- box-shadow: 0 12px 30px #00000022;
- transition: transform 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
- align-self: center;
-}
-
-.loginButton:hover {
- transform: translateY(-1px);
- box-shadow: 0 16px 38px #0000002e;
- background: #111;
-}
-
-.privacyLine {
- font-size: 13px;
- color: #0f172a;
- line-height: 18px;
- max-width: 420px;
- margin: 10px 0 4px 0;
- font-weight: 500;
-}
-
-.heroLinkLine {
- font-size: 13px;
- color: #0f172a;
- line-height: 18px;
- margin: 0 0 2px 0;
- font-weight: 500;
-}
-
-.heroLinkLine a {
- color: #1683ff;
- text-decoration: none;
- font-weight: 600;
-}
-
-.heroLinkLine a:hover {
- text-decoration: underline;
-}
-
-@media only screen and (max-width: 850px) {
- .heading {
- font-size: 22px;
- line-height: 26px;
- }
- .subheading {
- font-size: 28px;
- line-height: 34px;
- }
- .description {
- font-size: 13px;
- line-height: 18px;
- }
-}
-
diff --git a/web_extension/Veracity_Extension/tsconfig.json b/web_extension/Veracity_Extension/tsconfig.json
deleted file mode 100644
index 689a0e4..0000000
--- a/web_extension/Veracity_Extension/tsconfig.json
+++ /dev/null
@@ -1,3 +0,0 @@
-/* TypeScript config for the extension's Next.js app: strict mode, ESNext, JSX preserved for Next; includes .ts/.tsx/.js/.jsx and .next/types; excludes node_modules and dist. */
-{
- "compilerOptions":{"target":"esnext","lib":["dom","dom.iterable","esnext"],"allowJs":true,"skipLibCheck":true,"strict":true,"noEmit":true,"esModuleInterop":true,"module":"esnext","moduleResolution":"bundler","resolveJsonModule":true,"isolatedModules":true,"jsx":"preserve","incremental":true,"types":["node"],"plugins":[{"name":"next"}]},"include":["**/*.js","**/*.jsx","**/*.ts","**/*.tsx","next-env.d.ts","next.config.js",".next/types/**/*.ts"],"exclude":["node_modules","dist"]}