diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 7eb3a82..1ea68cd 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,20 +1,21 @@
# Contributing to PageAgent
-Thank you for your interest in contributing to PageAgent! We welcome contributions from everyone.
+♥️ We welcome contributions from everyone.
## 🚀 Quick Start
### Development Setup
1. **Prerequisites**
+ - `macOS` / `Linux` / `WSL`
- `node.js >= 20` with `npm >= 10`
- An editor that supports `ts/eslint/prettier`
- - Make sure `eslint`, `prettier` and `commitlint` work well
+ - Make sure `eslint`, `prettier` and `commitlint` work well. Un-linted code won't pass the CI.
2. **Setup**
```bash
- npm ci
+ npm i
npm start # Start demo and documentation site
npm run build # Build libs and website
```
@@ -31,8 +32,8 @@ This is a **monorepo** with npm workspaces containing **4 main packages**:
> We use a simplified monorepo solution with `native npm-workspace + ts reference + vite alias`. No fancy tooling. Hoisting is required.
>
> - When developing. Use alias so that we don't have to pre-build.
-> - When bundling. Use external and disable ts `paths` alias to leave deps out.
-> - When bundling `IIFE` and `Website`. Bundle everything including local packages.
+> - When bundling. Use external and disable ts `paths` alias.
+> - When bundling `IIFE` and `Website`. Bundle everything together.
## 🤝 How to Contribute
@@ -64,6 +65,7 @@ This is a **monorepo** with npm workspaces containing **4 main packages**:
- Update documentation as needed
4. **Test Your Changes**
+ - Build and lint everything.
- Test in our demo website
- Test it on other websites if applicable
- `@TODO: test suite`
@@ -93,7 +95,7 @@ This is a **monorepo** with npm workspaces containing **4 main packages**:
### Vibe Coding with AI
-> [Vibe coding](https://en.wikipedia.org/wiki/Vibe_coding) = describe what you want in natural language, let AI write the code, and you review the result.
+> [Vibe coding](https://en.wikipedia.org/wiki/Vibe_coding)
- Vibe coding is **RECOMMENDED** when maintaining **the demo, the website, the UI and tests**.
- We have a [website/AGENTS.md](packages/website/AGENTS.md) for that.
@@ -144,12 +146,6 @@ If your AI assistant does not support [AGENTS.md](https://agents.md/). Add an al
- **Restart the dev server** to load new env vars
- If not provided, the demo will use the free testing proxy by default. By using it, you agree to its [terms](https://github.com/alibaba/page-agent/blob/main/docs/terms-and-privacy.md).
-### Website Development
-
-```bash
-npm start
-```
-
### Extension Development
```bash
@@ -185,17 +181,6 @@ Ask an AI to help you add documentation to the `website/` package. Follow the ex
> Our AGENTS.md file and guardrails are designed for this purpose. But please be careful and review anything AI generated.
-## 🎯 Contribution Areas
-
-We especially welcome contributions in:
-
-- **Browser compatibility** improvements
-- **Performance optimizations** for DOM processing
-- **Documentation** and examples
-- **Testing** and quality assurance
-- **Accessibility** features
-- **Internationalization** support
-
## 🚫 What We Don't Accept
- Breaking changes and large PRs without prior discussion
@@ -208,7 +193,7 @@ We especially welcome contributions in:
By contributing to this project, you agree that your contributions will be licensed under the MIT License.
-> You need to sign a github CLA when you create a PR.
+> CLA is optional.
## 💬 Questions?
diff --git a/README.md b/README.md
index 373bd88..476883c 100644
--- a/README.md
+++ b/README.md
@@ -114,8 +114,8 @@ file and in the node_modules directory after installation.
-
-
-
+
+
+
diff --git a/docs/README-zh.md b/docs/README-zh.md
index 2420246..0c8ead7 100644
--- a/docs/README-zh.md
+++ b/docs/README-zh.md
@@ -114,8 +114,8 @@ file and in the node_modules directory after installation.
-
-
-
+
+
+
diff --git a/package-lock.json b/package-lock.json
index e3ebaae..369a153 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -18,13 +18,13 @@
"packages/website"
],
"devDependencies": {
- "@commitlint/cli": "^20.4.2",
- "@commitlint/config-conventional": "^20.4.2",
+ "@commitlint/cli": "^20.4.3",
+ "@commitlint/config-conventional": "^20.4.3",
"@eslint/js": "^9.39.2",
- "@microsoft/api-extractor": "^7.57.6",
+ "@microsoft/api-extractor": "^7.57.7",
"@tailwindcss/vite": "^4.2.1",
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
- "@types/node": "^25.3.3",
+ "@types/node": "^25.4.0",
"@vitejs/plugin-react-swc": "^4.1.0",
"chalk": "^5.6.2",
"concurrently": "^9.2.1",
@@ -37,10 +37,10 @@
"eslint-plugin-react-x": "^2.13.0",
"globals": "^17.4.0",
"husky": "^9.1.7",
- "lint-staged": "^16.3.1",
+ "lint-staged": "^16.3.2",
"prettier": "^3.8.0",
"typescript": "^5.9.3",
- "typescript-eslint": "^8.56.1",
+ "typescript-eslint": "^8.57.0",
"unplugin-dts": "^1.0.0-beta.6",
"vite": "^7.3.1",
"vite-bundle-analyzer": "^1.3.6",
@@ -468,17 +468,17 @@
}
},
"node_modules/@commitlint/cli": {
- "version": "20.4.2",
- "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-20.4.2.tgz",
- "integrity": "sha512-YjYSX2yj/WsVoxh9mNiymfFS2ADbg2EK4+1WAsMuckwKMCqJ5PDG0CJU/8GvmHWcv4VRB2V02KqSiecRksWqZQ==",
+ "version": "20.4.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-20.4.3.tgz",
+ "integrity": "sha512-Z37EMoDT7+Upg500vlr/vZrgRsb6Xc5JAA3Tv7BYbobnN/ZpqUeZnSLggBg2+1O+NptRDtyujr2DD1CPV2qwhA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/format": "^20.4.0",
- "@commitlint/lint": "^20.4.2",
- "@commitlint/load": "^20.4.0",
- "@commitlint/read": "^20.4.0",
- "@commitlint/types": "^20.4.0",
+ "@commitlint/format": "^20.4.3",
+ "@commitlint/lint": "^20.4.3",
+ "@commitlint/load": "^20.4.3",
+ "@commitlint/read": "^20.4.3",
+ "@commitlint/types": "^20.4.3",
"tinyexec": "^1.0.0",
"yargs": "^17.0.0"
},
@@ -490,27 +490,27 @@
}
},
"node_modules/@commitlint/config-conventional": {
- "version": "20.4.2",
- "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-20.4.2.tgz",
- "integrity": "sha512-rwkTF55q7Q+6dpSKUmJoScV0f3EpDlWKw2UPzklkLS4o5krMN1tPWAVOgHRtyUTMneIapLeQwaCjn44Td6OzBQ==",
+ "version": "20.4.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-20.4.3.tgz",
+ "integrity": "sha512-9RtLySbYQAs8yEqWEqhSZo9nYhbm57jx7qHXtgRmv/nmeQIjjMcwf6Dl+y5UZcGWgWx435TAYBURONaJIuCjWg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/types": "^20.4.0",
- "conventional-changelog-conventionalcommits": "^9.1.0"
+ "@commitlint/types": "^20.4.3",
+ "conventional-changelog-conventionalcommits": "^9.2.0"
},
"engines": {
"node": ">=v18"
}
},
"node_modules/@commitlint/config-validator": {
- "version": "20.4.0",
- "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-20.4.0.tgz",
- "integrity": "sha512-zShmKTF+sqyNOfAE0vKcqnpvVpG0YX8F9G/ZIQHI2CoKyK+PSdladXMSns400aZ5/QZs+0fN75B//3Q5CHw++w==",
+ "version": "20.4.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-20.4.3.tgz",
+ "integrity": "sha512-jCZpZFkcSL3ZEdL5zgUzFRdytv3xPo8iukTe9VA+QGus/BGhpp1xXSVu2B006GLLb2gYUAEGEqv64kTlpZNgmA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/types": "^20.4.0",
+ "@commitlint/types": "^20.4.3",
"ajv": "^8.11.0"
},
"engines": {
@@ -518,13 +518,13 @@
}
},
"node_modules/@commitlint/ensure": {
- "version": "20.4.1",
- "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-20.4.1.tgz",
- "integrity": "sha512-WLQqaFx1pBooiVvBrA1YfJNFqZF8wS/YGOtr5RzApDbV9tQ52qT5VkTsY65hFTnXhW8PcDfZLaknfJTmPejmlw==",
+ "version": "20.4.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-20.4.3.tgz",
+ "integrity": "sha512-WcXGKBNn0wBKpX8VlXgxqedyrLxedIlLBCMvdamLnJFEbUGJ9JZmBVx4vhLV3ZyA8uONGOb+CzW0Y9HDbQ+ONQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/types": "^20.4.0",
+ "@commitlint/types": "^20.4.3",
"lodash.camelcase": "^4.3.0",
"lodash.kebabcase": "^4.1.1",
"lodash.snakecase": "^4.1.1",
@@ -546,13 +546,13 @@
}
},
"node_modules/@commitlint/format": {
- "version": "20.4.0",
- "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-20.4.0.tgz",
- "integrity": "sha512-i3ki3WR0rgolFVX6r64poBHXM1t8qlFel1G1eCBvVgntE3fCJitmzSvH5JD/KVJN/snz6TfaX2CLdON7+s4WVQ==",
+ "version": "20.4.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-20.4.3.tgz",
+ "integrity": "sha512-UDJVErjLbNghop6j111rsHJYGw6MjCKAi95K0GT2yf4eeiDHy3JDRLWYWEjIaFgO+r+dQSkuqgJ1CdMTtrvHsA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/types": "^20.4.0",
+ "@commitlint/types": "^20.4.3",
"picocolors": "^1.1.1"
},
"engines": {
@@ -560,13 +560,13 @@
}
},
"node_modules/@commitlint/is-ignored": {
- "version": "20.4.1",
- "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-20.4.1.tgz",
- "integrity": "sha512-In5EO4JR1lNsAv1oOBBO24V9ND1IqdAJDKZiEpdfjDl2HMasAcT7oA+5BKONv1pRoLG380DGPE2W2RIcUwdgLA==",
+ "version": "20.4.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-20.4.3.tgz",
+ "integrity": "sha512-W5VQKZ7fdJ1X3Tko+h87YZaqRMGN1KvQKXyCM8xFdxzMIf1KCZgN4uLz3osLB1zsFcVS4ZswHY64LI26/9ACag==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/types": "^20.4.0",
+ "@commitlint/types": "^20.4.3",
"semver": "^7.6.0"
},
"engines": {
@@ -574,33 +574,33 @@
}
},
"node_modules/@commitlint/lint": {
- "version": "20.4.2",
- "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-20.4.2.tgz",
- "integrity": "sha512-buquzNRtFng6xjXvBU1abY/WPEEjCgUipNQrNmIWe8QuJ6LWLtei/LDBAzEe5ASm45+Q9L2Xi3/GVvlj50GAug==",
+ "version": "20.4.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-20.4.3.tgz",
+ "integrity": "sha512-CYOXL23e+nRKij81+d0+dymtIi7Owl9QzvblJYbEfInON/4MaETNSLFDI74LDu+YJ0ML5HZyw9Vhp9QpckwQ0A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/is-ignored": "^20.4.1",
- "@commitlint/parse": "^20.4.1",
- "@commitlint/rules": "^20.4.2",
- "@commitlint/types": "^20.4.0"
+ "@commitlint/is-ignored": "^20.4.3",
+ "@commitlint/parse": "^20.4.3",
+ "@commitlint/rules": "^20.4.3",
+ "@commitlint/types": "^20.4.3"
},
"engines": {
"node": ">=v18"
}
},
"node_modules/@commitlint/load": {
- "version": "20.4.0",
- "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-20.4.0.tgz",
- "integrity": "sha512-Dauup/GfjwffBXRJUdlX/YRKfSVXsXZLnINXKz0VZkXdKDcaEILAi9oflHGbfydonJnJAbXEbF3nXPm9rm3G6A==",
+ "version": "20.4.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-20.4.3.tgz",
+ "integrity": "sha512-3cdJOUVP+VcgHa7bhJoWS+Z8mBNXB5aLWMBu7Q7uX8PSeWDzdbrBlR33J1MGGf7r1PZDp+mPPiFktk031PgdRw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/config-validator": "^20.4.0",
+ "@commitlint/config-validator": "^20.4.3",
"@commitlint/execute-rule": "^20.0.0",
- "@commitlint/resolve-extends": "^20.4.0",
- "@commitlint/types": "^20.4.0",
- "cosmiconfig": "^9.0.0",
+ "@commitlint/resolve-extends": "^20.4.3",
+ "@commitlint/types": "^20.4.3",
+ "cosmiconfig": "^9.0.1",
"cosmiconfig-typescript-loader": "^6.1.0",
"is-plain-obj": "^4.1.0",
"lodash.mergewith": "^4.6.2",
@@ -611,9 +611,9 @@
}
},
"node_modules/@commitlint/message": {
- "version": "20.4.0",
- "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-20.4.0.tgz",
- "integrity": "sha512-B5lGtvHgiLAIsK5nLINzVW0bN5hXv+EW35sKhYHE8F7V9Uz1fR4tx3wt7mobA5UNhZKUNgB/+ldVMQE6IHZRyA==",
+ "version": "20.4.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-20.4.3.tgz",
+ "integrity": "sha512-6akwCYrzcrFcTYz9GyUaWlhisY4lmQ3KvrnabmhoeAV8nRH4dXJAh4+EUQ3uArtxxKQkvxJS78hNX2EU3USgxQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -621,29 +621,29 @@
}
},
"node_modules/@commitlint/parse": {
- "version": "20.4.1",
- "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-20.4.1.tgz",
- "integrity": "sha512-XNtZjeRcFuAfUnhYrCY02+mpxwY4OmnvD3ETbVPs25xJFFz1nRo/25nHj+5eM+zTeRFvWFwD4GXWU2JEtoK1/w==",
+ "version": "20.4.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-20.4.3.tgz",
+ "integrity": "sha512-hzC3JCo3zs3VkQ833KnGVuWjWIzR72BWZWjQM7tY/7dfKreKAm7fEsy71tIFCRtxf2RtMP2d3RLF1U9yhFSccA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/types": "^20.4.0",
- "conventional-changelog-angular": "^8.1.0",
- "conventional-commits-parser": "^6.2.1"
+ "@commitlint/types": "^20.4.3",
+ "conventional-changelog-angular": "^8.2.0",
+ "conventional-commits-parser": "^6.3.0"
},
"engines": {
"node": ">=v18"
}
},
"node_modules/@commitlint/read": {
- "version": "20.4.0",
- "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-20.4.0.tgz",
- "integrity": "sha512-QfpFn6/I240ySEGv7YWqho4vxqtPpx40FS7kZZDjUJ+eHxu3azfhy7fFb5XzfTqVNp1hNoI3tEmiEPbDB44+cg==",
+ "version": "20.4.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-20.4.3.tgz",
+ "integrity": "sha512-j42OWv3L31WfnP8WquVjHZRt03w50Y/gEE8FAyih7GQTrIv2+pZ6VZ6pWLD/ml/3PO+RV2SPtRtTp/MvlTb8rQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/top-level": "^20.4.0",
- "@commitlint/types": "^20.4.0",
+ "@commitlint/top-level": "^20.4.3",
+ "@commitlint/types": "^20.4.3",
"git-raw-commits": "^4.0.0",
"minimist": "^1.2.8",
"tinyexec": "^1.0.0"
@@ -653,14 +653,14 @@
}
},
"node_modules/@commitlint/resolve-extends": {
- "version": "20.4.0",
- "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-20.4.0.tgz",
- "integrity": "sha512-ay1KM8q0t+/OnlpqXJ+7gEFQNlUtSU5Gxr8GEwnVf2TPN3+ywc5DzL3JCxmpucqxfHBTFwfRMXxPRRnR5Ki20g==",
+ "version": "20.4.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-20.4.3.tgz",
+ "integrity": "sha512-QucxcOy+00FhS9s4Uy0OyS5HeUV+hbC6OLqkTSIm6fwMdKva+OEavaCDuLtgd9akZZlsUo//XzSmPP3sLKBPog==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/config-validator": "^20.4.0",
- "@commitlint/types": "^20.4.0",
+ "@commitlint/config-validator": "^20.4.3",
+ "@commitlint/types": "^20.4.3",
"global-directory": "^4.0.1",
"import-meta-resolve": "^4.0.0",
"lodash.mergewith": "^4.6.2",
@@ -671,16 +671,16 @@
}
},
"node_modules/@commitlint/rules": {
- "version": "20.4.2",
- "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-20.4.2.tgz",
- "integrity": "sha512-oz83pnp5Yq6uwwTAabuVQPNlPfeD2Y5ZjMb7Wx8FSUlu4sLYJjbBWt8031Z0osCFPfHzAwSYrjnfDFKtuSMdKg==",
+ "version": "20.4.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-20.4.3.tgz",
+ "integrity": "sha512-Yuosd7Grn5qiT7FovngXLyRXTMUbj9PYiSkvUgWK1B5a7+ZvrbWDS7epeUapYNYatCy/KTpPFPbgLUdE+MUrBg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/ensure": "^20.4.1",
- "@commitlint/message": "^20.4.0",
+ "@commitlint/ensure": "^20.4.3",
+ "@commitlint/message": "^20.4.3",
"@commitlint/to-lines": "^20.0.0",
- "@commitlint/types": "^20.4.0"
+ "@commitlint/types": "^20.4.3"
},
"engines": {
"node": ">=v18"
@@ -697,9 +697,9 @@
}
},
"node_modules/@commitlint/top-level": {
- "version": "20.4.0",
- "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-20.4.0.tgz",
- "integrity": "sha512-NDzq8Q6jmFaIIBC/GG6n1OQEaHdmaAAYdrZRlMgW6glYWGZ+IeuXmiymDvQNXPc82mVxq2KiE3RVpcs+1OeDeA==",
+ "version": "20.4.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-20.4.3.tgz",
+ "integrity": "sha512-qD9xfP6dFg5jQ3NMrOhG0/w5y3bBUsVGyJvXxdWEwBm8hyx4WOk3kKXw28T5czBYvyeCVJgJJ6aoJZUWDpaacQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -710,13 +710,13 @@
}
},
"node_modules/@commitlint/types": {
- "version": "20.4.0",
- "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.4.0.tgz",
- "integrity": "sha512-aO5l99BQJ0X34ft8b0h7QFkQlqxC6e7ZPVmBKz13xM9O8obDaM1Cld4sQlJDXXU/VFuUzQ30mVtHjVz74TuStw==",
+ "version": "20.4.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.4.3.tgz",
+ "integrity": "sha512-51OWa1Gi6ODOasPmfJPq6js4pZoomima4XLZZCrkldaH2V5Nb3bVhNXPeT6XV0gubbainSpTw4zi68NqAeCNCg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "conventional-commits-parser": "^6.2.1",
+ "conventional-commits-parser": "^6.3.0",
"picocolors": "^1.1.1"
},
"engines": {
@@ -1685,9 +1685,9 @@
}
},
"node_modules/@microsoft/api-extractor": {
- "version": "7.57.6",
- "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.57.6.tgz",
- "integrity": "sha512-0rFv/D8Grzw1Mjs2+8NGUR+o4h9LVm5zKRtMeWnpdB5IMJF4TeHCL1zR5LMCIudkOvyvjbhMG5Wjs0B5nqsrRQ==",
+ "version": "7.57.7",
+ "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.57.7.tgz",
+ "integrity": "sha512-kmnmVs32MFWbV5X6BInC1/TfCs7y1ugwxv1xHsAIj/DyUfoe7vtO0alRUgbQa57+yRGHBBjlNcEk33SCAt5/dA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1700,7 +1700,7 @@
"@rushstack/ts-command-line": "5.3.3",
"diff": "~8.0.2",
"lodash": "~4.17.23",
- "minimatch": "10.2.1",
+ "minimatch": "10.2.3",
"resolve": "~1.22.1",
"semver": "~7.5.4",
"source-map": "~0.6.1",
@@ -3050,6 +3050,19 @@
"string-argv": "~0.3.1"
}
},
+ "node_modules/@simple-libs/stream-utils": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@simple-libs/stream-utils/-/stream-utils-1.2.0.tgz",
+ "integrity": "sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://ko-fi.com/dangreen"
+ }
+ },
"node_modules/@swc/core": {
"version": "1.15.11",
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.11.tgz",
@@ -3788,9 +3801,9 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "25.3.3",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.3.tgz",
- "integrity": "sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==",
+ "version": "25.4.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.4.0.tgz",
+ "integrity": "sha512-9wLpoeWuBlcbBpOY3XmzSTG3oscB6xjBEEtn+pYXTfhyXhIxC5FsBer2KTopBlvKEiW9l13po9fq+SJY/5lkhw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3818,17 +3831,17 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.1.tgz",
- "integrity": "sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==",
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.0.tgz",
+ "integrity": "sha512-qeu4rTHR3/IaFORbD16gmjq9+rEs9fGKdX0kF6BKSfi+gCuG3RCKLlSBYzn/bGsY9Tj7KE/DAQStbp8AHJGHEQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.12.2",
- "@typescript-eslint/scope-manager": "8.56.1",
- "@typescript-eslint/type-utils": "8.56.1",
- "@typescript-eslint/utils": "8.56.1",
- "@typescript-eslint/visitor-keys": "8.56.1",
+ "@typescript-eslint/scope-manager": "8.57.0",
+ "@typescript-eslint/type-utils": "8.57.0",
+ "@typescript-eslint/utils": "8.57.0",
+ "@typescript-eslint/visitor-keys": "8.57.0",
"ignore": "^7.0.5",
"natural-compare": "^1.4.0",
"ts-api-utils": "^2.4.0"
@@ -3841,7 +3854,7 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^8.56.1",
+ "@typescript-eslint/parser": "^8.57.0",
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
"typescript": ">=4.8.4 <6.0.0"
}
@@ -3857,16 +3870,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.1.tgz",
- "integrity": "sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==",
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.0.tgz",
+ "integrity": "sha512-XZzOmihLIr8AD1b9hL9ccNMzEMWt/dE2u7NyTY9jJG6YNiNthaD5XtUHVF2uCXZ15ng+z2hT3MVuxnUYhq6k1g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.56.1",
- "@typescript-eslint/types": "8.56.1",
- "@typescript-eslint/typescript-estree": "8.56.1",
- "@typescript-eslint/visitor-keys": "8.56.1",
+ "@typescript-eslint/scope-manager": "8.57.0",
+ "@typescript-eslint/types": "8.57.0",
+ "@typescript-eslint/typescript-estree": "8.57.0",
+ "@typescript-eslint/visitor-keys": "8.57.0",
"debug": "^4.4.3"
},
"engines": {
@@ -3882,14 +3895,14 @@
}
},
"node_modules/@typescript-eslint/project-service": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.1.tgz",
- "integrity": "sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==",
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.0.tgz",
+ "integrity": "sha512-pR+dK0BlxCLxtWfaKQWtYr7MhKmzqZxuii+ZjuFlZlIGRZm22HnXFqa2eY+90MUz8/i80YJmzFGDUsi8dMOV5w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.56.1",
- "@typescript-eslint/types": "^8.56.1",
+ "@typescript-eslint/tsconfig-utils": "^8.57.0",
+ "@typescript-eslint/types": "^8.57.0",
"debug": "^4.4.3"
},
"engines": {
@@ -3904,14 +3917,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.1.tgz",
- "integrity": "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==",
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.0.tgz",
+ "integrity": "sha512-nvExQqAHF01lUM66MskSaZulpPL5pgy5hI5RfrxviLgzZVffB5yYzw27uK/ft8QnKXI2X0LBrHJFr1TaZtAibw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.56.1",
- "@typescript-eslint/visitor-keys": "8.56.1"
+ "@typescript-eslint/types": "8.57.0",
+ "@typescript-eslint/visitor-keys": "8.57.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -3922,9 +3935,9 @@
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.1.tgz",
- "integrity": "sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==",
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.0.tgz",
+ "integrity": "sha512-LtXRihc5ytjJIQEH+xqjB0+YgsV4/tW35XKX3GTZHpWtcC8SPkT/d4tqdf1cKtesryHm2bgp6l555NYcT2NLvA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3939,15 +3952,15 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.1.tgz",
- "integrity": "sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==",
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.0.tgz",
+ "integrity": "sha512-yjgh7gmDcJ1+TcEg8x3uWQmn8ifvSupnPfjP21twPKrDP/pTHlEQgmKcitzF/rzPSmv7QjJ90vRpN4U+zoUjwQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.56.1",
- "@typescript-eslint/typescript-estree": "8.56.1",
- "@typescript-eslint/utils": "8.56.1",
+ "@typescript-eslint/types": "8.57.0",
+ "@typescript-eslint/typescript-estree": "8.57.0",
+ "@typescript-eslint/utils": "8.57.0",
"debug": "^4.4.3",
"ts-api-utils": "^2.4.0"
},
@@ -3964,9 +3977,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.1.tgz",
- "integrity": "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==",
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.0.tgz",
+ "integrity": "sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3978,16 +3991,16 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.1.tgz",
- "integrity": "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==",
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.0.tgz",
+ "integrity": "sha512-m7faHcyVg0BT3VdYTlX8GdJEM7COexXxS6KqGopxdtkQRvBanK377QDHr4W/vIPAR+ah9+B/RclSW5ldVniO1Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/project-service": "8.56.1",
- "@typescript-eslint/tsconfig-utils": "8.56.1",
- "@typescript-eslint/types": "8.56.1",
- "@typescript-eslint/visitor-keys": "8.56.1",
+ "@typescript-eslint/project-service": "8.57.0",
+ "@typescript-eslint/tsconfig-utils": "8.57.0",
+ "@typescript-eslint/types": "8.57.0",
+ "@typescript-eslint/visitor-keys": "8.57.0",
"debug": "^4.4.3",
"minimatch": "^10.2.2",
"semver": "^7.7.3",
@@ -4005,56 +4018,17 @@
"typescript": ">=4.8.4 <6.0.0"
}
},
- "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
- "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "18 || 20 || >=22"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz",
- "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^4.0.2"
- },
- "engines": {
- "node": "18 || 20 || >=22"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
- "version": "10.2.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.2.tgz",
- "integrity": "sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==",
- "dev": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "brace-expansion": "^5.0.2"
- },
- "engines": {
- "node": "18 || 20 || >=22"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/@typescript-eslint/utils": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.1.tgz",
- "integrity": "sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==",
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.0.tgz",
+ "integrity": "sha512-5iIHvpD3CZe06riAsbNxxreP+MuYgVUsV0n4bwLH//VJmgtt54sQeY2GszntJ4BjYCpMzrfVh2SBnUQTtys2lQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.9.1",
- "@typescript-eslint/scope-manager": "8.56.1",
- "@typescript-eslint/types": "8.56.1",
- "@typescript-eslint/typescript-estree": "8.56.1"
+ "@typescript-eslint/scope-manager": "8.57.0",
+ "@typescript-eslint/types": "8.57.0",
+ "@typescript-eslint/typescript-estree": "8.57.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4069,13 +4043,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.1.tgz",
- "integrity": "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==",
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.0.tgz",
+ "integrity": "sha512-zm6xx8UT/Xy2oSr2ZXD0pZo7Jx2XsCoID2IUh9YSTFRu7z+WdwYTRk6LhUftm1crwqbuoF6I8zAFeCMw0YjwDg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.56.1",
+ "@typescript-eslint/types": "8.57.0",
"eslint-visitor-keys": "^5.0.0"
},
"engines": {
@@ -4205,9 +4179,9 @@
}
},
"node_modules/@wxt-dev/module-react": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@wxt-dev/module-react/-/module-react-1.1.5.tgz",
- "integrity": "sha512-KgsUrsgH5rBT8MwiipnDEOHBXmLvTIdFICrI7KjngqSf9DpVRn92HsKmToxY0AYpkP19hHWta2oNYFTzmmm++g==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@wxt-dev/module-react/-/module-react-1.2.1.tgz",
+ "integrity": "sha512-NkXhXP1KqbTmKuQ7LwESFUnQDxQRiHw98ZQ6cXKuulRvyxtyCfc6gOqbKMHPP9bp497UVHaozr3ZQj1lvcPPTQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4217,6 +4191,7 @@
"url": "https://github.com/sponsors/wxt-dev"
},
"peerDependencies": {
+ "vite": "^5.4.19 || ^6.3.4 || ^7.0.0 || ^8.0.0-0",
"wxt": ">=0.19.16"
}
},
@@ -5249,9 +5224,9 @@
}
},
"node_modules/conventional-changelog-angular": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.1.0.tgz",
- "integrity": "sha512-GGf2Nipn1RUCAktxuVauVr1e3r8QrLP/B0lEUsFktmGqc3ddbQkhoJZHJctVU829U1c6mTSWftrVOCHaL85Q3w==",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.3.0.tgz",
+ "integrity": "sha512-DOuBwYSqWzfwuRByY9O4oOIvDlkUCTDzfbOgcSbkY+imXXj+4tmrEFao3K+FxemClYfYnZzsvudbwrhje9VHDA==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -5262,9 +5237,9 @@
}
},
"node_modules/conventional-changelog-conventionalcommits": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-9.1.0.tgz",
- "integrity": "sha512-MnbEysR8wWa8dAEvbj5xcBgJKQlX/m0lhS8DsyAAWDHdfs2faDJxTgzRYlRYpXSe7UiKrIIlB4TrBKU9q9DgkA==",
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-9.3.0.tgz",
+ "integrity": "sha512-kYFx6gAyjSIMwNtASkI3ZE99U1fuVDJr0yTYgVy+I2QG46zNZfl2her+0+eoviG82c5WQvW1jMt1eOQTeJLodA==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -5275,12 +5250,13 @@
}
},
"node_modules/conventional-commits-parser": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.2.1.tgz",
- "integrity": "sha512-20pyHgnO40rvfI0NGF/xiEoFMkXDtkF8FwHvk5BokoFoCuTQRI8vrNCNFWUOfuolKJMm1tPCHc8GgYEtr1XRNA==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.3.0.tgz",
+ "integrity": "sha512-RfOq/Cqy9xV9bOA8N+ZH6DlrDR+5S3Mi0B5kACEjESpE+AviIpAptx9a9cFpWCCvgRtWT+0BbUw+e1BZfts9jg==",
"dev": true,
"license": "MIT",
"dependencies": {
+ "@simple-libs/stream-utils": "^1.2.0",
"meow": "^13.0.0"
},
"bin": {
@@ -5305,9 +5281,9 @@
"license": "MIT"
},
"node_modules/cosmiconfig": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
- "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz",
+ "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6402,13 +6378,13 @@
}
},
"node_modules/framer-motion": {
- "version": "12.34.5",
- "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.34.5.tgz",
- "integrity": "sha512-Z2dQ+o7BsfpJI3+u0SQUNCrN+ajCKJen1blC4rCHx1Ta2EOHs+xKJegLT2aaD9iSMbU3OoX+WabQXkloUbZmJQ==",
+ "version": "12.35.2",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.35.2.tgz",
+ "integrity": "sha512-dhfuEMaNo0hc+AEqyHiIfiJRNb9U9UQutE9FoKm5pjf7CMitp9xPEF1iWZihR1q86LBmo6EJ7S8cN8QXEy49AA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "motion-dom": "^12.34.5",
+ "motion-dom": "^12.35.2",
"motion-utils": "^12.29.2",
"tslib": "^2.4.0"
},
@@ -6590,6 +6566,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz",
"integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==",
+ "deprecated": "This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead.",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7741,9 +7718,9 @@
}
},
"node_modules/lint-staged": {
- "version": "16.3.1",
- "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.3.1.tgz",
- "integrity": "sha512-bqvvquXzFBAlSbluugR4KXAe4XnO/QZcKVszpkBtqLWa2KEiVy8n6Xp38OeUbv/gOJOX4Vo9u5pFt/ADvbm42Q==",
+ "version": "16.3.2",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.3.2.tgz",
+ "integrity": "sha512-xKqhC2AeXLwiAHXguxBjuChoTTWFC6Pees0SHPwOpwlvI3BH7ZADFPddAdN3pgo3aiKgPUx/bxE78JfUnxQnlg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7927,9 +7904,9 @@
}
},
"node_modules/lucide-react": {
- "version": "0.576.0",
- "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.576.0.tgz",
- "integrity": "sha512-koNxU14BXrxUfZQ9cUaP0ES1uyPZKYDjk31FQZB6dQ/x+tXk979sVAn9ppZ/pVeJJyOxVM8j1E+8QEuSc02Vug==",
+ "version": "0.577.0",
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.577.0.tgz",
+ "integrity": "sha512-4LjoFv2eEPwYDPg/CUdBJQSDfPyzXCRrVW1X7jrx/trgxnxkHFjnVZINbzvzxjN70dxychOfg+FTYwBiS3pQ5A==",
"dev": true,
"license": "ISC",
"peerDependencies": {
@@ -8033,16 +8010,16 @@
}
},
"node_modules/minimatch": {
- "version": "10.2.1",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz",
- "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==",
+ "version": "10.2.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.3.tgz",
+ "integrity": "sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
"brace-expansion": "^5.0.2"
},
"engines": {
- "node": "20 || >=22"
+ "node": "18 || 20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -8121,13 +8098,13 @@
}
},
"node_modules/motion": {
- "version": "12.34.5",
- "resolved": "https://registry.npmjs.org/motion/-/motion-12.34.5.tgz",
- "integrity": "sha512-N06NLJ9IeBHeielRqIvYvjPfXuRdyTxa+9++BgpGa+hY2D7TcMkI6QzV3jaRuv0aZRXgMa7cPy9YcBUBisPzAQ==",
+ "version": "12.35.2",
+ "resolved": "https://registry.npmjs.org/motion/-/motion-12.35.2.tgz",
+ "integrity": "sha512-8zCi1DkNyU6a/tgEHn/GnnXZDcaMpDHbDOGORY1Rg/6lcNMSOuvwDB3i4hMSOvxqMWArc/vrGaw/Xek1OP69/A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "framer-motion": "^12.34.5",
+ "framer-motion": "^12.35.2",
"tslib": "^2.4.0"
},
"peerDependencies": {
@@ -8148,9 +8125,9 @@
}
},
"node_modules/motion-dom": {
- "version": "12.34.5",
- "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.34.5.tgz",
- "integrity": "sha512-k33CsnxO2K3gBRMUZT+vPmc4Utlb5menKdG0RyVNLtlqRaaJPRWlE9fXl8NTtfZ5z3G8TDvqSu0MENLqSTaHZA==",
+ "version": "12.35.2",
+ "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.35.2.tgz",
+ "integrity": "sha512-pWXFMTwvGDbx1Fe9YL5HZebv2NhvGBzRtiNUv58aoK7+XrsuaydQ0JGRKK2r+bTKlwgSWwWxHbP5249Qr/BNpg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9512,9 +9489,9 @@
}
},
"node_modules/simple-icons": {
- "version": "16.10.0",
- "resolved": "https://registry.npmjs.org/simple-icons/-/simple-icons-16.10.0.tgz",
- "integrity": "sha512-62kuxaG3pE+cFNerudUtwb9BLmudzayHrlHkvU9gf8Nxcj7VYOm9dh3WNbGaFk60aQtfnRyzViZaouFG2B45kg==",
+ "version": "16.11.0",
+ "resolved": "https://registry.npmjs.org/simple-icons/-/simple-icons-16.11.0.tgz",
+ "integrity": "sha512-6vqbcdaT6PsgUXud9rrP9w+nrmRzzStMEvyDavMeGwDgZSYM4uJ3tH7zurgTLHJO0RnMqU3Q09Vgo7WdTXV1eA==",
"dev": true,
"funding": [
{
@@ -10075,16 +10052,16 @@
}
},
"node_modules/typescript-eslint": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.56.1.tgz",
- "integrity": "sha512-U4lM6pjmBX7J5wk4szltF7I1cGBHXZopnAXCMXb3+fZ3B/0Z3hq3wS/CCUB2NZBNAExK92mCU2tEohWuwVMsDQ==",
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.57.0.tgz",
+ "integrity": "sha512-W8GcigEMEeB07xEZol8oJ26rigm3+bfPHxHvwbYUlu1fUDsGuQ7Hiskx5xGW/xM4USc9Ephe3jtv7ZYPQntHeA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/eslint-plugin": "8.56.1",
- "@typescript-eslint/parser": "8.56.1",
- "@typescript-eslint/typescript-estree": "8.56.1",
- "@typescript-eslint/utils": "8.56.1"
+ "@typescript-eslint/eslint-plugin": "8.57.0",
+ "@typescript-eslint/parser": "8.57.0",
+ "@typescript-eslint/typescript-estree": "8.57.0",
+ "@typescript-eslint/utils": "8.57.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -11150,17 +11127,17 @@
"@types/chrome": "^0.1.37",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.1",
- "@wxt-dev/module-react": "^1.1.5",
+ "@wxt-dev/module-react": "^1.2.1",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"idb": "^8.0.3",
- "lucide-react": "^0.576.0",
- "motion": "^12.34.5",
+ "lucide-react": "^0.577.0",
+ "motion": "^12.35.2",
"next-themes": "^0.4.6",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"rough-notation": "^0.5.1",
- "simple-icons": "^16.10.0",
+ "simple-icons": "^16.11.0",
"sonner": "^2.0.7",
"tailwind-merge": "^3.5.0",
"tailwindcss": "^4.1.14",
@@ -11228,13 +11205,13 @@
"@types/react-dom": "^19.2.1",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
- "lucide-react": "^0.576.0",
- "motion": "^12.34.5",
+ "lucide-react": "^0.577.0",
+ "motion": "^12.35.2",
"next-themes": "^0.4.6",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"rough-notation": "^0.5.1",
- "simple-icons": "^16.10.0",
+ "simple-icons": "^16.11.0",
"sonner": "^2.0.7",
"tailwind-merge": "^3.5.0",
"tailwindcss": "^4.1.14",
diff --git a/package.json b/package.json
index 1921e6f..26835ff 100644
--- a/package.json
+++ b/package.json
@@ -38,13 +38,13 @@
"prepare": "husky"
},
"devDependencies": {
- "@commitlint/cli": "^20.4.2",
- "@commitlint/config-conventional": "^20.4.2",
+ "@commitlint/cli": "^20.4.3",
+ "@commitlint/config-conventional": "^20.4.3",
"@eslint/js": "^9.39.2",
- "@microsoft/api-extractor": "^7.57.6",
+ "@microsoft/api-extractor": "^7.57.7",
"@tailwindcss/vite": "^4.2.1",
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
- "@types/node": "^25.3.3",
+ "@types/node": "^25.4.0",
"@vitejs/plugin-react-swc": "^4.1.0",
"chalk": "^5.6.2",
"concurrently": "^9.2.1",
@@ -57,10 +57,10 @@
"eslint-plugin-react-x": "^2.13.0",
"globals": "^17.4.0",
"husky": "^9.1.7",
- "lint-staged": "^16.3.1",
+ "lint-staged": "^16.3.2",
"prettier": "^3.8.0",
"typescript": "^5.9.3",
- "typescript-eslint": "^8.56.1",
+ "typescript-eslint": "^8.57.0",
"unplugin-dts": "^1.0.0-beta.6",
"vite": "^7.3.1",
"vite-plugin-css-injected-by-js": "^4.0.1",
diff --git a/packages/extension/package.json b/packages/extension/package.json
index e11e447..fc4d024 100644
--- a/packages/extension/package.json
+++ b/packages/extension/package.json
@@ -20,17 +20,17 @@
"@types/chrome": "^0.1.37",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.1",
- "@wxt-dev/module-react": "^1.1.5",
+ "@wxt-dev/module-react": "^1.2.1",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"idb": "^8.0.3",
- "lucide-react": "^0.576.0",
- "motion": "^12.34.5",
+ "lucide-react": "^0.577.0",
+ "motion": "^12.35.2",
"next-themes": "^0.4.6",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"rough-notation": "^0.5.1",
- "simple-icons": "^16.10.0",
+ "simple-icons": "^16.11.0",
"sonner": "^2.0.7",
"tailwind-merge": "^3.5.0",
"tailwindcss": "^4.1.14",
diff --git a/packages/page-controller/src/PageController.ts b/packages/page-controller/src/PageController.ts
index d168e4d..c30f508 100644
--- a/packages/page-controller/src/PageController.ts
+++ b/packages/page-controller/src/PageController.ts
@@ -14,7 +14,6 @@ import {
scrollVertically,
selectOptionElement,
} from './actions'
-import { VIEWPORT_EXPANSION } from './constants'
import * as dom from './dom'
import type { FlatDomTree, InteractiveElementDomNode } from './dom/dom_tree/type'
import { getPageInfo } from './dom/getPageInfo'
@@ -24,7 +23,6 @@ import { patchReact } from './patches/react'
* Configuration for PageController
*/
export interface PageControllerConfig extends dom.DomConfig {
- viewportExpansion?: number
/** Enable visual mask overlay during operations (default: false) */
enableMask?: boolean
}
@@ -131,7 +129,7 @@ export class PageController extends EventTarget {
const url = window.location.href
const title = document.title
const pi = getPageInfo()
- const viewportExpansion = this.config.viewportExpansion ?? VIEWPORT_EXPANSION
+ const viewportExpansion = dom.resolveViewportExpansion(this.config.viewportExpansion)
await this.updateTree()
diff --git a/packages/page-controller/src/constants.ts b/packages/page-controller/src/constants.ts
deleted file mode 100644
index ebe131e..0000000
--- a/packages/page-controller/src/constants.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * Copyright (C) 2025 Alibaba Group Holding Limited
- * All rights reserved.
- */
-
-/**
- * Viewport expansion for DOM tree extraction.
- * -1 means full page (no viewport restriction)
- * 0 means viewport only
- * positive values expand the viewport by that many pixels
- *
- * @note Since isTopElement depends on elementFromPoint,
- * it returns null when out of viewport, this feature has no practical use, only differ between -1 and 0
- */
-// export const VIEWPORT_EXPANSION = 100
-export const VIEWPORT_EXPANSION = -1
diff --git a/packages/page-controller/src/dom/index.ts b/packages/page-controller/src/dom/index.ts
index f8e2608..2968c0c 100644
--- a/packages/page-controller/src/dom/index.ts
+++ b/packages/page-controller/src/dom/index.ts
@@ -1,4 +1,3 @@
-import { VIEWPORT_EXPANSION } from '../constants'
import domTree from './dom_tree/index.js'
import {
ElementDomNode,
@@ -7,7 +6,23 @@ import {
TextDomNode,
} from './dom_tree/type'
+/**
+ * Viewport expansion for DOM tree extraction.
+ * -1 means full page (no viewport restriction)
+ * 0 means viewport only
+ * positive values expand the viewport by that many pixels
+ *
+ * @note Since isTopElement depends on elementFromPoint,
+ * it returns null when out of viewport, this feature has no practical use, only differ between -1 and 0
+ */
+const DEFAULT_VIEWPORT_EXPANSION = -1
+
+export function resolveViewportExpansion(viewportExpansion?: number): number {
+ return viewportExpansion ?? DEFAULT_VIEWPORT_EXPANSION
+}
+
export interface DomConfig {
+ viewportExpansion?: number
interactiveBlacklist?: (Element | (() => Element))[]
interactiveWhitelist?: (Element | (() => Element))[]
includeAttributes?: string[]
@@ -21,6 +36,8 @@ export interface DomConfig {
const newElementsCache = new WeakMap()
export function getFlatTree(config: DomConfig): FlatDomTree {
+ const viewportExpansion = resolveViewportExpansion(config.viewportExpansion)
+
const interactiveBlacklist = [] as Element[]
for (const item of config.interactiveBlacklist || []) {
if (typeof item === 'function') {
@@ -43,7 +60,7 @@ export function getFlatTree(config: DomConfig): FlatDomTree {
doHighlightElements: true,
debugMode: true,
focusHighlightIndex: -1,
- viewportExpansion: VIEWPORT_EXPANSION,
+ viewportExpansion,
interactiveBlacklist,
interactiveWhitelist,
highlightOpacity: config.highlightOpacity ?? 0.0,
diff --git a/packages/website/package.json b/packages/website/package.json
index 4dd2e62..9af8ef8 100644
--- a/packages/website/package.json
+++ b/packages/website/package.json
@@ -19,13 +19,13 @@
"@types/react-dom": "^19.2.1",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
- "lucide-react": "^0.576.0",
- "motion": "^12.34.5",
+ "lucide-react": "^0.577.0",
+ "motion": "^12.35.2",
"next-themes": "^0.4.6",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"rough-notation": "^0.5.1",
- "simple-icons": "^16.10.0",
+ "simple-icons": "^16.11.0",
"sonner": "^2.0.7",
"tailwind-merge": "^3.5.0",
"tailwindcss": "^4.1.14",