From 83381b96239bbe4f9443939be2d5389bf9891672 Mon Sep 17 00:00:00 2001 From: go0p Date: Mon, 14 Apr 2025 17:10:10 +0800 Subject: [PATCH] init wxt framework --- .cursor/rules/main.mdc | 578 +++ .gitignore | 44 +- README.md | 3 + package.json | 32 + pnpm-lock.yaml | 5408 +++++++++++++++++++++++ public/icon/icon128.png | Bin 0 -> 6704 bytes public/icon/icon16.png | Bin 0 -> 1940 bytes public/icon/icon48.png | Bin 0 -> 3062 bytes public/icon/yakitlogo.png | Bin 0 -> 51526 bytes public/yak.svg | 10 + src/assets/react.svg | 1 + src/components/ProxySwitch/index.css | 235 + src/components/ProxySwitch/index.tsx | 254 ++ src/entrypoints/background.ts | 36 + src/entrypoints/content.ts | 6 + src/entrypoints/options/App.css | 39 + src/entrypoints/options/App.tsx | 242 + src/entrypoints/options/index.html | 13 + src/entrypoints/options/main.tsx | 7 + src/entrypoints/options/style.css | 9 + src/entrypoints/popup/App.css | 73 + src/entrypoints/popup/App.tsx | 25 + src/entrypoints/popup/index.html | 13 + src/entrypoints/popup/main.tsx | 10 + src/entrypoints/popup/style.css | 69 + src/entrypoints/proxy.content/App.css | 303 ++ src/entrypoints/proxy.content/App.tsx | 356 ++ src/entrypoints/proxy.content/index.tsx | 39 + src/types/action.ts | 19 + src/types/proxy.ts | 45 + src/utils/proxy.ts | 106 + src/utils/storage.ts | 133 + tsconfig.json | 7 + wxt.config.ts | 31 + 34 files changed, 8126 insertions(+), 20 deletions(-) create mode 100644 .cursor/rules/main.mdc create mode 100644 README.md create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 public/icon/icon128.png create mode 100644 public/icon/icon16.png create mode 100644 public/icon/icon48.png create mode 100644 public/icon/yakitlogo.png create mode 100644 public/yak.svg create mode 100644 src/assets/react.svg create mode 100644 src/components/ProxySwitch/index.css create mode 100644 src/components/ProxySwitch/index.tsx create mode 100644 src/entrypoints/background.ts create mode 100644 src/entrypoints/content.ts create mode 100644 src/entrypoints/options/App.css create mode 100644 src/entrypoints/options/App.tsx create mode 100644 src/entrypoints/options/index.html create mode 100644 src/entrypoints/options/main.tsx create mode 100644 src/entrypoints/options/style.css create mode 100644 src/entrypoints/popup/App.css create mode 100644 src/entrypoints/popup/App.tsx create mode 100644 src/entrypoints/popup/index.html create mode 100644 src/entrypoints/popup/main.tsx create mode 100644 src/entrypoints/popup/style.css create mode 100644 src/entrypoints/proxy.content/App.css create mode 100644 src/entrypoints/proxy.content/App.tsx create mode 100644 src/entrypoints/proxy.content/index.tsx create mode 100644 src/types/action.ts create mode 100644 src/types/proxy.ts create mode 100644 src/utils/proxy.ts create mode 100644 src/utils/storage.ts create mode 100644 tsconfig.json create mode 100644 wxt.config.ts diff --git a/.cursor/rules/main.mdc b/.cursor/rules/main.mdc new file mode 100644 index 0000000..0014815 --- /dev/null +++ b/.cursor/rules/main.mdc @@ -0,0 +1,578 @@ +--- +description: 使用 WXT、React 和 TypeScript 构建代理管理扩展的指南 +globs: +alwaysApply: false +--- +--- +description: 使用 WXT、React 和 TypeScript 构建代理管理扩展的指南 +globs: "**/*.ts, **/*.tsx, **/*.js, **/*.jsx" +--- + +## 概览 + +](https://wxt.dev/) 是一个为浏览器扩展开发提供现代开发体验的框架。本指南将帮助您使用 WXT、React 和 TypeScript 重构类似 SwitchyOmega 的代理管理扩展。 + +## 项目结构 + +推荐使用以下项目结构: +``` +. +├── .output/ +├── .wxt/ +├── modules/ +├── public/ # 包含要复制到输出文件夹的任何文件,而无需WXT处理 +├── ord/ # 需要重构的旧代码 +├── src/ +│ │ ├── assets/ +│ │ ├── components/ +│ │ ├── composables/ +│ │ ├── entrypoints/ # 包含所有被捆绑到扩展名的入口点 +│ │ ├── hooks/ # 默认自动导入,包含项目用于 React 和 Solid 的钩子的源代码 +│ │ ├── utils/ +├── .env +├── .env.publish +├── app.config.ts +├── package.json +├── tsconfig.json +├── web-ext.config.ts # 配置浏览器启动 +├── wxt.config.ts # WXT项目的主要配置文件 + +``` + + +Different browsers provide different global variables for accessing the extension APIs (chrome provides chrome, firefox provides browser, etc). + +WXT merges these two into a unified API accessed through the browser variable. + +``` +import { browser } from 'wxt/browser'; + +browser.action.onClicked.addListener(() => { +// ... +}); +``` +TIP + +With auto-imports enabled, you don't even need to import this variable from wxt/browser! + +The browser variable WXT provides is a simple export of the browser or chrome globals provided by the browser at runtime: + + +export const browser = globalThis.browser?.runtime?.id +? globalThis.browser +: globalThis.chrome; +This means you can use the promise-style API for both MV2 and MV3, and it will work across all browsers (Chromium, Firefox, Safari, etc). + +Accessing Types +All types can be accessed via WXT's Browser namespace: + +``` +import { type Browser } from 'wxt/browser'; + +function handleMessage(message: any, sender: Browser.runtime.MessageSender) { +// ... +} +``` + +## 入口点设置 + +### 后台脚本 + +```typescript +// entrypoints/background/index.ts +import { defineBackground } from 'wxt/background'; +import { setupProxyManagement } from './proxy'; + +export default defineBackground({ + // 设置清单选项 + type: 'module', + + main() { + // 初始化代理管理 + setupProxyManagement(); + + // 监听消息 + browser.runtime.onMessage.addListener((message, sender) => { + if (message.type === 'SWITCH_PROXY') { + return handleProxySwitch(message.proxyId); + } + }); + }, +}); +``` + +### 弹出窗口 + +```html + + + + + + + 代理切换器 + + + +
+ + + +``` + +```tsx +// entrypoints/popup/index.tsx +import React from 'react'; +import { createRoot } from 'react-dom/client'; +import App from './App'; + +const root = createRoot(document.getElementById('app')!); +root.render(); +``` + +```tsx +// entrypoints/popup/App.tsx +import React, { useState, useEffect } from 'react'; +import ProxySelector from '../../components/ProxySelector'; +import { getProxyList, getCurrentProxy } from '../../utils/proxy'; +import type { Proxy } from '../../types'; + +const App: React.FC = () => { + const [proxies, setProxies] = useState([]); + const [currentProxy, setCurrentProxy] = useState(null); + + useEffect(() => { + const loadData = async () => { + const proxyList = await getProxyList(); + const current = await getCurrentProxy(); + setProxies(proxyList); + setCurrentProxy(current); + }; + + loadData(); + }, []); + + const handleProxyChange = async (proxyId: string) => { + await browser.runtime.sendMessage({ type: 'SWITCH_PROXY', proxyId }); + setCurrentProxy(proxyId); + }; + + return ( +
+

代理切换器

+ +
+ ); +}; + +export default App; +``` + +### 选项页面 + +```html + + + + + + + 代理切换器设置 + + + +
+ + + +``` + +```tsx +// entrypoints/options/App.tsx +import React, { useState, useEffect } from 'react'; +import { getProxyList, saveProxy, deleteProxy } from '../../utils/proxy'; +import type { Proxy } from '../../types'; + +const App: React.FC = () => { + const [proxies, setProxies] = useState([]); + const [newProxy, setNewProxy] = useState>({ + name: '', + host: '', + port: '', + protocol: 'http' + }); + + useEffect(() => { + loadProxies(); + }, []); + + const loadProxies = async () => { + const list = await getProxyList(); + setProxies(list); + }; + + const handleSaveProxy = async () => { + if (!newProxy.name || !newProxy.host || !newProxy.port) return; + + await saveProxy(newProxy as Proxy); + loadProxies(); + setNewProxy({ + name: '', + host: '', + port: '', + protocol: 'http' + }); + }; + + return ( +
+

代理管理器设置

