From 1368f07bfe4ba190f4cfaef374195632a9db5426 Mon Sep 17 00:00:00 2001 From: neosubhamoy Date: Mon, 26 Aug 2024 01:08:37 +0530 Subject: [PATCH] (first): initial commit --- .gitignore | 34 + .vscode/extensions.json | 3 + LICENSE | 21 + README.md | 49 + components.json | 17 + copyFiles.js | 15 + index.html | 14 + package-lock.json | 3232 +++++++++++ package.json | 36 + postcss.config.js | 6 + public/tauri.svg | 6 + public/vite.svg | 1 + signFiles.js | 59 + src-tauri/.gitignore | 7 + src-tauri/Cargo.lock | 4767 +++++++++++++++++ src-tauri/Cargo.toml | 30 + src-tauri/autostart/Cargo.lock | 7 + src-tauri/autostart/Cargo.toml | 16 + src-tauri/autostart/build.rs | 8 + src-tauri/autostart/src/main.rs | 55 + src-tauri/build.rs | 3 + src-tauri/icons/128x128.png | Bin 0 -> 3472 bytes src-tauri/icons/128x128@2x.png | Bin 0 -> 6558 bytes src-tauri/icons/32x32.png | Bin 0 -> 1645 bytes src-tauri/icons/Square107x107Logo.png | Bin 0 -> 2863 bytes src-tauri/icons/Square142x142Logo.png | Bin 0 -> 3858 bytes src-tauri/icons/Square150x150Logo.png | Bin 0 -> 3966 bytes src-tauri/icons/Square284x284Logo.png | Bin 0 -> 7737 bytes src-tauri/icons/Square30x30Logo.png | Bin 0 -> 903 bytes src-tauri/icons/Square310x310Logo.png | Bin 0 -> 8591 bytes src-tauri/icons/Square44x44Logo.png | Bin 0 -> 1299 bytes src-tauri/icons/Square71x71Logo.png | Bin 0 -> 2011 bytes src-tauri/icons/Square89x89Logo.png | Bin 0 -> 2468 bytes src-tauri/icons/StoreLogo.png | Bin 0 -> 1523 bytes src-tauri/icons/icon.icns | Bin 0 -> 32912 bytes src-tauri/icons/icon.ico | Bin 0 -> 175261 bytes src-tauri/icons/icon.png | Bin 0 -> 15740 bytes .../windows/wix-fragment-registry.wxs | 18 + src-tauri/msghost/Cargo.lock | 7 + src-tauri/msghost/Cargo.toml | 16 + src-tauri/msghost/build.rs | 8 + src-tauri/msghost/src/main.rs | 103 + src-tauri/pytubepp-helper-msghost-moz.json | 7 + src-tauri/pytubepp-helper-msghost.json | 7 + src-tauri/src/main.rs | 231 + src-tauri/tauri.conf.json | 116 + src/App.css | 0 src/App.tsx | 130 + src/assets/react.svg | 1 + src/components/theme-provider.tsx | 73 + src/components/ui/button.tsx | 57 + src/index.css | 69 + src/lib/utils.ts | 97 + src/main.tsx | 9 + src/types.ts | 32 + src/vite-env.d.ts | 1 + tailwind.config.js | 77 + tsconfig.json | 31 + tsconfig.node.json | 10 + vite.config.ts | 27 + 60 files changed, 9513 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/extensions.json create mode 100644 LICENSE create mode 100644 README.md create mode 100644 components.json create mode 100644 copyFiles.js create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 postcss.config.js create mode 100644 public/tauri.svg create mode 100644 public/vite.svg create mode 100644 signFiles.js create mode 100644 src-tauri/.gitignore create mode 100644 src-tauri/Cargo.lock create mode 100644 src-tauri/Cargo.toml create mode 100644 src-tauri/autostart/Cargo.lock create mode 100644 src-tauri/autostart/Cargo.toml create mode 100644 src-tauri/autostart/build.rs create mode 100644 src-tauri/autostart/src/main.rs create mode 100644 src-tauri/build.rs create mode 100644 src-tauri/icons/128x128.png create mode 100644 src-tauri/icons/128x128@2x.png create mode 100644 src-tauri/icons/32x32.png create mode 100644 src-tauri/icons/Square107x107Logo.png create mode 100644 src-tauri/icons/Square142x142Logo.png create mode 100644 src-tauri/icons/Square150x150Logo.png create mode 100644 src-tauri/icons/Square284x284Logo.png create mode 100644 src-tauri/icons/Square30x30Logo.png create mode 100644 src-tauri/icons/Square310x310Logo.png create mode 100644 src-tauri/icons/Square44x44Logo.png create mode 100644 src-tauri/icons/Square71x71Logo.png create mode 100644 src-tauri/icons/Square89x89Logo.png create mode 100644 src-tauri/icons/StoreLogo.png create mode 100644 src-tauri/icons/icon.icns create mode 100644 src-tauri/icons/icon.ico create mode 100644 src-tauri/icons/icon.png create mode 100644 src-tauri/installer/windows/wix-fragment-registry.wxs create mode 100644 src-tauri/msghost/Cargo.lock create mode 100644 src-tauri/msghost/Cargo.toml create mode 100644 src-tauri/msghost/build.rs create mode 100644 src-tauri/msghost/src/main.rs create mode 100644 src-tauri/pytubepp-helper-msghost-moz.json create mode 100644 src-tauri/pytubepp-helper-msghost.json create mode 100644 src-tauri/src/main.rs create mode 100644 src-tauri/tauri.conf.json create mode 100644 src/App.css create mode 100644 src/App.tsx create mode 100644 src/assets/react.svg create mode 100644 src/components/theme-provider.tsx create mode 100644 src/components/ui/button.tsx create mode 100644 src/index.css create mode 100644 src/lib/utils.ts create mode 100644 src/main.tsx create mode 100644 src/types.ts create mode 100644 src/vite-env.d.ts create mode 100644 tailwind.config.js create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..37c7eac --- /dev/null +++ b/.gitignore @@ -0,0 +1,34 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# Executables +pytubepp-helper-msghost.exe +pytubepp-helper-autostart.exe + +# Certificate files +certificate.pfx + +# Environment variables +.env \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..24d7cc6 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["tauri-apps.tauri-vscode", "rust-lang.rust-analyzer"] +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..537d450 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Subhamoy Biswas + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..61285ad --- /dev/null +++ b/README.md @@ -0,0 +1,49 @@ +# PytubePP Helper + +A Helper App for PytubePP Extension/Addon to Communicate with Pytube Post Processor CLI + +[![status](https://img.shields.io/badge/status-active-brightgreen.svg?style=flat)](https://github.com/neosubhamoy/pytubepp-helper) +[![verion](https://img.shields.io/badge/version-v0.1.0_beta-yellow.svg?style=flat)](https://github.com/neosubhamoy/pytubepp-helper) +[![PRs](https://img.shields.io/badge/PRs-welcome-blue.svg?style=flat)](https://github.com/neosubhamoy/pytubepp-helper) + +#### **🌟 Loved this Project? Don't forget to Star this Repo to show us your appreciation !!** + +### 💻 Supported Platforms +- Windows 10 (v1803 or later)/11 +- Linux (Coming Soon) +- MacOS (Maybe later :) + +### ⚡ Technologies Used + +![Tauri](https://img.shields.io/badge/tauri-%2324C8DB.svg?style=for-the-badge&logo=tauri&logoColor=%23FFFFFF) +![React](https://img.shields.io/badge/react-%2320232a.svg?style=for-the-badge&logo=react&logoColor=%2361DAFB) +![TypeScript](https://img.shields.io/badge/typescript-%23007ACC.svg?style=for-the-badge&logo=typescript&logoColor=white) +![ShadCnUi](https://img.shields.io/badge/shadcn%2Fui-000000?style=for-the-badge&logo=shadcnui&logoColor=white) +![Rust](https://img.shields.io/badge/rust-%23000000.svg?style=for-the-badge&logo=rust&logoColor=white) + +### 🛠️ Contributing / Building from Source + +Want to be part of this? Feel free to contribute...!! Pull Requests are always welcome...!! (^_^) Follow this simple steps to start building: + +* Make sure to install Rust, Node.js and Git before proceeding. +1. Fork this repo in your github account. +2. Git clone the forked repo in your local machine. +3. Install node dependencies + +```code +npm install +``` +4. Run development / build process +```code +npm run tauri dev +``` +```code +npm run tauri build +``` +5. Do the changes, Send a Pull Request with proper Description (NOTE: Pull Requests Without Proper Description will be Rejected) + +**⭕ Noticed any Bugs or Want to give us some suggetions? Always feel free to open a GitHub Issue. We would love to hear from you...!!** + +### 📝 License + +PytubePP Helper is Licensed under the [MIT license](https://github.com/neosubhamoy/pytubepp-helper/blob/main/LICENSE). Anyone can view, modify, use (personal and commercial) or distribute it's sources without any attribution and extra permissions. \ No newline at end of file diff --git a/components.json b/components.json new file mode 100644 index 0000000..408cc27 --- /dev/null +++ b/components.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "tailwind.config.js", + "css": "src/index.css", + "baseColor": "zinc", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils" + } +} \ No newline at end of file diff --git a/copyFiles.js b/copyFiles.js new file mode 100644 index 0000000..1a01a1e --- /dev/null +++ b/copyFiles.js @@ -0,0 +1,15 @@ +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const msghostsrc = path.join(__dirname, 'src-tauri', 'target', 'release', 'pytubepp-helper-msghost.exe'); +const msghostdest = path.join(__dirname, 'src-tauri', 'pytubepp-helper-msghost.exe'); +const autostartsrc = path.join(__dirname, 'src-tauri', 'target', 'release', 'pytubepp-helper-autostart.exe'); +const autostartdest = path.join(__dirname, 'src-tauri', 'pytubepp-helper-autostart.exe'); + +fs.copyFileSync(msghostsrc, msghostdest); +fs.copyFileSync(autostartsrc, autostartdest); +console.log('Files copied successfully'); \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..ff93803 --- /dev/null +++ b/index.html @@ -0,0 +1,14 @@ + + + + + + + Tauri + React + Typescript + + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..593a906 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3232 @@ +{ + "name": "pytubepp-helper", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "pytubepp-helper", + "version": "0.1.0", + "dependencies": { + "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-slot": "^1.1.0", + "@tauri-apps/api": "^1", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "dotenv": "^16.4.5", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "tailwind-merge": "^2.5.2", + "tailwindcss-animate": "^1.0.7" + }, + "devDependencies": { + "@tauri-apps/cli": "^1", + "@types/node": "^22.2.0", + "@types/react": "^18.2.15", + "@types/react-dom": "^18.2.7", + "@vitejs/plugin-react": "^4.2.1", + "autoprefixer": "^10.4.20", + "postcss": "^8.4.41", + "tailwindcss": "^3.4.10", + "typescript": "^5.2.2", + "vite": "^5.3.1" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.2" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", + "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", + "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", + "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-icons": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.0.tgz", + "integrity": "sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==", + "license": "MIT", + "peerDependencies": { + "react": "^16.x || ^17.x || ^18.x" + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", + "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz", + "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz", + "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz", + "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz", + "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz", + "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz", + "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz", + "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz", + "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz", + "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz", + "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz", + "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz", + "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz", + "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz", + "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz", + "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz", + "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tauri-apps/api": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-1.6.0.tgz", + "integrity": "sha512-rqI++FWClU5I2UBp4HXFvl+sBWkdigBkxnpJDQUWttNyG7IZP4FwQGhTNL5EOw0vI8i6eSAJ5frLqO7n7jbJdg==", + "engines": { + "node": ">= 14.6.0", + "npm": ">= 6.6.0", + "yarn": ">= 1.19.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + } + }, + "node_modules/@tauri-apps/cli": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-1.6.0.tgz", + "integrity": "sha512-DBBpBl6GhTzm8ImMbKkfaZ4fDTykWrC7Q5OXP4XqD91recmDEn2LExuvuiiS3HYe7uP8Eb5B9NPHhqJb+Zo7qQ==", + "dev": true, + "bin": { + "tauri": "tauri.js" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + }, + "optionalDependencies": { + "@tauri-apps/cli-darwin-arm64": "1.6.0", + "@tauri-apps/cli-darwin-x64": "1.6.0", + "@tauri-apps/cli-linux-arm-gnueabihf": "1.6.0", + "@tauri-apps/cli-linux-arm64-gnu": "1.6.0", + "@tauri-apps/cli-linux-arm64-musl": "1.6.0", + "@tauri-apps/cli-linux-x64-gnu": "1.6.0", + "@tauri-apps/cli-linux-x64-musl": "1.6.0", + "@tauri-apps/cli-win32-arm64-msvc": "1.6.0", + "@tauri-apps/cli-win32-ia32-msvc": "1.6.0", + "@tauri-apps/cli-win32-x64-msvc": "1.6.0" + } + }, + "node_modules/@tauri-apps/cli-darwin-arm64": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-1.6.0.tgz", + "integrity": "sha512-SNRwUD9nqGxY47mbY1CGTt/jqyQOU7Ps7Mx/mpgahL0FVUDiCEY/5L9QfEPPhEgccgcelEVn7i6aQHIkHyUtCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-darwin-x64": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-1.6.0.tgz", + "integrity": "sha512-g2/uDR/eeH2arvuawA4WwaEOqv/7jDO/ZLNI3JlBjP5Pk8GGb3Kdy0ro1xQzF94mtk2mOnOXa4dMgAet4sUJ1A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm-gnueabihf": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-1.6.0.tgz", + "integrity": "sha512-EVwf4oRkQyG8BpSrk0gqO7oA0sDM2MdNDtJpMfleYFEgCxLIOGZKNqaOW3M7U+0Y4qikmG3TtRK+ngc8Ymtrjg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-gnu": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-1.6.0.tgz", + "integrity": "sha512-YdpY17cAySrhK9dX4BUVEmhAxE2o+6skIEFg8iN/xrDwRxhaNPI9I80YXPatUTX54Kx55T5++25VJG9+3iw83A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-musl": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.6.0.tgz", + "integrity": "sha512-4U628tuf2U8pMr4tIBJhEkrFwt+46dwhXrDlpdyWSZtnop5RJAVKHODm0KbWns4xGKfTW1F3r6sSv+2ZxLcISA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-gnu": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-1.6.0.tgz", + "integrity": "sha512-AKRzp76fVUaJyXj5KRJT9bJyhwZyUnRQU0RqIRqOtZCT5yr6qGP8rjtQ7YhCIzWrseBlOllc3Qvbgw3Yl0VQcA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-musl": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-1.6.0.tgz", + "integrity": "sha512-0edIdq6aMBTaRMIXddHfyAFL361JqulLLd2Wi2aoOie7DkQ2MYh6gv3hA7NB9gqFwNIGE+xtJ4BkXIP2tSGPlg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-arm64-msvc": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-1.6.0.tgz", + "integrity": "sha512-QwWpWk4ubcwJ1rljsRAmINgB2AwkyzZhpYbalA+MmzyYMREcdXWGkyixWbRZgqc6fEWEBmq5UG73qz5eBJiIKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-ia32-msvc": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-1.6.0.tgz", + "integrity": "sha512-Vtw0yxO9+aEFuhuxQ57ALG43tjECopRimRuKGbtZYDCriB/ty5TrT3QWMdy0dxBkpDTu3Rqsz30sbDzw6tlP3Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-x64-msvc": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-1.6.0.tgz", + "integrity": "sha512-h54FHOvGi7+LIfRchzgZYSCHB1HDlP599vWXQQJ/XnwJY+6Rwr2E5bOe/EhqoG8rbGkfK0xX3KPAvXPbUlmggg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.2.0.tgz", + "integrity": "sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.13.0" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "devOptional": true + }, + "node_modules/@types/react": { + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", + "devOptional": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", + "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.24.5", + "@babel/plugin-transform-react-jsx-self": "^7.24.5", + "@babel/plugin-transform-react-jsx-source": "^7.24.1", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001651", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", + "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz", + "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "2.0.0" + }, + "funding": { + "url": "https://joebell.co.uk" + } + }, + "node_modules/class-variance-authority/node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "devOptional": true + }, + "node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.7.tgz", + "integrity": "sha512-6FTNWIWMxMy/ZY6799nBlPtF1DFDQ6VQJ7yyDP27SJNt5lwtQ5ufqVvHylb3fdQefvRcgA3fKcFMJi9OLwBRNw==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.41", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", + "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz", + "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.20.0", + "@rollup/rollup-android-arm64": "4.20.0", + "@rollup/rollup-darwin-arm64": "4.20.0", + "@rollup/rollup-darwin-x64": "4.20.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.20.0", + "@rollup/rollup-linux-arm-musleabihf": "4.20.0", + "@rollup/rollup-linux-arm64-gnu": "4.20.0", + "@rollup/rollup-linux-arm64-musl": "4.20.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0", + "@rollup/rollup-linux-riscv64-gnu": "4.20.0", + "@rollup/rollup-linux-s390x-gnu": "4.20.0", + "@rollup/rollup-linux-x64-gnu": "4.20.0", + "@rollup/rollup-linux-x64-musl": "4.20.0", + "@rollup/rollup-win32-arm64-msvc": "4.20.0", + "@rollup/rollup-win32-ia32-msvc": "4.20.0", + "@rollup/rollup-win32-x64-msvc": "4.20.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwind-merge": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.2.tgz", + "integrity": "sha512-kjEBm+pvD+6eAwzJL2Bi+02/9LFLal1Gs61+QB7HvTfQQ0aXwC5LGT8PEt1gS0CWKktKe6ysPTAy3cBC5MeiIg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.10.tgz", + "integrity": "sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, + "node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", + "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/vite": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.0.tgz", + "integrity": "sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==", + "dev": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.40", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", + "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..2f4943b --- /dev/null +++ b/package.json @@ -0,0 +1,36 @@ +{ + "name": "pytubepp-helper", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview", + "tauri": "tauri" + }, + "dependencies": { + "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-slot": "^1.1.0", + "@tauri-apps/api": "^1", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "dotenv": "^16.4.5", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "tailwind-merge": "^2.5.2", + "tailwindcss-animate": "^1.0.7" + }, + "devDependencies": { + "@tauri-apps/cli": "^1", + "@types/node": "^22.2.0", + "@types/react": "^18.2.15", + "@types/react-dom": "^18.2.7", + "@vitejs/plugin-react": "^4.2.1", + "autoprefixer": "^10.4.20", + "postcss": "^8.4.41", + "tailwindcss": "^3.4.10", + "typescript": "^5.2.2", + "vite": "^5.3.1" + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..2e7af2b --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/public/tauri.svg b/public/tauri.svg new file mode 100644 index 0000000..31b62c9 --- /dev/null +++ b/public/tauri.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/signFiles.js b/signFiles.js new file mode 100644 index 0000000..88d917e --- /dev/null +++ b/signFiles.js @@ -0,0 +1,59 @@ +import { exec } from 'child_process'; +import { promisify } from 'util'; +import dotenv from 'dotenv'; +import path from 'path'; + +dotenv.config(); + +const execPromise = promisify(exec); + +// Common configuration +const config = { + pfxPath: 'certificate.pfx', + pfxPassword: process.env.PFX_PASS, + companyName: 'Subhamoy Biswas', + companyUrl: 'https://neosubhamoy.com', + timestampServer: 'http://timestamp.sectigo.com', +}; + +// Array of files to sign with their individual configurations +const filesToSign = [ + { + path: 'src-tauri/target/release/pytubepp-helper-msghost.exe', + programName: 'PytubePP Helper Native Messaging Host', + }, + { + path: 'src-tauri/target/release/pytubepp-helper-autostart.exe', + programName: 'PytubePP Helper (Autostart)', + }, + // Add more files as needed +]; + +const signFile = async (fileConfig) => { + const { path: filePath, programName } = fileConfig; + + const command = `signtool sign /f "${config.pfxPath}" /p ${config.pfxPassword} /d "${programName}" /du "${config.companyUrl}" /n "${config.companyName}" /t ${config.timestampServer} /fd sha256 "${filePath}"`; + + try { + const { stdout, stderr } = await execPromise(command); + console.log(`Successfully signed ${path.basename(filePath)}`); + console.log(stdout); + } catch (error) { + console.error(`Failed to sign ${path.basename(filePath)}`); + console.error(error.message); + } +}; + +const signAllFiles = async () => { + if (!config.pfxPassword) { + console.error('PFX password not found in environment variables.'); + return; + } + + for (const file of filesToSign) { + await signFile(file); + } + console.log('All files processed.'); +}; + +signAllFiles(); \ No newline at end of file diff --git a/src-tauri/.gitignore b/src-tauri/.gitignore new file mode 100644 index 0000000..b21bd68 --- /dev/null +++ b/src-tauri/.gitignore @@ -0,0 +1,7 @@ +# Generated by Cargo +# will have compiled files and executables +/target/ + +# Generated by Tauri +# will have schema files for capabilities auto-completion +/gen/schemas diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock new file mode 100644 index 0000000..df4360d --- /dev/null +++ b/src-tauri/Cargo.lock @@ -0,0 +1,4767 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "atk" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd" +dependencies = [ + "atk-sys", + "bitflags 1.3.2", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps 6.2.2", +] + +[[package]] +name = "autocfg" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" +dependencies = [ + "autocfg 1.3.0", +] + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if 1.0.0", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" +dependencies = [ + "byteorder", + "safemem", +] + +[[package]] +name = "base64" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" +dependencies = [ + "byteorder", +] + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-buffer" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +dependencies = [ + "block-padding", + "byte-tools", + "byteorder", + "generic-array 0.12.4", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "block-padding" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" +dependencies = [ + "byte-tools", +] + +[[package]] +name = "brotli" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d640d25bc63c50fb1f0b545ffd80207d2e10a4c965530809b40ba3386825c391" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "2.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bstr" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + +[[package]] +name = "bytemuck" +version = "1.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "102087e286b4677862ea56cf8fc58bb2cdfa8725c40ffb80fe3a008eb7f2fc83" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" +dependencies = [ + "byteorder", + "iovec", +] + +[[package]] +name = "bytes" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" + +[[package]] +name = "cairo-rs" +version = "0.15.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc" +dependencies = [ + "bitflags 1.3.2", + "cairo-sys-rs", + "glib", + "libc", + "thiserror", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8" +dependencies = [ + "glib-sys", + "libc", + "system-deps 6.2.2", +] + +[[package]] +name = "cargo_toml" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "599aa35200ffff8f04c1925aa1acc92fa2e08874379ef42e210a80e527e60838" +dependencies = [ + "serde", + "toml 0.7.8", +] + +[[package]] +name = "cc" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9e8aabfac534be767c909e0690571677d49f41bd8465ae876fe043d52ba5292" + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + +[[package]] +name = "cfg-expr" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3431df59f28accaf4cb4eed4a9acc66bea3f3c3753aa6cdc2f024174ef232af7" +dependencies = [ + "smallvec 1.13.2", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec 1.13.2", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.52.6", +] + +[[package]] +name = "cloudabi" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "cocoa" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation", + "core-graphics-types", + "libc", + "objc", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes 1.7.1", + "memchr", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core-graphics" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils 0.8.20", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils 0.8.20", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils 0.8.20", +] + +[[package]] +name = "crossbeam-utils" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" +dependencies = [ + "autocfg 1.3.0", + "cfg-if 0.1.10", + "lazy_static", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array 0.14.7", + "typenum", +] + +[[package]] +name = "cssparser" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa 0.4.8", + "matches", + "phf 0.8.0", + "proc-macro2", + "quote", + "smallvec 1.13.2", + "syn 1.0.109", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.74", +] + +[[package]] +name = "ctor" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" +dependencies = [ + "quote", + "syn 2.0.74", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.74", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.74", +] + +[[package]] +name = "data-encoding" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derive_more" +version = "0.99.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version 0.4.0", + "syn 2.0.74", +] + +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.4", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "crypto-common", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if 1.0.0", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi 0.3.9", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dtoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" + +[[package]] +name = "dtoa-short" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "embed-resource" +version = "2.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4edcacde9351c33139a41e3c97eb2334351a81a2791bebb0b243df837128f602" +dependencies = [ + "cc", + "memchr", + "rustc_version 0.4.0", + "toml 0.8.19", + "vswhom", + "winreg", +] + +[[package]] +name = "embed_plist" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" + +[[package]] +name = "encoding_rs" +version = "0.8.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" + +[[package]] +name = "fastrand" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" + +[[package]] +name = "fdeflate" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +dependencies = [ + "memoffset", + "rustc_version 0.4.0", +] + +[[package]] +name = "filetime" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf401df4a4e3872c4fe8151134cf483738e74b67fc934d6532c882b3d24a4550" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "libredox", + "windows-sys 0.59.0", +] + +[[package]] +name = "flate2" +version = "1.0.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding 2.3.1", +] + +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + +[[package]] +name = "fuchsia-zircon" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" +dependencies = [ + "bitflags 1.3.2", + "fuchsia-zircon-sys", +] + +[[package]] +name = "fuchsia-zircon-sys" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" + +[[package]] +name = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + +[[package]] +name = "futures" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.74", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-core", + "futures-macro", + "futures-sink", + "futures-task", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "gdk" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.15.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a" +dependencies = [ + "bitflags 1.3.2", + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps 6.2.2", +] + +[[package]] +name = "gdk-sys" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps 6.2.2", +] + +[[package]] +name = "gdkwayland-sys" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cca49a59ad8cfdf36ef7330fe7bdfbe1d34323220cc16a0de2679ee773aee2c2" +dependencies = [ + "gdk-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", + "system-deps 6.2.2", +] + +[[package]] +name = "gdkx11-sys" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4b7f8c7a84b407aa9b143877e267e848ff34106578b64d1e0a24bf550716178" +dependencies = [ + "gdk-sys", + "glib-sys", + "libc", + "system-deps 6.2.2", + "x11", +] + +[[package]] +name = "generator" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" +dependencies = [ + "cc", + "libc", + "log 0.4.22", + "rustversion", + "windows 0.48.0", +] + +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check 0.9.5", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "gimli" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + +[[package]] +name = "gio" +version = "0.15.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b" +dependencies = [ + "bitflags 1.3.2", + "futures-channel", + "futures-core", + "futures-io", + "gio-sys", + "glib", + "libc", + "once_cell", + "thiserror", +] + +[[package]] +name = "gio-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps 6.2.2", + "winapi 0.3.9", +] + +[[package]] +name = "glib" +version = "0.15.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d" +dependencies = [ + "bitflags 1.3.2", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "once_cell", + "smallvec 1.13.2", + "thiserror", +] + +[[package]] +name = "glib-macros" +version = "0.15.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10c6ae9f6fa26f4fb2ac16b528d138d971ead56141de489f8111e259b9df3c4a" +dependencies = [ + "anyhow", + "heck 0.4.1", + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "glib-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4" +dependencies = [ + "libc", + "system-deps 6.2.2", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "globset" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +dependencies = [ + "aho-corasick", + "bstr", + "log 0.4.22", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", +] + +[[package]] +name = "gobject-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a" +dependencies = [ + "glib-sys", + "libc", + "system-deps 6.2.2", +] + +[[package]] +name = "gtk" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0" +dependencies = [ + "atk", + "bitflags 1.3.2", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "once_cell", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps 6.2.2", +] + +[[package]] +name = "gtk3-macros" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "684c0456c086e8e7e9af73ec5b84e35938df394712054550e81558d21c44ab0d" +dependencies = [ + "anyhow", + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "html5ever" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7" +dependencies = [ + "log 0.4.22", + "mac", + "markup5ever", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes 1.7.1", + "fnv", + "itoa 1.0.11", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes 1.7.1", + "fnv", + "itoa 1.0.11", +] + +[[package]] +name = "http-range" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" + +[[package]] +name = "httparse" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" + +[[package]] +name = "hyper" +version = "0.10.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a0652d9a2609a968c14be1a9ea00bf4b1d64e2e1f53a1b51b6fff3a6e829273" +dependencies = [ + "base64 0.9.3", + "httparse", + "language-tags", + "log 0.3.9", + "mime", + "num_cpus", + "time 0.1.45", + "traitobject", + "typeable", + "unicase", + "url 1.7.2", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ico" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae" +dependencies = [ + "byteorder", + "png", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "ignore" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" +dependencies = [ + "crossbeam-deque", + "globset", + "log 0.4.22", + "memchr", + "regex-automata 0.4.7", + "same-file", + "walkdir", + "winapi-util", +] + +[[package]] +name = "image" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "num-traits", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg 1.3.0", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" +dependencies = [ + "equivalent", + "hashbrown 0.14.5", + "serde", +] + +[[package]] +name = "infer" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f551f8c3a39f68f986517db0d1759de85881894fdc7db798bd2a9df9cb04b7fc" +dependencies = [ + "cfb", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "iovec" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" +dependencies = [ + "libc", +] + +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "javascriptcore-rs" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf053e7843f2812ff03ef5afe34bb9c06ffee120385caad4f6b9967fcd37d41c" +dependencies = [ + "bitflags 1.3.2", + "glib", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "905fbb87419c5cde6e3269537e4ea7d46431f3008c5d057e915ef3f115e7793c" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps 5.0.0", +] + +[[package]] +name = "jni" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log 0.4.22", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "js-sys" +version = "0.3.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "json-patch" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec9ad60d674508f3ca8f380a928cfe7b096bc729c4e2dbfe3852bc45da3ab30b" +dependencies = [ + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] + +[[package]] +name = "kuchikiki" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e4755b7b995046f510a7520c42b2fed58b77bd94d5a87a8eb43d2fd126da8" +dependencies = [ + "cssparser", + "html5ever", + "indexmap 1.9.3", + "matches", + "selectors", +] + +[[package]] +name = "language-tags" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libappindicator" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2d3cb96d092b4824cb306c9e544c856a4cb6210c1081945187f7f1924b47e8" +dependencies = [ + "glib", + "gtk", + "gtk-sys", + "libappindicator-sys", + "log 0.4.22", +] + +[[package]] +name = "libappindicator-sys" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1b3b6681973cea8cc3bce7391e6d7d5502720b80a581c9a95c9cbaf592826aa" +dependencies = [ + "gtk-sys", + "libloading", + "once_cell", +] + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if 1.0.0", + "winapi 0.3.9", +] + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", + "redox_syscall 0.5.3", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "lock_api" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg 1.3.0", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" +dependencies = [ + "log 0.4.22", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "loom" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" +dependencies = [ + "cfg-if 1.0.0", + "generator", + "scoped-tls", + "serde", + "serde_json", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "markup5ever" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016" +dependencies = [ + "log 0.4.22", + "phf 0.10.1", + "phf_codegen 0.10.0", + "string_cache", + "string_cache_codegen", + "tendril", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "maybe-uninit" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg 1.3.0", +] + +[[package]] +name = "mime" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" +dependencies = [ + "log 0.3.9", +] + +[[package]] +name = "miniz_oxide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "0.6.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" +dependencies = [ + "cfg-if 0.1.10", + "fuchsia-zircon", + "fuchsia-zircon-sys", + "iovec", + "kernel32-sys", + "libc", + "log 0.4.22", + "miow", + "net2", + "slab", + "winapi 0.2.8", +] + +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", +] + +[[package]] +name = "miow" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" +dependencies = [ + "kernel32-sys", + "net2", + "winapi 0.2.8", + "ws2_32-sys", +] + +[[package]] +name = "native-tls" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +dependencies = [ + "libc", + "log 0.4.22", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "ndk" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" +dependencies = [ + "bitflags 1.3.2", + "jni-sys", + "ndk-sys", + "num_enum", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "net2" +version = "0.2.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b13b648036a2339d06de780866fbdfda0dde886de7b3af2ddeba8b14f4ee34ac" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi 0.3.9", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg 1.3.0", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "object" +version = "0.36.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "opaque-debug" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" + +[[package]] +name = "open" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2078c0039e6a54a0c42c28faa984e115fb4c2d5bf2208f77d1961002df8576f8" +dependencies = [ + "pathdiff", + "windows-sys 0.42.0", +] + +[[package]] +name = "openssl" +version = "0.10.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +dependencies = [ + "bitflags 2.6.0", + "cfg-if 1.0.0", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.74", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "os_pipe" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ffd2b0a5634335b135d5728d84c5e0fd726954b87111f7506a61c502280d982" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "pango" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f" +dependencies = [ + "bitflags 1.3.2", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps 6.2.2", +] + +[[package]] +name = "parking_lot" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" +dependencies = [ + "lock_api 0.3.4", + "parking_lot_core 0.6.3", + "rustc_version 0.2.3", +] + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api 0.4.12", + "parking_lot_core 0.9.10", +] + +[[package]] +name = "parking_lot_core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66b810a62be75176a80873726630147a5ca780cd33921e0b5709033e66b0a" +dependencies = [ + "cfg-if 0.1.10", + "cloudabi", + "libc", + "redox_syscall 0.1.57", + "rustc_version 0.2.3", + "smallvec 0.6.14", + "winapi 0.3.9", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall 0.5.3", + "smallvec 1.13.2", + "windows-targets 0.52.6", +] + +[[package]] +name = "pathdiff" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" + +[[package]] +name = "percent-encoding" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "phf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" +dependencies = [ + "phf_macros 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", +] + +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_shared 0.10.0", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros 0.11.2", + "phf_shared 0.11.2", +] + +[[package]] +name = "phf_codegen" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", +] + +[[package]] +name = "phf_codegen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", +] + +[[package]] +name = "phf_generator" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" +dependencies = [ + "phf_shared 0.8.0", + "rand 0.7.3", +] + +[[package]] +name = "phf_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +dependencies = [ + "phf_shared 0.10.0", + "rand 0.8.5", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared 0.11.2", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator 0.11.2", + "phf_shared 0.11.2", + "proc-macro2", + "quote", + "syn 2.0.74", +] + +[[package]] +name = "phf_shared" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "plist" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" +dependencies = [ + "base64 0.22.1", + "indexmap 2.4.0", + "quick-xml", + "serde", + "time 0.3.36", +] + +[[package]] +name = "png" +version = "0.17.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check 0.9.5", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check 0.9.5", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "pytubepp-helper" +version = "0.1.0" +dependencies = [ + "futures-util", + "serde", + "serde_json", + "tauri", + "tauri-build", + "tokio", + "tokio-tungstenite", +] + +[[package]] +name = "pytubepp-helper-autostart" +version = "0.1.0" +dependencies = [ + "serde_json", + "websocket", + "winresource", +] + +[[package]] +name = "pytubepp-helper-msghost" +version = "0.1.0" +dependencies = [ + "serde_json", + "websocket", + "winresource", +] + +[[package]] +name = "quick-xml" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" +dependencies = [ + "autocfg 0.1.8", + "libc", + "rand_chacha 0.1.1", + "rand_core 0.4.2", + "rand_hc 0.1.0", + "rand_isaac", + "rand_jitter", + "rand_os", + "rand_pcg 0.1.2", + "rand_xorshift", + "winapi 0.3.9", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc 0.2.0", + "rand_pcg 0.2.1", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" +dependencies = [ + "autocfg 0.1.8", + "rand_core 0.3.1", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.15", +] + +[[package]] +name = "rand_hc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_isaac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rand_jitter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" +dependencies = [ + "libc", + "rand_core 0.4.2", + "winapi 0.3.9", +] + +[[package]] +name = "rand_os" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" +dependencies = [ + "cloudabi", + "fuchsia-cprng", + "libc", + "rand_core 0.4.2", + "rdrand", + "winapi 0.3.9", +] + +[[package]] +name = "rand_pcg" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" +dependencies = [ + "autocfg 0.1.8", + "rand_core 0.4.2", +] + +[[package]] +name = "rand_pcg" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_xorshift" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "raw-window-handle" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "redox_syscall" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" + +[[package]] +name = "redox_syscall" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "redox_users" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +dependencies = [ + "getrandom 0.2.15", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver 1.0.23", +] + +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "safemem" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "selectors" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" +dependencies = [ + "bitflags 1.3.2", + "cssparser", + "derive_more", + "fxhash", + "log 0.4.22", + "matches", + "phf 0.8.0", + "phf_codegen 0.8.0", + "precomputed-hash", + "servo_arc", + "smallvec 1.13.2", + "thin-slice", +] + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "serde" +version = "1.0.207" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5665e14a49a4ea1b91029ba7d3bca9f299e1f7cfa194388ccc20f14743e784f2" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.207" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aea2634c86b0e8ef2cfdc0c340baede54ec27b1e46febd7f80dffb2aa44a00e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.74", +] + +[[package]] +name = "serde_json" +version = "1.0.124" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66ad62847a56b3dba58cc891acd13884b9c61138d330c0d7b6181713d4fce38d" +dependencies = [ + "indexmap 2.4.0", + "itoa 1.0.11", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.74", +] + +[[package]] +name = "serde_spanned" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_with" +version = "3.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.4.0", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time 0.3.36", +] + +[[package]] +name = "serde_with_macros" +version = "3.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.74", +] + +[[package]] +name = "serialize-to-javascript" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" +dependencies = [ + "serde", + "serde_json", + "serialize-to-javascript-impl", +] + +[[package]] +name = "serialize-to-javascript-impl" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "servo_arc" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" +dependencies = [ + "nodrop", + "stable_deref_trait", +] + +[[package]] +name = "sha-1" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" +dependencies = [ + "block-buffer 0.7.3", + "digest 0.8.1", + "fake-simd", + "opaque-debug", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shared_child" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09fa9338aed9a1df411814a5b2252f7cd206c55ae9bf2fa763f8de84603aa60c" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg 1.3.0", +] + +[[package]] +name = "smallvec" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0" +dependencies = [ + "maybe-uninit", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "soup2" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2b4d76501d8ba387cf0fefbe055c3e0a59891d09f0f995ae4e4b16f6b60f3c0" +dependencies = [ + "bitflags 1.3.2", + "gio", + "glib", + "libc", + "once_cell", + "soup2-sys", +] + +[[package]] +name = "soup2-sys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "009ef427103fcb17f802871647a7fa6c60cbb654b4c4e4c0ac60a31c5f6dc9cf" +dependencies = [ + "bitflags 1.3.2", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps 5.0.0", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "state" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" +dependencies = [ + "loom", +] + +[[package]] +name = "string_cache" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +dependencies = [ + "new_debug_unreachable", + "once_cell", + "parking_lot 0.12.3", + "phf_shared 0.10.0", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fceb41e3d546d0bd83421d3409b1460cc7444cd389341a4c880fe7a042cb3d7" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "system-deps" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e" +dependencies = [ + "cfg-expr 0.9.1", + "heck 0.3.3", + "pkg-config", + "toml 0.5.11", + "version-compare 0.0.11", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr 0.15.8", + "heck 0.5.0", + "pkg-config", + "toml 0.8.19", + "version-compare 0.2.0", +] + +[[package]] +name = "tao" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "575c856fc21e551074869dcfaad8f706412bd5b803dfa0fbf6881c4ff4bfafab" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "cc", + "cocoa", + "core-foundation", + "core-graphics", + "crossbeam-channel", + "dirs-next", + "dispatch", + "gdk", + "gdk-pixbuf", + "gdk-sys", + "gdkwayland-sys", + "gdkx11-sys", + "gio", + "glib", + "glib-sys", + "gtk", + "image", + "instant", + "jni", + "lazy_static", + "libappindicator", + "libc", + "log 0.4.22", + "ndk", + "ndk-context", + "ndk-sys", + "objc", + "once_cell", + "parking_lot 0.12.3", + "png", + "raw-window-handle", + "scopeguard", + "serde", + "tao-macros", + "unicode-segmentation", + "uuid", + "windows 0.39.0", + "windows-implement", + "x11-dl", +] + +[[package]] +name = "tao-macros" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec114582505d158b669b136e6851f85840c109819d77c42bb7c0709f727d18c2" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "tar" +version = "0.4.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb797dad5fb5b76fcf519e702f4a589483b5ef06567f160c392832c1f5e44909" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "tauri" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "336bc661a3f3250853fa83c6e5245449ed1c26dce5dcb28bdee7efedf6278806" +dependencies = [ + "anyhow", + "cocoa", + "dirs-next", + "dunce", + "embed_plist", + "encoding_rs", + "flate2", + "futures-util", + "getrandom 0.2.15", + "glib", + "glob", + "gtk", + "heck 0.5.0", + "http 0.2.12", + "ignore", + "objc", + "once_cell", + "open", + "os_pipe", + "percent-encoding 2.3.1", + "rand 0.8.5", + "raw-window-handle", + "regex", + "semver 1.0.23", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "shared_child", + "state", + "tar", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "tempfile", + "thiserror", + "tokio", + "url 2.5.2", + "uuid", + "webkit2gtk", + "webview2-com", + "windows 0.39.0", +] + +[[package]] +name = "tauri-build" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c6ec7a5c3296330c7818478948b422967ce4649094696c985f61d50076d29c" +dependencies = [ + "anyhow", + "cargo_toml", + "dirs-next", + "heck 0.5.0", + "json-patch", + "semver 1.0.23", + "serde", + "serde_json", + "tauri-utils", + "tauri-winres", + "walkdir", +] + +[[package]] +name = "tauri-codegen" +version = "1.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1aed706708ff1200ec12de9cfbf2582b5d8ec05f6a7293911091effbd22036b" +dependencies = [ + "base64 0.21.7", + "brotli", + "ico", + "json-patch", + "plist", + "png", + "proc-macro2", + "quote", + "regex", + "semver 1.0.23", + "serde", + "serde_json", + "sha2", + "tauri-utils", + "thiserror", + "time 0.3.36", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-macros" +version = "1.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b88f831d2973ae4f81a706a0004e67dac87f2e4439973bbe98efbd73825d8ede" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 1.0.109", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-runtime" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3068ed62b63dedc705558f4248c7ecbd5561f0f8050949859ea0db2326f26012" +dependencies = [ + "gtk", + "http 0.2.12", + "http-range", + "rand 0.8.5", + "raw-window-handle", + "serde", + "serde_json", + "tauri-utils", + "thiserror", + "url 2.5.2", + "uuid", + "webview2-com", + "windows 0.39.0", +] + +[[package]] +name = "tauri-runtime-wry" +version = "0.14.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c3db170233096aa30330feadcd895bf9317be97e624458560a20e814db7955" +dependencies = [ + "cocoa", + "gtk", + "percent-encoding 2.3.1", + "rand 0.8.5", + "raw-window-handle", + "tauri-runtime", + "tauri-utils", + "uuid", + "webkit2gtk", + "webview2-com", + "windows 0.39.0", + "wry", +] + +[[package]] +name = "tauri-utils" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2826db448309d382dac14d520f0c0a40839b87b57b977e59cf5f296b3ace6a93" +dependencies = [ + "brotli", + "ctor", + "dunce", + "glob", + "heck 0.5.0", + "html5ever", + "infer", + "json-patch", + "kuchikiki", + "log 0.4.22", + "memchr", + "phf 0.11.2", + "proc-macro2", + "quote", + "semver 1.0.23", + "serde", + "serde_json", + "serde_with", + "thiserror", + "url 2.5.2", + "walkdir", + "windows-version", +] + +[[package]] +name = "tauri-winres" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb" +dependencies = [ + "embed-resource", + "toml 0.7.8", +] + +[[package]] +name = "tempfile" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" +dependencies = [ + "cfg-if 1.0.0", + "fastrand", + "once_cell", + "rustix", + "windows-sys 0.59.0", +] + +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + +[[package]] +name = "thin-slice" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" + +[[package]] +name = "thiserror" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.74", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if 1.0.0", + "once_cell", +] + +[[package]] +name = "time" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" +dependencies = [ + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", + "winapi 0.3.9", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa 1.0.11", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinyvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.39.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" +dependencies = [ + "backtrace", + "bytes 1.7.1", + "libc", + "mio 1.0.2", + "parking_lot 0.12.3", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-codec" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b" +dependencies = [ + "bytes 0.4.12", + "futures", + "tokio-io", +] + +[[package]] +name = "tokio-executor" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671" +dependencies = [ + "crossbeam-utils 0.7.2", + "futures", +] + +[[package]] +name = "tokio-io" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" +dependencies = [ + "bytes 0.4.12", + "futures", + "log 0.4.22", +] + +[[package]] +name = "tokio-macros" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.74", +] + +[[package]] +name = "tokio-reactor" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351" +dependencies = [ + "crossbeam-utils 0.7.2", + "futures", + "lazy_static", + "log 0.4.22", + "mio 0.6.23", + "num_cpus", + "parking_lot 0.9.0", + "slab", + "tokio-executor", + "tokio-io", + "tokio-sync", +] + +[[package]] +name = "tokio-sync" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee" +dependencies = [ + "fnv", + "futures", +] + +[[package]] +name = "tokio-tcp" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72" +dependencies = [ + "bytes 0.4.12", + "futures", + "iovec", + "mio 0.6.23", + "tokio-io", + "tokio-reactor", +] + +[[package]] +name = "tokio-tls" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "354b8cd83825b3c20217a9dc174d6a0c67441a2fae5c41bcb1ea6679f6ae0f7c" +dependencies = [ + "futures", + "native-tls", + "tokio-io", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6989540ced10490aaf14e6bad2e3d33728a2813310a0c71d1574304c49631cd" +dependencies = [ + "futures-util", + "log 0.4.22", + "tokio", + "tungstenite", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.15", +] + +[[package]] +name = "toml" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.22.20", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.4.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" +dependencies = [ + "indexmap 2.4.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.6.18", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.74", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log 0.4.22", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec 1.13.2", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "traitobject" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" + +[[package]] +name = "tungstenite" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e2ce1e47ed2994fd43b04c8f618008d4cabdd5ee34027cf14f9d918edd9c8" +dependencies = [ + "byteorder", + "bytes 1.7.1", + "data-encoding", + "http 1.1.0", + "httparse", + "log 0.4.22", + "rand 0.8.5", + "sha1", + "thiserror", + "utf-8", +] + +[[package]] +name = "typeable" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicase" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" +dependencies = [ + "version_check 0.1.5", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "url" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" +dependencies = [ + "idna 0.1.5", + "matches", + "percent-encoding 1.0.1", +] + +[[package]] +name = "url" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +dependencies = [ + "form_urlencoded", + "idna 0.5.0", + "percent-encoding 2.3.1", + "serde", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "uuid" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +dependencies = [ + "getrandom 0.2.15", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version-compare" +version = "0.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" + +[[package]] +name = "version-compare" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" + +[[package]] +name = "version_check" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +dependencies = [ + "cfg-if 1.0.0", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +dependencies = [ + "bumpalo", + "log 0.4.22", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.74", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.74", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" + +[[package]] +name = "webkit2gtk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8f859735e4a452aeb28c6c56a852967a8a76c8eb1cc32dbf931ad28a13d6370" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup2", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d76ca6ecc47aeba01ec61e480139dda143796abcae6f83bcddf50d6b5b1dcf3" +dependencies = [ + "atk-sys", + "bitflags 1.3.2", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pango-sys", + "pkg-config", + "soup2-sys", + "system-deps 6.2.2", +] + +[[package]] +name = "websocket" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "319bacd7682c7dfe1444e7cb1aed23bf5b1d837d722925f531e1665bd21a4603" +dependencies = [ + "bytes 0.4.12", + "futures", + "hyper", + "native-tls", + "rand 0.6.5", + "tokio-codec", + "tokio-io", + "tokio-reactor", + "tokio-tcp", + "tokio-tls", + "unicase", + "url 1.7.2", + "websocket-base", +] + +[[package]] +name = "websocket-base" +version = "0.26.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49aec794b07318993d1db16156d5a9c750120597a5ee40c6b928d416186cb138" +dependencies = [ + "base64 0.10.1", + "bitflags 1.3.2", + "byteorder", + "bytes 0.4.12", + "futures", + "native-tls", + "rand 0.6.5", + "sha-1", + "tokio-codec", + "tokio-io", + "tokio-tcp", + "tokio-tls", +] + +[[package]] +name = "webview2-com" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4a769c9f1a64a8734bde70caafac2b96cada12cd4aefa49196b3a386b8b4178" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows 0.39.0", + "windows-implement", +] + +[[package]] +name = "webview2-com-macros" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "webview2-com-sys" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aac48ef20ddf657755fdcda8dfed2a7b4fc7e4581acce6fe9b88c3d64f29dee7" +dependencies = [ + "regex", + "serde", + "serde_json", + "thiserror", + "windows 0.39.0", + "windows-bindgen", + "windows-metadata", +] + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a" +dependencies = [ + "windows-implement", + "windows_aarch64_msvc 0.39.0", + "windows_i686_gnu 0.39.0", + "windows_i686_msvc 0.39.0", + "windows_x86_64_gnu 0.39.0", + "windows_x86_64_msvc 0.39.0", +] + +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-bindgen" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68003dbd0e38abc0fb85b939240f4bce37c43a5981d3df37ccbaaa981b47cb41" +dependencies = [ + "windows-metadata", + "windows-tokens", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-implement" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7" +dependencies = [ + "syn 1.0.109", + "windows-tokens", +] + +[[package]] +name = "windows-metadata" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ee5e275231f07c6e240d14f34e1b635bf1faa1c76c57cfd59a5cdb9848e4278" + +[[package]] +name = "windows-sys" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-tokens" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597" + +[[package]] +name = "windows-version" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6998aa457c9ba8ff2fb9f13e9d2a930dabcea28f1d0ab94d687d8b3654844515" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +dependencies = [ + "cfg-if 1.0.0", + "windows-sys 0.48.0", +] + +[[package]] +name = "winresource" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77e2aaaf8cfa92078c0c0375423d631f82f2f57979c2884fdd5f604a11e45329" +dependencies = [ + "toml 0.7.8", + "version_check 0.9.5", +] + +[[package]] +name = "wry" +version = "0.24.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00711278ed357350d44c749c286786ecac644e044e4da410d466212152383b45" +dependencies = [ + "base64 0.13.1", + "block", + "cocoa", + "core-graphics", + "crossbeam-channel", + "dunce", + "gdk", + "gio", + "glib", + "gtk", + "html5ever", + "http 0.2.12", + "kuchikiki", + "libc", + "log 0.4.22", + "objc", + "objc_id", + "once_cell", + "serde", + "serde_json", + "sha2", + "soup2", + "tao", + "thiserror", + "url 2.5.2", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows 0.39.0", + "windows-implement", +] + +[[package]] +name = "ws2_32-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "xattr" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" +dependencies = [ + "libc", + "linux-raw-sys", + "rustix", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.74", +] diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml new file mode 100644 index 0000000..dd377fc --- /dev/null +++ b/src-tauri/Cargo.toml @@ -0,0 +1,30 @@ +[package] +name = "pytubepp-helper" +version = "0.1.0" +description = "PytubePP Helper" +authors = ["neosubhamoy"] +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[build-dependencies] +tauri-build = { version = "1", features = [] } + +[dependencies] +tauri = { version = "1", features = [ "process-relaunch", "window-start-dragging", "window-close", "window-unmaximize", "process-exit", "window-show", "window-unminimize", "window-hide", "window-minimize", "window-maximize", "system-tray", "shell-all"] } +serde = { version = "1", features = ["derive"] } +serde_json = "1" +tokio = { version = "1.39.2", features = ["full"] } +tokio-tungstenite = "*" +futures-util = "0.3.30" + +[features] +# This feature is used for production builds or when a dev server is not specified, DO NOT REMOVE!! +custom-protocol = ["tauri/custom-protocol"] + +[workspace] +members = [ + ".", + "msghost", + "autostart" +] diff --git a/src-tauri/autostart/Cargo.lock b/src-tauri/autostart/Cargo.lock new file mode 100644 index 0000000..df3ab83 --- /dev/null +++ b/src-tauri/autostart/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "pytubepp-helper-autostart" +version = "0.1.0" \ No newline at end of file diff --git a/src-tauri/autostart/Cargo.toml b/src-tauri/autostart/Cargo.toml new file mode 100644 index 0000000..d656359 --- /dev/null +++ b/src-tauri/autostart/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "pytubepp-helper-autostart" +version = "0.1.0" +description = "PytubePP Helper (Autostart)" +authors = ["neosubhamoy"] +edition = "2021" +build = "build.rs" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +websocket = "0.27.1" +serde_json = "1.0" + +[build-dependencies] +winresource = "0.1.17" \ No newline at end of file diff --git a/src-tauri/autostart/build.rs b/src-tauri/autostart/build.rs new file mode 100644 index 0000000..b8ed88f --- /dev/null +++ b/src-tauri/autostart/build.rs @@ -0,0 +1,8 @@ +extern crate winresource; + +fn main() { + if std::env::var("CARGO_CFG_TARGET_OS").unwrap() == "windows" { + let res = winresource::WindowsResource::new(); + res.compile().unwrap(); + } +} \ No newline at end of file diff --git a/src-tauri/autostart/src/main.rs b/src-tauri/autostart/src/main.rs new file mode 100644 index 0000000..9665497 --- /dev/null +++ b/src-tauri/autostart/src/main.rs @@ -0,0 +1,55 @@ +#![windows_subsystem = "windows"] + +use std::process::Command; +use websocket::client::ClientBuilder; +use websocket::OwnedMessage; +use std::thread::sleep; +use std::time::Duration; + +fn connect_with_retry(url: &str, max_attempts: u32) -> Result, Box> { + let mut attempts = 0; + loop { + match ClientBuilder::new(url).unwrap().connect_insecure() { + Ok(client) => { + eprintln!("Successfully connected to Tauri app :)"); + return Ok(client); + } + Err(e) => { + attempts += 1; + if attempts >= max_attempts { + return Err(Box::new(e)); + } + let wait_time = Duration::from_secs(2u64.pow(attempts)); + eprintln!("Connection attempt {} failed. Retrying in {:?}...", attempts, wait_time); + sleep(wait_time); + } + } + } +} + +fn main() -> Result<(), Box> { + // Launch the main application + let _ = Command::new("pytubepp-helper.exe") + .spawn(); + + // Connect with the Tauri app + let websocket_url = "ws://localhost:3030"; + eprintln!("Attempting to connect to {}", websocket_url); + + let mut client = match connect_with_retry(websocket_url, 2) { + Ok(client) => client, + Err(e) => { + eprintln!("Failed to connect after multiple attempts: {:?}", e); + return Err(e); + } + }; + + // Send message to Tauri app + client.send_message(&OwnedMessage::Text(serde_json::json!({ + "url": "", + "command": "autostart", + "argument": "" + }).to_string()))?; + + Ok(()) +} \ No newline at end of file diff --git a/src-tauri/build.rs b/src-tauri/build.rs new file mode 100644 index 0000000..d860e1e --- /dev/null +++ b/src-tauri/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/src-tauri/icons/128x128.png b/src-tauri/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..46efed9f5d858fc15dd081edeef656ab085c8fc4 GIT binary patch literal 3472 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 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/32x32.png b/src-tauri/icons/32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..8768a0a303ff41c93b73c5652f4da3302e602dde GIT binary patch literal 1645 zcmah~c~p#R82^otGNdFYZAaOnFi1p5j24P6xymx;#tmf|*K$pAj5t!)R>auKN!CsY z*Pf+&uV@pID3h9|(lpcZ)oj(wdtdecz3+Ly=Xt;9{XP5hoi9Fkv7b4|jsw6vz@N92 za;G1U8JkjGdO{w+MsQ%r0x7BpA!_(^z)uU0Zzyd?kQ85a;A-H-U|AK)>v2Vn+r&t! z@L3A!cbsj4xE6o5VT}w=TCu(jVS2bW;8G)wwPKwNFIx~ECfqj_g`IsKc%AIMsqpGCWlvPKlUi2-ynf0C+j0|fzO`#2;&DheyilEUNI}Ft*szPN4eCbsuM(8n`9;j1lhsLRg za}#2z#Mq|q$|^FncIz=#k8zsS=Sa6vjytU^K^<;rPM3D9PFHWt_|~VCg6XF5Q>yMU z+bf~8*FJU8n_4HF<;YTTuW9+oofz4bl}|AYf+>~bo)UXi_^sD_15#-^3LK$$T8fSn z<+ZrqQ^VubJFN*-QDPs>lvbM-M7h33g=+gM_ZD_k zlc1)Vy`84h#III4CF|iL>;HHA(aL5-(c0?L-ZAmjwRqgb5`Q0%R?o?l_kYw9Bcsid z;klBVq1+&&-BhnmZN)0u+*Yim#uWo4hW2jSM0#$)udVn+iS4>e1-jI?szC>}m`q_! zgO0V0*jIypIwEdsB}FY((G=Vsc2mK9tl-|S!HepCA7r?z+EPp9bSu|XG)I&%hbo(Q z$yJfE=EyIy!6me7I!tQfW~+p?MvbA-?U@b}Xw$1v(1w+CGO3~(^C;C~iU!l^L5GPH z&;frs9&~OQgtTE*&y-eG;S(KW2FtZ@*I;%#mT2HfRivn(l+KBtFp%ymOCHJr7IrRO zyo`Pb|GQZKh0xK`o@~87&QzE^SH2)!eX%PeI(X=wE`O)|N=fK|vIb|jv2RQY-ABqZL)s0NoSYp3 zX0cG@k^5<*B-ZMPzG(9x+2o1t8%iY49Y%5UKk&_dvK+=rO!d4ub?V2rZ?`f@B7y#M z-ohiXGgy{}x>rXnEvJ}_+E(P2vw4F5frWid|1b$oDRfS%l<~SS18{n z@RRMexkl@dlnb-<-Uk=j@%Sa8k^o8U-UeQYxX#unwie5;TDXjIkeaHmRVEjfbEU|4 zPiJT9Sks7(@4H^8RfL_KHQy>Ycg4w^#C+qr7&FmBuXure!wWHIjziyqN;{5Y!o9fs zZQd4%8y@MbZV0p!vvUr7oF++7m4`Yr16OgyvT&Nn3gLns*8X!g&kmfk$IkQat*7P( z#msrdEH|4z%MYpVF!SZMuHCtukS9)z-OQYfGZk^g;dM6RH(qCah6Dz&dHhA8`*RhK zg`&en<3p38E+Bcj$JzOB_UcDiZCU0R%(oA!V$b-}wd-=eSA;Gt!hxK5<` literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square107x107Logo.png b/src-tauri/icons/Square107x107Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0ca4f27198838968bd60ed7d371bfa23496b7fe5 GIT binary patch literal 2863 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 Y2S8W#vM)6=T>t<807*qoM6N<$f*y@n<^TWy literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square284x284Logo.png b/src-tauri/icons/Square284x284Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c021d2ba76619c08969ab688db3b27f29257aa6f GIT binary patch literal 7737 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 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square30x30Logo.png b/src-tauri/icons/Square30x30Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..621970023096ed9f494ba18ace15421a45cd65fa GIT binary patch literal 903 zcmV;219<$2P)2 z+CUKPMqaqGiH;zb!R4$B-WXS^YzQr=@UH>k4?*L)&R=zYjBrZenKdc9|JlS$SO*RJ zKt8FSTDAdk1g_WPAO!p^V!AuL;Lm;uQyV;zKq)J3i(;q*;k+pD%f3eltU`PYdy9(k0&%` zuWAPcV6|-y?|?7O1W!KSK}pbk8#~!|FA@(VJkt^V@0lio{afoAeo*f&$W2s6${5!1eKvAGD2$GZwSB98L2ZVS- zKn8ENRkZ*sb!@QugOrQNK3(sy1v%J#m|rpB+h|Nkqa3FRT>74xSs{#&saU2Lf!_Iq zKmuKAESh`gs!fneGWn+nf}l?7jE$HW!Af&vE5=G!QU)U2v&HLIBGXKk4nQx{hsHjL zLPMAo5=*uInFbq7(aa`Y2VX5wCmaeqvECOFv)a>0t>ZaEb*cJccER=BB?KFZhV$c^ znL*l8x*UYZv4WK|j?~Jt6~~F%{pk~z5A*>^M`?r5m9@RJ_x|uEtX(6Vk@Y()MVto* z93wr)%3m%|#OZ~srm>zF(JvDuTq*@;d&^>_BJm5hOU`3FjG70L#Vzv9I?`<7$T@

