Merge branch 'main' into fix/contenteditable-input-events

This commit is contained in:
Simon
2026-03-10 17:37:20 +08:00
10 changed files with 259 additions and 298 deletions

View File

@@ -1,20 +1,21 @@
# Contributing to PageAgent # Contributing to PageAgent
Thank you for your interest in contributing to PageAgent! We welcome contributions from everyone. ♥️ We welcome contributions from everyone.
## 🚀 Quick Start ## 🚀 Quick Start
### Development Setup ### Development Setup
1. **Prerequisites** 1. **Prerequisites**
- `macOS` / `Linux` / `WSL`
- `node.js >= 20` with `npm >= 10` - `node.js >= 20` with `npm >= 10`
- An editor that supports `ts/eslint/prettier` - 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** 2. **Setup**
```bash ```bash
npm ci npm i
npm start # Start demo and documentation site npm start # Start demo and documentation site
npm run build # Build libs and website 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. > 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 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. Use external and disable ts `paths` alias.
> - When bundling `IIFE` and `Website`. Bundle everything including local packages. > - When bundling `IIFE` and `Website`. Bundle everything together.
## 🤝 How to Contribute ## 🤝 How to Contribute
@@ -64,6 +65,7 @@ This is a **monorepo** with npm workspaces containing **4 main packages**:
- Update documentation as needed - Update documentation as needed
4. **Test Your Changes** 4. **Test Your Changes**
- Build and lint everything.
- Test in our demo website - Test in our demo website
- Test it on other websites if applicable - Test it on other websites if applicable
- `@TODO: test suite` - `@TODO: test suite`
@@ -93,7 +95,7 @@ This is a **monorepo** with npm workspaces containing **4 main packages**:
### Vibe Coding with AI ### 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**. - 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. - 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 - **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). - 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 ### Extension Development
```bash ```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. > 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 ## 🚫 What We Don't Accept
- Breaking changes and large PRs without prior discussion - 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. 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? ## 💬 Questions?

View File

@@ -114,8 +114,8 @@ file and in the node_modules directory after installation.
<a href="https://www.star-history.com/?repos=alibaba%2Fpage-agent&type=date"> <a href="https://www.star-history.com/?repos=alibaba%2Fpage-agent&type=date">
<picture> <picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/image?repos=alibaba/page-agent&type=date&theme=dark&legend=top-left&r=1" /> <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/image?repos=alibaba/page-agent&type=date&theme=dark&legend=top-left&v=2" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/image?repos=alibaba/page-agent&type=date&legend=top-left&r=1" /> <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/image?repos=alibaba/page-agent&type=date&legend=top-left&v=2" />
<img alt="Star History Chart" src="https://api.star-history.com/image?repos=alibaba/page-agent&type=date&legend=top-left&r=1" /> <img alt="Star History Chart" src="https://api.star-history.com/image?repos=alibaba/page-agent&type=date&legend=top-left&v=2" />
</picture> </picture>
</a> </a>

View File

@@ -114,8 +114,8 @@ file and in the node_modules directory after installation.
<a href="https://www.star-history.com/?repos=alibaba%2Fpage-agent&type=date"> <a href="https://www.star-history.com/?repos=alibaba%2Fpage-agent&type=date">
<picture> <picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/image?repos=alibaba/page-agent&type=date&theme=dark&legend=top-left&r=1" /> <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/image?repos=alibaba/page-agent&type=date&theme=dark&legend=top-left&v=2" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/image?repos=alibaba/page-agent&type=date&legend=top-left&r=1" /> <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/image?repos=alibaba/page-agent&type=date&legend=top-left&v=2" />
<img alt="Star History Chart" src="https://api.star-history.com/image?repos=alibaba/page-agent&type=date&legend=top-left&r=1" /> <img alt="Star History Chart" src="https://api.star-history.com/image?repos=alibaba/page-agent&type=date&legend=top-left&v=2" />
</picture> </picture>
</a> </a>

445
package-lock.json generated
View File