+ +
+ {proxies.map(proxy => ( +
+ {proxy.name} ({proxy.protocol}://{proxy.host}:{proxy.port}) + +
+ ))} +
+ +
+

添加新代理

+ setNewProxy({...newProxy, name: e.target.value})} + /> + + setNewProxy({...newProxy, host: e.target.value})} + /> + setNewProxy({...newProxy, port: e.target.value})} + /> + +
+
+ ); +}; + +export default App; +``` + +### 内容脚本 + +```typescript +// entrypoints/content.ts +import { defineContentScript } from 'wxt/content-script'; + +export default defineContentScript({ + matches: [''], + + main() { + // 在页面中执行的内容脚本逻辑 + console.log('代理切换器内容脚本已加载'); + + // 根据需要与后台脚本通信 + browser.runtime.sendMessage({ type: 'CONTENT_SCRIPT_LOADED' }); + }, +}); +``` + +## 最佳实践 + +1. **使用 WXT 存储模块**: 利用 `@wxt-dev/storage` 管理扩展数据。 + + ```typescript + // 安装: npm install @wxt-dev/storage + + // utils/storage.ts + import { createStorage } from '@wxt-dev/storage'; + + export const storage = createStorage({ + proxies: { + defaultValue: [], + schema: z.array(z.object({ + id: z.string(), + name: z.string(), + protocol: z.enum(['http', 'https', 'socks4', 'socks5']), + host: z.string(), + port: z.string() + })) + }, + currentProxyId: { + defaultValue: null, + schema: z.string().nullable() + } + }); + ``` + +2. **组件化开发**: 创建可重用的React组件。 + + ```tsx + // components/ProxySelector.tsx + import React from 'react'; + import type { Proxy } from '../types'; + + interface ProxySelectorProps { + proxies: Proxy[]; + currentProxy: string | null; + onChange: (proxyId: string) => void; + } + + const ProxySelector: React.FC = ({ proxies, currentProxy, onChange }) => { + return ( +
+ {proxies.map(proxy => ( +
onChange(proxy.id)} + > + {proxy.name} +
+ ))} +
+ ); + }; + + export default ProxySelector; + ``` + +3. **类型安全**: 为所有对象定义TypeScript接口。 + + ```typescript + // types/index.ts + export interface Proxy { + id: string; + name: string; + protocol: 'http' | 'https' | 'socks4' | 'socks5'; + host: string; + port: string; + username?: string; + password?: string; + } + + export interface ProxyRule { + id: string; + name: string; + pattern: string; + proxyId: string; + } + ``` + +4. **使用环境变量**: 为不同环境配置不同的设置。 + + ```typescript + // wxt.config.ts + import { defineConfig } from 'wxt'; + + export default defineConfig({ + manifest: { + name: process.env.NODE_ENV === 'development' ? '[DEV] 代理切换器' : '代理切换器', + version: '1.0.0', + description: '一个强大的浏览器代理管理扩展', + }, + // 其他配置... + }); + ``` + +5. **消息通信**: 使用结构化消息系统。 + + ```typescript + // utils/messaging.ts + export type MessageType = + | { type: 'SWITCH_PROXY'; proxyId: string } + | { type: 'GET_CURRENT_PROXY' } + | { type: 'PROXY_CHANGED'; proxyId: string }; + + export function sendMessage(message: T): Promise { + return browser.runtime.sendMessage(message); + } + ``` + +6. **图标状态管理**: 根据当前代理状态更新扩展图标。 + + ```typescript + // background/proxy.ts + function updateExtensionIcon(proxyId: string | null) { + const iconPath = proxyId + ? '/icons/proxy-active.png' + : '/icons/proxy-inactive.png'; + + browser.action.setIcon({ path: iconPath }); + } + ``` + +7. **错误处理**: 实现良好的错误捕获和报告。 + + ```typescript + // utils/error.ts + export async function executeWithErrorHandling( + fn: () => Promise, + errorMessage = '执行操作时出错' + ): Promise { + try { + return await fn(); + } catch (error) { + console.error(`${errorMessage}:`, error); + browser.notifications.create({ + type: 'basic', + iconUrl: '/icon-48.png', + title: '代理切换器错误', + message: errorMessage + }); + return null; + } + } + ``` + +8. **使用现代钩子**: 为React组件编写自定义钩子。 + + ```typescript + // hooks/useProxies.ts + import { useState, useEffect } from 'react'; + import { storage } from '../utils/storage'; + import type { Proxy } from '../types'; + + export function useProxies() { + const [proxies, setProxies] = useState([]); + const [loading, setLoading] = useState(true); + + useEffect(() => { + const load = async () => { + const data = await storage.proxies.get(); + setProxies(data); + setLoading(false); + }; + + load(); + + return storage.proxies.subscribe(newProxies => { + setProxies(newProxies); + }); + }, []); + + return { proxies, loading }; + } + ``` + +## 版本兼容性 + +本指南适用于: +- WXT v0.20.0 及以上 +- React 18+ +- TypeScript 5.0+ + +## 扩展功能实现 + +### 代理管理功能 + +```typescript +// utils/proxy.ts +import { storage } from './storage'; +import { v4 as uuidv4 } from 'uuid'; +import type { Proxy } from '../types'; + +export async function getProxyList(): Promise { + return await storage.proxies.get(); +} + +export async function getCurrentProxy(): Promise { + return await storage.currentProxyId.get(); +} + +export async function switchProxy(proxyId: string | null): Promise { + // 更新存储 + await storage.currentProxyId.set(proxyId); + + if (!proxyId) { + // 清除代理 + await browser.proxy.settings.clear({}); + return; + } + + // 获取代理详情 + const proxies = await storage.proxies.get(); + const proxy = proxies.find(p => p.id === proxyId); + + if (!proxy) return; + + // 设置代理 + await browser.proxy.settings.set({ + value: { + mode: 'fixed_servers', + rules: { + proxyForHttp: { + scheme: proxy.protocol, + host: proxy.host, + port: parseInt(proxy.port) + }, + proxyForHttps: { + scheme: proxy.protocol, + host: proxy.host, + port: parseInt(proxy.port) + } + } + }, + scope: 'regular' + }); +} + +export async function saveProxy(proxy: Omit): Promise { + const newProxy: Proxy = { + ...proxy, + id: uuidv4() + }; + + const proxies = await storage.proxies.get(); + await storage.proxies.set([...proxies, newProxy]); + + return newProxy; +} + +export async function deleteProxy(proxyId: string): Promise { + const proxies = await storage.proxies.get(); + await storage.proxies.set(proxies.filter(p => p.id !== proxyId)); + + // 如果删除的是当前使用的代理,清除当前代理 + const currentProxyId = await storage.currentProxyId.get(); + if (currentProxyId === proxyId) { + await storage.currentProxyId.set(null); + await browser.proxy.settings.clear({}); + } +} +``` + +## 相关资源 + +- [WXT 官方文档](mdc:https:/wxt.dev) +- [WXT GitHub 仓库](mdc:https:/github.com/wxt-dev/wxt) +- [Chrome 扩展 API 文档](mdc:https:/developer.chrome.com/docs/extensions/reference) +- [React 文档](mdc:https:/reactjs.org) +- [TypeScript 文档](mdc:https:/www.typescriptlang.org) diff --git a/.gitignore b/.gitignore index ba23eab..64f4000 100644 --- a/.gitignore +++ b/.gitignore @@ -3,28 +3,32 @@ build.crx build.zip build.pem .idea/ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# production -/build -/2.5.21_0 -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - +# Logs +logs +*.log npm-debug.log* yarn-debug.log* yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.output +stats.html +stats-*.json +.wxt +web-ext.config.ts + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + ord/ \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..78cf194 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# WXT + React + +This template should help get you started developing with React in WXT. diff --git a/package.json b/package.json new file mode 100644 index 0000000..486ddb2 --- /dev/null +++ b/package.json @@ -0,0 +1,32 @@ +{ + "name": "yakit-chrome-client", + "description": "Yakit Browser Extension", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "wxt", + "dev:firefox": "wxt -b firefox", + "build": "wxt build", + "build:firefox": "wxt build -b firefox", + "zip": "wxt zip", + "zip:firefox": "wxt zip -b firefox", + "compile": "tsc --noEmit", + "postinstall": "wxt prepare" + }, + "dependencies": { + "@ant-design/icons": "^6.0.0", + "antd": "^5.24.6", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "uuid": "^11.1.0" + }, + "devDependencies": { + "@types/react": "^19.1.0", + "@types/react-dom": "^19.1.2", + "@types/uuid": "^10.0.0", + "@wxt-dev/module-react": "^1.1.3", + "typescript": "^5.8.3", + "wxt": "^0.20.0" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..8c33e87 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,5408 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@ant-design/icons': + specifier: ^6.0.0 + version: 6.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + antd: + specifier: ^5.24.6 + version: 5.24.6(moment@2.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: + specifier: ^19.1.0 + version: 19.1.0 + react-dom: + specifier: ^19.1.0 + version: 19.1.0(react@19.1.0) + uuid: + specifier: ^11.1.0 + version: 11.1.0 + devDependencies: + '@types/react': + specifier: ^19.1.0 + version: 19.1.1 + '@types/react-dom': + specifier: ^19.1.2 + version: 19.1.2(@types/react@19.1.1) + '@types/uuid': + specifier: ^10.0.0 + version: 10.0.0 + '@wxt-dev/module-react': + specifier: ^1.1.3 + version: 1.1.3(vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2))(wxt@0.20.0(@types/node@22.14.1)(jiti@2.4.2)(rollup@4.40.0)) + typescript: + specifier: ^5.8.3 + version: 5.8.3 + wxt: + specifier: ^0.20.0 + version: 0.20.0(@types/node@22.14.1)(jiti@2.4.2)(rollup@4.40.0) + +packages: + + '@1natsu/wait-element@4.1.2': + resolution: {integrity: sha512-qWxSJD+Q5b8bKOvESFifvfZ92DuMsY+03SBNjTO34ipJLP6mZ9yK4bQz/vlh48aEQXoJfaZBqUwKL5BdI5iiWw==} + + '@aklinker1/rollup-plugin-visualizer@5.12.0': + resolution: {integrity: sha512-X24LvEGw6UFmy0lpGJDmXsMyBD58XmX1bbwsaMLhNoM+UMQfQ3b2RtC+nz4b/NoRK5r6QJSKJHBNVeUdwqybaQ==} + engines: {node: '>=14'} + hasBin: true + peerDependencies: + rollup: 2.x || 3.x || 4.x + peerDependenciesMeta: + rollup: + optional: true + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@ant-design/colors@7.2.0': + resolution: {integrity: sha512-bjTObSnZ9C/O8MB/B4OUtd/q9COomuJAR2SYfhxLyHvCKn4EKwCN3e+fWGMo7H5InAyV0wL17jdE9ALrdOW/6A==} + + '@ant-design/colors@8.0.0': + resolution: {integrity: sha512-6YzkKCw30EI/E9kHOIXsQDHmMvTllT8STzjMb4K2qzit33RW2pqCJP0sk+hidBntXxE+Vz4n1+RvCTfBw6OErw==} + + '@ant-design/cssinjs-utils@1.1.3': + resolution: {integrity: sha512-nOoQMLW1l+xR1Co8NFVYiP8pZp3VjIIzqV6D6ShYF2ljtdwWJn5WSsH+7kvCktXL/yhEtWURKOfH5Xz/gzlwsg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@ant-design/cssinjs@1.23.0': + resolution: {integrity: sha512-7GAg9bD/iC9ikWatU9ym+P9ugJhi/WbsTWzcKN6T4gU0aehsprtke1UAaaSxxkjjmkJb3llet/rbUSLPgwlY4w==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + + '@ant-design/fast-color@2.0.6': + resolution: {integrity: sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==} + engines: {node: '>=8.x'} + + '@ant-design/fast-color@3.0.0': + resolution: {integrity: sha512-eqvpP7xEDm2S7dUzl5srEQCBTXZMmY3ekf97zI+M2DHOYyKdJGH0qua0JACHTqbkRnD/KHFQP9J1uMJ/XWVzzA==} + engines: {node: '>=8.x'} + + '@ant-design/icons-svg@4.4.2': + resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==} + + '@ant-design/icons@5.6.1': + resolution: {integrity: sha512-0/xS39c91WjPAZOWsvi1//zjx6kAp4kxWwctR6kuU6p133w8RU0D2dSCvZC19uQyharg/sAvYxGYWl01BbZZfg==} + engines: {node: '>=8'} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + + '@ant-design/icons@6.0.0': + resolution: {integrity: sha512-o0aCCAlHc1o4CQcapAwWzHeaW2x9F49g7P3IDtvtNXgHowtRWYb7kiubt8sQPFvfVIVU/jLw2hzeSlNt0FU+Uw==} + engines: {node: '>=8'} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + + '@ant-design/react-slick@1.1.2': + resolution: {integrity: sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==} + peerDependencies: + react: '>=16.9.0' + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.8': + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.10': + resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.27.0': + resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.27.0': + resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.27.0': + resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.27.0': + resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-transform-react-jsx-self@7.25.9': + resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.25.9': + resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.24.7': + resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} + engines: {node: '>=6.9.0'} + + '@babel/runtime@7.27.0': + resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.27.0': + resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.27.0': + resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.27.0': + resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} + engines: {node: '>=6.9.0'} + + '@devicefarmer/adbkit-logcat@2.1.3': + resolution: {integrity: sha512-yeaGFjNBc/6+svbDeul1tNHtNChw6h8pSHAt5D+JsedUrMTN7tla7B15WLDyekxsuS2XlZHRxpuC6m92wiwCNw==} + engines: {node: '>= 4'} + + '@devicefarmer/adbkit-monkey@1.2.1': + resolution: {integrity: sha512-ZzZY/b66W2Jd6NHbAhLyDWOEIBWC11VizGFk7Wx7M61JZRz7HR9Cq5P+65RKWUU7u6wgsE8Lmh9nE4Mz+U2eTg==} + engines: {node: '>= 0.10.4'} + + '@devicefarmer/adbkit@3.2.6': + resolution: {integrity: sha512-8lO1hSeTgtxcOHhp4tTWq/JaOysp5KNbbyFoxNEBnwkCDZu/Bji3ZfOaG++Riv9jN6c9bgdLBOZqJTC5VJPRKQ==} + engines: {node: '>= 0.10.4'} + hasBin: true + + '@emotion/hash@0.8.0': + resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} + + '@emotion/unitless@0.7.5': + resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} + + '@esbuild/aix-ppc64@0.25.2': + resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.2': + resolution: {integrity: sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.2': + resolution: {integrity: sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.2': + resolution: {integrity: sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.2': + resolution: {integrity: sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.2': + resolution: {integrity: sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.2': + resolution: {integrity: sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.2': + resolution: {integrity: sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.2': + resolution: {integrity: sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.2': + resolution: {integrity: sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.2': + resolution: {integrity: sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.2': + resolution: {integrity: sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.2': + resolution: {integrity: sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.2': + resolution: {integrity: sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.2': + resolution: {integrity: sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.2': + resolution: {integrity: sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.2': + resolution: {integrity: sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.2': + resolution: {integrity: sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.2': + resolution: {integrity: sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.2': + resolution: {integrity: sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.2': + resolution: {integrity: sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.25.2': + resolution: {integrity: sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.2': + resolution: {integrity: sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.2': + resolution: {integrity: sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.2': + resolution: {integrity: sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@pnpm/config.env-replace@1.1.0': + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + + '@pnpm/network.ca-file@1.0.2': + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} + + '@pnpm/npm-conf@2.3.1': + resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} + engines: {node: '>=12'} + + '@rc-component/async-validator@5.0.4': + resolution: {integrity: sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==} + engines: {node: '>=14.x'} + + '@rc-component/color-picker@2.0.1': + resolution: {integrity: sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/context@1.4.0': + resolution: {integrity: sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/mini-decimal@1.1.0': + resolution: {integrity: sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==} + engines: {node: '>=8.x'} + + '@rc-component/mutate-observer@1.1.0': + resolution: {integrity: sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/portal@1.1.2': + resolution: {integrity: sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/qrcode@1.0.0': + resolution: {integrity: sha512-L+rZ4HXP2sJ1gHMGHjsg9jlYBX/SLN2D6OxP9Zn3qgtpMWtO2vUfxVFwiogHpAIqs54FnALxraUy/BCO1yRIgg==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/tour@1.15.1': + resolution: {integrity: sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/trigger@2.2.6': + resolution: {integrity: sha512-/9zuTnWwhQ3S3WT1T8BubuFTT46kvnXgaERR9f4BTKyn61/wpf/BvbImzYBubzJibU707FxwbKszLlHjcLiv1Q==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + '@rc-component/util@1.2.1': + resolution: {integrity: sha512-AUVu6jO+lWjQnUOOECwu8iR0EdElQgWW5NBv5vP/Uf9dWbAX3udhMutRlkVXjuac2E40ghkFy+ve00mc/3Fymg==} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + + '@rollup/rollup-android-arm-eabi@4.40.0': + resolution: {integrity: sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.40.0': + resolution: {integrity: sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.40.0': + resolution: {integrity: sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.40.0': + resolution: {integrity: sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.40.0': + resolution: {integrity: sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.40.0': + resolution: {integrity: sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.40.0': + resolution: {integrity: sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.40.0': + resolution: {integrity: sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.40.0': + resolution: {integrity: sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.40.0': + resolution: {integrity: sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loongarch64-gnu@4.40.0': + resolution: {integrity: sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-powerpc64le-gnu@4.40.0': + resolution: {integrity: sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-gnu@4.40.0': + resolution: {integrity: sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-musl@4.40.0': + resolution: {integrity: sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-s390x-gnu@4.40.0': + resolution: {integrity: sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.40.0': + resolution: {integrity: sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.40.0': + resolution: {integrity: sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-win32-arm64-msvc@4.40.0': + resolution: {integrity: sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.40.0': + resolution: {integrity: sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.40.0': + resolution: {integrity: sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==} + cpu: [x64] + os: [win32] + + '@sindresorhus/is@5.6.0': + resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} + engines: {node: '>=14.16'} + + '@szmarczak/http-timer@5.0.1': + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.7': + resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} + + '@types/estree@1.0.7': + resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + + '@types/filesystem@0.0.36': + resolution: {integrity: sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==} + + '@types/filewriter@0.0.33': + resolution: {integrity: sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==} + + '@types/har-format@1.2.16': + resolution: {integrity: sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==} + + '@types/http-cache-semantics@4.0.4': + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + + '@types/minimatch@3.0.5': + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} + + '@types/node@22.14.1': + resolution: {integrity: sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==} + + '@types/react-dom@19.1.2': + resolution: {integrity: sha512-XGJkWF41Qq305SKWEILa1O8vzhb3aOo3ogBlSmiqNko/WmRb6QIaweuZCXjKygVDXpzXb5wyxKTSOsmkuqj+Qw==} + peerDependencies: + '@types/react': ^19.0.0 + + '@types/react@19.1.1': + resolution: {integrity: sha512-ePapxDL7qrgqSF67s0h9m412d9DbXyC1n59O2st+9rjuuamWsZuD2w55rqY12CbzsZ7uVXb5Nw0gEp9Z8MMutQ==} + + '@types/uuid@10.0.0': + resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + + '@vitejs/plugin-react@4.3.4': + resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 + + '@webext-core/fake-browser@1.3.2': + resolution: {integrity: sha512-jFyPWWz+VkHAC9DRIiIPOyu6X/KlC8dYqSKweHz6tsDb86QawtVgZSpYcM+GOQBlZc5DHFo92jJ7cIq4uBnU0A==} + + '@webext-core/isolated-element@1.1.2': + resolution: {integrity: sha512-CNHYhsIR8TPkPb+4yqTIuzaGnVn/Fshev5fyoPW+/8Cyc93tJbCjP9PC1XSK6fDWu+xASdPHLZaoa2nWAYoxeQ==} + + '@webext-core/match-patterns@1.0.3': + resolution: {integrity: sha512-NY39ACqCxdKBmHgw361M9pfJma8e4AZo20w9AY+5ZjIj1W2dvXC8J31G5fjfOGbulW9w4WKpT8fPooi0mLkn9A==} + + '@wxt-dev/browser@0.0.310': + resolution: {integrity: sha512-0uQlrxUmbEczWFo2KGFTmJlQWpODqMDQOmQmIQGjQiiDs2aE4J6EsVmtmSSCXGMMYQ+jvNR+azf689xOWo0JGw==} + + '@wxt-dev/module-react@1.1.3': + resolution: {integrity: sha512-ede2FLS3sdJwtyI61jvY1UiF194ouv3wxm+fCYjfP4FfvoXQbif8UuusYBC0KSa/L2AL9Cfa/lEvsdNYrKFUaA==} + peerDependencies: + wxt: '>=0.19.16' + + '@wxt-dev/storage@1.1.1': + resolution: {integrity: sha512-H1vYWeoWz03INV4r+sLYDFil88b3rgMMfgGp/EXy3bLbveJeiMiFs/G0bsBN2Ra87Iqlf2oVYRb/ABQpAugbew==} + + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + engines: {node: '>=0.4.0'} + hasBin: true + + adm-zip@0.5.16: + resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} + engines: {node: '>=12.0'} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + antd@5.24.6: + resolution: {integrity: sha512-xIlTa/1CTbgkZsdU/dOXkYvJXb9VoiMwsaCzpKFH2zAEY3xqOfwQ57/DdG7lAdrWP7QORtSld4UA6suxzuTHXw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + array-differ@4.0.0: + resolution: {integrity: sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + array-union@3.0.1: + resolution: {integrity: sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==} + engines: {node: '>=12'} + + async-mutex@0.5.0: + resolution: {integrity: sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} + + bl@5.1.0: + resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} + + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + boxen@7.1.1: + resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} + engines: {node: '>=14.16'} + + bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + bunyan@1.8.15: + resolution: {integrity: sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==} + engines: {'0': node >=0.10.0} + hasBin: true + + c12@3.0.3: + resolution: {integrity: sha512-uC3MacKBb0Z15o5QWCHvHWj5Zv34pGQj9P+iXKSpTuSGFS0KKhUWf4t9AJ+gWjYOdmWCPEGpEzm8sS0iqbpo1w==} + peerDependencies: + magicast: ^0.3.5 + peerDependenciesMeta: + magicast: + optional: true + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + cacheable-lookup@7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + + cacheable-request@10.2.14: + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} + engines: {node: '>=14.16'} + + camelcase@7.0.1: + resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} + engines: {node: '>=14.16'} + + caniuse-lite@1.0.30001713: + resolution: {integrity: sha512-wCIWIg+A4Xr7NfhTuHdX+/FKh3+Op3LBbSp2N5Pfx6T/LhdQy3GTyoTg48BReaW/MyMNZAkTadsBtai3ldWK0Q==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chrome-launcher@1.1.0: + resolution: {integrity: sha512-rJYWeEAERwWIr3c3mEVXwNiODPEdMRlRxHc47B1qHPOolHZnkj7rMv1QSUfPoG6MgatWj5AxSpnKKR4QEwEQIQ==} + engines: {node: '>=12.13.0'} + hasBin: true + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + ci-info@4.2.0: + resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} + engines: {node: '>=8'} + + citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-highlight@2.1.11: + resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + commander@2.9.0: + resolution: {integrity: sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==} + engines: {node: '>= 0.6.x'} + + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + + compute-scroll-into-view@3.1.1: + resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concat-stream@1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + + config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + + configstore@6.0.0: + resolution: {integrity: sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==} + engines: {node: '>=12'} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + copy-to-clipboard@3.3.3: + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + crypto-random-string@4.0.0: + resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} + engines: {node: '>=12'} + + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + cssom@0.5.0: + resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + + debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dot-prop@6.0.1: + resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} + engines: {node: '>=10'} + + dotenv-expand@12.0.1: + resolution: {integrity: sha512-LaKRbou8gt0RNID/9RoI+J2rvXsBRPMV7p+ElHlPhcSARbCPDYcYG2s1TIzAfWv4YSgyY5taidWzzs31lNV3yQ==} + engines: {node: '>=12'} + + dotenv@16.5.0: + resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} + engines: {node: '>=12'} + + dtrace-provider@0.8.8: + resolution: {integrity: sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==} + engines: {node: '>=0.10'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + electron-to-chromium@1.5.136: + resolution: {integrity: sha512-kL4+wUTD7RSA5FHx5YwWtjDnEEkIIikFgWHR4P6fqjw1PPLlqYkxeOb++wAauAssat0YClCy8Y3C5SxgSkjibQ==} + + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + entities@6.0.0: + resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==} + engines: {node: '>=0.12'} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + + es6-error@4.1.1: + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + + esbuild@0.25.2: + resolution: {integrity: sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-goat@4.0.0: + resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} + engines: {node: '>=12'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + exsolve@1.0.4: + resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==} + + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + fdir@6.4.3: + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + filesize@10.1.6: + resolution: {integrity: sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==} + engines: {node: '>= 10.4.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + firefox-profile@4.6.0: + resolution: {integrity: sha512-I9rAm1w8U3CdhgO4EzTJsCvgcbvynZn9lOySkZf78wUdUIQH2w9QOKf3pAX+THt2XMSSR3kJSuM8P7bYux9j8g==} + hasBin: true + + form-data-encoder@2.1.4: + resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} + engines: {node: '>= 14.17'} + + formdata-node@6.0.3: + resolution: {integrity: sha512-8e1++BCiTzUno9v5IZ2J6bv4RU+3UKDmqWUQD0MIMVCd9AdhWkO1gw57oo1mNEX1dMq2EGI+FbWz4B92pscSQg==} + engines: {node: '>= 18'} + + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} + + fs-extra@9.0.1: + resolution: {integrity: sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==} + engines: {node: '>=10'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + fx-runner@1.4.0: + resolution: {integrity: sha512-rci1g6U0rdTg6bAaBboP7XdRu01dzTAaKXxFf+PUqGuCv6Xu7o8NZdY1D5MvKGIjb6EdS1g3VlXOgksir1uGkg==} + hasBin: true + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + engines: {node: '>=18'} + + get-port-please@3.1.2: + resolution: {integrity: sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + giget@2.0.0: + resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} + hasBin: true + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@6.0.4: + resolution: {integrity: sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==} + deprecated: Glob versions prior to v9 are no longer supported + + global-dirs@3.0.1: + resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} + engines: {node: '>=10'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + got@12.6.1: + resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} + engines: {node: '>=14.16'} + + graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graceful-readlink@1.0.1: + resolution: {integrity: sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==} + + growly@1.3.0: + resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-yarn@3.0.0: + resolution: {integrity: sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + + html-escaper@3.0.3: + resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} + + htmlparser2@10.0.0: + resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==} + + http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + + http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + + import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + + import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ini@2.0.0: + resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} + engines: {node: '>=10'} + + is-absolute@0.1.7: + resolution: {integrity: sha512-Xi9/ZSn4NFapG8RP98iNPMOeaV3mXPisxKxzKtHVqr3g56j/fBn+yZmnxSVAA8lmZbl2J9b/a4kJvfU3hqQYgA==} + engines: {node: '>=0.10.0'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-ci@3.0.1: + resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} + hasBin: true + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-installed-globally@0.4.0: + resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} + engines: {node: '>=10'} + + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + + is-npm@6.0.0: + resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + + is-primitive@3.0.1: + resolution: {integrity: sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==} + engines: {node: '>=0.10.0'} + + is-relative@0.1.3: + resolution: {integrity: sha512-wBOr+rNM4gkAZqoLRJI4myw5WzzIdQosFAAbnvfXP5z1LyzgAI3ivOKehC5KfqlQJZoihVhirgtCBj378Eg8GA==} + engines: {node: '>=0.10.0'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + is-yarn-global@0.4.1: + resolution: {integrity: sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==} + engines: {node: '>=12'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isexe@1.1.2: + resolution: {integrity: sha512-d2eJzK691yZwPHcv1LbeAOa91yMJ9QmfTgSO1oXB65ezVhXQsxBac2vEB4bMVms9cGzaA99n6V2viHMq82VLDw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@3.0.2: + resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + json2mq@0.2.0: + resolution: {integrity: sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + latest-version@7.0.0: + resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} + engines: {node: '>=14.16'} + + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + + lighthouse-logger@2.0.1: + resolution: {integrity: sha512-ioBrW3s2i97noEmnXxmUq7cjIcVRjT5HBpAYy8zE11CxU9HqlWHHeRxfeN1tn8F7OEMVPIC9x1f8t3Z7US9ehQ==} + + lines-and-columns@2.0.4: + resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + linkedom@0.18.9: + resolution: {integrity: sha512-Pfvhwjs46nBrcQdauQjMXDJZqj6VwN7KStT84xQqmIgD9bPH6UVJ/ESW8y4VHVF2h7di0/P+f4Iln4U5emRcmg==} + + listr2@8.3.2: + resolution: {integrity: sha512-vsBzcU4oE+v0lj4FhVLzr9dBTv4/fHIa57l+GCwovP8MoFNZJTOhGU8PXd4v2VJCbECAaijBiHntiekFMLvo0g==} + engines: {node: '>=18.0.0'} + + local-pkg@1.1.1: + resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} + engines: {node: '>=14'} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + + log-symbols@5.1.0: + resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} + engines: {node: '>=12'} + + log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + + lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + many-keys-map@2.0.1: + resolution: {integrity: sha512-DHnZAD4phTbZ+qnJdjoNEVU1NecYoSdbOOoVmTDH46AuxDkEVh3MxTVpXq10GtcTC6mndN9dkv1rNfpjRcLnOw==} + + marky@1.3.0: + resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + mimic-response@4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + + mlly@1.7.4: + resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + + moment@2.30.1: + resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multimatch@6.0.0: + resolution: {integrity: sha512-I7tSVxHGPlmPN/enE3mS1aOSo6bWBfls+3HmuEeCUBCE7gWnm3cBXCBkpurzFjVRwC6Kld8lLaZ1Iv5vOcjvcQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + mv@2.1.1: + resolution: {integrity: sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==} + engines: {node: '>=0.8.0'} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nan@2.22.2: + resolution: {integrity: sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==} + + nano-spawn@0.2.0: + resolution: {integrity: sha512-IjZBIOLxSlxu+m/kacg9JuP93oUpRemeV0mEuCy64nzBKKIL9m0aLJHtVPcVuzJDHFhElzjpwbW4a3tMzgKoZQ==} + engines: {node: '>=18.19'} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + ncp@2.0.0: + resolution: {integrity: sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==} + hasBin: true + + node-fetch-native@1.6.6: + resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==} + + node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + + node-notifier@10.0.1: + resolution: {integrity: sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-url@8.0.1: + resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} + engines: {node: '>=14.16'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + nypm@0.3.12: + resolution: {integrity: sha512-D3pzNDWIvgA+7IORhD/IuWzEk4uXv6GsgOxiid4UU3h9oq5IqV1KtPDi63n4sZJ/xcWlr88c0QM2RgN5VbOhFA==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + + nypm@0.6.0: + resolution: {integrity: sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + ofetch@1.4.1: + resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} + + ohash@1.1.6: + resolution: {integrity: sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg==} + + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + open@10.1.0: + resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} + engines: {node: '>=18'} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + + ora@6.3.1: + resolution: {integrity: sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + ora@8.2.0: + resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} + engines: {node: '>=18'} + + os-shim@0.1.3: + resolution: {integrity: sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A==} + engines: {node: '>= 0.4.0'} + + p-cancelable@3.0.0: + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} + + package-json@8.1.1: + resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} + engines: {node: '>=14.16'} + + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + + parse-json@7.1.1: + resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} + engines: {node: '>=16'} + + parse5-htmlparser2-tree-adapter@6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + + parse5@5.1.1: + resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.1.0: + resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} + + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + promise-toolbox@0.21.0: + resolution: {integrity: sha512-NV8aTmpwrZv+Iys54sSFOBx3tuVaOBvvrft5PNppnxy9xpU/akHbaWIril22AB22zaPgrgwKdD0KsrM0ptUtpg==} + engines: {node: '>=6'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + + publish-browser-extension@3.0.0: + resolution: {integrity: sha512-gwjH8mIepNqID2VqKIxzT6lmtvkcc5tcWYzrGSUdkeUFFFSHhGp9xx01EZ7j8wPq50dDe0XU5VNbHMAqr6wWAA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + + pupa@3.1.0: + resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} + engines: {node: '>=12.20'} + + quansync@0.2.10: + resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + rc-cascader@3.33.1: + resolution: {integrity: sha512-Kyl4EJ7ZfCBuidmZVieegcbFw0RcU5bHHSbtEdmuLYd0fYHCAiYKZ6zon7fWAVyC6rWWOOib0XKdTSf7ElC9rg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-checkbox@3.5.0: + resolution: {integrity: sha512-aOAQc3E98HteIIsSqm6Xk2FPKIER6+5vyEFMZfo73TqM+VVAIqOkHoPjgKLqSNtVLWScoaM7vY2ZrGEheI79yg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-collapse@3.9.0: + resolution: {integrity: sha512-swDdz4QZ4dFTo4RAUMLL50qP0EY62N2kvmk2We5xYdRwcRn8WcYtuetCJpwpaCbUfUt5+huLpVxhvmnK+PHrkA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-dialog@9.6.0: + resolution: {integrity: sha512-ApoVi9Z8PaCQg6FsUzS8yvBEQy0ZL2PkuvAgrmohPkN3okps5WZ5WQWPc1RNuiOKaAYv8B97ACdsFU5LizzCqg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-drawer@7.2.0: + resolution: {integrity: sha512-9lOQ7kBekEJRdEpScHvtmEtXnAsy+NGDXiRWc2ZVC7QXAazNVbeT4EraQKYwCME8BJLa8Bxqxvs5swwyOepRwg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-dropdown@4.2.1: + resolution: {integrity: sha512-YDAlXsPv3I1n42dv1JpdM7wJ+gSUBfeyPK59ZpBD9jQhK9jVuxpjj3NmWQHOBceA1zEPVX84T2wbdb2SD0UjmA==} + peerDependencies: + react: '>=16.11.0' + react-dom: '>=16.11.0' + + rc-field-form@2.7.0: + resolution: {integrity: sha512-hgKsCay2taxzVnBPZl+1n4ZondsV78G++XVsMIJCAoioMjlMQR9YwAp7JZDIECzIu2Z66R+f4SFIRrO2DjDNAA==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-image@7.11.1: + resolution: {integrity: sha512-XuoWx4KUXg7hNy5mRTy1i8c8p3K8boWg6UajbHpDXS5AlRVucNfTi5YxTtPBTBzegxAZpvuLfh3emXFt6ybUdA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-input-number@9.4.0: + resolution: {integrity: sha512-Tiy4DcXcFXAf9wDhN8aUAyMeCLHJUHA/VA/t7Hj8ZEx5ETvxG7MArDOSE6psbiSCo+vJPm4E3fGN710ITVn6GA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-input@1.7.3: + resolution: {integrity: sha512-A5w4egJq8+4JzlQ55FfQjDnPvOaAbzwC3VLOAdOytyek3TboSOP9qxN+Gifup+shVXfvecBLBbWBpWxmk02SWQ==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + + rc-mentions@2.19.1: + resolution: {integrity: sha512-KK3bAc/bPFI993J3necmaMXD2reZTzytZdlTvkeBbp50IGH1BDPDvxLdHDUrpQx2b2TGaVJsn+86BvYa03kGqA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-menu@9.16.1: + resolution: {integrity: sha512-ghHx6/6Dvp+fw8CJhDUHFHDJ84hJE3BXNCzSgLdmNiFErWSOaZNsihDAsKq9ByTALo/xkNIwtDFGIl6r+RPXBg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-motion@2.9.5: + resolution: {integrity: sha512-w+XTUrfh7ArbYEd2582uDrEhmBHwK1ZENJiSJVb7uRxdE7qJSYjbO2eksRXmndqyKqKoYPc9ClpPh5242mV1vA==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-notification@5.6.3: + resolution: {integrity: sha512-42szwnn8VYQoT6GnjO00i1iwqV9D1TTMvxObWsuLwgl0TsOokzhkYiufdtQBsJMFjJravS1hfDKVMHLKLcPE4g==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-overflow@1.4.1: + resolution: {integrity: sha512-3MoPQQPV1uKyOMVNd6SZfONi+f3st0r8PksexIdBTeIYbMX0Jr+k7pHEDvsXtR4BpCv90/Pv2MovVNhktKrwvw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-pagination@5.1.0: + resolution: {integrity: sha512-8416Yip/+eclTFdHXLKTxZvn70duYVGTvUUWbckCCZoIl3jagqke3GLsFrMs0bsQBikiYpZLD9206Ej4SOdOXQ==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-picker@4.11.3: + resolution: {integrity: sha512-MJ5teb7FlNE0NFHTncxXQ62Y5lytq6sh5nUw0iH8OkHL/TjARSEvSHpr940pWgjGANpjCwyMdvsEV55l5tYNSg==} + engines: {node: '>=8.x'} + peerDependencies: + date-fns: '>= 2.x' + dayjs: '>= 1.x' + luxon: '>= 3.x' + moment: '>= 2.x' + react: '>=16.9.0' + react-dom: '>=16.9.0' + peerDependenciesMeta: + date-fns: + optional: true + dayjs: + optional: true + luxon: + optional: true + moment: + optional: true + + rc-progress@4.0.0: + resolution: {integrity: sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-rate@2.13.1: + resolution: {integrity: sha512-QUhQ9ivQ8Gy7mtMZPAjLbxBt5y9GRp65VcUyGUMF3N3fhiftivPHdpuDIaWIMOTEprAjZPC08bls1dQB+I1F2Q==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-resize-observer@1.4.3: + resolution: {integrity: sha512-YZLjUbyIWox8E9i9C3Tm7ia+W7euPItNWSPX5sCcQTYbnwDb5uNpnLHQCG1f22oZWUhLw4Mv2tFmeWe68CDQRQ==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-segmented@2.7.0: + resolution: {integrity: sha512-liijAjXz+KnTRVnxxXG2sYDGd6iLL7VpGGdR8gwoxAXy2KglviKCxLWZdjKYJzYzGSUwKDSTdYk8brj54Bn5BA==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + + rc-select@14.16.6: + resolution: {integrity: sha512-YPMtRPqfZWOm2XGTbx5/YVr1HT0vn//8QS77At0Gjb3Lv+Lbut0IORJPKLWu1hQ3u4GsA0SrDzs7nI8JG7Zmyg==} + engines: {node: '>=8.x'} + peerDependencies: + react: '*' + react-dom: '*' + + rc-slider@11.1.8: + resolution: {integrity: sha512-2gg/72YFSpKP+Ja5AjC5DPL1YnV8DEITDQrcc1eASrUYjl0esptaBVJBh5nLTXCCp15eD8EuGjwezVGSHhs9tQ==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-steps@6.0.1: + resolution: {integrity: sha512-lKHL+Sny0SeHkQKKDJlAjV5oZ8DwCdS2hFhAkIjuQt1/pB81M0cA0ErVFdHq9+jmPmFw1vJB2F5NBzFXLJxV+g==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-switch@4.1.0: + resolution: {integrity: sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-table@7.50.4: + resolution: {integrity: sha512-Y+YuncnQqoS5e7yHvfvlv8BmCvwDYDX/2VixTBEhkMDk9itS9aBINp4nhzXFKiBP/frG4w0pS9d9Rgisl0T1Bw==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-tabs@15.5.2: + resolution: {integrity: sha512-Hbqf2IV6k/jPgfMjPtIDmPV0D0C9c/fN4B/fYcoh9qqaUzUZQoK0PYzsV3UaV+3UsmyoYt48p74m/HkLhGTw+w==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-textarea@1.9.0: + resolution: {integrity: sha512-dQW/Bc/MriPBTugj2Kx9PMS5eXCCGn2cxoIaichjbNvOiARlaHdI99j4DTxLl/V8+PIfW06uFy7kjfUIDDKyxQ==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-tooltip@6.4.0: + resolution: {integrity: sha512-kqyivim5cp8I5RkHmpsp1Nn/Wk+1oeloMv9c7LXNgDxUpGm+RbXJGL+OPvDlcRnx9DBeOe4wyOIl4OKUERyH1g==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-tree-select@5.27.0: + resolution: {integrity: sha512-2qTBTzwIT7LRI1o7zLyrCzmo5tQanmyGbSaGTIf7sYimCklAToVVfpMC6OAldSKolcnjorBYPNSKQqJmN3TCww==} + peerDependencies: + react: '*' + react-dom: '*' + + rc-tree@5.13.1: + resolution: {integrity: sha512-FNhIefhftobCdUJshO7M8uZTA9F4OPGVXqGfZkkD/5soDeOhwO06T/aKTrg0WD8gRg/pyfq+ql3aMymLHCTC4A==} + engines: {node: '>=10.x'} + peerDependencies: + react: '*' + react-dom: '*' + + rc-upload@4.8.1: + resolution: {integrity: sha512-toEAhwl4hjLAI1u8/CgKWt30BR06ulPa4iGQSMvSXoHzO88gPCslxqV/mnn4gJU7PDoltGIC9Eh+wkeudqgHyw==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-util@5.44.4: + resolution: {integrity: sha512-resueRJzmHG9Q6rI/DfK6Kdv9/Lfls05vzMs1Sk3M2P+3cJa+MakaZyWY8IPfehVuhPJFKrIY1IK4GqbiaiY5w==} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc-virtual-list@3.18.5: + resolution: {integrity: sha512-1FuxVSxhzTj3y8k5xMPbhXCB0t2TOiI3Tq+qE2Bu+GGV7f+ECVuQl4OUg6lZ2qT5fordTW7CBpr9czdzXCI7Pg==} + engines: {node: '>=8.x'} + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + + rc9@2.1.2: + resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + react-dom@19.1.0: + resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} + peerDependencies: + react: ^19.1.0 + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + + react@19.1.0: + resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + engines: {node: '>=0.10.0'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + registry-auth-token@5.1.0: + resolution: {integrity: sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==} + engines: {node: '>=14'} + + registry-url@6.0.1: + resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} + engines: {node: '>=12'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + resize-observer-polyfill@1.5.1: + resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} + + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + responselike@3.0.0: + resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} + engines: {node: '>=14.16'} + + restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rimraf@2.4.5: + resolution: {integrity: sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rollup@4.40.0: + resolution: {integrity: sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} + + run-applescript@7.0.0: + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + engines: {node: '>=18'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-json-stringify@1.2.0: + resolution: {integrity: sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==} + + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + + scheduler@0.26.0: + resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + + scroll-into-view-if-needed@3.1.0: + resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + + semver-diff@4.0.0: + resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} + engines: {node: '>=12'} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + set-value@4.1.0: + resolution: {integrity: sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==} + engines: {node: '>=11.0'} + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.7.3: + resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==} + + shellwords@0.1.1: + resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + spawn-sync@1.0.15: + resolution: {integrity: sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw==} + + split@1.0.1: + resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} + + stdin-discarder@0.1.0: + resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + + string-convert@0.2.1: + resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@5.0.0: + resolution: {integrity: sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==} + engines: {node: '>=12'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + strip-json-comments@5.0.1: + resolution: {integrity: sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==} + engines: {node: '>=14.16'} + + strip-literal@3.0.0: + resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} + + stylis@4.3.6: + resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + throttle-debounce@5.0.2: + resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==} + engines: {node: '>=12.22'} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyglobby@0.2.12: + resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} + engines: {node: '>=12.0.0'} + + titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} + + tmp@0.2.3: + resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} + engines: {node: '>=14.14'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toggle-selection@1.0.6: + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + + typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + + uhyphen@0.2.0: + resolution: {integrity: sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + unimport@4.2.0: + resolution: {integrity: sha512-mYVtA0nmzrysnYnyb3ALMbByJ+Maosee2+WyE0puXl+Xm2bUwPorPaaeZt0ETfuroPOtG8jj1g/qeFZ6buFnag==} + engines: {node: '>=18.12.0'} + + unique-string@3.0.0: + resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} + engines: {node: '>=12'} + + universalify@1.0.0: + resolution: {integrity: sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==} + engines: {node: '>= 10.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unplugin-utils@0.2.4: + resolution: {integrity: sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==} + engines: {node: '>=18.12.0'} + + unplugin@2.3.2: + resolution: {integrity: sha512-3n7YA46rROb3zSj8fFxtxC/PqoyvYQ0llwz9wtUPUutr9ig09C8gGo5CWCwHrUzlqC1LLR43kxp5vEIyH1ac1w==} + engines: {node: '>=18.12.0'} + + untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + update-notifier@6.0.2: + resolution: {integrity: sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==} + engines: {node: '>=14.16'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + hasBin: true + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + vite-node@3.1.1: + resolution: {integrity: sha512-V+IxPAE2FvXpTCHXyNem0M+gWm6J7eRyWPR6vYoG/Gl+IscNOjXzztUhimQgTxaAoUoj40Qqimaa0NLIOOAH4w==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite@6.2.6: + resolution: {integrity: sha512-9xpjNl3kR4rVDZgPNdTL0/c6ao4km69a/2ihNQbcANz8RuCOK3hQBmLSJf3bRKVQjVMda+YvizNE8AwvogcPbw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + watchpack@2.4.1: + resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} + engines: {node: '>=10.13.0'} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + web-ext-run@0.2.2: + resolution: {integrity: sha512-GD59q5/1wYQJXTHrljMZaBa3cCz+Jj3FMDLYgKyAa34TPcHSuMaGqp7TcLJ66PCe43C3hmbEAZd8QCpAB34eiw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + when@3.7.7: + resolution: {integrity: sha512-9lFZp/KHoqH6bPKjbWqa+3Dg/K/r2v0X/3/G2x4DBGchVS2QX2VXL3cZV994WQVnTM1/PD71Az25nAzryEUugw==} + + which@1.2.4: + resolution: {integrity: sha512-zDRAqDSBudazdfM9zpiI30Fu9ve47htYXcGi3ln0wfKu2a7SmrT6F3VDoYONu//48V8Vz4TdCRNPjtvyRO3yBA==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + widest-line@4.0.1: + resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} + engines: {node: '>=12'} + + winreg@0.0.12: + resolution: {integrity: sha512-typ/+JRmi7RqP1NanzFULK36vczznSNN8kWVA9vIqXyv8GhghUlwhGp1Xj3Nms1FsPcNnsQrJOR10N58/nQ9hQ==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + wxt@0.20.0: + resolution: {integrity: sha512-mu7zP/WlDwBfJ1ys9SPhgbu2vTdd0ulSXpHrkOPJR+Crx5MFFMFh1e3SeyzYt0N2AwFnkFUBlja7wqUUL6JPdQ==} + hasBin: true + + xdg-basedir@5.1.0: + resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} + engines: {node: '>=12'} + + xml2js@0.5.0: + resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} + engines: {node: '>=4.0.0'} + + xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + zip-dir@2.0.0: + resolution: {integrity: sha512-uhlsJZWz26FLYXOD6WVuq+fIcZ3aBPGo/cFdiLlv3KNwpa52IF3ISV8fLhQLiqVu5No3VhlqlgthN6gehil1Dg==} + + zod@3.24.2: + resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} + +snapshots: + + '@1natsu/wait-element@4.1.2': + dependencies: + defu: 6.1.4 + many-keys-map: 2.0.1 + + '@aklinker1/rollup-plugin-visualizer@5.12.0(rollup@4.40.0)': + dependencies: + open: 8.4.2 + picomatch: 2.3.1 + source-map: 0.7.4 + yargs: 17.7.2 + optionalDependencies: + rollup: 4.40.0 + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@ant-design/colors@7.2.0': + dependencies: + '@ant-design/fast-color': 2.0.6 + + '@ant-design/colors@8.0.0': + dependencies: + '@ant-design/fast-color': 3.0.0 + + '@ant-design/cssinjs-utils@1.1.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@ant-design/cssinjs': 1.23.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@babel/runtime': 7.27.0 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + '@ant-design/cssinjs@1.23.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.0 + '@emotion/hash': 0.8.0 + '@emotion/unitless': 0.7.5 + classnames: 2.5.1 + csstype: 3.1.3 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + stylis: 4.3.6 + + '@ant-design/fast-color@2.0.6': + dependencies: + '@babel/runtime': 7.27.0 + + '@ant-design/fast-color@3.0.0': {} + + '@ant-design/icons-svg@4.4.2': {} + + '@ant-design/icons@5.6.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@ant-design/colors': 7.2.0 + '@ant-design/icons-svg': 4.4.2 + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + '@ant-design/icons@6.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@ant-design/colors': 8.0.0 + '@ant-design/icons-svg': 4.4.2 + '@rc-component/util': 1.2.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + classnames: 2.5.1 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + '@ant-design/react-slick@1.1.2(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + json2mq: 0.2.0 + react: 19.1.0 + resize-observer-polyfill: 1.5.1 + throttle-debounce: 5.0.2 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.8': {} + + '@babel/core@7.26.10': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.27.0 + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helpers': 7.27.0 + '@babel/parser': 7.27.0 + '@babel/template': 7.27.0 + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.27.0': + dependencies: + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.27.0': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.27.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.27.0': + dependencies: + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 + + '@babel/parser@7.27.0': + dependencies: + '@babel/types': 7.27.0 + + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/runtime@7.24.7': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/runtime@7.27.0': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.27.0': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 + + '@babel/traverse@7.27.0': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.27.0 + '@babel/parser': 7.27.0 + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.27.0': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@devicefarmer/adbkit-logcat@2.1.3': {} + + '@devicefarmer/adbkit-monkey@1.2.1': {} + + '@devicefarmer/adbkit@3.2.6': + dependencies: + '@devicefarmer/adbkit-logcat': 2.1.3 + '@devicefarmer/adbkit-monkey': 1.2.1 + bluebird: 3.7.2 + commander: 9.5.0 + debug: 4.3.7 + node-forge: 1.3.1 + split: 1.0.1 + transitivePeerDependencies: + - supports-color + + '@emotion/hash@0.8.0': {} + + '@emotion/unitless@0.7.5': {} + + '@esbuild/aix-ppc64@0.25.2': + optional: true + + '@esbuild/android-arm64@0.25.2': + optional: true + + '@esbuild/android-arm@0.25.2': + optional: true + + '@esbuild/android-x64@0.25.2': + optional: true + + '@esbuild/darwin-arm64@0.25.2': + optional: true + + '@esbuild/darwin-x64@0.25.2': + optional: true + + '@esbuild/freebsd-arm64@0.25.2': + optional: true + + '@esbuild/freebsd-x64@0.25.2': + optional: true + + '@esbuild/linux-arm64@0.25.2': + optional: true + + '@esbuild/linux-arm@0.25.2': + optional: true + + '@esbuild/linux-ia32@0.25.2': + optional: true + + '@esbuild/linux-loong64@0.25.2': + optional: true + + '@esbuild/linux-mips64el@0.25.2': + optional: true + + '@esbuild/linux-ppc64@0.25.2': + optional: true + + '@esbuild/linux-riscv64@0.25.2': + optional: true + + '@esbuild/linux-s390x@0.25.2': + optional: true + + '@esbuild/linux-x64@0.25.2': + optional: true + + '@esbuild/netbsd-arm64@0.25.2': + optional: true + + '@esbuild/netbsd-x64@0.25.2': + optional: true + + '@esbuild/openbsd-arm64@0.25.2': + optional: true + + '@esbuild/openbsd-x64@0.25.2': + optional: true + + '@esbuild/sunos-x64@0.25.2': + optional: true + + '@esbuild/win32-arm64@0.25.2': + optional: true + + '@esbuild/win32-ia32@0.25.2': + optional: true + + '@esbuild/win32-x64@0.25.2': + optional: true + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@pnpm/config.env-replace@1.1.0': {} + + '@pnpm/network.ca-file@1.0.2': + dependencies: + graceful-fs: 4.2.10 + + '@pnpm/npm-conf@2.3.1': + dependencies: + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 + config-chain: 1.1.13 + + '@rc-component/async-validator@5.0.4': + dependencies: + '@babel/runtime': 7.27.0 + + '@rc-component/color-picker@2.0.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@ant-design/fast-color': 2.0.6 + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + '@rc-component/context@1.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.0 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + '@rc-component/mini-decimal@1.1.0': + dependencies: + '@babel/runtime': 7.27.0 + + '@rc-component/mutate-observer@1.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + '@rc-component/portal@1.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + '@rc-component/qrcode@1.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + '@rc-component/tour@1.15.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.0 + '@rc-component/portal': 1.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@rc-component/trigger': 2.2.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + '@rc-component/trigger@2.2.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@babel/runtime': 7.27.0 + '@rc-component/portal': 1.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + classnames: 2.5.1 + rc-motion: 2.9.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-resize-observer: 1.4.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + '@rc-component/util@1.2.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-is: 18.3.1 + + '@rollup/rollup-android-arm-eabi@4.40.0': + optional: true + + '@rollup/rollup-android-arm64@4.40.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.40.0': + optional: true + + '@rollup/rollup-darwin-x64@4.40.0': + optional: true + + '@rollup/rollup-freebsd-arm64@4.40.0': + optional: true + + '@rollup/rollup-freebsd-x64@4.40.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.40.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.40.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.40.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.40.0': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.40.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.40.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.40.0': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.40.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.40.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.40.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.40.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.40.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.40.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.40.0': + optional: true + + '@sindresorhus/is@5.6.0': {} + + '@szmarczak/http-timer@5.0.1': + dependencies: + defer-to-connect: 2.0.1 + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.7 + + '@types/babel__generator@7.27.0': + dependencies: + '@babel/types': 7.27.0 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 + + '@types/babel__traverse@7.20.7': + dependencies: + '@babel/types': 7.27.0 + + '@types/estree@1.0.7': {} + + '@types/filesystem@0.0.36': + dependencies: + '@types/filewriter': 0.0.33 + + '@types/filewriter@0.0.33': {} + + '@types/har-format@1.2.16': {} + + '@types/http-cache-semantics@4.0.4': {} + + '@types/minimatch@3.0.5': {} + + '@types/node@22.14.1': + dependencies: + undici-types: 6.21.0 + + '@types/react-dom@19.1.2(@types/react@19.1.1)': + dependencies: + '@types/react': 19.1.1 + + '@types/react@19.1.1': + dependencies: + csstype: 3.1.3 + + '@types/uuid@10.0.0': {} + + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 22.14.1 + optional: true + + '@vitejs/plugin-react@4.3.4(vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2))': + dependencies: + '@babel/core': 7.26.10 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 6.2.6(@types/node@22.14.1)(jiti@2.4.2) + transitivePeerDependencies: + - supports-color + + '@webext-core/fake-browser@1.3.2': + dependencies: + lodash.merge: 4.6.2 + + '@webext-core/isolated-element@1.1.2': + dependencies: + is-potential-custom-element-name: 1.0.1 + + '@webext-core/match-patterns@1.0.3': {} + + '@wxt-dev/browser@0.0.310': + dependencies: + '@types/filesystem': 0.0.36 + '@types/har-format': 1.2.16 + + '@wxt-dev/module-react@1.1.3(vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2))(wxt@0.20.0(@types/node@22.14.1)(jiti@2.4.2)(rollup@4.40.0))': + dependencies: + '@vitejs/plugin-react': 4.3.4(vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2)) + wxt: 0.20.0(@types/node@22.14.1)(jiti@2.4.2)(rollup@4.40.0) + transitivePeerDependencies: + - supports-color + - vite + + '@wxt-dev/storage@1.1.1': + dependencies: + async-mutex: 0.5.0 + dequal: 2.0.3 + + acorn@8.14.1: {} + + adm-zip@0.5.16: {} + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-escapes@7.0.0: + dependencies: + environment: 1.1.0 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + antd@5.24.6(moment@2.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@ant-design/colors': 7.2.0 + '@ant-design/cssinjs': 1.23.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@ant-design/cssinjs-utils': 1.1.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@ant-design/fast-color': 2.0.6 + '@ant-design/icons': 5.6.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@ant-design/react-slick': 1.1.2(react@19.1.0) + '@babel/runtime': 7.27.0 + '@rc-component/color-picker': 2.0.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@rc-component/mutate-observer': 1.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@rc-component/qrcode': 1.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@rc-component/tour': 1.15.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@rc-component/trigger': 2.2.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + classnames: 2.5.1 + copy-to-clipboard: 3.3.3 + dayjs: 1.11.13 + rc-cascader: 3.33.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-checkbox: 3.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-collapse: 3.9.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-dialog: 9.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-drawer: 7.2.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-dropdown: 4.2.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-field-form: 2.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-image: 7.11.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-input: 1.7.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-input-number: 9.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-mentions: 2.19.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-menu: 9.16.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-motion: 2.9.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-notification: 5.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-pagination: 5.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-picker: 4.11.3(dayjs@1.11.13)(moment@2.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-progress: 4.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-rate: 2.13.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-resize-observer: 1.4.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-segmented: 2.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-select: 14.16.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-slider: 11.1.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-steps: 6.0.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-switch: 4.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-table: 7.50.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-tabs: 15.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-textarea: 1.9.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-tooltip: 6.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-tree: 5.13.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-tree-select: 5.27.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-upload: 4.8.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + scroll-into-view-if-needed: 3.1.0 + throttle-debounce: 5.0.2 + transitivePeerDependencies: + - date-fns + - luxon + - moment + + any-promise@1.3.0: {} + + array-differ@4.0.0: {} + + array-union@3.0.1: {} + + async-mutex@0.5.0: + dependencies: + tslib: 2.8.1 + + async@3.2.6: {} + + at-least-node@1.0.0: {} + + balanced-match@1.0.2: {} + + base64-js@1.5.1: {} + + big-integer@1.6.52: {} + + bl@5.1.0: + dependencies: + buffer: 6.0.3 + inherits: 2.0.4 + readable-stream: 3.6.2 + + bluebird@3.7.2: {} + + boolbase@1.0.0: {} + + boxen@7.1.1: + dependencies: + ansi-align: 3.0.1 + camelcase: 7.0.1 + chalk: 5.4.1 + cli-boxes: 3.0.0 + string-width: 5.1.2 + type-fest: 2.19.0 + widest-line: 4.0.1 + wrap-ansi: 8.1.0 + + bplist-parser@0.2.0: + dependencies: + big-integer: 1.6.52 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001713 + electron-to-chromium: 1.5.136 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.24.4) + + buffer-crc32@0.2.13: {} + + buffer-from@1.1.2: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bundle-name@3.0.0: + dependencies: + run-applescript: 5.0.0 + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.0.0 + + bunyan@1.8.15: + optionalDependencies: + dtrace-provider: 0.8.8 + moment: 2.30.1 + mv: 2.1.1 + safe-json-stringify: 1.2.0 + + c12@3.0.3(magicast@0.3.5): + dependencies: + chokidar: 4.0.3 + confbox: 0.2.2 + defu: 6.1.4 + dotenv: 16.5.0 + exsolve: 1.0.4 + giget: 2.0.0 + jiti: 2.4.2 + ohash: 2.0.11 + pathe: 2.0.3 + perfect-debounce: 1.0.0 + pkg-types: 2.1.0 + rc9: 2.1.2 + optionalDependencies: + magicast: 0.3.5 + + cac@6.7.14: {} + + cacheable-lookup@7.0.0: {} + + cacheable-request@10.2.14: + dependencies: + '@types/http-cache-semantics': 4.0.4 + get-stream: 6.0.1 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + mimic-response: 4.0.0 + normalize-url: 8.0.1 + responselike: 3.0.0 + + camelcase@7.0.1: {} + + caniuse-lite@1.0.30001713: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.4.1: {} + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + chrome-launcher@1.1.0: + dependencies: + '@types/node': 22.14.1 + escape-string-regexp: 4.0.0 + is-wsl: 2.2.0 + lighthouse-logger: 2.0.1 + transitivePeerDependencies: + - supports-color + + ci-info@3.9.0: {} + + ci-info@4.2.0: {} + + citty@0.1.6: + dependencies: + consola: 3.4.2 + + classnames@2.5.1: {} + + cli-boxes@3.0.0: {} + + cli-cursor@4.0.0: + dependencies: + restore-cursor: 4.0.0 + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-highlight@2.1.11: + dependencies: + chalk: 4.1.2 + highlight.js: 10.7.3 + mz: 2.7.0 + parse5: 5.1.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + yargs: 16.2.0 + + cli-spinners@2.9.2: {} + + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.2.0 + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone@1.0.4: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + colorette@2.0.20: {} + + commander@2.9.0: + dependencies: + graceful-readlink: 1.0.1 + + commander@9.5.0: {} + + compute-scroll-into-view@3.1.1: {} + + concat-map@0.0.1: {} + + concat-stream@1.6.2: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.8 + typedarray: 0.0.6 + + confbox@0.1.8: {} + + confbox@0.2.2: {} + + config-chain@1.1.13: + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + + configstore@6.0.0: + dependencies: + dot-prop: 6.0.1 + graceful-fs: 4.2.11 + unique-string: 3.0.0 + write-file-atomic: 3.0.3 + xdg-basedir: 5.1.0 + + consola@3.4.2: {} + + convert-source-map@2.0.0: {} + + copy-to-clipboard@3.3.3: + dependencies: + toggle-selection: 1.0.6 + + core-util-is@1.0.3: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypto-random-string@4.0.0: + dependencies: + type-fest: 1.4.0 + + css-select@5.1.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-what@6.1.0: {} + + cssom@0.5.0: {} + + csstype@3.1.3: {} + + dayjs@1.11.13: {} + + debounce@1.2.1: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + deep-extend@0.6.0: {} + + default-browser-id@3.0.0: + dependencies: + bplist-parser: 0.2.0 + untildify: 4.0.0 + + default-browser-id@5.0.0: {} + + default-browser@4.0.0: + dependencies: + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.2.0 + titleize: 3.0.0 + + default-browser@5.2.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + defer-to-connect@2.0.1: {} + + define-lazy-prop@2.0.0: {} + + define-lazy-prop@3.0.0: {} + + defu@6.1.4: {} + + dequal@2.0.3: {} + + destr@2.0.5: {} + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + dot-prop@6.0.1: + dependencies: + is-obj: 2.0.0 + + dotenv-expand@12.0.1: + dependencies: + dotenv: 16.5.0 + + dotenv@16.5.0: {} + + dtrace-provider@0.8.8: + dependencies: + nan: 2.22.2 + optional: true + + eastasianwidth@0.2.0: {} + + electron-to-chromium@1.5.136: {} + + emoji-regex@10.4.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + entities@4.5.0: {} + + entities@6.0.0: {} + + environment@1.1.0: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-module-lexer@1.6.0: {} + + es6-error@4.1.1: {} + + esbuild@0.25.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.2 + '@esbuild/android-arm': 0.25.2 + '@esbuild/android-arm64': 0.25.2 + '@esbuild/android-x64': 0.25.2 + '@esbuild/darwin-arm64': 0.25.2 + '@esbuild/darwin-x64': 0.25.2 + '@esbuild/freebsd-arm64': 0.25.2 + '@esbuild/freebsd-x64': 0.25.2 + '@esbuild/linux-arm': 0.25.2 + '@esbuild/linux-arm64': 0.25.2 + '@esbuild/linux-ia32': 0.25.2 + '@esbuild/linux-loong64': 0.25.2 + '@esbuild/linux-mips64el': 0.25.2 + '@esbuild/linux-ppc64': 0.25.2 + '@esbuild/linux-riscv64': 0.25.2 + '@esbuild/linux-s390x': 0.25.2 + '@esbuild/linux-x64': 0.25.2 + '@esbuild/netbsd-arm64': 0.25.2 + '@esbuild/netbsd-x64': 0.25.2 + '@esbuild/openbsd-arm64': 0.25.2 + '@esbuild/openbsd-x64': 0.25.2 + '@esbuild/sunos-x64': 0.25.2 + '@esbuild/win32-arm64': 0.25.2 + '@esbuild/win32-ia32': 0.25.2 + '@esbuild/win32-x64': 0.25.2 + + escalade@3.2.0: {} + + escape-goat@4.0.0: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.7 + + eventemitter3@5.0.1: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + execa@7.2.0: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + + execa@8.0.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + exsolve@1.0.4: {} + + extract-zip@2.0.1: + dependencies: + debug: 4.4.0 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + + fdir@6.4.3(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + filesize@10.1.6: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + firefox-profile@4.6.0: + dependencies: + adm-zip: 0.5.16 + fs-extra: 9.0.1 + ini: 2.0.0 + minimist: 1.2.8 + xml2js: 0.5.0 + + form-data-encoder@2.1.4: {} + + formdata-node@6.0.3: {} + + fs-extra@11.2.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@11.3.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@9.0.1: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 1.0.0 + + fsevents@2.3.3: + optional: true + + fx-runner@1.4.0: + dependencies: + commander: 2.9.0 + shell-quote: 1.7.3 + spawn-sync: 1.0.15 + when: 3.7.7 + which: 1.2.4 + winreg: 0.0.12 + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.3.0: {} + + get-port-please@3.1.2: {} + + get-stream@5.2.0: + dependencies: + pump: 3.0.2 + + get-stream@6.0.1: {} + + get-stream@8.0.1: {} + + giget@2.0.0: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + defu: 6.1.4 + node-fetch-native: 1.6.6 + nypm: 0.6.0 + pathe: 2.0.3 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-to-regexp@0.4.1: {} + + glob@6.0.4: + dependencies: + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + optional: true + + global-dirs@3.0.1: + dependencies: + ini: 2.0.0 + + globals@11.12.0: {} + + got@12.6.1: + dependencies: + '@sindresorhus/is': 5.6.0 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + + graceful-fs@4.2.10: {} + + graceful-fs@4.2.11: {} + + graceful-readlink@1.0.1: {} + + growly@1.3.0: {} + + has-flag@4.0.0: {} + + has-yarn@3.0.0: {} + + highlight.js@10.7.3: {} + + hookable@5.5.3: {} + + html-escaper@3.0.3: {} + + htmlparser2@10.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 6.0.0 + + http-cache-semantics@4.1.1: {} + + http2-wrapper@2.2.1: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + human-signals@2.1.0: {} + + human-signals@4.3.1: {} + + human-signals@5.0.0: {} + + ieee754@1.2.1: {} + + immediate@3.0.6: {} + + import-lazy@4.0.0: {} + + import-meta-resolve@4.1.0: {} + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + optional: true + + inherits@2.0.4: {} + + ini@1.3.8: {} + + ini@2.0.0: {} + + is-absolute@0.1.7: + dependencies: + is-relative: 0.1.3 + + is-arrayish@0.2.1: {} + + is-ci@3.0.1: + dependencies: + ci-info: 3.9.0 + + is-docker@2.2.1: {} + + is-docker@3.0.0: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-fullwidth-code-point@4.0.0: {} + + is-fullwidth-code-point@5.0.0: + dependencies: + get-east-asian-width: 1.3.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-installed-globally@0.4.0: + dependencies: + global-dirs: 3.0.1 + is-path-inside: 3.0.3 + + is-interactive@2.0.0: {} + + is-npm@6.0.0: {} + + is-number@7.0.0: {} + + is-obj@2.0.0: {} + + is-path-inside@3.0.3: {} + + is-plain-object@2.0.4: + dependencies: + isobject: 3.0.1 + + is-potential-custom-element-name@1.0.1: {} + + is-primitive@3.0.1: {} + + is-relative@0.1.3: {} + + is-stream@2.0.1: {} + + is-stream@3.0.0: {} + + is-typedarray@1.0.0: {} + + is-unicode-supported@1.3.0: {} + + is-unicode-supported@2.1.0: {} + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + is-yarn-global@0.4.1: {} + + isarray@1.0.0: {} + + isexe@1.1.2: {} + + isexe@2.0.0: {} + + isobject@3.0.1: {} + + jiti@2.4.2: {} + + js-tokens@4.0.0: {} + + js-tokens@9.0.1: {} + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@3.0.2: {} + + json2mq@0.2.0: + dependencies: + string-convert: 0.2.1 + + json5@2.2.3: {} + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jszip@3.10.1: + dependencies: + lie: 3.3.0 + pako: 1.0.11 + readable-stream: 2.3.8 + setimmediate: 1.0.5 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kleur@3.0.3: {} + + latest-version@7.0.0: + dependencies: + package-json: 8.1.1 + + lie@3.3.0: + dependencies: + immediate: 3.0.6 + + lighthouse-logger@2.0.1: + dependencies: + debug: 2.6.9 + marky: 1.3.0 + transitivePeerDependencies: + - supports-color + + lines-and-columns@2.0.4: {} + + linkedom@0.18.9: + dependencies: + css-select: 5.1.0 + cssom: 0.5.0 + html-escaper: 3.0.3 + htmlparser2: 10.0.0 + uhyphen: 0.2.0 + + listr2@8.3.2: + dependencies: + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.0 + + local-pkg@1.1.1: + dependencies: + mlly: 1.7.4 + pkg-types: 2.1.0 + quansync: 0.2.10 + + lodash.camelcase@4.3.0: {} + + lodash.kebabcase@4.1.1: {} + + lodash.merge@4.6.2: {} + + lodash.snakecase@4.1.1: {} + + log-symbols@5.1.0: + dependencies: + chalk: 5.4.1 + is-unicode-supported: 1.3.0 + + log-symbols@6.0.0: + dependencies: + chalk: 5.4.1 + is-unicode-supported: 1.3.0 + + log-update@6.1.0: + dependencies: + ansi-escapes: 7.0.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + + lowercase-keys@3.0.0: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + magicast@0.3.5: + dependencies: + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 + source-map-js: 1.2.1 + + make-error@1.3.6: {} + + many-keys-map@2.0.1: {} + + marky@1.3.0: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mimic-fn@2.1.0: {} + + mimic-fn@4.0.0: {} + + mimic-function@5.0.1: {} + + mimic-response@3.1.0: {} + + mimic-response@4.0.0: {} + + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimist@1.2.8: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + optional: true + + mkdirp@3.0.1: {} + + mlly@1.7.4: + dependencies: + acorn: 8.14.1 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + + moment@2.30.1: + optional: true + + ms@2.0.0: {} + + ms@2.1.3: {} + + multimatch@6.0.0: + dependencies: + '@types/minimatch': 3.0.5 + array-differ: 4.0.0 + array-union: 3.0.1 + minimatch: 3.1.2 + + mv@2.1.1: + dependencies: + mkdirp: 0.5.6 + ncp: 2.0.0 + rimraf: 2.4.5 + optional: true + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nan@2.22.2: + optional: true + + nano-spawn@0.2.0: {} + + nanoid@3.3.11: {} + + ncp@2.0.0: + optional: true + + node-fetch-native@1.6.6: {} + + node-forge@1.3.1: {} + + node-notifier@10.0.1: + dependencies: + growly: 1.3.0 + is-wsl: 2.2.0 + semver: 7.7.1 + shellwords: 0.1.1 + uuid: 8.3.2 + which: 2.0.2 + + node-releases@2.0.19: {} + + normalize-path@3.0.0: {} + + normalize-url@8.0.1: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + nypm@0.3.12: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + execa: 8.0.1 + pathe: 1.1.2 + pkg-types: 1.3.1 + ufo: 1.6.1 + + nypm@0.6.0: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + pathe: 2.0.3 + pkg-types: 2.1.0 + tinyexec: 0.3.2 + + object-assign@4.1.1: {} + + ofetch@1.4.1: + dependencies: + destr: 2.0.5 + node-fetch-native: 1.6.6 + ufo: 1.6.1 + + ohash@1.1.6: {} + + ohash@2.0.11: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + open@10.1.0: + dependencies: + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 3.1.0 + + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + + open@9.1.0: + dependencies: + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 + + ora@6.3.1: + dependencies: + chalk: 5.4.1 + cli-cursor: 4.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 1.3.0 + log-symbols: 5.1.0 + stdin-discarder: 0.1.0 + strip-ansi: 7.1.0 + wcwidth: 1.0.1 + + ora@8.2.0: + dependencies: + chalk: 5.4.1 + cli-cursor: 5.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + os-shim@0.1.3: {} + + p-cancelable@3.0.0: {} + + package-json@8.1.1: + dependencies: + got: 12.6.1 + registry-auth-token: 5.1.0 + registry-url: 6.0.1 + semver: 7.7.1 + + pako@1.0.11: {} + + parse-json@7.1.1: + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 3.0.2 + lines-and-columns: 2.0.4 + type-fest: 3.13.1 + + parse5-htmlparser2-tree-adapter@6.0.1: + dependencies: + parse5: 6.0.1 + + parse5@5.1.1: {} + + parse5@6.0.1: {} + + path-is-absolute@1.0.1: + optional: true + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + pathe@1.1.2: {} + + pathe@2.0.3: {} + + pend@1.2.0: {} + + perfect-debounce@1.0.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.2: {} + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.7.4 + pathe: 2.0.3 + + pkg-types@2.1.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.4 + pathe: 2.0.3 + + postcss@8.5.3: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + process-nextick-args@2.0.1: {} + + promise-toolbox@0.21.0: + dependencies: + make-error: 1.3.6 + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + proto-list@1.2.4: {} + + publish-browser-extension@3.0.0: + dependencies: + cac: 6.7.14 + cli-highlight: 2.1.11 + consola: 3.4.2 + dotenv: 16.5.0 + extract-zip: 2.0.1 + formdata-node: 6.0.3 + listr2: 8.3.2 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + ofetch: 1.4.1 + open: 9.1.0 + ora: 6.3.1 + prompts: 2.4.2 + zod: 3.24.2 + transitivePeerDependencies: + - supports-color + + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + pupa@3.1.0: + dependencies: + escape-goat: 4.0.0 + + quansync@0.2.10: {} + + queue-microtask@1.2.3: {} + + quick-lru@5.1.1: {} + + rc-cascader@3.33.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-select: 14.16.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-tree: 5.13.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-checkbox@3.5.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-collapse@3.9.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-motion: 2.9.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-dialog@9.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + '@rc-component/portal': 1.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + classnames: 2.5.1 + rc-motion: 2.9.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-drawer@7.2.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + '@rc-component/portal': 1.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + classnames: 2.5.1 + rc-motion: 2.9.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-dropdown@4.2.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + '@rc-component/trigger': 2.2.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-field-form@2.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + '@rc-component/async-validator': 5.0.4 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-image@7.11.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + '@rc-component/portal': 1.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + classnames: 2.5.1 + rc-dialog: 9.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-motion: 2.9.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-input-number@9.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + '@rc-component/mini-decimal': 1.1.0 + classnames: 2.5.1 + rc-input: 1.7.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-input@1.7.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-mentions@2.19.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + '@rc-component/trigger': 2.2.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + classnames: 2.5.1 + rc-input: 1.7.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-menu: 9.16.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-textarea: 1.9.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-menu@9.16.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + '@rc-component/trigger': 2.2.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + classnames: 2.5.1 + rc-motion: 2.9.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-overflow: 1.4.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-motion@2.9.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-notification@5.6.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-motion: 2.9.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-overflow@1.4.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-resize-observer: 1.4.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-pagination@5.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-picker@4.11.3(dayjs@1.11.13)(moment@2.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + '@rc-component/trigger': 2.2.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + classnames: 2.5.1 + rc-overflow: 1.4.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-resize-observer: 1.4.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + dayjs: 1.11.13 + moment: 2.30.1 + + rc-progress@4.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-rate@2.13.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-resize-observer@1.4.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + resize-observer-polyfill: 1.5.1 + + rc-segmented@2.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-motion: 2.9.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-select@14.16.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + '@rc-component/trigger': 2.2.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + classnames: 2.5.1 + rc-motion: 2.9.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-overflow: 1.4.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-virtual-list: 3.18.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-slider@11.1.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-steps@6.0.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-switch@4.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-table@7.50.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + '@rc-component/context': 1.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + classnames: 2.5.1 + rc-resize-observer: 1.4.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-virtual-list: 3.18.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-tabs@15.5.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-dropdown: 4.2.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-menu: 9.16.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-motion: 2.9.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-resize-observer: 1.4.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-textarea@1.9.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-input: 1.7.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-resize-observer: 1.4.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-tooltip@6.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + '@rc-component/trigger': 2.2.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-tree-select@5.27.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-select: 14.16.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-tree: 5.13.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-tree@5.13.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-motion: 2.9.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-virtual-list: 3.18.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-upload@4.8.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc-util@5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-is: 18.3.1 + + rc-virtual-list@3.18.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/runtime': 7.27.0 + classnames: 2.5.1 + rc-resize-observer: 1.4.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + rc-util: 5.44.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + rc9@2.1.2: + dependencies: + defu: 6.1.4 + destr: 2.0.5 + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + react-dom@19.1.0(react@19.1.0): + dependencies: + react: 19.1.0 + scheduler: 0.26.0 + + react-is@18.3.1: {} + + react-refresh@0.14.2: {} + + react@19.1.0: {} + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@4.1.2: {} + + regenerator-runtime@0.14.1: {} + + registry-auth-token@5.1.0: + dependencies: + '@pnpm/npm-conf': 2.3.1 + + registry-url@6.0.1: + dependencies: + rc: 1.2.8 + + require-directory@2.1.1: {} + + resize-observer-polyfill@1.5.1: {} + + resolve-alpn@1.2.1: {} + + responselike@3.0.0: + dependencies: + lowercase-keys: 3.0.0 + + restore-cursor@4.0.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + reusify@1.1.0: {} + + rfdc@1.4.1: {} + + rimraf@2.4.5: + dependencies: + glob: 6.0.4 + optional: true + + rollup@4.40.0: + dependencies: + '@types/estree': 1.0.7 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.40.0 + '@rollup/rollup-android-arm64': 4.40.0 + '@rollup/rollup-darwin-arm64': 4.40.0 + '@rollup/rollup-darwin-x64': 4.40.0 + '@rollup/rollup-freebsd-arm64': 4.40.0 + '@rollup/rollup-freebsd-x64': 4.40.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.40.0 + '@rollup/rollup-linux-arm-musleabihf': 4.40.0 + '@rollup/rollup-linux-arm64-gnu': 4.40.0 + '@rollup/rollup-linux-arm64-musl': 4.40.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.40.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.40.0 + '@rollup/rollup-linux-riscv64-gnu': 4.40.0 + '@rollup/rollup-linux-riscv64-musl': 4.40.0 + '@rollup/rollup-linux-s390x-gnu': 4.40.0 + '@rollup/rollup-linux-x64-gnu': 4.40.0 + '@rollup/rollup-linux-x64-musl': 4.40.0 + '@rollup/rollup-win32-arm64-msvc': 4.40.0 + '@rollup/rollup-win32-ia32-msvc': 4.40.0 + '@rollup/rollup-win32-x64-msvc': 4.40.0 + fsevents: 2.3.3 + + run-applescript@5.0.0: + dependencies: + execa: 5.1.1 + + run-applescript@7.0.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safe-json-stringify@1.2.0: + optional: true + + sax@1.4.1: {} + + scheduler@0.26.0: {} + + scroll-into-view-if-needed@3.1.0: + dependencies: + compute-scroll-into-view: 3.1.1 + + scule@1.3.0: {} + + semver-diff@4.0.0: + dependencies: + semver: 7.7.1 + + semver@6.3.1: {} + + semver@7.7.1: {} + + set-value@4.1.0: + dependencies: + is-plain-object: 2.0.4 + is-primitive: 3.0.1 + + setimmediate@1.0.5: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shell-quote@1.7.3: {} + + shellwords@0.1.1: {} + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + sisteransi@1.0.5: {} + + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + + slice-ansi@7.1.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.0 + + source-map-js@1.2.1: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + source-map@0.7.4: {} + + spawn-sync@1.0.15: + dependencies: + concat-stream: 1.6.2 + os-shim: 0.1.3 + + split@1.0.1: + dependencies: + through: 2.3.8 + + stdin-discarder@0.1.0: + dependencies: + bl: 5.1.0 + + stdin-discarder@0.2.2: {} + + string-convert@0.2.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.4.0 + get-east-asian-width: 1.3.0 + strip-ansi: 7.1.0 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-bom@5.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-final-newline@3.0.0: {} + + strip-json-comments@2.0.1: {} + + strip-json-comments@5.0.1: {} + + strip-literal@3.0.0: + dependencies: + js-tokens: 9.0.1 + + stylis@4.3.6: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + throttle-debounce@5.0.2: {} + + through@2.3.8: {} + + tinyexec@0.3.2: {} + + tinyglobby@0.2.12: + dependencies: + fdir: 6.4.3(picomatch@4.0.2) + picomatch: 4.0.2 + + titleize@3.0.0: {} + + tmp@0.2.3: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toggle-selection@1.0.6: {} + + tslib@2.8.1: {} + + type-fest@1.4.0: {} + + type-fest@2.19.0: {} + + type-fest@3.13.1: {} + + typedarray-to-buffer@3.1.5: + dependencies: + is-typedarray: 1.0.0 + + typedarray@0.0.6: {} + + typescript@5.8.3: {} + + ufo@1.6.1: {} + + uhyphen@0.2.0: {} + + undici-types@6.21.0: {} + + unimport@4.2.0: + dependencies: + acorn: 8.14.1 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + local-pkg: 1.1.1 + magic-string: 0.30.17 + mlly: 1.7.4 + pathe: 2.0.3 + picomatch: 4.0.2 + pkg-types: 2.1.0 + scule: 1.3.0 + strip-literal: 3.0.0 + tinyglobby: 0.2.12 + unplugin: 2.3.2 + unplugin-utils: 0.2.4 + + unique-string@3.0.0: + dependencies: + crypto-random-string: 4.0.0 + + universalify@1.0.0: {} + + universalify@2.0.1: {} + + unplugin-utils@0.2.4: + dependencies: + pathe: 2.0.3 + picomatch: 4.0.2 + + unplugin@2.3.2: + dependencies: + acorn: 8.14.1 + picomatch: 4.0.2 + webpack-virtual-modules: 0.6.2 + + untildify@4.0.0: {} + + update-browserslist-db@1.1.3(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + update-notifier@6.0.2: + dependencies: + boxen: 7.1.1 + chalk: 5.4.1 + configstore: 6.0.0 + has-yarn: 3.0.0 + import-lazy: 4.0.0 + is-ci: 3.0.1 + is-installed-globally: 0.4.0 + is-npm: 6.0.0 + is-yarn-global: 0.4.1 + latest-version: 7.0.0 + pupa: 3.1.0 + semver: 7.7.1 + semver-diff: 4.0.0 + xdg-basedir: 5.1.0 + + util-deprecate@1.0.2: {} + + uuid@11.1.0: {} + + uuid@8.3.2: {} + + vite-node@3.1.1(@types/node@22.14.1)(jiti@2.4.2): + dependencies: + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 2.0.3 + vite: 6.2.6(@types/node@22.14.1)(jiti@2.4.2) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2): + dependencies: + esbuild: 0.25.2 + postcss: 8.5.3 + rollup: 4.40.0 + optionalDependencies: + '@types/node': 22.14.1 + fsevents: 2.3.3 + jiti: 2.4.2 + + watchpack@2.4.1: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + + web-ext-run@0.2.2: + dependencies: + '@babel/runtime': 7.24.7 + '@devicefarmer/adbkit': 3.2.6 + bunyan: 1.8.15 + chrome-launcher: 1.1.0 + debounce: 1.2.1 + es6-error: 4.1.1 + firefox-profile: 4.6.0 + fs-extra: 11.2.0 + fx-runner: 1.4.0 + mkdirp: 3.0.1 + multimatch: 6.0.0 + mz: 2.7.0 + node-notifier: 10.0.1 + parse-json: 7.1.1 + promise-toolbox: 0.21.0 + set-value: 4.1.0 + source-map-support: 0.5.21 + strip-bom: 5.0.0 + strip-json-comments: 5.0.1 + tmp: 0.2.3 + update-notifier: 6.0.2 + watchpack: 2.4.1 + ws: 8.18.0 + zip-dir: 2.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + webpack-virtual-modules@0.6.2: {} + + when@3.7.7: {} + + which@1.2.4: + dependencies: + is-absolute: 0.1.7 + isexe: 1.1.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + widest-line@4.0.1: + dependencies: + string-width: 5.1.2 + + winreg@0.0.12: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrap-ansi@9.0.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + write-file-atomic@3.0.3: + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + + ws@8.18.0: {} + + wxt@0.20.0(@types/node@22.14.1)(jiti@2.4.2)(rollup@4.40.0): + dependencies: + '@1natsu/wait-element': 4.1.2 + '@aklinker1/rollup-plugin-visualizer': 5.12.0(rollup@4.40.0) + '@webext-core/fake-browser': 1.3.2 + '@webext-core/isolated-element': 1.1.2 + '@webext-core/match-patterns': 1.0.3 + '@wxt-dev/browser': 0.0.310 + '@wxt-dev/storage': 1.1.1 + async-mutex: 0.5.0 + c12: 3.0.3(magicast@0.3.5) + cac: 6.7.14 + chokidar: 4.0.3 + ci-info: 4.2.0 + consola: 3.4.2 + defu: 6.1.4 + dotenv: 16.5.0 + dotenv-expand: 12.0.1 + esbuild: 0.25.2 + fast-glob: 3.3.3 + filesize: 10.1.6 + fs-extra: 11.3.0 + get-port-please: 3.1.2 + giget: 2.0.0 + hookable: 5.5.3 + import-meta-resolve: 4.1.0 + is-wsl: 3.1.0 + json5: 2.2.3 + jszip: 3.10.1 + linkedom: 0.18.9 + magicast: 0.3.5 + minimatch: 10.0.1 + nano-spawn: 0.2.0 + normalize-path: 3.0.0 + nypm: 0.3.12 + ohash: 1.1.6 + open: 10.1.0 + ora: 8.2.0 + perfect-debounce: 1.0.0 + picocolors: 1.1.1 + prompts: 2.4.2 + publish-browser-extension: 3.0.0 + scule: 1.3.0 + unimport: 4.2.0 + vite: 6.2.6(@types/node@22.14.1)(jiti@2.4.2) + vite-node: 3.1.1(@types/node@22.14.1)(jiti@2.4.2) + web-ext-run: 0.2.2 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - jiti + - less + - lightningcss + - rollup + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - utf-8-validate + - yaml + + xdg-basedir@5.1.0: {} + + xml2js@0.5.0: + dependencies: + sax: 1.4.1 + xmlbuilder: 11.0.1 + + xmlbuilder@11.0.1: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yargs-parser@20.2.9: {} + + yargs-parser@21.1.1: {} + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + zip-dir@2.0.0: + dependencies: + async: 3.2.6 + jszip: 3.10.1 + + zod@3.24.2: {} diff --git a/public/icon/icon128.png b/public/icon/icon128.png new file mode 100644 index 0000000000000000000000000000000000000000..7df3a1cc264f32bc5edbf291c67792baacef5c58 GIT binary patch literal 6704 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 K{H*U1_kRFbJ~iI} literal 0 HcmV?d00001 diff --git a/public/icon/icon16.png b/public/icon/icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..a6ef8136e2cf8bd32a9fc56f1f6bd0504d7115fd GIT binary patch literal 1940 zcmZ9N2T+sQ7RNt23P^F4(9=;Pn$VlTVrVN^XezD)frKVC1U8fa211F5AlN`aU|FRL z3l`K}V1=cq*+r@p5m6LbN(%WBK49Z>=FPk}bI$$W`=9yEIdkvadvi}7cTw4?y%PWc z6*pI+r$p7hrlO2w+-IcfB@uX#tEUG5Bw+y{Jre-L5-a@^0L0?~U@-sytZxEvgReI9h+euucCkX)^$xlG?X{eQRhLZSd7V3%e^+kF5V6Fj}Z6M5q3z_isH269L zAxK7mx%xtufskpio(})UiVO8cMOaZj0?b2$m$1T217QY2$lAZ2h7qJ<1&jmy1Qb6G z#fwFW3J_5LwT*7JxPc6fv(UGXl4McrELkh!m1cv1e_a&UJJnpS#V+2 zL1B>#SbBPk{}0%h42?X2rU&^6c7pr4Ne<0HOQmkxnZc)04zTqDabi0EDPP@EeR`Pxgm&Ef9%S6Lvd$0k4jhz zMoTuF7l~NENm;)Ux<)~A!?A0j*zN7@$IRfvlJirbc^>yVJ2Ue&x_YZ~B$ia*F&ARa zh2Xt@lEsb~*Ryc|ptSpIN&zLeVgG^LJe(9h$!Gvpht48=w*Wwzt{@ZCowyoRJ3!!^um~M&Jve5mKNgB; zG1XSWq@`^a`hz+@X!kTd5Pz!OHL_TiO(J$9O|W!;L|TPft?)EnH9I{Df!u z5lY6=nbP^c4YLCY6km|3pT1Zm#z?f^zeA2Rq9ks0gv*OUM{pY1yvKRK= z%OS?rOg^>&kQOefeK}VYmGmEN=Siy-96&o>Q2Iq1#(d8BeV25%uR;rPBzJm&Df|1J zO2{C}iEiHYKJTRStedQA`0FF5U5XN&1y2b$P6Fp;_iRewl%b!_MN>T*9i{ zt#${`DJF{LSjqU#Hpg(9vqgGyytUL(IPh0gZ4JChj?Ieqh;tZIS2nzep^dX4DV>V> z*9}wBw)gCr*Rl_n^fwesoA0Y*WsN2=J~y3?b2Cl~`cj^i1v{p!R#*ARV^YTjvyggM z$BWb=qieJ4L;gcwYTFW7PMBMEPt)A6d^fkd-f8JXE1Y9@nV)`Dr~3poJOwuY zSQ~zO^j!5|R(ikLTlQN1Y?yMky9?E~Kw0I1dgMh5IBQ$J8P-TY(5cWXUFO(r?N!hV z>z#ousP-x%Q{H7qz7}7UZTVu;rsMBgBuny*qjx$OYJf!7&Z{yCw+MC!TU2&{i9$~` zBBqHnEbT)+*pVzPAe#INFe`gQ0&staD7`8D{McB^WRf|S_)kEPDOICMD% zJ6gBk+2Ho{Yp$BEi z#eNeP#vr?m{VLBs!9M!7|F^Yu_QKoH!yn%#b4T0S(jfNoPQwZ=>z&h3dm3xdez516 zkH*~tlFJONxDmhihP@672q1?n%+Ak!eD~qKrW!dgi_4;CIuYe$d!C<#jZa|EH9u3x zALjRbcdgjRTWj2Ec-YLey)B+5;HxP6T!vZZdAPrPVRW#uAu{5hB|TlObaC13^FK~c zMcUdvd#cBPJxWQ0AQ|Zl=26E#y7f>AJS2#JTq+aomwLMQ>jr_8AQT=#w>Io<@ou(!8k>}Z#KTmXjVbcRMI z(J0nIREk6ZW4y7c5#GdzVCjv=Tbr3!8(ZKc6FgqqcE^YR0V1QxVZn)C0fG_1*oa{6 zO)#}Kv9dNZ{sy?3K%fNJ_umS%ut-WAjU;&y|F4LJwW;|x#wXjDBVhnHr{lyX#{lNP D=X#SU literal 0 HcmV?d00001 diff --git a/public/icon/icon48.png b/public/icon/icon48.png new file mode 100644 index 0000000000000000000000000000000000000000..b59b6e6d0bfb86d1c2b9abe50a4bd215e4033a11 GIT binary patch literal 3062 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

