From a7c7959b9f17bfe52440fb3cbda4953edfb42bcb Mon Sep 17 00:00:00 2001
From: mimanerhn <116755181+mimanerhn@users.noreply.github.com>
Date: Mon, 26 May 2025 13:26:37 +0200
Subject: [PATCH 01/54] implement auto-exp
---
scripts/measure/remote_capture.py | 117 ++++++++++++++++++++++--------
1 file changed, 86 insertions(+), 31 deletions(-)
diff --git a/scripts/measure/remote_capture.py b/scripts/measure/remote_capture.py
index a38f722a..36a76180 100644
--- a/scripts/measure/remote_capture.py
+++ b/scripts/measure/remote_capture.py
@@ -30,6 +30,7 @@
import os
import subprocess
import cv2
+import numpy as np
from pprint import pprint
import matplotlib.pyplot as plt
from lensless.hardware.utils import check_username_hostname
@@ -79,11 +80,15 @@ def liveview(config):
# take picture
remote_fn = "remote_capture"
- print("\nTaking picture...")
+ print("\n Running auto-exposure...")
+
+ # 1. Build base command
pic_command = (
- f"{config.rpi.python} {config.capture.script} sensor={sensor} bayer={bayer} fn={remote_fn} exp={config.capture.exp} iso={config.capture.iso} "
- f"config_pause={config.capture.config_pause} sensor_mode={config.capture.sensor_mode} nbits_out={config.capture.nbits_out} "
- f"legacy={config.capture.legacy} rgb={config.capture.rgb} gray={config.capture.gray} "
+ f"{config.rpi.python} {config.capture.script} "
+ f"sensor={sensor} bayer={bayer} fn={remote_fn} exp={config.capture.exp} iso={config.capture.iso} "
+ f"config_pause={config.capture.config_pause} sensor_mode={config.capture.sensor_mode} "
+ f"nbits_out={config.capture.nbits_out} legacy={config.capture.legacy} "
+ f"rgb={config.capture.rgb} gray={config.capture.gray} "
)
if config.capture.nbits > 8:
pic_command += " sixteen=True"
@@ -92,34 +97,22 @@ def liveview(config):
if config.capture.awb_gains:
pic_command += f" awb_gains=[{config.capture.awb_gains[0]},{config.capture.awb_gains[1]}]"
- print(f"COMMAND : {pic_command}")
- ssh = subprocess.Popen(
- ["ssh", "%s@%s" % (username, hostname), pic_command],
- shell=False,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- )
- result = ssh.stdout.readlines()
- error = ssh.stderr.readlines()
+ # 2. Define expected output path
+ output_path = os.path.join(config.output or os.getcwd(), f"{config.capture.raw_data_fn}.png")
- if error != [] and legacy: # new camera software seems to return error even if it works
- print("ERROR: %s" % error)
- return
- if result == []:
- error = ssh.stderr.readlines()
- print("ERROR: %s" % error)
- return
- else:
- result = [res.decode("UTF-8") for res in result]
- result = [res for res in result if len(res) > 3]
- result_dict = dict()
- for res in result:
- _key = res.split(":")[0].strip()
- _val = "".join(res.split(":")[1:]).strip()
- result_dict[_key] = _val
- # result_dict = dict(map(lambda s: map(str.strip, s.split(":")), result))
- print("COMMAND OUTPUT : ")
- pprint(result_dict)
+ # 3. Run auto-exposure loop
+ result = auto_expose_via_remote(config, pic_command, output_path)
+
+ result = [res.decode("UTF-8") for res in result]
+ result = [res for res in result if len(res) > 3]
+ result_dict = dict()
+ for res in result:
+ _key = res.split(":")[0].strip()
+ _val = "".join(res.split(":")[1:]).strip()
+ result_dict[_key] = _val
+ # result_dict = dict(map(lambda s: map(str.strip, s.split(":")), result))
+ print("COMMAND OUTPUT : ")
+ pprint(result_dict)
if (
"RPi distribution" in result_dict.keys()
@@ -262,5 +255,67 @@ def liveview(config):
print(f"\nSaved plots to: {save}")
+# Auto-exposure logic injected before running SSH command
+
+def auto_expose_via_remote(config, base_command, output_path):
+ final_result = []
+ exp = config.capture.exp
+ max_iter = 10
+ target_max = 4095
+ max_saturation_ratio = 0.001
+
+ for i in range(max_iter):
+ print(f"\n Attempt {i+1} | exp={exp:.6f}s")
+
+ # Inject new exposure into command
+ pic_command = base_command.replace(f"exp={config.capture.exp}", f"exp={exp}")
+
+ ssh = subprocess.Popen(
+ ["ssh", f"{config.rpi.username}@{config.rpi.hostname}", pic_command],
+ shell=False,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ )
+ result = ssh.stdout.readlines()
+ error = ssh.stderr.readlines()
+
+ if error and config.capture.legacy:
+ print("ERROR:", error)
+ break
+ if not result:
+ print("ERROR:", error)
+ break
+
+ # Check image exists
+ if not os.path.exists(output_path):
+ print("Output image not found")
+ break
+
+ img = cv2.imread(output_path, cv2.IMREAD_UNCHANGED)
+ if img is None:
+ print("Failed to load captured image")
+ break
+
+ max_val = int(np.max(img))
+ sat_ratio = np.sum(img == 4095) / img.size
+ print(f"Max: {max_val} | Saturated: {sat_ratio*100:.4f}%")
+
+ if max_val >= target_max and sat_ratio <= max_saturation_ratio:
+ print(f"Ideal exposure found: {exp:.6f}s")
+ final_result = result
+ break
+
+ # Adjust exposure
+ if max_val >= 4095:
+ exp *= 0.7 if sat_ratio > max_saturation_ratio else 0.95
+ elif max_val >= 3800:
+ exp *= 1.05
+ else:
+ exp *= 1.4
+
+ return final_result
+
+
+
if __name__ == "__main__":
liveview()
From e3380463f7eba953af0b74498789a4a783b4e89c Mon Sep 17 00:00:00 2001
From: mimanerhn <116755181+mimanerhn@users.noreply.github.com>
Date: Mon, 26 May 2025 15:20:59 +0200
Subject: [PATCH 02/54] auto RB Gains
---
scripts/measure/analyze_image.py | 93 ++++++++++++++++++++++++--------
1 file changed, 71 insertions(+), 22 deletions(-)
diff --git a/scripts/measure/analyze_image.py b/scripts/measure/analyze_image.py
index 7496c4ab..c6bf21ff 100644
--- a/scripts/measure/analyze_image.py
+++ b/scripts/measure/analyze_image.py
@@ -120,30 +120,69 @@ def analyze_image(fp, gamma, width, bayer, lens, lensless, bg, rg, plot_width, s
fig_gray, ax_gray = plt.subplots(ncols=3, nrows=1, num="Grayscale", figsize=(15, 5))
else:
fig_gray, ax_gray = plt.subplots(ncols=2, nrows=1, num="Grayscale", figsize=(15, 5))
+ # Auto white balance loop (always on for Bayer + save)
+ if bayer and save is not None:
+ print("🔁 Starting automatic red/blue gain tuning...")
+ rg = rg or 1.0
+ bg = bg or 1.0
+ max_iter = 10
+
+ for i in range(max_iter):
+ print(f"\n▶️ Iteration {i+1}: rg={rg:.3f}, bg={bg:.3f}")
+
+ img = load_image(
+ fp,
+ verbose=True,
+ bayer=bayer,
+ blue_gain=bg,
+ red_gain=rg,
+ nbits_out=nbits,
+ back=back,
+ )
+
+ if nbits is None:
+ nbits = int(np.ceil(np.log2(img.max())))
+
+ done, (r, g, b), (err_r, err_b) = check_balance(img)
+ print(f"📊 Channel means — R: {r:.1f}, G: {g:.1f}, B: {b:.1f}")
+ print(f"📉 Errors — R: {err_r:.3f}, B: {err_b:.3f}")
+
+ if done:
+ print("✅ White balance converged.")
+ break
+
+ if r > 0:
+ rg *= g / r
+ if b > 0:
+ bg *= g / b
+
+ print(f"🎯 Final gains: rg={rg:.3f}, bg={bg:.3f}")
- # load PSF/image
- if lensless:
- img = load_psf(
- fp,
- verbose=True,
- bayer=bayer,
- blue_gain=bg,
- red_gain=rg,
- nbits_out=nbits,
- return_float=False,
- )[0]
else:
- img = load_image(
- fp,
- verbose=True,
- bayer=bayer,
- blue_gain=bg,
- red_gain=rg,
- nbits_out=nbits,
- back=back,
- )
- if nbits is None:
- nbits = int(np.ceil(np.log2(img.max())))
+ # load PSF/image
+ if lensless:
+ img = load_psf(
+ fp,
+ verbose=True,
+ bayer=bayer,
+ blue_gain=bg,
+ red_gain=rg,
+ nbits_out=nbits,
+ return_float=False,
+ )[0]
+ else:
+ img = load_image(
+ fp,
+ verbose=True,
+ bayer=bayer,
+ blue_gain=bg,
+ red_gain=rg,
+ nbits_out=nbits,
+ back=back,
+ )
+
+ if nbits is None:
+ nbits = int(np.ceil(np.log2(img.max())))
# plot RGB and grayscale
ax = plot_image(img, gamma=gamma, normalize=True, ax=ax_rgb[0])
@@ -216,6 +255,16 @@ def analyze_image(fp, gamma, width, bayer, lens, lensless, bg, rg, plot_width, s
plt.show()
+def check_balance(img, threshold=0.05):
+ """Returns True if R/B are within threshold of G."""
+ mean_r = np.mean(img[:, :, 0])
+ mean_g = np.mean(img[:, :, 1])
+ mean_b = np.mean(img[:, :, 2])
+
+ err_r = abs(mean_r - mean_g) / mean_g
+ err_b = abs(mean_b - mean_g) / mean_g
+
+ return err_r < threshold and err_b < threshold, (mean_r, mean_g, mean_b), (err_r, err_b)
if __name__ == "__main__":
analyze_image()
From bd14d48095314a7539acebd048ffa7ef3a28b079 Mon Sep 17 00:00:00 2001
From: mimanerhn <116755181+mimanerhn@users.noreply.github.com>
Date: Mon, 26 May 2025 16:08:40 +0200
Subject: [PATCH 03/54] webapp
---
lenslesswebapp/.gitignore | 24 +
lenslesswebapp/README.md | 54 +
lenslesswebapp/eslint.config.js | 28 +
lenslesswebapp/index.html | 13 +
lenslesswebapp/package-lock.json | 5132 ++++++++++++++++++++++++
lenslesswebapp/package.json | 35 +
lenslesswebapp/postcss.config.js | 6 +
lenslesswebapp/public/signal-lines.svg | 11 +
lenslesswebapp/public/vite.svg | 1 +
lenslesswebapp/src/App.css | 0
lenslesswebapp/src/App.tsx | 231 ++
lenslesswebapp/src/DemoPage.tsx | 177 +
lenslesswebapp/src/ProductPage.tsx | 94 +
lenslesswebapp/src/assets/react.svg | 1 +
lenslesswebapp/src/index.css | 3 +
lenslesswebapp/src/main.tsx | 20 +
lenslesswebapp/src/vite-env.d.ts | 1 +
lenslesswebapp/tailwind.config.js | 7 +
lenslesswebapp/tsconfig.app.json | 27 +
lenslesswebapp/tsconfig.json | 7 +
lenslesswebapp/tsconfig.node.json | 25 +
lenslesswebapp/vite.config.ts | 7 +
22 files changed, 5904 insertions(+)
create mode 100644 lenslesswebapp/.gitignore
create mode 100644 lenslesswebapp/README.md
create mode 100644 lenslesswebapp/eslint.config.js
create mode 100644 lenslesswebapp/index.html
create mode 100644 lenslesswebapp/package-lock.json
create mode 100644 lenslesswebapp/package.json
create mode 100644 lenslesswebapp/postcss.config.js
create mode 100644 lenslesswebapp/public/signal-lines.svg
create mode 100644 lenslesswebapp/public/vite.svg
create mode 100644 lenslesswebapp/src/App.css
create mode 100644 lenslesswebapp/src/App.tsx
create mode 100644 lenslesswebapp/src/DemoPage.tsx
create mode 100644 lenslesswebapp/src/ProductPage.tsx
create mode 100644 lenslesswebapp/src/assets/react.svg
create mode 100644 lenslesswebapp/src/index.css
create mode 100644 lenslesswebapp/src/main.tsx
create mode 100644 lenslesswebapp/src/vite-env.d.ts
create mode 100644 lenslesswebapp/tailwind.config.js
create mode 100644 lenslesswebapp/tsconfig.app.json
create mode 100644 lenslesswebapp/tsconfig.json
create mode 100644 lenslesswebapp/tsconfig.node.json
create mode 100644 lenslesswebapp/vite.config.ts
diff --git a/lenslesswebapp/.gitignore b/lenslesswebapp/.gitignore
new file mode 100644
index 00000000..a547bf36
--- /dev/null
+++ b/lenslesswebapp/.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/lenslesswebapp/README.md b/lenslesswebapp/README.md
new file mode 100644
index 00000000..da984443
--- /dev/null
+++ b/lenslesswebapp/README.md
@@ -0,0 +1,54 @@
+# 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/) 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
+
+## 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 tseslint.config({
+ extends: [
+ // 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,
+ ],
+ languageOptions: {
+ // other options...
+ parserOptions: {
+ project: ['./tsconfig.node.json', './tsconfig.app.json'],
+ tsconfigRootDir: import.meta.dirname,
+ },
+ },
+})
+```
+
+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 tseslint.config({
+ plugins: {
+ // Add the react-x and react-dom plugins
+ 'react-x': reactX,
+ 'react-dom': reactDom,
+ },
+ rules: {
+ // other rules...
+ // Enable its recommended typescript rules
+ ...reactX.configs['recommended-typescript'].rules,
+ ...reactDom.configs.recommended.rules,
+ },
+})
+```
diff --git a/lenslesswebapp/eslint.config.js b/lenslesswebapp/eslint.config.js
new file mode 100644
index 00000000..092408a9
--- /dev/null
+++ b/lenslesswebapp/eslint.config.js
@@ -0,0 +1,28 @@
+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'
+
+export default tseslint.config(
+ { ignores: ['dist'] },
+ {
+ extends: [js.configs.recommended, ...tseslint.configs.recommended],
+ files: ['**/*.{ts,tsx}'],
+ languageOptions: {
+ ecmaVersion: 2020,
+ globals: globals.browser,
+ },
+ plugins: {
+ 'react-hooks': reactHooks,
+ 'react-refresh': reactRefresh,
+ },
+ rules: {
+ ...reactHooks.configs.recommended.rules,
+ 'react-refresh/only-export-components': [
+ 'warn',
+ { allowConstantExport: true },
+ ],
+ },
+ },
+)
diff --git a/lenslesswebapp/index.html b/lenslesswebapp/index.html
new file mode 100644
index 00000000..08a57f11
--- /dev/null
+++ b/lenslesswebapp/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Lensless PiCam Kit
+
+
+
+
+
+
diff --git a/lenslesswebapp/package-lock.json b/lenslesswebapp/package-lock.json
new file mode 100644
index 00000000..9981b664
--- /dev/null
+++ b/lenslesswebapp/package-lock.json
@@ -0,0 +1,5132 @@
+{
+ "name": "lenslesswebapp",
+ "version": "0.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "lenslesswebapp",
+ "version": "0.0.0",
+ "dependencies": {
+ "react": "^19.1.0",
+ "react-dom": "^19.1.0",
+ "react-router-dom": "^7.6.0"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.25.0",
+ "@tailwindcss/postcss": "^4.1.7",
+ "@types/react": "^19.1.2",
+ "@types/react-dom": "^19.1.2",
+ "@vitejs/plugin-react": "^4.4.1",
+ "autoprefixer": "^10.4.21",
+ "eslint": "^9.25.0",
+ "eslint-plugin-react-hooks": "^5.2.0",
+ "eslint-plugin-react-refresh": "^0.4.19",
+ "globals": "^16.0.0",
+ "postcss": "^8.5.3",
+ "tailwindcss": "^3.4.17",
+ "tsx": "^4.19.4",
+ "typescript": "~5.8.3",
+ "typescript-eslint": "^8.30.1",
+ "vite": "^6.3.5"
+ }
+ },
+ "node_modules/@alloc/quick-lru": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
+ "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.27.1",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.27.2",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.2.tgz",
+ "integrity": "sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz",
+ "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.27.1",
+ "@babel/generator": "^7.27.1",
+ "@babel/helper-compilation-targets": "^7.27.1",
+ "@babel/helper-module-transforms": "^7.27.1",
+ "@babel/helpers": "^7.27.1",
+ "@babel/parser": "^7.27.1",
+ "@babel/template": "^7.27.1",
+ "@babel/traverse": "^7.27.1",
+ "@babel/types": "^7.27.1",
+ "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.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz",
+ "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.27.1",
+ "@babel/types": "^7.27.1",
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "jsesc": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.27.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
+ "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/compat-data": "^7.27.2",
+ "@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-module-imports": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
+ "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.27.1",
+ "@babel/types": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz",
+ "integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.27.1",
+ "@babel/traverse": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
+ "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
+ "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
+ "dev": true,
+ "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.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz",
+ "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.27.1",
+ "@babel/types": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.27.2",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz",
+ "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.27.1"
+ },
+ "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/template": {
+ "version": "7.27.2",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
+ "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@babel/parser": "^7.27.2",
+ "@babel/types": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz",
+ "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@babel/generator": "^7.27.1",
+ "@babel/parser": "^7.27.1",
+ "@babel/template": "^7.27.1",
+ "@babel/types": "^7.27.1",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse/node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz",
+ "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz",
+ "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz",
+ "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz",
+ "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz",
+ "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz",
+ "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz",
+ "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz",
+ "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz",
+ "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz",
+ "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz",
+ "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz",
+ "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz",
+ "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz",
+ "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz",
+ "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz",
+ "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz",
+ "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz",
+ "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz",
+ "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz",
+ "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz",
+ "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz",
+ "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz",
+ "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz",
+ "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz",
+ "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz",
+ "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
+ "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
+ "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/config-array": {
+ "version": "0.20.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz",
+ "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/object-schema": "^2.1.6",
+ "debug": "^4.3.1",
+ "minimatch": "^3.1.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/config-helpers": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz",
+ "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/core": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz",
+ "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/json-schema": "^7.0.15"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
+ "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/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.27.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz",
+ "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ }
+ },
+ "node_modules/@eslint/object-schema": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
+ "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/plugin-kit": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz",
+ "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.14.0",
+ "levn": "^0.4.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@humanfs/core": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
+ "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node": {
+ "version": "0.16.6",
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
+ "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanfs/core": "^0.19.1",
+ "@humanwhocodes/retry": "^0.3.0"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
+ "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/retry": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
+ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@isaacs/fs-minipass": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz",
+ "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^7.0.4"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
+ "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.0.tgz",
+ "integrity": "sha512-KxN+zCjOYHGwCl4UCtSfZ6jrq/qi88JDUtiEFk8LELEHq2Egfc/FgW+jItZiOLRuQfb/3xJSgFuNPC9jzggX+A==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.0.tgz",
+ "integrity": "sha512-yDvqx3lWlcugozax3DItKJI5j05B0d4Kvnjx+5mwiUpWramVvmAByYigMplaoAQ3pvdprGCTCE03eduqE/8mPQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.0.tgz",
+ "integrity": "sha512-2KOU574vD3gzcPSjxO0eyR5iWlnxxtmW1F5CkNOHmMlueKNCQkxR6+ekgWyVnz6zaZihpUNkGxjsYrkTJKhkaw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.0.tgz",
+ "integrity": "sha512-gE5ACNSxHcEZyP2BA9TuTakfZvULEW4YAOtxl/A/YDbIir/wPKukde0BNPlnBiP88ecaN4BJI2TtAd+HKuZPQQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.0.tgz",
+ "integrity": "sha512-GSxU6r5HnWij7FoSo7cZg3l5GPg4HFLkzsFFh0N/b16q5buW1NAWuCJ+HMtIdUEi6XF0qH+hN0TEd78laRp7Dg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.0.tgz",
+ "integrity": "sha512-KGiGKGDg8qLRyOWmk6IeiHJzsN/OYxO6nSbT0Vj4MwjS2XQy/5emsmtoqLAabqrohbgLWJ5GV3s/ljdrIr8Qjg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.0.tgz",
+ "integrity": "sha512-46OzWeqEVQyX3N2/QdiU/CMXYDH/lSHpgfBkuhl3igpZiaB3ZIfSjKuOnybFVBQzjsLwkus2mjaESy8H41SzvA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.0.tgz",
+ "integrity": "sha512-lfgW3KtQP4YauqdPpcUZHPcqQXmTmH4nYU0cplNeW583CMkAGjtImw4PKli09NFi2iQgChk4e9erkwlfYem6Lg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.0.tgz",
+ "integrity": "sha512-nn8mEyzMbdEJzT7cwxgObuwviMx6kPRxzYiOl6o/o+ChQq23gfdlZcUNnt89lPhhz3BYsZ72rp0rxNqBSfqlqw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.0.tgz",
+ "integrity": "sha512-l+QK99je2zUKGd31Gh+45c4pGDAqZSuWQiuRFCdHYC2CSiO47qUWsCcenrI6p22hvHZrDje9QjwSMAFL3iwXwQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.0.tgz",
+ "integrity": "sha512-WbnJaxPv1gPIm6S8O/Wg+wfE/OzGSXlBMbOe4ie+zMyykMOeqmgD1BhPxZQuDqwUN+0T/xOFtL2RUWBspnZj3w==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.0.tgz",
+ "integrity": "sha512-eRDWR5t67/b2g8Q/S8XPi0YdbKcCs4WQ8vklNnUYLaSWF+Cbv2axZsp4jni6/j7eKvMLYCYdcsv8dcU+a6QNFg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.0.tgz",
+ "integrity": "sha512-TWrZb6GF5jsEKG7T1IHwlLMDRy2f3DPqYldmIhnA2DVqvvhY2Ai184vZGgahRrg8k9UBWoSlHv+suRfTN7Ua4A==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.0.tgz",
+ "integrity": "sha512-ieQljaZKuJpmWvd8gW87ZmSFwid6AxMDk5bhONJ57U8zT77zpZ/TPKkU9HpnnFrM4zsgr4kiGuzbIbZTGi7u9A==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.0.tgz",
+ "integrity": "sha512-/L3pW48SxrWAlVsKCN0dGLB2bi8Nv8pr5S5ocSM+S0XCn5RCVCXqi8GVtHFsOBBCSeR+u9brV2zno5+mg3S4Aw==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.0.tgz",
+ "integrity": "sha512-XMLeKjyH8NsEDCRptf6LO8lJk23o9wvB+dJwcXMaH6ZQbbkHu2dbGIUindbMtRN6ux1xKi16iXWu6q9mu7gDhQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.0.tgz",
+ "integrity": "sha512-m/P7LycHZTvSQeXhFmgmdqEiTqSV80zn6xHaQ1JSqwCtD1YGtwEK515Qmy9DcB2HK4dOUVypQxvhVSy06cJPEg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.0.tgz",
+ "integrity": "sha512-4yodtcOrFHpbomJGVEqZ8fzD4kfBeCbpsUy5Pqk4RluXOdsWdjLnjhiKy2w3qzcASWd04fp52Xz7JKarVJ5BTg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.0.tgz",
+ "integrity": "sha512-tmazCrAsKzdkXssEc65zIE1oC6xPHwfy9d5Ta25SRCDOZS+I6RypVVShWALNuU9bxIfGA0aqrmzlzoM5wO5SPQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.0.tgz",
+ "integrity": "sha512-h1J+Yzjo/X+0EAvR2kIXJDuTuyT7drc+t2ALY0nIcGPbTatNOf0VWdhEA2Z4AAjv6X1NJV7SYo5oCTYRJhSlVA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@tailwindcss/node": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.7.tgz",
+ "integrity": "sha512-9rsOpdY9idRI2NH6CL4wORFY0+Q6fnx9XP9Ju+iq/0wJwGD5IByIgFmwVbyy4ymuyprj8Qh4ErxMKTUL4uNh3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ampproject/remapping": "^2.3.0",
+ "enhanced-resolve": "^5.18.1",
+ "jiti": "^2.4.2",
+ "lightningcss": "1.30.1",
+ "magic-string": "^0.30.17",
+ "source-map-js": "^1.2.1",
+ "tailwindcss": "4.1.7"
+ }
+ },
+ "node_modules/@tailwindcss/node/node_modules/tailwindcss": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.7.tgz",
+ "integrity": "sha512-kr1o/ErIdNhTz8uzAYL7TpaUuzKIE6QPQ4qmSdxnoX/lo+5wmUHQA6h3L5yIqEImSRnAAURDirLu/BgiXGPAhg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@tailwindcss/oxide": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.7.tgz",
+ "integrity": "sha512-5SF95Ctm9DFiUyjUPnDGkoKItPX/k+xifcQhcqX5RA85m50jw1pT/KzjdvlqxRja45Y52nR4MR9fD1JYd7f8NQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "dependencies": {
+ "detect-libc": "^2.0.4",
+ "tar": "^7.4.3"
+ },
+ "engines": {
+ "node": ">= 10"
+ },
+ "optionalDependencies": {
+ "@tailwindcss/oxide-android-arm64": "4.1.7",
+ "@tailwindcss/oxide-darwin-arm64": "4.1.7",
+ "@tailwindcss/oxide-darwin-x64": "4.1.7",
+ "@tailwindcss/oxide-freebsd-x64": "4.1.7",
+ "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.7",
+ "@tailwindcss/oxide-linux-arm64-gnu": "4.1.7",
+ "@tailwindcss/oxide-linux-arm64-musl": "4.1.7",
+ "@tailwindcss/oxide-linux-x64-gnu": "4.1.7",
+ "@tailwindcss/oxide-linux-x64-musl": "4.1.7",
+ "@tailwindcss/oxide-wasm32-wasi": "4.1.7",
+ "@tailwindcss/oxide-win32-arm64-msvc": "4.1.7",
+ "@tailwindcss/oxide-win32-x64-msvc": "4.1.7"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-android-arm64": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.7.tgz",
+ "integrity": "sha512-IWA410JZ8fF7kACus6BrUwY2Z1t1hm0+ZWNEzykKmMNM09wQooOcN/VXr0p/WJdtHZ90PvJf2AIBS/Ceqx1emg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-darwin-arm64": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.7.tgz",
+ "integrity": "sha512-81jUw9To7fimGGkuJ2W5h3/oGonTOZKZ8C2ghm/TTxbwvfSiFSDPd6/A/KE2N7Jp4mv3Ps9OFqg2fEKgZFfsvg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-darwin-x64": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.7.tgz",
+ "integrity": "sha512-q77rWjEyGHV4PdDBtrzO0tgBBPlQWKY7wZK0cUok/HaGgbNKecegNxCGikuPJn5wFAlIywC3v+WMBt0PEBtwGw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-freebsd-x64": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.7.tgz",
+ "integrity": "sha512-RfmdbbK6G6ptgF4qqbzoxmH+PKfP4KSVs7SRlTwcbRgBwezJkAO3Qta/7gDy10Q2DcUVkKxFLXUQO6J3CRvBGw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.7.tgz",
+ "integrity": "sha512-OZqsGvpwOa13lVd1z6JVwQXadEobmesxQ4AxhrwRiPuE04quvZHWn/LnihMg7/XkN+dTioXp/VMu/p6A5eZP3g==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.7.tgz",
+ "integrity": "sha512-voMvBTnJSfKecJxGkoeAyW/2XRToLZ227LxswLAwKY7YslG/Xkw9/tJNH+3IVh5bdYzYE7DfiaPbRkSHFxY1xA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.7.tgz",
+ "integrity": "sha512-PjGuNNmJeKHnP58M7XyjJyla8LPo+RmwHQpBI+W/OxqrwojyuCQ+GUtygu7jUqTEexejZHr/z3nBc/gTiXBj4A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.7.tgz",
+ "integrity": "sha512-HMs+Va+ZR3gC3mLZE00gXxtBo3JoSQxtu9lobbZd+DmfkIxR54NO7Z+UQNPsa0P/ITn1TevtFxXTpsRU7qEvWg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-linux-x64-musl": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.7.tgz",
+ "integrity": "sha512-MHZ6jyNlutdHH8rd+YTdr3QbXrHXqwIhHw9e7yXEBcQdluGwhpQY2Eku8UZK6ReLaWtQ4gijIv5QoM5eE+qlsA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-wasm32-wasi": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.7.tgz",
+ "integrity": "sha512-ANaSKt74ZRzE2TvJmUcbFQ8zS201cIPxUDm5qez5rLEwWkie2SkGtA4P+GPTj+u8N6JbPrC8MtY8RmJA35Oo+A==",
+ "bundleDependencies": [
+ "@napi-rs/wasm-runtime",
+ "@emnapi/core",
+ "@emnapi/runtime",
+ "@tybys/wasm-util",
+ "@emnapi/wasi-threads",
+ "tslib"
+ ],
+ "cpu": [
+ "wasm32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/core": "^1.4.3",
+ "@emnapi/runtime": "^1.4.3",
+ "@emnapi/wasi-threads": "^1.0.2",
+ "@napi-rs/wasm-runtime": "^0.2.9",
+ "@tybys/wasm-util": "^0.9.0",
+ "tslib": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.7.tgz",
+ "integrity": "sha512-HUiSiXQ9gLJBAPCMVRk2RT1ZrBjto7WvqsPBwUrNK2BcdSxMnk19h4pjZjI7zgPhDxlAbJSumTC4ljeA9y0tEw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.7.tgz",
+ "integrity": "sha512-rYHGmvoHiLJ8hWucSfSOEmdCBIGZIq7SpkPRSqLsH2Ab2YUNgKeAPT1Fi2cx3+hnYOrAb0jp9cRyode3bBW4mQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/postcss": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.7.tgz",
+ "integrity": "sha512-88g3qmNZn7jDgrrcp3ZXEQfp9CVox7xjP1HN2TFKI03CltPVd/c61ydn5qJJL8FYunn0OqBaW5HNUga0kmPVvw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@alloc/quick-lru": "^5.2.0",
+ "@tailwindcss/node": "4.1.7",
+ "@tailwindcss/oxide": "4.1.7",
+ "postcss": "^8.4.41",
+ "tailwindcss": "4.1.7"
+ }
+ },
+ "node_modules/@tailwindcss/postcss/node_modules/tailwindcss": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.7.tgz",
+ "integrity": "sha512-kr1o/ErIdNhTz8uzAYL7TpaUuzKIE6QPQ4qmSdxnoX/lo+5wmUHQA6h3L5yIqEImSRnAAURDirLu/BgiXGPAhg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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.20.7",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz",
+ "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.20.7"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
+ "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
+ "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/react": {
+ "version": "19.1.4",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.4.tgz",
+ "integrity": "sha512-EB1yiiYdvySuIITtD5lhW4yPyJ31RkJkkDw794LaQYrxCSaQV/47y5o1FMC4zF9ZyjUjzJMZwbovEnT5yHTW6g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "19.1.5",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.5.tgz",
+ "integrity": "sha512-CMCjrWucUBZvohgZxkjd6S9h0nZxXjzus6yDfUb+xLxYM7VvjKNH1tQrE9GWLql1XoOP4/Ds3bwFqShHUYraGg==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "^19.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "8.32.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.1.tgz",
+ "integrity": "sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.10.0",
+ "@typescript-eslint/scope-manager": "8.32.1",
+ "@typescript-eslint/type-utils": "8.32.1",
+ "@typescript-eslint/utils": "8.32.1",
+ "@typescript-eslint/visitor-keys": "8.32.1",
+ "graphemer": "^1.4.0",
+ "ignore": "^7.0.0",
+ "natural-compare": "^1.4.0",
+ "ts-api-utils": "^2.1.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz",
+ "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "8.32.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.1.tgz",
+ "integrity": "sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "8.32.1",
+ "@typescript-eslint/types": "8.32.1",
+ "@typescript-eslint/typescript-estree": "8.32.1",
+ "@typescript-eslint/visitor-keys": "8.32.1",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "8.32.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.1.tgz",
+ "integrity": "sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.32.1",
+ "@typescript-eslint/visitor-keys": "8.32.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/type-utils": {
+ "version": "8.32.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.32.1.tgz",
+ "integrity": "sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "8.32.1",
+ "@typescript-eslint/utils": "8.32.1",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^2.1.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "8.32.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.1.tgz",
+ "integrity": "sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==",
+ "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.32.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.1.tgz",
+ "integrity": "sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.32.1",
+ "@typescript-eslint/visitor-keys": "8.32.1",
+ "debug": "^4.3.4",
+ "fast-glob": "^3.3.2",
+ "is-glob": "^4.0.3",
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "ts-api-utils": "^2.1.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/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.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "8.32.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.32.1.tgz",
+ "integrity": "sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.7.0",
+ "@typescript-eslint/scope-manager": "8.32.1",
+ "@typescript-eslint/types": "8.32.1",
+ "@typescript-eslint/typescript-estree": "8.32.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "8.32.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.1.tgz",
+ "integrity": "sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.32.1",
+ "eslint-visitor-keys": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@vitejs/plugin-react": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.4.1.tgz",
+ "integrity": "sha512-IpEm5ZmeXAP/osiBXVVP5KjFMzbWOonMs0NaQQl+xYnUAcq4oHUBsF2+p4MgKWG4YMmFYJU8A6sxRPuowllm6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.26.10",
+ "@babel/plugin-transform-react-jsx-self": "^7.25.9",
+ "@babel/plugin-transform-react-jsx-source": "^7.25.9",
+ "@types/babel__core": "^7.20.5",
+ "react-refresh": "^0.17.0"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.14.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
+ "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
+ "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-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "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/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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/autoprefixer": {
+ "version": "10.4.21",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz",
+ "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.24.4",
+ "caniuse-lite": "^1.0.30001702",
+ "fraction.js": "^4.3.7",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.1.1",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "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/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.24.5",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz",
+ "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==",
+ "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": {
+ "caniuse-lite": "^1.0.30001716",
+ "electron-to-chromium": "^1.5.149",
+ "node-releases": "^2.0.19",
+ "update-browserslist-db": "^1.1.3"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001718",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz",
+ "integrity": "sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==",
+ "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/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/chownr": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
+ "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/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/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "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.0.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz",
+ "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/debug": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
+ "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/detect-libc": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
+ "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.155",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.155.tgz",
+ "integrity": "sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.18.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz",
+ "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz",
+ "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.25.4",
+ "@esbuild/android-arm": "0.25.4",
+ "@esbuild/android-arm64": "0.25.4",
+ "@esbuild/android-x64": "0.25.4",
+ "@esbuild/darwin-arm64": "0.25.4",
+ "@esbuild/darwin-x64": "0.25.4",
+ "@esbuild/freebsd-arm64": "0.25.4",
+ "@esbuild/freebsd-x64": "0.25.4",
+ "@esbuild/linux-arm": "0.25.4",
+ "@esbuild/linux-arm64": "0.25.4",
+ "@esbuild/linux-ia32": "0.25.4",
+ "@esbuild/linux-loong64": "0.25.4",
+ "@esbuild/linux-mips64el": "0.25.4",
+ "@esbuild/linux-ppc64": "0.25.4",
+ "@esbuild/linux-riscv64": "0.25.4",
+ "@esbuild/linux-s390x": "0.25.4",
+ "@esbuild/linux-x64": "0.25.4",
+ "@esbuild/netbsd-arm64": "0.25.4",
+ "@esbuild/netbsd-x64": "0.25.4",
+ "@esbuild/openbsd-arm64": "0.25.4",
+ "@esbuild/openbsd-x64": "0.25.4",
+ "@esbuild/sunos-x64": "0.25.4",
+ "@esbuild/win32-arm64": "0.25.4",
+ "@esbuild/win32-ia32": "0.25.4",
+ "@esbuild/win32-x64": "0.25.4"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "9.27.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz",
+ "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.20.0",
+ "@eslint/config-helpers": "^0.2.1",
+ "@eslint/core": "^0.14.0",
+ "@eslint/eslintrc": "^3.3.1",
+ "@eslint/js": "9.27.0",
+ "@eslint/plugin-kit": "^0.3.1",
+ "@humanfs/node": "^0.16.6",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.4.2",
+ "@types/estree": "^1.0.6",
+ "@types/json-schema": "^7.0.15",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.6",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^8.3.0",
+ "eslint-visitor-keys": "^4.2.0",
+ "espree": "^10.3.0",
+ "esquery": "^1.5.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^8.0.0",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz",
+ "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-react-refresh": {
+ "version": "0.4.20",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz",
+ "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "eslint": ">=8.40"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
+ "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
+ "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.14.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fastq": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
+ "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.4"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
+ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/foreground-child": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
+ "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "cross-spawn": "^7.0.6",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/fraction.js": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+ "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "patreon",
+ "url": "https://github.com/sponsors/rawify"
+ }
+ },
+ "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==",
+ "dev": true,
+ "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-tsconfig": {
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz",
+ "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
+ "node_modules/glob": {
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/glob/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/glob/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/globals": {
+ "version": "16.1.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-16.1.0.tgz",
+ "integrity": "sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/has-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/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-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-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/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/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/jiti": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz",
+ "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jiti": "lib/jiti-cli.mjs"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-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/lightningcss": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz",
+ "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==",
+ "dev": true,
+ "license": "MPL-2.0",
+ "dependencies": {
+ "detect-libc": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "lightningcss-darwin-arm64": "1.30.1",
+ "lightningcss-darwin-x64": "1.30.1",
+ "lightningcss-freebsd-x64": "1.30.1",
+ "lightningcss-linux-arm-gnueabihf": "1.30.1",
+ "lightningcss-linux-arm64-gnu": "1.30.1",
+ "lightningcss-linux-arm64-musl": "1.30.1",
+ "lightningcss-linux-x64-gnu": "1.30.1",
+ "lightningcss-linux-x64-musl": "1.30.1",
+ "lightningcss-win32-arm64-msvc": "1.30.1",
+ "lightningcss-win32-x64-msvc": "1.30.1"
+ }
+ },
+ "node_modules/lightningcss-darwin-arm64": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz",
+ "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-darwin-x64": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz",
+ "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-freebsd-x64": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz",
+ "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm-gnueabihf": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz",
+ "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-gnu": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz",
+ "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-musl": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz",
+ "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-gnu": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz",
+ "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-musl": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz",
+ "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-arm64-msvc": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz",
+ "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-x64-msvc": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz",
+ "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
+ "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antonk52"
+ }
+ },
+ "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==",
+ "dev": true,
+ "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/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/magic-string": {
+ "version": "0.30.17",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
+ "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/minizlib": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz",
+ "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "minipass": "^7.1.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/mkdirp": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
+ "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "mkdirp": "dist/cjs/src/bin.js"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "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.19",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
+ "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "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/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0"
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/path-scurry/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.3",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
+ "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
+ "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.8",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-import": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+ "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "lilconfig": "^3.0.0",
+ "yaml": "^2.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
+ "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "postcss-selector-parser": "^6.1.1"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/react": {
+ "version": "19.1.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz",
+ "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "19.1.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz",
+ "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==",
+ "license": "MIT",
+ "dependencies": {
+ "scheduler": "^0.26.0"
+ },
+ "peerDependencies": {
+ "react": "^19.1.0"
+ }
+ },
+ "node_modules/react-refresh": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz",
+ "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-router": {
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.6.0.tgz",
+ "integrity": "sha512-GGufuHIVCJDbnIAXP3P9Sxzq3UUsddG3rrI3ut1q6m0FI6vxVBF3JoPQ38+W/blslLH4a5Yutp8drkEpXoddGQ==",
+ "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.6.0",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.6.0.tgz",
+ "integrity": "sha512-DYgm6RDEuKdopSyGOWZGtDfSm7Aofb8CCzgkliTjtu/eDuB0gcsv6qdFhhi8HdtmA+KHkt5MfZ5K2PdzjugYsA==",
+ "license": "MIT",
+ "dependencies": {
+ "react-router": "7.6.0"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.10",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
+ "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.16.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.0.tgz",
+ "integrity": "sha512-HqMFpUbWlf/tvcxBFNKnJyzc7Lk+XO3FGc3pbNBLqEbOz0gPLRgcrlS3UF4MfUrVlstOaP/q0kM6GVvi+LrLRg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.7"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.41.0",
+ "@rollup/rollup-android-arm64": "4.41.0",
+ "@rollup/rollup-darwin-arm64": "4.41.0",
+ "@rollup/rollup-darwin-x64": "4.41.0",
+ "@rollup/rollup-freebsd-arm64": "4.41.0",
+ "@rollup/rollup-freebsd-x64": "4.41.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.41.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.41.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.41.0",
+ "@rollup/rollup-linux-arm64-musl": "4.41.0",
+ "@rollup/rollup-linux-loongarch64-gnu": "4.41.0",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.41.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.41.0",
+ "@rollup/rollup-linux-riscv64-musl": "4.41.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.41.0",
+ "@rollup/rollup-linux-x64-gnu": "4.41.0",
+ "@rollup/rollup-linux-x64-musl": "4.41.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.41.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.41.0",
+ "@rollup/rollup-win32-x64-msvc": "4.41.0",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.26.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz",
+ "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==",
+ "license": "MIT"
+ },
+ "node_modules/semver": {
+ "version": "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.1",
+ "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz",
+ "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==",
+ "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/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "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/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/string-width-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/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/sucrase": {
+ "version": "3.35.0",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
+ "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "glob": "^10.3.10",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "3.4.17",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz",
+ "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@alloc/quick-lru": "^5.2.0",
+ "arg": "^5.0.2",
+ "chokidar": "^3.6.0",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.3.2",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "jiti": "^1.21.6",
+ "lilconfig": "^3.1.3",
+ "micromatch": "^4.0.8",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.1.1",
+ "postcss": "^8.4.47",
+ "postcss-import": "^15.1.0",
+ "postcss-js": "^4.0.1",
+ "postcss-load-config": "^4.0.2",
+ "postcss-nested": "^6.2.0",
+ "postcss-selector-parser": "^6.1.2",
+ "resolve": "^1.22.8",
+ "sucrase": "^3.35.0"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tailwindcss/node_modules/jiti": {
+ "version": "1.21.7",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
+ "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jiti": "bin/jiti.js"
+ }
+ },
+ "node_modules/tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tar": {
+ "version": "7.4.3",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz",
+ "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "@isaacs/fs-minipass": "^4.0.0",
+ "chownr": "^3.0.0",
+ "minipass": "^7.1.2",
+ "minizlib": "^3.0.1",
+ "mkdirp": "^3.0.1",
+ "yallist": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tar/node_modules/yallist": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz",
+ "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz",
+ "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.4.4",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.4.4",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz",
+ "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/ts-api-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
+ "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.12"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4"
+ }
+ },
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/tsx": {
+ "version": "4.19.4",
+ "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz",
+ "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "~0.25.0",
+ "get-tsconfig": "^4.7.5"
+ },
+ "bin": {
+ "tsx": "dist/cli.mjs"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ }
+ },
+ "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.8.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
+ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/typescript-eslint": {
+ "version": "8.32.1",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.32.1.tgz",
+ "integrity": "sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/eslint-plugin": "8.32.1",
+ "@typescript-eslint/parser": "8.32.1",
+ "@typescript-eslint/utils": "8.32.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+ "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
+ "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/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vite": {
+ "version": "6.3.5",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
+ "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.25.0",
+ "fdir": "^6.4.4",
+ "picomatch": "^4.0.2",
+ "postcss": "^8.5.3",
+ "rollup": "^4.34.9",
+ "tinyglobby": "^0.2.13"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
+ "jiti": ">=1.21.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "sass-embedded": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "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/vite/node_modules/fdir": {
+ "version": "6.4.4",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz",
+ "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite/node_modules/picomatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/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/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "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/yaml": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz",
+ "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14.6"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ }
+}
diff --git a/lenslesswebapp/package.json b/lenslesswebapp/package.json
new file mode 100644
index 00000000..2ed047f7
--- /dev/null
+++ b/lenslesswebapp/package.json
@@ -0,0 +1,35 @@
+{
+ "name": "lenslesswebapp",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc -b && vite build",
+ "lint": "eslint .",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "react": "^19.1.0",
+ "react-dom": "^19.1.0",
+ "react-router-dom": "^7.6.0"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.25.0",
+ "@tailwindcss/postcss": "^4.1.7",
+ "@types/react": "^19.1.2",
+ "@types/react-dom": "^19.1.2",
+ "@vitejs/plugin-react": "^4.4.1",
+ "autoprefixer": "^10.4.21",
+ "eslint": "^9.25.0",
+ "eslint-plugin-react-hooks": "^5.2.0",
+ "eslint-plugin-react-refresh": "^0.4.19",
+ "globals": "^16.0.0",
+ "postcss": "^8.5.3",
+ "tailwindcss": "^3.4.17",
+ "tsx": "^4.19.4",
+ "typescript": "~5.8.3",
+ "typescript-eslint": "^8.30.1",
+ "vite": "^6.3.5"
+ }
+}
diff --git a/lenslesswebapp/postcss.config.js b/lenslesswebapp/postcss.config.js
new file mode 100644
index 00000000..2e7af2b7
--- /dev/null
+++ b/lenslesswebapp/postcss.config.js
@@ -0,0 +1,6 @@
+export default {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/lenslesswebapp/public/signal-lines.svg b/lenslesswebapp/public/signal-lines.svg
new file mode 100644
index 00000000..5d16c226
--- /dev/null
+++ b/lenslesswebapp/public/signal-lines.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lenslesswebapp/public/vite.svg b/lenslesswebapp/public/vite.svg
new file mode 100644
index 00000000..e7b8dfb1
--- /dev/null
+++ b/lenslesswebapp/public/vite.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/lenslesswebapp/src/App.css b/lenslesswebapp/src/App.css
new file mode 100644
index 00000000..e69de29b
diff --git a/lenslesswebapp/src/App.tsx b/lenslesswebapp/src/App.tsx
new file mode 100644
index 00000000..fcab17b0
--- /dev/null
+++ b/lenslesswebapp/src/App.tsx
@@ -0,0 +1,231 @@
+import { Link } from "react-router-dom";
+import { useEffect, useState } from "react";
+
+export default function App() {
+ const [loaded, setLoaded] = useState(false);
+ const [showArticles, setShowArticles] = useState(false);
+
+ useEffect(() => {
+ setTimeout(() => setLoaded(true), 100);
+ }, []);
+
+ return (
+
+ {/* Navbar */}
+
+
+
+
+
+
+
+ {/* Hero Section */}
+
+
+
+
+
+
+ Lensless PiCam Kit
+
+
+ All-in-One Starter Kit for Computational Imaging
+
+
+ Try our Online Demo
+
+
+
+
+ {/* Why Lensless Section */}
+
+
+ Why Lensless?
+
+
+
+
+ Reduced size, weight & cost
+
+
+ Lensless designs eliminate bulky optical components, making systems lighter, smaller and cheaper.
+
+
+
+
+ Visual privacy
+
+
+ Raw images captured are unintelligible to humans, offering native privacy by design.
+
+
+
+
+ Compressive imaging
+
+
+ Captures and reconstructs only what’s necessary, reducing data and enabling smarter sensing.
+
+
+
+
+
+ {/* About Section */}
+
+ About the Project
+
+ The Lensless PiCam Kit is an affordable, modular development platform for lensless imaging.
+ It includes 3D-printable hardware, open-source software, and tools for integrating machine learning into the imaging pipeline.
+
+
+
+ {/* Documentation Section */}
+
+ Documentation
+
+ {/* Medium Articles Section */}
+
+
Medium Articles
+
+ Explore our insights and development stories on Medium.
+
+
setShowArticles(!showArticles)}
+ className="text-green-300 underline text-sm hover:text-green-200 transition"
+ >
+ {showArticles ? "Hide Articles" : "View Articles"}
+
+ {showArticles && (
+
+ )}
+
+
+ {/* Other Documentation Cards */}
+
+
Software & Firmware
+
Arduino and Python code examples hosted on GitHub.
+
Browse GitHub
+
+
+
Full Online Documentation
+
Setup, imaging, firmware flashing, ML integration, and deployment.
+
View Full Docs
+
+
+
+
+ {/* Product Section */}
+
+ Our Product
+
+ Prototype kit for lensless imaging. Fixed price:{" "}
+ $100
+
+
+ Discover Our Product
+
+
+
+ {/* Footer */}
+
+
+ {/* Floating Animation */}
+
+
+ );
+}
diff --git a/lenslesswebapp/src/DemoPage.tsx b/lenslesswebapp/src/DemoPage.tsx
new file mode 100644
index 00000000..485d88d0
--- /dev/null
+++ b/lenslesswebapp/src/DemoPage.tsx
@@ -0,0 +1,177 @@
+import { useState, useRef, useEffect } from "react";
+import { Link } from "react-router-dom";
+
+export default function Demo() {
+ const [selectedFile, setSelectedFile] = useState(null);
+ const [imagePreview, setImagePreview] = useState(null);
+ const [showPSFModal, setShowPSFModal] = useState(false);
+ const [showImagingModal, setShowImagingModal] = useState(false);
+ const [showCamera, setShowCamera] = useState(false);
+ const [psfName, setPsfName] = useState("");
+ const [algorithm, setAlgorithm] = useState("ADMM");
+ const [iterations, setIterations] = useState(10);
+
+ const fileInputRef = useRef(null);
+ const videoRef = useRef(null);
+ const canvasRef = useRef(null);
+
+ const handleFileChange = (e) => {
+ const file = e.target.files[0];
+ setSelectedFile(file);
+ if (file) {
+ const reader = new FileReader();
+ reader.onloadend = () => {
+ setImagePreview(reader.result);
+ };
+ reader.readAsDataURL(file);
+ }
+ };
+
+ const handleCapture = () => {
+ setShowPSFModal(true);
+ };
+
+ const handleTakePicture = () => {
+ setShowImagingModal(true);
+ };
+
+ const handleRunCapture = () => {
+ alert(`Capturing PSF with name: ${psfName}`);
+ setShowPSFModal(false);
+ };
+
+ const handleRunImaging = () => {
+ alert(`Running ${algorithm} for ${iterations} iterations`);
+ setShowImagingModal(false);
+ };
+
+ const triggerUpload = () => {
+ fileInputRef.current.click();
+ };
+
+ const triggerCamera = async () => {
+ setShowCamera(true);
+ try {
+ const stream = await navigator.mediaDevices.getUserMedia({ video: true });
+ if (videoRef.current) {
+ videoRef.current.srcObject = stream;
+ videoRef.current.play();
+ }
+ } catch (err) {
+ console.error("Error accessing webcam: ", err);
+ }
+ };
+
+ const takeSnapshot = () => {
+ const video = videoRef.current;
+ const canvas = canvasRef.current;
+ const context = canvas.getContext("2d");
+ canvas.width = video.videoWidth;
+ canvas.height = video.videoHeight;
+ context.drawImage(video, 0, 0, canvas.width, canvas.height);
+ const dataURL = canvas.toDataURL("image/png");
+ setImagePreview(dataURL);
+ setShowCamera(false);
+ video.srcObject.getTracks().forEach((track) => track.stop());
+ };
+
+ return (
+
+
+
+
+
+
+
+
+
+
Lensless Imaging Demo
+
+
+
PSF Calibration
+
+ Link to tutorial for setting / placing PSF box
+
+
+ Capture
+ Download
+
+
+
PSF
+
Autocorrelations
+
+
+
+
+
Imaging
+
+ Dropdown menu of different PSFs available on the Raspberry Pi (first time use → no PSF available)
+
+
+
+ Take Picture
+ Download
+
+
+
+
Raw Lensless
+
Reconstruction
+
+
+ {imagePreview && (
+
+
Image Preview:
+
+
+ )}
+
+
+
+ {showPSFModal && (
+
+
+
Name your PSF
+ setPsfName(e.target.value)} placeholder="Enter PSF name" className="w-full px-4 py-2 rounded text-black mb-4" />
+ Save & Capture
+
+
+ )}
+
+ {showImagingModal && (
+
+
+
Taking a Picture
+
+ Upload
+ or
+ From your device
+
+
+
Algorithm parameters
+
+ setAlgorithm("ADMM")} className={`px-4 py-2 rounded ${algorithm === "ADMM" ? "bg-gray-500 text-white" : "bg-gray-200 text-black"}`}>ADMM
+ setAlgorithm("Gradient Descent")} className={`px-4 py-2 rounded ${algorithm === "Gradient Descent" ? "bg-gray-500 text-white" : "bg-gray-200 text-black"}`}>Gradient descent
+
+
Number of iterations: {iterations}
+
setIterations(e.target.value)} className="w-full" />
+
Take picture!
+
+
+ )}
+
+ {showCamera && (
+
+
+
+ Capture Snapshot
+
+
+
+ )}
+
+ );
+}
diff --git a/lenslesswebapp/src/ProductPage.tsx b/lenslesswebapp/src/ProductPage.tsx
new file mode 100644
index 00000000..f2f4d965
--- /dev/null
+++ b/lenslesswebapp/src/ProductPage.tsx
@@ -0,0 +1,94 @@
+import { Link } from "react-router-dom";
+
+export default function ProductPage() {
+ return (
+
+
+ {/* Navbar */}
+
+
+
+
+
+
+
+ {/* Header */}
+
+
+ {/* Content */}
+
+ {/* Images */}
+
+
Main Image
+
Thumb 1
+
Thumb 2
+
Thumb 3
+
+
+ {/* Product Info */}
+
+
$100.00
+
Available Now
+
+ Buy Now
+
+
+ The Lensless PiCam Kit includes all the hardware you need to begin experimenting with computational imaging:
+ a custom PCB, image sensor, microcontroller connectors, and full documentation. Compatible with Raspberry Pi and Arduino,
+ and designed to support real-time capture and machine learning processing.
+
+
+
+ Open-source and educational
+ Modular and extensible
+ Includes pre-trained models and firmware
+ Designed by LCAV – EPFL
+
+
+
+
+ {/* Footer */}
+
+
+ );
+}
diff --git a/lenslesswebapp/src/assets/react.svg b/lenslesswebapp/src/assets/react.svg
new file mode 100644
index 00000000..6c87de9b
--- /dev/null
+++ b/lenslesswebapp/src/assets/react.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/lenslesswebapp/src/index.css b/lenslesswebapp/src/index.css
new file mode 100644
index 00000000..b5c61c95
--- /dev/null
+++ b/lenslesswebapp/src/index.css
@@ -0,0 +1,3 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
diff --git a/lenslesswebapp/src/main.tsx b/lenslesswebapp/src/main.tsx
new file mode 100644
index 00000000..05bb2a0a
--- /dev/null
+++ b/lenslesswebapp/src/main.tsx
@@ -0,0 +1,20 @@
+import React from 'react'
+import ReactDOM from 'react-dom/client'
+import { BrowserRouter, Routes, Route } from 'react-router-dom'
+import App from './App.tsx'
+import ProductPage from './ProductPage.tsx'
+import DemoPage from './DemoPage.tsx'
+
+import './index.css'
+
+ReactDOM.createRoot(document.getElementById('root')!).render(
+
+
+
+ } />
+ } />
+ } />
+
+
+
+)
\ No newline at end of file
diff --git a/lenslesswebapp/src/vite-env.d.ts b/lenslesswebapp/src/vite-env.d.ts
new file mode 100644
index 00000000..11f02fe2
--- /dev/null
+++ b/lenslesswebapp/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/lenslesswebapp/tailwind.config.js b/lenslesswebapp/tailwind.config.js
new file mode 100644
index 00000000..d8f08734
--- /dev/null
+++ b/lenslesswebapp/tailwind.config.js
@@ -0,0 +1,7 @@
+export default {
+ content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
+ theme: {
+ extend: {},
+ },
+ plugins: [],
+}
diff --git a/lenslesswebapp/tsconfig.app.json b/lenslesswebapp/tsconfig.app.json
new file mode 100644
index 00000000..c9ccbd4c
--- /dev/null
+++ b/lenslesswebapp/tsconfig.app.json
@@ -0,0 +1,27 @@
+{
+ "compilerOptions": {
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
+ "target": "ES2020",
+ "useDefineForClassFields": true,
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "verbatimModuleSyntax": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+ "jsx": "react-jsx",
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "erasableSyntaxOnly": true,
+ "noFallthroughCasesInSwitch": true,
+ "noUncheckedSideEffectImports": true
+ },
+ "include": ["src"]
+}
diff --git a/lenslesswebapp/tsconfig.json b/lenslesswebapp/tsconfig.json
new file mode 100644
index 00000000..1ffef600
--- /dev/null
+++ b/lenslesswebapp/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "files": [],
+ "references": [
+ { "path": "./tsconfig.app.json" },
+ { "path": "./tsconfig.node.json" }
+ ]
+}
diff --git a/lenslesswebapp/tsconfig.node.json b/lenslesswebapp/tsconfig.node.json
new file mode 100644
index 00000000..9728af2d
--- /dev/null
+++ b/lenslesswebapp/tsconfig.node.json
@@ -0,0 +1,25 @@
+{
+ "compilerOptions": {
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
+ "target": "ES2022",
+ "lib": ["ES2023"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "verbatimModuleSyntax": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "erasableSyntaxOnly": true,
+ "noFallthroughCasesInSwitch": true,
+ "noUncheckedSideEffectImports": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/lenslesswebapp/vite.config.ts b/lenslesswebapp/vite.config.ts
new file mode 100644
index 00000000..8b0f57b9
--- /dev/null
+++ b/lenslesswebapp/vite.config.ts
@@ -0,0 +1,7 @@
+import { defineConfig } from 'vite'
+import react from '@vitejs/plugin-react'
+
+// https://vite.dev/config/
+export default defineConfig({
+ plugins: [react()],
+})
From 3eb4710040cc09ee51fb8c5d00bfeeb7ff4ad5f5 Mon Sep 17 00:00:00 2001
From: mimanerhn <116755181+mimanerhn@users.noreply.github.com>
Date: Mon, 26 May 2025 17:20:24 +0200
Subject: [PATCH 04/54] Auto-exp
---
scripts/measure/remote_capture.py | 36 +++++--------------------------
1 file changed, 5 insertions(+), 31 deletions(-)
diff --git a/scripts/measure/remote_capture.py b/scripts/measure/remote_capture.py
index 36a76180..9dbe1d1d 100644
--- a/scripts/measure/remote_capture.py
+++ b/scripts/measure/remote_capture.py
@@ -1,31 +1,3 @@
-"""
-
-For Bayer data with RPI HQ sensor:
-```
-python scripts/measure/remote_capture.py \
-rpi.username=USERNAME rpi.hostname=IP_ADDRESS
-```
-
-For Bayer data with RPI Global shutter sensor:
-```
-python scripts/measure/remote_capture.py -cn remote_capture_rpi_gs \
-rpi.username=USERNAME rpi.hostname=IP_ADDRESS
-```
-
-For RGB data with RPI HQ RPI Global shutter sensor:
-```
-python scripts/measure/remote_capture.py -cn remote_capture_rpi_gs \
-rpi.username=USERNAME rpi.hostname=IP_ADDRESS \
-capture.bayer=False capture.down=2
-```
-
-Check out the `configs/demo.yaml` file for parameters, specifically:
-
-- `rpi`: RPi parameters
-- `capture`: parameters for taking pictures
-
-"""
-
import hydra
import os
import subprocess
@@ -101,6 +73,8 @@ def liveview(config):
output_path = os.path.join(config.output or os.getcwd(), f"{config.capture.raw_data_fn}.png")
# 3. Run auto-exposure loop
+ auto_expose_via_remote(config, pic_command, output_path)
+
result = auto_expose_via_remote(config, pic_command, output_path)
result = [res.decode("UTF-8") for res in result]
@@ -258,11 +232,11 @@ def liveview(config):
# Auto-exposure logic injected before running SSH command
def auto_expose_via_remote(config, base_command, output_path):
- final_result = []
exp = config.capture.exp
max_iter = 10
target_max = 4095
max_saturation_ratio = 0.001
+ final_img = None
for i in range(max_iter):
print(f"\n Attempt {i+1} | exp={exp:.6f}s")
@@ -301,7 +275,7 @@ def auto_expose_via_remote(config, base_command, output_path):
print(f"Max: {max_val} | Saturated: {sat_ratio*100:.4f}%")
if max_val >= target_max and sat_ratio <= max_saturation_ratio:
- print(f"Ideal exposure found: {exp:.6f}s")
+ print(f"✅Ideal exposure found: {exp:.6f}s")
final_result = result
break
@@ -318,4 +292,4 @@ def auto_expose_via_remote(config, base_command, output_path):
if __name__ == "__main__":
- liveview()
+ liveview()
\ No newline at end of file
From 440dbb30bc2b3d31c5b67537da158c0d57cc7675 Mon Sep 17 00:00:00 2001
From: mimanerhn <116755181+mimanerhn@users.noreply.github.com>
Date: Mon, 26 May 2025 18:05:42 +0200
Subject: [PATCH 05/54] Minor Change
---
lenslesswebapp/index.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lenslesswebapp/index.html b/lenslesswebapp/index.html
index 08a57f11..636950c9 100644
--- a/lenslesswebapp/index.html
+++ b/lenslesswebapp/index.html
@@ -2,7 +2,7 @@
-
+
Lensless PiCam Kit
From 16d0f14591d20b04dd8d680073ad05f6f412c8a7 Mon Sep 17 00:00:00 2001
From: mimanerhn <116755181+mimanerhn@users.noreply.github.com>
Date: Mon, 26 May 2025 18:15:03 +0200
Subject: [PATCH 06/54] Debug Logo
---
lenslesswebapp/.gitignore | 1 +
lenslesswebapp/public/logo.png | Bin 0 -> 1500718 bytes
2 files changed, 1 insertion(+)
create mode 100644 lenslesswebapp/public/logo.png
diff --git a/lenslesswebapp/.gitignore b/lenslesswebapp/.gitignore
index a547bf36..0eaf4ef0 100644
--- a/lenslesswebapp/.gitignore
+++ b/lenslesswebapp/.gitignore
@@ -22,3 +22,4 @@ dist-ssr
*.njsproj
*.sln
*.sw?
+!public/logo.png
diff --git a/lenslesswebapp/public/logo.png b/lenslesswebapp/public/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..363204552c439b56225d60675a28b264d5baae33
GIT binary patch
literal 1500718
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%0DARs+@wn~>3$P6`
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