@@ -18,13 +18,13 @@
"packages/website" "packages/website"
], ],
"devDependencies": { "devDependencies": {
"@commitlint/cli": "^20.4.2", "@commitlint/cli": "^20.4.3",
"@commitlint/config-conventional": "^20.4.2", "@commitlint/config-conventional": "^20.4.3",
"@eslint/js": "^9.39.2", "@eslint/js": "^9.39.2",
"@microsoft/api-extractor": "^7.57.6", "@microsoft/api-extractor": "^7.57.7",
"@tailwindcss/vite": "^4.2.1", "@tailwindcss/vite": "^4.2.1",
"@trivago/prettier-plugin-sort-imports": "^6.0.2", "@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", "@vitejs/plugin-react-swc": "^4.1.0",
"chalk": "^5.6.2", "chalk": "^5.6.2",
"concurrently": "^9.2.1", "concurrently": "^9.2.1",
@@ -37,10 +37,10 @@
"eslint-plugin-react-x": "^2.13.0", "eslint-plugin-react-x": "^2.13.0",
"globals": "^17.4.0", "globals": "^17.4.0",
"husky": "^9.1.7", "husky": "^9.1.7",
"lint-staged": "^16.3.1", "lint-staged": "^16.3.2",
"prettier": "^3.8.0", "prettier": "^3.8.0",
"typescript": "^5.9.3", "typescript": "^5.9.3",
"typescript-eslint": "^8.56.1", "typescript-eslint": "^8.57.0",
"unplugin-dts": "^1.0.0-beta.6", "unplugin-dts": "^1.0.0-beta.6",
"vite": "^7.3.1", "vite": "^7.3.1",
"vite-bundle-analyzer": "^1.3.6", "vite-bundle-analyzer": "^1.3.6",
@@ -468,17 +468,17 @@
} }
}, },
"node_modules/@commitlint/cli": { "node_modules/@commitlint/cli": {
"version": "20.4.2", "version": "20.4.3",
"resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-20.4.2.tgz", "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-20.4.3.tgz",
"integrity": "sha512-YjYSX2yj/WsVoxh9mNiymfFS2ADbg2EK4+1WAsMuckwKMCqJ5PDG0CJU/8GvmHWcv4VRB2V02KqSiecRksWqZQ==", "integrity": "sha512-Z37EMoDT7+Upg500vlr/vZrgRsb6Xc5JAA3Tv7BYbobnN/ZpqUeZnSLggBg2+1O+NptRDtyujr2DD1CPV2qwhA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@commitlint/format": "^20.4.0", "@commitlint/format": "^20.4.3",
"@commitlint/lint": "^20.4.2", "@commitlint/lint": "^20.4.3",
"@commitlint/load": "^20.4.0", "@commitlint/load": "^20.4.3",
"@commitlint/read": "^20.4.0", "@commitlint/read": "^20.4.3",
"@commitlint/types": "^20.4.0", "@commitlint/types": "^20.4.3",
"tinyexec": "^1.0.0", "tinyexec": "^1.0.0",
"yargs": "^17.0.0" "yargs": "^17.0.0"
}, },
@@ -490,27 +490,27 @@
} }
}, },
"node_modules/@commitlint/config-conventional": { "node_modules/@commitlint/config-conventional": {
"version": "20.4.2", "version": "20.4.3",
"resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-20.4.2.tgz", "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-20.4.3.tgz",
"integrity": "sha512-rwkTF55q7Q+6dpSKUmJoScV0f3EpDlWKw2UPzklkLS4o5krMN1tPWAVOgHRtyUTMneIapLeQwaCjn44Td6OzBQ==", "integrity": "sha512-9RtLySbYQAs8yEqWEqhSZo9nYhbm57jx7qHXtgRmv/nmeQIjjMcwf6Dl+y5UZcGWgWx435TAYBURONaJIuCjWg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@commitlint/types": "^20.4.0", "@commitlint/types": "^20.4.3",
"conventional-changelog-conventionalcommits": "^9.1.0" "conventional-changelog-conventionalcommits": "^9.2.0"
}, },
"engines": { "engines": {
"node": ">=v18" "node": ">=v18"
} }
}, },
"node_modules/@commitlint/config-validator": { "node_modules/@commitlint/config-validator": {
"version": "20.4.0", "version": "20.4.3",
"resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-20.4.0.tgz", "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-20.4.3.tgz",
"integrity": "sha512-zShmKTF+sqyNOfAE0vKcqnpvVpG0YX8F9G/ZIQHI2CoKyK+PSdladXMSns400aZ5/QZs+0fN75B//3Q5CHw++w==", "integrity": "sha512-jCZpZFkcSL3ZEdL5zgUzFRdytv3xPo8iukTe9VA+QGus/BGhpp1xXSVu2B006GLLb2gYUAEGEqv64kTlpZNgmA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@commitlint/types": "^20.4.0", "@commitlint/types": "^20.4.3",
"ajv": "^8.11.0" "ajv": "^8.11.0"
}, },
"engines": { "engines": {
@@ -518,13 +518,13 @@
} }
}, },
"node_modules/@commitlint/ensure": { "node_modules/@commitlint/ensure": {
"version": "20.4.1", "version": "20.4.3",
"resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-20.4.1.tgz", "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-20.4.3.tgz",
"integrity": "sha512-WLQqaFx1pBooiVvBrA1YfJNFqZF8wS/YGOtr5RzApDbV9tQ52qT5VkTsY65hFTnXhW8PcDfZLaknfJTmPejmlw==", "integrity": "sha512-WcXGKBNn0wBKpX8VlXgxqedyrLxedIlLBCMvdamLnJFEbUGJ9JZmBVx4vhLV3ZyA8uONGOb+CzW0Y9HDbQ+ONQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@commitlint/types": "^20.4.0", "@commitlint/types": "^20.4.3",
"lodash.camelcase": "^4.3.0", "lodash.camelcase": "^4.3.0",
"lodash.kebabcase": "^4.1.1", "lodash.kebabcase": "^4.1.1",
"lodash.snakecase": "^4.1.1", "lodash.snakecase": "^4.1.1",
@@ -546,13 +546,13 @@
} }
}, },
"node_modules/@commitlint/format": { "node_modules/@commitlint/format": {
"version": "20.4.0", "version": "20.4.3",
"resolved": "https://registry.npmjs.org/@commitlint/format/-/format-20.4.0.tgz", "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-20.4.3.tgz",
"integrity": "sha512-i3ki3WR0rgolFVX6r64poBHXM1t8qlFel1G1eCBvVgntE3fCJitmzSvH5JD/KVJN/snz6TfaX2CLdON7+s4WVQ==", "integrity": "sha512-UDJVErjLbNghop6j111rsHJYGw6MjCKAi95K0GT2yf4eeiDHy3JDRLWYWEjIaFgO+r+dQSkuqgJ1CdMTtrvHsA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@commitlint/types": "^20.4.0", "@commitlint/types": "^20.4.3",
"picocolors": "^1.1.1" "picocolors": "^1.1.1"
}, },
"engines": { "engines": {
@@ -560,13 +560,13 @@
} }
}, },
"node_modules/@commitlint/is-ignored": { "node_modules/@commitlint/is-ignored": {
"version": "20.4.1", "version": "20.4.3",
"resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-20.4.1.tgz", "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-20.4.3.tgz",
"integrity": "sha512-In5EO4JR1lNsAv1oOBBO24V9ND1IqdAJDKZiEpdfjDl2HMasAcT7oA+5BKONv1pRoLG380DGPE2W2RIcUwdgLA==", "integrity": "sha512-W5VQKZ7fdJ1X3Tko+h87YZaqRMGN1KvQKXyCM8xFdxzMIf1KCZgN4uLz3osLB1zsFcVS4ZswHY64LI26/9ACag==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@commitlint/types": "^20.4.0", "@commitlint/types": "^20.4.3",
"semver": "^7.6.0" "semver": "^7.6.0"
}, },
"engines": { "engines": {
@@ -574,33 +574,33 @@
} }
}, },
"node_modules/@commitlint/lint": { "node_modules/@commitlint/lint": {
"version": "20.4.2", "version": "20.4.3",
"resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-20.4.2.tgz", "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-20.4.3.tgz",
"integrity": "sha512-buquzNRtFng6xjXvBU1abY/WPEEjCgUipNQrNmIWe8QuJ6LWLtei/LDBAzEe5ASm45+Q9L2Xi3/GVvlj50GAug==", "integrity": "sha512-CYOXL23e+nRKij81+d0+dymtIi7Owl9QzvblJYbEfInON/4MaETNSLFDI74LDu+YJ0ML5HZyw9Vhp9QpckwQ0A==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@commitlint/is-ignored": "^20.4.1", "@commitlint/is-ignored": "^20.4.3",
"@commitlint/parse": "^20.4.1", "@commitlint/parse": "^20.4.3",
"@commitlint/rules": "^20.4.2", "@commitlint/rules": "^20.4.3",
"@commitlint/types": "^20.4.0" "@commitlint/types": "^20.4.3"
}, },
"engines": { "engines": {
"node": ">=v18" "node": ">=v18"
} }
}, },
"node_modules/@commitlint/load": { "node_modules/@commitlint/load": {
"version": "20.4.0", "version": "20.4.3",
"resolved": "https://registry.npmjs.org/@commitlint/load/-/load-20.4.0.tgz", "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-20.4.3.tgz",
"integrity": "sha512-Dauup/GfjwffBXRJUdlX/YRKfSVXsXZLnINXKz0VZkXdKDcaEILAi9oflHGbfydonJnJAbXEbF3nXPm9rm3G6A==", "integrity": "sha512-3cdJOUVP+VcgHa7bhJoWS+Z8mBNXB5aLWMBu7Q7uX8PSeWDzdbrBlR33J1MGGf7r1PZDp+mPPiFktk031PgdRw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@commitlint/config-validator": "^20.4.0", "@commitlint/config-validator": "^20.4.3",
"@commitlint/execute-rule": "^20.0.0", "@commitlint/execute-rule": "^20.0.0",
"@commitlint/resolve-extends": "^20.4.0", "@commitlint/resolve-extends": "^20.4.3",
"@commitlint/types": "^20.4.0", "@commitlint/types": "^20.4.3",
"cosmiconfig": "^9.0.0", "cosmiconfig": "^9.0.1",
"cosmiconfig-typescript-loader": "^6.1.0", "cosmiconfig-typescript-loader": "^6.1.0",
"is-plain-obj": "^4.1.0", "is-plain-obj": "^4.1.0",
"lodash.mergewith": "^4.6.2", "lodash.mergewith": "^4.6.2",
@@ -611,9 +611,9 @@
} }
}, },
"node_modules/@commitlint/message": { "node_modules/@commitlint/message": {
"version": "20.4.0", "version": "20.4.3",
"resolved": "https://registry.npmjs.org/@commitlint/message/-/message-20.4.0.tgz", "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-20.4.3.tgz",
"integrity": "sha512-B5lGtvHgiLAIsK5nLINzVW0bN5hXv+EW35sKhYHE8F7V9Uz1fR4tx3wt7mobA5UNhZKUNgB/+ldVMQE6IHZRyA==", "integrity": "sha512-6akwCYrzcrFcTYz9GyUaWlhisY4lmQ3KvrnabmhoeAV8nRH4dXJAh4+EUQ3uArtxxKQkvxJS78hNX2EU3USgxQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
@@ -621,29 +621,29 @@
} }
}, },
"node_modules/@commitlint/parse": { "node_modules/@commitlint/parse": {
"version": "20.4.1", "version": "20.4.3",
"resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-20.4.1.tgz", "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-20.4.3.tgz",
"integrity": "sha512-XNtZjeRcFuAfUnhYrCY02+mpxwY4OmnvD3ETbVPs25xJFFz1nRo/25nHj+5eM+zTeRFvWFwD4GXWU2JEtoK1/w==", "integrity": "sha512-hzC3JCo3zs3VkQ833KnGVuWjWIzR72BWZWjQM7tY/7dfKreKAm7fEsy71tIFCRtxf2RtMP2d3RLF1U9yhFSccA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@commitlint/types": "^20.4.0", "@commitlint/types": "^20.4.3",
"conventional-changelog-angular": "^8.1.0", "conventional-changelog-angular": "^8.2.0",
"conventional-commits-parser": "^6.2.1" "conventional-commits-parser": "^6.3.0"
}, },
"engines": { "engines": {
"node": ">=v18" "node": ">=v18"
} }
}, },
"node_modules/@commitlint/read": { "node_modules/@commitlint/read": {
"version": "20.4.0", "version": "20.4.3",
"resolved": "https://registry.npmjs.org/@commitlint/read/-/read-20.4.0.tgz", "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-20.4.3.tgz",
"integrity": "sha512-QfpFn6/I240ySEGv7YWqho4vxqtPpx40FS7kZZDjUJ+eHxu3azfhy7fFb5XzfTqVNp1hNoI3tEmiEPbDB44+cg==", "integrity": "sha512-j42OWv3L31WfnP8WquVjHZRt03w50Y/gEE8FAyih7GQTrIv2+pZ6VZ6pWLD/ml/3PO+RV2SPtRtTp/MvlTb8rQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@commitlint/top-level": "^20.4.0", "@commitlint/top-level": "^20.4.3",
"@commitlint/types": "^20.4.0", "@commitlint/types": "^20.4.3",
"git-raw-commits": "^4.0.0", "git-raw-commits": "^4.0.0",
"minimist": "^1.2.8", "minimist": "^1.2.8",
"tinyexec": "^1.0.0" "tinyexec": "^1.0.0"
@@ -653,14 +653,14 @@
} }
}, },
"node_modules/@commitlint/resolve-extends": { "node_modules/@commitlint/resolve-extends": {
"version": "20.4.0", "version": "20.4.3",
"resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-20.4.0.tgz", "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-20.4.3.tgz",
"integrity": "sha512-ay1KM8q0t+/OnlpqXJ+7gEFQNlUtSU5Gxr8GEwnVf2TPN3+ywc5DzL3JCxmpucqxfHBTFwfRMXxPRRnR5Ki20g==", "integrity": "sha512-QucxcOy+00FhS9s4Uy0OyS5HeUV+hbC6OLqkTSIm6fwMdKva+OEavaCDuLtgd9akZZlsUo//XzSmPP3sLKBPog==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@commitlint/config-validator": "^20.4.0", "@commitlint/config-validator": "^20.4.3",
"@commitlint/types": "^20.4.0", "@commitlint/types": "^20.4.3",
"global-directory": "^4.0.1", "global-directory": "^4.0.1",
"import-meta-resolve": "^4.0.0", "import-meta-resolve": "^4.0.0",
"lodash.mergewith": "^4.6.2", "lodash.mergewith": "^4.6.2",
@@ -671,16 +671,16 @@
} }
}, },
"node_modules/@commitlint/rules": { "node_modules/@commitlint/rules": {
"version": "20.4.2", "version": "20.4.3",
"resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-20.4.2.tgz", "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-20.4.3.tgz",
"integrity": "sha512-oz83pnp5Yq6uwwTAabuVQPNlPfeD2Y5ZjMb7Wx8FSUlu4sLYJjbBWt8031Z0osCFPfHzAwSYrjnfDFKtuSMdKg==", "integrity": "sha512-Yuosd7Grn5qiT7FovngXLyRXTMUbj9PYiSkvUgWK1B5a7+ZvrbWDS7epeUapYNYatCy/KTpPFPbgLUdE+MUrBg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@commitlint/ensure": "^20.4.1", "@commitlint/ensure": "^20.4.3",
"@commitlint/message": "^20.4.0", "@commitlint/message": "^20.4.3",
"@commitlint/to-lines": "^20.0.0", "@commitlint/to-lines": "^20.0.0",
"@commitlint/types": "^20.4.0" "@commitlint/types": "^20.4.3"
}, },
"engines": { "engines": {
"node": ">=v18" "node": ">=v18"
@@ -697,9 +697,9 @@
} }
}, },
"node_modules/@commitlint/top-level": { "node_modules/@commitlint/top-level": {
"version": "20.4.0", "version": "20.4.3",
"resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-20.4.0.tgz", "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-20.4.3.tgz",
"integrity": "sha512-NDzq8Q6jmFaIIBC/GG6n1OQEaHdmaAAYdrZRlMgW6glYWGZ+IeuXmiymDvQNXPc82mVxq2KiE3RVpcs+1OeDeA==", "integrity": "sha512-qD9xfP6dFg5jQ3NMrOhG0/w5y3bBUsVGyJvXxdWEwBm8hyx4WOk3kKXw28T5czBYvyeCVJgJJ6aoJZUWDpaacQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -710,13 +710,13 @@
} }
}, },
"node_modules/@commitlint/types": { "node_modules/@commitlint/types": {
"version": "20.4.0", "version": "20.4.3",
"resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.4.0.tgz", "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.4.3.tgz",
"integrity": "sha512-aO5l99BQJ0X34ft8b0h7QFkQlqxC6e7ZPVmBKz13xM9O8obDaM1Cld4sQlJDXXU/VFuUzQ30mVtHjVz74TuStw==", "integrity": "sha512-51OWa1Gi6ODOasPmfJPq6js4pZoomima4XLZZCrkldaH2V5Nb3bVhNXPeT6XV0gubbainSpTw4zi68NqAeCNCg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"conventional-commits-parser": "^6.2.1", "conventional-commits-parser": "^6.3.0",
"picocolors": "^1.1.1" "picocolors": "^1.1.1"
}, },
"engines": { "engines": {
@@ -1685,9 +1685,9 @@
} }
}, },
"node_modules/@microsoft/api-extractor": { "node_modules/@microsoft/api-extractor": {
"version": "7.57.6", "version": "7.57.7",
"resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.57.6.tgz", "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.57.7.tgz",
"integrity": "sha512-0rFv/D8Grzw1Mjs2+8NGUR+o4h9LVm5zKRtMeWnpdB5IMJF4TeHCL1zR5LMCIudkOvyvjbhMG5Wjs0B5nqsrRQ==", "integrity": "sha512-kmnmVs32MFWbV5X6BInC1/TfCs7y1ugwxv1xHsAIj/DyUfoe7vtO0alRUgbQa57+yRGHBBjlNcEk33SCAt5/dA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -1700,7 +1700,7 @@
"@rushstack/ts-command-line": "5.3.3", "@rushstack/ts-command-line": "5.3.3",
"diff": "~8.0.2", "diff": "~8.0.2",
"lodash": "~4.17.23", "lodash": "~4.17.23",
"minimatch": "10.2.1", "minimatch": "10.2.3",
"resolve": "~1.22.1", "resolve": "~1.22.1",
"semver": "~7.5.4", "semver": "~7.5.4",
"source-map": "~0.6.1", "source-map": "~0.6.1",
@@ -3050,6 +3050,19 @@
"string-argv": "~0.3.1" "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": { "node_modules/@swc/core": {
"version": "1.15.11", "version": "1.15.11",
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.11.tgz", "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.11.tgz",
@@ -3788,9 +3801,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "25.3.3", "version": "25.4.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.3.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-25.4.0.tgz",
"integrity": "sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==", "integrity": "sha512-9wLpoeWuBlcbBpOY3XmzSTG3oscB6xjBEEtn+pYXTfhyXhIxC5FsBer2KTopBlvKEiW9l13po9fq+SJY/5lkhw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -3818,17 +3831,17 @@
} }
}, },
"node_modules/@typescript-eslint/eslint-plugin": { "node_modules/@typescript-eslint/eslint-plugin": {
"version": "8.56.1", "version": "8.57.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.1.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.0.tgz",
"integrity": "sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==", "integrity": "sha512-qeu4rTHR3/IaFORbD16gmjq9+rEs9fGKdX0kF6BKSfi+gCuG3RCKLlSBYzn/bGsY9Tj7KE/DAQStbp8AHJGHEQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@eslint-community/regexpp": "^4.12.2", "@eslint-community/regexpp": "^4.12.2",
"@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/scope-manager": "8.57.0",
"@typescript-eslint/type-utils": "8.56.1", "@typescript-eslint/type-utils": "8.57.0",
"@typescript-eslint/utils": "8.56.1", "@typescript-eslint/utils": "8.57.0",
"@typescript-eslint/visitor-keys": "8.56.1", "@typescript-eslint/visitor-keys": "8.57.0",
"ignore": "^7.0.5", "ignore": "^7.0.5",
"natural-compare": "^1.4.0", "natural-compare": "^1.4.0",
"ts-api-utils": "^2.4.0" "ts-api-utils": "^2.4.0"
@@ -3841,7 +3854,7 @@
"url": "https://opencollective.com/typescript-eslint" "url": "https://opencollective.com/typescript-eslint"
}, },
"peerDependencies": { "peerDependencies": {
"@typescript-eslint/parser": "^8.56.1", "@typescript-eslint/parser": "^8.57.0",
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
"typescript": ">=4.8.4 <6.0.0" "typescript": ">=4.8.4 <6.0.0"
} }
@@ -3857,16 +3870,16 @@
} }
}, },
"node_modules/@typescript-eslint/parser": { "node_modules/@typescript-eslint/parser": {
"version": "8.56.1", "version": "8.57.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.1.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.0.tgz",
"integrity": "sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==", "integrity": "sha512-XZzOmihLIr8AD1b9hL9ccNMzEMWt/dE2u7NyTY9jJG6YNiNthaD5XtUHVF2uCXZ15ng+z2hT3MVuxnUYhq6k1g==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/scope-manager": "8.57.0",
"@typescript-eslint/types": "8.56.1", "@typescript-eslint/types": "8.57.0",
"@typescript-eslint/typescript-estree": "8.56.1", "@typescript-eslint/typescript-estree": "8.57.0",
"@typescript-eslint/visitor-keys": "8.56.1", "@typescript-eslint/visitor-keys": "8.57.0",
"debug": "^4.4.3" "debug": "^4.4.3"
}, },
"engines": { "engines": {
@@ -3882,14 +3895,14 @@
} }
}, },
"node_modules/@typescript-eslint/project-service": { "node_modules/@typescript-eslint/project-service": {
"version": "8.56.1", "version": "8.57.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.1.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.0.tgz",
"integrity": "sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==", "integrity": "sha512-pR+dK0BlxCLxtWfaKQWtYr7MhKmzqZxuii+ZjuFlZlIGRZm22HnXFqa2eY+90MUz8/i80YJmzFGDUsi8dMOV5w==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/tsconfig-utils": "^8.56.1", "@typescript-eslint/tsconfig-utils": "^8.57.0",
"@typescript-eslint/types": "^8.56.1", "@typescript-eslint/types": "^8.57.0",
"debug": "^4.4.3" "debug": "^4.4.3"
}, },
"engines": { "engines": {
@@ -3904,14 +3917,14 @@
} }
}, },
"node_modules/@typescript-eslint/scope-manager": { "node_modules/@typescript-eslint/scope-manager": {
"version": "8.56.1", "version": "8.57.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.1.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.0.tgz",
"integrity": "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==", "integrity": "sha512-nvExQqAHF01lUM66MskSaZulpPL5pgy5hI5RfrxviLgzZVffB5yYzw27uK/ft8QnKXI2X0LBrHJFr1TaZtAibw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/types": "8.56.1", "@typescript-eslint/types": "8.57.0",
"@typescript-eslint/visitor-keys": "8.56.1" "@typescript-eslint/visitor-keys": "8.57.0"
}, },
"engines": { "engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0" "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -3922,9 +3935,9 @@
} }
}, },
"node_modules/@typescript-eslint/tsconfig-utils": { "node_modules/@typescript-eslint/tsconfig-utils": {
"version": "8.56.1", "version": "8.57.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.1.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.0.tgz",
"integrity": "sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==", "integrity": "sha512-LtXRihc5ytjJIQEH+xqjB0+YgsV4/tW35XKX3GTZHpWtcC8SPkT/d4tqdf1cKtesryHm2bgp6l555NYcT2NLvA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
@@ -3939,15 +3952,15 @@
} }
}, },
"node_modules/@typescript-eslint/type-utils": { "node_modules/@typescript-eslint/type-utils": {
"version": "8.56.1", "version": "8.57.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.1.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.0.tgz",
"integrity": "sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==", "integrity": "sha512-yjgh7gmDcJ1+TcEg8x3uWQmn8ifvSupnPfjP21twPKrDP/pTHlEQgmKcitzF/rzPSmv7QjJ90vRpN4U+zoUjwQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/types": "8.56.1", "@typescript-eslint/types": "8.57.0",
"@typescript-eslint/typescript-estree": "8.56.1", "@typescript-eslint/typescript-estree": "8.57.0",
"@typescript-eslint/utils": "8.56.1", "@typescript-eslint/utils": "8.57.0",
"debug": "^4.4.3", "debug": "^4.4.3",
"ts-api-utils": "^2.4.0" "ts-api-utils": "^2.4.0"
}, },
@@ -3964,9 +3977,9 @@
} }
}, },
"node_modules/@typescript-eslint/types": { "node_modules/@typescript-eslint/types": {
"version": "8.56.1", "version": "8.57.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.1.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.0.tgz",
"integrity": "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==", "integrity": "sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
@@ -3978,16 +3991,16 @@
} }
}, },
"node_modules/@typescript-eslint/typescript-estree": { "node_modules/@typescript-eslint/typescript-estree": {
"version": "8.56.1", "version": "8.57.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.1.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.0.tgz",
"integrity": "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==", "integrity": "sha512-m7faHcyVg0BT3VdYTlX8GdJEM7COexXxS6KqGopxdtkQRvBanK377QDHr4W/vIPAR+ah9+B/RclSW5ldVniO1Q==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/project-service": "8.56.1", "@typescript-eslint/project-service": "8.57.0",
"@typescript-eslint/tsconfig-utils": "8.56.1", "@typescript-eslint/tsconfig-utils": "8.57.0",
"@typescript-eslint/types": "8.56.1", "@typescript-eslint/types": "8.57.0",
"@typescript-eslint/visitor-keys": "8.56.1", "@typescript-eslint/visitor-keys": "8.57.0",
"debug": "^4.4.3", "debug": "^4.4.3",
"minimatch": "^10.2.2", "minimatch": "^10.2.2",
"semver": "^7.7.3", "semver": "^7.7.3",
@@ -4005,56 +4018,17 @@
"typescript": ">=4.8.4 <6.0.0" "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": { "node_modules/@typescript-eslint/utils": {
"version": "8.56.1", "version": "8.57.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.1.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.0.tgz",
"integrity": "sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==", "integrity": "sha512-5iIHvpD3CZe06riAsbNxxreP+MuYgVUsV0n4bwLH//VJmgtt54sQeY2GszntJ4BjYCpMzrfVh2SBnUQTtys2lQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.9.1", "@eslint-community/eslint-utils": "^4.9.1",
"@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/scope-manager": "8.57.0",
"@typescript-eslint/types": "8.56.1", "@typescript-eslint/types": "8.57.0",
"@typescript-eslint/typescript-estree": "8.56.1" "@typescript-eslint/typescript-estree": "8.57.0"
}, },
"engines": { "engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0" "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4069,13 +4043,13 @@
} }
}, },
"node_modules/@typescript-eslint/visitor-keys": { "node_modules/@typescript-eslint/visitor-keys": {
"version": "8.56.1", "version": "8.57.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.1.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.0.tgz",
"integrity": "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==", "integrity": "sha512-zm6xx8UT/Xy2oSr2ZXD0pZo7Jx2XsCoID2IUh9YSTFRu7z+WdwYTRk6LhUftm1crwqbuoF6I8zAFeCMw0YjwDg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/types": "8.56.1", "@typescript-eslint/types": "8.57.0",
"eslint-visitor-keys": "^5.0.0" "eslint-visitor-keys": "^5.0.0"
}, },
"engines": { "engines": {
@@ -4205,9 +4179,9 @@
} }
}, },
"node_modules/@wxt-dev/module-react": { "node_modules/@wxt-dev/module-react": {
"version": "1.1.5", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/@wxt-dev/module-react/-/module-react-1.1.5.tgz", "resolved": "https://registry.npmjs.org/@wxt-dev/module-react/-/module-react-1.2.1.tgz",
"integrity": "sha512-KgsUrsgH5rBT8MwiipnDEOHBXmLvTIdFICrI7KjngqSf9DpVRn92HsKmToxY0AYpkP19hHWta2oNYFTzmmm++g==", "integrity": "sha512-NkXhXP1KqbTmKuQ7LwESFUnQDxQRiHw98ZQ6cXKuulRvyxtyCfc6gOqbKMHPP9bp497UVHaozr3ZQj1lvcPPTQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -4217,6 +4191,7 @@
"url": "https://github.com/sponsors/wxt-dev" "url": "https://github.com/sponsors/wxt-dev"
}, },
"peerDependencies": { "peerDependencies": {
"vite": "^5.4.19 || ^6.3.4 || ^7.0.0 || ^8.0.0-0",
"wxt": ">=0.19.16" "wxt": ">=0.19.16"
} }
}, },
@@ -5249,9 +5224,9 @@
} }
}, },
"node_modules/conventional-changelog-angular": { "node_modules/conventional-changelog-angular": {
"version": "8.1.0", "version": "8.3.0",
"resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.1.0.tgz", "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.3.0.tgz",
"integrity": "sha512-GGf2Nipn1RUCAktxuVauVr1e3r8QrLP/B0lEUsFktmGqc3ddbQkhoJZHJctVU829U1c6mTSWftrVOCHaL85Q3w==", "integrity": "sha512-DOuBwYSqWzfwuRByY9O4oOIvDlkUCTDzfbOgcSbkY+imXXj+4tmrEFao3K+FxemClYfYnZzsvudbwrhje9VHDA==",
"dev": true, "dev": true,
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
@@ -5262,9 +5237,9 @@
} }
}, },
"node_modules/conventional-changelog-conventionalcommits": { "node_modules/conventional-changelog-conventionalcommits": {
"version": "9.1.0", "version": "9.3.0",
"resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-9.1.0.tgz", "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-9.3.0.tgz",
"integrity": "sha512-MnbEysR8wWa8dAEvbj5xcBgJKQlX/m0lhS8DsyAAWDHdfs2faDJxTgzRYlRYpXSe7UiKrIIlB4TrBKU9q9DgkA==", "integrity": "sha512-kYFx6gAyjSIMwNtASkI3ZE99U1fuVDJr0yTYgVy+I2QG46zNZfl2her+0+eoviG82c5WQvW1jMt1eOQTeJLodA==",
"dev": true, "dev": true,
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
@@ -5275,12 +5250,13 @@
} }
}, },
"node_modules/conventional-commits-parser": { "node_modules/conventional-commits-parser": {
"version": "6.2.1", "version": "6.3.0",
"resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.2.1.tgz", "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.3.0.tgz",
"integrity": "sha512-20pyHgnO40rvfI0NGF/xiEoFMkXDtkF8FwHvk5BokoFoCuTQRI8vrNCNFWUOfuolKJMm1tPCHc8GgYEtr1XRNA==", "integrity": "sha512-RfOq/Cqy9xV9bOA8N+ZH6DlrDR+5S3Mi0B5kACEjESpE+AviIpAptx9a9cFpWCCvgRtWT+0BbUw+e1BZfts9jg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@simple-libs/stream-utils": "^1.2.0",
"meow": "^13.0.0" "meow": "^13.0.0"
}, },
"bin": { "bin": {
@@ -5305,9 +5281,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/cosmiconfig": { "node_modules/cosmiconfig": {
"version": "9.0.0", "version": "9.0.1",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz",
"integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -6402,13 +6378,13 @@
} }
}, },
"node_modules/framer-motion": { "node_modules/framer-motion": {
"version": "12.34.5", "version": "12.35.2",
"resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.34.5.tgz", "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.35.2.tgz",
"integrity": "sha512-Z2dQ+o7BsfpJI3+u0SQUNCrN+ajCKJen1blC4rCHx1Ta2EOHs+xKJegLT2aaD9iSMbU3OoX+WabQXkloUbZmJQ==", "integrity": "sha512-dhfuEMaNo0hc+AEqyHiIfiJRNb9U9UQutE9FoKm5pjf7CMitp9xPEF1iWZihR1q86LBmo6EJ7S8cN8QXEy49AA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"motion-dom": "^12.34.5", "motion-dom": "^12.35.2",
"motion-utils": "^12.29.2", "motion-utils": "^12.29.2",
"tslib": "^2.4.0" "tslib": "^2.4.0"
}, },
@@ -6590,6 +6566,7 @@
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz",
"integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", "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, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -7741,9 +7718,9 @@
} }
}, },
"node_modules/lint-staged": { "node_modules/lint-staged": {
"version": "16.3.1", "version": "16.3.2",
"resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.3.1.tgz", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.3.2.tgz",
"integrity": "sha512-bqvvquXzFBAlSbluugR4KXAe4XnO/QZcKVszpkBtqLWa2KEiVy8n6Xp38OeUbv/gOJOX4Vo9u5pFt/ADvbm42Q==", "integrity": "sha512-xKqhC2AeXLwiAHXguxBjuChoTTWFC6Pees0SHPwOpwlvI3BH7ZADFPddAdN3pgo3aiKgPUx/bxE78JfUnxQnlg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -7927,9 +7904,9 @@
} }
}, },
"node_modules/lucide-react": { "node_modules/lucide-react": {
"version": "0.576.0", "version": "0.577.0",
"resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.576.0.tgz", "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.577.0.tgz",
"integrity": "sha512-koNxU14BXrxUfZQ9cUaP0ES1uyPZKYDjk31FQZB6dQ/x+tXk979sVAn9ppZ/pVeJJyOxVM8j1E+8QEuSc02Vug==", "integrity": "sha512-4LjoFv2eEPwYDPg/CUdBJQSDfPyzXCRrVW1X7jrx/trgxnxkHFjnVZINbzvzxjN70dxychOfg+FTYwBiS3pQ5A==",
"dev": true, "dev": true,
"license": "ISC", "license": "ISC",
"peerDependencies": { "peerDependencies": {
@@ -8033,16 +8010,16 @@
} }
}, },
"node_modules/minimatch": { "node_modules/minimatch": {
"version": "10.2.1", "version": "10.2.3",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.3.tgz",
"integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", "integrity": "sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==",
"dev": true, "dev": true,
"license": "BlueOak-1.0.0", "license": "BlueOak-1.0.0",
"dependencies": { "dependencies": {
"brace-expansion": "^5.0.2" "brace-expansion": "^5.0.2"
}, },
"engines": { "engines": {
"node": "20 || >=22" "node": "18 || 20 || >=22"
}, },
"funding": { "funding": {
"url": "https://github.com/sponsors/isaacs" "url": "https://github.com/sponsors/isaacs"
@@ -8121,13 +8098,13 @@
} }
}, },
"node_modules/motion": { "node_modules/motion": {
"version": "12.34.5", "version": "12.35.2",
"resolved": "https://registry.npmjs.org/motion/-/motion-12.34.5.tgz", "resolved": "https://registry.npmjs.org/motion/-/motion-12.35.2.tgz",
"integrity": "sha512-N06NLJ9IeBHeielRqIvYvjPfXuRdyTxa+9++BgpGa+hY2D7TcMkI6QzV3jaRuv0aZRXgMa7cPy9YcBUBisPzAQ==", "integrity": "sha512-8zCi1DkNyU6a/tgEHn/GnnXZDcaMpDHbDOGORY1Rg/6lcNMSOuvwDB3i4hMSOvxqMWArc/vrGaw/Xek1OP69/A==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"framer-motion": "^12.34.5", "framer-motion": "^12.35.2",
"tslib": "^2.4.0" "tslib": "^2.4.0"
}, },
"peerDependencies": { "peerDependencies": {
@@ -8148,9 +8125,9 @@
} }
}, },
"node_modules/motion-dom": { "node_modules/motion-dom": {
"version": "12.34.5", "version": "12.35.2",
"resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.34.5.tgz", "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.35.2.tgz",
"integrity": "sha512-k33CsnxO2K3gBRMUZT+vPmc4Utlb5menKdG0RyVNLtlqRaaJPRWlE9fXl8NTtfZ5z3G8TDvqSu0MENLqSTaHZA==", "integrity": "sha512-pWXFMTwvGDbx1Fe9YL5HZebv2NhvGBzRtiNUv58aoK7+XrsuaydQ0JGRKK2r+bTKlwgSWwWxHbP5249Qr/BNpg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -9512,9 +9489,9 @@
} }
}, },
"node_modules/simple-icons": { "node_modules/simple-icons": {
"version": "16.10.0", "version": "16.11.0",
"resolved": "https://registry.npmjs.org/simple-icons/-/simple-icons-16.10.0.tgz", "resolved": "https://registry.npmjs.org/simple-icons/-/simple-icons-16.11.0.tgz",
"integrity": "sha512-62kuxaG3pE+cFNerudUtwb9BLmudzayHrlHkvU9gf8Nxcj7VYOm9dh3WNbGaFk60aQtfnRyzViZaouFG2B45kg==", "integrity": "sha512-6vqbcdaT6PsgUXud9rrP9w+nrmRzzStMEvyDavMeGwDgZSYM4uJ3tH7zurgTLHJO0RnMqU3Q09Vgo7WdTXV1eA==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@@ -10075,16 +10052,16 @@
} }
}, },
"node_modules/typescript-eslint": { "node_modules/typescript-eslint": {
"version": "8.56.1", "version": "8.57.0",
"resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.56.1.tgz", "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.57.0.tgz",
"integrity": "sha512-U4lM6pjmBX7J5wk4szltF7I1cGBHXZopnAXCMXb3+fZ3B/0Z3hq3wS/CCUB2NZBNAExK92mCU2tEohWuwVMsDQ==", "integrity": "sha512-W8GcigEMEeB07xEZol8oJ26rigm3+bfPHxHvwbYUlu1fUDsGuQ7Hiskx5xGW/xM4USc9Ephe3jtv7ZYPQntHeA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/eslint-plugin": "8.56.1", "@typescript-eslint/eslint-plugin": "8.57.0",
"@typescript-eslint/parser": "8.56.1", "@typescript-eslint/parser": "8.57.0",
"@typescript-eslint/typescript-estree": "8.56.1", "@typescript-eslint/typescript-estree": "8.57.0",
"@typescript-eslint/utils": "8.56.1" "@typescript-eslint/utils": "8.57.0"
}, },
"engines": { "engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0" "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -11150,17 +11127,17 @@
"@types/chrome": "^0.1.37", "@types/chrome": "^0.1.37",
"@types/react": "^19.2.14", "@types/react": "^19.2.14",
"@types/react-dom": "^19.2.1", "@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", "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"idb": "^8.0.3", "idb": "^8.0.3",
"lucide-react": "^0.576.0", "lucide-react": "^0.577.0",
"motion": "^12.34.5", "motion": "^12.35.2",
"next-themes": "^0.4.6", "next-themes": "^0.4.6",
"react": "^19.2.4", "react": "^19.2.4",
"react-dom": "^19.2.4", "react-dom": "^19.2.4",
"rough-notation": "^0.5.1", "rough-notation": "^0.5.1",
"simple-icons": "^16.10.0", "simple-icons": "^16.11.0",
"sonner": "^2.0.7", "sonner": "^2.0.7",
"tailwind-merge": "^3.5.0", "tailwind-merge": "^3.5.0",
"tailwindcss": "^4.1.14", "tailwindcss": "^4.1.14",
@@ -11228,13 +11205,13 @@
"@types/react-dom": "^19.2.1", "@types/react-dom": "^19.2.1",
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"lucide-react": "^0.576.0", "lucide-react": "^0.577.0",
"motion": "^12.34.5", "motion": "^12.35.2",
"next-themes": "^0.4.6", "next-themes": "^0.4.6",
"react": "^19.2.4", "react": "^19.2.4",
"react-dom": "^19.2.4", "react-dom": "^19.2.4",
"rough-notation": "^0.5.1", "rough-notation": "^0.5.1",
"simple-icons": "^16.10.0", "simple-icons": "^16.11.0",
"sonner": "^2.0.7", "sonner": "^2.0.7",
"tailwind-merge": "^3.5.0", "tailwind-merge": "^3.5.0",
"tailwindcss": "^4.1.14", "tailwindcss": "^4.1.14",

View File

@@ -38,13 +38,13 @@
"prepare": "husky" "prepare": "husky"
}, },
"devDependencies": { "devDependencies": {
"@commitlint/cli": "^20.4.2", "@commitlint/cli": "^20.4.3",
"@commitlint/config-conventional": "^20.4.2", "@commitlint/config-conventional": "^20.4.3",
"@eslint/js": "^9.39.2", "@eslint/js": "^9.39.2",
"@microsoft/api-extractor": "^7.57.6", "@microsoft/api-extractor": "^7.57.7",
"@tailwindcss/vite": "^4.2.1", "@tailwindcss/vite": "^4.2.1",
"@trivago/prettier-plugin-sort-imports": "^6.0.2", "@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", "@vitejs/plugin-react-swc": "^4.1.0",
"chalk": "^5.6.2", "chalk": "^5.6.2",
"concurrently": "^9.2.1", "concurrently": "^9.2.1",
@@ -57,10 +57,10 @@
"eslint-plugin-react-x": "^2.13.0", "eslint-plugin-react-x": "^2.13.0",
"globals": "^17.4.0", "globals": "^17.4.0",
"husky": "^9.1.7", "husky": "^9.1.7",
"lint-staged": "^16.3.1", "lint-staged": "^16.3.2",
"prettier": "^3.8.0", "prettier": "^3.8.0",
"typescript": "^5.9.3", "typescript": "^5.9.3",
"typescript-eslint": "^8.56.1", "typescript-eslint": "^8.57.0",
"unplugin-dts": "^1.0.0-beta.6", "unplugin-dts": "^1.0.0-beta.6",
"vite": "^7.3.1", "vite": "^7.3.1",
"vite-plugin-css-injected-by-js": "^4.0.1", "vite-plugin-css-injected-by-js": "^4.0.1",

View File

@@ -20,17 +20,17 @@
"@types/chrome": "^0.1.37", "@types/chrome": "^0.1.37",
"@types/react": "^19.2.14", "@types/react": "^19.2.14",
"@types/react-dom": "^19.2.1", "@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", "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"idb": "^8.0.3", "idb": "^8.0.3",
"lucide-react": "^0.576.0", "lucide-react": "^0.577.0",
"motion": "^12.34.5", "motion": "^12.35.2",
"next-themes": "^0.4.6", "next-themes": "^0.4.6",
"react": "^19.2.4", "react": "^19.2.4",
"react-dom": "^19.2.4", "react-dom": "^19.2.4",
"rough-notation": "^0.5.1", "rough-notation": "^0.5.1",
"simple-icons": "^16.10.0", "simple-icons": "^16.11.0",
"sonner": "^2.0.7", "sonner": "^2.0.7",
"tailwind-merge": "^3.5.0", "tailwind-merge": "^3.5.0",
"tailwindcss": "^4.1.14", "tailwindcss": "^4.1.14",

View File

@@ -14,7 +14,6 @@ import {
scrollVertically, scrollVertically,
selectOptionElement, selectOptionElement,
} from './actions' } from './actions'
import { VIEWPORT_EXPANSION } from './constants'
import * as dom from './dom' import * as dom from './dom'
import type { FlatDomTree, InteractiveElementDomNode } from './dom/dom_tree/type' import type { FlatDomTree, InteractiveElementDomNode } from './dom/dom_tree/type'
import { getPageInfo } from './dom/getPageInfo' import { getPageInfo } from './dom/getPageInfo'
@@ -24,7 +23,6 @@ import { patchReact } from './patches/react'
* Configuration for PageController * Configuration for PageController
*/ */
export interface PageControllerConfig extends dom.DomConfig { export interface PageControllerConfig extends dom.DomConfig {
viewportExpansion?: number
/** Enable visual mask overlay during operations (default: false) */ /** Enable visual mask overlay during operations (default: false) */
enableMask?: boolean enableMask?: boolean
} }
@@ -131,7 +129,7 @@ export class PageController extends EventTarget {
const url = window.location.href const url = window.location.href
const title = document.title const title = document.title
const pi = getPageInfo() const pi = getPageInfo()
const viewportExpansion = this.config.viewportExpansion ?? VIEWPORT_EXPANSION const viewportExpansion = dom.resolveViewportExpansion(this.config.viewportExpansion)
await this.updateTree() await this.updateTree()

View File

@@ -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

View File

@@ -1,4 +1,3 @@
import { VIEWPORT_EXPANSION } from '../constants'
import domTree from './dom_tree/index.js' import domTree from './dom_tree/index.js'
import { import {
ElementDomNode, ElementDomNode,
@@ -7,7 +6,23 @@ import {
TextDomNode, TextDomNode,
} from './dom_tree/type' } 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 { export interface DomConfig {
viewportExpansion?: number
interactiveBlacklist?: (Element | (() => Element))[] interactiveBlacklist?: (Element | (() => Element))[]
interactiveWhitelist?: (Element | (() => Element))[] interactiveWhitelist?: (Element | (() => Element))[]
includeAttributes?: string[] includeAttributes?: string[]
@@ -21,6 +36,8 @@ export interface DomConfig {
const newElementsCache = new WeakMap<HTMLElement, string>() const newElementsCache = new WeakMap<HTMLElement, string>()
export function getFlatTree(config: DomConfig): FlatDomTree { export function getFlatTree(config: DomConfig): FlatDomTree {
const viewportExpansion = resolveViewportExpansion(config.viewportExpansion)
const interactiveBlacklist = [] as Element[] const interactiveBlacklist = [] as Element[]
for (const item of config.interactiveBlacklist || []) { for (const item of config.interactiveBlacklist || []) {
if (typeof item === 'function') { if (typeof item === 'function') {
@@ -43,7 +60,7 @@ export function getFlatTree(config: DomConfig): FlatDomTree {
doHighlightElements: true, doHighlightElements: true,
debugMode: true, debugMode: true,
focusHighlightIndex: -1, focusHighlightIndex: -1,
viewportExpansion: VIEWPORT_EXPANSION, viewportExpansion,
interactiveBlacklist, interactiveBlacklist,
interactiveWhitelist, interactiveWhitelist,
highlightOpacity: config.highlightOpacity ?? 0.0, highlightOpacity: config.highlightOpacity ?? 0.0,

View File

@@ -19,13 +19,13 @@
"@types/react-dom": "^19.2.1", "@types/react-dom": "^19.2.1",
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"lucide-react": "^0.576.0", "lucide-react": "^0.577.0",
"motion": "^12.34.5", "motion": "^12.35.2",
"next-themes": "^0.4.6", "next-themes": "^0.4.6",
"react": "^19.2.4", "react": "^19.2.4",
"react-dom": "^19.2.4", "react-dom": "^19.2.4",
"rough-notation": "^0.5.1", "rough-notation": "^0.5.1",
"simple-icons": "^16.10.0", "simple-icons": "^16.11.0",
"sonner": "^2.0.7", "sonner": "^2.0.7",
"tailwind-merge": "^3.5.0", "tailwind-merge": "^3.5.0",
"tailwindcss": "^4.1.14", "tailwindcss": "^4.1.14",