From ba6db6edd57c090ee848f0ba5b8559f913f457f2 Mon Sep 17 00:00:00 2001
From: Den Piligrim <89912505+vasiljevdenis@users.noreply.github.com>
Date: Wed, 28 Jan 2026 12:05:10 +0300
Subject: [PATCH] gui version
---
app/.env.example | 10 -
app/Dockerfile | 12 -
app/assets/flags.json | 1307 --
app/builders/buildInboundLink.js | 162 -
app/builders/buildShadowsocksTcp.js | 43 -
app/builders/buildTrojanRealityTcp.js | 65 -
app/builders/buildVlessRealityGrpc.js | 67 -
app/builders/buildVlessRealityTcp.js | 66 -
app/builders/buildVlessRealityXhttp.js | 72 -
app/builders/buildVlessWs.js | 42 -
app/builders/buildVmessTcp.js | 37 -
app/docker-compose.example.yml | 18 -
app/index.js | 229 -
app/nginx.example.conf | 18 -
app/package.json | 7 -
app/rotate.js | 216 -
client/.gitignore | 24 +
client/README.md | 73 +
client/eslint.config.js | 23 +
client/index.html | 13 +
client/package-lock.json | 4290 ++++++
client/package.json | 38 +
client/public/img/3dpmanager-social-card.png | Bin 0 -> 459840 bytes
client/public/img/boat.png | Bin 0 -> 470673 bytes
client/public/img/favicon.png | Bin 0 -> 21603 bytes
client/public/img/logo.png | Bin 0 -> 120748 bytes
client/public/img/rocket.png | Bin 0 -> 477891 bytes
client/public/img/train.png | Bin 0 -> 724366 bytes
client/src/App.css | 42 +
client/src/App.tsx | 45 +
client/src/ThemeContext.tsx | 63 +
client/src/api.ts | 7 +
client/src/assets/react.svg | 1 +
client/src/auth/AuthContext.tsx | 36 +
client/src/auth/AxiosInterceptor.tsx | 29 +
client/src/auth/PublicRoute.tsx | 12 +
client/src/auth/RequireAuth.tsx | 14 +
client/src/components/Footer.tsx | 86 +
client/src/components/Header.tsx | 140 +
client/src/components/Layout.tsx | 81 +
client/src/index.css | 0
client/src/main.tsx | 14 +
client/src/pages/DomainsPage.tsx | 165 +
client/src/pages/LoginPage.tsx | 50 +
client/src/pages/NotFoundPage.tsx | 35 +
client/src/pages/SettingsPage.tsx | 163 +
client/src/pages/SubscriptionsPage.tsx | 141 +
client/src/pages/TunnelsPage.tsx | 143 +
client/src/theme.ts | 154 +
client/tsconfig.app.json | 28 +
client/tsconfig.json | 7 +
client/tsconfig.node.json | 26 +
client/vite.config.ts | 9 +
docker-compose.yml | 16 +
forwarding_install.sh | 304 +-
server/.gitignore | 56 +
server/.prettierrc | 4 +
server/README.md | 98 +
server/eslint.config.mjs | 35 +
server/nest-cli.json | 8 +
server/package-lock.json | 11153 ++++++++++++++++
server/package.json | 92 +
server/src/app.controller.spec.ts | 22 +
server/src/app.controller.ts | 12 +
server/src/app.module.ts | 58 +
server/src/app.service.ts | 8 +
server/src/auth/auth.controller.ts | 30 +
server/src/auth/auth.module.ts | 23 +
server/src/auth/auth.service.ts | 110 +
server/src/auth/jwt-auth.guard.ts | 21 +
server/src/auth/jwt.strategy.ts | 18 +
server/src/auth/public.decorator.ts | 2 +
server/src/client/client.controller.ts | 133 +
server/src/client/client.module.ts | 11 +
server/src/domains/domains.controller.ts | 46 +
server/src/domains/domains.module.ts | 13 +
server/src/domains/domains.service.ts | 80 +
server/src/domains/entities/domain.entity.ts | 13 +
.../src/inbounds/entities/inbound.entity.ts | 26 +
.../src/inbounds/inbound-builder.service.ts | 342 +
server/src/inbounds/inbounds.module.ts | 11 +
server/src/main.ts | 19 +
server/src/rotation/rotation.module.ts | 23 +
server/src/rotation/rotation.service.ts | 169 +
.../src/settings/entities/setting.entity.ts | 13 +
server/src/settings/settings.controller.ts | 40 +
server/src/settings/settings.module.ts | 10 +
.../entities/subscription.entity.ts | 26 +
.../subscriptions/subscriptions.controller.ts | 22 +
.../src/subscriptions/subscriptions.module.ts | 15 +
.../subscriptions/subscriptions.service.ts | 43 +
server/src/tunnels/entities/tunnel.entity.ts | 28 +
server/src/tunnels/ssh.service.ts | 49 +
server/src/tunnels/tunnels.controller.ts | 28 +
server/src/tunnels/tunnels.module.ts | 14 +
server/src/tunnels/tunnels.service.ts | 79 +
server/src/xui/xui.module.ts | 11 +
server/src/xui/xui.service.ts | 104 +
server/test/app.e2e-spec.ts | 25 +
server/test/jest-e2e.json | 9 +
server/tsconfig.build.json | 4 +
server/tsconfig.json | 25 +
102 files changed, 19151 insertions(+), 2673 deletions(-)
delete mode 100644 app/.env.example
delete mode 100644 app/Dockerfile
delete mode 100644 app/assets/flags.json
delete mode 100644 app/builders/buildInboundLink.js
delete mode 100644 app/builders/buildShadowsocksTcp.js
delete mode 100644 app/builders/buildTrojanRealityTcp.js
delete mode 100644 app/builders/buildVlessRealityGrpc.js
delete mode 100644 app/builders/buildVlessRealityTcp.js
delete mode 100644 app/builders/buildVlessRealityXhttp.js
delete mode 100644 app/builders/buildVlessWs.js
delete mode 100644 app/builders/buildVmessTcp.js
delete mode 100644 app/docker-compose.example.yml
delete mode 100644 app/index.js
delete mode 100644 app/nginx.example.conf
delete mode 100644 app/package.json
delete mode 100644 app/rotate.js
create mode 100644 client/.gitignore
create mode 100644 client/README.md
create mode 100644 client/eslint.config.js
create mode 100644 client/index.html
create mode 100644 client/package-lock.json
create mode 100644 client/package.json
create mode 100644 client/public/img/3dpmanager-social-card.png
create mode 100644 client/public/img/boat.png
create mode 100644 client/public/img/favicon.png
create mode 100644 client/public/img/logo.png
create mode 100644 client/public/img/rocket.png
create mode 100644 client/public/img/train.png
create mode 100644 client/src/App.css
create mode 100644 client/src/App.tsx
create mode 100644 client/src/ThemeContext.tsx
create mode 100644 client/src/api.ts
create mode 100644 client/src/assets/react.svg
create mode 100644 client/src/auth/AuthContext.tsx
create mode 100644 client/src/auth/AxiosInterceptor.tsx
create mode 100644 client/src/auth/PublicRoute.tsx
create mode 100644 client/src/auth/RequireAuth.tsx
create mode 100644 client/src/components/Footer.tsx
create mode 100644 client/src/components/Header.tsx
create mode 100644 client/src/components/Layout.tsx
create mode 100644 client/src/index.css
create mode 100644 client/src/main.tsx
create mode 100644 client/src/pages/DomainsPage.tsx
create mode 100644 client/src/pages/LoginPage.tsx
create mode 100644 client/src/pages/NotFoundPage.tsx
create mode 100644 client/src/pages/SettingsPage.tsx
create mode 100644 client/src/pages/SubscriptionsPage.tsx
create mode 100644 client/src/pages/TunnelsPage.tsx
create mode 100644 client/src/theme.ts
create mode 100644 client/tsconfig.app.json
create mode 100644 client/tsconfig.json
create mode 100644 client/tsconfig.node.json
create mode 100644 client/vite.config.ts
create mode 100644 docker-compose.yml
create mode 100644 server/.gitignore
create mode 100644 server/.prettierrc
create mode 100644 server/README.md
create mode 100644 server/eslint.config.mjs
create mode 100644 server/nest-cli.json
create mode 100644 server/package-lock.json
create mode 100644 server/package.json
create mode 100644 server/src/app.controller.spec.ts
create mode 100644 server/src/app.controller.ts
create mode 100644 server/src/app.module.ts
create mode 100644 server/src/app.service.ts
create mode 100644 server/src/auth/auth.controller.ts
create mode 100644 server/src/auth/auth.module.ts
create mode 100644 server/src/auth/auth.service.ts
create mode 100644 server/src/auth/jwt-auth.guard.ts
create mode 100644 server/src/auth/jwt.strategy.ts
create mode 100644 server/src/auth/public.decorator.ts
create mode 100644 server/src/client/client.controller.ts
create mode 100644 server/src/client/client.module.ts
create mode 100644 server/src/domains/domains.controller.ts
create mode 100644 server/src/domains/domains.module.ts
create mode 100644 server/src/domains/domains.service.ts
create mode 100644 server/src/domains/entities/domain.entity.ts
create mode 100644 server/src/inbounds/entities/inbound.entity.ts
create mode 100644 server/src/inbounds/inbound-builder.service.ts
create mode 100644 server/src/inbounds/inbounds.module.ts
create mode 100644 server/src/main.ts
create mode 100644 server/src/rotation/rotation.module.ts
create mode 100644 server/src/rotation/rotation.service.ts
create mode 100644 server/src/settings/entities/setting.entity.ts
create mode 100644 server/src/settings/settings.controller.ts
create mode 100644 server/src/settings/settings.module.ts
create mode 100644 server/src/subscriptions/entities/subscription.entity.ts
create mode 100644 server/src/subscriptions/subscriptions.controller.ts
create mode 100644 server/src/subscriptions/subscriptions.module.ts
create mode 100644 server/src/subscriptions/subscriptions.service.ts
create mode 100644 server/src/tunnels/entities/tunnel.entity.ts
create mode 100644 server/src/tunnels/ssh.service.ts
create mode 100644 server/src/tunnels/tunnels.controller.ts
create mode 100644 server/src/tunnels/tunnels.module.ts
create mode 100644 server/src/tunnels/tunnels.service.ts
create mode 100644 server/src/xui/xui.module.ts
create mode 100644 server/src/xui/xui.service.ts
create mode 100644 server/test/app.e2e-spec.ts
create mode 100644 server/test/jest-e2e.json
create mode 100644 server/tsconfig.build.json
create mode 100644 server/tsconfig.json
diff --git a/app/.env.example b/app/.env.example
deleted file mode 100644
index 3d17eb8..0000000
--- a/app/.env.example
+++ /dev/null
@@ -1,10 +0,0 @@
-SUB_TOKEN=$SUB_TOKEN
-UI_URL=$UI_URL
-UI_LOGIN=$UI_LOGIN
-UI_PASSWORD=$UI_PASSWORD
-COUNTRY_FLAG=$COUNTRY_FLAG
-NGINX_PORT=$NGINX_PORT
-UI_HOST=$UI_HOST
-UI_PROTO=$UI_PROTO
-ROTATE_INTERVAL=$ROTATE_INTERVAL
-SUB_URL=$SUB_URL
\ No newline at end of file
diff --git a/app/Dockerfile b/app/Dockerfile
deleted file mode 100644
index d50bd86..0000000
--- a/app/Dockerfile
+++ /dev/null
@@ -1,12 +0,0 @@
-FROM node:20-alpine
-
-WORKDIR /app
-COPY package.json ./
-
-RUN npm install --production
-
-COPY index.js .
-COPY rotate.js .
-COPY builders ./builders
-
-CMD ["node", "index.js"]
\ No newline at end of file
diff --git a/app/assets/flags.json b/app/assets/flags.json
deleted file mode 100644
index 4c0a92a..0000000
--- a/app/assets/flags.json
+++ /dev/null
@@ -1,1307 +0,0 @@
-[
- {
- "name": "Ascension Island",
- "code": "AC",
- "emoji": "%F0%9F%87%A6%F0%9F%87%A8"
- },
- {
- "name": "Andorra",
- "code": "AD",
- "emoji": "%F0%9F%87%A6%F0%9F%87%A9"
- },
- {
- "name": "United Arab Emirates",
- "code": "AE",
- "emoji": "%F0%9F%87%A6%F0%9F%87%AA"
- },
- {
- "name": "Afghanistan",
- "code": "AF",
- "emoji": "%F0%9F%87%A6%F0%9F%87%AB"
- },
- {
- "name": "Antigua & Barbuda",
- "code": "AG",
- "emoji": "%F0%9F%87%A6%F0%9F%87%AC"
- },
- {
- "name": "Anguilla",
- "code": "AI",
- "emoji": "%F0%9F%87%A6%F0%9F%87%AE"
- },
- {
- "name": "Albania",
- "code": "AL",
- "emoji": "%F0%9F%87%A6%F0%9F%87%B1"
- },
- {
- "name": "Armenia",
- "code": "AM",
- "emoji": "%F0%9F%87%A6%F0%9F%87%B2"
- },
- {
- "name": "Angola",
- "code": "AO",
- "emoji": "%F0%9F%87%A6%F0%9F%87%B4"
- },
- {
- "name": "Antarctica",
- "code": "AQ",
- "emoji": "%F0%9F%87%A6%F0%9F%87%B6"
- },
- {
- "name": "Argentina",
- "code": "AR",
- "emoji": "%F0%9F%87%A6%F0%9F%87%B7"
- },
- {
- "name": "American Samoa",
- "code": "AS",
- "emoji": "%F0%9F%87%A6%F0%9F%87%B8"
- },
- {
- "name": "Austria",
- "code": "AT",
- "emoji": "%F0%9F%87%A6%F0%9F%87%B9"
- },
- {
- "name": "Australia",
- "code": "AU",
- "emoji": "%F0%9F%87%A6%F0%9F%87%BA"
- },
- {
- "name": "Aruba",
- "code": "AW",
- "emoji": "%F0%9F%87%A6%F0%9F%87%BC"
- },
- {
- "name": "Åland Islands",
- "code": "AX",
- "emoji": "%F0%9F%87%A6%F0%9F%87%BD"
- },
- {
- "name": "Azerbaijan",
- "code": "AZ",
- "emoji": "%F0%9F%87%A6%F0%9F%87%BF"
- },
- {
- "name": "Bosnia & Herzegovina",
- "code": "BA",
- "emoji": "%F0%9F%87%A7%F0%9F%87%A6"
- },
- {
- "name": "Barbados",
- "code": "BB",
- "emoji": "%F0%9F%87%A7%F0%9F%87%A7"
- },
- {
- "name": "Bangladesh",
- "code": "BD",
- "emoji": "%F0%9F%87%A7%F0%9F%87%A9"
- },
- {
- "name": "Belgium",
- "code": "BE",
- "emoji": "%F0%9F%87%A7%F0%9F%87%AA"
- },
- {
- "name": "Burkina Faso",
- "code": "BF",
- "emoji": "%F0%9F%87%A7%F0%9F%87%AB"
- },
- {
- "name": "Bulgaria",
- "code": "BG",
- "emoji": "%F0%9F%87%A7%F0%9F%87%AC"
- },
- {
- "name": "Bahrain",
- "code": "BH",
- "emoji": "%F0%9F%87%A7%F0%9F%87%AD"
- },
- {
- "name": "Burundi",
- "code": "BI",
- "emoji": "%F0%9F%87%A7%F0%9F%87%AE"
- },
- {
- "name": "Benin",
- "code": "BJ",
- "emoji": "%F0%9F%87%A7%F0%9F%87%AF"
- },
- {
- "name": "St. Barthélemy",
- "code": "BL",
- "emoji": "%F0%9F%87%A7%F0%9F%87%B1"
- },
- {
- "name": "Bermuda",
- "code": "BM",
- "emoji": "%F0%9F%87%A7%F0%9F%87%B2"
- },
- {
- "name": "Brunei",
- "code": "BN",
- "emoji": "%F0%9F%87%A7%F0%9F%87%B3"
- },
- {
- "name": "Bolivia",
- "code": "BO",
- "emoji": "%F0%9F%87%A7%F0%9F%87%B4"
- },
- {
- "name": "Caribbean Netherlands",
- "code": "BQ",
- "emoji": "%F0%9F%87%A7%F0%9F%87%B6"
- },
- {
- "name": "Brazil",
- "code": "BR",
- "emoji": "%F0%9F%87%A7%F0%9F%87%B7"
- },
- {
- "name": "Bahamas",
- "code": "BS",
- "emoji": "%F0%9F%87%A7%F0%9F%87%B8"
- },
- {
- "name": "Bhutan",
- "code": "BT",
- "emoji": "%F0%9F%87%A7%F0%9F%87%B9"
- },
- {
- "name": "Bouvet Island",
- "code": "BV",
- "emoji": "%F0%9F%87%A7%F0%9F%87%BB"
- },
- {
- "name": "Botswana",
- "code": "BW",
- "emoji": "%F0%9F%87%A7%F0%9F%87%BC"
- },
- {
- "name": "Belarus",
- "code": "BY",
- "emoji": "%F0%9F%87%A7%F0%9F%87%BE"
- },
- {
- "name": "Belize",
- "code": "BZ",
- "emoji": "%F0%9F%87%A7%F0%9F%87%BF"
- },
- {
- "name": "Canada",
- "code": "CA",
- "emoji": "%F0%9F%87%A8%F0%9F%87%A6"
- },
- {
- "name": "Cocos (Keeling) Islands",
- "code": "CC",
- "emoji": "%F0%9F%87%A8%F0%9F%87%A8"
- },
- {
- "name": "Congo - Kinshasa",
- "code": "CD",
- "emoji": "%F0%9F%87%A8%F0%9F%87%A9"
- },
- {
- "name": "Central African Republic",
- "code": "CF",
- "emoji": "%F0%9F%87%A8%F0%9F%87%AB"
- },
- {
- "name": "Congo - Brazzaville",
- "code": "CG",
- "emoji": "%F0%9F%87%A8%F0%9F%87%AC"
- },
- {
- "name": "Switzerland",
- "code": "CH",
- "emoji": "%F0%9F%87%A8%F0%9F%87%AD"
- },
- {
- "name": "Côte d’Ivoire",
- "code": "CI",
- "emoji": "%F0%9F%87%A8%F0%9F%87%AE"
- },
- {
- "name": "Cook Islands",
- "code": "CK",
- "emoji": "%F0%9F%87%A8%F0%9F%87%B0"
- },
- {
- "name": "Chile",
- "code": "CL",
- "emoji": "%F0%9F%87%A8%F0%9F%87%B1"
- },
- {
- "name": "Cameroon",
- "code": "CM",
- "emoji": "%F0%9F%87%A8%F0%9F%87%B2"
- },
- {
- "name": "China",
- "code": "CN",
- "emoji": "%F0%9F%87%A8%F0%9F%87%B3"
- },
- {
- "name": "Colombia",
- "code": "CO",
- "emoji": "%F0%9F%87%A8%F0%9F%87%B4"
- },
- {
- "name": "Clipperton Island",
- "code": "CP",
- "emoji": "%F0%9F%87%A8%F0%9F%87%B5"
- },
- {
- "name": "Costa Rica",
- "code": "CR",
- "emoji": "%F0%9F%87%A8%F0%9F%87%B7"
- },
- {
- "name": "Cuba",
- "code": "CU",
- "emoji": "%F0%9F%87%A8%F0%9F%87%BA"
- },
- {
- "name": "Cape Verde",
- "code": "CV",
- "emoji": "%F0%9F%87%A8%F0%9F%87%BB"
- },
- {
- "name": "Curaçao",
- "code": "CW",
- "emoji": "%F0%9F%87%A8%F0%9F%87%BC"
- },
- {
- "name": "Christmas Island",
- "code": "CX",
- "emoji": "%F0%9F%87%A8%F0%9F%87%BD"
- },
- {
- "name": "Cyprus",
- "code": "CY",
- "emoji": "%F0%9F%87%A8%F0%9F%87%BE"
- },
- {
- "name": "Czechia",
- "code": "CZ",
- "emoji": "%F0%9F%87%A8%F0%9F%87%BF"
- },
- {
- "name": "Germany",
- "code": "DE",
- "emoji": "%F0%9F%87%A9%F0%9F%87%AA"
- },
- {
- "name": "Diego Garcia",
- "code": "DG",
- "emoji": "%F0%9F%87%A9%F0%9F%87%AC"
- },
- {
- "name": "Djibouti",
- "code": "DJ",
- "emoji": "%F0%9F%87%A9%F0%9F%87%AF"
- },
- {
- "name": "Denmark",
- "code": "DK",
- "emoji": "%F0%9F%87%A9%F0%9F%87%B0"
- },
- {
- "name": "Dominica",
- "code": "DM",
- "emoji": "%F0%9F%87%A9%F0%9F%87%B2"
- },
- {
- "name": "Dominican Republic",
- "code": "DO",
- "emoji": "%F0%9F%87%A9%F0%9F%87%B4"
- },
- {
- "name": "Algeria",
- "code": "DZ",
- "emoji": "%F0%9F%87%A9%F0%9F%87%BF"
- },
- {
- "name": "Ceuta & Melilla",
- "code": "EA",
- "emoji": "%F0%9F%87%AA%F0%9F%87%A6"
- },
- {
- "name": "Ecuador",
- "code": "EC",
- "emoji": "%F0%9F%87%AA%F0%9F%87%A8"
- },
- {
- "name": "Estonia",
- "code": "EE",
- "emoji": "%F0%9F%87%AA%F0%9F%87%AA"
- },
- {
- "name": "Egypt",
- "code": "EG",
- "emoji": "%F0%9F%87%AA%F0%9F%87%AC"
- },
- {
- "name": "Western Sahara",
- "code": "EH",
- "emoji": "%F0%9F%87%AA%F0%9F%87%AD"
- },
- {
- "name": "Eritrea",
- "code": "ER",
- "emoji": "%F0%9F%87%AA%F0%9F%87%B7"
- },
- {
- "name": "Spain",
- "code": "ES",
- "emoji": "%F0%9F%87%AA%F0%9F%87%B8"
- },
- {
- "name": "Ethiopia",
- "code": "ET",
- "emoji": "%F0%9F%87%AA%F0%9F%87%B9"
- },
- {
- "name": "European Union",
- "code": "EU",
- "emoji": "%F0%9F%87%AA%F0%9F%87%BA"
- },
- {
- "name": "Finland",
- "code": "FI",
- "emoji": "%F0%9F%87%AB%F0%9F%87%AE"
- },
- {
- "name": "Fiji",
- "code": "FJ",
- "emoji": "%F0%9F%87%AB%F0%9F%87%AF"
- },
- {
- "name": "Falkland Islands",
- "code": "FK",
- "emoji": "%F0%9F%87%AB%F0%9F%87%B0"
- },
- {
- "name": "Micronesia",
- "code": "FM",
- "emoji": "%F0%9F%87%AB%F0%9F%87%B2"
- },
- {
- "name": "Faroe Islands",
- "code": "FO",
- "emoji": "%F0%9F%87%AB%F0%9F%87%B4"
- },
- {
- "name": "France",
- "code": "FR",
- "emoji": "%F0%9F%87%AB%F0%9F%87%B7"
- },
- {
- "name": "Gabon",
- "code": "GA",
- "emoji": "%F0%9F%87%AC%F0%9F%87%A6"
- },
- {
- "name": "United Kingdom",
- "code": "GB",
- "emoji": "%F0%9F%87%AC%F0%9F%87%A7"
- },
- {
- "name": "Grenada",
- "code": "GD",
- "emoji": "%F0%9F%87%AC%F0%9F%87%A9"
- },
- {
- "name": "Georgia",
- "code": "GE",
- "emoji": "%F0%9F%87%AC%F0%9F%87%AA"
- },
- {
- "name": "French Guiana",
- "code": "GF",
- "emoji": "%F0%9F%87%AC%F0%9F%87%AB"
- },
- {
- "name": "Guernsey",
- "code": "GG",
- "emoji": "%F0%9F%87%AC%F0%9F%87%AC"
- },
- {
- "name": "Ghana",
- "code": "GH",
- "emoji": "%F0%9F%87%AC%F0%9F%87%AD"
- },
- {
- "name": "Gibraltar",
- "code": "GI",
- "emoji": "%F0%9F%87%AC%F0%9F%87%AE"
- },
- {
- "name": "Greenland",
- "code": "GL",
- "emoji": "%F0%9F%87%AC%F0%9F%87%B1"
- },
- {
- "name": "Gambia",
- "code": "GM",
- "emoji": "%F0%9F%87%AC%F0%9F%87%B2"
- },
- {
- "name": "Guinea",
- "code": "GN",
- "emoji": "%F0%9F%87%AC%F0%9F%87%B3"
- },
- {
- "name": "Guadeloupe",
- "code": "GP",
- "emoji": "%F0%9F%87%AC%F0%9F%87%B5"
- },
- {
- "name": "Equatorial Guinea",
- "code": "GQ",
- "emoji": "%F0%9F%87%AC%F0%9F%87%B6"
- },
- {
- "name": "Greece",
- "code": "GR",
- "emoji": "%F0%9F%87%AC%F0%9F%87%B7"
- },
- {
- "name": "South Georgia & South Sandwich Islands",
- "code": "GS",
- "emoji": "%F0%9F%87%AC%F0%9F%87%B8"
- },
- {
- "name": "Guatemala",
- "code": "GT",
- "emoji": "%F0%9F%87%AC%F0%9F%87%B9"
- },
- {
- "name": "Guam",
- "code": "GU",
- "emoji": "%F0%9F%87%AC%F0%9F%87%BA"
- },
- {
- "name": "Guinea-Bissau",
- "code": "GW",
- "emoji": "%F0%9F%87%AC%F0%9F%87%BC"
- },
- {
- "name": "Guyana",
- "code": "GY",
- "emoji": "%F0%9F%87%AC%F0%9F%87%BE"
- },
- {
- "name": "Hong Kong SAR China",
- "code": "HK",
- "emoji": "%F0%9F%87%AD%F0%9F%87%B0"
- },
- {
- "name": "Heard & McDonald Islands",
- "code": "HM",
- "emoji": "%F0%9F%87%AD%F0%9F%87%B2"
- },
- {
- "name": "Honduras",
- "code": "HN",
- "emoji": "%F0%9F%87%AD%F0%9F%87%B3"
- },
- {
- "name": "Croatia",
- "code": "HR",
- "emoji": "%F0%9F%87%AD%F0%9F%87%B7"
- },
- {
- "name": "Haiti",
- "code": "HT",
- "emoji": "%F0%9F%87%AD%F0%9F%87%B9"
- },
- {
- "name": "Hungary",
- "code": "HU",
- "emoji": "%F0%9F%87%AD%F0%9F%87%BA"
- },
- {
- "name": "Canary Islands",
- "code": "IC",
- "emoji": "%F0%9F%87%AE%F0%9F%87%A8"
- },
- {
- "name": "Indonesia",
- "code": "ID",
- "emoji": "%F0%9F%87%AE%F0%9F%87%A9"
- },
- {
- "name": "Ireland",
- "code": "IE",
- "emoji": "%F0%9F%87%AE%F0%9F%87%AA"
- },
- {
- "name": "Israel",
- "code": "IL",
- "emoji": "%F0%9F%87%AE%F0%9F%87%B1"
- },
- {
- "name": "Isle of Man",
- "code": "IM",
- "emoji": "%F0%9F%87%AE%F0%9F%87%B2"
- },
- {
- "name": "India",
- "code": "IN",
- "emoji": "%F0%9F%87%AE%F0%9F%87%B3"
- },
- {
- "name": "British Indian Ocean Territory",
- "code": "IO",
- "emoji": "%F0%9F%87%AE%F0%9F%87%B4"
- },
- {
- "name": "Iraq",
- "code": "IQ",
- "emoji": "%F0%9F%87%AE%F0%9F%87%B6"
- },
- {
- "name": "Iran",
- "code": "IR",
- "emoji": "%F0%9F%87%AE%F0%9F%87%B7"
- },
- {
- "name": "Iceland",
- "code": "IS",
- "emoji": "%F0%9F%87%AE%F0%9F%87%B8"
- },
- {
- "name": "Italy",
- "code": "IT",
- "emoji": "%F0%9F%87%AE%F0%9F%87%B9"
- },
- {
- "name": "Jersey",
- "code": "JE",
- "emoji": "%F0%9F%87%AF%F0%9F%87%AA"
- },
- {
- "name": "Jamaica",
- "code": "JM",
- "emoji": "%F0%9F%87%AF%F0%9F%87%B2"
- },
- {
- "name": "Jordan",
- "code": "JO",
- "emoji": "%F0%9F%87%AF%F0%9F%87%B4"
- },
- {
- "name": "Japan",
- "code": "JP",
- "emoji": "%F0%9F%87%AF%F0%9F%87%B5"
- },
- {
- "name": "Kenya",
- "code": "KE",
- "emoji": "%F0%9F%87%B0%F0%9F%87%AA"
- },
- {
- "name": "Kyrgyzstan",
- "code": "KG",
- "emoji": "%F0%9F%87%B0%F0%9F%87%AC"
- },
- {
- "name": "Cambodia",
- "code": "KH",
- "emoji": "%F0%9F%87%B0%F0%9F%87%AD"
- },
- {
- "name": "Kiribati",
- "code": "KI",
- "emoji": "%F0%9F%87%B0%F0%9F%87%AE"
- },
- {
- "name": "Comoros",
- "code": "KM",
- "emoji": "%F0%9F%87%B0%F0%9F%87%B2"
- },
- {
- "name": "St. Kitts & Nevis",
- "code": "KN",
- "emoji": "%F0%9F%87%B0%F0%9F%87%B3"
- },
- {
- "name": "North Korea",
- "code": "KP",
- "emoji": "%F0%9F%87%B0%F0%9F%87%B5"
- },
- {
- "name": "South Korea",
- "code": "KR",
- "emoji": "%F0%9F%87%B0%F0%9F%87%B7"
- },
- {
- "name": "Kuwait",
- "code": "KW",
- "emoji": "%F0%9F%87%B0%F0%9F%87%BC"
- },
- {
- "name": "Cayman Islands",
- "code": "KY",
- "emoji": "%F0%9F%87%B0%F0%9F%87%BE"
- },
- {
- "name": "Kazakhstan",
- "code": "KZ",
- "emoji": "%F0%9F%87%B0%F0%9F%87%BF"
- },
- {
- "name": "Laos",
- "code": "LA",
- "emoji": "%F0%9F%87%B1%F0%9F%87%A6"
- },
- {
- "name": "Lebanon",
- "code": "LB",
- "emoji": "%F0%9F%87%B1%F0%9F%87%A7"
- },
- {
- "name": "St. Lucia",
- "code": "LC",
- "emoji": "%F0%9F%87%B1%F0%9F%87%A8"
- },
- {
- "name": "Liechtenstein",
- "code": "LI",
- "emoji": "%F0%9F%87%B1%F0%9F%87%AE"
- },
- {
- "name": "Sri Lanka",
- "code": "LK",
- "emoji": "%F0%9F%87%B1%F0%9F%87%B0"
- },
- {
- "name": "Liberia",
- "code": "LR",
- "emoji": "%F0%9F%87%B1%F0%9F%87%B7"
- },
- {
- "name": "Lesotho",
- "code": "LS",
- "emoji": "%F0%9F%87%B1%F0%9F%87%B8"
- },
- {
- "name": "Lithuania",
- "code": "LT",
- "emoji": "%F0%9F%87%B1%F0%9F%87%B9"
- },
- {
- "name": "Luxembourg",
- "code": "LU",
- "emoji": "%F0%9F%87%B1%F0%9F%87%BA"
- },
- {
- "name": "Latvia",
- "code": "LV",
- "emoji": "%F0%9F%87%B1%F0%9F%87%BB"
- },
- {
- "name": "Libya",
- "code": "LY",
- "emoji": "%F0%9F%87%B1%F0%9F%87%BE"
- },
- {
- "name": "Morocco",
- "code": "MA",
- "emoji": "%F0%9F%87%B2%F0%9F%87%A6"
- },
- {
- "name": "Monaco",
- "code": "MC",
- "emoji": "%F0%9F%87%B2%F0%9F%87%A8"
- },
- {
- "name": "Moldova",
- "code": "MD",
- "emoji": "%F0%9F%87%B2%F0%9F%87%A9"
- },
- {
- "name": "Montenegro",
- "code": "ME",
- "emoji": "%F0%9F%87%B2%F0%9F%87%AA"
- },
- {
- "name": "St. Martin",
- "code": "MF",
- "emoji": "%F0%9F%87%B2%F0%9F%87%AB"
- },
- {
- "name": "Madagascar",
- "code": "MG",
- "emoji": "%F0%9F%87%B2%F0%9F%87%AC"
- },
- {
- "name": "Marshall Islands",
- "code": "MH",
- "emoji": "%F0%9F%87%B2%F0%9F%87%AD"
- },
- {
- "name": "North Macedonia",
- "code": "MK",
- "emoji": "%F0%9F%87%B2%F0%9F%87%B0"
- },
- {
- "name": "Mali",
- "code": "ML",
- "emoji": "%F0%9F%87%B2%F0%9F%87%B1"
- },
- {
- "name": "Myanmar (Burma)",
- "code": "MM",
- "emoji": "%F0%9F%87%B2%F0%9F%87%B2"
- },
- {
- "name": "Mongolia",
- "code": "MN",
- "emoji": "%F0%9F%87%B2%F0%9F%87%B3"
- },
- {
- "name": "Macao SAR China",
- "code": "MO",
- "emoji": "%F0%9F%87%B2%F0%9F%87%B4"
- },
- {
- "name": "Northern Mariana Islands",
- "code": "MP",
- "emoji": "%F0%9F%87%B2%F0%9F%87%B5"
- },
- {
- "name": "Martinique",
- "code": "MQ",
- "emoji": "%F0%9F%87%B2%F0%9F%87%B6"
- },
- {
- "name": "Mauritania",
- "code": "MR",
- "emoji": "%F0%9F%87%B2%F0%9F%87%B7"
- },
- {
- "name": "Montserrat",
- "code": "MS",
- "emoji": "%F0%9F%87%B2%F0%9F%87%B8"
- },
- {
- "name": "Malta",
- "code": "MT",
- "emoji": "%F0%9F%87%B2%F0%9F%87%B9"
- },
- {
- "name": "Mauritius",
- "code": "MU",
- "emoji": "%F0%9F%87%B2%F0%9F%87%BA"
- },
- {
- "name": "Maldives",
- "code": "MV",
- "emoji": "%F0%9F%87%B2%F0%9F%87%BB"
- },
- {
- "name": "Malawi",
- "code": "MW",
- "emoji": "%F0%9F%87%B2%F0%9F%87%BC"
- },
- {
- "name": "Mexico",
- "code": "MX",
- "emoji": "%F0%9F%87%B2%F0%9F%87%BD"
- },
- {
- "name": "Malaysia",
- "code": "MY",
- "emoji": "%F0%9F%87%B2%F0%9F%87%BE"
- },
- {
- "name": "Mozambique",
- "code": "MZ",
- "emoji": "%F0%9F%87%B2%F0%9F%87%BF"
- },
- {
- "name": "Namibia",
- "code": "NA",
- "emoji": "%F0%9F%87%B3%F0%9F%87%A6"
- },
- {
- "name": "New Caledonia",
- "code": "NC",
- "emoji": "%F0%9F%87%B3%F0%9F%87%A8"
- },
- {
- "name": "Niger",
- "code": "NE",
- "emoji": "%F0%9F%87%B3%F0%9F%87%AA"
- },
- {
- "name": "Norfolk Island",
- "code": "NF",
- "emoji": "%F0%9F%87%B3%F0%9F%87%AB"
- },
- {
- "name": "Nigeria",
- "code": "NG",
- "emoji": "%F0%9F%87%B3%F0%9F%87%AC"
- },
- {
- "name": "Nicaragua",
- "code": "NI",
- "emoji": "%F0%9F%87%B3%F0%9F%87%AE"
- },
- {
- "name": "Netherlands",
- "code": "NL",
- "emoji": "%F0%9F%87%B3%F0%9F%87%B1"
- },
- {
- "name": "Norway",
- "code": "NO",
- "emoji": "%F0%9F%87%B3%F0%9F%87%B4"
- },
- {
- "name": "Nepal",
- "code": "NP",
- "emoji": "%F0%9F%87%B3%F0%9F%87%B5"
- },
- {
- "name": "Nauru",
- "code": "NR",
- "emoji": "%F0%9F%87%B3%F0%9F%87%B7"
- },
- {
- "name": "Niue",
- "code": "NU",
- "emoji": "%F0%9F%87%B3%F0%9F%87%BA"
- },
- {
- "name": "New Zealand",
- "code": "NZ",
- "emoji": "%F0%9F%87%B3%F0%9F%87%BF"
- },
- {
- "name": "Oman",
- "code": "OM",
- "emoji": "%F0%9F%87%B4%F0%9F%87%B2"
- },
- {
- "name": "Panama",
- "code": "PA",
- "emoji": "%F0%9F%87%B5%F0%9F%87%A6"
- },
- {
- "name": "Peru",
- "code": "PE",
- "emoji": "%F0%9F%87%B5%F0%9F%87%AA"
- },
- {
- "name": "French Polynesia",
- "code": "PF",
- "emoji": "%F0%9F%87%B5%F0%9F%87%AB"
- },
- {
- "name": "Papua New Guinea",
- "code": "PG",
- "emoji": "%F0%9F%87%B5%F0%9F%87%AC"
- },
- {
- "name": "Philippines",
- "code": "PH",
- "emoji": "%F0%9F%87%B5%F0%9F%87%AD"
- },
- {
- "name": "Pakistan",
- "code": "PK",
- "emoji": "%F0%9F%87%B5%F0%9F%87%B0"
- },
- {
- "name": "Poland",
- "code": "PL",
- "emoji": "%F0%9F%87%B5%F0%9F%87%B1"
- },
- {
- "name": "St. Pierre & Miquelon",
- "code": "PM",
- "emoji": "%F0%9F%87%B5%F0%9F%87%B2"
- },
- {
- "name": "Pitcairn Islands",
- "code": "PN",
- "emoji": "%F0%9F%87%B5%F0%9F%87%B3"
- },
- {
- "name": "Puerto Rico",
- "code": "PR",
- "emoji": "%F0%9F%87%B5%F0%9F%87%B7"
- },
- {
- "name": "Palestinian Territories",
- "code": "PS",
- "emoji": "%F0%9F%87%B5%F0%9F%87%B8"
- },
- {
- "name": "Portugal",
- "code": "PT",
- "emoji": "%F0%9F%87%B5%F0%9F%87%B9"
- },
- {
- "name": "Palau",
- "code": "PW",
- "emoji": "%F0%9F%87%B5%F0%9F%87%BC"
- },
- {
- "name": "Paraguay",
- "code": "PY",
- "emoji": "%F0%9F%87%B5%F0%9F%87%BE"
- },
- {
- "name": "Qatar",
- "code": "QA",
- "emoji": "%F0%9F%87%B6%F0%9F%87%A6"
- },
- {
- "name": "Réunion",
- "code": "RE",
- "emoji": "%F0%9F%87%B7%F0%9F%87%AA"
- },
- {
- "name": "Romania",
- "code": "RO",
- "emoji": "%F0%9F%87%B7%F0%9F%87%B4"
- },
- {
- "name": "Serbia",
- "code": "RS",
- "emoji": "%F0%9F%87%B7%F0%9F%87%B8"
- },
- {
- "name": "Russia",
- "code": "RU",
- "emoji": "%F0%9F%87%B7%F0%9F%87%BA"
- },
- {
- "name": "Rwanda",
- "code": "RW",
- "emoji": "%F0%9F%87%B7%F0%9F%87%BC"
- },
- {
- "name": "Saudi Arabia",
- "code": "SA",
- "emoji": "%F0%9F%87%B8%F0%9F%87%A6"
- },
- {
- "name": "Solomon Islands",
- "code": "SB",
- "emoji": "%F0%9F%87%B8%F0%9F%87%A7"
- },
- {
- "name": "Seychelles",
- "code": "SC",
- "emoji": "%F0%9F%87%B8%F0%9F%87%A8"
- },
- {
- "name": "Sudan",
- "code": "SD",
- "emoji": "%F0%9F%87%B8%F0%9F%87%A9"
- },
- {
- "name": "Sweden",
- "code": "SE",
- "emoji": "%F0%9F%87%B8%F0%9F%87%AA"
- },
- {
- "name": "Singapore",
- "code": "SG",
- "emoji": "%F0%9F%87%B8%F0%9F%87%AC"
- },
- {
- "name": "St. Helena",
- "code": "SH",
- "emoji": "%F0%9F%87%B8%F0%9F%87%AD"
- },
- {
- "name": "Slovenia",
- "code": "SI",
- "emoji": "%F0%9F%87%B8%F0%9F%87%AE"
- },
- {
- "name": "Svalbard & Jan Mayen",
- "code": "SJ",
- "emoji": "%F0%9F%87%B8%F0%9F%87%AF"
- },
- {
- "name": "Slovakia",
- "code": "SK",
- "emoji": "%F0%9F%87%B8%F0%9F%87%B0"
- },
- {
- "name": "Sierra Leone",
- "code": "SL",
- "emoji": "%F0%9F%87%B8%F0%9F%87%B1"
- },
- {
- "name": "San Marino",
- "code": "SM",
- "emoji": "%F0%9F%87%B8%F0%9F%87%B2"
- },
- {
- "name": "Senegal",
- "code": "SN",
- "emoji": "%F0%9F%87%B8%F0%9F%87%B3"
- },
- {
- "name": "Somalia",
- "code": "SO",
- "emoji": "%F0%9F%87%B8%F0%9F%87%B4"
- },
- {
- "name": "Suriname",
- "code": "SR",
- "emoji": "%F0%9F%87%B8%F0%9F%87%B7"
- },
- {
- "name": "South Sudan",
- "code": "SS",
- "emoji": "%F0%9F%87%B8%F0%9F%87%B8"
- },
- {
- "name": "São Tomé & Príncipe",
- "code": "ST",
- "emoji": "%F0%9F%87%B8%F0%9F%87%B9"
- },
- {
- "name": "El Salvador",
- "code": "SV",
- "emoji": "%F0%9F%87%B8%F0%9F%87%BB"
- },
- {
- "name": "Sint Maarten",
- "code": "SX",
- "emoji": "%F0%9F%87%B8%F0%9F%87%BD"
- },
- {
- "name": "Syria",
- "code": "SY",
- "emoji": "%F0%9F%87%B8%F0%9F%87%BE"
- },
- {
- "name": "Eswatini",
- "code": "SZ",
- "emoji": "%F0%9F%87%B8%F0%9F%87%BF"
- },
- {
- "name": "Tristan da Cunha",
- "code": "TA",
- "emoji": "%F0%9F%87%B9%F0%9F%87%A6"
- },
- {
- "name": "Turks & Caicos Islands",
- "code": "TC",
- "emoji": "%F0%9F%87%B9%F0%9F%87%A8"
- },
- {
- "name": "Chad",
- "code": "TD",
- "emoji": "%F0%9F%87%B9%F0%9F%87%A9"
- },
- {
- "name": "French Southern Territories",
- "code": "TF",
- "emoji": "%F0%9F%87%B9%F0%9F%87%AB"
- },
- {
- "name": "Togo",
- "code": "TG",
- "emoji": "%F0%9F%87%B9%F0%9F%87%AC"
- },
- {
- "name": "Thailand",
- "code": "TH",
- "emoji": "%F0%9F%87%B9%F0%9F%87%AD"
- },
- {
- "name": "Tajikistan",
- "code": "TJ",
- "emoji": "%F0%9F%87%B9%F0%9F%87%AF"
- },
- {
- "name": "Tokelau",
- "code": "TK",
- "emoji": "%F0%9F%87%B9%F0%9F%87%B0"
- },
- {
- "name": "Timor-Leste",
- "code": "TL",
- "emoji": "%F0%9F%87%B9%F0%9F%87%B1"
- },
- {
- "name": "Turkmenistan",
- "code": "TM",
- "emoji": "%F0%9F%87%B9%F0%9F%87%B2"
- },
- {
- "name": "Tunisia",
- "code": "TN",
- "emoji": "%F0%9F%87%B9%F0%9F%87%B3"
- },
- {
- "name": "Tonga",
- "code": "TO",
- "emoji": "%F0%9F%87%B9%F0%9F%87%B4"
- },
- {
- "name": "Turkey",
- "code": "TR",
- "emoji": "%F0%9F%87%B9%F0%9F%87%B7"
- },
- {
- "name": "Trinidad & Tobago",
- "code": "TT",
- "emoji": "%F0%9F%87%B9%F0%9F%87%B9"
- },
- {
- "name": "Tuvalu",
- "code": "TV",
- "emoji": "%F0%9F%87%B9%F0%9F%87%BB"
- },
- {
- "name": "Taiwan",
- "code": "TW",
- "emoji": "%F0%9F%87%B9%F0%9F%87%BC"
- },
- {
- "name": "Tanzania",
- "code": "TZ",
- "emoji": "%F0%9F%87%B9%F0%9F%87%BF"
- },
- {
- "name": "Ukraine",
- "code": "UA",
- "emoji": "%F0%9F%87%BA%F0%9F%87%A6"
- },
- {
- "name": "Uganda",
- "code": "UG",
- "emoji": "%F0%9F%87%BA%F0%9F%87%AC"
- },
- {
- "name": "U.S. Outlying Islands",
- "code": "UM",
- "emoji": "%F0%9F%87%BA%F0%9F%87%B2"
- },
- {
- "name": "United Nations",
- "code": "UN",
- "emoji": "%F0%9F%87%BA%F0%9F%87%B3"
- },
- {
- "name": "United States",
- "code": "US",
- "emoji": "%F0%9F%87%BA%F0%9F%87%B8"
- },
- {
- "name": "Uruguay",
- "code": "UY",
- "emoji": "%F0%9F%87%BA%F0%9F%87%BE"
- },
- {
- "name": "Uzbekistan",
- "code": "UZ",
- "emoji": "%F0%9F%87%BA%F0%9F%87%BF"
- },
- {
- "name": "Vatican City",
- "code": "VA",
- "emoji": "%F0%9F%87%BB%F0%9F%87%A6"
- },
- {
- "name": "St. Vincent & Grenadines",
- "code": "VC",
- "emoji": "%F0%9F%87%BB%F0%9F%87%A8"
- },
- {
- "name": "Venezuela",
- "code": "VE",
- "emoji": "%F0%9F%87%BB%F0%9F%87%AA"
- },
- {
- "name": "British Virgin Islands",
- "code": "VG",
- "emoji": "%F0%9F%87%BB%F0%9F%87%AC"
- },
- {
- "name": "U.S. Virgin Islands",
- "code": "VI",
- "emoji": "%F0%9F%87%BB%F0%9F%87%AE"
- },
- {
- "name": "Vietnam",
- "code": "VN",
- "emoji": "%F0%9F%87%BB%F0%9F%87%B3"
- },
- {
- "name": "Vanuatu",
- "code": "VU",
- "emoji": "%F0%9F%87%BB%F0%9F%87%BA"
- },
- {
- "name": "Wallis & Futuna",
- "code": "WF",
- "emoji": "%F0%9F%87%BC%F0%9F%87%AB"
- },
- {
- "name": "Samoa",
- "code": "WS",
- "emoji": "%F0%9F%87%BC%F0%9F%87%B8"
- },
- {
- "name": "Kosovo",
- "code": "XK",
- "emoji": "%F0%9F%87%BD%F0%9F%87%B0"
- },
- {
- "name": "Yemen",
- "code": "YE",
- "emoji": "%F0%9F%87%BE%F0%9F%87%AA"
- },
- {
- "name": "Mayotte",
- "code": "YT",
- "emoji": "%F0%9F%87%BE%F0%9F%87%B9"
- },
- {
- "name": "South Africa",
- "code": "ZA",
- "emoji": "%F0%9F%87%BF%F0%9F%87%A6"
- },
- {
- "name": "Zambia",
- "code": "ZM",
- "emoji": "%F0%9F%87%BF%F0%9F%87%B2"
- },
- {
- "name": "Zimbabwe",
- "code": "ZW",
- "emoji": "%F0%9F%87%BF%F0%9F%87%BC"
- },
- {
- "name": "England",
- "code": "ENGLAND",
- "emoji": "%F0%9F%8F%B4%F3%A0%81%A7%F3%A0%81%A2%F3%A0%81%A5%F3%A0%81%AE%F3%A0%81%A7%F3%A0%81%BF"
- },
- {
- "name": "Scotland",
- "code": "SCOTLAND",
- "emoji": "%F0%9F%8F%B4%F3%A0%81%A7%F3%A0%81%A2%F3%A0%81%B3%F3%A0%81%A3%F3%A0%81%B4%F3%A0%81%BF"
- },
- {
- "name": "Wales",
- "code": "WALES",
- "emoji": "%F0%9F%8F%B4%F3%A0%81%A7%F3%A0%81%A2%F3%A0%81%B7%F3%A0%81%AC%F3%A0%81%B3%F3%A0%81%BF"
- }
-]
\ No newline at end of file
diff --git a/app/builders/buildInboundLink.js b/app/builders/buildInboundLink.js
deleted file mode 100644
index b3f26b0..0000000
--- a/app/builders/buildInboundLink.js
+++ /dev/null
@@ -1,162 +0,0 @@
-const flag = process.env.COUNTRY_FLAG ?? '%F0%9F%92%AF';
-
-export function buildInboundLink(inbound, domain, idOrPass) {
- let link = "";
-
- switch (inbound.protocol) {
- case "vless": {
- link = buildVlessLink(inbound, domain, idOrPass);
- break;
- }
-
- case "vmess": {
- link = buildVmessLink(inbound, domain, idOrPass);
- break;
- }
-
- case "shadowsocks":
- link = buildSsLink(inbound, domain, idOrPass);
- break;
-
- case "trojan":
- link = buildTrojanLink(inbound, domain, idOrPass);
- break;
- }
-
- return link;
-}
-
-function buildVlessLink(inbound, domain, uuid) {
- const stream = JSON.parse(inbound.streamSettings);
- const settings = JSON.parse(inbound.settings);
-
- const network = stream.network;
- const security = stream.security || "none";
-
- const params = new URLSearchParams();
-
- // Базовые параметры
- params.set("type", network);
- params.set("encryption", "none");
- params.set("security", security);
-
- /**
- * ===== REALITY =====
- */
- if (security === "reality") {
- const r = stream.realitySettings;
-
- params.set("pbk", r.settings.publicKey);
- params.set("fp", r.settings.fingerprint || "random");
- params.set("sni", r.serverNames?.[0] || "");
- params.set("sid", r.shortIds?.[0] || "");
- params.set("spx", '/');
-
- // TCP Reality flow
- if (network === "tcp") {
- const client = settings.clients?.[0];
- if (client?.flow) {
- params.set("flow", client.flow);
- }
- }
-
- // XHTTP Reality
- if (network === "xhttp") {
- const x = stream.xhttpSettings || {};
- params.set("path", x.path || "/");
- params.set("host", x.host || r.serverNames?.[0]);
- params.set("mode", x.mode || "auto");
- }
-
- // gRPC Reality
- if (network === "grpc") {
- const g = stream.grpcSettings || {};
- params.set("serviceName", g.serviceName || "grpc");
- params.set("authority", g.authority || r.serverNames?.[0]);
- }
- }
-
- /**
- * ===== WS NONE =====
- */
- if (network === "ws") {
- const ws = stream.wsSettings || {};
- params.set("path", ws.path || "/");
- if (ws.headers?.Host) {
- params.set("host", ws.headers.Host);
- }
- }
-
- return (
- `vless://${uuid}@${domain}:${inbound.port}` +
- `?${params.toString()}` +
- `#${flag}%20${encodeURIComponent(inbound.remark)}`
- );
-}
-
-function buildVmessLink(inbound, domain, uuid) {
- const stream = JSON.parse(inbound.streamSettings);
-
- const vmessObj = {
- add: domain,
- aid: '',
- alpn: "",
- fp: "",
- host: "",
- id: uuid,
- net: stream.network || "tcp",
- path: "/",
- port: inbound.port,
- ps: decodeURIComponent(flag) + ' ' + inbound.remark,
- scy: "",
- sni: "",
- tls: stream.security || "none",
- type: "none",
- v: "2"
- };
-
- const base64 = Buffer
- .from(JSON.stringify(vmessObj), "utf8")
- .toString("base64");
-
- return `vmess://${base64}`;
-}
-
-function buildSsLink(inbound, domain) {
- const settings = JSON.parse(inbound.settings);
-
- const method = settings.method;
- const serverPassword = settings.password;
- const clientPassword = settings.clients[0].password;
-
- // method:serverPassword:clientPassword
- const userInfo = `${method}:${serverPassword}:${clientPassword}`;
-
- const base64 = Buffer
- .from(userInfo, "utf8")
- .toString("base64");
-
- return `ss://${base64}@${domain}:${inbound.port}?type=tcp#${flag}%20${inbound.remark}`;
-}
-
-function buildTrojanLink(inbound, domain, password) {
- const stream = JSON.parse(inbound.streamSettings);
- const reality = stream.realitySettings;
-
- const pbk = reality.settings.publicKey;
- const sni = reality.serverNames?.[0] || domain;
- const sid = reality.shortIds?.[0] || "";
- const spx = '%2F';
-
- return (
- `trojan://${password}@${domain}:${inbound.port}` +
- `?type=tcp` +
- `&security=reality` +
- `&pbk=${pbk}` +
- `&fp=random` +
- `&sni=${sni}` +
- `&sid=${sid}` +
- `&spx=${spx}` +
- `#${flag}%20${inbound.remark}`
- );
-}
\ No newline at end of file
diff --git a/app/builders/buildShadowsocksTcp.js b/app/builders/buildShadowsocksTcp.js
deleted file mode 100644
index cf0fd16..0000000
--- a/app/builders/buildShadowsocksTcp.js
+++ /dev/null
@@ -1,43 +0,0 @@
-import crypto from "crypto";
-
-export function buildShadowsocksTcp({ port, uuid }) {
- return {
- enable: true,
- port,
- protocol: "shadowsocks",
- remark: "shadowsocks-tcp",
- settings: JSON.stringify({
- clients: [{
- id: "",
- flow: "",
- email: uuid,
- password: crypto.randomBytes(32).toString("base64"),
- enable: true,
- limitIp: 0,
- totalGB: 0,
- expiryTime: 0,
- tgId: "",
- subId: "",
- reset: 0
- }],
- ivCheck: false,
- method: "2022-blake3-aes-256-gcm",
- network: "tcp",
- password: crypto.randomBytes(32).toString("base64")
- }),
- streamSettings: JSON.stringify({
- network: "tcp",
- security: "none",
- tcpSettings: {
- acceptProxyProtocol: false,
- header: { type: "none" }
- }
- }),
- sniffing: JSON.stringify({
- enabled: false,
- destOverride: ["http", "tls", "quic", "fakedns"],
- metadataOnly: false,
- routeOnly: false
- })
- };
-}
\ No newline at end of file
diff --git a/app/builders/buildTrojanRealityTcp.js b/app/builders/buildTrojanRealityTcp.js
deleted file mode 100644
index 0c74d5d..0000000
--- a/app/builders/buildTrojanRealityTcp.js
+++ /dev/null
@@ -1,65 +0,0 @@
-import crypto from "crypto";
-
-export function buildTrojanRealityTcp({ port, uuid, domain, keys }) {
- return {
- enable: true,
- port,
- protocol: "trojan",
- remark: "trojan-reality-tcp",
- settings: JSON.stringify({
- clients: [{
- id: uuid,
- email: uuid,
- password: crypto.randomBytes(8).toString("hex"),
- enable: true,
- flow: "",
- limitIp: 0,
- totalGB: 0,
- expiryTime: 0,
- tgId: "",
- subId: "",
- reset: 0
- }],
- fallbacks: []
- }),
- streamSettings: JSON.stringify({
- network: "tcp",
- security: "reality",
- externalProxy: [],
- realitySettings: {
- show: false,
- xver: 0,
- target: `${domain}:443`,
- dest: `${domain}:443`,
- serverNames: [domain],
- privateKey: keys.privateKey,
- shortIds: [
- crypto.randomBytes(4).toString("hex"),
- crypto.randomBytes(3).toString("hex"),
- crypto.randomBytes(8).toString("hex"),
- crypto.randomBytes(2).toString("hex"),
- crypto.randomBytes(2).toString("hex"),
- crypto.randomBytes(2).toString("hex"),
- crypto.randomBytes(2).toString("hex"),
- crypto.randomBytes(4).toString("hex")
- ],
- settings: {
- publicKey: keys.publicKey,
- fingerprint: "random",
- serverName: "",
- spiderX: "/"
- }
- },
- tcpSettings: {
- acceptProxyProtocol: false,
- header: { type: "none" }
- }
- }),
- sniffing: JSON.stringify({
- enabled: false,
- destOverride: ["http", "tls", "quic", "fakedns"],
- metadataOnly: false,
- routeOnly: false
- })
- };
-}
\ No newline at end of file
diff --git a/app/builders/buildVlessRealityGrpc.js b/app/builders/buildVlessRealityGrpc.js
deleted file mode 100644
index 9faa640..0000000
--- a/app/builders/buildVlessRealityGrpc.js
+++ /dev/null
@@ -1,67 +0,0 @@
-import crypto from "crypto";
-
-export function buildVlessRealityGrpc({ port, uuid, domain, keys }) {
- return {
- enable: true,
- port,
- protocol: "vless",
- remark: "vless-reality-grpc",
- settings: JSON.stringify({
- clients: [{
- id: uuid,
- email: uuid,
- enable: true,
- flow: "",
- limitIp: 0,
- totalGB: 0,
- expiryTime: 0,
- tgId: "",
- subId: "",
- reset: 0
- }],
- decryption: "none",
- encryption: "none",
- fallbacks: []
- }),
- streamSettings: JSON.stringify({
- network: "grpc",
- security: "reality",
- externalProxy: [],
- realitySettings: {
- show: false,
- xver: 0,
- target: `${domain}:443`,
- dest: `${domain}:443`,
- serverNames: [domain],
- privateKey: keys.privateKey,
- shortIds: [
- crypto.randomBytes(4).toString("hex"),
- crypto.randomBytes(3).toString("hex"),
- crypto.randomBytes(8).toString("hex"),
- crypto.randomBytes(2).toString("hex"),
- crypto.randomBytes(2).toString("hex"),
- crypto.randomBytes(2).toString("hex"),
- crypto.randomBytes(2).toString("hex"),
- crypto.randomBytes(4).toString("hex")
- ],
- settings: {
- publicKey: keys.publicKey,
- fingerprint: "random",
- serverName: "",
- spiderX: "/"
- }
- },
- grpcSettings: {
- serviceName: "myservice",
- authority: domain,
- multiMode: false,
- }
- }),
- sniffing: JSON.stringify({
- enabled: false,
- destOverride: ["http", "tls", "quic", "fakedns"],
- metadataOnly: false,
- routeOnly: false
- })
- };
-}
\ No newline at end of file
diff --git a/app/builders/buildVlessRealityTcp.js b/app/builders/buildVlessRealityTcp.js
deleted file mode 100644
index a6e9f3c..0000000
--- a/app/builders/buildVlessRealityTcp.js
+++ /dev/null
@@ -1,66 +0,0 @@
-import crypto from "crypto";
-
-export function buildVlessRealityTcp({ port, uuid, domain, keys }) {
- return {
- enable: true,
- port,
- protocol: "vless",
- remark: "vless-reality-tcp",
- settings: JSON.stringify({
- clients: [{
- id: uuid,
- flow: "xtls-rprx-vision",
- email: uuid,
- enable: true,
- limitIp: 0,
- totalGB: 0,
- expiryTime: 0,
- tgId: "",
- subId: "",
- reset: 0
- }],
- decryption: "none",
- encryption: "none",
- fallbacks: []
- }),
- streamSettings: JSON.stringify({
- network: "tcp",
- security: "reality",
- externalProxy: [],
- realitySettings: {
- show: false,
- xver: 0,
- target: `${domain}:443`,
- dest: `${domain}:443`,
- serverNames: [domain],
- privateKey: keys.privateKey,
- shortIds: [
- crypto.randomBytes(4).toString("hex"),
- crypto.randomBytes(3).toString("hex"),
- crypto.randomBytes(8).toString("hex"),
- crypto.randomBytes(2).toString("hex"),
- crypto.randomBytes(2).toString("hex"),
- crypto.randomBytes(2).toString("hex"),
- crypto.randomBytes(2).toString("hex"),
- crypto.randomBytes(4).toString("hex")
- ],
- settings: {
- publicKey: keys.publicKey,
- fingerprint: "random",
- serverName: "",
- spiderX: "/"
- }
- },
- tcpSettings: {
- acceptProxyProtocol: false,
- header: { type: "none" }
- }
- }),
- sniffing: JSON.stringify({
- enabled: false,
- destOverride: ["http", "tls", "quic", "fakedns"],
- metadataOnly: false,
- routeOnly: false
- })
- };
-}
\ No newline at end of file
diff --git a/app/builders/buildVlessRealityXhttp.js b/app/builders/buildVlessRealityXhttp.js
deleted file mode 100644
index 4dae865..0000000
--- a/app/builders/buildVlessRealityXhttp.js
+++ /dev/null
@@ -1,72 +0,0 @@
-import crypto from "crypto";
-
-export function buildVlessRealityXhttp({ port, uuid, domain, keys }) {
- return {
- enable: true,
- port,
- protocol: "vless",
- remark: "vless-reality-xhttp",
- settings: JSON.stringify({
- clients: [{
- id: uuid,
- email: uuid,
- enable: true,
- flow: "",
- limitIp: 0,
- totalGB: 0,
- expiryTime: 0,
- tgId: "",
- subId: "",
- reset: 0
- }],
- decryption: "none",
- encryption: "none",
- fallbacks: []
- }),
- streamSettings: JSON.stringify({
- network: "xhttp",
- security: "reality",
- externalProxy: [],
- realitySettings: {
- show: false,
- xver: 0,
- target: `${domain}:443`,
- dest: `${domain}:443`,
- serverNames: [domain],
- privateKey: keys.privateKey,
- shortIds: [
- crypto.randomBytes(4).toString("hex"),
- crypto.randomBytes(3).toString("hex"),
- crypto.randomBytes(8).toString("hex"),
- crypto.randomBytes(2).toString("hex"),
- crypto.randomBytes(2).toString("hex"),
- crypto.randomBytes(2).toString("hex"),
- crypto.randomBytes(2).toString("hex"),
- crypto.randomBytes(4).toString("hex")
- ],
- settings: {
- publicKey: keys.publicKey,
- fingerprint: "random",
- serverName: "",
- spiderX: "/"
- }
- },
- xhttpSettings: {
- host: domain,
- path: "/",
- mode: "auto",
- noSSEHeader: false,
- scMaxBufferedPosts: 30,
- scMaxEachPostBytes: "1000000",
- scStreamUpServerSecs: "20-80",
- xPaddingBytes: "100-1000"
- }
- }),
- sniffing: JSON.stringify({
- enabled: false,
- destOverride: ["http", "tls", "quic", "fakedns"],
- metadataOnly: false,
- routeOnly: false
- })
- };
-}
\ No newline at end of file
diff --git a/app/builders/buildVlessWs.js b/app/builders/buildVlessWs.js
deleted file mode 100644
index 4178cd6..0000000
--- a/app/builders/buildVlessWs.js
+++ /dev/null
@@ -1,42 +0,0 @@
-export function buildVlessWs({ port, uuid, domain }) {
- return {
- enable: true,
- port,
- protocol: "vless",
- remark: "vless-reality-ws",
- settings: JSON.stringify({
- clients: [{
- id: uuid,
- email: uuid,
- enable: true,
- flow: "",
- limitIp: 0,
- totalGB: 0,
- expiryTime: 0,
- tgId: "",
- subId: "",
- reset: 0
- }],
- decryption: "none",
- encryption: "none",
- fallbacks: []
- }),
- streamSettings: JSON.stringify({
- network: "ws",
- security: "none",
- externalProxy: [],
- wsSettings: {
- host: domain,
- path: "/",
- acceptProxyProtocol: false,
- heartbeatPeriod: 0,
- }
- }),
- sniffing: JSON.stringify({
- enabled: false,
- destOverride: ["http", "tls", "quic", "fakedns"],
- metadataOnly: false,
- routeOnly: false
- })
- };
-}
\ No newline at end of file
diff --git a/app/builders/buildVmessTcp.js b/app/builders/buildVmessTcp.js
deleted file mode 100644
index c138586..0000000
--- a/app/builders/buildVmessTcp.js
+++ /dev/null
@@ -1,37 +0,0 @@
-export function buildVmessTcp({ port, uuid }) {
- return {
- enable: true,
- port,
- protocol: "vmess",
- remark: "vmess-tcp",
- settings: JSON.stringify({
- clients: [{
- id: uuid,
- flow: "",
- email: uuid,
- enable: true,
- limitIp: 0,
- totalGB: 0,
- expiryTime: 0,
- tgId: "",
- subId: "0",
- alterId: "0",
- reset: 0
- }],
- }),
- streamSettings: JSON.stringify({
- network: "tcp",
- security: "none",
- tcpSettings: {
- acceptProxyProtocol: false,
- header: { type: "none" }
- }
- }),
- sniffing: JSON.stringify({
- enabled: false,
- destOverride: ["http", "tls", "quic", "fakedns"],
- metadataOnly: false,
- routeOnly: false
- })
- };
-}
\ No newline at end of file
diff --git a/app/docker-compose.example.yml b/app/docker-compose.example.yml
deleted file mode 100644
index 89f7014..0000000
--- a/app/docker-compose.example.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-services:
- node:
- build: ./app
- env_file: .env
- volumes:
- - ./subscriptions:/subscriptions
- - ./whitelist.txt:/app/whitelist.txt:ro
- restart: unless-stopped
-
- nginx:
- image: nginx:alpine
- restart: unless-stopped
- depends_on: [node]
- ports:
- - "80:80"
- volumes:
- - ./nginx.conf:/etc/nginx/nginx.conf:ro
- - ./subscriptions:/subscriptions
\ No newline at end of file
diff --git a/app/index.js b/app/index.js
deleted file mode 100644
index 510e2ed..0000000
--- a/app/index.js
+++ /dev/null
@@ -1,229 +0,0 @@
-import axios from "axios";
-import https from "https";
-import fs from "fs";
-import net from "net";
-import { buildVlessRealityTcp } from "./builders/buildVlessRealityTcp.js";
-import { buildVlessRealityXhttp } from "./builders/buildVlessRealityXhttp.js";
-import { buildTrojanRealityTcp } from "./builders/buildTrojanRealityTcp.js";
-import { buildShadowsocksTcp } from "./builders/buildShadowsocksTcp.js";
-import { buildVmessTcp } from "./builders/buildVmessTcp.js";
-import { buildVlessRealityGrpc } from "./builders/buildVlessRealityGrpc.js";
-import { buildVlessWs } from "./builders/buildVlessWs.js";
-import { buildInboundLink } from "./builders/buildInboundLink.js";
-
-const { UI_URL, UI_LOGIN, UI_PASSWORD, UI_HOST } = process.env;
-const SUB_FILE = "/subscriptions/list.txt";
-const LAST_INBOUNDS = '/subscriptions/latestInbounds.json';
-
-const cookieJar = {};
-const agent = new https.Agent({
- rejectUnauthorized: false
-});
-const api = axios.create({ baseURL: UI_URL, timeout: 15000, withCredentials: true, httpsAgent: agent });
-
-api.interceptors.request.use(config => {
- if (cookieJar.value) config.headers['Cookie'] = cookieJar.value;
- return config;
-});
-
-const WHITELIST_FILE = "/app/whitelist.txt";
-const WHITELIST_REPO_URL = "https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/whitelist.txt";
-
-// Helper functions
-async function updateWhitelist() {
- try {
- const res = await axios.get(WHITELIST_REPO_URL, { timeout: 10000 });
- fs.writeFileSync(WHITELIST_FILE, res.data, "utf8");
- console.log("✔ whitelist.txt обновлен из репозитория");
- } catch (err) {
- console.warn("⚠ Не удалось обновить whitelist.txt, будет использоваться локальный файл:", err.message);
- }
-}
-
-function loadWhitelist() {
- let fileToUse = WHITELIST_FILE;
-
- if (fs.existsSync("/app/my_whitelist.txt")) {
- console.log('Найден кастомный whitelist: /app/my_whitelist.txt. Используется он.');
- fileToUse = "/app/my_whitelist.txt";
- } else {
- console.log(`Кастомный whitelist не найден. Используется дефолтный: ${WHITELIST_FILE}`);
- if (!fs.existsSync(WHITELIST_FILE)) {
- throw new Error("Дефолтный whitelist.txt не найден");
- }
- }
-
- return fs.readFileSync(fileToUse, "utf8")
- .split("\n")
- .map(v => v.trim())
- .filter(Boolean);
-}
-
-function pickDomain(list) {
- return list[Math.floor(Math.random() * list.length)];
-}
-
-async function isPortFree(port) {
- return new Promise(resolve => {
- const s = net.createServer()
- .once("error", () => resolve(false))
- .once("listening", () => {
- s.close();
- resolve(true);
- })
- .listen(port, "0.0.0.0");
- });
-}
-
-async function getFreePort(used) {
- while (true) {
- const p = Math.floor(Math.random() * (60000 - 10000)) + 10000;
- if (used.has(p)) continue;
- if (await isPortFree(p)) {
- used.add(p);
- return p;
- }
- }
-}
-
-async function generateRealityKeys() {
- try {
- const res = await api.get("/panel/api/server/getNewX25519Cert");
- if (res.data?.success && res.data?.obj) {
- return {
- privateKey: res.data.obj.privateKey,
- publicKey: res.data.obj.publicKey
- };
- }
- throw new Error("Invalid key response");
- } catch (e) {
- console.error("Failed to get Reality keys:", e.message);
- throw e;
- }
-}
-
-async function uuid() {
- try {
- const res = await api.get("/panel/api/server/getNewUUID");
- if (res.data?.success && res.data?.obj?.uuid) {
- return res.data.obj.uuid;
- }
- throw new Error("Invalid UUID response");
- } catch (e) {
- console.error("Failed to get UUID:", e.message);
- throw e;
- }
-}
-
-// API 3x-ui
-async function login() {
- try {
- const res = await api.post("/login", { username: UI_LOGIN, password: UI_PASSWORD });
- if (res.headers['set-cookie']) cookieJar.value = res.headers['set-cookie'].join('; ');
- console.log("Login success");
- } catch (e) { console.error("Login failed:", e.message); throw e; }
-}
-
-// async function getInbounds() {
-// try {
-// const res = await api.get("/panel/api/inbounds/list");
-// return res.status === 200 ? res.data.obj || [] : [];
-// } catch (e) { console.error("Get inbounds failed:", e.message); return []; }
-// }
-
-async function deleteInbounds() {
- try {
- const data = fs.readFileSync(LAST_INBOUNDS, 'utf-8');
- const oldIds = JSON.parse(data);
-
- if (Array.isArray(oldIds) && oldIds.length > 0) {
- console.log(`Удаляем старые инбаунды: ${oldIds.length} шт.`);
- for (const id of oldIds) {
- try {
- await deleteInbound(id);
- } catch (err) {
- console.error(`Ошибка при удалении инбаунда ${id}:`, err.message);
- }
- }
- }
- } catch (error) {
- console.log("Старых ID не найдено, пропускаем удаление.");
- }
-}
-
-async function deleteInbound(id) {
- try { await api.post(`/panel/api/inbounds/del/${id}`); } catch { }
-}
-
-async function addInbound(config) {
- try {
- const res = await api.post("/panel/api/inbounds/add", config);
- return res.data?.obj?.id || null;
- } catch (e) {
- console.error("Add inbound failed:", e.message);
- return null;
- }
-}
-
-// Main rotation of inbound entries
-async function rotate() {
- await login();
-
- await updateWhitelist();
- const whitelist = loadWhitelist();
- const usedPorts = new Set();
- const subs = [];
-
- await deleteInbounds();
-
- const builders = [
- async (d) => buildVlessRealityTcp({ port: await isPortFree(8443) ? 8443 : await getFreePort(usedPorts), uuid: await uuid(), domain: d, keys: await generateRealityKeys() }),
- async (d) => buildVlessRealityXhttp({ port: await isPortFree(443) ? 443 : await getFreePort(usedPorts), uuid: await uuid(), domain: d, keys: await generateRealityKeys() }),
- async (d) => buildVlessRealityGrpc({ port: await getFreePort(usedPorts), uuid: await uuid(), domain: d, keys: await generateRealityKeys() }),
- async (d) => buildVlessWs({ port: await getFreePort(usedPorts), uuid: await uuid(), domain: d }),
- async (d) => buildVlessRealityTcp({ port: await getFreePort(usedPorts), uuid: await uuid(), domain: d, keys: await generateRealityKeys() }),
- async (d) => buildVlessRealityTcp({ port: await getFreePort(usedPorts), uuid: await uuid(), domain: d, keys: await generateRealityKeys() }),
- async (d) => buildVlessRealityTcp({ port: await getFreePort(usedPorts), uuid: await uuid(), domain: d, keys: await generateRealityKeys() }),
- async (d) => buildVmessTcp({ port: await getFreePort(usedPorts), uuid: await uuid() }),
- async (d) => buildShadowsocksTcp({ port: await getFreePort(usedPorts), uuid: await uuid() }),
- async (d) => buildTrojanRealityTcp({ port: await getFreePort(usedPorts), uuid: await uuid(), domain: d, keys: await generateRealityKeys() }),
- ];
-
- const inboundIds = [];
-
- for (const b of builders) {
- const domain = pickDomain(whitelist);
- const inbound = await b(domain);
- const idOrPass = inbound.settings ? JSON.parse(inbound.settings).clients?.[0]?.id || JSON.parse(inbound.settings).clients?.[0]?.password : "";
-
- // Build the link depending on the protocol
- const link = buildInboundLink(inbound, UI_HOST, idOrPass);
- if (link) subs.push(link);
- const id = await addInbound(inbound);
- inboundIds.push(id);
- }
-
- if (inboundIds.length > 0) {
- fs.writeFileSync(LAST_INBOUNDS, JSON.stringify(inboundIds, null, 2));
- console.log(`Новые ID (${inboundIds.length} шт.) сохранены в ${LAST_INBOUNDS}`);
- }
-
- fs.writeFileSync(SUB_FILE, subs.join("\n") + "\n", "utf8");
- console.log("✔ 10 inbound created, подписка обновлена");
-}
-
-// Initial run
-rotate();
-
-let interval = parseInt(process.env.ROTATE_INTERVAL, 10);
-
-if (isNaN(interval) || interval < 10) {
- console.warn('⚠ Интервал некорректен или меньше 10 минут. Используется значение по умолчанию 30 минут.');
- interval = 30;
-}
-
-const intervalMs = interval * 60 * 1000;
-
-console.log(`✔ Интервал ротации установлен: ${interval} минут`);
-
-setInterval(rotate, intervalMs);
\ No newline at end of file
diff --git a/app/nginx.example.conf b/app/nginx.example.conf
deleted file mode 100644
index fd75cc9..0000000
--- a/app/nginx.example.conf
+++ /dev/null
@@ -1,18 +0,0 @@
-events {}
-http {
- server {
- listen $NGINX_PORT;
- server_name $UI_HOST;
-
- location = /bus/$SUB_TOKEN {
- alias /subscriptions/list.txt;
- default_type text/plain;
- add_header Subscription-Userinfo "upload=0; download=0; total=109951162777600; expire=0" always;
- add_header Access-Control-Allow-Origin *;
- }
-
- location / {
- return 404;
- }
- }
-}
\ No newline at end of file
diff --git a/app/package.json b/app/package.json
deleted file mode 100644
index a14da41..0000000
--- a/app/package.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "type": "module",
- "dependencies": {
- "axios": "^1.13.2",
- "node-cron": "^4.2.1"
- }
-}
\ No newline at end of file
diff --git a/app/rotate.js b/app/rotate.js
deleted file mode 100644
index 7f583de..0000000
--- a/app/rotate.js
+++ /dev/null
@@ -1,216 +0,0 @@
-import axios from "axios";
-import https from "https";
-import fs from "fs";
-import net from "net";
-import { buildVlessRealityTcp } from "./builders/buildVlessRealityTcp.js";
-import { buildVlessRealityXhttp } from "./builders/buildVlessRealityXhttp.js";
-import { buildTrojanRealityTcp } from "./builders/buildTrojanRealityTcp.js";
-import { buildShadowsocksTcp } from "./builders/buildShadowsocksTcp.js";
-import { buildVmessTcp } from "./builders/buildVmessTcp.js";
-import { buildVlessRealityGrpc } from "./builders/buildVlessRealityGrpc.js";
-import { buildVlessWs } from "./builders/buildVlessWs.js";
-import { buildInboundLink } from "./builders/buildInboundLink.js";
-
-const { UI_URL, UI_LOGIN, UI_PASSWORD, UI_HOST } = process.env;
-const SUB_FILE = "/subscriptions/list.txt";
-const LAST_INBOUNDS = '/subscriptions/latestInbounds.json';
-
-const cookieJar = {};
-const agent = new https.Agent({
- rejectUnauthorized: false
-});
-const api = axios.create({ baseURL: UI_URL, timeout: 15000, withCredentials: true, httpsAgent: agent });
-
-api.interceptors.request.use(config => {
- if (cookieJar.value) config.headers['Cookie'] = cookieJar.value;
- return config;
-});
-
-const WHITELIST_FILE = "/app/whitelist.txt";
-const WHITELIST_REPO_URL = "https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/whitelist.txt";
-
-// Helper functions
-async function updateWhitelist() {
- try {
- const res = await axios.get(WHITELIST_REPO_URL, { timeout: 10000 });
- fs.writeFileSync(WHITELIST_FILE, res.data, "utf8");
- console.log("✔ whitelist.txt обновлен из репозитория");
- } catch (err) {
- console.warn("⚠ Не удалось обновить whitelist.txt, будет использоваться локальный файл:", err.message);
- }
-}
-
-function loadWhitelist() {
- let fileToUse = WHITELIST_FILE;
-
- if (fs.existsSync("/app/my_whitelist.txt")) {
- console.log('Найден кастомный whitelist: /app/my_whitelist.txt. Используется он.');
- fileToUse = "/app/my_whitelist.txt";
- } else {
- console.log(`Кастомный whitelist не найден. Используется дефолтный: ${WHITELIST_FILE}`);
- if (!fs.existsSync(WHITELIST_FILE)) {
- throw new Error("Дефолтный whitelist.txt не найден");
- }
- }
-
- return fs.readFileSync(fileToUse, "utf8")
- .split("\n")
- .map(v => v.trim())
- .filter(Boolean);
-}
-
-function pickDomain(list) {
- return list[Math.floor(Math.random() * list.length)];
-}
-
-async function isPortFree(port) {
- return new Promise(resolve => {
- const s = net.createServer()
- .once("error", () => resolve(false))
- .once("listening", () => {
- s.close();
- resolve(true);
- })
- .listen(port, "0.0.0.0");
- });
-}
-
-async function getFreePort(used) {
- while (true) {
- const p = Math.floor(Math.random() * (60000 - 10000)) + 10000;
- if (used.has(p)) continue;
- if (await isPortFree(p)) {
- used.add(p);
- return p;
- }
- }
-}
-
-async function generateRealityKeys() {
- try {
- const res = await api.get("/panel/api/server/getNewX25519Cert");
- if (res.data?.success && res.data?.obj) {
- return {
- privateKey: res.data.obj.privateKey,
- publicKey: res.data.obj.publicKey
- };
- }
- throw new Error("Invalid key response");
- } catch (e) {
- console.error("Failed to get Reality keys:", e.message);
- throw e;
- }
-}
-
-async function uuid() {
- try {
- const res = await api.get("/panel/api/server/getNewUUID");
- if (res.data?.success && res.data?.obj?.uuid) {
- return res.data.obj.uuid;
- }
- throw new Error("Invalid UUID response");
- } catch (e) {
- console.error("Failed to get UUID:", e.message);
- throw e;
- }
-}
-
-// API 3x-ui
-async function login() {
- try {
- const res = await api.post("/login", { username: UI_LOGIN, password: UI_PASSWORD });
- if (res.headers['set-cookie']) cookieJar.value = res.headers['set-cookie'].join('; ');
- console.log("Login success");
- } catch (e) { console.error("Login failed:", e.message); throw e; }
-}
-
-// async function getInbounds() {
-// try {
-// const res = await api.get("/panel/api/inbounds/list");
-// return res.status === 200 ? res.data.obj || [] : [];
-// } catch (e) { console.error("Get inbounds failed:", e.message); return []; }
-// }
-
-async function deleteInbounds() {
- try {
- const data = fs.readFileSync(LAST_INBOUNDS, 'utf-8');
- const oldIds = JSON.parse(data);
-
- if (Array.isArray(oldIds) && oldIds.length > 0) {
- console.log(`Удаляем старые инбаунды: ${oldIds.length} шт.`);
- for (const id of oldIds) {
- try {
- await deleteInbound(id);
- } catch (err) {
- console.error(`Ошибка при удалении инбаунда ${id}:`, err.message);
- }
- }
- }
- } catch (error) {
- console.log("Старых ID не найдено, пропускаем удаление.");
- }
-}
-
-async function deleteInbound(id) {
- try { await api.post(`/panel/api/inbounds/del/${id}`); } catch { }
-}
-
-async function addInbound(config) {
- try {
- const res = await api.post("/panel/api/inbounds/add", config);
- return res.data?.obj?.id || null;
- } catch (e) {
- console.error("Add inbound failed:", e.message);
- return null;
- }
-}
-
-// Main rotation of inbound entries
-async function rotate() {
- await login();
-
- await updateWhitelist();
- const whitelist = loadWhitelist();
- const usedPorts = new Set();
- const subs = [];
-
- await deleteInbounds();
-
- const builders = [
- async (d) => buildVlessRealityTcp({ port: await isPortFree(8443) ? 8443 : await getFreePort(usedPorts), uuid: await uuid(), domain: d, keys: await generateRealityKeys() }),
- async (d) => buildVlessRealityXhttp({ port: await isPortFree(443) ? 443 : await getFreePort(usedPorts), uuid: await uuid(), domain: d, keys: await generateRealityKeys() }),
- async (d) => buildVlessRealityGrpc({ port: await getFreePort(usedPorts), uuid: await uuid(), domain: d, keys: await generateRealityKeys() }),
- async (d) => buildVlessWs({ port: await getFreePort(usedPorts), uuid: await uuid(), domain: d }),
- async (d) => buildVlessRealityTcp({ port: await getFreePort(usedPorts), uuid: await uuid(), domain: d, keys: await generateRealityKeys() }),
- async (d) => buildVlessRealityTcp({ port: await getFreePort(usedPorts), uuid: await uuid(), domain: d, keys: await generateRealityKeys() }),
- async (d) => buildVlessRealityTcp({ port: await getFreePort(usedPorts), uuid: await uuid(), domain: d, keys: await generateRealityKeys() }),
- async (d) => buildVmessTcp({ port: await getFreePort(usedPorts), uuid: await uuid() }),
- async (d) => buildShadowsocksTcp({ port: await getFreePort(usedPorts), uuid: await uuid() }),
- async (d) => buildTrojanRealityTcp({ port: await getFreePort(usedPorts), uuid: await uuid(), domain: d, keys: await generateRealityKeys() }),
- ];
-
- const inboundIds = [];
-
- for (const b of builders) {
- const domain = pickDomain(whitelist);
- const inbound = await b(domain);
- const idOrPass = inbound.settings ? JSON.parse(inbound.settings).clients?.[0]?.id || JSON.parse(inbound.settings).clients?.[0]?.password : "";
-
- // Build the link depending on the protocol
- const link = buildInboundLink(inbound, UI_HOST, idOrPass);
- if (link) subs.push(link);
- const id = await addInbound(inbound);
- inboundIds.push(id);
- }
-
- if (inboundIds.length > 0) {
- fs.writeFileSync(LAST_INBOUNDS, JSON.stringify(inboundIds, null, 2));
- console.log(`Новые ID (${inboundIds.length} шт.) сохранены в ${LAST_INBOUNDS}`);
- }
-
- fs.writeFileSync(SUB_FILE, subs.join("\n") + "\n", "utf8");
- console.log("✔ 10 inbound created, подписка обновлена");
-}
-
-// Initial run
-rotate();
\ No newline at end of file
diff --git a/client/.gitignore b/client/.gitignore
new file mode 100644
index 0000000..a547bf3
--- /dev/null
+++ b/client/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/client/README.md b/client/README.md
new file mode 100644
index 0000000..d2e7761
--- /dev/null
+++ b/client/README.md
@@ -0,0 +1,73 @@
+# React + TypeScript + Vite
+
+This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
+
+Currently, two official plugins are available:
+
+- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh
+- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
+
+## React Compiler
+
+The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation).
+
+## Expanding the ESLint configuration
+
+If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
+
+```js
+export default defineConfig([
+ globalIgnores(['dist']),
+ {
+ files: ['**/*.{ts,tsx}'],
+ extends: [
+ // Other configs...
+
+ // Remove tseslint.configs.recommended and replace with this
+ tseslint.configs.recommendedTypeChecked,
+ // Alternatively, use this for stricter rules
+ tseslint.configs.strictTypeChecked,
+ // Optionally, add this for stylistic rules
+ tseslint.configs.stylisticTypeChecked,
+
+ // Other configs...
+ ],
+ languageOptions: {
+ parserOptions: {
+ project: ['./tsconfig.node.json', './tsconfig.app.json'],
+ tsconfigRootDir: import.meta.dirname,
+ },
+ // other options...
+ },
+ },
+])
+```
+
+You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
+
+```js
+// eslint.config.js
+import reactX from 'eslint-plugin-react-x'
+import reactDom from 'eslint-plugin-react-dom'
+
+export default defineConfig([
+ globalIgnores(['dist']),
+ {
+ files: ['**/*.{ts,tsx}'],
+ extends: [
+ // Other configs...
+ // Enable lint rules for React
+ reactX.configs['recommended-typescript'],
+ // Enable lint rules for React DOM
+ reactDom.configs.recommended,
+ ],
+ languageOptions: {
+ parserOptions: {
+ project: ['./tsconfig.node.json', './tsconfig.app.json'],
+ tsconfigRootDir: import.meta.dirname,
+ },
+ // other options...
+ },
+ },
+])
+```
diff --git a/client/eslint.config.js b/client/eslint.config.js
new file mode 100644
index 0000000..5e6b472
--- /dev/null
+++ b/client/eslint.config.js
@@ -0,0 +1,23 @@
+import js from '@eslint/js'
+import globals from 'globals'
+import reactHooks from 'eslint-plugin-react-hooks'
+import reactRefresh from 'eslint-plugin-react-refresh'
+import tseslint from 'typescript-eslint'
+import { defineConfig, globalIgnores } from 'eslint/config'
+
+export default defineConfig([
+ globalIgnores(['dist']),
+ {
+ files: ['**/*.{ts,tsx}'],
+ extends: [
+ js.configs.recommended,
+ tseslint.configs.recommended,
+ reactHooks.configs.flat.recommended,
+ reactRefresh.configs.vite,
+ ],
+ languageOptions: {
+ ecmaVersion: 2020,
+ globals: globals.browser,
+ },
+ },
+])
diff --git a/client/index.html b/client/index.html
new file mode 100644
index 0000000..c34b7e7
--- /dev/null
+++ b/client/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ 3DP-MANAGER
+
+
+
+
+
+
diff --git a/client/package-lock.json b/client/package-lock.json
new file mode 100644
index 0000000..f00c714
--- /dev/null
+++ b/client/package-lock.json
@@ -0,0 +1,4290 @@
+{
+ "name": "client",
+ "version": "0.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "client",
+ "version": "0.0.0",
+ "dependencies": {
+ "@emotion/react": "^11.14.0",
+ "@emotion/styled": "^11.14.1",
+ "@fontsource/inter": "^5.2.8",
+ "@mui/icons-material": "^7.3.7",
+ "@mui/material": "^7.3.7",
+ "axios": "^1.13.2",
+ "react": "^19.2.0",
+ "react-dom": "^19.2.0",
+ "react-qr-code": "^2.0.18",
+ "react-router-dom": "^7.12.0"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.39.1",
+ "@types/node": "^24.10.1",
+ "@types/react": "^19.2.5",
+ "@types/react-dom": "^19.2.3",
+ "@vitejs/plugin-react": "^5.1.1",
+ "eslint": "^9.39.1",
+ "eslint-plugin-react-hooks": "^7.0.1",
+ "eslint-plugin-react-refresh": "^0.4.24",
+ "globals": "^16.5.0",
+ "typescript": "~5.9.3",
+ "typescript-eslint": "^8.46.4",
+ "vite": "^7.2.4"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz",
+ "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.6.tgz",
+ "integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz",
+ "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.28.6",
+ "@babel/generator": "^7.28.6",
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-module-transforms": "^7.28.6",
+ "@babel/helpers": "^7.28.6",
+ "@babel/parser": "^7.28.6",
+ "@babel/template": "^7.28.6",
+ "@babel/traverse": "^7.28.6",
+ "@babel/types": "^7.28.6",
+ "@jridgewell/remapping": "^2.3.5",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz",
+ "integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.28.6",
+ "@babel/types": "^7.28.6",
+ "@jridgewell/gen-mapping": "^0.3.12",
+ "@jridgewell/trace-mapping": "^0.3.28",
+ "jsesc": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
+ "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/compat-data": "^7.28.6",
+ "@babel/helper-validator-option": "^7.27.1",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-globals": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
+ "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
+ "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.28.6",
+ "@babel/types": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
+ "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.28.6",
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "@babel/traverse": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz",
+ "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
+ "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz",
+ "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz",
+ "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.28.6"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-self": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz",
+ "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-source": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz",
+ "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz",
+ "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
+ "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.28.6",
+ "@babel/parser": "^7.28.6",
+ "@babel/types": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz",
+ "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.28.6",
+ "@babel/generator": "^7.28.6",
+ "@babel/helper-globals": "^7.28.0",
+ "@babel/parser": "^7.28.6",
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.28.6",
+ "debug": "^4.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz",
+ "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.28.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@emotion/babel-plugin": {
+ "version": "11.13.5",
+ "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz",
+ "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.16.7",
+ "@babel/runtime": "^7.18.3",
+ "@emotion/hash": "^0.9.2",
+ "@emotion/memoize": "^0.9.0",
+ "@emotion/serialize": "^1.3.3",
+ "babel-plugin-macros": "^3.1.0",
+ "convert-source-map": "^1.5.0",
+ "escape-string-regexp": "^4.0.0",
+ "find-root": "^1.1.0",
+ "source-map": "^0.5.7",
+ "stylis": "4.2.0"
+ }
+ },
+ "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/cache": {
+ "version": "11.14.0",
+ "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz",
+ "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==",
+ "license": "MIT",
+ "dependencies": {
+ "@emotion/memoize": "^0.9.0",
+ "@emotion/sheet": "^1.4.0",
+ "@emotion/utils": "^1.4.2",
+ "@emotion/weak-memoize": "^0.4.0",
+ "stylis": "4.2.0"
+ }
+ },
+ "node_modules/@emotion/hash": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz",
+ "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/is-prop-valid": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.4.0.tgz",
+ "integrity": "sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==",
+ "license": "MIT",
+ "dependencies": {
+ "@emotion/memoize": "^0.9.0"
+ }
+ },
+ "node_modules/@emotion/memoize": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz",
+ "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/react": {
+ "version": "11.14.0",
+ "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz",
+ "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.18.3",
+ "@emotion/babel-plugin": "^11.13.5",
+ "@emotion/cache": "^11.14.0",
+ "@emotion/serialize": "^1.3.3",
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0",
+ "@emotion/utils": "^1.4.2",
+ "@emotion/weak-memoize": "^0.4.0",
+ "hoist-non-react-statics": "^3.3.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@emotion/serialize": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz",
+ "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==",
+ "license": "MIT",
+ "dependencies": {
+ "@emotion/hash": "^0.9.2",
+ "@emotion/memoize": "^0.9.0",
+ "@emotion/unitless": "^0.10.0",
+ "@emotion/utils": "^1.4.2",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@emotion/sheet": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz",
+ "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/styled": {
+ "version": "11.14.1",
+ "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz",
+ "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.18.3",
+ "@emotion/babel-plugin": "^11.13.5",
+ "@emotion/is-prop-valid": "^1.3.0",
+ "@emotion/serialize": "^1.3.3",
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0",
+ "@emotion/utils": "^1.4.2"
+ },
+ "peerDependencies": {
+ "@emotion/react": "^11.0.0-rc.0",
+ "react": ">=16.8.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@emotion/unitless": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz",
+ "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/use-insertion-effect-with-fallbacks": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz",
+ "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ }
+ },
+ "node_modules/@emotion/utils": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz",
+ "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/weak-memoize": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz",
+ "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==",
+ "license": "MIT"
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz",
+ "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz",
+ "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz",
+ "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz",
+ "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz",
+ "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz",
+ "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz",
+ "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz",
+ "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz",
+ "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz",
+ "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz",
+ "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz",
+ "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz",
+ "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz",
+ "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz",
+ "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz",
+ "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz",
+ "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz",
+ "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz",
+ "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz",
+ "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz",
+ "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz",
+ "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz",
+ "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz",
+ "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz",
+ "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz",
+ "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
+ "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
+ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/config-array": {
+ "version": "0.21.1",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz",
+ "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/object-schema": "^2.1.7",
+ "debug": "^4.3.1",
+ "minimatch": "^3.1.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/config-helpers": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
+ "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.17.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/core": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz",
+ "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/json-schema": "^7.0.15"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz",
+ "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.1",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "9.39.2",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz",
+ "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ }
+ },
+ "node_modules/@eslint/object-schema": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz",
+ "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/plugin-kit": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz",
+ "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.17.0",
+ "levn": "^0.4.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@fontsource/inter": {
+ "version": "5.2.8",
+ "resolved": "https://registry.npmjs.org/@fontsource/inter/-/inter-5.2.8.tgz",
+ "integrity": "sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg==",
+ "license": "OFL-1.1",
+ "funding": {
+ "url": "https://github.com/sponsors/ayuhito"
+ }
+ },
+ "node_modules/@humanfs/core": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
+ "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node": {
+ "version": "0.16.7",
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz",
+ "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanfs/core": "^0.19.1",
+ "@humanwhocodes/retry": "^0.4.0"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/retry": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
+ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@mui/core-downloads-tracker": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.3.7.tgz",
+ "integrity": "sha512-8jWwS6FweMkpyRkrJooamUGe1CQfO1yJ+lM43IyUJbrhHW/ObES+6ry4vfGi8EKaldHL3t3BG1bcLcERuJPcjg==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ }
+ },
+ "node_modules/@mui/icons-material": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.3.7.tgz",
+ "integrity": "sha512-3Q+ulAqG+A1+R4ebgoIs7AccaJhIGy+Xi/9OnvX376jQ6wcy+rz4geDGrxQxCGzdjOQr4Z3NgyFSZCz4T999lA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.28.4"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@mui/material": "^7.3.7",
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/material": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.3.7.tgz",
+ "integrity": "sha512-6bdIxqzeOtBAj2wAsfhWCYyMKPLkRO9u/2o5yexcL0C3APqyy91iGSWgT3H7hg+zR2XgE61+WAu12wXPON8b6A==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.28.4",
+ "@mui/core-downloads-tracker": "^7.3.7",
+ "@mui/system": "^7.3.7",
+ "@mui/types": "^7.4.10",
+ "@mui/utils": "^7.3.7",
+ "@popperjs/core": "^2.11.8",
+ "@types/react-transition-group": "^4.4.12",
+ "clsx": "^2.1.1",
+ "csstype": "^3.2.3",
+ "prop-types": "^15.8.1",
+ "react-is": "^19.2.3",
+ "react-transition-group": "^4.4.5"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@emotion/react": "^11.5.0",
+ "@emotion/styled": "^11.3.0",
+ "@mui/material-pigment-css": "^7.3.7",
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/react": {
+ "optional": true
+ },
+ "@emotion/styled": {
+ "optional": true
+ },
+ "@mui/material-pigment-css": {
+ "optional": true
+ },
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/private-theming": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.3.7.tgz",
+ "integrity": "sha512-w7r1+CYhG0syCAQUWAuV5zSaU2/67WA9JXUderdb7DzCIJdp/5RmJv6L85wRjgKCMsxFF0Kfn0kPgPbPgw/jdw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.28.4",
+ "@mui/utils": "^7.3.7",
+ "prop-types": "^15.8.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/styled-engine": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.3.7.tgz",
+ "integrity": "sha512-y/QkNXv6cF6dZ5APztd/dFWfQ6LHKPx3skyYO38YhQD4+Cxd6sFAL3Z38WMSSC8LQz145Mpp3CcLrSCLKPwYAg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.28.4",
+ "@emotion/cache": "^11.14.0",
+ "@emotion/serialize": "^1.3.3",
+ "@emotion/sheet": "^1.4.0",
+ "csstype": "^3.2.3",
+ "prop-types": "^15.8.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@emotion/react": "^11.4.1",
+ "@emotion/styled": "^11.3.0",
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/react": {
+ "optional": true
+ },
+ "@emotion/styled": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/system": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.3.7.tgz",
+ "integrity": "sha512-DovL3k+FBRKnhmatzUMyO5bKkhMLlQ9L7Qw5qHrre3m8zCZmE+31NDVBFfqrbrA7sq681qaEIHdkWD5nmiAjyQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.28.4",
+ "@mui/private-theming": "^7.3.7",
+ "@mui/styled-engine": "^7.3.7",
+ "@mui/types": "^7.4.10",
+ "@mui/utils": "^7.3.7",
+ "clsx": "^2.1.1",
+ "csstype": "^3.2.3",
+ "prop-types": "^15.8.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@emotion/react": "^11.5.0",
+ "@emotion/styled": "^11.3.0",
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/react": {
+ "optional": true
+ },
+ "@emotion/styled": {
+ "optional": true
+ },
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/types": {
+ "version": "7.4.10",
+ "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.10.tgz",
+ "integrity": "sha512-0+4mSjknSu218GW3isRqoxKRTOrTLd/vHi/7UC4+wZcUrOAqD9kRk7UQRL1mcrzqRoe7s3UT6rsRpbLkW5mHpQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.28.4"
+ },
+ "peerDependencies": {
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/utils": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.3.7.tgz",
+ "integrity": "sha512-+YjnjMRnyeTkWnspzoxRdiSOgkrcpTikhNPoxOZW0APXx+urHtUoXJ9lbtCZRCA5a4dg5gSbd19alL1DvRs5fg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.28.4",
+ "@mui/types": "^7.4.10",
+ "@types/prop-types": "^15.7.15",
+ "clsx": "^2.1.1",
+ "prop-types": "^15.8.1",
+ "react-is": "^19.2.3"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@popperjs/core": {
+ "version": "2.11.8",
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
+ "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/popperjs"
+ }
+ },
+ "node_modules/@rolldown/pluginutils": {
+ "version": "1.0.0-beta.53",
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz",
+ "integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.2.tgz",
+ "integrity": "sha512-21J6xzayjy3O6NdnlO6aXi/urvSRjm6nCI6+nF6ra2YofKruGixN9kfT+dt55HVNwfDmpDHJcaS3JuP/boNnlA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.2.tgz",
+ "integrity": "sha512-eXBg7ibkNUZ+sTwbFiDKou0BAckeV6kIigK7y5Ko4mB/5A1KLhuzEKovsmfvsL8mQorkoincMFGnQuIT92SKqA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.2.tgz",
+ "integrity": "sha512-UCbaTklREjrc5U47ypLulAgg4njaqfOVLU18VrCrI+6E5MQjuG0lSWaqLlAJwsD7NpFV249XgB0Bi37Zh5Sz4g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.2.tgz",
+ "integrity": "sha512-dP67MA0cCMHFT2g5XyjtpVOtp7y4UyUxN3dhLdt11at5cPKnSm4lY+EhwNvDXIMzAMIo2KU+mc9wxaAQJTn7sQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.2.tgz",
+ "integrity": "sha512-WDUPLUwfYV9G1yxNRJdXcvISW15mpvod1Wv3ok+Ws93w1HjIVmCIFxsG2DquO+3usMNCpJQ0wqO+3GhFdl6Fow==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.2.tgz",
+ "integrity": "sha512-Ng95wtHVEulRwn7R0tMrlUuiLVL/HXA8Lt/MYVpy88+s5ikpntzZba1qEulTuPnPIZuOPcW9wNEiqvZxZmgmqQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.2.tgz",
+ "integrity": "sha512-AEXMESUDWWGqD6LwO/HkqCZgUE1VCJ1OhbvYGsfqX2Y6w5quSXuyoy/Fg3nRqiwro+cJYFxiw5v4kB2ZDLhxrw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.2.tgz",
+ "integrity": "sha512-ZV7EljjBDwBBBSv570VWj0hiNTdHt9uGznDtznBB4Caj3ch5rgD4I2K1GQrtbvJ/QiB+663lLgOdcADMNVC29Q==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.2.tgz",
+ "integrity": "sha512-uvjwc8NtQVPAJtq4Tt7Q49FOodjfbf6NpqXyW/rjXoV+iZ3EJAHLNAnKT5UJBc6ffQVgmXTUL2ifYiLABlGFqA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.2.tgz",
+ "integrity": "sha512-s3KoWVNnye9mm/2WpOZ3JeUiediUVw6AvY/H7jNA6qgKA2V2aM25lMkVarTDfiicn/DLq3O0a81jncXszoyCFA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.2.tgz",
+ "integrity": "sha512-gi21faacK+J8aVSyAUptML9VQN26JRxe484IbF+h3hpG+sNVoMXPduhREz2CcYr5my0NE3MjVvQ5bMKX71pfVA==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.2.tgz",
+ "integrity": "sha512-qSlWiXnVaS/ceqXNfnoFZh4IiCA0EwvCivivTGbEu1qv2o+WTHpn1zNmCTAoOG5QaVr2/yhCoLScQtc/7RxshA==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.2.tgz",
+ "integrity": "sha512-rPyuLFNoF1B0+wolH277E780NUKf+KoEDb3OyoLbAO18BbeKi++YN6gC/zuJoPPDlQRL3fIxHxCxVEWiem2yXw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.2.tgz",
+ "integrity": "sha512-g+0ZLMook31iWV4PvqKU0i9E78gaZgYpSrYPed/4Bu+nGTgfOPtfs1h11tSSRPXSjC5EzLTjV/1A7L2Vr8pJoQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.2.tgz",
+ "integrity": "sha512-i+sGeRGsjKZcQRh3BRfpLsM3LX3bi4AoEVqmGDyc50L6KfYsN45wVCSz70iQMwPWr3E5opSiLOwsC9WB4/1pqg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.2.tgz",
+ "integrity": "sha512-C1vLcKc4MfFV6I0aWsC7B2Y9QcsiEcvKkfxprwkPfLaN8hQf0/fKHwSF2lcYzA9g4imqnhic729VB9Fo70HO3Q==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.2.tgz",
+ "integrity": "sha512-68gHUK/howpQjh7g7hlD9DvTTt4sNLp1Bb+Yzw2Ki0xvscm2cOdCLZNJNhd2jW8lsTPrHAHuF751BygifW4bkQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.2.tgz",
+ "integrity": "sha512-1e30XAuaBP1MAizaOBApsgeGZge2/Byd6wV4a8oa6jPdHELbRHBiw7wvo4dp7Ie2PE8TZT4pj9RLGZv9N4qwlw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.2.tgz",
+ "integrity": "sha512-4BJucJBGbuGnH6q7kpPqGJGzZnYrpAzRd60HQSt3OpX/6/YVgSsJnNzR8Ot74io50SeVT4CtCWe/RYIAymFPwA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openbsd-x64": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.2.tgz",
+ "integrity": "sha512-cT2MmXySMo58ENv8p6/O6wI/h/gLnD3D6JoajwXFZH6X9jz4hARqUhWpGuQhOgLNXscfZYRQMJvZDtWNzMAIDw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.2.tgz",
+ "integrity": "sha512-sZnyUgGkuzIXaK3jNMPmUIyJrxu/PjmATQrocpGA1WbCPX8H5tfGgRSuYtqBYAvLuIGp8SPRb1O4d1Fkb5fXaQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.2.tgz",
+ "integrity": "sha512-sDpFbenhmWjNcEbBcoTV0PWvW5rPJFvu+P7XoTY0YLGRupgLbFY0XPfwIbJOObzO7QgkRDANh65RjhPmgSaAjQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.2.tgz",
+ "integrity": "sha512-GvJ03TqqaweWCigtKQVBErw2bEhu1tyfNQbarwr94wCGnczA9HF8wqEe3U/Lfu6EdeNP0p6R+APeHVwEqVxpUQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.2.tgz",
+ "integrity": "sha512-KvXsBvp13oZz9JGe5NYS7FNizLe99Ny+W8ETsuCyjXiKdiGrcz2/J/N8qxZ/RSwivqjQguug07NLHqrIHrqfYw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.2.tgz",
+ "integrity": "sha512-xNO+fksQhsAckRtDSPWaMeT1uIM+JrDRXlerpnWNXhn1TdB3YZ6uKBMBTKP0eX9XtYEP978hHk1f8332i2AW8Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@types/babel__core": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "node_modules/@types/babel__generator": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
+ "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__traverse": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
+ "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.28.2"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "24.10.9",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.9.tgz",
+ "integrity": "sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~7.16.0"
+ }
+ },
+ "node_modules/@types/parse-json": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
+ "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==",
+ "license": "MIT"
+ },
+ "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==",
+ "license": "MIT"
+ },
+ "node_modules/@types/react": {
+ "version": "19.2.8",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.8.tgz",
+ "integrity": "sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg==",
+ "license": "MIT",
+ "dependencies": {
+ "csstype": "^3.2.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "19.2.3",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz",
+ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "^19.2.0"
+ }
+ },
+ "node_modules/@types/react-transition-group": {
+ "version": "4.4.12",
+ "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz",
+ "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "8.53.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.53.1.tgz",
+ "integrity": "sha512-cFYYFZ+oQFi6hUnBTbLRXfTJiaQtYE3t4O692agbBl+2Zy+eqSKWtPjhPXJu1G7j4RLjKgeJPDdq3EqOwmX5Ag==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.12.2",
+ "@typescript-eslint/scope-manager": "8.53.1",
+ "@typescript-eslint/type-utils": "8.53.1",
+ "@typescript-eslint/utils": "8.53.1",
+ "@typescript-eslint/visitor-keys": "8.53.1",
+ "ignore": "^7.0.5",
+ "natural-compare": "^1.4.0",
+ "ts-api-utils": "^2.4.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^8.53.1",
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "8.53.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.53.1.tgz",
+ "integrity": "sha512-nm3cvFN9SqZGXjmw5bZ6cGmvJSyJPn0wU9gHAZZHDnZl2wF9PhHv78Xf06E0MaNk4zLVHL8hb2/c32XvyJOLQg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "8.53.1",
+ "@typescript-eslint/types": "8.53.1",
+ "@typescript-eslint/typescript-estree": "8.53.1",
+ "@typescript-eslint/visitor-keys": "8.53.1",
+ "debug": "^4.4.3"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/project-service": {
+ "version": "8.53.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.53.1.tgz",
+ "integrity": "sha512-WYC4FB5Ra0xidsmlPb+1SsnaSKPmS3gsjIARwbEkHkoWloQmuzcfypljaJcR78uyLA1h8sHdWWPHSLDI+MtNog==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/tsconfig-utils": "^8.53.1",
+ "@typescript-eslint/types": "^8.53.1",
+ "debug": "^4.4.3"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "8.53.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.53.1.tgz",
+ "integrity": "sha512-Lu23yw1uJMFY8cUeq7JlrizAgeQvWugNQzJp8C3x8Eo5Jw5Q2ykMdiiTB9vBVOOUBysMzmRRmUfwFrZuI2C4SQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.53.1",
+ "@typescript-eslint/visitor-keys": "8.53.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/tsconfig-utils": {
+ "version": "8.53.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.53.1.tgz",
+ "integrity": "sha512-qfvLXS6F6b1y43pnf0pPbXJ+YoXIC7HKg0UGZ27uMIemKMKA6XH2DTxsEDdpdN29D+vHV07x/pnlPNVLhdhWiA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "8.53.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.53.1.tgz",
+ "integrity": "sha512-MOrdtNvyhy0rHyv0ENzub1d4wQYKb2NmIqG7qEqPWFW7Mpy2jzFC3pQ2yKDvirZB7jypm5uGjF2Qqs6OIqu47w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.53.1",
+ "@typescript-eslint/typescript-estree": "8.53.1",
+ "@typescript-eslint/utils": "8.53.1",
+ "debug": "^4.4.3",
+ "ts-api-utils": "^2.4.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "8.53.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.53.1.tgz",
+ "integrity": "sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "8.53.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.53.1.tgz",
+ "integrity": "sha512-RGlVipGhQAG4GxV1s34O91cxQ/vWiHJTDHbXRr0li2q/BGg3RR/7NM8QDWgkEgrwQYCvmJV9ichIwyoKCQ+DTg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/project-service": "8.53.1",
+ "@typescript-eslint/tsconfig-utils": "8.53.1",
+ "@typescript-eslint/types": "8.53.1",
+ "@typescript-eslint/visitor-keys": "8.53.1",
+ "debug": "^4.4.3",
+ "minimatch": "^9.0.5",
+ "semver": "^7.7.3",
+ "tinyglobby": "^0.2.15",
+ "ts-api-utils": "^2.4.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "8.53.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.53.1.tgz",
+ "integrity": "sha512-c4bMvGVWW4hv6JmDUEG7fSYlWOl3II2I4ylt0NM+seinYQlZMQIaKaXIIVJWt9Ofh6whrpM+EdDQXKXjNovvrg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.9.1",
+ "@typescript-eslint/scope-manager": "8.53.1",
+ "@typescript-eslint/types": "8.53.1",
+ "@typescript-eslint/typescript-estree": "8.53.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "8.53.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.53.1.tgz",
+ "integrity": "sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.53.1",
+ "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/@vitejs/plugin-react": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.2.tgz",
+ "integrity": "sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.28.5",
+ "@babel/plugin-transform-react-jsx-self": "^7.27.1",
+ "@babel/plugin-transform-react-jsx-source": "^7.27.1",
+ "@rolldown/pluginutils": "1.0.0-beta.53",
+ "@types/babel__core": "^7.20.5",
+ "react-refresh": "^0.18.0"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "peerDependencies": {
+ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.15.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "license": "MIT"
+ },
+ "node_modules/axios": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz",
+ "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==",
+ "license": "MIT",
+ "dependencies": {
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.4",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/babel-plugin-macros": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
+ "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.12.5",
+ "cosmiconfig": "^7.0.0",
+ "resolve": "^1.19.0"
+ },
+ "engines": {
+ "node": ">=10",
+ "npm": ">=6"
+ }
+ },
+ "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/baseline-browser-mapping": {
+ "version": "2.9.15",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.15.tgz",
+ "integrity": "sha512-kX8h7K2srmDyYnXRIppo4AH/wYgzWVCs+eKr3RusRSQ5PvRYoEFmR/I0PbdTjKFAoKqp5+kbxnNTFO9jOfSVJg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.js"
+ }
+ },
+ "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/browserslist": {
+ "version": "4.28.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
+ "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "baseline-browser-mapping": "^2.9.0",
+ "caniuse-lite": "^1.0.30001759",
+ "electron-to-chromium": "^1.5.263",
+ "node-releases": "^2.0.27",
+ "update-browserslist-db": "^1.2.0"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/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==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001765",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001765.tgz",
+ "integrity": "sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ==",
+ "dev": true,
+ "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/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "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/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cookie": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz",
+ "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/cosmiconfig": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
+ "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cosmiconfig/node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "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==",
+ "license": "MIT"
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/dom-helpers": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.8.7",
+ "csstype": "^3.0.2"
+ }
+ },
+ "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==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.267",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz",
+ "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz",
+ "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/es-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==",
+ "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==",
+ "license": "MIT",
+ "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==",
+ "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==",
+ "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/esbuild": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz",
+ "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.27.2",
+ "@esbuild/android-arm": "0.27.2",
+ "@esbuild/android-arm64": "0.27.2",
+ "@esbuild/android-x64": "0.27.2",
+ "@esbuild/darwin-arm64": "0.27.2",
+ "@esbuild/darwin-x64": "0.27.2",
+ "@esbuild/freebsd-arm64": "0.27.2",
+ "@esbuild/freebsd-x64": "0.27.2",
+ "@esbuild/linux-arm": "0.27.2",
+ "@esbuild/linux-arm64": "0.27.2",
+ "@esbuild/linux-ia32": "0.27.2",
+ "@esbuild/linux-loong64": "0.27.2",
+ "@esbuild/linux-mips64el": "0.27.2",
+ "@esbuild/linux-ppc64": "0.27.2",
+ "@esbuild/linux-riscv64": "0.27.2",
+ "@esbuild/linux-s390x": "0.27.2",
+ "@esbuild/linux-x64": "0.27.2",
+ "@esbuild/netbsd-arm64": "0.27.2",
+ "@esbuild/netbsd-x64": "0.27.2",
+ "@esbuild/openbsd-arm64": "0.27.2",
+ "@esbuild/openbsd-x64": "0.27.2",
+ "@esbuild/openharmony-arm64": "0.27.2",
+ "@esbuild/sunos-x64": "0.27.2",
+ "@esbuild/win32-arm64": "0.27.2",
+ "@esbuild/win32-ia32": "0.27.2",
+ "@esbuild/win32-x64": "0.27.2"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "9.39.2",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz",
+ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.8.0",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.21.1",
+ "@eslint/config-helpers": "^0.4.2",
+ "@eslint/core": "^0.17.0",
+ "@eslint/eslintrc": "^3.3.1",
+ "@eslint/js": "9.39.2",
+ "@eslint/plugin-kit": "^0.4.1",
+ "@humanfs/node": "^0.16.6",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.4.2",
+ "@types/estree": "^1.0.6",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.6",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^8.4.0",
+ "eslint-visitor-keys": "^4.2.1",
+ "espree": "^10.4.0",
+ "esquery": "^1.5.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^8.0.0",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz",
+ "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.24.4",
+ "@babel/parser": "^7.24.4",
+ "hermes-parser": "^0.25.1",
+ "zod": "^3.25.0 || ^4.0.0",
+ "zod-validation-error": "^3.5.0 || ^4.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-react-refresh": {
+ "version": "0.4.26",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.26.tgz",
+ "integrity": "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "eslint": ">=8.40"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
+ "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+ "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.15.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/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-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/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/file-entry-cache": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/find-root": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
+ "license": "MIT"
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.4"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
+ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.11",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
+ "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
+ "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
+ "hasown": "^2.0.2",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "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==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "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==",
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "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": "16.5.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz",
+ "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "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-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "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==",
+ "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==",
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/hermes-estree": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz",
+ "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/hermes-parser": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz",
+ "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hermes-estree": "0.25.1"
+ }
+ },
+ "node_modules/hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "react-is": "^16.7.0"
+ }
+ },
+ "node_modules/hoist-non-react-statics/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==",
+ "license": "MIT"
+ },
+ "node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "license": "MIT"
+ },
+ "node_modules/is-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==",
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.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-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/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/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+ "license": "MIT",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "license": "MIT"
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/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/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/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "license": "MIT"
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "dev": true,
+ "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/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/node-releases": {
+ "version": "2.0.27",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
+ "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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/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==",
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "license": "MIT"
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/prop-types/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==",
+ "license": "MIT"
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+ "license": "MIT"
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/qr.js": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/qr.js/-/qr.js-0.0.0.tgz",
+ "integrity": "sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ==",
+ "license": "MIT"
+ },
+ "node_modules/react": {
+ "version": "19.2.3",
+ "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz",
+ "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "19.2.3",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz",
+ "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==",
+ "license": "MIT",
+ "dependencies": {
+ "scheduler": "^0.27.0"
+ },
+ "peerDependencies": {
+ "react": "^19.2.3"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "19.2.3",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.3.tgz",
+ "integrity": "sha512-qJNJfu81ByyabuG7hPFEbXqNcWSU3+eVus+KJs+0ncpGfMyYdvSmxiJxbWR65lYi1I+/0HBcliO029gc4F+PnA==",
+ "license": "MIT"
+ },
+ "node_modules/react-qr-code": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/react-qr-code/-/react-qr-code-2.0.18.tgz",
+ "integrity": "sha512-v1Jqz7urLMhkO6jkgJuBYhnqvXagzceg3qJUWayuCK/c6LTIonpWbwxR1f1APGd4xrW/QcQEovNrAojbUz65Tg==",
+ "license": "MIT",
+ "dependencies": {
+ "prop-types": "^15.8.1",
+ "qr.js": "0.0.0"
+ },
+ "peerDependencies": {
+ "react": "*"
+ }
+ },
+ "node_modules/react-refresh": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz",
+ "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-router": {
+ "version": "7.12.0",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.12.0.tgz",
+ "integrity": "sha512-kTPDYPFzDVGIIGNLS5VJykK0HfHLY5MF3b+xj0/tTyNYL1gF1qs7u67Z9jEhQk2sQ98SUaHxlG31g1JtF7IfVw==",
+ "license": "MIT",
+ "dependencies": {
+ "cookie": "^1.0.1",
+ "set-cookie-parser": "^2.6.0"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "7.12.0",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.12.0.tgz",
+ "integrity": "sha512-pfO9fiBcpEfX4Tx+iTYKDtPbrSLLCbwJ5EqP+SPYQu1VYCXdy79GSj0wttR0U4cikVdlImZuEZ/9ZNCgoaxwBA==",
+ "license": "MIT",
+ "dependencies": {
+ "react-router": "7.12.0"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/react-transition-group": {
+ "version": "4.4.5",
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
+ "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/runtime": "^7.5.5",
+ "dom-helpers": "^5.0.1",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.6.2"
+ },
+ "peerDependencies": {
+ "react": ">=16.6.0",
+ "react-dom": ">=16.6.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.11",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
+ "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.16.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.55.2",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.2.tgz",
+ "integrity": "sha512-PggGy4dhwx5qaW+CKBilA/98Ql9keyfnb7lh4SR6shQ91QQQi1ORJ1v4UinkdP2i87OBs9AQFooQylcrrRfIcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.8"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.55.2",
+ "@rollup/rollup-android-arm64": "4.55.2",
+ "@rollup/rollup-darwin-arm64": "4.55.2",
+ "@rollup/rollup-darwin-x64": "4.55.2",
+ "@rollup/rollup-freebsd-arm64": "4.55.2",
+ "@rollup/rollup-freebsd-x64": "4.55.2",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.55.2",
+ "@rollup/rollup-linux-arm-musleabihf": "4.55.2",
+ "@rollup/rollup-linux-arm64-gnu": "4.55.2",
+ "@rollup/rollup-linux-arm64-musl": "4.55.2",
+ "@rollup/rollup-linux-loong64-gnu": "4.55.2",
+ "@rollup/rollup-linux-loong64-musl": "4.55.2",
+ "@rollup/rollup-linux-ppc64-gnu": "4.55.2",
+ "@rollup/rollup-linux-ppc64-musl": "4.55.2",
+ "@rollup/rollup-linux-riscv64-gnu": "4.55.2",
+ "@rollup/rollup-linux-riscv64-musl": "4.55.2",
+ "@rollup/rollup-linux-s390x-gnu": "4.55.2",
+ "@rollup/rollup-linux-x64-gnu": "4.55.2",
+ "@rollup/rollup-linux-x64-musl": "4.55.2",
+ "@rollup/rollup-openbsd-x64": "4.55.2",
+ "@rollup/rollup-openharmony-arm64": "4.55.2",
+ "@rollup/rollup-win32-arm64-msvc": "4.55.2",
+ "@rollup/rollup-win32-ia32-msvc": "4.55.2",
+ "@rollup/rollup-win32-x64-gnu": "4.55.2",
+ "@rollup/rollup-win32-x64-msvc": "4.55.2",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
+ "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
+ "license": "MIT"
+ },
+ "node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/set-cookie-parser": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz",
+ "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==",
+ "license": "MIT"
+ },
+ "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/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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/stylis": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
+ "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==",
+ "license": "MIT"
+ },
+ "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==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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/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/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/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",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/typescript-eslint": {
+ "version": "8.53.1",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.53.1.tgz",
+ "integrity": "sha512-gB+EVQfP5RDElh9ittfXlhZJdjSU4jUSTyE2+ia8CYyNvet4ElfaLlAIqDvQV9JPknKx0jQH1racTYe/4LaLSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/eslint-plugin": "8.53.1",
+ "@typescript-eslint/parser": "8.53.1",
+ "@typescript-eslint/typescript-estree": "8.53.1",
+ "@typescript-eslint/utils": "8.53.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
+ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/vite": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz",
+ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.27.0",
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3",
+ "postcss": "^8.5.6",
+ "rollup": "^4.43.0",
+ "tinyglobby": "^0.2.15"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^20.19.0 || >=22.12.0",
+ "jiti": ">=1.21.0",
+ "less": "^4.0.0",
+ "lightningcss": "^1.21.0",
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "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/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "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"
+ }
+ },
+ "node_modules/zod": {
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz",
+ "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ },
+ "node_modules/zod-validation-error": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz",
+ "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "zod": "^3.25.0 || ^4.0.0"
+ }
+ }
+ }
+}
diff --git a/client/package.json b/client/package.json
new file mode 100644
index 0000000..c4196d0
--- /dev/null
+++ b/client/package.json
@@ -0,0 +1,38 @@
+{
+ "name": "client",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc -b && vite build",
+ "lint": "eslint .",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "@emotion/react": "^11.14.0",
+ "@emotion/styled": "^11.14.1",
+ "@fontsource/inter": "^5.2.8",
+ "@mui/icons-material": "^7.3.7",
+ "@mui/material": "^7.3.7",
+ "axios": "^1.13.2",
+ "react": "^19.2.0",
+ "react-dom": "^19.2.0",
+ "react-qr-code": "^2.0.18",
+ "react-router-dom": "^7.12.0"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.39.1",
+ "@types/node": "^24.10.1",
+ "@types/react": "^19.2.5",
+ "@types/react-dom": "^19.2.3",
+ "@vitejs/plugin-react": "^5.1.1",
+ "eslint": "^9.39.1",
+ "eslint-plugin-react-hooks": "^7.0.1",
+ "eslint-plugin-react-refresh": "^0.4.24",
+ "globals": "^16.5.0",
+ "typescript": "~5.9.3",
+ "typescript-eslint": "^8.46.4",
+ "vite": "^7.2.4"
+ }
+}
diff --git a/client/public/img/3dpmanager-social-card.png b/client/public/img/3dpmanager-social-card.png
new file mode 100644
index 0000000000000000000000000000000000000000..55d911da89eecfb28b120129d981c615fcfe2515
GIT binary patch
literal 459840
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 |4VBnDR9S?TW$KSOAv
zFk&1mzZ9Nu@{>gbCW4-dfMFjr4bFa&Q(g_uwEo0s;TGBeDB_#DCr}3eQXSvS`Ak^X
z-_tbLX?wSlv~(o~2A(rpdG2>iLdnLB-3L&;<#ej0+RH~nV{aaYf2)$;k(tF3Tu$t^ytRFm#m{MG-k@^%KF)J
x$Lgc&13
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