jU?lMi@tgxr7CqX_r3uw^y4tVU3Pm0sw;|1WSUO%?=bG`*Kmz6u4{#ti;T7AWIBAEh!(Y zz>O01&#X?Ds@L)Sb{CkG#Yz4$3o d@96)?#cz^xWoA}>B$xmI002ovPDHLkV1l3&k#zt7 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square310x310Logo.png b/src-tauri/icons/Square310x310Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f9bc04839491e66c07b16ab03743c0c53b4109cc GIT binary patch literal 8591 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 JPDHLkV1lm|RXG3v literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square71x71Logo.png b/src-tauri/icons/Square71x71Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..63440d7984936a9caa89275928d8dce97e4d033b GIT binary patch literal 2011 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�ey97Q}$+LQ5eLz`kb+Q&HfEcjD;nVogIEDWI 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

Q2%JoHo%SC=Ua6t%e)18yHl%W}BG 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 SXP&ACE0(NToW02J + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src-tauri/msghost/Cargo.lock b/src-tauri/msghost/Cargo.lock new file mode 100644 index 0000000..9156715 --- /dev/null +++ b/src-tauri/msghost/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "pytubepp-helper-msghost" +version = "0.1.0" diff --git a/src-tauri/msghost/Cargo.toml b/src-tauri/msghost/Cargo.toml new file mode 100644 index 0000000..9a0005b --- /dev/null +++ b/src-tauri/msghost/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "pytubepp-helper-msghost" +version = "0.1.0" +description = "PytubePP Helper Native Messaging Host" +authors = ["neosubhamoy"] +edition = "2021" +build = "build.rs" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +websocket = "0.27.1" +serde_json = "1.0" + +[build-dependencies] +winresource = "0.1.17" \ No newline at end of file diff --git a/src-tauri/msghost/build.rs b/src-tauri/msghost/build.rs new file mode 100644 index 0000000..b8ed88f --- /dev/null +++ b/src-tauri/msghost/build.rs @@ -0,0 +1,8 @@ +extern crate winresource; + +fn main() { + if std::env::var("CARGO_CFG_TARGET_OS").unwrap() == "windows" { + let res = winresource::WindowsResource::new(); + res.compile().unwrap(); + } +} \ No newline at end of file diff --git a/src-tauri/msghost/src/main.rs b/src-tauri/msghost/src/main.rs new file mode 100644 index 0000000..c21a7b7 --- /dev/null +++ b/src-tauri/msghost/src/main.rs @@ -0,0 +1,103 @@ +use std::io::{self, Read, Write}; +use websocket::client::ClientBuilder; +use websocket::OwnedMessage; +use std::thread::sleep; +use std::time::Duration; +use serde_json::Value; + +fn connect_with_retry(url: &str, max_attempts: u32) -> Result, Box> { + let mut attempts = 0; + loop { + match ClientBuilder::new(url).unwrap().connect_insecure() { + Ok(client) => { + eprintln!("Successfully connected to Tauri app :)"); + return Ok(client); + } + Err(e) => { + attempts += 1; + if attempts >= max_attempts { + return Err(Box::new(e)); + } + let wait_time = Duration::from_secs(2u64.pow(attempts)); + eprintln!("Connection attempt {} failed. Retrying in {:?}...", attempts, wait_time); + sleep(wait_time); + } + } + } +} + +fn read_stdin_message() -> Result> { + let mut stdin = io::stdin(); + let mut length_bytes = [0u8; 4]; + stdin.read_exact(&mut length_bytes)?; + let length = u32::from_ne_bytes(length_bytes) as usize; + + let mut buffer = vec![0u8; length]; + stdin.read_exact(&mut buffer)?; + + let message = String::from_utf8(buffer)?; + Ok(message) +} + +fn write_stdout_message(message: &str) -> Result<(), Box> { + let message_bytes = message.as_bytes(); + let message_size = message_bytes.len(); + io::stdout().write_all(&(message_size as u32).to_ne_bytes())?; + io::stdout().write_all(message_bytes)?; + io::stdout().flush()?; + Ok(()) +} + +fn main() -> Result<(), Box> { + eprintln!("Waiting for message from extension..."); + + let input = match read_stdin_message() { + Ok(msg) => { + eprintln!("Received message: {}", msg); + msg + }, + Err(e) => { + eprintln!("Error reading message: {:?}", e); + return Err(e); + } + }; + + // Send immediate response to the extension + write_stdout_message(&serde_json::json!({ + "status": "received", + "message": "Message received by native host" + }).to_string())?; + + let parsed: Value = serde_json::from_str(&input)?; + + let websocket_url = "ws://localhost:3030"; + eprintln!("Attempting to connect to {}", websocket_url); + + let mut client = match connect_with_retry(websocket_url, 2) { + Ok(client) => client, + Err(e) => { + eprintln!("Failed to connect after multiple attempts: {:?}", e); + write_stdout_message(&serde_json::json!({ + "status": "error", + "message": "Failed to connect to Tauri app" + }).to_string())?; + return Err(e); + } + }; + + // Send message to Tauri app + client.send_message(&OwnedMessage::Text(parsed.to_string()))?; + + // Receive response from Tauri app + let message = client.recv_message()?; + + // Send Tauri app's response back to browser extension + if let OwnedMessage::Text(text) = message { + write_stdout_message(&serde_json::json!({ + "status": "success", + "response": text + }).to_string())?; + } + + Ok(()) +} \ No newline at end of file diff --git a/src-tauri/pytubepp-helper-msghost-moz.json b/src-tauri/pytubepp-helper-msghost-moz.json new file mode 100644 index 0000000..d0f6455 --- /dev/null +++ b/src-tauri/pytubepp-helper-msghost-moz.json @@ -0,0 +1,7 @@ +{ + "name": "com.neosubhamoy.pytubepp.helper", + "description": "A helper app for pytubepp-extention to communicate with pytubepp-cli", + "path": "pytubepp-helper-msghost.exe", + "type": "stdio", + "allowed_extensions": ["pytubepp-addon@neosubhamoy.com"] +} \ No newline at end of file diff --git a/src-tauri/pytubepp-helper-msghost.json b/src-tauri/pytubepp-helper-msghost.json new file mode 100644 index 0000000..944b806 --- /dev/null +++ b/src-tauri/pytubepp-helper-msghost.json @@ -0,0 +1,7 @@ +{ + "name": "com.neosubhamoy.pytubepp.helper", + "description": "A helper app for pytubepp-extention to communicate with pytubepp-cli", + "path": "pytubepp-helper-msghost.exe", + "type": "stdio", + "allowed_origins": ["chrome-extension://adebedkaedobamilbbobbajepnnkkfcg/"] +} \ No newline at end of file diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs new file mode 100644 index 0000000..750ee60 --- /dev/null +++ b/src-tauri/src/main.rs @@ -0,0 +1,231 @@ +// Prevents additional console window on Windows in release, DO NOT REMOVE!! +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] + +use std::{process::Command, sync::Arc, env}; +use serde_json::Value; +use tauri::{CustomMenuItem, Manager, SystemTray, SystemTrayEvent, SystemTrayMenu}; +use tokio::{net::{TcpListener, TcpStream}, sync::{Mutex, oneshot}}; +use tokio_tungstenite::accept_async; +use futures_util::{SinkExt, StreamExt}; + +struct ResponseChannel { + sender: Option>, +} + +struct WebSocketState { + sender: Option, tokio_tungstenite::tungstenite::Message>>, + response_channel: ResponseChannel, +} + +// #[tauri::command] +// async fn handle_websocket_message(message: String) -> Result { +// Ok(format!("{}", message)) +// } + +#[tauri::command] +async fn send_to_extension( + message: String, + state: tauri::State<'_, Arc>>, +) -> Result<(), String> { + let mut state = state.lock().await; + if let Some(sender) = &mut state.sender { + sender.send(tokio_tungstenite::tungstenite::Message::Text(message)).await + .map_err(|e| format!("Failed to send message: {}", e))?; + Ok(()) + } else { + Err("No active WebSocket connection".to_string()) + } +} + +#[tauri::command] +async fn receive_frontend_response( + response: String, + state: tauri::State<'_, Arc>>, +) -> Result<(), String> { + let mut state = state.lock().await; + if let Some(sender) = state.response_channel.sender.take() { + sender.send(response).map_err(|e| format!("Failed to send response: {:?}", e))?; + } + Ok(()) +} + +#[tauri::command] +fn fetch_video_info(url: String) { + #[cfg(target_os = "windows")] + { + let command = format!("pytubepp \"{}\" -i", &url); + Command::new("cmd") + .args(["/k", command.as_str()]) + .spawn() + .unwrap(); + } + + #[cfg(target_os = "linux")] + { + let command = format!("pytubepp \"{}\" -i", &url); + Command::new("gnome-terminal") + .args(["--", command.as_str()]) + .spawn() + .unwrap(); + } + + #[cfg(target_os = "macos")] + { + let command = format!("pytubepp \"{}\" -i", &url); + Command::new("osascript") + .arg("-e") + .arg(format!( + "tell app \"Terminal\" to activate do script \"{}\"", + command + )) + .spawn() + .unwrap(); + } +} + +#[tauri::command] +fn download_stream(url: String, stream: String) { + #[cfg(target_os = "windows")] + { + let command = format!("pytubepp \"{}\" -s {}", &url, &stream); + Command::new("cmd") + .args(["/k", command.as_str()]) + .spawn() + .unwrap(); + } + + #[cfg(target_os = "linux")] + { + let command = format!("pytubepp \"{}\" -s {}", &url, &stream); + Command::new("gnome-terminal") + .args(["--", command.as_str()]) + .spawn() + .unwrap(); + } + + #[cfg(target_os = "macos")] + { + let command = format!("pytubepp \"{}\" -s {}", &url, &stream); + Command::new("osascript") + .arg("-e") + .arg(format!( + "tell app \"Terminal\" to activate do script \"{}\"", + command + )) + .spawn() + .unwrap(); + } +} + +#[tokio::main] +async fn main() { + let websocket_state = Arc::new(Mutex::new(WebSocketState { + sender: None, + response_channel: ResponseChannel { sender: None }, + })); + let tray_menu = SystemTrayMenu::new() + .add_item(CustomMenuItem::new("show".to_string(), "Show")) + .add_item(CustomMenuItem::new("quit".to_string(), "Quit")); + + let system_tray = SystemTray::new().with_menu(tray_menu).with_tooltip("PytubePP Helper"); + + tauri::Builder::default() + .system_tray(system_tray) + .on_system_tray_event(|app, event| match event { + SystemTrayEvent::LeftClick { + position: _, + size: _, + .. + } => { + let window = app.get_window("main").unwrap(); + window.show().unwrap(); + window.set_focus().unwrap(); + } + SystemTrayEvent::MenuItemClick { id, .. } => match id.as_str() { + "show" => { + let window = app.get_window("main").unwrap(); + window.show().unwrap(); + window.set_focus().unwrap(); + } + "quit" => { + app.exit(0); + } + _ => {} + }, + _ => {} + }) + .manage(websocket_state.clone()) + .setup(move |app| { + let app_handle = app.handle(); + let ws_state = websocket_state.clone(); + tokio::spawn(async move { + let listener = TcpListener::bind("127.0.0.1:3030").await.unwrap(); + println!("WebSocket server listening on ws://127.0.0.1:3030"); + while let Ok((stream, _)) = listener.accept().await { + let app_handle = app_handle.clone(); + let ws_state = ws_state.clone(); + tokio::spawn(handle_connection(stream, app_handle, ws_state)); + } + }); + Ok(()) + }) + .invoke_handler(tauri::generate_handler![ + // handle_websocket_message, + send_to_extension, + fetch_video_info, + download_stream, + receive_frontend_response + ]) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); +} + +async fn handle_connection(stream: TcpStream, app_handle: tauri::AppHandle, ws_state: Arc>) { + let ws_stream = accept_async(stream).await.unwrap(); + let (ws_sender, mut ws_receiver) = ws_stream.split(); + + // Store the sender in the shared state + { + let mut state = ws_state.lock().await; + state.sender = Some(ws_sender); + } + + println!("New WebSocket connection established"); + + while let Some(msg) = ws_receiver.next().await { + if let Ok(msg) = msg { + if let Ok(text) = msg.to_text() { + println!("Received message: {}", text); + + // Parse the JSON message + if let Ok(json_value) = serde_json::from_str::(text) { + // Create a new channel for this request + let (response_sender, response_receiver) = oneshot::channel(); + { + let mut state = ws_state.lock().await; + state.response_channel.sender = Some(response_sender); + } + + // Emit an event to the frontend + app_handle.emit_all("websocket-message", json_value).unwrap(); + + // Wait for the response from the frontend + let response = response_receiver.await + .unwrap_or_else(|e| format!("Error receiving response: {:?}", e)); + + // Send the response back through WebSocket + let mut state = ws_state.lock().await; + if let Some(sender) = &mut state.sender { + let _ = sender.send(tokio_tungstenite::tungstenite::Message::Text(response)).await; + } + } + } + } + } + + println!("WebSocket connection closed"); + + // Remove the sender from the shared state when the connection closes + let mut state = ws_state.lock().await; + state.sender = None; +} \ No newline at end of file diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json new file mode 100644 index 0000000..f2816c6 --- /dev/null +++ b/src-tauri/tauri.conf.json @@ -0,0 +1,116 @@ +{ + "build": { + "beforeDevCommand": "cargo build --manifest-path=./src-tauri/msghost/Cargo.toml && cargo build --manifest-path=./src-tauri/autostart/Cargo.toml && npm run dev", + "beforeBuildCommand": "cargo build --release --manifest-path=./src-tauri/msghost/Cargo.toml && cargo build --release --manifest-path=./src-tauri/autostart/Cargo.toml && node signFiles.js && node copyFiles.js && npm run build", + "devPath": "http://localhost:1420", + "distDir": "../dist" + }, + "package": { + "productName": "pytubepp-helper", + "version": "0.1.0" + }, + "tauri": { + "allowlist": { + "all": false, + "shell": { + "all": true, + "execute": true, + "sidecar": true, + "open": true, + "scope": [ + { + "name": "is-pytubepp-installed", + "cmd": "pytubepp", + "args": ["--version"] + }, + { + "name": "is-pytubefix-installed", + "cmd": "pytubefix", + "args": ["--version"] + }, + { + "name": "is-ffmpeg-installed", + "cmd": "ffmpeg", + "args": ["-version"] + }, + { + "name": "is-python-installed", + "cmd": "python", + "args": ["--version"] + }, + { + "name": "fetch-video-info", + "cmd": "pytubefix", + "args": [{ "validator": "\\S+"}, "--list"] + } + + ] + }, + "fs": { + "scope": [ + "$RESOURCE/pytubepp-helper-msghost.json", + "$RESOURCE/pytubepp-helper-msghost-moz.json", + "$RESOURCE/pytubepp-helper-msghost.exe", + "$RESOURCE/pytubepp-helper-autostart.exe" + ] + }, + "window": { + "all": false, + "close": true, + "hide": true, + "show": true, + "maximize": true, + "minimize": true, + "unmaximize": true, + "unminimize": true, + "startDragging": true + }, + "process": { + "all": false, + "exit": true, + "relaunch": true + } + }, + "windows": [ + { + "title": "PytubePP Helper", + "width": 500, + "height": 300 + } + ], + "security": { + "csp": null + }, + "bundle": { + "active": true, + "targets": "all", + "identifier": "com.neosubhamoy.pytubepp.helper", + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ], + "windows": { + "certificateThumbprint": "c12a1579698a3cc86ef3b2c942172cd995149b10", + "digestAlgorithm": "sha256", + "timestampUrl": "http://timestamp.sectigo.com", + "wix": { + "fragmentPaths": ["installer/windows/wix-fragment-registry.wxs"], + "componentRefs": ["PytubeppHelperFragmentRegistryEntries"] + } + }, + "resources": [ + "pytubepp-helper-msghost.json", + "pytubepp-helper-msghost-moz.json", + "pytubepp-helper-msghost.exe", + "pytubepp-helper-autostart.exe" + ] + }, + "systemTray": { + "iconPath": "icons/icon.ico", + "iconAsTemplate": true + } + } +} diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000..e69de29 diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..396b7d7 --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,130 @@ +import { useState, useEffect } from "react"; +import "./index.css"; +import { invoke } from "@tauri-apps/api/tauri"; +import { listen } from '@tauri-apps/api/event'; +import { appWindow } from '@tauri-apps/api/window'; +import { ThemeProvider } from "@/components/theme-provider"; +import { Button } from "@/components/ui/button"; +import { InstalledPrograms, WebSocketMessage, } from "./types"; +import { extract_version, is_installed, sendStreamInfo } from "./lib/utils"; + +function App() { + useEffect(() => { + const handleCloseRequested = (event: any) => { + event.preventDefault(); + appWindow.hide(); + }; + + appWindow.onCloseRequested(handleCloseRequested); + }, []); + + const [installedPrograms, setInstalledPrograms] = useState({ + python: { + installed: false, + version: null, + }, + ffmpeg: { + installed: false, + version: null, + }, + pytubefix: { + installed: false, + version: null, + }, + pytubepp: { + installed: false, + version: null, + }, + }); + + useEffect(() => { + const unlisten = listen('websocket-message', (event) => { + if(event.payload.command === 'send-stream-info') { + sendStreamInfo(event.payload.url); + } else if(event.payload.command === 'download-stream') { + const startDownload = async () => { + try { + await invoke('download_stream', { url: event.payload.url, stream: event.payload.argument }); + await invoke('receive_frontend_response', { response: 'Download started' }); + } catch (error) { + console.error(error); + } + }; + startDownload(); + } else if (event.payload.command === 'autostart') { + const handleAppAutostart = async () => { + appWindow.hide(); + await invoke('receive_frontend_response', { response: 'Appwindow Hidden' }); + }; + handleAppAutostart(); + } + }); + + return () => { + unlisten.then(f => f()); + }; + }, []); + + function check_all_programs() { + is_installed('python', '--version').then((result) => { + setInstalledPrograms((prevState) => ({ + ...prevState, + python: { + installed: result.installed, + version: result.output ? extract_version(result.output) : null, + } + })); + }); + is_installed('ffmpeg', '-version').then((result) => { + setInstalledPrograms((prevState) => ({ + ...prevState, + ffmpeg: { + installed: result.installed, + version: result.output ? extract_version(result.output) : null, + } + })); + }); + is_installed('pytubefix', '--version').then((result) => { + setInstalledPrograms((prevState) => ({ + ...prevState, + pytubefix: { + installed: result.installed, + version: result.output ? extract_version(result.output) : null, + } + })); + }); + is_installed('pytubepp', '--version').then((result) => { + setInstalledPrograms((prevState) => ({ + ...prevState, + pytubepp: { + installed: result.installed, + version: result.output ? extract_version(result.output) : null, + } + })); + }); + } + + useEffect(() => { + check_all_programs(); + } + , []); + + return ( + +

+ + ); +} + +export default App; diff --git a/src/assets/react.svg b/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/theme-provider.tsx b/src/components/theme-provider.tsx new file mode 100644 index 0000000..ee5f2db --- /dev/null +++ b/src/components/theme-provider.tsx @@ -0,0 +1,73 @@ +import { createContext, useContext, useEffect, useState } from "react" + +type Theme = "dark" | "light" | "system" + +type ThemeProviderProps = { + children: React.ReactNode + defaultTheme?: Theme + storageKey?: string +} + +type ThemeProviderState = { + theme: Theme + setTheme: (theme: Theme) => void +} + +const initialState: ThemeProviderState = { + theme: "system", + setTheme: () => null, +} + +const ThemeProviderContext = createContext(initialState) + +export function ThemeProvider({ + children, + defaultTheme = "system", + storageKey = "vite-ui-theme", + ...props +}: ThemeProviderProps) { + const [theme, setTheme] = useState( + () => (localStorage.getItem(storageKey) as Theme) || defaultTheme + ) + + useEffect(() => { + const root = window.document.documentElement + + root.classList.remove("light", "dark") + + if (theme === "system") { + const systemTheme = window.matchMedia("(prefers-color-scheme: dark)") + .matches + ? "dark" + : "light" + + root.classList.add(systemTheme) + return + } + + root.classList.add(theme) + }, [theme]) + + const value = { + theme, + setTheme: (theme: Theme) => { + localStorage.setItem(storageKey, theme) + setTheme(theme) + }, + } + + return ( + + {children} + + ) +} + +export const useTheme = () => { + const context = useContext(ThemeProviderContext) + + if (context === undefined) + throw new Error("useTheme must be used within a ThemeProvider") + + return context +} \ No newline at end of file diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx new file mode 100644 index 0000000..0270f64 --- /dev/null +++ b/src/components/ui/button.tsx @@ -0,0 +1,57 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", + { + variants: { + variant: { + default: + "bg-primary text-primary-foreground shadow hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", + outline: + "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-9 px-4 py-2", + sm: "h-8 rounded-md px-3 text-xs", + lg: "h-10 rounded-md px-8", + icon: "h-9 w-9", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button" + return ( + + ) + } +) +Button.displayName = "Button" + +export { Button, buttonVariants } diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..89f6093 --- /dev/null +++ b/src/index.css @@ -0,0 +1,69 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 240 10% 3.9%; + --card: 0 0% 100%; + --card-foreground: 240 10% 3.9%; + --popover: 0 0% 100%; + --popover-foreground: 240 10% 3.9%; + --primary: 240 5.9% 10%; + --primary-foreground: 0 0% 98%; + --secondary: 240 4.8% 95.9%; + --secondary-foreground: 240 5.9% 10%; + --muted: 240 4.8% 95.9%; + --muted-foreground: 240 3.8% 46.1%; + --accent: 240 4.8% 95.9%; + --accent-foreground: 240 5.9% 10%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 0 0% 98%; + --border: 240 5.9% 90%; + --input: 240 5.9% 90%; + --ring: 240 10% 3.9%; + --radius: 0.5rem; + --chart-1: 12 76% 61%; + --chart-2: 173 58% 39%; + --chart-3: 197 37% 24%; + --chart-4: 43 74% 66%; + --chart-5: 27 87% 67%; + } + + .dark { + --background: 240 10% 3.9%; + --foreground: 0 0% 98%; + --card: 240 10% 3.9%; + --card-foreground: 0 0% 98%; + --popover: 240 10% 3.9%; + --popover-foreground: 0 0% 98%; + --primary: 0 0% 98%; + --primary-foreground: 240 5.9% 10%; + --secondary: 240 3.7% 15.9%; + --secondary-foreground: 0 0% 98%; + --muted: 240 3.7% 15.9%; + --muted-foreground: 240 5% 64.9%; + --accent: 240 3.7% 15.9%; + --accent-foreground: 0 0% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 0% 98%; + --border: 240 3.7% 15.9%; + --input: 240 3.7% 15.9%; + --ring: 240 4.9% 83.9%; + --chart-1: 220 70% 50%; + --chart-2: 160 60% 45%; + --chart-3: 30 80% 55%; + --chart-4: 280 65% 60%; + --chart-5: 340 75% 55%; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} \ No newline at end of file diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 0000000..b709305 --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,97 @@ +import { type ClassValue, clsx } from "clsx" +import { twMerge } from "tailwind-merge" +import { Command } from '@tauri-apps/api/shell'; +import { Stream } from "@/types"; +import { invoke } from "@tauri-apps/api"; + +export function extract_xml(input: string): string[] { + const regex = /]+>/g; + const matches = input.match(regex); + return matches ? matches : []; +} + + +function parseAttributes(attributesString: string): Partial { + const attributes: Partial = {}; + const regex = /(\w+)="([^"]*)"/g; + let match; + + while ((match = regex.exec(attributesString)) !== null) { + const key = match[1]; + const value = match[2]; + if (['itag', 'mime_type', 'res', 'fps', 'vcodec'].includes(key)) { + attributes[key as keyof Partial] = value; + } + } + + return attributes; +} + +export function convert_xml_to_json(xmlStrings: string[]): Stream[] { + return xmlStrings + .map(xmlString => { + const attributesString = xmlString.replace('', ''); + return parseAttributes(attributesString); + }) + .filter(stream => stream.res !== undefined) as Stream[]; +} + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} + +export async function is_installed(program: string, arg: string): Promise<{ installed: boolean, output: string | null }> { + try{ + const output = await new Command('is-' + program + '-installed', [arg]).execute(); + if (output.code === 0) { + return { installed: true, output: output.stdout }; + } else { + return { installed: false, output: output.stdout }; + } + } catch (error) { + console.error(error); + return { installed: false, output: null }; + } +} + +export function extract_version(output: string): string | null { + const versionPatterns = [ + /ffmpeg version (\d+\.\d+)/, // Pattern for ffmpeg + /Python (\d+\.\d+\.\d+)/, // Pattern for Python + /pytubefix (\d+\.\d+\.\d+)/, // Pattern for pytubefix + /pytubepp (\d+\.\d+\.\d+)/ // Pattern for pytubepp + ]; + for (const pattern of versionPatterns) { + const match = output.match(pattern); + if (match) { + return match[1]; + } + } + return null; +} + +export async function sendStreamInfo(url: string) { + const fetchData = async () => { + try { + const output = await new Command('fetch-video-info', [url, '--list']).execute(); + if (output.code === 0) { + console.log(output.stdout); + const sendStreamData = async () => { + try { + const streamsstr = JSON.stringify(convert_xml_to_json(extract_xml(output.stdout))) + await invoke('receive_frontend_response', { response: streamsstr }); + } catch (error) { + console.error(error); + } + }; + sendStreamData(); + } else { + console.log(output.stdout); + } + } catch (error) { + console.error(error); + } + }; + + fetchData(); +} \ No newline at end of file diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 0000000..2be325e --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,9 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; +import App from "./App"; + +ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( + + + , +); diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..d2a01ab --- /dev/null +++ b/src/types.ts @@ -0,0 +1,32 @@ +export interface InstalledPrograms { + python: { + installed: boolean; + version: string | null; + }; + ffmpeg: { + installed: boolean; + version: string | null; + }; + pytubefix: { + installed: boolean + version: string | null; + }; + pytubepp: { + installed: boolean; + version: string | null; + }; +} + +export interface WebSocketMessage { + url: string; + command: string; + argument: string; +} + +export interface Stream { + itag: string; + mime_type: string; + res: string; + fps: string; + vcodec: string; +} \ No newline at end of file diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..7cb7e37 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,77 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + darkMode: ["class"], + content: [ + './pages/**/*.{ts,tsx}', + './components/**/*.{ts,tsx}', + './app/**/*.{ts,tsx}', + './src/**/*.{ts,tsx}', + ], + prefix: "", + theme: { + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px", + }, + }, + extend: { + colors: { + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))", + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))", + }, + destructive: { + DEFAULT: "hsl(var(--destructive))", + foreground: "hsl(var(--destructive-foreground))", + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))", + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))", + }, + popover: { + DEFAULT: "hsl(var(--popover))", + foreground: "hsl(var(--popover-foreground))", + }, + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))", + }, + }, + borderRadius: { + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)", + }, + keyframes: { + "accordion-down": { + from: { height: "0" }, + to: { height: "var(--radix-accordion-content-height)" }, + }, + "accordion-up": { + from: { height: "var(--radix-accordion-content-height)" }, + to: { height: "0" }, + }, + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", + }, + }, + }, + plugins: [require("tailwindcss-animate")], +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..ffbfd1f --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + + /* Paths */ + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..42872c5 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..109ca23 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,27 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; +import path from "path"; + +// https://vitejs.dev/config/ +export default defineConfig(async () => ({ + plugins: [react()], + + // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build` + // + // 1. prevent vite from obscuring rust errors + clearScreen: false, + // 2. tauri expects a fixed port, fail if that port is not available + server: { + port: 1420, + strictPort: true, + watch: { + // 3. tell vite to ignore watching `src-tauri` + ignored: ["**/src-tauri/**"], + }, + }, + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, +}));