6MZRGy 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 + + + + + + + + + \ No newline at end of file diff --git a/src/assets/react.svg b/src/assets/react.svg new file mode 100644 index 0000000..8e0e0f1 --- /dev/null +++ b/src/assets/react.svg @@ -0,0 +1 @@ + diff --git a/src/components/ProxySwitch/index.css b/src/components/ProxySwitch/index.css new file mode 100644 index 0000000..4a2e7c9 --- /dev/null +++ b/src/components/ProxySwitch/index.css @@ -0,0 +1,235 @@ +.proxy-container { + min-width: 200px; + background: white; +} + +.proxy-menu { + border: none !important; + box-shadow: none !important; +} + +.menu-item { + height: 40px !important; + line-height: 40px !important; + margin: 0 !important; + padding: 0 16px !important; +} + +.menu-item .anticon { + font-size: 16px; + color: var(--yakit-primary); + margin-right: 8px; +} + +.menu-item-label { + font-size: 14px; + color: #333; +} + +.menu-item:hover { + background-color: var(--yakit-primary-5) !important; +} + +.menu-item:hover .anticon, +.menu-item:hover .menu-item-label { + color: var(--yakit-primary) !important; +} + +/* 选中状态 */ +.menu-item.ant-menu-item-selected { + background-color: var(--yakit-primary) !important; +} + +.menu-item.ant-menu-item-selected .anticon, +.menu-item.ant-menu-item-selected .menu-item-label { + color: white !important; +} + +.menu-item.ant-menu-item-selected:hover { + background-color: var(--yakit-primary-hover) !important; +} + +/* 分隔线 */ +.ant-menu-item-divider { + margin: 4px 0 !important; + border-color: #EAECF3 !important; +} + +/* 设置选项 */ +.menu-item-setting { + border-top: 1px solid #EAECF3; + margin-top: 4px !important; +} + +.menu-item-setting .anticon { + color: #666; +} + +.menu-item-setting:hover { + background-color: var(--yakit-primary-5) !important; +} + +.menu-item-setting:hover .anticon, +.menu-item-setting:hover .menu-item-label { + color: var(--yakit-primary) !important; +} + +/* 调整图标大小和对齐 */ +.anticon { + font-size: 16px; +} + +/* 添加以下样式来确保下拉菜单显示在正确的位置 */ +.ant-dropdown { + position: absolute !important; + top: 100% !important; + left: 0 !important; + width: 100% !important; + min-width: 200px !important; +} + +.dropdown-content { + background: white; + border-radius: 4px; + box-shadow: 0 3px 6px -4px rgba(0,0,0,0.12), + 0 6px 16px 0 rgba(0,0,0,0.08), + 0 9px 28px 8px rgba(0,0,0,0.05); + padding: 4px; +} + +/* 确保容器不会限制弹出层 */ +.proxy-container { + min-width: 200px; + background: white; + border-radius: 4px; + position: static; +} + +/* 添加这个样式来确保下拉菜单显示在正确的位置 */ +body { + position: relative; +} + +.ant-menu { + border: none !important; + box-shadow: 0 2px 8px rgba(0,0,0,0.15) !important; + padding: 4px 0 !important; + width: 180px !important; + background: white !important; +} + +.ant-menu-item { + height: 28px !important; + line-height: 28px !important; + margin: 0 !important; + padding: 0 16px !important; +} + +.ant-menu-item:hover { + background-color: #f5f5f5 !important; +} + +.menu-icon { + margin-right: 8px; + display: inline-flex; + align-items: center; +} + +.menu-item-selected { + background-color: #e6f7ff !important; +} + +.ant-menu-item-divider { + margin: 4px 0 !important; + height: 1px !important; + background-color: #f0f0f0 !important; +} + +.ant-menu-item:last-child { + margin-top: 4px !important; + border-top: 1px solid #f0f0f0; +} + +/* 移除多余的样式 */ +.ant-menu-root { + background: transparent !important; +} + +/* 调整整体容器大小 */ +.ant-menu-root { + width: 180px !important; + min-height: auto !important; +} + +/* 添加代理按钮样式 */ +.menu-item-add { + color: #666 !important; +} + +.menu-item-add:hover { + background-color: #f5f5f5 !important; + color: var(--yakit-primary) !important; +} + +.menu-item-add .anticon { + color: #666; +} + +.menu-item-add:hover .anticon { + color: var(--yakit-primary); +} + +.menu-loading { + pointer-events: none; + opacity: 0.7; +} + +.menu-item-loading { + transition: all 0.3s ease; +} + +.menu-item-selected { + transition: all 0.3s ease; + background-color: var(--yakit-primary-5) !important; +} + +/* 添加过渡效果 */ +.ant-menu-item { + transition: all 0.3s ease !important; +} + +.ant-menu-item .menu-icon { + transition: color 0.3s ease; +} + +.proxy-switch-container { + position: relative; + width: 180px; + overflow: hidden; +} + +.panel-watermark { + position: absolute; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + opacity: 0.03; + pointer-events: none; + object-fit: contain; + object-position: right bottom; + z-index: 0; +} + +/* 确保菜单项在水印上层 */ +.ant-menu-item { + position: relative; + z-index: 1; + background: transparent !important; +} + +/* 确保分割线在水印上层 */ +.ant-menu-item-divider { + position: relative; + z-index: 1; +} \ No newline at end of file diff --git a/src/components/ProxySwitch/index.tsx b/src/components/ProxySwitch/index.tsx new file mode 100644 index 0000000..48cac86 --- /dev/null +++ b/src/components/ProxySwitch/index.tsx @@ -0,0 +1,254 @@ +import React, {useEffect, useState} from 'react'; +import {Menu} from 'antd'; +import {DisconnectOutlined, SettingOutlined, PlusOutlined} from '@ant-design/icons'; +import {browser,} from 'wxt/browser'; +import type {MenuProps} from 'antd'; +import type {ProxyConfig} from '@/types/proxy'; +import {ContentActionType, ProxyActionType} from '@/types/action'; + +import './index.css'; + +// YAK 图标 URL +const YAK_ICON_URL = browser.runtime.getURL('/yak.svg'); + +// 固定的代理模式 +const FIXED_MODES = [ + { + key: 'direct', + name: '[直接连接]', + icon: , + color: '#666', + config: { + id: 'direct', + name: '[直接连接]', + proxyType: 'direct', + enabled: false + } + }, + { + key: 'system', + name: '[系统代理]', + icon: , + color: '#666', + config: { + id: 'system', + name: '[系统代理]', + proxyType: 'system', + enabled: false + } + } +]; + +interface CustomProxy { + key: string; + name: string; + color: string; + config: ProxyConfig; + enabled?: boolean; +} + +export const ProxySwitch: React.FC = () => { + const [initialized, setInitialized] = useState(false); + const [currentMode, setCurrentMode] = useState(''); + const [customProxies, setCustomProxies] = useState([]); + const [isLoading, setIsLoading] = useState(false); + + // 监听存储变化 + useEffect(() => { + const handleMessage = (message: any) => { + if (message.action === ContentActionType.PROXY_CONFIGS_UPDATED && message.source !== 'proxy_switch') { + loadCustomProxies(); + } + }; + + browser.runtime.onMessage.addListener(handleMessage); + return () => { + browser.runtime.onMessage.removeListener(handleMessage); + }; + }, []); + + // 初始化 + useEffect(() => { + const init = async () => { + await loadProxyStatus(); + await loadCustomProxies(); + setInitialized(true); + }; + init(); + }, []); + + // 获取当前代理状态 + const loadProxyStatus = async () => { + try { + const response = await browser.runtime.sendMessage({ + action: ProxyActionType.GET_PROXY_STATUS + }); + + if (!response) { + console.log('No response from background script'); + return; + } + + if (response.success) { + const activeMode = response.data.mode; + setCurrentMode(activeMode); + } + } catch (error) { + console.error('Error loading proxy status:', error); + setCurrentMode('direct'); + } + }; + + // 加载自定义代理配置 + const loadCustomProxies = async () => { + try { + const DB_NAME = 'yaklang_extension'; + const STORE_NAME = 'proxy_configs'; + + // 打开数据库 + const db = await new Promise((resolve, reject) => { + const request = indexedDB.open(DB_NAME, 1); + request.onerror = () => reject(request.error); + request.onsuccess = () => resolve(request.result); + }); + + // 从数据库读取代理配置 + const configs = await new Promise((resolve, reject) => { + try { + const transaction = db.transaction([STORE_NAME], 'readonly'); + const store = transaction.objectStore(STORE_NAME); + const request = store.getAll(); + + request.onerror = () => reject(request.error); + request.onsuccess = () => resolve(request.result || []); + } catch (error) { + reject(error); + } + }); + + // 处理代理配置 + const proxies = configs + .filter((proxy: ProxyConfig) => !FIXED_MODES.some(mode => mode.key === proxy.id)) + .map((proxy: ProxyConfig): CustomProxy => ({ + key: proxy.id, + name: proxy.name, + color: '#1890ff', + config: proxy, + enabled: proxy.enabled + })); + setCustomProxies(proxies); + + const enabledProxy = configs.find((proxy: ProxyConfig) => proxy.enabled); + if (enabledProxy) { + setCurrentMode(enabledProxy.id); + } + } catch (error) { + console.error('Error loading custom proxies:', error); + setCustomProxies([]); + } + }; + + // 处理代理模式变更 + const handleModeChange = async (mode: string) => { + if (mode === 'setting') { + // 打开设置页面 + await browser.runtime.openOptionsPage?.(); + return; + } + + if (mode === 'add') { + // 打开添加代理表单 + try { + const [activeTab] = await browser.tabs.query({ + active: true, + currentWindow: true + }); + + const optionsUrl = browser.runtime.getURL('/options.html'); + + if (activeTab?.url === optionsUrl) { + browser.tabs.sendMessage(activeTab.id!, { + action: ContentActionType.TRIGGER_ADD_PROXY + }); + } else { + await browser.tabs.create({ + url: optionsUrl + }); + } + } catch (error) { + console.error('Failed to get current tab:', error); + } + return; + } + + try { + setIsLoading(true); + + // 发送切换代理请求 + const response = await browser.runtime.sendMessage({ + action: ProxyActionType.SWITCH_PROXY, + mode + }); + + if (response && response.success) { + setCurrentMode(mode); + } + } catch (error) { + console.error(`Error switching to proxy mode ${mode}:`, error); + } finally { + setIsLoading(false); + } + }; + + // 构建菜单项 + const buildMenuItems = () => { + const items: MenuProps['items'] = [ + ...FIXED_MODES.map(mode => ({ + key: mode.key, + label: mode.name, + icon: mode.icon, + })), + {type: 'divider'} + ]; + + // 添加自定义代理 + if (customProxies.length > 0) { + items.push( + ...customProxies.map(proxy => ({ + key: proxy.key, + label: proxy.name, + icon: YAK, + })) + ); + items.push({type: 'divider'}); + } + + // 添加设置选项 + items.push({ + key: 'setting', + label: '代理设置', + icon: , + }); + + // 添加新建代理选项 + items.push({ + key: 'add', + label: '添加代理', + icon: , + }); + + return items; + }; + + return ( +

+ handleModeChange(key)} + /> + {isLoading &&
切换中...
} +
+ ); +}; \ No newline at end of file diff --git a/src/entrypoints/background.ts b/src/entrypoints/background.ts new file mode 100644 index 0000000..d615d78 --- /dev/null +++ b/src/entrypoints/background.ts @@ -0,0 +1,36 @@ +import { browser, type Browser } from 'wxt/browser'; +import {ContentActionType, ProxyActionType} from '@/types/action'; +import { getCurrentProxyMode, switchProxyMode } from '@/utils/proxy'; + +export default defineBackground({ + type: 'module', + + main() { + // 初始化代理状态监听 + browser.runtime.onMessage.addListener((message: any, sender: Browser.runtime.MessageSender, sendResponse: (response?: any) => void) => { + if (message.action === ProxyActionType.GET_PROXY_STATUS) { + // 获取当前代理状态 + getCurrentProxyMode().then(mode => { + sendResponse({ success: true, data: { mode } }); + }); + return true; + } else if (message.action === ProxyActionType.SWITCH_PROXY) { + // 切换代理 + switchProxyMode(message.mode).then(success => { + sendResponse({ success }); + + // 如果切换成功,广播代理状态更改消息 + if (success) { + browser.runtime.sendMessage({ + action: ContentActionType.PROXY_CONFIGS_UPDATED, + source: 'background' + }); + } + }); + return true; + } + }); + + console.log('代理管理后台服务已启动'); + }, +}); diff --git a/src/entrypoints/content.ts b/src/entrypoints/content.ts new file mode 100644 index 0000000..264a528 --- /dev/null +++ b/src/entrypoints/content.ts @@ -0,0 +1,6 @@ +export default defineContentScript({ + matches: ['*://*.google.com/*'], + main() { + console.log('Hello content.'); + }, +}); diff --git a/src/entrypoints/options/App.css b/src/entrypoints/options/App.css new file mode 100644 index 0000000..35a92f9 --- /dev/null +++ b/src/entrypoints/options/App.css @@ -0,0 +1,39 @@ +.options-layout { + min-height: 100vh; +} + +.options-header { + background-color: #F28B44; + display: flex; + align-items: center; + justify-content: center; + padding: 0 24px; +} + +.options-content { + padding: 24px; + max-width: 800px; + margin: 0 auto; + background-color: #f5f5f5; +} + +.proxy-list-card { + margin-bottom: 24px; +} + +.proxy-list-card .ant-list-item { + padding: 12px 24px; + transition: all 0.3s; +} + +.proxy-list-card .ant-list-item:hover { + background-color: rgba(242, 139, 68, 0.05); +} + +.add-proxy-card { + margin-bottom: 24px; +} + +.ant-space { + width: 100%; +} \ No newline at end of file diff --git a/src/entrypoints/options/App.tsx b/src/entrypoints/options/App.tsx new file mode 100644 index 0000000..508df8b --- /dev/null +++ b/src/entrypoints/options/App.tsx @@ -0,0 +1,242 @@ +import React, { useState, useEffect } from 'react'; +import { ConfigProvider, Layout, Typography, List, Button, Form, Input, Select, Space, Card, Divider } from 'antd'; +import { PlusOutlined, DeleteOutlined } from '@ant-design/icons'; +import { v4 as uuidv4 } from 'uuid'; +import { browser } from 'wxt/browser'; +import type { ProxyConfig } from '../../types/proxy'; +import { getAllProxyConfigs, saveProxyConfig, deleteProxyConfig, enableProxyConfig } from '../../utils/storage'; +import {ContentActionType, ProxyActionType} from '../../types/action'; +import './App.css'; + +const { Header, Content } = Layout; +const { Title } = Typography; +const { Option } = Select; + +export default function App() { + const [proxies, setProxies] = useState([]); + const [form] = Form.useForm(); + const [loading, setLoading] = useState(false); + + useEffect(() => { + loadProxies(); + + // 监听添加代理请求 + const handleMessage = (message: any) => { + if (message.action === ContentActionType.TRIGGER_ADD_PROXY) { + document.getElementById('add-proxy-form')?.scrollIntoView({ behavior: 'smooth' }); + } + }; + + browser.runtime.onMessage.addListener(handleMessage); + return () => { + browser.runtime.onMessage.removeListener(handleMessage); + }; + }, []); + + const loadProxies = async () => { + try { + const configs = await getAllProxyConfigs(); + setProxies(configs.filter(config => config.proxyType !== 'direct' && config.proxyType !== 'system')); + } catch (error) { + console.error('Error loading proxies:', error); + } + }; + + const handleSave = async (values: any) => { + try { + setLoading(true); + + const newProxy: ProxyConfig = { + id: uuidv4(), + name: values.name, + proxyType: values.proxyType, + host: values.host, + port: Number(values.port), + enabled: false + }; + + // if (values.username) newProxy.username = values.username; + // if (values.password) newProxy.password = values.password; + + await saveProxyConfig(newProxy); + + // 重新加载代理列表 + await loadProxies(); + + // 重置表单 + form.resetFields(); + + // 通知后台脚本 + browser.runtime.sendMessage({ + action: ContentActionType.PROXY_CONFIGS_UPDATED, + source: 'options' + }); + } catch (error) { + console.error('Error saving proxy:', error); + } finally { + setLoading(false); + } + }; + + const handleDelete = async (id: string) => { + try { + await deleteProxyConfig(id); + await loadProxies(); + + // 通知后台脚本 + browser.runtime.sendMessage({ + action: ContentActionType.PROXY_CONFIGS_UPDATED, + source: 'options' + }); + } catch (error) { + console.error(`Error deleting proxy ${id}:`, error); + } + }; + + const handleActivate = async (id: string) => { + try { + // 启用代理 + await enableProxyConfig(id); + + // 发送切换代理请求 + await browser.runtime.sendMessage({ + action: ProxyActionType.SWITCH_PROXY, + mode: id + }); + + // 重新加载代理列表 + await loadProxies(); + } catch (error) { + console.error(`Error activating proxy ${id}:`, error); + } + }; + + return ( + + +
+ Yaklang 代理管理设置 +
+ + + ( + handleActivate(proxy.id)} + disabled={proxy.enabled} + > + {proxy.enabled ? '已启用' : '启用'} + , + + + + + +
+
+ ); +} \ No newline at end of file diff --git a/src/entrypoints/options/index.html b/src/entrypoints/options/index.html new file mode 100644 index 0000000..f445ebe --- /dev/null +++ b/src/entrypoints/options/index.html @@ -0,0 +1,13 @@ + + + + + + Yaklang 代理管理设置 + + + +
+ + + \ No newline at end of file diff --git a/src/entrypoints/options/main.tsx b/src/entrypoints/options/main.tsx new file mode 100644 index 0000000..325dd75 --- /dev/null +++ b/src/entrypoints/options/main.tsx @@ -0,0 +1,7 @@ +import React from 'react'; +import { createRoot } from 'react-dom/client'; +import App from './App'; +import './style.css'; + +const root = createRoot(document.getElementById('app')!); +root.render(); \ No newline at end of file diff --git a/src/entrypoints/options/style.css b/src/entrypoints/options/style.css new file mode 100644 index 0000000..a9d7412 --- /dev/null +++ b/src/entrypoints/options/style.css @@ -0,0 +1,9 @@ +body { + margin: 0; + padding: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif; +} + +* { + box-sizing: border-box; +} \ No newline at end of file diff --git a/src/entrypoints/popup/App.css b/src/entrypoints/popup/App.css new file mode 100644 index 0000000..1f495b0 --- /dev/null +++ b/src/entrypoints/popup/App.css @@ -0,0 +1,73 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #54bc4ae0); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} + +.popup-container { + width: 320px; + min-height: 400px; + display: flex; + flex-direction: column; + padding: 0; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif; +} + +.popup-header { + background-color: #F28B44; + color: white; + padding: 12px 16px; + text-align: center; + border-bottom: 1px solid rgba(0, 0, 0, 0.1); +} + +.popup-header h1 { + margin: 0; + font-size: 18px; + font-weight: 500; +} + +.popup-content { + flex: 1; + padding: 0; + background-color: #fff; + overflow: auto; +} diff --git a/src/entrypoints/popup/App.tsx b/src/entrypoints/popup/App.tsx new file mode 100644 index 0000000..4c9610c --- /dev/null +++ b/src/entrypoints/popup/App.tsx @@ -0,0 +1,25 @@ +import React from 'react'; +import { ConfigProvider } from 'antd'; +import { ProxySwitch } from '../../components/ProxySwitch'; +import './App.css'; + +export default function App() { + return ( + +
+
+

Yaklang 代理管理

+
+
+ +
+
+
+ ); +} diff --git a/src/entrypoints/popup/index.html b/src/entrypoints/popup/index.html new file mode 100644 index 0000000..ed4cb94 --- /dev/null +++ b/src/entrypoints/popup/index.html @@ -0,0 +1,13 @@ + + + + + + Default Popup Title + + + +
+ + + diff --git a/src/entrypoints/popup/main.tsx b/src/entrypoints/popup/main.tsx new file mode 100644 index 0000000..4cc9737 --- /dev/null +++ b/src/entrypoints/popup/main.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App.tsx'; +import './style.css'; + +ReactDOM.createRoot(document.getElementById('root')!).render( + + + , +); diff --git a/src/entrypoints/popup/style.css b/src/entrypoints/popup/style.css new file mode 100644 index 0000000..2c3fac6 --- /dev/null +++ b/src/entrypoints/popup/style.css @@ -0,0 +1,69 @@ +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/src/entrypoints/proxy.content/App.css b/src/entrypoints/proxy.content/App.css new file mode 100644 index 0000000..273e908 --- /dev/null +++ b/src/entrypoints/proxy.content/App.css @@ -0,0 +1,303 @@ +/* Base styles for the proxy panel */ +.yak-proxy-root * { + all: initial; + box-sizing: border-box; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + line-height: normal; + margin: 0; + padding: 0; + border: none; + outline: none; +} + +.floating-panel { + position: fixed; + top: 30%; + right: 0; + transform: translateY(-30%); + background: white; + z-index: 2147483647; + width: 50px; + height: 40px; + overflow: hidden; + transition: width 0.2s cubic-bezier(0.4, 0, 0.2, 1), + height 0.2s cubic-bezier(0.4, 0, 0.2, 1), + background-color 0.2s ease; + box-sizing: border-box; +} + +/* Non-expanded state */ +.floating-panel:not(.expanded):not(.dragging) { + border-radius: 50px 0 0 50px; + box-shadow: -4px 0 20px rgba(0,0,0,0.15); + border: 1px solid #eee; + border-right: none; +} + +/* Dragging state */ +.floating-panel.dragging { + cursor: grabbing; + user-select: none; + opacity: 0.95; + transition: none; +} + +/* Hover state */ +.floating-panel:not(.expanded):hover { + width: 120px; + background: #fff7e6; + border-color: #ffd591; +} + +/* Expanded state */ +.floating-panel.expanded { + width: 180px; + height: auto; + max-height: 400px; + border-radius: 8px 0 0 8px; + box-shadow: -2px 0 10px rgba(0,0,0,0.1); + border: 1px solid #eee; + border-right: none; +} + +/* Panel header */ +.panel-header { + height: 40px; + min-height: 40px; + display: flex; + align-items: center; + padding: 0 8px; + cursor: pointer; + user-select: none; +} + +/* Header in expanded state */ +.floating-panel.expanded .panel-header { + background: #f8f9fa; + border-bottom: 1px solid #eee; +} + +.header-content { + display: flex; + align-items: center; + flex: 1; + overflow: hidden; +} + +/* Yak icon */ +.yak-icon { + width: 36px; + height: 36px; + min-width: 36px; + object-fit: contain; + filter: drop-shadow(0 2px 4px rgba(0,0,0,0.1)); + transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); +} + +.floating-panel.expanded .yak-icon { + width: 24px; + height: 24px; + min-width: 24px; +} + +/* Active proxy info */ +.active-proxy-info { + display: flex; + align-items: center; + margin-left: 8px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: #ff6b00; + font-size: 13px; + font-weight: 500; +} + +.active-proxy-info span:first-child { + margin-right: 6px; +} + +.active-proxy-info span:nth-child(2) { + color: #333; +} + +/* Panel content */ +.panel-content { + display: none; + background: white; + overflow-y: auto; + max-height: 360px; + opacity: 0; + transition: opacity 0.2s ease; +} + +.floating-panel.expanded .panel-content { + display: block; + opacity: 1; +} + +/* Scrollbar styles */ +.panel-content::-webkit-scrollbar { + width: 4px; +} + +.panel-content::-webkit-scrollbar-track { + background: #f5f5f5; +} + +.panel-content::-webkit-scrollbar-thumb { + background: #ddd; + border-radius: 4px; +} + +.panel-content::-webkit-scrollbar-thumb:hover { + background: #ccc; +} + +/* Proxy item */ +.proxy-item { + display: flex; + align-items: center; + padding: 8px 12px; + cursor: pointer; + transition: all 0.2s; + white-space: nowrap; + position: relative; +} + +.proxy-item:hover { + background: #fff7e6; +} + +.proxy-item.active { + background: #fff7e6; + color: #ff6b00; +} + +.proxy-item.active span { + color: #ff6b00; +} + +.proxy-item span:first-child { + margin-right: 8px; + font-size: 16px; +} + +.proxy-item span { + color: #333; +} + +.proxy-status { + position: absolute; + right: 12px; + width: 6px; + height: 6px; + border-radius: 50%; + background: #52c41a; + box-shadow: 0 0 4px rgba(82,196,26,0.3); +} + +.proxy-item.active .proxy-status { + background: #ff6b00; + box-shadow: 0 0 4px rgba(255,107,0,0.3); +} + +/* Divider */ +.divider { + height: 1px; + background: #f0f0f0; + margin: 4px 0; +} + +/* Action buttons */ +.action-button { + display: flex; + align-items: center; + padding: 8px 12px; + cursor: pointer; + transition: all 0.2s; + white-space: nowrap; + color: #666; +} + +.action-button:hover { + background: #fff7e6; + color: #ff6b00; +} + +.action-button:hover span { + color: #ff6b00; +} + +.action-button span:first-child { + margin-right: 8px; +} + +.action-button span { + color: #666; +} + +/* Tab container */ +.tabs-container { + display: flex; + height: 100%; + min-height: 200px; +} + +.tab-list { + width: 40px; + background: #f8f9fa; + border-right: 1px solid #eee; + display: flex; + flex-direction: column; + align-items: center; + padding-top: 8px; + position: sticky; + top: 0; + align-self: flex-start; + height: 100%; + flex-shrink: 0; +} + +.tab-button { + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 4px; + border-radius: 4px; + cursor: pointer; + transition: all 0.2s; + background: transparent; + border: none; + padding: 0; +} + +.tab-button:hover { + background: #fff7e6; +} + +.tab-button.active { + background: #fff7e6; + color: #ff6b00; +} + +.tab-content { + flex: 1; + display: flex; + flex-direction: column; + min-width: 0; + height: 100%; +} + +.tab-panel { + display: none; + height: 100%; + overflow: hidden; + flex-direction: column; +} + +.tab-panel.active { + display: flex; +} \ No newline at end of file diff --git a/src/entrypoints/proxy.content/App.tsx b/src/entrypoints/proxy.content/App.tsx new file mode 100644 index 0000000..770f04d --- /dev/null +++ b/src/entrypoints/proxy.content/App.tsx @@ -0,0 +1,356 @@ +import React, {useState, useEffect, useRef} from 'react'; +import {browser} from 'wxt/browser'; +import type {ProxyConfig} from '@/types/proxy.ts'; + +// Constants - using string literal instead of getURL since it will be replaced at build time +const YAK_ICON_URL = browser.runtime.getURL("/yak.svg"); + +// Action types from the application +const ProxyActionType = { + SET_PROXY_CONFIG: "SET_PROXY_CONFIG", + CLEAR_PROXY_CONFIG: "CLEAR_PROXY_CONFIG", + GET_PROXY_STATUS: "GET_PROXY_STATUS", + GET_PROXY_CONFIGS: "GET_PROXY_CONFIGS", + UPDATE_PROXY_CONFIG: "UPDATE_PROXY_CONFIG", +}; + +// Export anonymous component directly as default export +const App: React.FC = () => { + // State + const [expanded, setExpanded] = useState(false); + const [isDragging, setIsDragging] = useState(false); + const [activeTab, setActiveTab] = useState('proxy'); + const [proxyStatus, setProxyStatus] = useState({ + enable: false, + proxy: '', + currentMode: 'direct' + }); + const [proxyConfigs, setProxyConfigs] = useState([]); + + // Refs + const panelRef = useRef(null); + const dragStartRef = useRef({y: 0, top: 0}); + const timeoutRef = useRef(null); + + // Setup message listener for updates + useEffect(() => { + const messageListener = async (message: any) => { + if (message.action === "PROXY_STATUS_CHANGED" || message.action === "PROXY_CONFIGS_UPDATED") { + await fetchProxyStatus(); + await fetchProxyConfigs(); + } + }; + + browser.runtime.onMessage.addListener(messageListener); + + // Initial data fetch + fetchProxyStatus(); + fetchProxyConfigs(); + + // Position from localStorage if available + const savedPosition = localStorage.getItem("yakitProxyPanelPosition"); + if (savedPosition && panelRef.current) { + const top = (parseFloat(savedPosition) / 100) * window.innerHeight; + panelRef.current.style.top = `${top}px`; + panelRef.current.style.transform = 'translateY(0)'; + } + + return () => { + browser.runtime.onMessage.removeListener(messageListener); + if (timeoutRef.current !== null) { + clearTimeout(timeoutRef.current); + } + }; + }, []); + + // Fetch current proxy status + const fetchProxyStatus = async () => { + try { + const response = await sendMessageWithRetry({ + action: ProxyActionType.GET_PROXY_STATUS, + }); + + if (response && response.success) { + const status = response.data; + setProxyStatus({ + enable: status.enabled, + proxy: status.mode === "system" ? "system" : "", + currentMode: status.mode || "direct", + }); + } + } catch (error) { + console.error("Error fetching proxy status:", error); + } + }; + + // Fetch proxy configurations + const fetchProxyConfigs = async () => { + try { + const response = await sendMessageWithRetry({ + action: ProxyActionType.GET_PROXY_CONFIGS, + }); + + if (response && response.success) { + setProxyConfigs(response.data || []); + } + } catch (error) { + console.error("Error fetching proxy configs:", error); + } + }; + + // Send message with retry logic + const sendMessageWithRetry = async (message: any, maxRetries = 3) => { + for (let i = 0; i < maxRetries; i++) { + try { + return await browser.runtime.sendMessage(message); + } catch (error) { + console.warn(`Attempt ${i + 1} failed:`, error); + if (i === maxRetries - 1) { + throw error; + } + await new Promise(resolve => setTimeout(resolve, 500)); + } + } + }; + + // Handle switching to a different proxy + const handleProxySwitch = async (config: ProxyConfig) => { + try { + await sendMessageWithRetry({ + action: ProxyActionType.SET_PROXY_CONFIG, + config, + }); + + // Update the UI + await fetchProxyStatus(); + } catch (error) { + console.error("Error switching proxy:", error); + } + }; + + // Open options page + const openOptionsPage = async (triggerAdd = false) => { + try { + await sendMessageWithRetry({ + action: "OPEN_OPTIONS_PAGE", + triggerAdd, + }); + } catch (error) { + console.error("Error opening options page:", error); + } + }; + + // Handle dragging functionality + const handleMouseDown = (e: React.MouseEvent) => { + if (expanded) { + setExpanded(false); + return; + } + + if (e.button !== 0) return; // Only left mouse button + + setIsDragging(true); + + const rect = panelRef.current?.getBoundingClientRect(); + if (rect) { + dragStartRef.current = { + y: e.clientY, + top: rect.top, + }; + } + + e.preventDefault(); + }; + + const handleMouseMove = (e: React.MouseEvent) => { + if (!isDragging) return; + + const deltaY = e.clientY - dragStartRef.current.y; + const newTop = dragStartRef.current.top + deltaY; + + // Limit drag range to viewport + const maxTop = window.innerHeight - (panelRef.current?.offsetHeight || 0); + const boundedTop = Math.max(0, Math.min(newTop, maxTop)); + + if (panelRef.current) { + panelRef.current.style.top = `${boundedTop}px`; + panelRef.current.style.transform = 'translateY(0)'; + } + }; + + const handleMouseUp = () => { + if (!isDragging) return; + + setIsDragging(false); + + // Save position + if (panelRef.current) { + const top = panelRef.current.getBoundingClientRect().top; + const percentage = (top / window.innerHeight) * 100; + localStorage.setItem("yakitProxyPanelPosition", percentage.toString()); + } + }; + + // Handle mouse enter to clear any auto-collapse timeouts + const handleMouseEnter = () => { + if (timeoutRef.current !== null) { + clearTimeout(timeoutRef.current); + timeoutRef.current = null; + } + }; + + // Handle mouse leave to auto-collapse the panel + const handleMouseLeave = () => { + if (expanded) { + timeoutRef.current = window.setTimeout(() => { + setExpanded(false); + timeoutRef.current = null; + }, 300); + } + }; + + // Get active proxy name and icon + let proxyIcon = "🟢"; + let proxyName = "直接连接"; + + if (proxyStatus.currentMode === "system") { + proxyIcon = "⚙️"; + proxyName = "系统代理"; + } else if (proxyStatus.currentMode === "fixed_servers") { + const activeConfig = proxyConfigs.find(c => c.enabled); + if (activeConfig) { + proxyIcon = activeConfig.proxyType === "pac_script" ? "📜" : "🌐"; + proxyName = activeConfig.name || "未命名代理"; + } + } + + return ( +
+
!isDragging && setExpanded(!expanded)} + > +
+ Yak +
+ {proxyIcon} + {proxyName} +
+
+
+ + {expanded && ( +
+
+
+ + +
+ +
+
+
handleProxySwitch({ + id: 'direct', + name: '[直接连接]', + proxyType: 'direct', + enabled: false + })} + title="直接连接" + > + 🟢 + 直接连接 + {proxyStatus.currentMode === 'direct' &&
} +
+ +
handleProxySwitch({ + id: 'system', + name: '[系统代理]', + proxyType: 'system', + enabled: true + })} + title="系统代理" + > + ⚙️ + 系统代理 + {proxyStatus.currentMode === 'system' &&
} +
+ +
+ + {proxyConfigs.map(config => { + if (config.proxyType !== 'direct' && config.proxyType !== 'system') { + const isActive = proxyStatus.currentMode === 'fixed_servers' && config.enabled; + const proxyIcon = config.proxyType === 'pac_script' ? '📜' : '🌐'; + const tooltipText = config.proxyType === 'pac_script' + ? 'PAC Script' + : `${config.scheme ? `${config.scheme.toUpperCase()} ` : ''}${config.host}:${config.port}`; + + return ( +
handleProxySwitch({...config, enabled: true})} + title={tooltipText} + > + {proxyIcon} + {config.name || '未命名代理'} + {isActive &&
} +
+ ); + } + return null; + })} + +
+ +
openOptionsPage(true)}> + + 添加代理 +
+ +
openOptionsPage(false)}> + ⚙️ + 设置 +
+
+ +
+ {/* Links panel content will be added in the future */} +
+

