├── .gitignore ├── .prettierrc.json ├── LICENSE ├── README.md ├── eslint.config.mjs ├── manifest.js ├── package.json ├── pnpm-lock.yaml ├── public-2.0.0.zip ├── public-2.1.0.zip ├── public ├── _locales │ ├── en │ │ └── messages.json │ └── zh │ │ └── messages.json ├── assets │ ├── icon-128.png │ ├── icon-16.png │ ├── icon-32.png │ └── icon-48.png └── options.html ├── rollup.config.js ├── src ├── background │ └── index.ts ├── config │ ├── basic.ts │ └── default-options.ts ├── entry │ ├── background.ts │ └── options.ts ├── options │ ├── components │ │ ├── About │ │ │ └── index.tsx │ │ ├── App │ │ │ ├── index.scss │ │ │ └── index.tsx │ │ ├── AppThemeProvider │ │ │ └── index.tsx │ │ ├── CodeEdit │ │ │ ├── index.scss │ │ │ └── index.tsx │ │ ├── RootHost │ │ │ └── index.tsx │ │ ├── RuleGroup │ │ │ ├── AddRuleButton.tsx │ │ │ ├── index.scss │ │ │ └── index.tsx │ │ ├── RuleItem │ │ │ ├── index.scss │ │ │ └── index.tsx │ │ └── Settings │ │ │ ├── index.scss │ │ │ └── index.tsx │ ├── index.scss │ ├── index.ts │ └── md.scss ├── services │ └── index.ts ├── types │ └── index.ts └── utils │ ├── array.ts │ ├── confirm.tsx │ ├── deep-partial.ts │ ├── json.ts │ ├── map-values.ts │ ├── migrate.ts │ ├── normalize.ts │ ├── random.ts │ ├── render-to-root.ts │ ├── template.ts │ ├── toast.tsx │ └── use-bool.ts ├── tsconfig.json └── typings ├── file.d.ts └── index.d.ts /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | .idea 4 | *.log 5 | public/dist 6 | public/manifest.json 7 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": [], 3 | "singleQuote": true 4 | } 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Berton Zhu 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | chrome-menufish 2 | =============== 3 | 4 | chrome 右键菜单,自定义搜索和分享。 5 | 6 | 新增:自定义识图、配置的导入导出、右键菜单开关。 7 | 8 | ### 如何安装 9 | 方式1: 10 | 使用 Chrome 访问[https://chrome.google.com/webstore/detail/ocdigobahepkapkegppnioklpjgbppok](https://chrome.google.com/webstore/detail/ocdigobahepkapkegppnioklpjgbppok) 11 | 或者在 [webstore](https://chrome.google.com/webstore) 中搜索 `Menu fish`,然后安装。 12 | 13 | 推荐有良好网络的条件下使用这种方式。 14 | 15 | 方式2: 16 | 下载 [menufish_latest.crx](https://github.com/meowtec/chrome-menufish/raw/master/menufish_latest.crx) 17 | 打开`扩展程序`页面,把文件拖进去。 18 | 19 | 如果方式2不行,那就只能使用方式3. 20 | 21 | 方式3: 22 | 点击项目 Github 页面右侧的 [Download Zip](https://github.com/meowtec/chrome-menufish/archive/master.zip) 23 | 解压下载得到的 `.zip` 文件 24 | 进入 `扩展程序` - `开发者模式` - `加载正在开发的扩展程序`, 选择解压得到的文件夹。 25 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslint from '@eslint/js'; 2 | import tsEslint from 'typescript-eslint'; 3 | import eslintReactHooks from 'eslint-plugin-react-hooks'; 4 | import eslintPrettier from 'eslint-plugin-prettier/recommended'; 5 | import react from 'eslint-plugin-react'; 6 | 7 | export default tsEslint.config( 8 | { 9 | ignores: [ 10 | '.eslintrc.cjs', 11 | '*.config.cjs', 12 | '*.config.mjs', 13 | '*.d.ts', 14 | 'public', 15 | ], 16 | }, 17 | eslint.configs.recommended, 18 | ...tsEslint.configs.recommended, 19 | { 20 | files: ['**/*.{js,mjs,cjs,jsx,mjsx,ts,tsx,mtsx}'], 21 | ...react.configs.flat.recommended, 22 | ...react.configs.flat['jsx-runtime'], 23 | }, 24 | { 25 | plugins: { 26 | 'react-hooks': eslintReactHooks, 27 | }, 28 | // @ts-ignore 29 | rules: eslintReactHooks.configs.recommended.rules, 30 | }, 31 | eslintPrettier, 32 | ); 33 | -------------------------------------------------------------------------------- /manifest.js: -------------------------------------------------------------------------------- 1 | import pkg from './package.json' assert { type: 'json' }; 2 | 3 | /** 4 | * @type {chrome.runtime.ManifestV3} 5 | */ 6 | export default { 7 | name: 'Menu fish', 8 | version: pkg.version, 9 | manifest_version: 3, 10 | description: 11 | '右键菜单增强,为右键添加搜索和分享等功能。支持自定义搜索引擎和分享目标站点', 12 | icons: { 13 | 16: 'assets/icon-16.png', 14 | 32: 'assets/icon-32.png', 15 | 48: 'assets/icon-48.png', 16 | 128: 'assets/icon-128.png', 17 | }, 18 | options_page: 'options.html', 19 | background: { 20 | service_worker: 'dist/background.js', 21 | type: 'module', 22 | }, 23 | permissions: ['contextMenus', 'storage'], 24 | homepage_url: 'https://github.com/meowtec/chrome-menufish', 25 | incognito: 'split', 26 | default_locale: 'en', 27 | }; 28 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.1.0", 3 | "type": "module", 4 | "scripts": { 5 | "dev": "rollup -c -w", 6 | "serve": "sirv public -p 16123", 7 | "watch": "rollup -c -w", 8 | "build": "rollup -c", 9 | "tscheck": "tsc --noEmit", 10 | "lint": "npm run tscheck && eslint src" 11 | }, 12 | "devDependencies": { 13 | "@eslint/js": "^9.17.0", 14 | "@rollup/plugin-commonjs": "^28.0.2", 15 | "@rollup/plugin-node-resolve": "^16.0.0", 16 | "@rollup/plugin-replace": "^6.0.2", 17 | "@rollup/plugin-terser": "^0.4.4", 18 | "@rollup/plugin-typescript": "^12.1.2", 19 | "@types/chrome": "^0.0.287", 20 | "@types/cross-zip": "^4.0.2", 21 | "@types/lodash-es": "^4.17.12", 22 | "@types/node": "^22.10.2", 23 | "@types/react": "^18.0.10", 24 | "@types/react-dom": "^18.0.10", 25 | "cross-zip": "^4.0.1", 26 | "eslint": "^9.17.0", 27 | "eslint-config-prettier": "^9.1.0", 28 | "eslint-plugin-prettier": "^5.2.1", 29 | "eslint-plugin-react": "^7.37.3", 30 | "eslint-plugin-react-hooks": "^5.1.0", 31 | "marked": "^15.0.4", 32 | "prettier": "^3.4.2", 33 | "rollup": "^4.29.1", 34 | "rollup-plugin-scss": "^4.0.1", 35 | "sass": "^1.83.0", 36 | "sirv-cli": "^3.0.0", 37 | "typescript": "^5.7.2", 38 | "typescript-eslint": "^8.18.2" 39 | }, 40 | "dependencies": { 41 | "@dnd-kit/core": "^6.3.1", 42 | "@dnd-kit/sortable": "^10.0.0", 43 | "@dnd-kit/utilities": "^3.2.2", 44 | "@emotion/react": "^11.14.0", 45 | "@emotion/styled": "^11.14.0", 46 | "@mui/icons-material": "^6.3.0", 47 | "@mui/material": "^6.3.0", 48 | "clsx": "^2.1.1", 49 | "lodash-es": "^4.17.21", 50 | "mitt": "^3.0.1", 51 | "nanoid": "^5.0.9", 52 | "react": "^18.0.10", 53 | "react-dnd": "^16.0.1", 54 | "react-dnd-html5-backend": "^16.0.1", 55 | "react-dom": "^18.0.10", 56 | "swr": "^2.3.0", 57 | "use-debounce": "^10.0.4" 58 | }, 59 | "packageManager": "pnpm@9.12.3" 60 | } 61 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@dnd-kit/core': 12 | specifier: ^6.3.1 13 | version: 6.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 14 | '@dnd-kit/sortable': 15 | specifier: ^10.0.0 16 | version: 10.0.0(@dnd-kit/core@6.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) 17 | '@dnd-kit/utilities': 18 | specifier: ^3.2.2 19 | version: 3.2.2(react@18.3.1) 20 | '@emotion/react': 21 | specifier: ^11.14.0 22 | version: 11.14.0(@types/react@18.3.18)(react@18.3.1) 23 | '@emotion/styled': 24 | specifier: ^11.14.0 25 | version: 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) 26 | '@mui/icons-material': 27 | specifier: ^6.3.0 28 | version: 6.3.0(@mui/material@6.3.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) 29 | '@mui/material': 30 | specifier: ^6.3.0 31 | version: 6.3.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 32 | clsx: 33 | specifier: ^2.1.1 34 | version: 2.1.1 35 | lodash-es: 36 | specifier: ^4.17.21 37 | version: 4.17.21 38 | mitt: 39 | specifier: ^3.0.1 40 | version: 3.0.1 41 | nanoid: 42 | specifier: ^5.0.9 43 | version: 5.0.9 44 | react: 45 | specifier: ^18.0.10 46 | version: 18.3.1 47 | react-dnd: 48 | specifier: ^16.0.1 49 | version: 16.0.1(@types/node@22.10.2)(@types/react@18.3.18)(react@18.3.1) 50 | react-dnd-html5-backend: 51 | specifier: ^16.0.1 52 | version: 16.0.1 53 | react-dom: 54 | specifier: ^18.0.10 55 | version: 18.3.1(react@18.3.1) 56 | swr: 57 | specifier: ^2.3.0 58 | version: 2.3.0(react@18.3.1) 59 | use-debounce: 60 | specifier: ^10.0.4 61 | version: 10.0.4(react@18.3.1) 62 | devDependencies: 63 | '@eslint/js': 64 | specifier: ^9.17.0 65 | version: 9.17.0 66 | '@rollup/plugin-commonjs': 67 | specifier: ^28.0.2 68 | version: 28.0.2(rollup@4.29.1) 69 | '@rollup/plugin-node-resolve': 70 | specifier: ^16.0.0 71 | version: 16.0.0(rollup@4.29.1) 72 | '@rollup/plugin-replace': 73 | specifier: ^6.0.2 74 | version: 6.0.2(rollup@4.29.1) 75 | '@rollup/plugin-terser': 76 | specifier: ^0.4.4 77 | version: 0.4.4(rollup@4.29.1) 78 | '@rollup/plugin-typescript': 79 | specifier: ^12.1.2 80 | version: 12.1.2(rollup@4.29.1)(tslib@2.8.1)(typescript@5.7.2) 81 | '@types/chrome': 82 | specifier: ^0.0.287 83 | version: 0.0.287 84 | '@types/cross-zip': 85 | specifier: ^4.0.2 86 | version: 4.0.2 87 | '@types/lodash-es': 88 | specifier: ^4.17.12 89 | version: 4.17.12 90 | '@types/node': 91 | specifier: ^22.10.2 92 | version: 22.10.2 93 | '@types/react': 94 | specifier: ^18.0.10 95 | version: 18.3.18 96 | '@types/react-dom': 97 | specifier: ^18.0.10 98 | version: 18.3.5(@types/react@18.3.18) 99 | cross-zip: 100 | specifier: ^4.0.1 101 | version: 4.0.1 102 | eslint: 103 | specifier: ^9.17.0 104 | version: 9.17.0 105 | eslint-config-prettier: 106 | specifier: ^9.1.0 107 | version: 9.1.0(eslint@9.17.0) 108 | eslint-plugin-prettier: 109 | specifier: ^5.2.1 110 | version: 5.2.1(eslint-config-prettier@9.1.0(eslint@9.17.0))(eslint@9.17.0)(prettier@3.4.2) 111 | eslint-plugin-react: 112 | specifier: ^7.37.3 113 | version: 7.37.3(eslint@9.17.0) 114 | eslint-plugin-react-hooks: 115 | specifier: ^5.1.0 116 | version: 5.1.0(eslint@9.17.0) 117 | marked: 118 | specifier: ^15.0.4 119 | version: 15.0.4 120 | prettier: 121 | specifier: ^3.4.2 122 | version: 3.4.2 123 | rollup: 124 | specifier: ^4.29.1 125 | version: 4.29.1 126 | rollup-plugin-scss: 127 | specifier: ^4.0.1 128 | version: 4.0.1 129 | sass: 130 | specifier: ^1.83.0 131 | version: 1.83.0 132 | sirv-cli: 133 | specifier: ^3.0.0 134 | version: 3.0.0 135 | typescript: 136 | specifier: ^5.7.2 137 | version: 5.7.2 138 | typescript-eslint: 139 | specifier: ^8.18.2 140 | version: 8.18.2(eslint@9.17.0)(typescript@5.7.2) 141 | 142 | packages: 143 | 144 | '@babel/code-frame@7.26.2': 145 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 146 | engines: {node: '>=6.9.0'} 147 | 148 | '@babel/generator@7.26.3': 149 | resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} 150 | engines: {node: '>=6.9.0'} 151 | 152 | '@babel/helper-module-imports@7.25.9': 153 | resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} 154 | engines: {node: '>=6.9.0'} 155 | 156 | '@babel/helper-string-parser@7.25.9': 157 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} 158 | engines: {node: '>=6.9.0'} 159 | 160 | '@babel/helper-validator-identifier@7.25.9': 161 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 162 | engines: {node: '>=6.9.0'} 163 | 164 | '@babel/parser@7.26.3': 165 | resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} 166 | engines: {node: '>=6.0.0'} 167 | hasBin: true 168 | 169 | '@babel/runtime@7.26.0': 170 | resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} 171 | engines: {node: '>=6.9.0'} 172 | 173 | '@babel/template@7.25.9': 174 | resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} 175 | engines: {node: '>=6.9.0'} 176 | 177 | '@babel/traverse@7.26.4': 178 | resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} 179 | engines: {node: '>=6.9.0'} 180 | 181 | '@babel/types@7.26.3': 182 | resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} 183 | engines: {node: '>=6.9.0'} 184 | 185 | '@dnd-kit/accessibility@3.1.1': 186 | resolution: {integrity: sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==} 187 | peerDependencies: 188 | react: '>=16.8.0' 189 | 190 | '@dnd-kit/core@6.3.1': 191 | resolution: {integrity: sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==} 192 | peerDependencies: 193 | react: '>=16.8.0' 194 | react-dom: '>=16.8.0' 195 | 196 | '@dnd-kit/sortable@10.0.0': 197 | resolution: {integrity: sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg==} 198 | peerDependencies: 199 | '@dnd-kit/core': ^6.3.0 200 | react: '>=16.8.0' 201 | 202 | '@dnd-kit/utilities@3.2.2': 203 | resolution: {integrity: sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==} 204 | peerDependencies: 205 | react: '>=16.8.0' 206 | 207 | '@emotion/babel-plugin@11.13.5': 208 | resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} 209 | 210 | '@emotion/cache@11.14.0': 211 | resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} 212 | 213 | '@emotion/hash@0.9.2': 214 | resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} 215 | 216 | '@emotion/is-prop-valid@1.3.1': 217 | resolution: {integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==} 218 | 219 | '@emotion/memoize@0.9.0': 220 | resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} 221 | 222 | '@emotion/react@11.14.0': 223 | resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} 224 | peerDependencies: 225 | '@types/react': '*' 226 | react: '>=16.8.0' 227 | peerDependenciesMeta: 228 | '@types/react': 229 | optional: true 230 | 231 | '@emotion/serialize@1.3.3': 232 | resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} 233 | 234 | '@emotion/sheet@1.4.0': 235 | resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} 236 | 237 | '@emotion/styled@11.14.0': 238 | resolution: {integrity: sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==} 239 | peerDependencies: 240 | '@emotion/react': ^11.0.0-rc.0 241 | '@types/react': '*' 242 | react: '>=16.8.0' 243 | peerDependenciesMeta: 244 | '@types/react': 245 | optional: true 246 | 247 | '@emotion/unitless@0.10.0': 248 | resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} 249 | 250 | '@emotion/use-insertion-effect-with-fallbacks@1.2.0': 251 | resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} 252 | peerDependencies: 253 | react: '>=16.8.0' 254 | 255 | '@emotion/utils@1.4.2': 256 | resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} 257 | 258 | '@emotion/weak-memoize@0.4.0': 259 | resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} 260 | 261 | '@eslint-community/eslint-utils@4.4.1': 262 | resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} 263 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 264 | peerDependencies: 265 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 266 | 267 | '@eslint-community/regexpp@4.12.1': 268 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 269 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 270 | 271 | '@eslint/config-array@0.19.1': 272 | resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} 273 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 274 | 275 | '@eslint/core@0.9.1': 276 | resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==} 277 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 278 | 279 | '@eslint/eslintrc@3.2.0': 280 | resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} 281 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 282 | 283 | '@eslint/js@9.17.0': 284 | resolution: {integrity: sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==} 285 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 286 | 287 | '@eslint/object-schema@2.1.5': 288 | resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} 289 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 290 | 291 | '@eslint/plugin-kit@0.2.4': 292 | resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==} 293 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 294 | 295 | '@humanfs/core@0.19.1': 296 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 297 | engines: {node: '>=18.18.0'} 298 | 299 | '@humanfs/node@0.16.6': 300 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 301 | engines: {node: '>=18.18.0'} 302 | 303 | '@humanwhocodes/module-importer@1.0.1': 304 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 305 | engines: {node: '>=12.22'} 306 | 307 | '@humanwhocodes/retry@0.3.1': 308 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 309 | engines: {node: '>=18.18'} 310 | 311 | '@humanwhocodes/retry@0.4.1': 312 | resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} 313 | engines: {node: '>=18.18'} 314 | 315 | '@jridgewell/gen-mapping@0.3.8': 316 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 317 | engines: {node: '>=6.0.0'} 318 | 319 | '@jridgewell/resolve-uri@3.1.2': 320 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 321 | engines: {node: '>=6.0.0'} 322 | 323 | '@jridgewell/set-array@1.2.1': 324 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 325 | engines: {node: '>=6.0.0'} 326 | 327 | '@jridgewell/source-map@0.3.6': 328 | resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} 329 | 330 | '@jridgewell/sourcemap-codec@1.5.0': 331 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 332 | 333 | '@jridgewell/trace-mapping@0.3.25': 334 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 335 | 336 | '@mui/core-downloads-tracker@6.3.0': 337 | resolution: {integrity: sha512-/d8NwSuC3rMwCjswmGB3oXC4sdDuhIUJ8inVQAxGrADJhf0eq/kmy+foFKvpYhHl2siOZR+MLdFttw6/Bzqtqg==} 338 | 339 | '@mui/icons-material@6.3.0': 340 | resolution: {integrity: sha512-3uWws6DveDn5KxCS34p+sUNMxehuclQY6OmoJeJJ+Sfg9L7LGBpksY/nX5ywKAqickTZnn+sQyVcp963ep9jvw==} 341 | engines: {node: '>=14.0.0'} 342 | peerDependencies: 343 | '@mui/material': ^6.3.0 344 | '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 345 | react: ^17.0.0 || ^18.0.0 || ^19.0.0 346 | peerDependenciesMeta: 347 | '@types/react': 348 | optional: true 349 | 350 | '@mui/material@6.3.0': 351 | resolution: {integrity: sha512-qhlTFyRMxfoVPxUtA5e8IvqxP0dWo2Ij7cvot7Orag+etUlZH+3UwD8gZGt+3irOoy7Ms3UNBflYjwEikUXtAQ==} 352 | engines: {node: '>=14.0.0'} 353 | peerDependencies: 354 | '@emotion/react': ^11.5.0 355 | '@emotion/styled': ^11.3.0 356 | '@mui/material-pigment-css': ^6.3.0 357 | '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 358 | react: ^17.0.0 || ^18.0.0 || ^19.0.0 359 | react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 360 | peerDependenciesMeta: 361 | '@emotion/react': 362 | optional: true 363 | '@emotion/styled': 364 | optional: true 365 | '@mui/material-pigment-css': 366 | optional: true 367 | '@types/react': 368 | optional: true 369 | 370 | '@mui/private-theming@6.3.0': 371 | resolution: {integrity: sha512-tdS8jvqMokltNTXg6ioRCCbVdDmZUJZa/T9VtTnX2Lwww3FTgCakst9tWLZSxm1fEE9Xp0m7onZJmgeUmWQYVw==} 372 | engines: {node: '>=14.0.0'} 373 | peerDependencies: 374 | '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 375 | react: ^17.0.0 || ^18.0.0 || ^19.0.0 376 | peerDependenciesMeta: 377 | '@types/react': 378 | optional: true 379 | 380 | '@mui/styled-engine@6.3.0': 381 | resolution: {integrity: sha512-iWA6eyiPkO07AlHxRUvI7dwVRSc+84zV54kLmjUms67GJeOWVuXlu8ZO+UhCnwJxHacghxnabsMEqet5PYQmHg==} 382 | engines: {node: '>=14.0.0'} 383 | peerDependencies: 384 | '@emotion/react': ^11.4.1 385 | '@emotion/styled': ^11.3.0 386 | react: ^17.0.0 || ^18.0.0 || ^19.0.0 387 | peerDependenciesMeta: 388 | '@emotion/react': 389 | optional: true 390 | '@emotion/styled': 391 | optional: true 392 | 393 | '@mui/system@6.3.0': 394 | resolution: {integrity: sha512-L+8hUHMNlfReKSqcnVslFrVhoNfz/jw7Fe9NfDE85R3KarvZ4O3MU9daF/lZeqEAvnYxEilkkTfDwQ7qCgJdFg==} 395 | engines: {node: '>=14.0.0'} 396 | peerDependencies: 397 | '@emotion/react': ^11.5.0 398 | '@emotion/styled': ^11.3.0 399 | '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 400 | react: ^17.0.0 || ^18.0.0 || ^19.0.0 401 | peerDependenciesMeta: 402 | '@emotion/react': 403 | optional: true 404 | '@emotion/styled': 405 | optional: true 406 | '@types/react': 407 | optional: true 408 | 409 | '@mui/types@7.2.20': 410 | resolution: {integrity: sha512-straFHD7L8v05l/N5vcWk+y7eL9JF0C2mtph/y4BPm3gn2Eh61dDwDB65pa8DLss3WJfDXYC7Kx5yjP0EmXpgw==} 411 | peerDependencies: 412 | '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 413 | peerDependenciesMeta: 414 | '@types/react': 415 | optional: true 416 | 417 | '@mui/utils@6.3.0': 418 | resolution: {integrity: sha512-MkDBF08OPVwXhAjedyMykRojgvmf0y/jxkBWjystpfI/pasyTYrfdv4jic6s7j3y2+a+SJzS9qrD6X8ZYj/8AQ==} 419 | engines: {node: '>=14.0.0'} 420 | peerDependencies: 421 | '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 422 | react: ^17.0.0 || ^18.0.0 || ^19.0.0 423 | peerDependenciesMeta: 424 | '@types/react': 425 | optional: true 426 | 427 | '@nodelib/fs.scandir@2.1.5': 428 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 429 | engines: {node: '>= 8'} 430 | 431 | '@nodelib/fs.stat@2.0.5': 432 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 433 | engines: {node: '>= 8'} 434 | 435 | '@nodelib/fs.walk@1.2.8': 436 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 437 | engines: {node: '>= 8'} 438 | 439 | '@parcel/watcher-android-arm64@2.5.0': 440 | resolution: {integrity: sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==} 441 | engines: {node: '>= 10.0.0'} 442 | cpu: [arm64] 443 | os: [android] 444 | 445 | '@parcel/watcher-darwin-arm64@2.5.0': 446 | resolution: {integrity: sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==} 447 | engines: {node: '>= 10.0.0'} 448 | cpu: [arm64] 449 | os: [darwin] 450 | 451 | '@parcel/watcher-darwin-x64@2.5.0': 452 | resolution: {integrity: sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==} 453 | engines: {node: '>= 10.0.0'} 454 | cpu: [x64] 455 | os: [darwin] 456 | 457 | '@parcel/watcher-freebsd-x64@2.5.0': 458 | resolution: {integrity: sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==} 459 | engines: {node: '>= 10.0.0'} 460 | cpu: [x64] 461 | os: [freebsd] 462 | 463 | '@parcel/watcher-linux-arm-glibc@2.5.0': 464 | resolution: {integrity: sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==} 465 | engines: {node: '>= 10.0.0'} 466 | cpu: [arm] 467 | os: [linux] 468 | 469 | '@parcel/watcher-linux-arm-musl@2.5.0': 470 | resolution: {integrity: sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==} 471 | engines: {node: '>= 10.0.0'} 472 | cpu: [arm] 473 | os: [linux] 474 | 475 | '@parcel/watcher-linux-arm64-glibc@2.5.0': 476 | resolution: {integrity: sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==} 477 | engines: {node: '>= 10.0.0'} 478 | cpu: [arm64] 479 | os: [linux] 480 | 481 | '@parcel/watcher-linux-arm64-musl@2.5.0': 482 | resolution: {integrity: sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==} 483 | engines: {node: '>= 10.0.0'} 484 | cpu: [arm64] 485 | os: [linux] 486 | 487 | '@parcel/watcher-linux-x64-glibc@2.5.0': 488 | resolution: {integrity: sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==} 489 | engines: {node: '>= 10.0.0'} 490 | cpu: [x64] 491 | os: [linux] 492 | 493 | '@parcel/watcher-linux-x64-musl@2.5.0': 494 | resolution: {integrity: sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==} 495 | engines: {node: '>= 10.0.0'} 496 | cpu: [x64] 497 | os: [linux] 498 | 499 | '@parcel/watcher-win32-arm64@2.5.0': 500 | resolution: {integrity: sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==} 501 | engines: {node: '>= 10.0.0'} 502 | cpu: [arm64] 503 | os: [win32] 504 | 505 | '@parcel/watcher-win32-ia32@2.5.0': 506 | resolution: {integrity: sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==} 507 | engines: {node: '>= 10.0.0'} 508 | cpu: [ia32] 509 | os: [win32] 510 | 511 | '@parcel/watcher-win32-x64@2.5.0': 512 | resolution: {integrity: sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==} 513 | engines: {node: '>= 10.0.0'} 514 | cpu: [x64] 515 | os: [win32] 516 | 517 | '@parcel/watcher@2.5.0': 518 | resolution: {integrity: sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==} 519 | engines: {node: '>= 10.0.0'} 520 | 521 | '@pkgr/core@0.1.1': 522 | resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} 523 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 524 | 525 | '@polka/url@1.0.0-next.28': 526 | resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} 527 | 528 | '@popperjs/core@2.11.8': 529 | resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} 530 | 531 | '@react-dnd/asap@5.0.2': 532 | resolution: {integrity: sha512-WLyfoHvxhs0V9U+GTsGilGgf2QsPl6ZZ44fnv0/b8T3nQyvzxidxsg/ZltbWssbsRDlYW8UKSQMTGotuTotZ6A==} 533 | 534 | '@react-dnd/invariant@4.0.2': 535 | resolution: {integrity: sha512-xKCTqAK/FFauOM9Ta2pswIyT3D8AQlfrYdOi/toTPEhqCuAs1v5tcJ3Y08Izh1cJ5Jchwy9SeAXmMg6zrKs2iw==} 536 | 537 | '@react-dnd/shallowequal@4.0.2': 538 | resolution: {integrity: sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==} 539 | 540 | '@rollup/plugin-commonjs@28.0.2': 541 | resolution: {integrity: sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==} 542 | engines: {node: '>=16.0.0 || 14 >= 14.17'} 543 | peerDependencies: 544 | rollup: ^2.68.0||^3.0.0||^4.0.0 545 | peerDependenciesMeta: 546 | rollup: 547 | optional: true 548 | 549 | '@rollup/plugin-node-resolve@16.0.0': 550 | resolution: {integrity: sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==} 551 | engines: {node: '>=14.0.0'} 552 | peerDependencies: 553 | rollup: ^2.78.0||^3.0.0||^4.0.0 554 | peerDependenciesMeta: 555 | rollup: 556 | optional: true 557 | 558 | '@rollup/plugin-replace@6.0.2': 559 | resolution: {integrity: sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ==} 560 | engines: {node: '>=14.0.0'} 561 | peerDependencies: 562 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 563 | peerDependenciesMeta: 564 | rollup: 565 | optional: true 566 | 567 | '@rollup/plugin-terser@0.4.4': 568 | resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} 569 | engines: {node: '>=14.0.0'} 570 | peerDependencies: 571 | rollup: ^2.0.0||^3.0.0||^4.0.0 572 | peerDependenciesMeta: 573 | rollup: 574 | optional: true 575 | 576 | '@rollup/plugin-typescript@12.1.2': 577 | resolution: {integrity: sha512-cdtSp154H5sv637uMr1a8OTWB0L1SWDSm1rDGiyfcGcvQ6cuTs4MDk2BVEBGysUWago4OJN4EQZqOTl/QY3Jgg==} 578 | engines: {node: '>=14.0.0'} 579 | peerDependencies: 580 | rollup: ^2.14.0||^3.0.0||^4.0.0 581 | tslib: '*' 582 | typescript: '>=3.7.0' 583 | peerDependenciesMeta: 584 | rollup: 585 | optional: true 586 | tslib: 587 | optional: true 588 | 589 | '@rollup/pluginutils@5.1.4': 590 | resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} 591 | engines: {node: '>=14.0.0'} 592 | peerDependencies: 593 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 594 | peerDependenciesMeta: 595 | rollup: 596 | optional: true 597 | 598 | '@rollup/rollup-android-arm-eabi@4.29.1': 599 | resolution: {integrity: sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==} 600 | cpu: [arm] 601 | os: [android] 602 | 603 | '@rollup/rollup-android-arm64@4.29.1': 604 | resolution: {integrity: sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==} 605 | cpu: [arm64] 606 | os: [android] 607 | 608 | '@rollup/rollup-darwin-arm64@4.29.1': 609 | resolution: {integrity: sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==} 610 | cpu: [arm64] 611 | os: [darwin] 612 | 613 | '@rollup/rollup-darwin-x64@4.29.1': 614 | resolution: {integrity: sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==} 615 | cpu: [x64] 616 | os: [darwin] 617 | 618 | '@rollup/rollup-freebsd-arm64@4.29.1': 619 | resolution: {integrity: sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==} 620 | cpu: [arm64] 621 | os: [freebsd] 622 | 623 | '@rollup/rollup-freebsd-x64@4.29.1': 624 | resolution: {integrity: sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==} 625 | cpu: [x64] 626 | os: [freebsd] 627 | 628 | '@rollup/rollup-linux-arm-gnueabihf@4.29.1': 629 | resolution: {integrity: sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==} 630 | cpu: [arm] 631 | os: [linux] 632 | 633 | '@rollup/rollup-linux-arm-musleabihf@4.29.1': 634 | resolution: {integrity: sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==} 635 | cpu: [arm] 636 | os: [linux] 637 | 638 | '@rollup/rollup-linux-arm64-gnu@4.29.1': 639 | resolution: {integrity: sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==} 640 | cpu: [arm64] 641 | os: [linux] 642 | 643 | '@rollup/rollup-linux-arm64-musl@4.29.1': 644 | resolution: {integrity: sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==} 645 | cpu: [arm64] 646 | os: [linux] 647 | 648 | '@rollup/rollup-linux-loongarch64-gnu@4.29.1': 649 | resolution: {integrity: sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==} 650 | cpu: [loong64] 651 | os: [linux] 652 | 653 | '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': 654 | resolution: {integrity: sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==} 655 | cpu: [ppc64] 656 | os: [linux] 657 | 658 | '@rollup/rollup-linux-riscv64-gnu@4.29.1': 659 | resolution: {integrity: sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==} 660 | cpu: [riscv64] 661 | os: [linux] 662 | 663 | '@rollup/rollup-linux-s390x-gnu@4.29.1': 664 | resolution: {integrity: sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==} 665 | cpu: [s390x] 666 | os: [linux] 667 | 668 | '@rollup/rollup-linux-x64-gnu@4.29.1': 669 | resolution: {integrity: sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==} 670 | cpu: [x64] 671 | os: [linux] 672 | 673 | '@rollup/rollup-linux-x64-musl@4.29.1': 674 | resolution: {integrity: sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==} 675 | cpu: [x64] 676 | os: [linux] 677 | 678 | '@rollup/rollup-win32-arm64-msvc@4.29.1': 679 | resolution: {integrity: sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==} 680 | cpu: [arm64] 681 | os: [win32] 682 | 683 | '@rollup/rollup-win32-ia32-msvc@4.29.1': 684 | resolution: {integrity: sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==} 685 | cpu: [ia32] 686 | os: [win32] 687 | 688 | '@rollup/rollup-win32-x64-msvc@4.29.1': 689 | resolution: {integrity: sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==} 690 | cpu: [x64] 691 | os: [win32] 692 | 693 | '@types/chrome@0.0.287': 694 | resolution: {integrity: sha512-wWhBNPNXZHwycHKNYnexUcpSbrihVZu++0rdp6GEk5ZgAglenLx+RwdEouh6FrHS0XQiOxSd62yaujM1OoQlZQ==} 695 | 696 | '@types/cross-zip@4.0.2': 697 | resolution: {integrity: sha512-yvTQ6/tWlGdykh6qkVigwmq42gi51qHPdi7e60KRmPCxeYj5QcX8RX0T6jCDIWcHNWLMVw1IuoMehGcwDuzrYw==} 698 | 699 | '@types/estree@1.0.6': 700 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 701 | 702 | '@types/filesystem@0.0.36': 703 | resolution: {integrity: sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==} 704 | 705 | '@types/filewriter@0.0.33': 706 | resolution: {integrity: sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==} 707 | 708 | '@types/har-format@1.2.16': 709 | resolution: {integrity: sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==} 710 | 711 | '@types/json-schema@7.0.15': 712 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 713 | 714 | '@types/lodash-es@4.17.12': 715 | resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} 716 | 717 | '@types/lodash@4.17.13': 718 | resolution: {integrity: sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==} 719 | 720 | '@types/node@22.10.2': 721 | resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==} 722 | 723 | '@types/parse-json@4.0.2': 724 | resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} 725 | 726 | '@types/prop-types@15.7.14': 727 | resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} 728 | 729 | '@types/react-dom@18.3.5': 730 | resolution: {integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==} 731 | peerDependencies: 732 | '@types/react': ^18.0.0 733 | 734 | '@types/react-transition-group@4.4.12': 735 | resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==} 736 | peerDependencies: 737 | '@types/react': '*' 738 | 739 | '@types/react@18.3.18': 740 | resolution: {integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==} 741 | 742 | '@types/resolve@1.20.2': 743 | resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} 744 | 745 | '@typescript-eslint/eslint-plugin@8.18.2': 746 | resolution: {integrity: sha512-adig4SzPLjeQ0Tm+jvsozSGiCliI2ajeURDGHjZ2llnA+A67HihCQ+a3amtPhUakd1GlwHxSRvzOZktbEvhPPg==} 747 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 748 | peerDependencies: 749 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 750 | eslint: ^8.57.0 || ^9.0.0 751 | typescript: '>=4.8.4 <5.8.0' 752 | 753 | '@typescript-eslint/parser@8.18.2': 754 | resolution: {integrity: sha512-y7tcq4StgxQD4mDr9+Jb26dZ+HTZ/SkfqpXSiqeUXZHxOUyjWDKsmwKhJ0/tApR08DgOhrFAoAhyB80/p3ViuA==} 755 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 756 | peerDependencies: 757 | eslint: ^8.57.0 || ^9.0.0 758 | typescript: '>=4.8.4 <5.8.0' 759 | 760 | '@typescript-eslint/scope-manager@8.18.2': 761 | resolution: {integrity: sha512-YJFSfbd0CJjy14r/EvWapYgV4R5CHzptssoag2M7y3Ra7XNta6GPAJPPP5KGB9j14viYXyrzRO5GkX7CRfo8/g==} 762 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 763 | 764 | '@typescript-eslint/type-utils@8.18.2': 765 | resolution: {integrity: sha512-AB/Wr1Lz31bzHfGm/jgbFR0VB0SML/hd2P1yxzKDM48YmP7vbyJNHRExUE/wZsQj2wUCvbWH8poNHFuxLqCTnA==} 766 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 767 | peerDependencies: 768 | eslint: ^8.57.0 || ^9.0.0 769 | typescript: '>=4.8.4 <5.8.0' 770 | 771 | '@typescript-eslint/types@8.18.2': 772 | resolution: {integrity: sha512-Z/zblEPp8cIvmEn6+tPDIHUbRu/0z5lqZ+NvolL5SvXWT5rQy7+Nch83M0++XzO0XrWRFWECgOAyE8bsJTl1GQ==} 773 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 774 | 775 | '@typescript-eslint/typescript-estree@8.18.2': 776 | resolution: {integrity: sha512-WXAVt595HjpmlfH4crSdM/1bcsqh+1weFRWIa9XMTx/XHZ9TCKMcr725tLYqWOgzKdeDrqVHxFotrvWcEsk2Tg==} 777 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 778 | peerDependencies: 779 | typescript: '>=4.8.4 <5.8.0' 780 | 781 | '@typescript-eslint/utils@8.18.2': 782 | resolution: {integrity: sha512-Cr4A0H7DtVIPkauj4sTSXVl+VBWewE9/o40KcF3TV9aqDEOWoXF3/+oRXNby3DYzZeCATvbdksYsGZzplwnK/Q==} 783 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 784 | peerDependencies: 785 | eslint: ^8.57.0 || ^9.0.0 786 | typescript: '>=4.8.4 <5.8.0' 787 | 788 | '@typescript-eslint/visitor-keys@8.18.2': 789 | resolution: {integrity: sha512-zORcwn4C3trOWiCqFQP1x6G3xTRyZ1LYydnj51cRnJ6hxBlr/cKPckk+PKPUw/fXmvfKTcw7bwY3w9izgx5jZw==} 790 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 791 | 792 | acorn-jsx@5.3.2: 793 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 794 | peerDependencies: 795 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 796 | 797 | acorn@8.14.0: 798 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 799 | engines: {node: '>=0.4.0'} 800 | hasBin: true 801 | 802 | ajv@6.12.6: 803 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 804 | 805 | ansi-styles@4.3.0: 806 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 807 | engines: {node: '>=8'} 808 | 809 | argparse@2.0.1: 810 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 811 | 812 | array-buffer-byte-length@1.0.2: 813 | resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} 814 | engines: {node: '>= 0.4'} 815 | 816 | array-includes@3.1.8: 817 | resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} 818 | engines: {node: '>= 0.4'} 819 | 820 | array.prototype.findlast@1.2.5: 821 | resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} 822 | engines: {node: '>= 0.4'} 823 | 824 | array.prototype.flat@1.3.3: 825 | resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} 826 | engines: {node: '>= 0.4'} 827 | 828 | array.prototype.flatmap@1.3.3: 829 | resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} 830 | engines: {node: '>= 0.4'} 831 | 832 | array.prototype.tosorted@1.1.4: 833 | resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} 834 | engines: {node: '>= 0.4'} 835 | 836 | arraybuffer.prototype.slice@1.0.4: 837 | resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} 838 | engines: {node: '>= 0.4'} 839 | 840 | available-typed-arrays@1.0.7: 841 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 842 | engines: {node: '>= 0.4'} 843 | 844 | babel-plugin-macros@3.1.0: 845 | resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} 846 | engines: {node: '>=10', npm: '>=6'} 847 | 848 | balanced-match@1.0.2: 849 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 850 | 851 | brace-expansion@1.1.11: 852 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 853 | 854 | brace-expansion@2.0.1: 855 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 856 | 857 | braces@3.0.3: 858 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 859 | engines: {node: '>=8'} 860 | 861 | buffer-from@1.1.2: 862 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 863 | 864 | call-bind-apply-helpers@1.0.1: 865 | resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} 866 | engines: {node: '>= 0.4'} 867 | 868 | call-bind@1.0.8: 869 | resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} 870 | engines: {node: '>= 0.4'} 871 | 872 | call-bound@1.0.3: 873 | resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} 874 | engines: {node: '>= 0.4'} 875 | 876 | callsites@3.1.0: 877 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 878 | engines: {node: '>=6'} 879 | 880 | chalk@4.1.2: 881 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 882 | engines: {node: '>=10'} 883 | 884 | chokidar@4.0.3: 885 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 886 | engines: {node: '>= 14.16.0'} 887 | 888 | clsx@2.1.1: 889 | resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} 890 | engines: {node: '>=6'} 891 | 892 | color-convert@2.0.1: 893 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 894 | engines: {node: '>=7.0.0'} 895 | 896 | color-name@1.1.4: 897 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 898 | 899 | commander@2.20.3: 900 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} 901 | 902 | commondir@1.0.1: 903 | resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} 904 | 905 | concat-map@0.0.1: 906 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 907 | 908 | console-clear@1.1.1: 909 | resolution: {integrity: sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==} 910 | engines: {node: '>=4'} 911 | 912 | convert-source-map@1.9.0: 913 | resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} 914 | 915 | cosmiconfig@7.1.0: 916 | resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} 917 | engines: {node: '>=10'} 918 | 919 | cross-spawn@7.0.6: 920 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 921 | engines: {node: '>= 8'} 922 | 923 | cross-zip@4.0.1: 924 | resolution: {integrity: sha512-n63i0lZ0rvQ6FXiGQ+/JFCKAUyPFhLQYJIqKaa+tSJtfKeULF/IDNDAbdnSIxgS4NTuw2b0+lj8LzfITuq+ZxQ==} 925 | engines: {node: '>=12.10'} 926 | 927 | csstype@3.1.3: 928 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 929 | 930 | data-view-buffer@1.0.2: 931 | resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} 932 | engines: {node: '>= 0.4'} 933 | 934 | data-view-byte-length@1.0.2: 935 | resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} 936 | engines: {node: '>= 0.4'} 937 | 938 | data-view-byte-offset@1.0.1: 939 | resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} 940 | engines: {node: '>= 0.4'} 941 | 942 | debug@4.4.0: 943 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 944 | engines: {node: '>=6.0'} 945 | peerDependencies: 946 | supports-color: '*' 947 | peerDependenciesMeta: 948 | supports-color: 949 | optional: true 950 | 951 | deep-is@0.1.4: 952 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 953 | 954 | deepmerge@4.3.1: 955 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 956 | engines: {node: '>=0.10.0'} 957 | 958 | define-data-property@1.1.4: 959 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 960 | engines: {node: '>= 0.4'} 961 | 962 | define-properties@1.2.1: 963 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 964 | engines: {node: '>= 0.4'} 965 | 966 | dequal@2.0.3: 967 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 968 | engines: {node: '>=6'} 969 | 970 | detect-libc@1.0.3: 971 | resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} 972 | engines: {node: '>=0.10'} 973 | hasBin: true 974 | 975 | dnd-core@16.0.1: 976 | resolution: {integrity: sha512-HK294sl7tbw6F6IeuK16YSBUoorvHpY8RHO+9yFfaJyCDVb6n7PRcezrOEOa2SBCqiYpemh5Jx20ZcjKdFAVng==} 977 | 978 | doctrine@2.1.0: 979 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 980 | engines: {node: '>=0.10.0'} 981 | 982 | dom-helpers@5.2.1: 983 | resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} 984 | 985 | dunder-proto@1.0.1: 986 | resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 987 | engines: {node: '>= 0.4'} 988 | 989 | error-ex@1.3.2: 990 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 991 | 992 | es-abstract@1.23.7: 993 | resolution: {integrity: sha512-OygGC8kIcDhXX+6yAZRGLqwi2CmEXCbLQixeGUgYeR+Qwlppqmo7DIDr8XibtEBZp+fJcoYpoatp5qwLMEdcqQ==} 994 | engines: {node: '>= 0.4'} 995 | 996 | es-define-property@1.0.1: 997 | resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} 998 | engines: {node: '>= 0.4'} 999 | 1000 | es-errors@1.3.0: 1001 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 1002 | engines: {node: '>= 0.4'} 1003 | 1004 | es-iterator-helpers@1.2.1: 1005 | resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} 1006 | engines: {node: '>= 0.4'} 1007 | 1008 | es-object-atoms@1.0.0: 1009 | resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} 1010 | engines: {node: '>= 0.4'} 1011 | 1012 | es-set-tostringtag@2.0.3: 1013 | resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} 1014 | engines: {node: '>= 0.4'} 1015 | 1016 | es-shim-unscopables@1.0.2: 1017 | resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} 1018 | 1019 | es-to-primitive@1.3.0: 1020 | resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} 1021 | engines: {node: '>= 0.4'} 1022 | 1023 | escape-string-regexp@4.0.0: 1024 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1025 | engines: {node: '>=10'} 1026 | 1027 | eslint-config-prettier@9.1.0: 1028 | resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} 1029 | hasBin: true 1030 | peerDependencies: 1031 | eslint: '>=7.0.0' 1032 | 1033 | eslint-plugin-prettier@5.2.1: 1034 | resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} 1035 | engines: {node: ^14.18.0 || >=16.0.0} 1036 | peerDependencies: 1037 | '@types/eslint': '>=8.0.0' 1038 | eslint: '>=8.0.0' 1039 | eslint-config-prettier: '*' 1040 | prettier: '>=3.0.0' 1041 | peerDependenciesMeta: 1042 | '@types/eslint': 1043 | optional: true 1044 | eslint-config-prettier: 1045 | optional: true 1046 | 1047 | eslint-plugin-react-hooks@5.1.0: 1048 | resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==} 1049 | engines: {node: '>=10'} 1050 | peerDependencies: 1051 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 1052 | 1053 | eslint-plugin-react@7.37.3: 1054 | resolution: {integrity: sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==} 1055 | engines: {node: '>=4'} 1056 | peerDependencies: 1057 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 1058 | 1059 | eslint-scope@8.2.0: 1060 | resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} 1061 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1062 | 1063 | eslint-visitor-keys@3.4.3: 1064 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 1065 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1066 | 1067 | eslint-visitor-keys@4.2.0: 1068 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 1069 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1070 | 1071 | eslint@9.17.0: 1072 | resolution: {integrity: sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==} 1073 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1074 | hasBin: true 1075 | peerDependencies: 1076 | jiti: '*' 1077 | peerDependenciesMeta: 1078 | jiti: 1079 | optional: true 1080 | 1081 | espree@10.3.0: 1082 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 1083 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1084 | 1085 | esquery@1.6.0: 1086 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 1087 | engines: {node: '>=0.10'} 1088 | 1089 | esrecurse@4.3.0: 1090 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1091 | engines: {node: '>=4.0'} 1092 | 1093 | estraverse@5.3.0: 1094 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1095 | engines: {node: '>=4.0'} 1096 | 1097 | estree-walker@0.6.1: 1098 | resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} 1099 | 1100 | estree-walker@2.0.2: 1101 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 1102 | 1103 | esutils@2.0.3: 1104 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1105 | engines: {node: '>=0.10.0'} 1106 | 1107 | fast-deep-equal@3.1.3: 1108 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1109 | 1110 | fast-diff@1.3.0: 1111 | resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} 1112 | 1113 | fast-glob@3.3.2: 1114 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 1115 | engines: {node: '>=8.6.0'} 1116 | 1117 | fast-json-stable-stringify@2.1.0: 1118 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1119 | 1120 | fast-levenshtein@2.0.6: 1121 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1122 | 1123 | fastq@1.18.0: 1124 | resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} 1125 | 1126 | fdir@6.4.2: 1127 | resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} 1128 | peerDependencies: 1129 | picomatch: ^3 || ^4 1130 | peerDependenciesMeta: 1131 | picomatch: 1132 | optional: true 1133 | 1134 | file-entry-cache@8.0.0: 1135 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 1136 | engines: {node: '>=16.0.0'} 1137 | 1138 | fill-range@7.1.1: 1139 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 1140 | engines: {node: '>=8'} 1141 | 1142 | find-root@1.1.0: 1143 | resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} 1144 | 1145 | find-up@5.0.0: 1146 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1147 | engines: {node: '>=10'} 1148 | 1149 | flat-cache@4.0.1: 1150 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 1151 | engines: {node: '>=16'} 1152 | 1153 | flatted@3.3.2: 1154 | resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} 1155 | 1156 | for-each@0.3.3: 1157 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 1158 | 1159 | fsevents@2.3.3: 1160 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1161 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1162 | os: [darwin] 1163 | 1164 | function-bind@1.1.2: 1165 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1166 | 1167 | function.prototype.name@1.1.8: 1168 | resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} 1169 | engines: {node: '>= 0.4'} 1170 | 1171 | functions-have-names@1.2.3: 1172 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1173 | 1174 | get-intrinsic@1.2.6: 1175 | resolution: {integrity: sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==} 1176 | engines: {node: '>= 0.4'} 1177 | 1178 | get-port@5.1.1: 1179 | resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} 1180 | engines: {node: '>=8'} 1181 | 1182 | get-symbol-description@1.1.0: 1183 | resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} 1184 | engines: {node: '>= 0.4'} 1185 | 1186 | glob-parent@5.1.2: 1187 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1188 | engines: {node: '>= 6'} 1189 | 1190 | glob-parent@6.0.2: 1191 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1192 | engines: {node: '>=10.13.0'} 1193 | 1194 | globals@11.12.0: 1195 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1196 | engines: {node: '>=4'} 1197 | 1198 | globals@14.0.0: 1199 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 1200 | engines: {node: '>=18'} 1201 | 1202 | globalthis@1.0.4: 1203 | resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} 1204 | engines: {node: '>= 0.4'} 1205 | 1206 | gopd@1.2.0: 1207 | resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 1208 | engines: {node: '>= 0.4'} 1209 | 1210 | graphemer@1.4.0: 1211 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1212 | 1213 | has-bigints@1.1.0: 1214 | resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} 1215 | engines: {node: '>= 0.4'} 1216 | 1217 | has-flag@4.0.0: 1218 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1219 | engines: {node: '>=8'} 1220 | 1221 | has-property-descriptors@1.0.2: 1222 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 1223 | 1224 | has-proto@1.2.0: 1225 | resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} 1226 | engines: {node: '>= 0.4'} 1227 | 1228 | has-symbols@1.1.0: 1229 | resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} 1230 | engines: {node: '>= 0.4'} 1231 | 1232 | has-tostringtag@1.0.2: 1233 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 1234 | engines: {node: '>= 0.4'} 1235 | 1236 | hasown@2.0.2: 1237 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 1238 | engines: {node: '>= 0.4'} 1239 | 1240 | hoist-non-react-statics@3.3.2: 1241 | resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} 1242 | 1243 | ignore@5.3.2: 1244 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 1245 | engines: {node: '>= 4'} 1246 | 1247 | immutable@5.0.3: 1248 | resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} 1249 | 1250 | import-fresh@3.3.0: 1251 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1252 | engines: {node: '>=6'} 1253 | 1254 | imurmurhash@0.1.4: 1255 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1256 | engines: {node: '>=0.8.19'} 1257 | 1258 | internal-slot@1.1.0: 1259 | resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} 1260 | engines: {node: '>= 0.4'} 1261 | 1262 | is-array-buffer@3.0.5: 1263 | resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} 1264 | engines: {node: '>= 0.4'} 1265 | 1266 | is-arrayish@0.2.1: 1267 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1268 | 1269 | is-async-function@2.0.0: 1270 | resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} 1271 | engines: {node: '>= 0.4'} 1272 | 1273 | is-bigint@1.1.0: 1274 | resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} 1275 | engines: {node: '>= 0.4'} 1276 | 1277 | is-boolean-object@1.2.1: 1278 | resolution: {integrity: sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==} 1279 | engines: {node: '>= 0.4'} 1280 | 1281 | is-callable@1.2.7: 1282 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1283 | engines: {node: '>= 0.4'} 1284 | 1285 | is-core-module@2.16.1: 1286 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 1287 | engines: {node: '>= 0.4'} 1288 | 1289 | is-data-view@1.0.2: 1290 | resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} 1291 | engines: {node: '>= 0.4'} 1292 | 1293 | is-date-object@1.1.0: 1294 | resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} 1295 | engines: {node: '>= 0.4'} 1296 | 1297 | is-extglob@2.1.1: 1298 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1299 | engines: {node: '>=0.10.0'} 1300 | 1301 | is-finalizationregistry@1.1.1: 1302 | resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} 1303 | engines: {node: '>= 0.4'} 1304 | 1305 | is-generator-function@1.0.10: 1306 | resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} 1307 | engines: {node: '>= 0.4'} 1308 | 1309 | is-glob@4.0.3: 1310 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1311 | engines: {node: '>=0.10.0'} 1312 | 1313 | is-map@2.0.3: 1314 | resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} 1315 | engines: {node: '>= 0.4'} 1316 | 1317 | is-module@1.0.0: 1318 | resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} 1319 | 1320 | is-number-object@1.1.1: 1321 | resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} 1322 | engines: {node: '>= 0.4'} 1323 | 1324 | is-number@7.0.0: 1325 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1326 | engines: {node: '>=0.12.0'} 1327 | 1328 | is-reference@1.2.1: 1329 | resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} 1330 | 1331 | is-regex@1.2.1: 1332 | resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} 1333 | engines: {node: '>= 0.4'} 1334 | 1335 | is-set@2.0.3: 1336 | resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} 1337 | engines: {node: '>= 0.4'} 1338 | 1339 | is-shared-array-buffer@1.0.4: 1340 | resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} 1341 | engines: {node: '>= 0.4'} 1342 | 1343 | is-string@1.1.1: 1344 | resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} 1345 | engines: {node: '>= 0.4'} 1346 | 1347 | is-symbol@1.1.1: 1348 | resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} 1349 | engines: {node: '>= 0.4'} 1350 | 1351 | is-typed-array@1.1.15: 1352 | resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} 1353 | engines: {node: '>= 0.4'} 1354 | 1355 | is-weakmap@2.0.2: 1356 | resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} 1357 | engines: {node: '>= 0.4'} 1358 | 1359 | is-weakref@1.1.0: 1360 | resolution: {integrity: sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==} 1361 | engines: {node: '>= 0.4'} 1362 | 1363 | is-weakset@2.0.4: 1364 | resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} 1365 | engines: {node: '>= 0.4'} 1366 | 1367 | isarray@2.0.5: 1368 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1369 | 1370 | isexe@2.0.0: 1371 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1372 | 1373 | iterator.prototype@1.1.4: 1374 | resolution: {integrity: sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA==} 1375 | engines: {node: '>= 0.4'} 1376 | 1377 | js-tokens@4.0.0: 1378 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1379 | 1380 | js-yaml@4.1.0: 1381 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1382 | hasBin: true 1383 | 1384 | jsesc@3.1.0: 1385 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 1386 | engines: {node: '>=6'} 1387 | hasBin: true 1388 | 1389 | json-buffer@3.0.1: 1390 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1391 | 1392 | json-parse-even-better-errors@2.3.1: 1393 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1394 | 1395 | json-schema-traverse@0.4.1: 1396 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1397 | 1398 | json-stable-stringify-without-jsonify@1.0.1: 1399 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1400 | 1401 | jsx-ast-utils@3.3.5: 1402 | resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} 1403 | engines: {node: '>=4.0'} 1404 | 1405 | keyv@4.5.4: 1406 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1407 | 1408 | kleur@4.1.5: 1409 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 1410 | engines: {node: '>=6'} 1411 | 1412 | levn@0.4.1: 1413 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1414 | engines: {node: '>= 0.8.0'} 1415 | 1416 | lines-and-columns@1.2.4: 1417 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1418 | 1419 | local-access@1.1.0: 1420 | resolution: {integrity: sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw==} 1421 | engines: {node: '>=6'} 1422 | 1423 | locate-path@6.0.0: 1424 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1425 | engines: {node: '>=10'} 1426 | 1427 | lodash-es@4.17.21: 1428 | resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} 1429 | 1430 | lodash.merge@4.6.2: 1431 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1432 | 1433 | loose-envify@1.4.0: 1434 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1435 | hasBin: true 1436 | 1437 | magic-string@0.30.17: 1438 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 1439 | 1440 | marked@15.0.4: 1441 | resolution: {integrity: sha512-TCHvDqmb3ZJ4PWG7VEGVgtefA5/euFmsIhxtD0XsBxI39gUSKL81mIRFdt0AiNQozUahd4ke98ZdirExd/vSEw==} 1442 | engines: {node: '>= 18'} 1443 | hasBin: true 1444 | 1445 | math-intrinsics@1.1.0: 1446 | resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 1447 | engines: {node: '>= 0.4'} 1448 | 1449 | merge2@1.4.1: 1450 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1451 | engines: {node: '>= 8'} 1452 | 1453 | micromatch@4.0.8: 1454 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1455 | engines: {node: '>=8.6'} 1456 | 1457 | minimatch@3.1.2: 1458 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1459 | 1460 | minimatch@9.0.5: 1461 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1462 | engines: {node: '>=16 || 14 >=14.17'} 1463 | 1464 | mitt@3.0.1: 1465 | resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} 1466 | 1467 | mri@1.2.0: 1468 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 1469 | engines: {node: '>=4'} 1470 | 1471 | mrmime@2.0.0: 1472 | resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} 1473 | engines: {node: '>=10'} 1474 | 1475 | ms@2.1.3: 1476 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1477 | 1478 | nanoid@5.0.9: 1479 | resolution: {integrity: sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==} 1480 | engines: {node: ^18 || >=20} 1481 | hasBin: true 1482 | 1483 | natural-compare@1.4.0: 1484 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1485 | 1486 | node-addon-api@7.1.1: 1487 | resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} 1488 | 1489 | object-assign@4.1.1: 1490 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1491 | engines: {node: '>=0.10.0'} 1492 | 1493 | object-inspect@1.13.3: 1494 | resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} 1495 | engines: {node: '>= 0.4'} 1496 | 1497 | object-keys@1.1.1: 1498 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1499 | engines: {node: '>= 0.4'} 1500 | 1501 | object.assign@4.1.7: 1502 | resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} 1503 | engines: {node: '>= 0.4'} 1504 | 1505 | object.entries@1.1.8: 1506 | resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} 1507 | engines: {node: '>= 0.4'} 1508 | 1509 | object.fromentries@2.0.8: 1510 | resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} 1511 | engines: {node: '>= 0.4'} 1512 | 1513 | object.values@1.2.1: 1514 | resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} 1515 | engines: {node: '>= 0.4'} 1516 | 1517 | optionator@0.9.4: 1518 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1519 | engines: {node: '>= 0.8.0'} 1520 | 1521 | p-limit@3.1.0: 1522 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1523 | engines: {node: '>=10'} 1524 | 1525 | p-locate@5.0.0: 1526 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1527 | engines: {node: '>=10'} 1528 | 1529 | parent-module@1.0.1: 1530 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1531 | engines: {node: '>=6'} 1532 | 1533 | parse-json@5.2.0: 1534 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1535 | engines: {node: '>=8'} 1536 | 1537 | path-exists@4.0.0: 1538 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1539 | engines: {node: '>=8'} 1540 | 1541 | path-key@3.1.1: 1542 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1543 | engines: {node: '>=8'} 1544 | 1545 | path-parse@1.0.7: 1546 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1547 | 1548 | path-type@4.0.0: 1549 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1550 | engines: {node: '>=8'} 1551 | 1552 | picocolors@1.1.1: 1553 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1554 | 1555 | picomatch@2.3.1: 1556 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1557 | engines: {node: '>=8.6'} 1558 | 1559 | picomatch@4.0.2: 1560 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 1561 | engines: {node: '>=12'} 1562 | 1563 | possible-typed-array-names@1.0.0: 1564 | resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} 1565 | engines: {node: '>= 0.4'} 1566 | 1567 | prelude-ls@1.2.1: 1568 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1569 | engines: {node: '>= 0.8.0'} 1570 | 1571 | prettier-linter-helpers@1.0.0: 1572 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 1573 | engines: {node: '>=6.0.0'} 1574 | 1575 | prettier@3.4.2: 1576 | resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} 1577 | engines: {node: '>=14'} 1578 | hasBin: true 1579 | 1580 | prop-types@15.8.1: 1581 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} 1582 | 1583 | punycode@2.3.1: 1584 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1585 | engines: {node: '>=6'} 1586 | 1587 | queue-microtask@1.2.3: 1588 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1589 | 1590 | randombytes@2.1.0: 1591 | resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} 1592 | 1593 | react-dnd-html5-backend@16.0.1: 1594 | resolution: {integrity: sha512-Wu3dw5aDJmOGw8WjH1I1/yTH+vlXEL4vmjk5p+MHxP8HuHJS1lAGeIdG/hze1AvNeXWo/JgULV87LyQOr+r5jw==} 1595 | 1596 | react-dnd@16.0.1: 1597 | resolution: {integrity: sha512-QeoM/i73HHu2XF9aKksIUuamHPDvRglEwdHL4jsp784BgUuWcg6mzfxT0QDdQz8Wj0qyRKx2eMg8iZtWvU4E2Q==} 1598 | peerDependencies: 1599 | '@types/hoist-non-react-statics': '>= 3.3.1' 1600 | '@types/node': '>= 12' 1601 | '@types/react': '>= 16' 1602 | react: '>= 16.14' 1603 | peerDependenciesMeta: 1604 | '@types/hoist-non-react-statics': 1605 | optional: true 1606 | '@types/node': 1607 | optional: true 1608 | '@types/react': 1609 | optional: true 1610 | 1611 | react-dom@18.3.1: 1612 | resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} 1613 | peerDependencies: 1614 | react: ^18.3.1 1615 | 1616 | react-is@16.13.1: 1617 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 1618 | 1619 | react-is@19.0.0: 1620 | resolution: {integrity: sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==} 1621 | 1622 | react-transition-group@4.4.5: 1623 | resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} 1624 | peerDependencies: 1625 | react: '>=16.6.0' 1626 | react-dom: '>=16.6.0' 1627 | 1628 | react@18.3.1: 1629 | resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} 1630 | engines: {node: '>=0.10.0'} 1631 | 1632 | readdirp@4.0.2: 1633 | resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} 1634 | engines: {node: '>= 14.16.0'} 1635 | 1636 | redux@4.2.1: 1637 | resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} 1638 | 1639 | reflect.getprototypeof@1.0.9: 1640 | resolution: {integrity: sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q==} 1641 | engines: {node: '>= 0.4'} 1642 | 1643 | regenerator-runtime@0.14.1: 1644 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} 1645 | 1646 | regexp.prototype.flags@1.5.3: 1647 | resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} 1648 | engines: {node: '>= 0.4'} 1649 | 1650 | resolve-from@4.0.0: 1651 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1652 | engines: {node: '>=4'} 1653 | 1654 | resolve@1.22.10: 1655 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 1656 | engines: {node: '>= 0.4'} 1657 | hasBin: true 1658 | 1659 | resolve@2.0.0-next.5: 1660 | resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} 1661 | hasBin: true 1662 | 1663 | reusify@1.0.4: 1664 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1665 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1666 | 1667 | rollup-plugin-scss@4.0.1: 1668 | resolution: {integrity: sha512-3W3+3OzR+shkDl3hJ1XTAuGkP4AfiLgIjie2GtcoZ9pHfRiNqeDbtCu1EUnkjZ98EPIM6nnMIXkKlc7Sx5bRvA==} 1669 | 1670 | rollup-pluginutils@2.8.2: 1671 | resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} 1672 | 1673 | rollup@4.29.1: 1674 | resolution: {integrity: sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==} 1675 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1676 | hasBin: true 1677 | 1678 | run-parallel@1.2.0: 1679 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1680 | 1681 | sade@1.8.1: 1682 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 1683 | engines: {node: '>=6'} 1684 | 1685 | safe-array-concat@1.1.3: 1686 | resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} 1687 | engines: {node: '>=0.4'} 1688 | 1689 | safe-buffer@5.2.1: 1690 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1691 | 1692 | safe-regex-test@1.1.0: 1693 | resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} 1694 | engines: {node: '>= 0.4'} 1695 | 1696 | sass@1.83.0: 1697 | resolution: {integrity: sha512-qsSxlayzoOjdvXMVLkzF84DJFc2HZEL/rFyGIKbbilYtAvlCxyuzUeff9LawTn4btVnLKg75Z8MMr1lxU1lfGw==} 1698 | engines: {node: '>=14.0.0'} 1699 | hasBin: true 1700 | 1701 | scheduler@0.23.2: 1702 | resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} 1703 | 1704 | semiver@1.1.0: 1705 | resolution: {integrity: sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==} 1706 | engines: {node: '>=6'} 1707 | 1708 | semver@6.3.1: 1709 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1710 | hasBin: true 1711 | 1712 | semver@7.6.3: 1713 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 1714 | engines: {node: '>=10'} 1715 | hasBin: true 1716 | 1717 | serialize-javascript@6.0.2: 1718 | resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} 1719 | 1720 | set-function-length@1.2.2: 1721 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 1722 | engines: {node: '>= 0.4'} 1723 | 1724 | set-function-name@2.0.2: 1725 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 1726 | engines: {node: '>= 0.4'} 1727 | 1728 | shebang-command@2.0.0: 1729 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1730 | engines: {node: '>=8'} 1731 | 1732 | shebang-regex@3.0.0: 1733 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1734 | engines: {node: '>=8'} 1735 | 1736 | side-channel-list@1.0.0: 1737 | resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} 1738 | engines: {node: '>= 0.4'} 1739 | 1740 | side-channel-map@1.0.1: 1741 | resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} 1742 | engines: {node: '>= 0.4'} 1743 | 1744 | side-channel-weakmap@1.0.2: 1745 | resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} 1746 | engines: {node: '>= 0.4'} 1747 | 1748 | side-channel@1.1.0: 1749 | resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} 1750 | engines: {node: '>= 0.4'} 1751 | 1752 | sirv-cli@3.0.0: 1753 | resolution: {integrity: sha512-p88yHl8DmTOUJroRiW2o9ezJc/YRLxphBydX2NGQc3naKBA09B3EM4Q/yaN8FYF0e50fRSZP7dyatr72b1u5Jw==} 1754 | engines: {node: '>=18'} 1755 | hasBin: true 1756 | 1757 | sirv@3.0.0: 1758 | resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==} 1759 | engines: {node: '>=18'} 1760 | 1761 | smob@1.5.0: 1762 | resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} 1763 | 1764 | source-map-js@1.2.1: 1765 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1766 | engines: {node: '>=0.10.0'} 1767 | 1768 | source-map-support@0.5.21: 1769 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 1770 | 1771 | source-map@0.5.7: 1772 | resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} 1773 | engines: {node: '>=0.10.0'} 1774 | 1775 | source-map@0.6.1: 1776 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1777 | engines: {node: '>=0.10.0'} 1778 | 1779 | string.prototype.matchall@4.0.12: 1780 | resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} 1781 | engines: {node: '>= 0.4'} 1782 | 1783 | string.prototype.repeat@1.0.0: 1784 | resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} 1785 | 1786 | string.prototype.trim@1.2.10: 1787 | resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} 1788 | engines: {node: '>= 0.4'} 1789 | 1790 | string.prototype.trimend@1.0.9: 1791 | resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} 1792 | engines: {node: '>= 0.4'} 1793 | 1794 | string.prototype.trimstart@1.0.8: 1795 | resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} 1796 | engines: {node: '>= 0.4'} 1797 | 1798 | strip-json-comments@3.1.1: 1799 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1800 | engines: {node: '>=8'} 1801 | 1802 | stylis@4.2.0: 1803 | resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} 1804 | 1805 | supports-color@7.2.0: 1806 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1807 | engines: {node: '>=8'} 1808 | 1809 | supports-preserve-symlinks-flag@1.0.0: 1810 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1811 | engines: {node: '>= 0.4'} 1812 | 1813 | swr@2.3.0: 1814 | resolution: {integrity: sha512-NyZ76wA4yElZWBHzSgEJc28a0u6QZvhb6w0azeL2k7+Q1gAzVK+IqQYXhVOC/mzi+HZIozrZvBVeSeOZNR2bqA==} 1815 | peerDependencies: 1816 | react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 1817 | 1818 | synckit@0.9.2: 1819 | resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} 1820 | engines: {node: ^14.18.0 || >=16.0.0} 1821 | 1822 | terser@5.37.0: 1823 | resolution: {integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==} 1824 | engines: {node: '>=10'} 1825 | hasBin: true 1826 | 1827 | tinydate@1.3.0: 1828 | resolution: {integrity: sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==} 1829 | engines: {node: '>=4'} 1830 | 1831 | to-regex-range@5.0.1: 1832 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1833 | engines: {node: '>=8.0'} 1834 | 1835 | totalist@3.0.1: 1836 | resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} 1837 | engines: {node: '>=6'} 1838 | 1839 | ts-api-utils@1.4.3: 1840 | resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} 1841 | engines: {node: '>=16'} 1842 | peerDependencies: 1843 | typescript: '>=4.2.0' 1844 | 1845 | tslib@2.8.1: 1846 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1847 | 1848 | type-check@0.4.0: 1849 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1850 | engines: {node: '>= 0.8.0'} 1851 | 1852 | typed-array-buffer@1.0.3: 1853 | resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} 1854 | engines: {node: '>= 0.4'} 1855 | 1856 | typed-array-byte-length@1.0.3: 1857 | resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} 1858 | engines: {node: '>= 0.4'} 1859 | 1860 | typed-array-byte-offset@1.0.4: 1861 | resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} 1862 | engines: {node: '>= 0.4'} 1863 | 1864 | typed-array-length@1.0.7: 1865 | resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} 1866 | engines: {node: '>= 0.4'} 1867 | 1868 | typescript-eslint@8.18.2: 1869 | resolution: {integrity: sha512-KuXezG6jHkvC3MvizeXgupZzaG5wjhU3yE8E7e6viOvAvD9xAWYp8/vy0WULTGe9DYDWcQu7aW03YIV3mSitrQ==} 1870 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1871 | peerDependencies: 1872 | eslint: ^8.57.0 || ^9.0.0 1873 | typescript: '>=4.8.4 <5.8.0' 1874 | 1875 | typescript@5.7.2: 1876 | resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} 1877 | engines: {node: '>=14.17'} 1878 | hasBin: true 1879 | 1880 | unbox-primitive@1.1.0: 1881 | resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} 1882 | engines: {node: '>= 0.4'} 1883 | 1884 | undici-types@6.20.0: 1885 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 1886 | 1887 | uri-js@4.4.1: 1888 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1889 | 1890 | use-debounce@10.0.4: 1891 | resolution: {integrity: sha512-6Cf7Yr7Wk7Kdv77nnJMf6de4HuDE4dTxKij+RqE9rufDsI6zsbjyAxcH5y2ueJCQAnfgKbzXbZHYlkFwmBlWkw==} 1892 | engines: {node: '>= 16.0.0'} 1893 | peerDependencies: 1894 | react: '*' 1895 | 1896 | use-sync-external-store@1.4.0: 1897 | resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} 1898 | peerDependencies: 1899 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 1900 | 1901 | which-boxed-primitive@1.1.1: 1902 | resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} 1903 | engines: {node: '>= 0.4'} 1904 | 1905 | which-builtin-type@1.2.1: 1906 | resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} 1907 | engines: {node: '>= 0.4'} 1908 | 1909 | which-collection@1.0.2: 1910 | resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} 1911 | engines: {node: '>= 0.4'} 1912 | 1913 | which-typed-array@1.1.18: 1914 | resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} 1915 | engines: {node: '>= 0.4'} 1916 | 1917 | which@2.0.2: 1918 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1919 | engines: {node: '>= 8'} 1920 | hasBin: true 1921 | 1922 | word-wrap@1.2.5: 1923 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1924 | engines: {node: '>=0.10.0'} 1925 | 1926 | yaml@1.10.2: 1927 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 1928 | engines: {node: '>= 6'} 1929 | 1930 | yocto-queue@0.1.0: 1931 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1932 | engines: {node: '>=10'} 1933 | 1934 | snapshots: 1935 | 1936 | '@babel/code-frame@7.26.2': 1937 | dependencies: 1938 | '@babel/helper-validator-identifier': 7.25.9 1939 | js-tokens: 4.0.0 1940 | picocolors: 1.1.1 1941 | 1942 | '@babel/generator@7.26.3': 1943 | dependencies: 1944 | '@babel/parser': 7.26.3 1945 | '@babel/types': 7.26.3 1946 | '@jridgewell/gen-mapping': 0.3.8 1947 | '@jridgewell/trace-mapping': 0.3.25 1948 | jsesc: 3.1.0 1949 | 1950 | '@babel/helper-module-imports@7.25.9': 1951 | dependencies: 1952 | '@babel/traverse': 7.26.4 1953 | '@babel/types': 7.26.3 1954 | transitivePeerDependencies: 1955 | - supports-color 1956 | 1957 | '@babel/helper-string-parser@7.25.9': {} 1958 | 1959 | '@babel/helper-validator-identifier@7.25.9': {} 1960 | 1961 | '@babel/parser@7.26.3': 1962 | dependencies: 1963 | '@babel/types': 7.26.3 1964 | 1965 | '@babel/runtime@7.26.0': 1966 | dependencies: 1967 | regenerator-runtime: 0.14.1 1968 | 1969 | '@babel/template@7.25.9': 1970 | dependencies: 1971 | '@babel/code-frame': 7.26.2 1972 | '@babel/parser': 7.26.3 1973 | '@babel/types': 7.26.3 1974 | 1975 | '@babel/traverse@7.26.4': 1976 | dependencies: 1977 | '@babel/code-frame': 7.26.2 1978 | '@babel/generator': 7.26.3 1979 | '@babel/parser': 7.26.3 1980 | '@babel/template': 7.25.9 1981 | '@babel/types': 7.26.3 1982 | debug: 4.4.0 1983 | globals: 11.12.0 1984 | transitivePeerDependencies: 1985 | - supports-color 1986 | 1987 | '@babel/types@7.26.3': 1988 | dependencies: 1989 | '@babel/helper-string-parser': 7.25.9 1990 | '@babel/helper-validator-identifier': 7.25.9 1991 | 1992 | '@dnd-kit/accessibility@3.1.1(react@18.3.1)': 1993 | dependencies: 1994 | react: 18.3.1 1995 | tslib: 2.8.1 1996 | 1997 | '@dnd-kit/core@6.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 1998 | dependencies: 1999 | '@dnd-kit/accessibility': 3.1.1(react@18.3.1) 2000 | '@dnd-kit/utilities': 3.2.2(react@18.3.1) 2001 | react: 18.3.1 2002 | react-dom: 18.3.1(react@18.3.1) 2003 | tslib: 2.8.1 2004 | 2005 | '@dnd-kit/sortable@10.0.0(@dnd-kit/core@6.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': 2006 | dependencies: 2007 | '@dnd-kit/core': 6.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2008 | '@dnd-kit/utilities': 3.2.2(react@18.3.1) 2009 | react: 18.3.1 2010 | tslib: 2.8.1 2011 | 2012 | '@dnd-kit/utilities@3.2.2(react@18.3.1)': 2013 | dependencies: 2014 | react: 18.3.1 2015 | tslib: 2.8.1 2016 | 2017 | '@emotion/babel-plugin@11.13.5': 2018 | dependencies: 2019 | '@babel/helper-module-imports': 7.25.9 2020 | '@babel/runtime': 7.26.0 2021 | '@emotion/hash': 0.9.2 2022 | '@emotion/memoize': 0.9.0 2023 | '@emotion/serialize': 1.3.3 2024 | babel-plugin-macros: 3.1.0 2025 | convert-source-map: 1.9.0 2026 | escape-string-regexp: 4.0.0 2027 | find-root: 1.1.0 2028 | source-map: 0.5.7 2029 | stylis: 4.2.0 2030 | transitivePeerDependencies: 2031 | - supports-color 2032 | 2033 | '@emotion/cache@11.14.0': 2034 | dependencies: 2035 | '@emotion/memoize': 0.9.0 2036 | '@emotion/sheet': 1.4.0 2037 | '@emotion/utils': 1.4.2 2038 | '@emotion/weak-memoize': 0.4.0 2039 | stylis: 4.2.0 2040 | 2041 | '@emotion/hash@0.9.2': {} 2042 | 2043 | '@emotion/is-prop-valid@1.3.1': 2044 | dependencies: 2045 | '@emotion/memoize': 0.9.0 2046 | 2047 | '@emotion/memoize@0.9.0': {} 2048 | 2049 | '@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1)': 2050 | dependencies: 2051 | '@babel/runtime': 7.26.0 2052 | '@emotion/babel-plugin': 11.13.5 2053 | '@emotion/cache': 11.14.0 2054 | '@emotion/serialize': 1.3.3 2055 | '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) 2056 | '@emotion/utils': 1.4.2 2057 | '@emotion/weak-memoize': 0.4.0 2058 | hoist-non-react-statics: 3.3.2 2059 | react: 18.3.1 2060 | optionalDependencies: 2061 | '@types/react': 18.3.18 2062 | transitivePeerDependencies: 2063 | - supports-color 2064 | 2065 | '@emotion/serialize@1.3.3': 2066 | dependencies: 2067 | '@emotion/hash': 0.9.2 2068 | '@emotion/memoize': 0.9.0 2069 | '@emotion/unitless': 0.10.0 2070 | '@emotion/utils': 1.4.2 2071 | csstype: 3.1.3 2072 | 2073 | '@emotion/sheet@1.4.0': {} 2074 | 2075 | '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1)': 2076 | dependencies: 2077 | '@babel/runtime': 7.26.0 2078 | '@emotion/babel-plugin': 11.13.5 2079 | '@emotion/is-prop-valid': 1.3.1 2080 | '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) 2081 | '@emotion/serialize': 1.3.3 2082 | '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) 2083 | '@emotion/utils': 1.4.2 2084 | react: 18.3.1 2085 | optionalDependencies: 2086 | '@types/react': 18.3.18 2087 | transitivePeerDependencies: 2088 | - supports-color 2089 | 2090 | '@emotion/unitless@0.10.0': {} 2091 | 2092 | '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@18.3.1)': 2093 | dependencies: 2094 | react: 18.3.1 2095 | 2096 | '@emotion/utils@1.4.2': {} 2097 | 2098 | '@emotion/weak-memoize@0.4.0': {} 2099 | 2100 | '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0)': 2101 | dependencies: 2102 | eslint: 9.17.0 2103 | eslint-visitor-keys: 3.4.3 2104 | 2105 | '@eslint-community/regexpp@4.12.1': {} 2106 | 2107 | '@eslint/config-array@0.19.1': 2108 | dependencies: 2109 | '@eslint/object-schema': 2.1.5 2110 | debug: 4.4.0 2111 | minimatch: 3.1.2 2112 | transitivePeerDependencies: 2113 | - supports-color 2114 | 2115 | '@eslint/core@0.9.1': 2116 | dependencies: 2117 | '@types/json-schema': 7.0.15 2118 | 2119 | '@eslint/eslintrc@3.2.0': 2120 | dependencies: 2121 | ajv: 6.12.6 2122 | debug: 4.4.0 2123 | espree: 10.3.0 2124 | globals: 14.0.0 2125 | ignore: 5.3.2 2126 | import-fresh: 3.3.0 2127 | js-yaml: 4.1.0 2128 | minimatch: 3.1.2 2129 | strip-json-comments: 3.1.1 2130 | transitivePeerDependencies: 2131 | - supports-color 2132 | 2133 | '@eslint/js@9.17.0': {} 2134 | 2135 | '@eslint/object-schema@2.1.5': {} 2136 | 2137 | '@eslint/plugin-kit@0.2.4': 2138 | dependencies: 2139 | levn: 0.4.1 2140 | 2141 | '@humanfs/core@0.19.1': {} 2142 | 2143 | '@humanfs/node@0.16.6': 2144 | dependencies: 2145 | '@humanfs/core': 0.19.1 2146 | '@humanwhocodes/retry': 0.3.1 2147 | 2148 | '@humanwhocodes/module-importer@1.0.1': {} 2149 | 2150 | '@humanwhocodes/retry@0.3.1': {} 2151 | 2152 | '@humanwhocodes/retry@0.4.1': {} 2153 | 2154 | '@jridgewell/gen-mapping@0.3.8': 2155 | dependencies: 2156 | '@jridgewell/set-array': 1.2.1 2157 | '@jridgewell/sourcemap-codec': 1.5.0 2158 | '@jridgewell/trace-mapping': 0.3.25 2159 | 2160 | '@jridgewell/resolve-uri@3.1.2': {} 2161 | 2162 | '@jridgewell/set-array@1.2.1': {} 2163 | 2164 | '@jridgewell/source-map@0.3.6': 2165 | dependencies: 2166 | '@jridgewell/gen-mapping': 0.3.8 2167 | '@jridgewell/trace-mapping': 0.3.25 2168 | 2169 | '@jridgewell/sourcemap-codec@1.5.0': {} 2170 | 2171 | '@jridgewell/trace-mapping@0.3.25': 2172 | dependencies: 2173 | '@jridgewell/resolve-uri': 3.1.2 2174 | '@jridgewell/sourcemap-codec': 1.5.0 2175 | 2176 | '@mui/core-downloads-tracker@6.3.0': {} 2177 | 2178 | '@mui/icons-material@6.3.0(@mui/material@6.3.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.18)(react@18.3.1)': 2179 | dependencies: 2180 | '@babel/runtime': 7.26.0 2181 | '@mui/material': 6.3.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2182 | react: 18.3.1 2183 | optionalDependencies: 2184 | '@types/react': 18.3.18 2185 | 2186 | '@mui/material@6.3.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 2187 | dependencies: 2188 | '@babel/runtime': 7.26.0 2189 | '@mui/core-downloads-tracker': 6.3.0 2190 | '@mui/system': 6.3.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) 2191 | '@mui/types': 7.2.20(@types/react@18.3.18) 2192 | '@mui/utils': 6.3.0(@types/react@18.3.18)(react@18.3.1) 2193 | '@popperjs/core': 2.11.8 2194 | '@types/react-transition-group': 4.4.12(@types/react@18.3.18) 2195 | clsx: 2.1.1 2196 | csstype: 3.1.3 2197 | prop-types: 15.8.1 2198 | react: 18.3.1 2199 | react-dom: 18.3.1(react@18.3.1) 2200 | react-is: 19.0.0 2201 | react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2202 | optionalDependencies: 2203 | '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) 2204 | '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) 2205 | '@types/react': 18.3.18 2206 | 2207 | '@mui/private-theming@6.3.0(@types/react@18.3.18)(react@18.3.1)': 2208 | dependencies: 2209 | '@babel/runtime': 7.26.0 2210 | '@mui/utils': 6.3.0(@types/react@18.3.18)(react@18.3.1) 2211 | prop-types: 15.8.1 2212 | react: 18.3.1 2213 | optionalDependencies: 2214 | '@types/react': 18.3.18 2215 | 2216 | '@mui/styled-engine@6.3.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1)': 2217 | dependencies: 2218 | '@babel/runtime': 7.26.0 2219 | '@emotion/cache': 11.14.0 2220 | '@emotion/serialize': 1.3.3 2221 | '@emotion/sheet': 1.4.0 2222 | csstype: 3.1.3 2223 | prop-types: 15.8.1 2224 | react: 18.3.1 2225 | optionalDependencies: 2226 | '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) 2227 | '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) 2228 | 2229 | '@mui/system@6.3.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1)': 2230 | dependencies: 2231 | '@babel/runtime': 7.26.0 2232 | '@mui/private-theming': 6.3.0(@types/react@18.3.18)(react@18.3.1) 2233 | '@mui/styled-engine': 6.3.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1))(react@18.3.1) 2234 | '@mui/types': 7.2.20(@types/react@18.3.18) 2235 | '@mui/utils': 6.3.0(@types/react@18.3.18)(react@18.3.1) 2236 | clsx: 2.1.1 2237 | csstype: 3.1.3 2238 | prop-types: 15.8.1 2239 | react: 18.3.1 2240 | optionalDependencies: 2241 | '@emotion/react': 11.14.0(@types/react@18.3.18)(react@18.3.1) 2242 | '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@18.3.18)(react@18.3.1))(@types/react@18.3.18)(react@18.3.1) 2243 | '@types/react': 18.3.18 2244 | 2245 | '@mui/types@7.2.20(@types/react@18.3.18)': 2246 | optionalDependencies: 2247 | '@types/react': 18.3.18 2248 | 2249 | '@mui/utils@6.3.0(@types/react@18.3.18)(react@18.3.1)': 2250 | dependencies: 2251 | '@babel/runtime': 7.26.0 2252 | '@mui/types': 7.2.20(@types/react@18.3.18) 2253 | '@types/prop-types': 15.7.14 2254 | clsx: 2.1.1 2255 | prop-types: 15.8.1 2256 | react: 18.3.1 2257 | react-is: 19.0.0 2258 | optionalDependencies: 2259 | '@types/react': 18.3.18 2260 | 2261 | '@nodelib/fs.scandir@2.1.5': 2262 | dependencies: 2263 | '@nodelib/fs.stat': 2.0.5 2264 | run-parallel: 1.2.0 2265 | 2266 | '@nodelib/fs.stat@2.0.5': {} 2267 | 2268 | '@nodelib/fs.walk@1.2.8': 2269 | dependencies: 2270 | '@nodelib/fs.scandir': 2.1.5 2271 | fastq: 1.18.0 2272 | 2273 | '@parcel/watcher-android-arm64@2.5.0': 2274 | optional: true 2275 | 2276 | '@parcel/watcher-darwin-arm64@2.5.0': 2277 | optional: true 2278 | 2279 | '@parcel/watcher-darwin-x64@2.5.0': 2280 | optional: true 2281 | 2282 | '@parcel/watcher-freebsd-x64@2.5.0': 2283 | optional: true 2284 | 2285 | '@parcel/watcher-linux-arm-glibc@2.5.0': 2286 | optional: true 2287 | 2288 | '@parcel/watcher-linux-arm-musl@2.5.0': 2289 | optional: true 2290 | 2291 | '@parcel/watcher-linux-arm64-glibc@2.5.0': 2292 | optional: true 2293 | 2294 | '@parcel/watcher-linux-arm64-musl@2.5.0': 2295 | optional: true 2296 | 2297 | '@parcel/watcher-linux-x64-glibc@2.5.0': 2298 | optional: true 2299 | 2300 | '@parcel/watcher-linux-x64-musl@2.5.0': 2301 | optional: true 2302 | 2303 | '@parcel/watcher-win32-arm64@2.5.0': 2304 | optional: true 2305 | 2306 | '@parcel/watcher-win32-ia32@2.5.0': 2307 | optional: true 2308 | 2309 | '@parcel/watcher-win32-x64@2.5.0': 2310 | optional: true 2311 | 2312 | '@parcel/watcher@2.5.0': 2313 | dependencies: 2314 | detect-libc: 1.0.3 2315 | is-glob: 4.0.3 2316 | micromatch: 4.0.8 2317 | node-addon-api: 7.1.1 2318 | optionalDependencies: 2319 | '@parcel/watcher-android-arm64': 2.5.0 2320 | '@parcel/watcher-darwin-arm64': 2.5.0 2321 | '@parcel/watcher-darwin-x64': 2.5.0 2322 | '@parcel/watcher-freebsd-x64': 2.5.0 2323 | '@parcel/watcher-linux-arm-glibc': 2.5.0 2324 | '@parcel/watcher-linux-arm-musl': 2.5.0 2325 | '@parcel/watcher-linux-arm64-glibc': 2.5.0 2326 | '@parcel/watcher-linux-arm64-musl': 2.5.0 2327 | '@parcel/watcher-linux-x64-glibc': 2.5.0 2328 | '@parcel/watcher-linux-x64-musl': 2.5.0 2329 | '@parcel/watcher-win32-arm64': 2.5.0 2330 | '@parcel/watcher-win32-ia32': 2.5.0 2331 | '@parcel/watcher-win32-x64': 2.5.0 2332 | optional: true 2333 | 2334 | '@pkgr/core@0.1.1': {} 2335 | 2336 | '@polka/url@1.0.0-next.28': {} 2337 | 2338 | '@popperjs/core@2.11.8': {} 2339 | 2340 | '@react-dnd/asap@5.0.2': {} 2341 | 2342 | '@react-dnd/invariant@4.0.2': {} 2343 | 2344 | '@react-dnd/shallowequal@4.0.2': {} 2345 | 2346 | '@rollup/plugin-commonjs@28.0.2(rollup@4.29.1)': 2347 | dependencies: 2348 | '@rollup/pluginutils': 5.1.4(rollup@4.29.1) 2349 | commondir: 1.0.1 2350 | estree-walker: 2.0.2 2351 | fdir: 6.4.2(picomatch@4.0.2) 2352 | is-reference: 1.2.1 2353 | magic-string: 0.30.17 2354 | picomatch: 4.0.2 2355 | optionalDependencies: 2356 | rollup: 4.29.1 2357 | 2358 | '@rollup/plugin-node-resolve@16.0.0(rollup@4.29.1)': 2359 | dependencies: 2360 | '@rollup/pluginutils': 5.1.4(rollup@4.29.1) 2361 | '@types/resolve': 1.20.2 2362 | deepmerge: 4.3.1 2363 | is-module: 1.0.0 2364 | resolve: 1.22.10 2365 | optionalDependencies: 2366 | rollup: 4.29.1 2367 | 2368 | '@rollup/plugin-replace@6.0.2(rollup@4.29.1)': 2369 | dependencies: 2370 | '@rollup/pluginutils': 5.1.4(rollup@4.29.1) 2371 | magic-string: 0.30.17 2372 | optionalDependencies: 2373 | rollup: 4.29.1 2374 | 2375 | '@rollup/plugin-terser@0.4.4(rollup@4.29.1)': 2376 | dependencies: 2377 | serialize-javascript: 6.0.2 2378 | smob: 1.5.0 2379 | terser: 5.37.0 2380 | optionalDependencies: 2381 | rollup: 4.29.1 2382 | 2383 | '@rollup/plugin-typescript@12.1.2(rollup@4.29.1)(tslib@2.8.1)(typescript@5.7.2)': 2384 | dependencies: 2385 | '@rollup/pluginutils': 5.1.4(rollup@4.29.1) 2386 | resolve: 1.22.10 2387 | typescript: 5.7.2 2388 | optionalDependencies: 2389 | rollup: 4.29.1 2390 | tslib: 2.8.1 2391 | 2392 | '@rollup/pluginutils@5.1.4(rollup@4.29.1)': 2393 | dependencies: 2394 | '@types/estree': 1.0.6 2395 | estree-walker: 2.0.2 2396 | picomatch: 4.0.2 2397 | optionalDependencies: 2398 | rollup: 4.29.1 2399 | 2400 | '@rollup/rollup-android-arm-eabi@4.29.1': 2401 | optional: true 2402 | 2403 | '@rollup/rollup-android-arm64@4.29.1': 2404 | optional: true 2405 | 2406 | '@rollup/rollup-darwin-arm64@4.29.1': 2407 | optional: true 2408 | 2409 | '@rollup/rollup-darwin-x64@4.29.1': 2410 | optional: true 2411 | 2412 | '@rollup/rollup-freebsd-arm64@4.29.1': 2413 | optional: true 2414 | 2415 | '@rollup/rollup-freebsd-x64@4.29.1': 2416 | optional: true 2417 | 2418 | '@rollup/rollup-linux-arm-gnueabihf@4.29.1': 2419 | optional: true 2420 | 2421 | '@rollup/rollup-linux-arm-musleabihf@4.29.1': 2422 | optional: true 2423 | 2424 | '@rollup/rollup-linux-arm64-gnu@4.29.1': 2425 | optional: true 2426 | 2427 | '@rollup/rollup-linux-arm64-musl@4.29.1': 2428 | optional: true 2429 | 2430 | '@rollup/rollup-linux-loongarch64-gnu@4.29.1': 2431 | optional: true 2432 | 2433 | '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': 2434 | optional: true 2435 | 2436 | '@rollup/rollup-linux-riscv64-gnu@4.29.1': 2437 | optional: true 2438 | 2439 | '@rollup/rollup-linux-s390x-gnu@4.29.1': 2440 | optional: true 2441 | 2442 | '@rollup/rollup-linux-x64-gnu@4.29.1': 2443 | optional: true 2444 | 2445 | '@rollup/rollup-linux-x64-musl@4.29.1': 2446 | optional: true 2447 | 2448 | '@rollup/rollup-win32-arm64-msvc@4.29.1': 2449 | optional: true 2450 | 2451 | '@rollup/rollup-win32-ia32-msvc@4.29.1': 2452 | optional: true 2453 | 2454 | '@rollup/rollup-win32-x64-msvc@4.29.1': 2455 | optional: true 2456 | 2457 | '@types/chrome@0.0.287': 2458 | dependencies: 2459 | '@types/filesystem': 0.0.36 2460 | '@types/har-format': 1.2.16 2461 | 2462 | '@types/cross-zip@4.0.2': {} 2463 | 2464 | '@types/estree@1.0.6': {} 2465 | 2466 | '@types/filesystem@0.0.36': 2467 | dependencies: 2468 | '@types/filewriter': 0.0.33 2469 | 2470 | '@types/filewriter@0.0.33': {} 2471 | 2472 | '@types/har-format@1.2.16': {} 2473 | 2474 | '@types/json-schema@7.0.15': {} 2475 | 2476 | '@types/lodash-es@4.17.12': 2477 | dependencies: 2478 | '@types/lodash': 4.17.13 2479 | 2480 | '@types/lodash@4.17.13': {} 2481 | 2482 | '@types/node@22.10.2': 2483 | dependencies: 2484 | undici-types: 6.20.0 2485 | 2486 | '@types/parse-json@4.0.2': {} 2487 | 2488 | '@types/prop-types@15.7.14': {} 2489 | 2490 | '@types/react-dom@18.3.5(@types/react@18.3.18)': 2491 | dependencies: 2492 | '@types/react': 18.3.18 2493 | 2494 | '@types/react-transition-group@4.4.12(@types/react@18.3.18)': 2495 | dependencies: 2496 | '@types/react': 18.3.18 2497 | 2498 | '@types/react@18.3.18': 2499 | dependencies: 2500 | '@types/prop-types': 15.7.14 2501 | csstype: 3.1.3 2502 | 2503 | '@types/resolve@1.20.2': {} 2504 | 2505 | '@typescript-eslint/eslint-plugin@8.18.2(@typescript-eslint/parser@8.18.2(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2)': 2506 | dependencies: 2507 | '@eslint-community/regexpp': 4.12.1 2508 | '@typescript-eslint/parser': 8.18.2(eslint@9.17.0)(typescript@5.7.2) 2509 | '@typescript-eslint/scope-manager': 8.18.2 2510 | '@typescript-eslint/type-utils': 8.18.2(eslint@9.17.0)(typescript@5.7.2) 2511 | '@typescript-eslint/utils': 8.18.2(eslint@9.17.0)(typescript@5.7.2) 2512 | '@typescript-eslint/visitor-keys': 8.18.2 2513 | eslint: 9.17.0 2514 | graphemer: 1.4.0 2515 | ignore: 5.3.2 2516 | natural-compare: 1.4.0 2517 | ts-api-utils: 1.4.3(typescript@5.7.2) 2518 | typescript: 5.7.2 2519 | transitivePeerDependencies: 2520 | - supports-color 2521 | 2522 | '@typescript-eslint/parser@8.18.2(eslint@9.17.0)(typescript@5.7.2)': 2523 | dependencies: 2524 | '@typescript-eslint/scope-manager': 8.18.2 2525 | '@typescript-eslint/types': 8.18.2 2526 | '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.7.2) 2527 | '@typescript-eslint/visitor-keys': 8.18.2 2528 | debug: 4.4.0 2529 | eslint: 9.17.0 2530 | typescript: 5.7.2 2531 | transitivePeerDependencies: 2532 | - supports-color 2533 | 2534 | '@typescript-eslint/scope-manager@8.18.2': 2535 | dependencies: 2536 | '@typescript-eslint/types': 8.18.2 2537 | '@typescript-eslint/visitor-keys': 8.18.2 2538 | 2539 | '@typescript-eslint/type-utils@8.18.2(eslint@9.17.0)(typescript@5.7.2)': 2540 | dependencies: 2541 | '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.7.2) 2542 | '@typescript-eslint/utils': 8.18.2(eslint@9.17.0)(typescript@5.7.2) 2543 | debug: 4.4.0 2544 | eslint: 9.17.0 2545 | ts-api-utils: 1.4.3(typescript@5.7.2) 2546 | typescript: 5.7.2 2547 | transitivePeerDependencies: 2548 | - supports-color 2549 | 2550 | '@typescript-eslint/types@8.18.2': {} 2551 | 2552 | '@typescript-eslint/typescript-estree@8.18.2(typescript@5.7.2)': 2553 | dependencies: 2554 | '@typescript-eslint/types': 8.18.2 2555 | '@typescript-eslint/visitor-keys': 8.18.2 2556 | debug: 4.4.0 2557 | fast-glob: 3.3.2 2558 | is-glob: 4.0.3 2559 | minimatch: 9.0.5 2560 | semver: 7.6.3 2561 | ts-api-utils: 1.4.3(typescript@5.7.2) 2562 | typescript: 5.7.2 2563 | transitivePeerDependencies: 2564 | - supports-color 2565 | 2566 | '@typescript-eslint/utils@8.18.2(eslint@9.17.0)(typescript@5.7.2)': 2567 | dependencies: 2568 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) 2569 | '@typescript-eslint/scope-manager': 8.18.2 2570 | '@typescript-eslint/types': 8.18.2 2571 | '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.7.2) 2572 | eslint: 9.17.0 2573 | typescript: 5.7.2 2574 | transitivePeerDependencies: 2575 | - supports-color 2576 | 2577 | '@typescript-eslint/visitor-keys@8.18.2': 2578 | dependencies: 2579 | '@typescript-eslint/types': 8.18.2 2580 | eslint-visitor-keys: 4.2.0 2581 | 2582 | acorn-jsx@5.3.2(acorn@8.14.0): 2583 | dependencies: 2584 | acorn: 8.14.0 2585 | 2586 | acorn@8.14.0: {} 2587 | 2588 | ajv@6.12.6: 2589 | dependencies: 2590 | fast-deep-equal: 3.1.3 2591 | fast-json-stable-stringify: 2.1.0 2592 | json-schema-traverse: 0.4.1 2593 | uri-js: 4.4.1 2594 | 2595 | ansi-styles@4.3.0: 2596 | dependencies: 2597 | color-convert: 2.0.1 2598 | 2599 | argparse@2.0.1: {} 2600 | 2601 | array-buffer-byte-length@1.0.2: 2602 | dependencies: 2603 | call-bound: 1.0.3 2604 | is-array-buffer: 3.0.5 2605 | 2606 | array-includes@3.1.8: 2607 | dependencies: 2608 | call-bind: 1.0.8 2609 | define-properties: 1.2.1 2610 | es-abstract: 1.23.7 2611 | es-object-atoms: 1.0.0 2612 | get-intrinsic: 1.2.6 2613 | is-string: 1.1.1 2614 | 2615 | array.prototype.findlast@1.2.5: 2616 | dependencies: 2617 | call-bind: 1.0.8 2618 | define-properties: 1.2.1 2619 | es-abstract: 1.23.7 2620 | es-errors: 1.3.0 2621 | es-object-atoms: 1.0.0 2622 | es-shim-unscopables: 1.0.2 2623 | 2624 | array.prototype.flat@1.3.3: 2625 | dependencies: 2626 | call-bind: 1.0.8 2627 | define-properties: 1.2.1 2628 | es-abstract: 1.23.7 2629 | es-shim-unscopables: 1.0.2 2630 | 2631 | array.prototype.flatmap@1.3.3: 2632 | dependencies: 2633 | call-bind: 1.0.8 2634 | define-properties: 1.2.1 2635 | es-abstract: 1.23.7 2636 | es-shim-unscopables: 1.0.2 2637 | 2638 | array.prototype.tosorted@1.1.4: 2639 | dependencies: 2640 | call-bind: 1.0.8 2641 | define-properties: 1.2.1 2642 | es-abstract: 1.23.7 2643 | es-errors: 1.3.0 2644 | es-shim-unscopables: 1.0.2 2645 | 2646 | arraybuffer.prototype.slice@1.0.4: 2647 | dependencies: 2648 | array-buffer-byte-length: 1.0.2 2649 | call-bind: 1.0.8 2650 | define-properties: 1.2.1 2651 | es-abstract: 1.23.7 2652 | es-errors: 1.3.0 2653 | get-intrinsic: 1.2.6 2654 | is-array-buffer: 3.0.5 2655 | 2656 | available-typed-arrays@1.0.7: 2657 | dependencies: 2658 | possible-typed-array-names: 1.0.0 2659 | 2660 | babel-plugin-macros@3.1.0: 2661 | dependencies: 2662 | '@babel/runtime': 7.26.0 2663 | cosmiconfig: 7.1.0 2664 | resolve: 1.22.10 2665 | 2666 | balanced-match@1.0.2: {} 2667 | 2668 | brace-expansion@1.1.11: 2669 | dependencies: 2670 | balanced-match: 1.0.2 2671 | concat-map: 0.0.1 2672 | 2673 | brace-expansion@2.0.1: 2674 | dependencies: 2675 | balanced-match: 1.0.2 2676 | 2677 | braces@3.0.3: 2678 | dependencies: 2679 | fill-range: 7.1.1 2680 | 2681 | buffer-from@1.1.2: {} 2682 | 2683 | call-bind-apply-helpers@1.0.1: 2684 | dependencies: 2685 | es-errors: 1.3.0 2686 | function-bind: 1.1.2 2687 | 2688 | call-bind@1.0.8: 2689 | dependencies: 2690 | call-bind-apply-helpers: 1.0.1 2691 | es-define-property: 1.0.1 2692 | get-intrinsic: 1.2.6 2693 | set-function-length: 1.2.2 2694 | 2695 | call-bound@1.0.3: 2696 | dependencies: 2697 | call-bind-apply-helpers: 1.0.1 2698 | get-intrinsic: 1.2.6 2699 | 2700 | callsites@3.1.0: {} 2701 | 2702 | chalk@4.1.2: 2703 | dependencies: 2704 | ansi-styles: 4.3.0 2705 | supports-color: 7.2.0 2706 | 2707 | chokidar@4.0.3: 2708 | dependencies: 2709 | readdirp: 4.0.2 2710 | 2711 | clsx@2.1.1: {} 2712 | 2713 | color-convert@2.0.1: 2714 | dependencies: 2715 | color-name: 1.1.4 2716 | 2717 | color-name@1.1.4: {} 2718 | 2719 | commander@2.20.3: {} 2720 | 2721 | commondir@1.0.1: {} 2722 | 2723 | concat-map@0.0.1: {} 2724 | 2725 | console-clear@1.1.1: {} 2726 | 2727 | convert-source-map@1.9.0: {} 2728 | 2729 | cosmiconfig@7.1.0: 2730 | dependencies: 2731 | '@types/parse-json': 4.0.2 2732 | import-fresh: 3.3.0 2733 | parse-json: 5.2.0 2734 | path-type: 4.0.0 2735 | yaml: 1.10.2 2736 | 2737 | cross-spawn@7.0.6: 2738 | dependencies: 2739 | path-key: 3.1.1 2740 | shebang-command: 2.0.0 2741 | which: 2.0.2 2742 | 2743 | cross-zip@4.0.1: {} 2744 | 2745 | csstype@3.1.3: {} 2746 | 2747 | data-view-buffer@1.0.2: 2748 | dependencies: 2749 | call-bound: 1.0.3 2750 | es-errors: 1.3.0 2751 | is-data-view: 1.0.2 2752 | 2753 | data-view-byte-length@1.0.2: 2754 | dependencies: 2755 | call-bound: 1.0.3 2756 | es-errors: 1.3.0 2757 | is-data-view: 1.0.2 2758 | 2759 | data-view-byte-offset@1.0.1: 2760 | dependencies: 2761 | call-bound: 1.0.3 2762 | es-errors: 1.3.0 2763 | is-data-view: 1.0.2 2764 | 2765 | debug@4.4.0: 2766 | dependencies: 2767 | ms: 2.1.3 2768 | 2769 | deep-is@0.1.4: {} 2770 | 2771 | deepmerge@4.3.1: {} 2772 | 2773 | define-data-property@1.1.4: 2774 | dependencies: 2775 | es-define-property: 1.0.1 2776 | es-errors: 1.3.0 2777 | gopd: 1.2.0 2778 | 2779 | define-properties@1.2.1: 2780 | dependencies: 2781 | define-data-property: 1.1.4 2782 | has-property-descriptors: 1.0.2 2783 | object-keys: 1.1.1 2784 | 2785 | dequal@2.0.3: {} 2786 | 2787 | detect-libc@1.0.3: 2788 | optional: true 2789 | 2790 | dnd-core@16.0.1: 2791 | dependencies: 2792 | '@react-dnd/asap': 5.0.2 2793 | '@react-dnd/invariant': 4.0.2 2794 | redux: 4.2.1 2795 | 2796 | doctrine@2.1.0: 2797 | dependencies: 2798 | esutils: 2.0.3 2799 | 2800 | dom-helpers@5.2.1: 2801 | dependencies: 2802 | '@babel/runtime': 7.26.0 2803 | csstype: 3.1.3 2804 | 2805 | dunder-proto@1.0.1: 2806 | dependencies: 2807 | call-bind-apply-helpers: 1.0.1 2808 | es-errors: 1.3.0 2809 | gopd: 1.2.0 2810 | 2811 | error-ex@1.3.2: 2812 | dependencies: 2813 | is-arrayish: 0.2.1 2814 | 2815 | es-abstract@1.23.7: 2816 | dependencies: 2817 | array-buffer-byte-length: 1.0.2 2818 | arraybuffer.prototype.slice: 1.0.4 2819 | available-typed-arrays: 1.0.7 2820 | call-bind: 1.0.8 2821 | call-bound: 1.0.3 2822 | data-view-buffer: 1.0.2 2823 | data-view-byte-length: 1.0.2 2824 | data-view-byte-offset: 1.0.1 2825 | es-define-property: 1.0.1 2826 | es-errors: 1.3.0 2827 | es-object-atoms: 1.0.0 2828 | es-set-tostringtag: 2.0.3 2829 | es-to-primitive: 1.3.0 2830 | function.prototype.name: 1.1.8 2831 | get-intrinsic: 1.2.6 2832 | get-symbol-description: 1.1.0 2833 | globalthis: 1.0.4 2834 | gopd: 1.2.0 2835 | has-property-descriptors: 1.0.2 2836 | has-proto: 1.2.0 2837 | has-symbols: 1.1.0 2838 | hasown: 2.0.2 2839 | internal-slot: 1.1.0 2840 | is-array-buffer: 3.0.5 2841 | is-callable: 1.2.7 2842 | is-data-view: 1.0.2 2843 | is-regex: 1.2.1 2844 | is-shared-array-buffer: 1.0.4 2845 | is-string: 1.1.1 2846 | is-typed-array: 1.1.15 2847 | is-weakref: 1.1.0 2848 | math-intrinsics: 1.1.0 2849 | object-inspect: 1.13.3 2850 | object-keys: 1.1.1 2851 | object.assign: 4.1.7 2852 | regexp.prototype.flags: 1.5.3 2853 | safe-array-concat: 1.1.3 2854 | safe-regex-test: 1.1.0 2855 | string.prototype.trim: 1.2.10 2856 | string.prototype.trimend: 1.0.9 2857 | string.prototype.trimstart: 1.0.8 2858 | typed-array-buffer: 1.0.3 2859 | typed-array-byte-length: 1.0.3 2860 | typed-array-byte-offset: 1.0.4 2861 | typed-array-length: 1.0.7 2862 | unbox-primitive: 1.1.0 2863 | which-typed-array: 1.1.18 2864 | 2865 | es-define-property@1.0.1: {} 2866 | 2867 | es-errors@1.3.0: {} 2868 | 2869 | es-iterator-helpers@1.2.1: 2870 | dependencies: 2871 | call-bind: 1.0.8 2872 | call-bound: 1.0.3 2873 | define-properties: 1.2.1 2874 | es-abstract: 1.23.7 2875 | es-errors: 1.3.0 2876 | es-set-tostringtag: 2.0.3 2877 | function-bind: 1.1.2 2878 | get-intrinsic: 1.2.6 2879 | globalthis: 1.0.4 2880 | gopd: 1.2.0 2881 | has-property-descriptors: 1.0.2 2882 | has-proto: 1.2.0 2883 | has-symbols: 1.1.0 2884 | internal-slot: 1.1.0 2885 | iterator.prototype: 1.1.4 2886 | safe-array-concat: 1.1.3 2887 | 2888 | es-object-atoms@1.0.0: 2889 | dependencies: 2890 | es-errors: 1.3.0 2891 | 2892 | es-set-tostringtag@2.0.3: 2893 | dependencies: 2894 | get-intrinsic: 1.2.6 2895 | has-tostringtag: 1.0.2 2896 | hasown: 2.0.2 2897 | 2898 | es-shim-unscopables@1.0.2: 2899 | dependencies: 2900 | hasown: 2.0.2 2901 | 2902 | es-to-primitive@1.3.0: 2903 | dependencies: 2904 | is-callable: 1.2.7 2905 | is-date-object: 1.1.0 2906 | is-symbol: 1.1.1 2907 | 2908 | escape-string-regexp@4.0.0: {} 2909 | 2910 | eslint-config-prettier@9.1.0(eslint@9.17.0): 2911 | dependencies: 2912 | eslint: 9.17.0 2913 | 2914 | eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.17.0))(eslint@9.17.0)(prettier@3.4.2): 2915 | dependencies: 2916 | eslint: 9.17.0 2917 | prettier: 3.4.2 2918 | prettier-linter-helpers: 1.0.0 2919 | synckit: 0.9.2 2920 | optionalDependencies: 2921 | eslint-config-prettier: 9.1.0(eslint@9.17.0) 2922 | 2923 | eslint-plugin-react-hooks@5.1.0(eslint@9.17.0): 2924 | dependencies: 2925 | eslint: 9.17.0 2926 | 2927 | eslint-plugin-react@7.37.3(eslint@9.17.0): 2928 | dependencies: 2929 | array-includes: 3.1.8 2930 | array.prototype.findlast: 1.2.5 2931 | array.prototype.flatmap: 1.3.3 2932 | array.prototype.tosorted: 1.1.4 2933 | doctrine: 2.1.0 2934 | es-iterator-helpers: 1.2.1 2935 | eslint: 9.17.0 2936 | estraverse: 5.3.0 2937 | hasown: 2.0.2 2938 | jsx-ast-utils: 3.3.5 2939 | minimatch: 3.1.2 2940 | object.entries: 1.1.8 2941 | object.fromentries: 2.0.8 2942 | object.values: 1.2.1 2943 | prop-types: 15.8.1 2944 | resolve: 2.0.0-next.5 2945 | semver: 6.3.1 2946 | string.prototype.matchall: 4.0.12 2947 | string.prototype.repeat: 1.0.0 2948 | 2949 | eslint-scope@8.2.0: 2950 | dependencies: 2951 | esrecurse: 4.3.0 2952 | estraverse: 5.3.0 2953 | 2954 | eslint-visitor-keys@3.4.3: {} 2955 | 2956 | eslint-visitor-keys@4.2.0: {} 2957 | 2958 | eslint@9.17.0: 2959 | dependencies: 2960 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) 2961 | '@eslint-community/regexpp': 4.12.1 2962 | '@eslint/config-array': 0.19.1 2963 | '@eslint/core': 0.9.1 2964 | '@eslint/eslintrc': 3.2.0 2965 | '@eslint/js': 9.17.0 2966 | '@eslint/plugin-kit': 0.2.4 2967 | '@humanfs/node': 0.16.6 2968 | '@humanwhocodes/module-importer': 1.0.1 2969 | '@humanwhocodes/retry': 0.4.1 2970 | '@types/estree': 1.0.6 2971 | '@types/json-schema': 7.0.15 2972 | ajv: 6.12.6 2973 | chalk: 4.1.2 2974 | cross-spawn: 7.0.6 2975 | debug: 4.4.0 2976 | escape-string-regexp: 4.0.0 2977 | eslint-scope: 8.2.0 2978 | eslint-visitor-keys: 4.2.0 2979 | espree: 10.3.0 2980 | esquery: 1.6.0 2981 | esutils: 2.0.3 2982 | fast-deep-equal: 3.1.3 2983 | file-entry-cache: 8.0.0 2984 | find-up: 5.0.0 2985 | glob-parent: 6.0.2 2986 | ignore: 5.3.2 2987 | imurmurhash: 0.1.4 2988 | is-glob: 4.0.3 2989 | json-stable-stringify-without-jsonify: 1.0.1 2990 | lodash.merge: 4.6.2 2991 | minimatch: 3.1.2 2992 | natural-compare: 1.4.0 2993 | optionator: 0.9.4 2994 | transitivePeerDependencies: 2995 | - supports-color 2996 | 2997 | espree@10.3.0: 2998 | dependencies: 2999 | acorn: 8.14.0 3000 | acorn-jsx: 5.3.2(acorn@8.14.0) 3001 | eslint-visitor-keys: 4.2.0 3002 | 3003 | esquery@1.6.0: 3004 | dependencies: 3005 | estraverse: 5.3.0 3006 | 3007 | esrecurse@4.3.0: 3008 | dependencies: 3009 | estraverse: 5.3.0 3010 | 3011 | estraverse@5.3.0: {} 3012 | 3013 | estree-walker@0.6.1: {} 3014 | 3015 | estree-walker@2.0.2: {} 3016 | 3017 | esutils@2.0.3: {} 3018 | 3019 | fast-deep-equal@3.1.3: {} 3020 | 3021 | fast-diff@1.3.0: {} 3022 | 3023 | fast-glob@3.3.2: 3024 | dependencies: 3025 | '@nodelib/fs.stat': 2.0.5 3026 | '@nodelib/fs.walk': 1.2.8 3027 | glob-parent: 5.1.2 3028 | merge2: 1.4.1 3029 | micromatch: 4.0.8 3030 | 3031 | fast-json-stable-stringify@2.1.0: {} 3032 | 3033 | fast-levenshtein@2.0.6: {} 3034 | 3035 | fastq@1.18.0: 3036 | dependencies: 3037 | reusify: 1.0.4 3038 | 3039 | fdir@6.4.2(picomatch@4.0.2): 3040 | optionalDependencies: 3041 | picomatch: 4.0.2 3042 | 3043 | file-entry-cache@8.0.0: 3044 | dependencies: 3045 | flat-cache: 4.0.1 3046 | 3047 | fill-range@7.1.1: 3048 | dependencies: 3049 | to-regex-range: 5.0.1 3050 | 3051 | find-root@1.1.0: {} 3052 | 3053 | find-up@5.0.0: 3054 | dependencies: 3055 | locate-path: 6.0.0 3056 | path-exists: 4.0.0 3057 | 3058 | flat-cache@4.0.1: 3059 | dependencies: 3060 | flatted: 3.3.2 3061 | keyv: 4.5.4 3062 | 3063 | flatted@3.3.2: {} 3064 | 3065 | for-each@0.3.3: 3066 | dependencies: 3067 | is-callable: 1.2.7 3068 | 3069 | fsevents@2.3.3: 3070 | optional: true 3071 | 3072 | function-bind@1.1.2: {} 3073 | 3074 | function.prototype.name@1.1.8: 3075 | dependencies: 3076 | call-bind: 1.0.8 3077 | call-bound: 1.0.3 3078 | define-properties: 1.2.1 3079 | functions-have-names: 1.2.3 3080 | hasown: 2.0.2 3081 | is-callable: 1.2.7 3082 | 3083 | functions-have-names@1.2.3: {} 3084 | 3085 | get-intrinsic@1.2.6: 3086 | dependencies: 3087 | call-bind-apply-helpers: 1.0.1 3088 | dunder-proto: 1.0.1 3089 | es-define-property: 1.0.1 3090 | es-errors: 1.3.0 3091 | es-object-atoms: 1.0.0 3092 | function-bind: 1.1.2 3093 | gopd: 1.2.0 3094 | has-symbols: 1.1.0 3095 | hasown: 2.0.2 3096 | math-intrinsics: 1.1.0 3097 | 3098 | get-port@5.1.1: {} 3099 | 3100 | get-symbol-description@1.1.0: 3101 | dependencies: 3102 | call-bound: 1.0.3 3103 | es-errors: 1.3.0 3104 | get-intrinsic: 1.2.6 3105 | 3106 | glob-parent@5.1.2: 3107 | dependencies: 3108 | is-glob: 4.0.3 3109 | 3110 | glob-parent@6.0.2: 3111 | dependencies: 3112 | is-glob: 4.0.3 3113 | 3114 | globals@11.12.0: {} 3115 | 3116 | globals@14.0.0: {} 3117 | 3118 | globalthis@1.0.4: 3119 | dependencies: 3120 | define-properties: 1.2.1 3121 | gopd: 1.2.0 3122 | 3123 | gopd@1.2.0: {} 3124 | 3125 | graphemer@1.4.0: {} 3126 | 3127 | has-bigints@1.1.0: {} 3128 | 3129 | has-flag@4.0.0: {} 3130 | 3131 | has-property-descriptors@1.0.2: 3132 | dependencies: 3133 | es-define-property: 1.0.1 3134 | 3135 | has-proto@1.2.0: 3136 | dependencies: 3137 | dunder-proto: 1.0.1 3138 | 3139 | has-symbols@1.1.0: {} 3140 | 3141 | has-tostringtag@1.0.2: 3142 | dependencies: 3143 | has-symbols: 1.1.0 3144 | 3145 | hasown@2.0.2: 3146 | dependencies: 3147 | function-bind: 1.1.2 3148 | 3149 | hoist-non-react-statics@3.3.2: 3150 | dependencies: 3151 | react-is: 16.13.1 3152 | 3153 | ignore@5.3.2: {} 3154 | 3155 | immutable@5.0.3: {} 3156 | 3157 | import-fresh@3.3.0: 3158 | dependencies: 3159 | parent-module: 1.0.1 3160 | resolve-from: 4.0.0 3161 | 3162 | imurmurhash@0.1.4: {} 3163 | 3164 | internal-slot@1.1.0: 3165 | dependencies: 3166 | es-errors: 1.3.0 3167 | hasown: 2.0.2 3168 | side-channel: 1.1.0 3169 | 3170 | is-array-buffer@3.0.5: 3171 | dependencies: 3172 | call-bind: 1.0.8 3173 | call-bound: 1.0.3 3174 | get-intrinsic: 1.2.6 3175 | 3176 | is-arrayish@0.2.1: {} 3177 | 3178 | is-async-function@2.0.0: 3179 | dependencies: 3180 | has-tostringtag: 1.0.2 3181 | 3182 | is-bigint@1.1.0: 3183 | dependencies: 3184 | has-bigints: 1.1.0 3185 | 3186 | is-boolean-object@1.2.1: 3187 | dependencies: 3188 | call-bound: 1.0.3 3189 | has-tostringtag: 1.0.2 3190 | 3191 | is-callable@1.2.7: {} 3192 | 3193 | is-core-module@2.16.1: 3194 | dependencies: 3195 | hasown: 2.0.2 3196 | 3197 | is-data-view@1.0.2: 3198 | dependencies: 3199 | call-bound: 1.0.3 3200 | get-intrinsic: 1.2.6 3201 | is-typed-array: 1.1.15 3202 | 3203 | is-date-object@1.1.0: 3204 | dependencies: 3205 | call-bound: 1.0.3 3206 | has-tostringtag: 1.0.2 3207 | 3208 | is-extglob@2.1.1: {} 3209 | 3210 | is-finalizationregistry@1.1.1: 3211 | dependencies: 3212 | call-bound: 1.0.3 3213 | 3214 | is-generator-function@1.0.10: 3215 | dependencies: 3216 | has-tostringtag: 1.0.2 3217 | 3218 | is-glob@4.0.3: 3219 | dependencies: 3220 | is-extglob: 2.1.1 3221 | 3222 | is-map@2.0.3: {} 3223 | 3224 | is-module@1.0.0: {} 3225 | 3226 | is-number-object@1.1.1: 3227 | dependencies: 3228 | call-bound: 1.0.3 3229 | has-tostringtag: 1.0.2 3230 | 3231 | is-number@7.0.0: {} 3232 | 3233 | is-reference@1.2.1: 3234 | dependencies: 3235 | '@types/estree': 1.0.6 3236 | 3237 | is-regex@1.2.1: 3238 | dependencies: 3239 | call-bound: 1.0.3 3240 | gopd: 1.2.0 3241 | has-tostringtag: 1.0.2 3242 | hasown: 2.0.2 3243 | 3244 | is-set@2.0.3: {} 3245 | 3246 | is-shared-array-buffer@1.0.4: 3247 | dependencies: 3248 | call-bound: 1.0.3 3249 | 3250 | is-string@1.1.1: 3251 | dependencies: 3252 | call-bound: 1.0.3 3253 | has-tostringtag: 1.0.2 3254 | 3255 | is-symbol@1.1.1: 3256 | dependencies: 3257 | call-bound: 1.0.3 3258 | has-symbols: 1.1.0 3259 | safe-regex-test: 1.1.0 3260 | 3261 | is-typed-array@1.1.15: 3262 | dependencies: 3263 | which-typed-array: 1.1.18 3264 | 3265 | is-weakmap@2.0.2: {} 3266 | 3267 | is-weakref@1.1.0: 3268 | dependencies: 3269 | call-bound: 1.0.3 3270 | 3271 | is-weakset@2.0.4: 3272 | dependencies: 3273 | call-bound: 1.0.3 3274 | get-intrinsic: 1.2.6 3275 | 3276 | isarray@2.0.5: {} 3277 | 3278 | isexe@2.0.0: {} 3279 | 3280 | iterator.prototype@1.1.4: 3281 | dependencies: 3282 | define-data-property: 1.1.4 3283 | es-object-atoms: 1.0.0 3284 | get-intrinsic: 1.2.6 3285 | has-symbols: 1.1.0 3286 | reflect.getprototypeof: 1.0.9 3287 | set-function-name: 2.0.2 3288 | 3289 | js-tokens@4.0.0: {} 3290 | 3291 | js-yaml@4.1.0: 3292 | dependencies: 3293 | argparse: 2.0.1 3294 | 3295 | jsesc@3.1.0: {} 3296 | 3297 | json-buffer@3.0.1: {} 3298 | 3299 | json-parse-even-better-errors@2.3.1: {} 3300 | 3301 | json-schema-traverse@0.4.1: {} 3302 | 3303 | json-stable-stringify-without-jsonify@1.0.1: {} 3304 | 3305 | jsx-ast-utils@3.3.5: 3306 | dependencies: 3307 | array-includes: 3.1.8 3308 | array.prototype.flat: 1.3.3 3309 | object.assign: 4.1.7 3310 | object.values: 1.2.1 3311 | 3312 | keyv@4.5.4: 3313 | dependencies: 3314 | json-buffer: 3.0.1 3315 | 3316 | kleur@4.1.5: {} 3317 | 3318 | levn@0.4.1: 3319 | dependencies: 3320 | prelude-ls: 1.2.1 3321 | type-check: 0.4.0 3322 | 3323 | lines-and-columns@1.2.4: {} 3324 | 3325 | local-access@1.1.0: {} 3326 | 3327 | locate-path@6.0.0: 3328 | dependencies: 3329 | p-locate: 5.0.0 3330 | 3331 | lodash-es@4.17.21: {} 3332 | 3333 | lodash.merge@4.6.2: {} 3334 | 3335 | loose-envify@1.4.0: 3336 | dependencies: 3337 | js-tokens: 4.0.0 3338 | 3339 | magic-string@0.30.17: 3340 | dependencies: 3341 | '@jridgewell/sourcemap-codec': 1.5.0 3342 | 3343 | marked@15.0.4: {} 3344 | 3345 | math-intrinsics@1.1.0: {} 3346 | 3347 | merge2@1.4.1: {} 3348 | 3349 | micromatch@4.0.8: 3350 | dependencies: 3351 | braces: 3.0.3 3352 | picomatch: 2.3.1 3353 | 3354 | minimatch@3.1.2: 3355 | dependencies: 3356 | brace-expansion: 1.1.11 3357 | 3358 | minimatch@9.0.5: 3359 | dependencies: 3360 | brace-expansion: 2.0.1 3361 | 3362 | mitt@3.0.1: {} 3363 | 3364 | mri@1.2.0: {} 3365 | 3366 | mrmime@2.0.0: {} 3367 | 3368 | ms@2.1.3: {} 3369 | 3370 | nanoid@5.0.9: {} 3371 | 3372 | natural-compare@1.4.0: {} 3373 | 3374 | node-addon-api@7.1.1: 3375 | optional: true 3376 | 3377 | object-assign@4.1.1: {} 3378 | 3379 | object-inspect@1.13.3: {} 3380 | 3381 | object-keys@1.1.1: {} 3382 | 3383 | object.assign@4.1.7: 3384 | dependencies: 3385 | call-bind: 1.0.8 3386 | call-bound: 1.0.3 3387 | define-properties: 1.2.1 3388 | es-object-atoms: 1.0.0 3389 | has-symbols: 1.1.0 3390 | object-keys: 1.1.1 3391 | 3392 | object.entries@1.1.8: 3393 | dependencies: 3394 | call-bind: 1.0.8 3395 | define-properties: 1.2.1 3396 | es-object-atoms: 1.0.0 3397 | 3398 | object.fromentries@2.0.8: 3399 | dependencies: 3400 | call-bind: 1.0.8 3401 | define-properties: 1.2.1 3402 | es-abstract: 1.23.7 3403 | es-object-atoms: 1.0.0 3404 | 3405 | object.values@1.2.1: 3406 | dependencies: 3407 | call-bind: 1.0.8 3408 | call-bound: 1.0.3 3409 | define-properties: 1.2.1 3410 | es-object-atoms: 1.0.0 3411 | 3412 | optionator@0.9.4: 3413 | dependencies: 3414 | deep-is: 0.1.4 3415 | fast-levenshtein: 2.0.6 3416 | levn: 0.4.1 3417 | prelude-ls: 1.2.1 3418 | type-check: 0.4.0 3419 | word-wrap: 1.2.5 3420 | 3421 | p-limit@3.1.0: 3422 | dependencies: 3423 | yocto-queue: 0.1.0 3424 | 3425 | p-locate@5.0.0: 3426 | dependencies: 3427 | p-limit: 3.1.0 3428 | 3429 | parent-module@1.0.1: 3430 | dependencies: 3431 | callsites: 3.1.0 3432 | 3433 | parse-json@5.2.0: 3434 | dependencies: 3435 | '@babel/code-frame': 7.26.2 3436 | error-ex: 1.3.2 3437 | json-parse-even-better-errors: 2.3.1 3438 | lines-and-columns: 1.2.4 3439 | 3440 | path-exists@4.0.0: {} 3441 | 3442 | path-key@3.1.1: {} 3443 | 3444 | path-parse@1.0.7: {} 3445 | 3446 | path-type@4.0.0: {} 3447 | 3448 | picocolors@1.1.1: {} 3449 | 3450 | picomatch@2.3.1: {} 3451 | 3452 | picomatch@4.0.2: {} 3453 | 3454 | possible-typed-array-names@1.0.0: {} 3455 | 3456 | prelude-ls@1.2.1: {} 3457 | 3458 | prettier-linter-helpers@1.0.0: 3459 | dependencies: 3460 | fast-diff: 1.3.0 3461 | 3462 | prettier@3.4.2: {} 3463 | 3464 | prop-types@15.8.1: 3465 | dependencies: 3466 | loose-envify: 1.4.0 3467 | object-assign: 4.1.1 3468 | react-is: 16.13.1 3469 | 3470 | punycode@2.3.1: {} 3471 | 3472 | queue-microtask@1.2.3: {} 3473 | 3474 | randombytes@2.1.0: 3475 | dependencies: 3476 | safe-buffer: 5.2.1 3477 | 3478 | react-dnd-html5-backend@16.0.1: 3479 | dependencies: 3480 | dnd-core: 16.0.1 3481 | 3482 | react-dnd@16.0.1(@types/node@22.10.2)(@types/react@18.3.18)(react@18.3.1): 3483 | dependencies: 3484 | '@react-dnd/invariant': 4.0.2 3485 | '@react-dnd/shallowequal': 4.0.2 3486 | dnd-core: 16.0.1 3487 | fast-deep-equal: 3.1.3 3488 | hoist-non-react-statics: 3.3.2 3489 | react: 18.3.1 3490 | optionalDependencies: 3491 | '@types/node': 22.10.2 3492 | '@types/react': 18.3.18 3493 | 3494 | react-dom@18.3.1(react@18.3.1): 3495 | dependencies: 3496 | loose-envify: 1.4.0 3497 | react: 18.3.1 3498 | scheduler: 0.23.2 3499 | 3500 | react-is@16.13.1: {} 3501 | 3502 | react-is@19.0.0: {} 3503 | 3504 | react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 3505 | dependencies: 3506 | '@babel/runtime': 7.26.0 3507 | dom-helpers: 5.2.1 3508 | loose-envify: 1.4.0 3509 | prop-types: 15.8.1 3510 | react: 18.3.1 3511 | react-dom: 18.3.1(react@18.3.1) 3512 | 3513 | react@18.3.1: 3514 | dependencies: 3515 | loose-envify: 1.4.0 3516 | 3517 | readdirp@4.0.2: {} 3518 | 3519 | redux@4.2.1: 3520 | dependencies: 3521 | '@babel/runtime': 7.26.0 3522 | 3523 | reflect.getprototypeof@1.0.9: 3524 | dependencies: 3525 | call-bind: 1.0.8 3526 | define-properties: 1.2.1 3527 | dunder-proto: 1.0.1 3528 | es-abstract: 1.23.7 3529 | es-errors: 1.3.0 3530 | get-intrinsic: 1.2.6 3531 | gopd: 1.2.0 3532 | which-builtin-type: 1.2.1 3533 | 3534 | regenerator-runtime@0.14.1: {} 3535 | 3536 | regexp.prototype.flags@1.5.3: 3537 | dependencies: 3538 | call-bind: 1.0.8 3539 | define-properties: 1.2.1 3540 | es-errors: 1.3.0 3541 | set-function-name: 2.0.2 3542 | 3543 | resolve-from@4.0.0: {} 3544 | 3545 | resolve@1.22.10: 3546 | dependencies: 3547 | is-core-module: 2.16.1 3548 | path-parse: 1.0.7 3549 | supports-preserve-symlinks-flag: 1.0.0 3550 | 3551 | resolve@2.0.0-next.5: 3552 | dependencies: 3553 | is-core-module: 2.16.1 3554 | path-parse: 1.0.7 3555 | supports-preserve-symlinks-flag: 1.0.0 3556 | 3557 | reusify@1.0.4: {} 3558 | 3559 | rollup-plugin-scss@4.0.1: 3560 | dependencies: 3561 | rollup-pluginutils: 2.8.2 3562 | 3563 | rollup-pluginutils@2.8.2: 3564 | dependencies: 3565 | estree-walker: 0.6.1 3566 | 3567 | rollup@4.29.1: 3568 | dependencies: 3569 | '@types/estree': 1.0.6 3570 | optionalDependencies: 3571 | '@rollup/rollup-android-arm-eabi': 4.29.1 3572 | '@rollup/rollup-android-arm64': 4.29.1 3573 | '@rollup/rollup-darwin-arm64': 4.29.1 3574 | '@rollup/rollup-darwin-x64': 4.29.1 3575 | '@rollup/rollup-freebsd-arm64': 4.29.1 3576 | '@rollup/rollup-freebsd-x64': 4.29.1 3577 | '@rollup/rollup-linux-arm-gnueabihf': 4.29.1 3578 | '@rollup/rollup-linux-arm-musleabihf': 4.29.1 3579 | '@rollup/rollup-linux-arm64-gnu': 4.29.1 3580 | '@rollup/rollup-linux-arm64-musl': 4.29.1 3581 | '@rollup/rollup-linux-loongarch64-gnu': 4.29.1 3582 | '@rollup/rollup-linux-powerpc64le-gnu': 4.29.1 3583 | '@rollup/rollup-linux-riscv64-gnu': 4.29.1 3584 | '@rollup/rollup-linux-s390x-gnu': 4.29.1 3585 | '@rollup/rollup-linux-x64-gnu': 4.29.1 3586 | '@rollup/rollup-linux-x64-musl': 4.29.1 3587 | '@rollup/rollup-win32-arm64-msvc': 4.29.1 3588 | '@rollup/rollup-win32-ia32-msvc': 4.29.1 3589 | '@rollup/rollup-win32-x64-msvc': 4.29.1 3590 | fsevents: 2.3.3 3591 | 3592 | run-parallel@1.2.0: 3593 | dependencies: 3594 | queue-microtask: 1.2.3 3595 | 3596 | sade@1.8.1: 3597 | dependencies: 3598 | mri: 1.2.0 3599 | 3600 | safe-array-concat@1.1.3: 3601 | dependencies: 3602 | call-bind: 1.0.8 3603 | call-bound: 1.0.3 3604 | get-intrinsic: 1.2.6 3605 | has-symbols: 1.1.0 3606 | isarray: 2.0.5 3607 | 3608 | safe-buffer@5.2.1: {} 3609 | 3610 | safe-regex-test@1.1.0: 3611 | dependencies: 3612 | call-bound: 1.0.3 3613 | es-errors: 1.3.0 3614 | is-regex: 1.2.1 3615 | 3616 | sass@1.83.0: 3617 | dependencies: 3618 | chokidar: 4.0.3 3619 | immutable: 5.0.3 3620 | source-map-js: 1.2.1 3621 | optionalDependencies: 3622 | '@parcel/watcher': 2.5.0 3623 | 3624 | scheduler@0.23.2: 3625 | dependencies: 3626 | loose-envify: 1.4.0 3627 | 3628 | semiver@1.1.0: {} 3629 | 3630 | semver@6.3.1: {} 3631 | 3632 | semver@7.6.3: {} 3633 | 3634 | serialize-javascript@6.0.2: 3635 | dependencies: 3636 | randombytes: 2.1.0 3637 | 3638 | set-function-length@1.2.2: 3639 | dependencies: 3640 | define-data-property: 1.1.4 3641 | es-errors: 1.3.0 3642 | function-bind: 1.1.2 3643 | get-intrinsic: 1.2.6 3644 | gopd: 1.2.0 3645 | has-property-descriptors: 1.0.2 3646 | 3647 | set-function-name@2.0.2: 3648 | dependencies: 3649 | define-data-property: 1.1.4 3650 | es-errors: 1.3.0 3651 | functions-have-names: 1.2.3 3652 | has-property-descriptors: 1.0.2 3653 | 3654 | shebang-command@2.0.0: 3655 | dependencies: 3656 | shebang-regex: 3.0.0 3657 | 3658 | shebang-regex@3.0.0: {} 3659 | 3660 | side-channel-list@1.0.0: 3661 | dependencies: 3662 | es-errors: 1.3.0 3663 | object-inspect: 1.13.3 3664 | 3665 | side-channel-map@1.0.1: 3666 | dependencies: 3667 | call-bound: 1.0.3 3668 | es-errors: 1.3.0 3669 | get-intrinsic: 1.2.6 3670 | object-inspect: 1.13.3 3671 | 3672 | side-channel-weakmap@1.0.2: 3673 | dependencies: 3674 | call-bound: 1.0.3 3675 | es-errors: 1.3.0 3676 | get-intrinsic: 1.2.6 3677 | object-inspect: 1.13.3 3678 | side-channel-map: 1.0.1 3679 | 3680 | side-channel@1.1.0: 3681 | dependencies: 3682 | es-errors: 1.3.0 3683 | object-inspect: 1.13.3 3684 | side-channel-list: 1.0.0 3685 | side-channel-map: 1.0.1 3686 | side-channel-weakmap: 1.0.2 3687 | 3688 | sirv-cli@3.0.0: 3689 | dependencies: 3690 | console-clear: 1.1.1 3691 | get-port: 5.1.1 3692 | kleur: 4.1.5 3693 | local-access: 1.1.0 3694 | sade: 1.8.1 3695 | semiver: 1.1.0 3696 | sirv: 3.0.0 3697 | tinydate: 1.3.0 3698 | 3699 | sirv@3.0.0: 3700 | dependencies: 3701 | '@polka/url': 1.0.0-next.28 3702 | mrmime: 2.0.0 3703 | totalist: 3.0.1 3704 | 3705 | smob@1.5.0: {} 3706 | 3707 | source-map-js@1.2.1: {} 3708 | 3709 | source-map-support@0.5.21: 3710 | dependencies: 3711 | buffer-from: 1.1.2 3712 | source-map: 0.6.1 3713 | 3714 | source-map@0.5.7: {} 3715 | 3716 | source-map@0.6.1: {} 3717 | 3718 | string.prototype.matchall@4.0.12: 3719 | dependencies: 3720 | call-bind: 1.0.8 3721 | call-bound: 1.0.3 3722 | define-properties: 1.2.1 3723 | es-abstract: 1.23.7 3724 | es-errors: 1.3.0 3725 | es-object-atoms: 1.0.0 3726 | get-intrinsic: 1.2.6 3727 | gopd: 1.2.0 3728 | has-symbols: 1.1.0 3729 | internal-slot: 1.1.0 3730 | regexp.prototype.flags: 1.5.3 3731 | set-function-name: 2.0.2 3732 | side-channel: 1.1.0 3733 | 3734 | string.prototype.repeat@1.0.0: 3735 | dependencies: 3736 | define-properties: 1.2.1 3737 | es-abstract: 1.23.7 3738 | 3739 | string.prototype.trim@1.2.10: 3740 | dependencies: 3741 | call-bind: 1.0.8 3742 | call-bound: 1.0.3 3743 | define-data-property: 1.1.4 3744 | define-properties: 1.2.1 3745 | es-abstract: 1.23.7 3746 | es-object-atoms: 1.0.0 3747 | has-property-descriptors: 1.0.2 3748 | 3749 | string.prototype.trimend@1.0.9: 3750 | dependencies: 3751 | call-bind: 1.0.8 3752 | call-bound: 1.0.3 3753 | define-properties: 1.2.1 3754 | es-object-atoms: 1.0.0 3755 | 3756 | string.prototype.trimstart@1.0.8: 3757 | dependencies: 3758 | call-bind: 1.0.8 3759 | define-properties: 1.2.1 3760 | es-object-atoms: 1.0.0 3761 | 3762 | strip-json-comments@3.1.1: {} 3763 | 3764 | stylis@4.2.0: {} 3765 | 3766 | supports-color@7.2.0: 3767 | dependencies: 3768 | has-flag: 4.0.0 3769 | 3770 | supports-preserve-symlinks-flag@1.0.0: {} 3771 | 3772 | swr@2.3.0(react@18.3.1): 3773 | dependencies: 3774 | dequal: 2.0.3 3775 | react: 18.3.1 3776 | use-sync-external-store: 1.4.0(react@18.3.1) 3777 | 3778 | synckit@0.9.2: 3779 | dependencies: 3780 | '@pkgr/core': 0.1.1 3781 | tslib: 2.8.1 3782 | 3783 | terser@5.37.0: 3784 | dependencies: 3785 | '@jridgewell/source-map': 0.3.6 3786 | acorn: 8.14.0 3787 | commander: 2.20.3 3788 | source-map-support: 0.5.21 3789 | 3790 | tinydate@1.3.0: {} 3791 | 3792 | to-regex-range@5.0.1: 3793 | dependencies: 3794 | is-number: 7.0.0 3795 | 3796 | totalist@3.0.1: {} 3797 | 3798 | ts-api-utils@1.4.3(typescript@5.7.2): 3799 | dependencies: 3800 | typescript: 5.7.2 3801 | 3802 | tslib@2.8.1: {} 3803 | 3804 | type-check@0.4.0: 3805 | dependencies: 3806 | prelude-ls: 1.2.1 3807 | 3808 | typed-array-buffer@1.0.3: 3809 | dependencies: 3810 | call-bound: 1.0.3 3811 | es-errors: 1.3.0 3812 | is-typed-array: 1.1.15 3813 | 3814 | typed-array-byte-length@1.0.3: 3815 | dependencies: 3816 | call-bind: 1.0.8 3817 | for-each: 0.3.3 3818 | gopd: 1.2.0 3819 | has-proto: 1.2.0 3820 | is-typed-array: 1.1.15 3821 | 3822 | typed-array-byte-offset@1.0.4: 3823 | dependencies: 3824 | available-typed-arrays: 1.0.7 3825 | call-bind: 1.0.8 3826 | for-each: 0.3.3 3827 | gopd: 1.2.0 3828 | has-proto: 1.2.0 3829 | is-typed-array: 1.1.15 3830 | reflect.getprototypeof: 1.0.9 3831 | 3832 | typed-array-length@1.0.7: 3833 | dependencies: 3834 | call-bind: 1.0.8 3835 | for-each: 0.3.3 3836 | gopd: 1.2.0 3837 | is-typed-array: 1.1.15 3838 | possible-typed-array-names: 1.0.0 3839 | reflect.getprototypeof: 1.0.9 3840 | 3841 | typescript-eslint@8.18.2(eslint@9.17.0)(typescript@5.7.2): 3842 | dependencies: 3843 | '@typescript-eslint/eslint-plugin': 8.18.2(@typescript-eslint/parser@8.18.2(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2) 3844 | '@typescript-eslint/parser': 8.18.2(eslint@9.17.0)(typescript@5.7.2) 3845 | '@typescript-eslint/utils': 8.18.2(eslint@9.17.0)(typescript@5.7.2) 3846 | eslint: 9.17.0 3847 | typescript: 5.7.2 3848 | transitivePeerDependencies: 3849 | - supports-color 3850 | 3851 | typescript@5.7.2: {} 3852 | 3853 | unbox-primitive@1.1.0: 3854 | dependencies: 3855 | call-bound: 1.0.3 3856 | has-bigints: 1.1.0 3857 | has-symbols: 1.1.0 3858 | which-boxed-primitive: 1.1.1 3859 | 3860 | undici-types@6.20.0: {} 3861 | 3862 | uri-js@4.4.1: 3863 | dependencies: 3864 | punycode: 2.3.1 3865 | 3866 | use-debounce@10.0.4(react@18.3.1): 3867 | dependencies: 3868 | react: 18.3.1 3869 | 3870 | use-sync-external-store@1.4.0(react@18.3.1): 3871 | dependencies: 3872 | react: 18.3.1 3873 | 3874 | which-boxed-primitive@1.1.1: 3875 | dependencies: 3876 | is-bigint: 1.1.0 3877 | is-boolean-object: 1.2.1 3878 | is-number-object: 1.1.1 3879 | is-string: 1.1.1 3880 | is-symbol: 1.1.1 3881 | 3882 | which-builtin-type@1.2.1: 3883 | dependencies: 3884 | call-bound: 1.0.3 3885 | function.prototype.name: 1.1.8 3886 | has-tostringtag: 1.0.2 3887 | is-async-function: 2.0.0 3888 | is-date-object: 1.1.0 3889 | is-finalizationregistry: 1.1.1 3890 | is-generator-function: 1.0.10 3891 | is-regex: 1.2.1 3892 | is-weakref: 1.1.0 3893 | isarray: 2.0.5 3894 | which-boxed-primitive: 1.1.1 3895 | which-collection: 1.0.2 3896 | which-typed-array: 1.1.18 3897 | 3898 | which-collection@1.0.2: 3899 | dependencies: 3900 | is-map: 2.0.3 3901 | is-set: 2.0.3 3902 | is-weakmap: 2.0.2 3903 | is-weakset: 2.0.4 3904 | 3905 | which-typed-array@1.1.18: 3906 | dependencies: 3907 | available-typed-arrays: 1.0.7 3908 | call-bind: 1.0.8 3909 | call-bound: 1.0.3 3910 | for-each: 0.3.3 3911 | gopd: 1.2.0 3912 | has-tostringtag: 1.0.2 3913 | 3914 | which@2.0.2: 3915 | dependencies: 3916 | isexe: 2.0.0 3917 | 3918 | word-wrap@1.2.5: {} 3919 | 3920 | yaml@1.10.2: {} 3921 | 3922 | yocto-queue@0.1.0: {} 3923 | -------------------------------------------------------------------------------- /public-2.0.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meowtec/chrome-menufish/6f44742fd393bd3b5ce7c437e3f9e71c42e9230d/public-2.0.0.zip -------------------------------------------------------------------------------- /public-2.1.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meowtec/chrome-menufish/6f44742fd393bd3b5ce7c437e3f9e71c42e9230d/public-2.1.0.zip -------------------------------------------------------------------------------- /public/_locales/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "settings": { 3 | "message": "Settings" 4 | }, 5 | "help": { 6 | "message": "Help" 7 | }, 8 | "about": { 9 | "message": "About" 10 | }, 11 | "version": { 12 | "message": "Version" 13 | }, 14 | "actions_on_page": { 15 | "message": "Actions on current page" 16 | }, 17 | "actions_on_page_desc": { 18 | "message": "For sharing on web pages" 19 | }, 20 | "actions_on_selection": { 21 | "message": "Actions on selection" 22 | }, 23 | "actions_on_selection_desc": { 24 | "message": "For searching selection text" 25 | }, 26 | "actions_on_image": { 27 | "message": "Actions on image" 28 | }, 29 | "actions_on_image_desc": { 30 | "message": "For searching image" 31 | }, 32 | "restore_default_settings": { 33 | "message": "Restore default settings" 34 | }, 35 | "add": { 36 | "message": "Add" 37 | }, 38 | "code_mode": { 39 | "message": "Code mode" 40 | }, 41 | "ok": { 42 | "message": "Ok" 43 | }, 44 | "cancel": { 45 | "message": "Cancel" 46 | }, 47 | "apply": { 48 | "message": "Apply" 49 | }, 50 | "title": { 51 | "message": "Title" 52 | }, 53 | "whitespace_encoding": { 54 | "message": "Whitespace encoding" 55 | }, 56 | "confirm_delete_title": { 57 | "message": "Are you sure to delete?" 58 | }, 59 | "confirm_delete_content": { 60 | "message": "“$name$” will be deleted", 61 | "placeholders": { 62 | "name": { 63 | "content": "$1" 64 | } 65 | } 66 | }, 67 | "confirm_reset_title": { 68 | "message": "Are you sure to reset?" 69 | }, 70 | "confirm_reset_content": { 71 | "message": "Cannot be restored after resetting" 72 | }, 73 | "syntax_error": { 74 | "message": "Syntax error" 75 | }, 76 | "default": { 77 | "message": "Default" 78 | }, 79 | "empty_rule": { 80 | "message": "Empty rule" 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /public/_locales/zh/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "settings": { 3 | "message": "设置" 4 | }, 5 | "help": { 6 | "message": "帮助" 7 | }, 8 | "about": { 9 | "message": "关于" 10 | }, 11 | "version": { 12 | "message": "版本" 13 | }, 14 | "actions_on_page": { 15 | "message": "对页面进行操作" 16 | }, 17 | "actions_on_page_desc": { 18 | "message": "用于页面分享等场景" 19 | }, 20 | "actions_on_selection": { 21 | "message": "对选中内容进行操作" 22 | }, 23 | "actions_on_selection_desc": { 24 | "message": "用于搜索文字等场景" 25 | }, 26 | "actions_on_image": { 27 | "message": "对图片进行操作" 28 | }, 29 | "actions_on_image_desc": { 30 | "message": "使用于按图搜图等场景" 31 | }, 32 | "restore_default_settings": { 33 | "message": "恢复默认设置" 34 | }, 35 | "add": { 36 | "message": "添加" 37 | }, 38 | "code_mode": { 39 | "message": "代码模式" 40 | }, 41 | "ok": { 42 | "message": "确认" 43 | }, 44 | "cancel": { 45 | "message": "取消" 46 | }, 47 | "apply": { 48 | "message": "立即应用" 49 | }, 50 | "title": { 51 | "message": "标题" 52 | }, 53 | "whitespace_encoding": { 54 | "message": "空格编码" 55 | }, 56 | "confirm_delete_title": { 57 | "message": "确认删除吗?" 58 | }, 59 | "confirm_delete_content": { 60 | "message": "“$name$”将被删除,删除后无法撤销", 61 | "placeholders": { 62 | "name": { 63 | "content": "$1" 64 | } 65 | } 66 | }, 67 | "confirm_reset_title": { 68 | "message": "确认重置到默认初始配置吗?" 69 | }, 70 | "confirm_reset_content": { 71 | "message": "重置后无法恢复" 72 | }, 73 | "syntax_error": { 74 | "message": "语法错误" 75 | }, 76 | "default": { 77 | "message": "默认" 78 | }, 79 | "empty_rule": { 80 | "message": "空规则" 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /public/assets/icon-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meowtec/chrome-menufish/6f44742fd393bd3b5ce7c437e3f9e71c42e9230d/public/assets/icon-128.png -------------------------------------------------------------------------------- /public/assets/icon-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meowtec/chrome-menufish/6f44742fd393bd3b5ce7c437e3f9e71c42e9230d/public/assets/icon-16.png -------------------------------------------------------------------------------- /public/assets/icon-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meowtec/chrome-menufish/6f44742fd393bd3b5ce7c437e3f9e71c42e9230d/public/assets/icon-32.png -------------------------------------------------------------------------------- /public/assets/icon-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meowtec/chrome-menufish/6f44742fd393bd3b5ce7c437e3f9e71c42e9230d/public/assets/icon-48.png -------------------------------------------------------------------------------- /public/options.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Menu fish 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-undef */ 2 | import { fileURLToPath } from 'node:url'; 3 | import fs from 'node:fs'; 4 | import { spawn } from 'node:child_process'; 5 | import { zip } from 'cross-zip'; 6 | import commonjs from '@rollup/plugin-commonjs'; 7 | import resolve from '@rollup/plugin-node-resolve'; 8 | import terser from '@rollup/plugin-terser'; 9 | import typescript from '@rollup/plugin-typescript'; 10 | import scss from 'rollup-plugin-scss'; 11 | import replace from '@rollup/plugin-replace'; 12 | import { marked } from 'marked'; 13 | import pkg from './package.json' assert { type: 'json' }; 14 | import manifest from './manifest.js'; 15 | 16 | const production = !process.env.ROLLUP_WATCH; 17 | 18 | function serve() { 19 | let server; 20 | 21 | function toExit() { 22 | if (server) server.kill(0); 23 | } 24 | 25 | return { 26 | writeBundle() { 27 | if (server) return; 28 | server = spawn('npm', ['run', 'serve', '--', '--dev'], { 29 | stdio: ['ignore', 'inherit', 'inherit'], 30 | shell: true, 31 | }); 32 | 33 | process.on('SIGTERM', toExit); 34 | process.on('exit', toExit); 35 | }, 36 | }; 37 | } 38 | 39 | /** 40 | * @type {import('rollup').RollupOptions} 41 | */ 42 | const options = [ 43 | { 44 | input: 'src/entry/background.ts', 45 | output: 'background.js', 46 | }, 47 | { 48 | input: 'src/entry/options.ts', 49 | output: 'options.js', 50 | }, 51 | ].map(({ input, output }) => ({ 52 | input, 53 | output: { 54 | dir: './public/dist', 55 | name: output, 56 | format: 'esm', 57 | }, 58 | 59 | plugins: [ 60 | scss({ fileName: 'bundle.css', outputStyle: 'compressed' }), 61 | 62 | { 63 | name: 'md', 64 | 65 | transform(md, id) { 66 | if (!/\.md$/.test(id)) return null; 67 | 68 | return `export default ${JSON.stringify(marked(md))};`; 69 | }, 70 | }, 71 | 72 | { 73 | name: 'zip', 74 | writeBundle() { 75 | fs.writeFileSync( 76 | fileURLToPath(new URL('./public/manifest.json', import.meta.url)), 77 | JSON.stringify(manifest, null, ' '), 78 | ); 79 | 80 | if (production) { 81 | try { 82 | fs.rmSync(`./public-${pkg.version}.zip`); 83 | } catch { 84 | /* */ 85 | } 86 | 87 | zip('public', `public-${pkg.version}.zip`); 88 | } 89 | }, 90 | }, 91 | 92 | replace({ 93 | preventAssignment: true, 94 | values: { 95 | 'window.EXT_VERSION': JSON.stringify(pkg.version), 96 | 'process.env.NODE_ENV': JSON.stringify( 97 | production ? 'production' : 'development', 98 | ), 99 | }, 100 | }), 101 | 102 | // In dev mode, call `npm run start` once 103 | // the bundle has been generated 104 | !production && serve(), 105 | 106 | // If you have external dependencies installed from 107 | // npm, you'll most likely need these plugins. In 108 | // some cases you'll need additional configuration - 109 | // consult the documentation for details: 110 | // https://github.com/rollup/plugins/tree/master/packages/commonjs 111 | resolve({ 112 | browser: true, 113 | }), 114 | commonjs(), 115 | typescript({ 116 | sourceMap: !production, 117 | inlineSources: !production, 118 | outDir: 'public/dist/ts', 119 | }), 120 | 121 | // If we're building for production (npm run build 122 | // instead of npm run dev), minify 123 | production && terser(), 124 | ], 125 | watch: { 126 | clearScreen: false, 127 | }, 128 | })); 129 | 130 | export default options; 131 | -------------------------------------------------------------------------------- /src/background/index.ts: -------------------------------------------------------------------------------- 1 | import { groupCategories, metaProperties } from '../config/basic'; 2 | import { readOptions } from '../services/index'; 3 | import { 4 | MenuRule, 5 | MenuCategory, 6 | DEFAULT_WHITESPACE_ENCODE, 7 | } from '../types/index'; 8 | import replaceTemplate from '../utils/template'; 9 | 10 | const { log } = console; 11 | 12 | interface Menu { 13 | id: string; 14 | parentId?: string; 15 | title: string; 16 | contexts: chrome.contextMenus.ContextType[]; 17 | category: MenuCategory; 18 | rule?: MenuRule; 19 | } 20 | 21 | function createApp() { 22 | let cachedMenus: Menu[] | null = null; 23 | 24 | const createMenusConfig = async (): Promise => { 25 | if (cachedMenus) { 26 | return cachedMenus; 27 | } 28 | 29 | const options = await readOptions(); 30 | 31 | const menus: Menu[] = []; 32 | 33 | groupCategories.forEach((category) => { 34 | const properties = metaProperties[category]; 35 | const group = options.rules[category]; 36 | 37 | if (group.enabled) { 38 | menus.push({ 39 | id: category, 40 | title: group.title || properties.title, 41 | contexts: properties.contexts, 42 | category, 43 | }); 44 | 45 | group.rules.forEach((rule) => { 46 | if (!rule.enabled || !rule.name || !rule.url) { 47 | return; 48 | } 49 | 50 | menus.push({ 51 | id: rule.key, 52 | parentId: category, 53 | title: rule.name, 54 | contexts: properties.contexts, 55 | category, 56 | rule, 57 | }); 58 | }); 59 | } 60 | }); 61 | 62 | cachedMenus = menus; 63 | 64 | return menus; 65 | }; 66 | 67 | const handleMenuClick = async ( 68 | info: chrome.contextMenus.OnClickData, 69 | tab?: chrome.tabs.Tab, 70 | ) => { 71 | const menus = await createMenusConfig(); 72 | log('menu click', info, tab, menus); 73 | const menu = menus.find((item) => item.id === info.menuItemId); 74 | if (!menu || !tab?.url || !menu.rule) return; 75 | 76 | const { 77 | category, 78 | rule: { url, whitespaceEncode }, 79 | } = menu; 80 | 81 | let templateData: { 82 | url?: string; 83 | title?: string; 84 | word?: string; 85 | host?: string; 86 | imageUrl?: string; 87 | } = {}; 88 | 89 | let s: string | undefined; 90 | 91 | switch (category) { 92 | case 'page': 93 | templateData = { 94 | url: tab.url, 95 | title: tab.title ?? '', 96 | }; 97 | s = tab.url; 98 | break; 99 | case 'selection': 100 | templateData = { 101 | word: info.selectionText ?? '', 102 | host: new URL(tab.url).host, 103 | }; 104 | s = info.selectionText; 105 | break; 106 | case 'image': 107 | templateData = { 108 | imageUrl: info.srcUrl ?? '', 109 | }; 110 | s = info.srcUrl; 111 | break; 112 | default: 113 | } 114 | 115 | const openUrl = replaceTemplate(url, templateData, s, { 116 | whitespaceEncode: whitespaceEncode ?? DEFAULT_WHITESPACE_ENCODE, 117 | }); 118 | 119 | log('open url', openUrl); 120 | void chrome.tabs.create({ 121 | url: openUrl, 122 | index: tab.index + 1, 123 | }); 124 | }; 125 | 126 | const loadMenus = async () => { 127 | const menus = await createMenusConfig(); 128 | 129 | chrome.contextMenus.removeAll(); 130 | 131 | log('menus', menus); 132 | 133 | menus.forEach((menu) => { 134 | const { id, parentId, title, contexts } = menu; 135 | chrome.contextMenus.create({ 136 | id, 137 | title, 138 | contexts, 139 | parentId, 140 | }); 141 | }); 142 | }; 143 | 144 | void loadMenus(); 145 | 146 | chrome.runtime.onMessage.addListener((message: { action: string } | null) => { 147 | if (message && message.action === 'reload') { 148 | cachedMenus = null; 149 | void loadMenus(); 150 | } 151 | }); 152 | 153 | chrome.contextMenus.onClicked.addListener(handleMenuClick); 154 | } 155 | 156 | createApp(); 157 | -------------------------------------------------------------------------------- /src/config/basic.ts: -------------------------------------------------------------------------------- 1 | import { MenuCategory } from '../types/index'; 2 | 3 | export const groupCategories: MenuCategory[] = ['page', 'selection', 'image']; 4 | 5 | export interface MenuProperties { 6 | contexts: chrome.contextMenus.ContextType[]; 7 | title: string; 8 | description: string; 9 | } 10 | 11 | export const metaProperties: Record = { 12 | page: { 13 | contexts: ['page'], 14 | title: chrome.i18n.getMessage('actions_on_page'), 15 | description: chrome.i18n.getMessage('actions_on_page_desc'), 16 | }, 17 | 18 | selection: { 19 | contexts: ['selection'], 20 | title: chrome.i18n.getMessage('actions_on_selection'), 21 | description: chrome.i18n.getMessage('actions_on_selection_desc'), 22 | }, 23 | 24 | image: { 25 | contexts: ['image'], 26 | title: chrome.i18n.getMessage('actions_on_image'), 27 | description: chrome.i18n.getMessage('actions_on_image_desc'), 28 | }, 29 | }; 30 | -------------------------------------------------------------------------------- /src/config/default-options.ts: -------------------------------------------------------------------------------- 1 | import { AppOptions, MenuCategory, MenuRule } from '../types/index'; 2 | 3 | export const presetRulesMap: Record[]> = 4 | { 5 | page: [], 6 | image: [], 7 | selection: [ 8 | { 9 | key: 'Google', 10 | name: 'Google', 11 | url: 'https://www.google.com.hk/search?q={%word%}', 12 | }, 13 | { 14 | key: '百度', 15 | name: '百度', 16 | url: 'https://www.baidu.com/s?wd={%word%}&ie=utf-8', 17 | }, 18 | { 19 | key: 'Bing', 20 | name: 'Bing', 21 | url: 'https://www.bing.com/search?q={%word%}', 22 | }, 23 | { 24 | key: 'DuckDuckGo', 25 | name: 'DuckDuckGo', 26 | url: 'https://duckduckgo.com/?q={%word%}', 27 | }, 28 | { 29 | key: '百度翻译', 30 | name: '百度翻译', 31 | url: 'https://fanyi.baidu.com/#auto/auto/{%word%}', 32 | whitespaceEncode: '%20', 33 | }, 34 | { 35 | key: '淘宝', 36 | name: '淘宝', 37 | url: 'https://s.taobao.com/search?q={%word%}&ie=utf-8', 38 | }, 39 | { 40 | key: '百度地图', 41 | name: '百度地图', 42 | url: 'https://map.baidu.com/m?word={%word%}&ie=utf-8', 43 | }, 44 | { 45 | key: '网易云音乐', 46 | name: '网易云音乐', 47 | url: 'https://music.163.com/#/search/m/?s={%word%}&type=1', 48 | whitespaceEncode: '%20', 49 | }, 50 | { 51 | key: '知乎', 52 | name: '知乎', 53 | url: 'https://www.zhihu.com/search?q={%word%}&type=question', 54 | }, 55 | { 56 | key: '微博', 57 | name: '微博', 58 | url: 'https://s.weibo.com/weibo/{%word%}', 59 | }, 60 | { 61 | key: '必应翻译', 62 | name: '必应翻译', 63 | url: 'https://cn.bing.com/translator/?text={%word%}', 64 | }, 65 | { 66 | key: 'Google translate (中文)', 67 | name: 'Google translate (中文)', 68 | url: 'https://translate.google.com/?sl=auto&tl=zh-CN&text={%word%}&op=translate', 69 | }, 70 | { 71 | key: 'Google translate (en)', 72 | name: 'Google translate (en)', 73 | url: 'https://translate.google.com/?sl=auto&tl=en-US&text={%word%}&op=translate', 74 | }, 75 | { 76 | key: 'wikipedia', 77 | name: 'Wikipedia', 78 | url: 'https://wikipedia.org/wiki/{%word%}', 79 | whitespaceEncode: '%20', 80 | }, 81 | { 82 | key: 'quora', 83 | name: 'Quora', 84 | url: 'https://www.quora.com/search?q={%word%}', 85 | }, 86 | { 87 | key: 'reddit', 88 | name: 'Reddit', 89 | url: 'https://www.reddit.com/search/?q={%word%}', 90 | }, 91 | ], 92 | }; 93 | 94 | const defaultOptions: AppOptions = { 95 | rules: { 96 | page: { 97 | enabled: true, 98 | rules: [ 99 | { 100 | enabled: false, 101 | key: '新浪微博', 102 | name: '新浪微博', 103 | url: 'https://service.weibo.com/share/share.php?url={%url%}&title={%title%}', 104 | }, 105 | { 106 | enabled: false, 107 | key: 'qq空间', 108 | name: 'qq空间', 109 | url: 'https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url={%url%}&title={%title%}', 110 | }, 111 | { 112 | enabled: false, 113 | key: '豆瓣', 114 | name: '豆瓣', 115 | url: 'https://www.douban.com/recommend/?url={%url%}&name={%title%}', 116 | }, 117 | ], 118 | }, 119 | 120 | selection: { 121 | enabled: true, 122 | rules: presetRulesMap.selection.slice(0, 5).map((item) => ({ 123 | ...item, 124 | enabled: true, 125 | })), 126 | }, 127 | 128 | image: { 129 | enabled: true, 130 | rules: [ 131 | // outdated 132 | // { 133 | // enabled: true, 134 | // key: 'Google 按图搜索', 135 | // name: 'Google 按图搜索', 136 | // url: 'https://www.google.com.hk/searchbyimage?image_url={%imageUrl%}', 137 | // }, 138 | // { 139 | // enabled: true, 140 | // key: 'Yandex 按图搜索', 141 | // name: 'Yandex 按图搜索', 142 | // url: 'https://yandex.ru/images/search?text={%imageUrl%}&family=yes', 143 | // }, 144 | ], 145 | }, 146 | }, 147 | }; 148 | 149 | export default defaultOptions; 150 | -------------------------------------------------------------------------------- /src/entry/background.ts: -------------------------------------------------------------------------------- 1 | import '../background'; 2 | -------------------------------------------------------------------------------- /src/entry/options.ts: -------------------------------------------------------------------------------- 1 | import '../options'; 2 | -------------------------------------------------------------------------------- /src/options/components/About/index.tsx: -------------------------------------------------------------------------------- 1 | export default function About({ version }: { version: string }) { 2 | return ( 3 |
4 |

{chrome.i18n.getMessage('about')}

5 |

Zhihu

6 | 11 | www.zhihu.com/people/meowtec 12 | 13 |

github

14 | 19 | github.com/meowtec/chrome-menufish 20 | 21 |

{chrome.i18n.getMessage('version')}

22 |

{version}

23 |
24 | ); 25 | } 26 | -------------------------------------------------------------------------------- /src/options/components/App/index.scss: -------------------------------------------------------------------------------- 1 | .app { 2 | display: flex; 3 | } 4 | 5 | .navigation { 6 | width: 180px; 7 | flex-shrink: 0; 8 | } 9 | 10 | .nav { 11 | position: sticky; 12 | top: 0; 13 | } 14 | 15 | .nav-header { 16 | font-size: 1.5em; 17 | line-height: 2em; 18 | margin: 0; 19 | padding: 0.5em 0; 20 | font-weight: normal; 21 | padding-left: 25px; 22 | } 23 | 24 | .nav-list { 25 | list-style: none; 26 | padding: 0; 27 | margin: 0; 28 | font-size: 12px; 29 | 30 | li { 31 | height: 35px; 32 | line-height: 35px; 33 | padding-left: 25px; 34 | color: #666; 35 | } 36 | 37 | li.selected { 38 | color: #000; 39 | border-left: 5px solid #333; 40 | padding-left: 20px; 41 | } 42 | 43 | button { 44 | border: 0; 45 | background: none; 46 | padding: 0; 47 | cursor: pointer; 48 | } 49 | } 50 | 51 | .main-container { 52 | width: 0; 53 | flex: 1; 54 | max-width: 1200px; 55 | } 56 | -------------------------------------------------------------------------------- /src/options/components/App/index.tsx: -------------------------------------------------------------------------------- 1 | import { useState, FC } from 'react'; 2 | import { CssBaseline } from '@mui/material'; 3 | import About from '../About'; 4 | import Settings from '../Settings'; 5 | import AppThemeProvider from '../AppThemeProvider'; 6 | import RootHost from '../RootHost'; 7 | import './index.scss'; 8 | 9 | const VERSION = window.EXT_VERSION; 10 | 11 | const PAGES: Array<{ 12 | id: string; 13 | title: string; 14 | component: FC<{ 15 | version: string; 16 | }>; 17 | }> = [ 18 | { 19 | id: 'settings', 20 | title: chrome.i18n.getMessage('settings'), 21 | component: Settings, 22 | }, 23 | { 24 | id: 'about', 25 | title: chrome.i18n.getMessage('about'), 26 | component: About, 27 | }, 28 | ]; 29 | 30 | export default function App() { 31 | const [currentPageId, setCurrentPageId] = useState('settings'); 32 | const Component = PAGES.find((item) => item.id === currentPageId)?.component; 33 | 34 | return ( 35 | 36 |
37 | 38 |
39 |
40 |

Menu fish

41 | 50 |
51 |
52 | 53 |
54 | {Component ? : null} 55 |
56 |
57 | 58 |
59 | ); 60 | } 61 | -------------------------------------------------------------------------------- /src/options/components/AppThemeProvider/index.tsx: -------------------------------------------------------------------------------- 1 | import { PropsWithChildren } from 'react'; 2 | import { createTheme, ThemeProvider } from '@mui/material'; 3 | 4 | const theme = createTheme({ 5 | palette: { 6 | primary: { 7 | main: '#ec407a', 8 | }, 9 | }, 10 | }); 11 | 12 | export default function AppThemeProvider({ 13 | children, 14 | }: PropsWithChildren) { 15 | return {children}; 16 | } 17 | -------------------------------------------------------------------------------- /src/options/components/CodeEdit/index.scss: -------------------------------------------------------------------------------- 1 | .code-edit-input textarea { 2 | font-size: 14px; 3 | } 4 | -------------------------------------------------------------------------------- /src/options/components/CodeEdit/index.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | Button, 3 | Dialog, 4 | DialogActions, 5 | DialogContent, 6 | DialogTitle, 7 | TextField, 8 | } from '@mui/material'; 9 | import { useMemo, useState } from 'react'; 10 | import { AppOptionsRules } from '../../../types'; 11 | import { 12 | LegacyRules, 13 | transformLegacyDataToRules, 14 | } from '../../../utils/migrate'; 15 | import { normalizeRules } from '../../../utils/normalize'; 16 | import './index.scss'; 17 | 18 | interface CodeEditProps { 19 | rules: AppOptionsRules; 20 | onSubmit(rules: AppOptionsRules): void; 21 | onClose(): void; 22 | } 23 | 24 | function parseCodeAsRules(code: string): AppOptionsRules | null { 25 | const data: unknown = JSON.parse(code); 26 | 27 | if (!data) { 28 | return null; 29 | } 30 | 31 | if (data && Array.isArray((data as LegacyRules).share)) { 32 | return transformLegacyDataToRules(data, { 33 | search: true, 34 | share: true, 35 | imageSearch: true, 36 | }); 37 | } 38 | 39 | return normalizeRules(data); 40 | } 41 | 42 | export default function CodeEdit({ rules, onSubmit, onClose }: CodeEditProps) { 43 | const [value, setValue] = useState(() => JSON.stringify(rules, null, 2)); 44 | 45 | const [parsedRules, parseError] = useMemo(() => { 46 | try { 47 | return [parseCodeAsRules(value)]; 48 | } catch (err) { 49 | return [null, err]; 50 | } 51 | }, [value]); 52 | 53 | const handleSubmit = () => { 54 | if (parsedRules) { 55 | onSubmit(parsedRules); 56 | onClose(); 57 | } 58 | }; 59 | 60 | return ( 61 | 62 | Code 63 | 64 | setValue(e.target.value)} 77 | helperText={ 78 | parseError 79 | ? `${chrome.i18n.getMessage('syntax_error')}:${String(parseError)}` 80 | : null 81 | } 82 | /> 83 | 84 | 85 | 86 | 87 | 88 | 89 | ); 90 | } 91 | -------------------------------------------------------------------------------- /src/options/components/RootHost/index.tsx: -------------------------------------------------------------------------------- 1 | import { Reducer, useEffect, useReducer } from 'react'; 2 | import { generateId } from '../../../utils/random'; 3 | import { RenderToRoot, rootHostEmitter } from '../../../utils/render-to-root'; 4 | 5 | interface RenderToRootItem { 6 | key: string; 7 | render: RenderToRoot; 8 | } 9 | 10 | type RenderToRootAction = 11 | | { 12 | type: 'add'; 13 | payload: RenderToRootItem; 14 | } 15 | | { 16 | type: 'remove'; 17 | payload: RenderToRootItem; 18 | }; 19 | 20 | const renderToRootsReducer: Reducer = ( 21 | state, 22 | action, 23 | ) => { 24 | switch (action.type) { 25 | case 'add': 26 | return [...state, action.payload]; 27 | case 'remove': 28 | return state.filter((item) => item.key !== action.payload.key); 29 | default: 30 | return state; 31 | } 32 | }; 33 | 34 | interface RenderRootItemProps { 35 | data: RenderToRootItem; 36 | onRemove(action: RenderToRootItem): void; 37 | } 38 | 39 | function RenderRootItem({ data, onRemove }: RenderRootItemProps) { 40 | return <>{data.render(() => onRemove(data))}; 41 | } 42 | 43 | export default function RootHost() { 44 | const [renderToRoots, dispatch] = useReducer(renderToRootsReducer, []); 45 | 46 | const handleRemove = (data: RenderToRootItem) => { 47 | dispatch({ 48 | type: 'remove', 49 | payload: data, 50 | }); 51 | }; 52 | 53 | const handleAdd = (data: RenderToRootItem) => { 54 | dispatch({ 55 | type: 'add', 56 | payload: data, 57 | }); 58 | }; 59 | 60 | useEffect(() => { 61 | const listener = (render: RenderToRoot) => { 62 | handleAdd({ 63 | key: generateId(), 64 | render, 65 | }); 66 | }; 67 | 68 | rootHostEmitter.on('render', listener); 69 | 70 | return () => rootHostEmitter.off('render', listener); 71 | }, []); 72 | 73 | return ( 74 |
75 | {renderToRoots.map((item) => ( 76 | 77 | ))} 78 |
79 | ); 80 | } 81 | -------------------------------------------------------------------------------- /src/options/components/RuleGroup/AddRuleButton.tsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | import { 3 | Button, 4 | Divider, 5 | ListItemIcon, 6 | ListItemText, 7 | Menu, 8 | MenuItem, 9 | } from '@mui/material'; 10 | import AddCircleIcon from '@mui/icons-material/AddCircleOutline'; 11 | import { MenuCategory, MenuRule } from '../../../types'; 12 | import { presetRulesMap } from '../../../config/default-options'; 13 | import { generateId } from '../../../utils/random'; 14 | 15 | interface AddRuleButtonProps { 16 | category: MenuCategory; 17 | onAdd: (rule: MenuRule) => void; 18 | } 19 | 20 | export default function AddRuleButton({ category, onAdd }: AddRuleButtonProps) { 21 | const presetRules = presetRulesMap[category]; 22 | const [anchorEl, setAnchorEl] = useState(null); 23 | const open = Boolean(anchorEl); 24 | const handleClose = () => { 25 | setAnchorEl(null); 26 | }; 27 | 28 | const handleAddNew = () => { 29 | onAdd({ 30 | name: '', 31 | url: '', 32 | key: generateId(), 33 | enabled: true, 34 | }); 35 | handleClose(); 36 | }; 37 | 38 | const handleAddPreset = (rule: Omit) => { 39 | onAdd({ 40 | ...rule, 41 | key: generateId(), 42 | enabled: true, 43 | }); 44 | handleClose(); 45 | }; 46 | 47 | const handleClick = (event: React.MouseEvent) => { 48 | if (presetRules.length) { 49 | setAnchorEl(event.currentTarget); 50 | } else { 51 | handleAddNew(); 52 | } 53 | }; 54 | 55 | const buttonId = `add-button-${category}`; 56 | const menuId = `add-menu-${category}`; 57 | 58 | return ( 59 | <> 60 | 63 | 72 | 73 | 74 | 75 | 76 | {chrome.i18n.getMessage('empty_rule')} 77 | 78 | 79 | {presetRules.map((rule) => ( 80 | handleAddPreset(rule)} key={rule.key}> 81 | {rule.name} 82 | 83 | ))} 84 | 85 | 86 | ); 87 | } 88 | -------------------------------------------------------------------------------- /src/options/components/RuleGroup/index.scss: -------------------------------------------------------------------------------- 1 | .category-title { 2 | display: flex; 3 | align-items: center; 4 | 5 | &-info { 6 | color: #999; 7 | } 8 | 9 | &-input { 10 | border: none; 11 | font-size: 16px; 12 | font-weight: 500; 13 | padding: 6px; 14 | border-radius: 8px; 15 | margin-right: 8px; 16 | 17 | &:hover { 18 | background: #fafafa; 19 | } 20 | } 21 | 22 | & h4 { 23 | font-size: 18px; 24 | margin: 0; 25 | margin-right: 8px; 26 | } 27 | } 28 | 29 | .rule-list-add { 30 | margin: 16px 30px; 31 | } 32 | -------------------------------------------------------------------------------- /src/options/components/RuleGroup/index.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | DndContext, 3 | closestCenter, 4 | useSensors, 5 | useSensor, 6 | PointerSensor, 7 | KeyboardSensor, 8 | DragEndEvent, 9 | } from '@dnd-kit/core'; 10 | import { 11 | SortableContext, 12 | sortableKeyboardCoordinates, 13 | verticalListSortingStrategy, 14 | arrayMove, 15 | } from '@dnd-kit/sortable'; 16 | import HelpIcon from '@mui/icons-material/HelpOutline'; 17 | import { Switch, Tooltip } from '@mui/material'; 18 | import { ChangeEvent, memo } from 'react'; 19 | import { metaProperties } from '../../../config/basic'; 20 | import { MenuCategory, MenuRule, RulesGroup } from '../../../types'; 21 | import RuleItem from '../RuleItem'; 22 | import AddRuleButton from './AddRuleButton'; 23 | import './index.scss'; 24 | 25 | function RuleGroup({ 26 | category, 27 | options, 28 | onOptionsChange, 29 | }: { 30 | category: MenuCategory; 31 | options: RulesGroup; 32 | onOptionsChange(category: MenuCategory, options: RulesGroup): void; 33 | }) { 34 | const updateRules = (rules: MenuRule[]) => { 35 | onOptionsChange(category, { 36 | ...options, 37 | rules, 38 | }); 39 | }; 40 | 41 | const handleSwitchChange = ( 42 | e: ChangeEvent, 43 | checked: boolean, 44 | ) => { 45 | onOptionsChange(category, { 46 | ...options, 47 | enabled: checked, 48 | }); 49 | }; 50 | 51 | const handleGroupTitleChange = (e: ChangeEvent) => { 52 | onOptionsChange(category, { 53 | ...options, 54 | title: e.target.value, 55 | }); 56 | }; 57 | 58 | const handleRuleChange = (rule: MenuRule) => { 59 | updateRules( 60 | options.rules.map((item) => (item.key === rule.key ? rule : item)), 61 | ); 62 | }; 63 | 64 | const handleRuleDelete = (rule: MenuRule) => { 65 | updateRules(options.rules.filter((item) => item.key !== rule.key)); 66 | }; 67 | 68 | const sensors = useSensors( 69 | useSensor(PointerSensor), 70 | useSensor(KeyboardSensor, { 71 | coordinateGetter: sortableKeyboardCoordinates, 72 | }), 73 | ); 74 | 75 | const handleDragEnd = ({ active, over }: DragEndEvent) => { 76 | if (over && active.id !== over.id) { 77 | const items = options.rules; 78 | const findIndexByKey = (key: string | number) => 79 | items.findIndex((item) => item.key === key); 80 | const oldIndex = findIndexByKey(active.id); 81 | const newIndex = findIndexByKey(over.id); 82 | const newRules = arrayMove(items, oldIndex, newIndex); 83 | 84 | updateRules(newRules); 85 | } 86 | }; 87 | 88 | const handleAddNew = (rule: MenuRule) => { 89 | updateRules([...options.rules, rule]); 90 | }; 91 | 92 | const groupMeta = metaProperties[category]; 93 | 94 | return ( 95 | 100 |
101 |
102 | 108 | 109 | 110 | 111 | 112 |
113 |
    114 | item.key)} 116 | strategy={verticalListSortingStrategy} 117 | > 118 | {options.rules.map((item) => ( 119 | 125 | ))} 126 | 127 |
128 |
129 | 130 |
131 |
132 |
133 | ); 134 | } 135 | 136 | export default memo(RuleGroup); 137 | -------------------------------------------------------------------------------- /src/options/components/RuleItem/index.scss: -------------------------------------------------------------------------------- 1 | .rule-item { 2 | margin: 8px 0; 3 | display: flex; 4 | align-items: center; 5 | gap: 16px; 6 | 7 | > .MuiTextField-root { 8 | margin-right: 8px; 9 | } 10 | 11 | > .MuiTextField-root .MuiInput-underline::before { 12 | transition: opacity ease .4s; 13 | } 14 | 15 | > .MuiTextField-root input { 16 | font-size: 14px; 17 | padding-top: 3px; 18 | padding-bottom: 6px; 19 | } 20 | 21 | &:not(:hover) > .MuiTextField-root .MuiInput-underline::before { 22 | opacity: 0; 23 | } 24 | 25 | &-drag { 26 | color: #999; 27 | cursor: move; 28 | margin-right: 16px; 29 | } 30 | 31 | &-drag:hover { 32 | color: #333; 33 | } 34 | 35 | &-hover-visible { 36 | opacity: 0; 37 | } 38 | 39 | &:hover &-hover-visible { 40 | opacity: 1; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/options/components/RuleItem/index.tsx: -------------------------------------------------------------------------------- 1 | import { memo } from 'react'; 2 | import { useSortable } from '@dnd-kit/sortable'; 3 | import { CSS } from '@dnd-kit/utilities'; 4 | import { 5 | FormControl, 6 | IconButton, 7 | InputLabel, 8 | MenuItem, 9 | Select, 10 | Switch, 11 | TextField, 12 | } from '@mui/material'; 13 | import DeleteIcon from '@mui/icons-material/Delete'; 14 | import DragIndicatorIcon from '@mui/icons-material/DragIndicator'; 15 | import { 16 | DEFAULT_WHITESPACE_ENCODE, 17 | MenuRule, 18 | WhitespaceEncode, 19 | } from '../../../types'; 20 | import { confirm } from '../../../utils/confirm'; 21 | import './index.scss'; 22 | 23 | interface RuleItemProps { 24 | rule: MenuRule; 25 | onRuleChange(rule: MenuRule): void; 26 | onRuleDelete(rule: MenuRule): void; 27 | } 28 | 29 | function RuleItem({ rule, onRuleChange, onRuleDelete }: RuleItemProps) { 30 | const { attributes, listeners, setNodeRef, transform, transition } = 31 | useSortable({ id: rule.key }); 32 | 33 | const style = { 34 | transform: CSS.Transform.toString(transform), 35 | transition, 36 | }; 37 | 38 | const update = (partial: Partial) => { 39 | onRuleChange({ 40 | ...rule, 41 | ...partial, 42 | }); 43 | }; 44 | 45 | const handleDelete = async () => { 46 | if ( 47 | await confirm( 48 | chrome.i18n.getMessage('confirm_delete_title'), 49 | chrome.i18n.getMessage('confirm_delete_content', rule.name), 50 | ) 51 | ) { 52 | onRuleDelete(rule); 53 | } 54 | }; 55 | 56 | const spaceEncodingId = `space-encode-${rule.key}`; 57 | 58 | return ( 59 |
  • 60 | 65 | 66 | update({ name: e.target.value })} 72 | /> 73 | 74 | update({ url: e.target.value })} 83 | /> 84 | 85 | 86 | 87 | {chrome.i18n.getMessage('whitespace_encoding')} 88 | 89 | 105 | 106 | update({ enabled: checked })} 110 | /> 111 | 112 | 118 | 119 | 120 |
  • 121 | ); 122 | } 123 | 124 | export default memo(RuleItem); 125 | -------------------------------------------------------------------------------- /src/options/components/Settings/index.scss: -------------------------------------------------------------------------------- 1 | .settings-footer { 2 | position: sticky; 3 | bottom: 0; 4 | padding: 16px 0; 5 | background: #fff; 6 | 7 | > button { 8 | margin-right: 8px; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/options/components/Settings/index.tsx: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from 'react'; 2 | import { useDebouncedCallback } from 'use-debounce'; 3 | import { Button } from '@mui/material'; 4 | import { groupCategories } from '../../../config/basic'; 5 | import { 6 | AppOptions, 7 | AppOptionsRules, 8 | MenuCategory, 9 | RulesGroup, 10 | } from '../../../types'; 11 | import RuleGroup from '../RuleGroup'; 12 | import { confirm } from '../../../utils/confirm'; 13 | import { callMenuReload, readOptions, saveOptions } from '../../../services'; 14 | import defaultOptions from '../../../config/default-options'; 15 | import { showToast } from '../../../utils/toast'; 16 | import { 17 | clearLegacyData, 18 | readOptionsFromLegacyData, 19 | } from '../../../utils/migrate'; 20 | import CodeEdit from '../CodeEdit'; 21 | import { useBool } from '../../../utils/use-bool'; 22 | import './index.scss'; 23 | 24 | function SettingsView({ 25 | rules, 26 | optionsChanged, 27 | onRulesChange, 28 | onApply, 29 | onReset, 30 | }: { 31 | rules: AppOptionsRules; 32 | optionsChanged: boolean; 33 | onRulesChange(rules: AppOptionsRules, applyImmediate: boolean): void; 34 | onApply(): void; 35 | onReset(): void; 36 | }) { 37 | const { 38 | value: codeEditVisible, 39 | setTrue: setCodeEditToVisible, 40 | setFalse: setCodeEditToInvisible, 41 | } = useBool(false); 42 | const handleOptionsChange = (category: MenuCategory, options: RulesGroup) => { 43 | onRulesChange( 44 | { 45 | ...rules, 46 | [category]: options, 47 | }, 48 | false, 49 | ); 50 | }; 51 | 52 | const handleReset = async () => { 53 | if (await confirm('确认重置到默认初始配置?', '重置后无法撤销')) { 54 | onReset(); 55 | } 56 | }; 57 | 58 | const handleCodeSubmit = (newRules: AppOptionsRules) => { 59 | onRulesChange(newRules, true); 60 | }; 61 | 62 | return ( 63 |
    64 |

    设置

    65 |
    66 | {groupCategories.map((key) => ( 67 | 73 | ))} 74 |
    75 | 76 |
    77 | 80 | 83 | 90 |
    91 | {codeEditVisible && ( 92 | 97 | )} 98 |
    99 | ); 100 | } 101 | 102 | export default function Settings() { 103 | const [optionsChanged, setOptionsChanged] = useState(false); 104 | const [options, setOptions] = useState(null); 105 | 106 | const apply = () => { 107 | setOptionsChanged(false); 108 | 109 | if (options) { 110 | callMenuReload(); 111 | } 112 | }; 113 | 114 | const debouncedApply = useDebouncedCallback(apply, 5000); 115 | 116 | const handleOptionsChange = ( 117 | newOptions: AppOptions, 118 | applyImmediate: boolean, 119 | ) => { 120 | setOptionsChanged(true); 121 | setOptions(newOptions); 122 | saveOptions(newOptions); 123 | if (applyImmediate) { 124 | apply(); 125 | } else { 126 | debouncedApply(); 127 | } 128 | }; 129 | 130 | const handleReset = () => { 131 | setOptions(defaultOptions); 132 | saveOptions(defaultOptions).then(callMenuReload); 133 | showToast('success', '重置成功'); 134 | }; 135 | 136 | useEffect(() => { 137 | const optionsFromLegacy = readOptionsFromLegacyData(); 138 | 139 | if (optionsFromLegacy) { 140 | clearLegacyData(); 141 | setOptions(optionsFromLegacy); 142 | saveOptions(optionsFromLegacy); 143 | } else { 144 | readOptions().then(setOptions); 145 | } 146 | }, []); 147 | const rules = options?.rules; 148 | 149 | const handleRulesChange = ( 150 | newRules: AppOptionsRules, 151 | applyImmediate: boolean, 152 | ) => { 153 | handleOptionsChange( 154 | { 155 | ...options, 156 | rules: newRules, 157 | }, 158 | applyImmediate, 159 | ); 160 | }; 161 | 162 | return rules ? ( 163 | 170 | ) : null; 171 | } 172 | -------------------------------------------------------------------------------- /src/options/index.scss: -------------------------------------------------------------------------------- 1 | :focus:not(:focus-visible) { 2 | outline: 0; 3 | } 4 | 5 | body { 6 | --primary-color: #ec407a; 7 | 8 | padding: 0; 9 | margin: 0; 10 | background: #fff; 11 | font-family: Helvetica, Tahoma, Arial, STHeiti, sans-serif; 12 | color: #333; 13 | } 14 | 15 | a { 16 | text-decoration: none; 17 | color: var(--primary-color); 18 | } 19 | 20 | a:hover { 21 | color: #f57c00; 22 | } 23 | 24 | ul { 25 | padding: 0; 26 | margin: 0; 27 | list-style: none; 28 | } 29 | 30 | .sub-header { 31 | font-size: 20px; 32 | margin: 0; 33 | padding: 24px 0; 34 | } -------------------------------------------------------------------------------- /src/options/index.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createRoot } from 'react-dom/client'; 3 | import './index.scss'; 4 | import './md.scss'; 5 | 6 | import App from './components/App'; 7 | 8 | createRoot(document.getElementById('app')!).render(React.createElement(App)); 9 | -------------------------------------------------------------------------------- /src/options/md.scss: -------------------------------------------------------------------------------- 1 | .md { 2 | color: #666; 3 | display: block; 4 | padding: 0; 5 | margin: 0; 6 | font-size: 12px; 7 | word-break: break-all; 8 | 9 | div, 10 | ul, 11 | li, 12 | h1, 13 | h2, 14 | h3, 15 | h4, 16 | h5, 17 | h6, 18 | p, 19 | summary { 20 | display: block; 21 | padding: 0; 22 | margin: 0; 23 | background: none; 24 | border: none; 25 | } 26 | 27 | h1, 28 | h2, 29 | h3, 30 | h4, 31 | h5, 32 | h6 { 33 | line-height: 3em; 34 | } 35 | 36 | h1 { 37 | font-size: 2em; 38 | margin: 0.67em 0; 39 | } 40 | 41 | h2 { 42 | font-size: 1.5em; 43 | } 44 | 45 | h3 { 46 | font-size: 1.17em; 47 | color: var(--primary-color); 48 | } 49 | 50 | h4 { 51 | font-size: 1em; 52 | } 53 | 54 | h5 { 55 | font-size: 0.83em; 56 | } 57 | 58 | h6 { 59 | font-size: 0.67em; 60 | } 61 | 62 | p { 63 | margin-bottom: 1.5em; 64 | } 65 | 66 | code { 67 | font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; 68 | display: inline; 69 | } 70 | 71 | pre { 72 | overflow: auto; 73 | } 74 | 75 | pre code { 76 | display: block; 77 | padding: 8px; 78 | margin: 10px 0; 79 | background: #f5f5f5; 80 | border-radius: 2px; 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/services/index.ts: -------------------------------------------------------------------------------- 1 | import defaultOptions from '../config/default-options'; 2 | import { AppOptions } from '../types/index'; 3 | import { normalizeOptions } from '../utils/normalize'; 4 | 5 | async function getStorage(key: string) { 6 | const data = await chrome.storage.sync.get([key]); 7 | return data[key] as unknown; 8 | } 9 | 10 | export function saveOptions(options: AppOptions) { 11 | return chrome.storage.sync.set({ options }); 12 | } 13 | 14 | export async function readOptions(): Promise { 15 | const options = await getStorage('options'); 16 | 17 | if (!options) { 18 | return defaultOptions; 19 | } 20 | 21 | const normalizedOptions = normalizeOptions(options); 22 | 23 | saveOptions(normalizedOptions); 24 | 25 | return normalizedOptions; 26 | } 27 | 28 | export function callMenuReload() { 29 | chrome.runtime.sendMessage({ 30 | action: 'reload', 31 | }); 32 | } 33 | -------------------------------------------------------------------------------- /src/types/index.ts: -------------------------------------------------------------------------------- 1 | export type MenuCategory = 'page' | 'selection' | 'image'; 2 | 3 | export const WhitespaceEncode = { 4 | plus: '+', 5 | percent: '%20', 6 | } as const; 7 | 8 | export type WhitespaceEncode = 9 | (typeof WhitespaceEncode)[keyof typeof WhitespaceEncode]; 10 | 11 | export interface MenuRule { 12 | key: string; 13 | name: string; 14 | url: string; 15 | whitespaceEncode?: WhitespaceEncode; 16 | enabled: boolean; 17 | } 18 | 19 | export interface RulesGroup { 20 | enabled: boolean; 21 | rules: MenuRule[]; 22 | title?: string; 23 | } 24 | 25 | export type AppOptionsRules = Record; 26 | 27 | export type AppOptions = { 28 | rules: AppOptionsRules; 29 | }; 30 | 31 | export const DEFAULT_WHITESPACE_ENCODE: WhitespaceEncode = 32 | WhitespaceEncode.plus; 33 | -------------------------------------------------------------------------------- /src/utils/array.ts: -------------------------------------------------------------------------------- 1 | export const removeNulls = (array: ReadonlyArray) => 2 | array.filter((x) => x != null) as T[]; 3 | -------------------------------------------------------------------------------- /src/utils/confirm.tsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | import { 3 | Button, 4 | Dialog, 5 | DialogActions, 6 | DialogContent, 7 | DialogContentText, 8 | DialogTitle, 9 | } from '@mui/material'; 10 | import { renderToRoot } from './render-to-root'; 11 | 12 | interface ConfirmProps { 13 | title: string; 14 | message: string; 15 | onConfirm(): void; 16 | onCancel(): void; 17 | onDestroy(): void; 18 | } 19 | 20 | function Confirm({ 21 | title, 22 | message, 23 | onConfirm, 24 | onCancel, 25 | onDestroy, 26 | }: ConfirmProps) { 27 | const [open, setOpen] = useState(true); 28 | 29 | const handleClose = () => { 30 | setOpen(false); 31 | 32 | setTimeout(() => { 33 | onDestroy(); 34 | }, 1000); 35 | }; 36 | 37 | const handleCancel = () => { 38 | handleClose(); 39 | onCancel(); 40 | }; 41 | 42 | const handleConfirm = () => { 43 | handleClose(); 44 | onConfirm(); 45 | }; 46 | 47 | return ( 48 | 55 | {title} 56 | 57 | 58 | {message} 59 | 60 | 61 | 62 | 63 | 66 | 67 | 68 | ); 69 | } 70 | 71 | export function confirm(title: string, message: string): Promise { 72 | return new Promise((resolve) => { 73 | renderToRoot((destroy) => ( 74 | resolve(true)} 79 | onCancel={() => resolve(false)} 80 | /> 81 | )); 82 | }); 83 | } 84 | -------------------------------------------------------------------------------- /src/utils/deep-partial.ts: -------------------------------------------------------------------------------- 1 | // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type 2 | export type DeepPartial = T extends Function 3 | ? T 4 | : T extends object 5 | ? { [P in keyof T]?: DeepPartial } 6 | : T; 7 | -------------------------------------------------------------------------------- /src/utils/json.ts: -------------------------------------------------------------------------------- 1 | export function safeParse(text: string) { 2 | try { 3 | return JSON.parse(text) as unknown; 4 | } catch { 5 | return null; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/utils/map-values.ts: -------------------------------------------------------------------------------- 1 | export default function mapValues( 2 | obj: Record, 3 | iter: (val: A, key: T) => B, 4 | ): Record { 5 | const result = {} as Record; 6 | 7 | (Object.keys(obj) as T[]).forEach((key) => { 8 | result[key] = iter(obj[key], key); 9 | }); 10 | 11 | return result; 12 | } 13 | -------------------------------------------------------------------------------- /src/utils/migrate.ts: -------------------------------------------------------------------------------- 1 | import { AppOptions, AppOptionsRules } from '../types'; 2 | import { DeepPartial } from './deep-partial'; 3 | import { safeParse } from './json'; 4 | import { generateId } from './random'; 5 | 6 | interface LegacyRule { 7 | enabled: boolean; 8 | name: string; 9 | url: string; 10 | } 11 | 12 | export interface LegacyRules { 13 | share: LegacyRule[]; 14 | search: LegacyRule[]; 15 | imageSearch: LegacyRule[]; 16 | } 17 | 18 | interface LegacyRulesSwitch { 19 | search: boolean; 20 | share: boolean; 21 | imageSearch: boolean; 22 | } 23 | 24 | function readAndParseStorage(key: string) { 25 | const raw = localStorage.getItem(key); 26 | if (!raw) return null; 27 | 28 | return safeParse(raw); 29 | } 30 | 31 | export function transformLegacyDataToRules( 32 | rules: DeepPartial, 33 | switchs: DeepPartial, 34 | ): AppOptionsRules { 35 | const createRulesGroup = (category: keyof LegacyRules) => ({ 36 | enabled: switchs[category] ?? true, 37 | rules: (rules[category] ?? []).map((item) => ({ 38 | name: item?.name ?? '', 39 | url: item?.url ?? '', 40 | enabled: item?.enabled ?? true, 41 | key: generateId(), 42 | })), 43 | }); 44 | 45 | return { 46 | image: createRulesGroup('imageSearch'), 47 | selection: createRulesGroup('search'), 48 | page: createRulesGroup('share'), 49 | }; 50 | } 51 | 52 | export function readOptionsFromLegacyData(): AppOptions | null { 53 | const rules = readAndParseStorage('rules') as LegacyRules | null; 54 | const switches = readAndParseStorage('switch') as LegacyRulesSwitch | null; 55 | 56 | if (!rules || !switches) { 57 | return null; 58 | } 59 | 60 | return { 61 | rules: transformLegacyDataToRules(rules, switches), 62 | }; 63 | } 64 | 65 | export function clearLegacyData() { 66 | localStorage.removeItem('rules'); 67 | localStorage.removeItem('switch'); 68 | } 69 | -------------------------------------------------------------------------------- /src/utils/normalize.ts: -------------------------------------------------------------------------------- 1 | import defaultOptions from '../config/default-options'; 2 | import { AppOptions, AppOptionsRules, RulesGroup } from '../types'; 3 | import { removeNulls } from './array'; 4 | import { DeepPartial } from './deep-partial'; 5 | import { generateId } from './random'; 6 | 7 | function normalizeRulesGroup( 8 | group: DeepPartial | null | undefined, 9 | ): RulesGroup { 10 | return { 11 | enabled: group?.enabled ?? true, 12 | title: group?.title, 13 | rules: removeNulls(group?.rules ?? []).map((item) => ({ 14 | ...item, 15 | key: item.key ?? generateId(), 16 | name: item.name ?? '', 17 | url: item.url ?? '', 18 | enabled: item.enabled ?? true, 19 | })), 20 | }; 21 | } 22 | 23 | export function normalizeRules( 24 | rules: DeepPartial, 25 | ): AppOptionsRules { 26 | return { 27 | page: normalizeRulesGroup(rules.page), 28 | selection: normalizeRulesGroup(rules.selection), 29 | image: normalizeRulesGroup(rules.image), 30 | }; 31 | } 32 | 33 | export function normalizeOptions( 34 | options: DeepPartial | undefined, 35 | ): AppOptions { 36 | if (!options) { 37 | return defaultOptions; 38 | } 39 | 40 | return { 41 | ...options, 42 | rules: options.rules ? normalizeRules(options.rules) : defaultOptions.rules, 43 | }; 44 | } 45 | -------------------------------------------------------------------------------- /src/utils/random.ts: -------------------------------------------------------------------------------- 1 | import { nanoid } from 'nanoid'; 2 | 3 | export const generateId = () => nanoid(); 4 | -------------------------------------------------------------------------------- /src/utils/render-to-root.ts: -------------------------------------------------------------------------------- 1 | import { ReactNode } from 'react'; 2 | import mitt from 'mitt'; 3 | 4 | export type RenderToRoot = (destroy: () => void) => ReactNode; 5 | 6 | export const rootHostEmitter = mitt<{ 7 | render: RenderToRoot; 8 | }>(); 9 | 10 | export function renderToRoot(render: (destroy: () => void) => ReactNode) { 11 | rootHostEmitter.emit('render', render); 12 | } 13 | -------------------------------------------------------------------------------- /src/utils/template.ts: -------------------------------------------------------------------------------- 1 | import { WhitespaceEncode } from '../types'; 2 | 3 | const encode = (s: string, wsPlus?: boolean) => { 4 | const encoded = encodeURIComponent(s); 5 | return wsPlus ? encoded.replace(/%20/g, '+') : encoded; 6 | }; 7 | 8 | export default function replaceTemplate( 9 | text: string, 10 | data: Record, 11 | percentS = '', 12 | options: { 13 | whitespaceEncode: WhitespaceEncode; 14 | }, 15 | ): string { 16 | // compatible with chrome 17 | let txt = text 18 | .replace(/\{inputEncoding\}/g, 'utf-8') 19 | .replace(/%s/g, encode(percentS)); 20 | 21 | Object.keys(data).forEach((key) => { 22 | txt = txt.replace( 23 | new RegExp(`{%${key}%}|{${key}}`, 'g'), 24 | encode(data[key], options.whitespaceEncode === '+'), 25 | ); 26 | }); 27 | 28 | return txt; 29 | } 30 | -------------------------------------------------------------------------------- /src/utils/toast.tsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | import { Alert, AlertColor, Snackbar } from '@mui/material'; 3 | import { renderToRoot } from './render-to-root'; 4 | 5 | interface ToastProps { 6 | severity: AlertColor; 7 | message: string; 8 | onDestroy(): void; 9 | } 10 | 11 | function Toast({ severity, message, onDestroy }: ToastProps) { 12 | const [open, setOpen] = useState(true); 13 | 14 | const handleClose = () => { 15 | setOpen(false); 16 | 17 | setTimeout(() => { 18 | onDestroy(); 19 | }, 1000); 20 | }; 21 | 22 | return ( 23 | 29 | 30 | {message} 31 | 32 | 33 | ); 34 | } 35 | 36 | export function showToast(severity: AlertColor, message: string) { 37 | renderToRoot((destroy) => ( 38 | 39 | )); 40 | } 41 | -------------------------------------------------------------------------------- /src/utils/use-bool.ts: -------------------------------------------------------------------------------- 1 | import { useCallback, useState } from 'react'; 2 | 3 | export function useBool(initialValue = false) { 4 | const [value, setValue] = useState(initialValue); 5 | 6 | const toggle = useCallback(() => setValue((val) => !val), []); 7 | const setTrue = useCallback(() => setValue(true), []); 8 | const setFalse = useCallback(() => setValue(false), []); 9 | 10 | return { 11 | value, 12 | setValue, 13 | toggle, 14 | setTrue, 15 | setFalse, 16 | }; 17 | } 18 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */ 4 | 5 | /* Basic Options */ 6 | // "incremental": true, /* Enable incremental compilation */ 7 | "target": "es2018", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ 8 | "module": "es2015", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ 9 | // "lib": [], /* Specify library files to be included in the compilation. */ 10 | "allowJs": true, /* Allow javascript files to be compiled. */ 11 | // "checkJs": true, /* Report errors in .js files. */ 12 | "jsx": "react-jsx", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */ 13 | // "declaration": true, /* Generates corresponding '.d.ts' file. */ 14 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ 15 | // "sourceMap": true, /* Generates corresponding '.map' file. */ 16 | // "outFile": "./", /* Concatenate and emit output to single file. */ 17 | // make vscode happy 18 | "outDir": "./lib", /* Redirect output structure to the directory. */ 19 | // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 20 | // "composite": true, /* Enable project compilation */ 21 | // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ 22 | // "removeComments": true, /* Do not emit comments to output. */ 23 | // "noEmit": true, /* Do not emit outputs. */ 24 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */ 25 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ 26 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ 27 | 28 | /* Strict Type-Checking Options */ 29 | "strict": true, /* Enable all strict type-checking options. */ 30 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ 31 | // "strictNullChecks": true, /* Enable strict null checks. */ 32 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */ 33 | // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ 34 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ 35 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ 36 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ 37 | 38 | /* Additional Checks */ 39 | // "noUnusedLocals": true, /* Report errors on unused locals. */ 40 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 41 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 42 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 43 | // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ 44 | // "noPropertyAccessFromIndexSignature": true, /* Require undeclared properties from index signatures to use element accesses. */ 45 | 46 | /* Module Resolution Options */ 47 | "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ 48 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ 49 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ 50 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ 51 | // "typeRoots": [], /* List of folders to include type definitions from. */ 52 | "types": ["chrome"], /* Type declaration files to be included in compilation. */ 53 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ 54 | "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 55 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ 56 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 57 | 58 | /* Source Map Options */ 59 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ 60 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 61 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ 62 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ 63 | 64 | /* Experimental Options */ 65 | // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ 66 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ 67 | 68 | /* Advanced Options */ 69 | "skipLibCheck": true, /* Skip type checking of declaration files. */ 70 | "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ 71 | }, 72 | "include": [ 73 | "src", 74 | "typings", 75 | "*.js", 76 | ".eslintrc.cjs", 77 | ] 78 | } 79 | -------------------------------------------------------------------------------- /typings/file.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.md' { 2 | declare const html: string; 3 | export default html; 4 | } 5 | -------------------------------------------------------------------------------- /typings/index.d.ts: -------------------------------------------------------------------------------- 1 | interface Window { 2 | EXT_VERSION: string; 3 | } 4 | --------------------------------------------------------------------------------