链接面板功能将在未来版本中实现

+
+
+
+
+
+ )} +
+ ); +}; + +export default App; \ No newline at end of file diff --git a/src/entrypoints/proxy.content/index.tsx b/src/entrypoints/proxy.content/index.tsx new file mode 100644 index 0000000..8baeec1 --- /dev/null +++ b/src/entrypoints/proxy.content/index.tsx @@ -0,0 +1,39 @@ +import './App.css'; +import ReactDOM from 'react-dom/client'; +import App from './App.tsx'; + +export default defineContentScript({ + matches: [''], + cssInjectionMode: 'ui', + + + async main(ctx) { + console.log("Proxy content script starting..."); + + // Define your UI with shadow root for isolation + const ui = await createShadowRootUi(ctx, { + name: 'yakit-proxy-panel', + position: 'inline', + anchor: 'body', + onMount: (container) => { + // Create a wrapper div for the React app + const app = document.createElement('div'); + app.id = 'yakit-proxy-root'; + app.className = 'yak-proxy-root'; + container.append(app); + + // Create a root on the UI container and render a component + const root = ReactDOM.createRoot(app); + root.render(); + return root; + }, + onRemove: (root) => { + // Unmount the root when the UI is removed + root?.unmount(); + }, + }); + + // Mount the UI + ui.mount(); + }, +}); diff --git a/src/types/action.ts b/src/types/action.ts new file mode 100644 index 0000000..7d6c01c --- /dev/null +++ b/src/types/action.ts @@ -0,0 +1,19 @@ +export const ProxyActionType = { + SET_PROXY_CONFIG: "SET_PROXY_CONFIG", + CLEAR_PROXY_CONFIG: "CLEAR_PROXY_CONFIG", + GET_PROXY_STATUS: "GET_PROXY_STATUS", + CLEAR_PROXY_LOGS: "CLEAR_PROXY_LOGS", + GET_PROXY_LOGS: "GET_PROXY_LOGS", + GET_PROXY_CONFIGS: "GET_PROXY_CONFIGS", + ADD_PROXY_CONFIG: "ADD_PROXY_CONFIG", + UPDATE_PROXY_CONFIG: "UPDATE_PROXY_CONFIG", + SWITCH_PROXY: "SWITCH_PROXY", +} as const; + +export const ContentActionType = { + PROXY_CONFIGS_UPDATED: "PROXY_CONFIGS_UPDATED", + PROXY_STATUS_CHANGED: "PROXY_STATUS_CHANGED", + TRIGGER_ADD_PROXY: "TRIGGER_ADD_PROXY", +} + +export type ProxyActionType = typeof ProxyActionType[keyof typeof ProxyActionType]; \ No newline at end of file diff --git a/src/types/proxy.ts b/src/types/proxy.ts new file mode 100644 index 0000000..e59abb3 --- /dev/null +++ b/src/types/proxy.ts @@ -0,0 +1,45 @@ +export interface PacScript { + data?: string; + url?: string; + mandatory?: boolean; +} + +export interface ProxyConfig { + id: string; + name: string; + enabled: boolean; + proxyType: "direct" | "system" | "fixed_servers" | "pac_script" | "auto_detect"; + mode?: string; + host?: string; + port?: number; + scheme?: "http" | "https" | "socks4" | "socks5"; + pacScript?: PacScript; + bypassList?: string[]; + matchList?: string[]; +} + +export interface ProxyLog { + id: string; + timestamp: number; + url: string; + proxyId: string; + proxyName: string; + status: 'success' | 'error'; + errorMessage?: string; + method?: string; + requestHeaders?: Record; + requestBody?: string; + responseHeaders?: Record; + responseBody?: string; + timing?: { + startTime: number; + endTime: number; + duration: number; + }; + protocol?: string; + ip?: string; + fromCache?: boolean; + host?: string; + port?: number; + resourceType?: 'xhr' | 'fetch' | 'script' | 'stylesheet' | 'image' | 'other'; +} \ No newline at end of file diff --git a/src/utils/proxy.ts b/src/utils/proxy.ts new file mode 100644 index 0000000..7e661b9 --- /dev/null +++ b/src/utils/proxy.ts @@ -0,0 +1,106 @@ +import { browser } from 'wxt/browser'; +import type { ProxyConfig } from '../types/proxy'; +import { getAllProxyConfigs, getProxyConfig, enableProxyConfig, disableAllProxies } from './storage'; + +/** + * 获取当前激活的代理模式 + * @returns 返回当前的代理模式(direct, system, 或代理ID) + */ +export async function getCurrentProxyMode(): Promise { + try { + const configs = await getAllProxyConfigs(); + const enabledProxy = configs.find(config => config.enabled); + + if (enabledProxy) { + return enabledProxy.id; + } + + // 如果没有启用的代理,返回直接连接模式 + return 'direct'; + } catch (error) { + console.error('Error getting current proxy mode:', error); + return 'direct'; + } +} + +/** + * 切换到指定的代理模式 + * @param mode 代理模式(ID, direct, 或 system) + * @returns 是否成功切换 + */ +export async function switchProxyMode(mode: string): Promise { + try { + if (mode === 'direct') { + // 清除所有代理设置 + await disableAllProxies(); + await browser.proxy.settings.clear({}); + return true; + } + + if (mode === 'system') { + // 使用系统代理 + await disableAllProxies(); + await browser.proxy.settings.set({ + value: { mode: 'system' }, + scope: 'regular' + }); + return true; + } + + // 使用自定义代理 + const config = await getProxyConfig(mode); + if (!config) { + console.error(`Proxy config with ID ${mode} not found`); + return false; + } + + // 启用选定的代理配置 + await enableProxyConfig(config.id); + + // 设置代理 + if (config.proxyType === 'direct') { + await browser.proxy.settings.clear({}); + } else if (config.proxyType === 'system') { + await browser.proxy.settings.set({ + value: { mode: 'system' }, + scope: 'regular' + }); + } else { + // 构建代理配置 + const proxyConfig = { + mode: 'fixed_servers', + rules: {} + }; + + // 添加代理规则 + const proxyRule = { + scheme: config.proxyType, + host: config.host || '', + port: config.port || 80 + }; + + // 添加认证信息 + // if (config.username && config.password) { + // proxyRule.username = config.username; + // proxyRule.password = config.password; + // } + + // 设置代理规则 + proxyConfig.rules = { + singleProxy: proxyRule, + bypassList: ['localhost', '127.0.0.1'] + }; + + // 应用代理设置 + await browser.proxy.settings.set({ + value: proxyConfig, + scope: 'regular' + }); + } + + return true; + } catch (error) { + console.error(`Error switching to proxy mode ${mode}:`, error); + return false; + } +} \ No newline at end of file diff --git a/src/utils/storage.ts b/src/utils/storage.ts new file mode 100644 index 0000000..a332ab6 --- /dev/null +++ b/src/utils/storage.ts @@ -0,0 +1,133 @@ +import type { ProxyConfig } from '../types/proxy'; + +// 数据库名称和存储名称 +const DB_NAME = 'yaklang_extension'; +const PROXY_STORE_NAME = 'proxy_configs'; + +// 打开数据库 +async function openDB(): Promise { + return new Promise((resolve, reject) => { + const request = indexedDB.open(DB_NAME, 1); + + request.onerror = () => reject(request.error); + + request.onupgradeneeded = (event) => { + const db = (event.target as IDBOpenDBRequest).result; + + // 如果存储不存在,创建它 + if (!db.objectStoreNames.contains(PROXY_STORE_NAME)) { + db.createObjectStore(PROXY_STORE_NAME, { keyPath: 'id' }); + } + }; + + request.onsuccess = () => resolve(request.result); + }); +} + +// 获取所有代理配置 +export async function getAllProxyConfigs(): Promise { + try { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction([PROXY_STORE_NAME], 'readonly'); + const store = transaction.objectStore(PROXY_STORE_NAME); + const request = store.getAll(); + + request.onerror = () => reject(request.error); + request.onsuccess = () => resolve(request.result || []); + }); + } catch (error) { + console.error('Error getting proxy configs:', error); + return []; + } +} + +// 获取单个代理配置 +export async function getProxyConfig(id: string): Promise { + try { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction([PROXY_STORE_NAME], 'readonly'); + const store = transaction.objectStore(PROXY_STORE_NAME); + const request = store.get(id); + + request.onerror = () => reject(request.error); + request.onsuccess = () => resolve(request.result || null); + }); + } catch (error) { + console.error(`Error getting proxy config ${id}:`, error); + return null; + } +} + +// 保存代理配置 +export async function saveProxyConfig(config: ProxyConfig): Promise { + try { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction([PROXY_STORE_NAME], 'readwrite'); + const store = transaction.objectStore(PROXY_STORE_NAME); + const request = store.put(config); + + request.onerror = () => reject(request.error); + request.onsuccess = () => resolve(true); + }); + } catch (error) { + console.error('Error saving proxy config:', error); + return false; + } +} + +// 删除代理配置 +export async function deleteProxyConfig(id: string): Promise { + try { + const db = await openDB(); + return new Promise((resolve, reject) => { + const transaction = db.transaction([PROXY_STORE_NAME], 'readwrite'); + const store = transaction.objectStore(PROXY_STORE_NAME); + const request = store.delete(id); + + request.onerror = () => reject(request.error); + request.onsuccess = () => resolve(true); + }); + } catch (error) { + console.error(`Error deleting proxy config ${id}:`, error); + return false; + } +} + +// 启用指定的代理,禁用其他 +export async function enableProxyConfig(id: string): Promise { + try { + const configs = await getAllProxyConfigs(); + + for (const config of configs) { + const updated = { ...config, enabled: config.id === id }; + await saveProxyConfig(updated); + } + + return true; + } catch (error) { + console.error(`Error enabling proxy config ${id}:`, error); + return false; + } +} + +// 禁用所有代理 +export async function disableAllProxies(): Promise { + try { + const configs = await getAllProxyConfigs(); + + for (const config of configs) { + if (config.enabled) { + const updated = { ...config, enabled: false }; + await saveProxyConfig(updated); + } + } + + return true; + } catch (error) { + console.error('Error disabling all proxies:', error); + return false; + } +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..9b364da --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "./.wxt/tsconfig.json", + "compilerOptions": { + "allowImportingTsExtensions": true, + "jsx": "react-jsx" + } +} diff --git a/wxt.config.ts b/wxt.config.ts new file mode 100644 index 0000000..f747e8e --- /dev/null +++ b/wxt.config.ts @@ -0,0 +1,31 @@ +import { defineConfig } from 'wxt'; + +// See https://wxt.dev/api/config.html +export default defineConfig({ + srcDir: 'src', + modules: ['@wxt-dev/module-react'], + manifest: { + name: 'Yaklang 代理管理', + description: '一个用于快速切换浏览器代理设置的扩展', + version: '0.1.0', + permissions: [ + 'proxy', + 'storage', + 'tabs' + ], + host_permissions: [ + '' + ], + web_accessible_resources: [ + { + resources: ['yak.svg'], + matches: [''] + } + ], + icons: { + "16": "icon/icon16.png", + "48": "icon/icon48.png", + "128": "icon/icon128.png" + }, + } +});