├── .env.example ├── src-tauri ├── src │ ├── build.rs │ ├── window.rs │ ├── main.rs │ ├── forward.rs │ └── smtp.rs ├── icons │ ├── 32x32.png │ ├── icon.icns │ ├── icon.ico │ ├── icon.png │ ├── 128x128.png │ ├── 128x128@2x.png │ ├── StoreLogo.png │ ├── Square30x30Logo.png │ ├── Square44x44Logo.png │ ├── Square71x71Logo.png │ ├── Square89x89Logo.png │ ├── Square107x107Logo.png │ ├── Square142x142Logo.png │ ├── Square150x150Logo.png │ ├── Square284x284Logo.png │ └── Square310x310Logo.png ├── .gitignore ├── rustfmt.toml ├── Cargo.toml ├── tauri.conf.json └── Cargo.lock ├── public ├── favicon.ico ├── robots.txt └── index.html ├── src ├── styles │ ├── tailwind.base │ ├── main.css │ └── tailwind.css ├── store │ ├── store.js │ ├── mailboxReducer.js │ └── settingReducer.js ├── index.js ├── App.js ├── components │ ├── MailContent.js │ └── Sidebar.js └── screens │ ├── Mailbox.js │ └── Settings.js ├── screenshots ├── setting.png ├── html-mail.png └── spam-score.png ├── docs ├── _config.yml └── index.md ├── .github ├── ISSUE_TEMPLATE │ ├── custom.md │ ├── feature_request.md │ └── bug_report.md └── workflows │ └── publish.yml ├── config-overrides.js ├── .gitignore ├── tailwind.config.js ├── LICENSE ├── package.json └── README.md /.env.example: -------------------------------------------------------------------------------- 1 | BROWSER=none 2 | NODE_OPTIONS=--openssl-legacy-provider -------------------------------------------------------------------------------- /src-tauri/src/build.rs: -------------------------------------------------------------------------------- 1 | fn main() { 2 | tauri_build::build() 3 | } 4 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/samirdjelal/mail-dev/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /src/styles/tailwind.base: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /screenshots/setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/samirdjelal/mail-dev/HEAD/screenshots/setting.png -------------------------------------------------------------------------------- /screenshots/html-mail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/samirdjelal/mail-dev/HEAD/screenshots/html-mail.png -------------------------------------------------------------------------------- /screenshots/spam-score.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/samirdjelal/mail-dev/HEAD/screenshots/spam-score.png -------------------------------------------------------------------------------- /src-tauri/icons/32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/samirdjelal/mail-dev/HEAD/src-tauri/icons/32x32.png -------------------------------------------------------------------------------- /src-tauri/icons/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/samirdjelal/mail-dev/HEAD/src-tauri/icons/icon.icns -------------------------------------------------------------------------------- /src-tauri/icons/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/samirdjelal/mail-dev/HEAD/src-tauri/icons/icon.ico -------------------------------------------------------------------------------- /src-tauri/icons/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/samirdjelal/mail-dev/HEAD/src-tauri/icons/icon.png -------------------------------------------------------------------------------- /src-tauri/icons/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/samirdjelal/mail-dev/HEAD/src-tauri/icons/128x128.png -------------------------------------------------------------------------------- /src-tauri/.gitignore: -------------------------------------------------------------------------------- 1 | # Generated by Cargo 2 | # will have compiled files and executables 3 | /target/ 4 | WixTools 5 | -------------------------------------------------------------------------------- /src-tauri/icons/128x128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/samirdjelal/mail-dev/HEAD/src-tauri/icons/128x128@2x.png -------------------------------------------------------------------------------- /src-tauri/icons/StoreLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/samirdjelal/mail-dev/HEAD/src-tauri/icons/StoreLogo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square30x30Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/samirdjelal/mail-dev/HEAD/src-tauri/icons/Square30x30Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square44x44Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/samirdjelal/mail-dev/HEAD/src-tauri/icons/Square44x44Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square71x71Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/samirdjelal/mail-dev/HEAD/src-tauri/icons/Square71x71Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square89x89Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/samirdjelal/mail-dev/HEAD/src-tauri/icons/Square89x89Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square107x107Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/samirdjelal/mail-dev/HEAD/src-tauri/icons/Square107x107Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square142x142Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/samirdjelal/mail-dev/HEAD/src-tauri/icons/Square142x142Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square150x150Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/samirdjelal/mail-dev/HEAD/src-tauri/icons/Square150x150Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square284x284Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/samirdjelal/mail-dev/HEAD/src-tauri/icons/Square284x284Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square310x310Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/samirdjelal/mail-dev/HEAD/src-tauri/icons/Square310x310Logo.png -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman 2 | show_downloads: true 3 | title: Mail-Dev 4 | description: Local SMTP Server For Email Testing/Debugging 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/custom.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Custom issue template 3 | about: Describe this issue template's purpose here. 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /config-overrides.js: -------------------------------------------------------------------------------- 1 | const {override, addExternalBabelPlugin} = require("customize-cra"); 2 | module.exports = override( 3 | addExternalBabelPlugin(["@babel/plugin-proposal-nullish-coalescing-operator"]) 4 | ); -------------------------------------------------------------------------------- /src/store/store.js: -------------------------------------------------------------------------------- 1 | import {configureStore} from "@reduxjs/toolkit"; 2 | import settingReducer from "./settingReducer"; 3 | import mailboxReducer from "./mailboxReducer"; 4 | 5 | export default configureStore({ 6 | reducer: { 7 | setting: settingReducer, 8 | mailbox: mailboxReducer, 9 | } 10 | }) -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Mail Dev 7 | 8 | 9 | 10 |
11 | 12 | 13 | -------------------------------------------------------------------------------- /src-tauri/rustfmt.toml: -------------------------------------------------------------------------------- 1 | max_width = 100 2 | hard_tabs = false 3 | tab_spaces = 2 4 | newline_style = "Auto" 5 | use_small_heuristics = "Default" 6 | reorder_imports = true 7 | reorder_modules = true 8 | remove_nested_parens = true 9 | edition = "2018" 10 | merge_derives = true 11 | use_try_shorthand = false 12 | use_field_init_shorthand = false 13 | force_explicit_abi = true 14 | imports_granularity = "Crate" 15 | -------------------------------------------------------------------------------- /src-tauri/src/window.rs: -------------------------------------------------------------------------------- 1 | use std::sync::Once; 2 | use tauri::Window; 3 | 4 | pub(crate) fn main_window(window: Option) -> Window { 5 | static mut SINGLETON: *const Window = 0 as *const Window; 6 | static ONCE: Once = Once::new(); 7 | if let Some(window) = window { 8 | ONCE.call_once(|| unsafe { 9 | SINGLETON = std::mem::transmute(Box::new(window)); 10 | }); 11 | } 12 | unsafe { (*SINGLETON).clone() } 13 | } 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | /.idea 3 | /public/tailwind.css 4 | package-lock.json 5 | yarn.lock 6 | # dependencies 7 | /node_modules 8 | /.pnp 9 | .pnp.js 10 | 11 | .env 12 | 13 | # testing 14 | /coverage 15 | 16 | # production 17 | /build 18 | 19 | # misc 20 | .DS_Store 21 | .env.local 22 | .env.development.local 23 | .env.test.local 24 | .env.production.local 25 | 26 | npm-debug.log* 27 | yarn-debug.log* 28 | yarn-error.log* 29 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import './styles/main.css'; 4 | import './styles/tailwind.css'; 5 | import {Provider} from 'react-redux'; 6 | import App from './App'; 7 | import store from './store/store'; 8 | import {MemoryRouter} from 'react-router-dom'; 9 | 10 | ReactDOM.render( 11 | 12 | 13 | 14 | 15 | 16 | 17 | , 18 | 19 | document.getElementById('root') 20 | ); 21 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | const colors = require('tailwindcss/colors') 2 | 3 | module.exports = { 4 | content: ['./src/**/*.{js,jsx,ts,tsx}', './public/index.html'], 5 | theme: { 6 | extend: { 7 | colors: { 8 | transparent: 'transparent', 9 | current: 'currentColor', 10 | gray: colors.stone, 11 | red: colors.red, 12 | blue: colors.sky, 13 | green: colors.emerald, 14 | yellow: colors.amber, 15 | purple: colors.violet, 16 | } 17 | }, 18 | }, 19 | plugins: [ 20 | require('@tailwindcss/aspect-ratio'), 21 | require('@tailwindcss/forms'), 22 | require('@tailwindcss/typography'), 23 | ], 24 | } 25 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /src-tauri/src/main.rs: -------------------------------------------------------------------------------- 1 | #![cfg_attr( 2 | all(not(debug_assertions), target_os = "windows"), 3 | windows_subsystem = "windows" 4 | )] 5 | 6 | mod forward; 7 | mod smtp; 8 | mod window; 9 | 10 | use forward::forward_mail; 11 | use smtp::start_smtp_server; 12 | use tauri::Manager; 13 | 14 | fn main() { 15 | tauri::Builder::default() 16 | .setup(|app| { 17 | let _s = window::main_window(Some(app.get_window("main").unwrap())); 18 | // app.manage(MainWindow(Arc::new(Mutex::new( 19 | // app.get_window("main").unwrap(), 20 | // )))); 21 | Ok(()) 22 | }) 23 | .invoke_handler(tauri::generate_handler![start_smtp_server, forward_mail]) 24 | .run(tauri::generate_context!()) 25 | .expect("error while running tauri application"); 26 | } 27 | -------------------------------------------------------------------------------- /src/styles/main.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | 15 | .scroll::-webkit-scrollbar-track { 16 | background-color: rgb(227, 227, 227) !important; 17 | border-radius: 4px; 18 | } 19 | 20 | .scroll::-webkit-scrollbar { 21 | width: 7px !important; 22 | } 23 | 24 | .scroll::-webkit-scrollbar-thumb { 25 | /*background-color: rgb(212, 52, 96) !important;*/ 26 | background-color: rgb(129, 139, 148) !important; 27 | } 28 | -------------------------------------------------------------------------------- /src-tauri/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "mail-dev" 3 | version = "0.7.1" 4 | description = "Mail Dev" 5 | authors = ["Samir Djelal "] 6 | license = "MIT" 7 | repository = "https://github.com/samirdjelal/mail-dev" 8 | default-run = "mail-dev" 9 | edition = "2021" 10 | build = "src/build.rs" 11 | 12 | [build-dependencies] 13 | tauri-build = { version = "1.0.4", features = [] } 14 | 15 | [dependencies] 16 | serde_json = "1.0" 17 | serde = { version = "1.0", features = ["derive"] } 18 | mailin-embedded = { version="^0", features= ["rtls"] } 19 | mailparse = "0.13.8" 20 | lettre = "0.10.1" 21 | 22 | [dependencies.tauri] 23 | version = "1.0.4" 24 | features = ["api-all", "macos-private-api"] 25 | 26 | [features] 27 | default = ["custom-protocol"] 28 | custom-protocol = ["tauri/custom-protocol"] 29 | 30 | [profile.release] 31 | lto = true 32 | strip = true 33 | codegen-units = 1 34 | panic = "abort" 35 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Samir Djelal 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: 'publish' 2 | on: 3 | workflow_dispatch: 4 | 5 | jobs: 6 | publish-tauri: 7 | permissions: write-all 8 | strategy: 9 | fail-fast: false 10 | matrix: 11 | platform: [macos-latest, ubuntu-20.04, windows-latest] 12 | 13 | runs-on: ${{ matrix.platform }} 14 | steps: 15 | - uses: actions/checkout@v3 16 | - name: setup node 17 | uses: actions/setup-node@v3 18 | with: 19 | node-version: 16 20 | - name: install Rust stable 21 | uses: dtolnay/rust-toolchain@stable 22 | - name: install dependencies (ubuntu only) 23 | if: matrix.platform == 'ubuntu-20.04' 24 | run: | 25 | sudo apt-get update 26 | sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libappindicator3-dev librsvg2-dev patchelf 27 | - name: install app dependencies then build the app 28 | run: yarn && yarn tailwind:prod && yarn build && yarn tauri build 29 | - uses: tauri-apps/tauri-action@v0 30 | env: 31 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 32 | with: 33 | tagName: app-v__VERSION__ # the action automatically replaces __VERSION__ with the app version 34 | releaseName: 'App v__VERSION__' 35 | releaseBody: 'See the assets to download this version and install.' 36 | releaseDraft: true 37 | prerelease: false 38 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mail-dev", 3 | "version": "0.7.1", 4 | "private": true, 5 | "dependencies": { 6 | "@reduxjs/toolkit": "^1.6.0", 7 | "@tauri-apps/api": "^1.0.0-rc.3", 8 | "@tauri-apps/cli": "^1.0.0-rc.8", 9 | "customize-cra": "^1.0.0", 10 | "react": "^17.0.2", 11 | "react-app-rewired": "^2.1.8", 12 | "react-dom": "^17.0.2", 13 | "react-redux": "^7.2.4", 14 | "react-router": "^5.2.0", 15 | "react-router-dom": "^5.2.0", 16 | "react-scripts": "^4.0.3" 17 | }, 18 | "scripts": { 19 | "dev": "react-app-rewired start", 20 | "build": "cross-env GENERATE_SOURCEMAP=false react-app-rewired build", 21 | "test": "react-app-rewired test", 22 | "eject": "react-app-rewired eject", 23 | "tauri": "tauri", 24 | "tailwind:dev": "npx tailwindcss -i ./src/styles/tailwind.base -o ./src/styles/tailwind.css --watch", 25 | "tailwind:prod": "cross-env NODE_ENV=production npx tailwindcss build -i ./src/styles/tailwind.base -o ./src/styles/tailwind.css" 26 | }, 27 | "eslintConfig": { 28 | "extends": [ 29 | "react-app", 30 | "react-app/jest" 31 | ] 32 | }, 33 | "browserslist": [ 34 | "defaults" 35 | ], 36 | "devDependencies": { 37 | "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", 38 | "@tailwindcss/aspect-ratio": "^0.4.0", 39 | "@tailwindcss/forms": "^0.5.0", 40 | "@tailwindcss/line-clamp": "^0.3.1", 41 | "@tailwindcss/typography": "^0.5.2", 42 | "autoprefixer": "^10.4.4", 43 | "cross-env": "^7.0.3", 44 | "postcss": "^8.4.12", 45 | "tailwindcss": "^3.0.23" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | # Mail-Dev 2 | 3 | Mail-Dev 4 | 5 | ### Local SMTP Server For Email Testing/Debugging 6 | 7 | Built on top of [React](https://reactjs.org/) and [Tauri](https://tauri.studio/en). 8 | 9 | --- 10 | 11 | Give it a try, [Download now](https://github.com/samirdjelal/mail-dev/releases). 12 | 13 | Mail-Dev - Local SMTP Server For Email Testing/Debugging | Product Hunt 14 | 15 | ## Todo: 16 | - [x] Custom SMTP server port 17 | - [x] Frameworks configuration snippets 18 | - [x] Attachment support 19 | - [ ] Forward emails [WIP] 20 | - [ ] Auto update 21 | 22 | Mail-Dev SPAM SCORE 23 |
24 | Mail-Dev HTML Mail 25 |
26 | Mail-Dev SETTING 27 | 28 | ## Requirement: 29 | - Tauri CLI 30 | - NodeJS (npm/yarn) 31 | 32 | ### Dev 33 | ```text 34 | npm install 35 | npm run tailwind:dev 36 | npm run tauri dev 37 | ``` 38 | 39 | ### Build 40 | ```text 41 | npm install 42 | npm run tailwind:dev 43 | npm run tauri build 44 | ``` 45 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Mail-Dev 2 | 3 | Mail-Dev 4 | 5 | ### Local SMTP Server For Email Testing/Debugging 6 | 7 | Built on top of [React](https://reactjs.org/) and [Tauri](https://tauri.studio/en). 8 | 9 | --- 10 | 11 | Give it a try, [Download now](https://github.com/samirdjelal/mail-dev/releases). 12 | 13 | Mail-Dev - Local SMTP Server For Email Testing/Debugging | Product Hunt 14 | 15 | ## Todo: 16 | - [x] Custom SMTP server port 17 | - [x] Frameworks configuration snippets 18 | - [x] Attachment support 19 | - [x] Forward emails 20 | - [x] Notification 21 | - [ ] Auto update 22 | - [ ] Persistent configuration 23 | - [ ] SMTP Authentication 24 | 25 | Mail-Dev SPAM SCORE 26 |
27 | Mail-Dev HTML Mail 28 |
29 | Mail-Dev SETTING 30 | 31 | ## Requirement: 32 | - Tauri CLI 33 | - NodeJS (npm/yarn) 34 | 35 | ### Dev 36 | ```text 37 | npm install 38 | npm run tailwind:dev 39 | npm run tauri dev 40 | ``` 41 | 42 | ### Build 43 | ```text 44 | npm install 45 | npm run tailwind:dev 46 | npm run tauri build 47 | ``` 48 | -------------------------------------------------------------------------------- /src/store/mailboxReducer.js: -------------------------------------------------------------------------------- 1 | import {createSlice} from "@reduxjs/toolkit"; 2 | 3 | const mailboxState = createSlice({ 4 | name: 'mailbox', 5 | initialState: { 6 | mails: [], 7 | mailIndex: null, 8 | mail: {} 9 | }, 10 | reducers: { 11 | clearMails: (state, _action) => ({...state, mails: [], mailIndex: null, mail: {}}), 12 | addMail: (state, action) => { 13 | const arr = action.payload.to.match(/^<(.+?)>$/); 14 | if (arr) action.payload.to = arr[1]; 15 | return {...state, mails: [...state.mails, {...action.payload, key: Math.random().toString(), seen: false, spam_score: "", spam_rules: []}]}; 16 | }, 17 | setMailIndex: (state, action) => { 18 | let mail_object = {}; 19 | let copy = state.mails.map(mail => { 20 | if (mail.key === action.payload) { 21 | mail_object = mail; 22 | return {...mail, seen: true}; 23 | } 24 | return {...mail}; 25 | }) 26 | return {...state, mails: copy, mailIndex: action.payload, mail: mail_object}; 27 | }, 28 | setSpamScore: (state, action) => { 29 | console.log(action.payload) 30 | let mail_object = {}; 31 | let copy = state.mails.map(mail => { 32 | if (mail.key === action.payload.key) { 33 | return mail_object = {...mail, seen: true, spam_score: action.payload.spam_score, spam_rules: action.payload.spam_rules}; 34 | } 35 | return {...mail}; 36 | }) 37 | return {...state, mails: copy, mail: mail_object}; 38 | }, 39 | deleteMail: (state, action) => { 40 | let copy = state.mails.filter(mail => mail.key !== action.payload) 41 | return {...state, mails: copy, mailIndex: null, mail: {}}; 42 | }, 43 | } 44 | }) 45 | 46 | export const { 47 | clearMails, 48 | addMail, 49 | setMailIndex, 50 | setSpamScore, 51 | deleteMail, 52 | } = mailboxState.actions; 53 | 54 | 55 | export default mailboxState.reducer -------------------------------------------------------------------------------- /src-tauri/tauri.conf.json: -------------------------------------------------------------------------------- 1 | { 2 | "package": { 3 | "productName": "mail-dev", 4 | "version": "0.7.1" 5 | }, 6 | "build": { 7 | "distDir": "../build", 8 | "devPath": "http://localhost:3000", 9 | "beforeDevCommand": "npm run dev", 10 | "beforeBuildCommand": "npm run build" 11 | }, 12 | "tauri": { 13 | "bundle": { 14 | "active": true, 15 | "targets": "all", 16 | "identifier": "com.samirdjelal.mail-dev", 17 | "icon": [ 18 | "icons/32x32.png", 19 | "icons/128x128.png", 20 | "icons/128x128@2x.png", 21 | "icons/icon.icns", 22 | "icons/icon.ico" 23 | ], 24 | "resources": [], 25 | "externalBin": [], 26 | "copyright": "", 27 | "category": "DeveloperTool", 28 | "shortDescription": "", 29 | "longDescription": "", 30 | "deb": { 31 | "depends": [] 32 | }, 33 | "macOS": { 34 | "frameworks": [], 35 | "minimumSystemVersion": "", 36 | "exceptionDomain": "", 37 | "signingIdentity": null, 38 | "entitlements": null 39 | }, 40 | "windows": { 41 | "certificateThumbprint": null, 42 | "digestAlgorithm": "sha256", 43 | "timestampUrl": "" 44 | } 45 | }, 46 | "updater": { 47 | "active": false 48 | }, 49 | "allowlist": { 50 | "all": true, 51 | "http": { 52 | "all": true, 53 | "request": true, 54 | "scope": [ 55 | "https://spamcheck.postmarkapp.com/*" 56 | ] 57 | } 58 | }, 59 | "windows": [ 60 | { 61 | "title": "Mail Dev", 62 | "width": 1100, 63 | "height": 700, 64 | "minWidth": 950, 65 | "minHeight": 600, 66 | "resizable": true, 67 | "fullscreen": false, 68 | "center": true 69 | } 70 | ], 71 | "macOSPrivateApi": true, 72 | "security": { 73 | "csp": "default-src blob: data: filesystem: ws: wss: http: https: tauri: 'unsafe-eval' 'unsafe-inline' 'self' img-src: 'self'" 74 | } 75 | } 76 | } -------------------------------------------------------------------------------- /src/store/settingReducer.js: -------------------------------------------------------------------------------- 1 | import {createSlice} from "@reduxjs/toolkit"; 2 | 3 | const settingState = createSlice({ 4 | name: 'setting', 5 | initialState: { 6 | srvStatus: false, 7 | srvErrorMessage: "", 8 | framework: "Laravel", 9 | ipAddress: "127.0.0.1", 10 | port: 2525, 11 | spamChecking: true, 12 | 13 | forwardEmailHost: "smtp.gmail.com", 14 | forwardEmailPort: "587", 15 | forwardEmailUsername: "", 16 | forwardEmailPassword: "", 17 | forwardEnabled: false, 18 | 19 | useNotification: true, 20 | 21 | }, 22 | reducers: { 23 | setSrvStatus: (state, action) => ({...state, srvStatus: action.payload}), 24 | setSrvResponseMessage: (state, action) => ({...state, srvResponseMessage: action.payload}), 25 | setFramework: (state, action) => ({...state, framework: action.payload}), 26 | setIpAddress: (state, action) => ({...state, ipAddress: action.payload}), 27 | setPort: (state, action) => ({...state, port: action.payload}), 28 | setSpamChecking: (state, action) => ({...state, spamChecking: action.payload}), 29 | 30 | setForwardEmailHost: (state, action) => ({...state, forwardEmailHost: action.payload}), 31 | setForwardEmailPort: (state, action) => ({...state, forwardEmailPort: action.payload}), 32 | setForwardEmailUsername: (state, action) => ({...state, forwardEmailUsername: action.payload}), 33 | setForwardEmailPassword: (state, action) => ({...state, forwardEmailPassword: action.payload}), 34 | setForwardEnabled: (state, action) => ({...state, forwardEnabled: action.payload}), 35 | 36 | setUseNotification: (state, action) => ({...state, useNotification: action.payload}), 37 | 38 | } 39 | }) 40 | 41 | export const { 42 | setSrvStatus, 43 | setSrvResponseMessage, 44 | setFramework, 45 | setIpAddress, 46 | setPort, 47 | setForwardEmailHost, 48 | setForwardEmailPort, 49 | setForwardEmailUsername, 50 | setForwardEmailPassword, 51 | setForwardEnabled, 52 | setUseNotification, 53 | } = settingState.actions; 54 | 55 | 56 | export default settingState.reducer -------------------------------------------------------------------------------- /src-tauri/src/forward.rs: -------------------------------------------------------------------------------- 1 | use lettre::message::Mailbox; 2 | use lettre::transport::smtp::authentication::Credentials; 3 | use lettre::transport::smtp::client::{Tls, TlsParametersBuilder}; 4 | use lettre::{Address, Message, SmtpTransport, Transport}; 5 | 6 | #[tauri::command] 7 | pub async fn forward_mail( 8 | host: Option, 9 | port: Option, 10 | username: Option, 11 | password: Option, 12 | email_content: Option, 13 | email_to: Option, 14 | email_subject: Option, 15 | ) { 16 | let host = host.unwrap_or_else(|| "127.0.0.1".to_string()); 17 | let port = port 18 | .unwrap_or_else(|| "25".to_string()) 19 | .parse::() 20 | .unwrap(); 21 | let mut username = username.unwrap_or_else(|| "".to_string()); 22 | let password = password.unwrap_or_else(|| "".to_string()); 23 | let email_content = email_content.unwrap_or_else(|| "".to_string()); 24 | let mut email_to = email_to.unwrap_or_else(|| "email@example.com".to_string()); 25 | let email_subject = email_subject.unwrap_or_else(|| "".to_string()); 26 | 27 | if username.is_empty() { 28 | username = "samir@mail-dev.com".to_string(); 29 | } 30 | if email_to.is_empty() { 31 | email_to = "email@example.com".to_string(); 32 | } 33 | 34 | let email = Message::builder() 35 | .from(Mailbox { 36 | name: Some("Mail-Dev".to_string()), 37 | email: username.parse::
().unwrap(), 38 | }) 39 | .to(email_to.parse().unwrap()) 40 | .subject(email_subject) 41 | .body(email_content) 42 | .unwrap(); 43 | 44 | let tls_parameters = TlsParametersBuilder::new(host.clone()) 45 | .dangerous_accept_invalid_hostnames(true) 46 | .dangerous_accept_invalid_certs(true) 47 | .build() 48 | .unwrap(); 49 | 50 | let security = vec![ 51 | Tls::Opportunistic(tls_parameters.clone()), 52 | Tls::Wrapper(tls_parameters.clone()), 53 | Tls::Required(tls_parameters), 54 | Tls::None, 55 | ]; 56 | 57 | for tls in security { 58 | let mailer = SmtpTransport::builder_dangerous(host.clone()) 59 | .credentials(Credentials::new(username.clone(), password.clone())) 60 | .port(port) 61 | .tls(tls) 62 | .build(); 63 | match mailer.send(&email) { 64 | Ok(_) => { 65 | println!("Email sent successfully!"); 66 | break; 67 | } 68 | Err(e) => { 69 | println!("Could not send email: {:?}", e); 70 | continue; 71 | } 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/App.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react'; 2 | import {connect} from 'react-redux'; 3 | import {withRouter} from "react-router"; 4 | import {listen} from "@tauri-apps/api/event"; 5 | import Sidebar from "./components/Sidebar"; 6 | import Mailbox from "./screens/Mailbox"; 7 | import Settings from "./screens/Settings"; 8 | import {Switch, Route, Redirect} from 'react-router-dom'; 9 | import {addMail} from "./store/mailboxReducer"; 10 | import {invoke, notification} from "@tauri-apps/api"; 11 | 12 | class App extends Component { 13 | componentDidMount() { 14 | listen("mail-received", (res) => { 15 | this.props.addMail(res.payload) 16 | if (this.props.forwardEnabled === true) { 17 | console.log(res.payload) 18 | invoke('forward_mail', { 19 | host: this.props.forwardEmailHost, 20 | port: this.props.forwardEmailPort, 21 | username: this.props.forwardEmailUsername, 22 | password: this.props.forwardEmailPassword, 23 | email_content: res.payload.mime, 24 | email_to: res.payload.to, 25 | email_subject: res.payload.subject 26 | }).then(r => console.log(r)) 27 | } 28 | 29 | if (this.props.useNotification === true) { 30 | if (!notification.isPermissionGranted()) { 31 | notification.requestPermission().then(response => { 32 | if (response === 'granted') { 33 | this.notify(res.payload.subject); 34 | } 35 | }); 36 | } else { 37 | this.notify(res.payload.subject); 38 | } 39 | } 40 | 41 | }).then().catch() 42 | } 43 | 44 | notify(body = '') { 45 | notification.sendNotification({ 46 | title: "Mail-Dev: Mail Received", 47 | body, 48 | }) 49 | } 50 | 51 | render() { 52 | return ( 53 |
54 | 55 |
56 | 57 | 58 | 59 | 60 | 61 |
62 |
63 | ) 64 | } 65 | } 66 | 67 | export default withRouter(connect( 68 | state => ({ 69 | forwardEmailHost: state.setting.forwardEmailHost, 70 | forwardEmailPort: state.setting.forwardEmailPort, 71 | forwardEmailUsername: state.setting.forwardEmailUsername, 72 | forwardEmailPassword: state.setting.forwardEmailPassword, 73 | forwardEnabled: state.setting.forwardEnabled, 74 | useNotification: state.setting.useNotification, 75 | }), 76 | { 77 | addMail, 78 | } 79 | )(App)); 80 | -------------------------------------------------------------------------------- /src/components/MailContent.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react'; 2 | import {withRouter} from "react-router"; 3 | import {connect} from 'react-redux'; 4 | 5 | class MailContent extends Component { 6 | render() { 7 | if (this.props.tab === "Raw") 8 | return (
{this.props.mail.mime}
); 9 | 10 | if (this.props.tab === "Text") 11 | return (
{this.props.mail.text}
); 12 | 13 | if (this.props.tab === "Headers") 14 | return (
{this.props.mail.headers.map((header, key) => { 15 | return
{header[0]}: {header[1]}
16 | })}
); 17 | 18 | if (this.props.tab === "HTML") 19 | return ( 20 |
21 | 24 |
); 25 | 26 | if (this.props.tab === "HTML-Source") 27 | return (
{this.props.mail.html}
); 28 | 29 | if (this.props.tab === "Spam Reports") { 30 | if (this.props.mail.spam_score === "") return (
Loading...
) 31 | return (
32 |

Your SpamAssassin score is {this.props.mail.spam_score}!

33 |

The lower your score, the more likely your email is going to be received in your subscribers' inboxes.

34 |
35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | {this.props.mail.spam_rules.map((rule, index) => { 44 | return 45 | 46 | 47 | 48 | })} 49 | 50 |
ScoreDescription
{rule.score}{rule.description}
51 |
52 |
); 53 | } 54 | 55 | 56 | return (
); 57 | } 58 | 59 | mailToBlob(data = '') { 60 | data = `
${data || ''}
` 61 | const blob = new Blob([data], {type: 'text/html'}); 62 | // TODO: resize the iframe after the content are fully loaded. 63 | setTimeout(this.resizeIframe, 300); 64 | return URL.createObjectURL(blob); 65 | } 66 | 67 | resizeIframe() { 68 | const previewIframe = document.getElementById('previewIframe'); 69 | if (previewIframe) { 70 | let iframeBody = previewIframe.contentWindow.document.body; 71 | if (iframeBody) previewIframe.style.height = `${iframeBody.offsetHeight + 30}px`; 72 | previewIframe.addEventListener("load", function () { 73 | let iframeHeight = previewIframe.contentWindow.document.body.offsetHeight; 74 | if (iframeHeight < 500) iframeHeight = 500 - 10; 75 | previewIframe.style.height = `${iframeHeight}px`; 76 | }); 77 | } 78 | } 79 | } 80 | 81 | export default withRouter(connect( 82 | state => ({}), 83 | {} 84 | )(MailContent)); 85 | -------------------------------------------------------------------------------- /src-tauri/src/smtp.rs: -------------------------------------------------------------------------------- 1 | use crate::window; 2 | use mailin_embedded::response::OK; 3 | use mailin_embedded::{Handler, Response, Server, SslConfig}; 4 | use mailparse::body::Body; 5 | use mailparse::*; 6 | use tauri::Manager; 7 | 8 | #[derive(Clone, serde::Serialize, Debug)] 9 | struct Payload { 10 | mime: String, 11 | headers: Vec<(String, String)>, 12 | text: String, 13 | html: String, 14 | from: String, 15 | to: String, 16 | message_id: String, 17 | subject: String, 18 | x_priority: String, 19 | attachments: Vec<(String, String, Option, Option>)>, 20 | } 21 | 22 | #[derive(Clone, Debug)] 23 | struct MyHandler { 24 | mime: Vec, 25 | } 26 | 27 | impl MyHandler { 28 | pub fn new() -> MyHandler { 29 | MyHandler { mime: vec![] } 30 | } 31 | } 32 | 33 | impl Handler for MyHandler { 34 | fn data(&mut self, buf: &[u8]) -> std::io::Result<()> { 35 | self.mime.push(String::from_utf8(Vec::from(buf)).unwrap()); 36 | Ok(()) 37 | } 38 | 39 | fn data_end(&mut self) -> Response { 40 | let mime = self.mime.join(""); 41 | self::parse(mime); 42 | OK 43 | } 44 | } 45 | 46 | // Start the SMTP server 47 | // bind to custom port, fallback to 25. 48 | #[tauri::command] 49 | pub async fn start_smtp_server(address: Option) -> String { 50 | let address = address.unwrap_or_else(|| "127.0.0.1:25".into()); 51 | let handler = MyHandler::new(); 52 | let mut server = Server::new(handler); 53 | server 54 | .with_name("localhost") 55 | .with_ssl(SslConfig::None) 56 | .unwrap() 57 | .with_addr(address) 58 | .unwrap(); 59 | match server.serve() { 60 | Ok(_) => "".to_string(), 61 | Err(error) => { 62 | format!("{}", error) 63 | } 64 | } 65 | } 66 | 67 | // Parse the mail content and send it to the webview 68 | pub fn parse(mime: String) { 69 | let mut payload = Payload { 70 | mime: mime.clone(), 71 | headers: vec![], 72 | subject: "".to_string(), 73 | from: "".to_string(), 74 | to: "".to_string(), 75 | message_id: "".to_string(), 76 | x_priority: "".to_string(), 77 | text: "".to_string(), 78 | html: "".to_string(), 79 | attachments: vec![], 80 | }; 81 | 82 | let parsed = parse_mail(mime.as_ref()).unwrap(); 83 | // println!("{:?}", parsed); 84 | 85 | for header in parsed.headers.iter() { 86 | payload.headers.push((header.get_key(), header.get_value())); 87 | match header.get_key().as_str() { 88 | "Subject" => payload.subject = header.get_value(), 89 | "From" => payload.from = header.get_value(), 90 | "To" => payload.to = header.get_value(), 91 | "Message-ID" => payload.message_id = header.get_value(), 92 | "X-Priority" => payload.x_priority = header.get_value(), 93 | _ => {} 94 | } 95 | } 96 | 97 | let mut add_body_part = |x: ParsedMail| { 98 | match x.get_content_disposition().disposition { 99 | DispositionType::Inline => { 100 | if x.ctype.mimetype == "text/plain" { 101 | payload.text = x.get_body().unwrap(); 102 | } else { 103 | payload.html = x.get_body().unwrap(); 104 | } 105 | } 106 | // DispositionType::FormData => { 107 | // 108 | // } 109 | // DispositionType::Extension(ext) => { 110 | // 111 | // } 112 | DispositionType::Attachment => { 113 | let filename = x 114 | .get_content_disposition() 115 | .params 116 | .get("filename") 117 | .unwrap() 118 | .to_owned(); 119 | 120 | let mut content_type: String = String::new(); 121 | for header in x.get_headers() { 122 | if header.get_key() == "Content-Type" { 123 | content_type = header.get_value() 124 | } 125 | } 126 | 127 | match x.get_body_encoded() { 128 | Body::Base64(body) => { 129 | let binary = body.get_decoded().unwrap(); 130 | payload 131 | .attachments 132 | .push((filename, content_type, None, Some(binary))); 133 | } 134 | _ => { 135 | let text = x.get_body().unwrap(); 136 | payload 137 | .attachments 138 | .push((filename, content_type, Some(text), None)); 139 | } 140 | }; 141 | } 142 | _ => {} 143 | } 144 | }; 145 | 146 | if parsed.subparts.is_empty() { 147 | add_body_part(parsed); 148 | } else { 149 | for subpart in parsed.subparts.into_iter() { 150 | if subpart.subparts.is_empty() { 151 | add_body_part(subpart); 152 | } else { 153 | for subpart in subpart.subparts.into_iter() { 154 | add_body_part(subpart); 155 | } 156 | } 157 | } 158 | } 159 | 160 | let win = window::main_window(None); 161 | let _ = win.emit_all("mail-received", payload); 162 | } 163 | -------------------------------------------------------------------------------- /src/components/Sidebar.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react'; 2 | import {Link} from 'react-router-dom'; 3 | import {connect} from 'react-redux'; 4 | import {withRouter} from "react-router"; 5 | 6 | class Sidebar extends Component { 7 | render() { 8 | return ( 9 |
10 | 11 |
12 | {/*{this.props.history.location.pathname === '/mailbox' &&
}*/} 13 |
14 | 15 | 16 | 17 | 18 |
19 |
Mailbox
20 |
21 | 22 | 23 | 24 |
25 | {/*{this.props.history.location.pathname === '/settings' &&
}*/} 26 |
27 | 28 | 30 | 32 | 33 |
34 |
Settings
35 |
36 | 37 | 38 | 39 |
40 | ); 41 | } 42 | } 43 | 44 | export default withRouter(connect( 45 | state => ({}), 46 | {} 47 | )(Sidebar)); 48 | -------------------------------------------------------------------------------- /src/screens/Mailbox.js: -------------------------------------------------------------------------------- 1 | import React, {Component, Fragment} from 'react'; 2 | import {connect} from 'react-redux'; 3 | import {withRouter} from "react-router"; 4 | import {clearMails, deleteMail, setMailIndex, setSpamScore} from "../store/mailboxReducer"; 5 | import MailContent from "../components/MailContent"; 6 | import {Body, fetch} from "@tauri-apps/api/http"; 7 | import {dialog, invoke} from "@tauri-apps/api"; 8 | import {setSrvStatus} from "../store/settingReducer"; 9 | import {writeBinaryFile, writeFile} from "@tauri-apps/api/fs"; 10 | 11 | class Mailbox extends Component { 12 | constructor(props) { 13 | super(props); 14 | this.state = { 15 | tab: "HTML", 16 | index: 0, 17 | } 18 | this.startServer = this.startServer.bind(this); 19 | } 20 | 21 | render() { 22 | if (this.props.mails.length === 0) 23 | return (
24 |
25 | 26 | 27 | 28 | 29 |
30 |
No mail to show!
31 |
Send emails using this smtp server:
32 |
33 |
{this.props.ipAddress}:{this.props.port}
34 |
Start Server 36 |
37 | {this.props.srvStatus === true &&
38 | 39 | 40 | 41 |
} 42 |
43 |
) 44 | 45 | if (this.state.tab === 'Spam Reports') 46 | this.getSpamScore(this.props.mail) 47 | 48 | return ( 49 |
50 |
51 |
52 | 58 |
59 | {this.props.mails.map(mail => { 60 | return 61 |
this.selectMail(mail)}> 63 |
64 |
65 |
{mail.subject}
66 |
{mail.to}
67 |
68 | 69 | {mail.attachments.length > 0 && 70 | 72 | } 73 |
74 | 75 | 76 | 77 |
78 |
79 |
80 | })} 81 |
82 | {this.props.mailIndex !== null ?
83 |
{this.props.mail.subject || 'Subject'}
84 |
85 | From : {this.props.mail.from || ''}
86 | To : {this.props.mail.to || ''}
87 | Message-ID : {this.props.mail.message_id || ''}
88 |
89 | {this.props.mail.attachments.length > 0 &&
90 | {this.props.mail.attachments.map((attachment, key) => { 91 | return
this.saveAttachment(attachment)} className="py-0.5"> 92 |
93 | 94 | 96 | 97 |
{attachment[0]}
98 |
99 |
100 | })} 101 |
} 102 |
103 | {(this.props.mail.html === "" ? ["Text", "Raw", "Headers", "Spam Reports"] : ["HTML", "HTML-Source", "Text", "Raw", "Headers", "Spam Reports"]).map(item => { 104 | return
this.setState({tab: item})}> 105 | {(item === "Spam Reports" && this.props.mail.spam_score !== "") ? {item} 106 |
{this.props.mail.spam_score}
107 |
: item} 108 |
109 | })} 110 | 116 | 117 |
118 |
119 | 120 |
121 |
:
122 |
123 | 124 | 125 | 126 | 127 |
128 |
Select a mail!
129 |
} 130 | 131 |
132 | ); 133 | } 134 | 135 | startServer() { 136 | invoke("start_smtp_server", {address: `${this.props.ipAddress}:${this.props.port}`}).then().catch() 137 | this.props.setSrvStatus(true) 138 | } 139 | 140 | selectMail(mail) { 141 | this.props.setMailIndex(mail.key) 142 | this.setState({tab: mail.html === "" ? 'Text' : 'HTML'}); 143 | } 144 | 145 | getSpamScore(mail) { 146 | if (mail.spam_score === "") { 147 | fetch("https://spamcheck.postmarkapp.com/filter", { 148 | method: "POST", 149 | responseType: 1, 150 | mode: 'no-cors', 151 | body: Body.json({email: mail.mime.toString(), options: "long"}), 152 | headers: {"Accept": "application/json", "Content-Type": "application/json"} 153 | }).then(res => { 154 | console.log(res) 155 | this.props.setSpamScore({ 156 | key: mail.key, 157 | spam_score: res.data.score, 158 | spam_rules: res.data.rules, 159 | }); 160 | }).catch(err => console.log(err)) 161 | } 162 | } 163 | 164 | async saveAttachment(attachment) { 165 | let path = await dialog.save({ 166 | defaultPath: attachment[0], 167 | filters: [{name: 'Save Attachment.', extensions: []}] 168 | }); 169 | 170 | if (path !== null) { 171 | if (attachment[2] === null) { 172 | await writeBinaryFile({path, contents: attachment[3]}); 173 | } else { 174 | await writeFile({path, contents: attachment[2]}); 175 | } 176 | } 177 | } 178 | 179 | 180 | } 181 | 182 | export default withRouter(connect( 183 | state => ({ 184 | srvStatus: state.setting.srvStatus, 185 | ipAddress: state.setting.ipAddress, 186 | port: state.setting.port, 187 | mails: state.mailbox.mails, 188 | mailIndex: state.mailbox.mailIndex, 189 | mail: state.mailbox.mail, 190 | }), 191 | { 192 | setSrvStatus, 193 | clearMails, 194 | setMailIndex, 195 | setSpamScore, 196 | deleteMail, 197 | 198 | } 199 | )(Mailbox)); 200 | -------------------------------------------------------------------------------- /src/screens/Settings.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react'; 2 | import {connect} from 'react-redux'; 3 | import {withRouter} from "react-router"; 4 | import {setForwardEmailHost, setForwardEmailPassword, setForwardEmailPort, setForwardEmailUsername, setForwardEnabled, setFramework, setIpAddress, setPort, setSrvResponseMessage, setSrvStatus, setUseNotification} from "../store/settingReducer"; 5 | import {invoke, notification} from "@tauri-apps/api"; 6 | 7 | class Settings extends Component { 8 | constructor(props) { 9 | super(props); 10 | this.startServer = this.startServer.bind(this); 11 | } 12 | 13 | 14 | componentDidMount() { 15 | this.props.setSrvResponseMessage("") 16 | } 17 | 18 | 19 | render() { 20 | return ( 21 |
22 |

Settings

23 | 24 |
25 |

SMTP configuration

26 |
27 | {this.props.srvStatus === true &&
} 28 |
29 | 30 |
31 | this.props.setIpAddress(e.target.value)} type="text" name="ipAddress" id="ipAddress" className="shadow-sm focus:ring-gray-500 focus:border-gray-500 block w-full sm:text-sm border-gray-300 focus:ring-opacity-40 focus:ring-2 rounded-md"/> 32 |
33 |
34 |
35 | 36 |
37 | this.props.setPort(parseInt(e.target.value, 10))} type="text" name="port" id="port" className="shadow-sm focus:ring-gray-500 focus:border-gray-500 block w-full sm:text-sm border-gray-300 focus:ring-opacity-40 focus:ring-2 rounded-md"/> 38 |
39 |
40 |
41 | 42 |
43 | 47 |
48 |
49 | 50 | 51 |
52 |
{this.props.srvResponseMessage}
53 |
54 | 55 |
56 |

Forward emails

57 |
58 |
59 | 60 |
61 | this.props.setForwardEmailHost(e.target.value)} defaultValue={this.props.forwardEmailHost} autoComplete="none" autoCorrect="none" name="forwardEmailHost" id="forwardEmailHost" className="shadow-sm focus:ring-gray-500 focus:border-gray-500 block w-full sm:text-sm border-gray-300 focus:ring-opacity-40 focus:ring-2 rounded-md"/> 62 |
63 |
64 | 65 |
66 | 67 |
68 | this.props.setForwardEmailPort(e.target.value)} defaultValue={this.props.forwardEmailPort} autoComplete="none" autoCorrect="none" name="forwardEmailPort" id="forwardEmailPort" className="shadow-sm focus:ring-gray-500 focus:border-gray-500 block w-full sm:text-sm border-gray-300 focus:ring-opacity-40 focus:ring-2 rounded-md"/> 69 |
70 |
71 | 72 | 73 |
74 | 75 |
76 | this.props.setForwardEmailUsername(e.target.value)} defaultValue={this.props.forwardEmailUsername} autoComplete="none" autoCorrect="none" name="forwardEmailUsername" id="forwardEmailUsername" className="shadow-sm focus:ring-gray-500 focus:border-gray-500 block w-full sm:text-sm border-gray-300 focus:ring-opacity-40 focus:ring-2 rounded-md"/> 77 |
78 |
79 | 80 |
81 | 82 |
83 | e.target.setAttribute('type', 'text')} onBlur={e => e.target.setAttribute('type', 'password')} onChange={e => this.props.setForwardEmailPassword(e.target.value)} defaultValue={this.props.forwardEmailPassword} autoComplete="none" autoCorrect="none" name="forwardEmailPassword" id="forwardEmailPassword" 84 | className="shadow-sm focus:ring-gray-500 focus:border-gray-500 block w-full sm:text-sm border-gray-300 focus:ring-opacity-40 focus:ring-2 rounded-md"/> 85 |
86 |
87 | 88 |
89 | 90 |
91 | 96 |
97 |
98 | 99 |
100 | 101 |
102 | 103 |
104 |

Show Notifications

105 |
106 |
107 | 108 |
109 | 114 |
115 |
116 |
117 |
118 | 119 |
120 |
121 |

Framework configuration

122 | 132 |
133 | 134 |

135 | If you are using Vagrant/Homestead, use "10.0.2.2" as your SMTP-Host.
136 | For Docker, use "host.docker.internal" as your SMTP-Host. 137 |

138 | 139 | {this.props.framework === 'Laravel' &&
140 |

141 | Use these configuration values in your Laravel applications .env file: 142 |

143 | 144 |

For Laravel 7+:

145 | 146 | {`MAIL_MAILER=smtp\nMAIL_HOST=${this.props.ipAddress}\nMAIL_PORT=${this.props.port}\nMAIL_USERNAME=null\nMAIL_PASSWORD=null\nMAIL_ENCRYPTION=null`} 147 | 148 | 149 |

For Laravel 6 and below:

150 | 151 | {`MAIL_DRIVER=smtp\nMAIL_HOST=${this.props.ipAddress}\nMAIL_PORT=${this.props.port}\nMAIL_USERNAME=null\nMAIL_PASSWORD=null\nMAIL_ENCRYPTION=null`} 152 | 153 |
} 154 | 155 | {this.props.framework === 'Symfony' &&
156 |

157 | Symfony uses SwiftMailerBundle to send emails. You can find more information on how to send email on.
158 | To get started you need to modify .env file in your project directory and set MAILER_URL value: 159 |

160 | 161 | 162 | {`MAILER_URL=smtp://${this.props.ipAddress}:${this.props.port}?encryption=null&auth_mode=null`} 163 | 164 | 165 | 166 |
} 167 | 168 | {this.props.framework === 'WordPress' &&
169 |

170 | You can configure your WordPress site to send mails to Mail-Dev by using : 171 |

172 | 173 | 174 | {`function mail_dev($phpmailer) {\n\t$phpmailer->isSMTP();\n\t$phpmailer->Host = '${this.props.ipAddress}';\n\t$phpmailer->SMTPAuth = false;\n\t$phpmailer->Port = ${this.props.port};\n}\n\nadd_action('phpmailer_init', 'mail_dev');`} 175 | 176 |
} 177 | 178 | {this.props.framework === 'Yii Framework' &&
179 |

180 | You can find documentation for sending emails using SMTP in Yii Framework here.
181 | In your config file add: 182 |

183 | 184 | 185 | {`'components' => [\n\t'mailer' => [\n\t\t'class' => 'yii\\swiftmailer\\Mailer',\n\t\t'enableSwiftMailerLogging' => true,\n\t\t'transport' => [\n\t\t\t'class' => 'Swift_SmtpTransport',\n\t\t\t"host" => '${this.props.ipAddress}',\n\t\t\t"port" => ${this.props.port},\n\t\t],\n\t],\n],`} 186 | 187 | 188 |
} 189 | 190 | {this.props.framework === 'Nodemailer' &&
191 |

192 | Nodemailer is an easy to use module to send e-mails with Node.JS:
193 |

194 | 195 | 196 | {`let transport = nodemailer.createTransport({\n\thost: "${this.props.ipAddress}",\n\tport: ${this.props.port},\n});`} 197 | 198 |
} 199 | 200 | {this.props.framework === 'Ruby on Rails' &&
201 |

202 | In config/environments/*.rb specify ActionMailer defaults for your development or staging servers: 203 |

204 | 205 | 206 | {`config.action_mailer.delivery_method = :smtp \nconfig.action_mailer.smtp_settings = {\n\t:address => '${this.props.ipAddress}',\n\t:domain => '${this.props.ipAddress}',\n\t:port => '${this.props.port}',\n}`} 207 | 208 | 209 |
} 210 | 211 | {this.props.framework === 'Ruby (net/smtp)' &&
212 |

213 | Sending email using net/smtp from Ruby stdlib: 214 |

215 | 216 | 217 | {`require 'net/smtp'\n\nmessage = <<-END.split("\n").map!(&:strip).join("\n")\nFrom: Private Person \nTo: A Test User \nSubject: MAIL-DEV!\n\nThis is a test e-mail message from MAIL-DEV.\nEND\n\nNet::SMTP.start('${this.props.ipAddress}',\n ${this.props.port},\n '${this.props.ipAddress}') do |smtp|\nsmtp.send_message message, 'from@${this.props.ipAddress}',\n 'to@${this.props.ipAddress}'\nend`} 218 | 219 | 220 |
} 221 | 222 |
223 | 224 |
225 | ); 226 | } 227 | 228 | 229 | startServer() { 230 | this.props.setSrvStatus(true) 231 | this.props.setSrvResponseMessage(""); 232 | invoke("start_smtp_server", {address: `${this.props.ipAddress}:${this.props.port}`}).then(response => { 233 | if (response.length > 0) { 234 | this.props.setSrvStatus(false) 235 | this.props.setSrvResponseMessage(response) 236 | } 237 | }).catch() 238 | setTimeout(() => { 239 | if (this.props.srvStatus === true && this.props.useNotification === true) { 240 | if (!notification.isPermissionGranted()) { 241 | notification.requestPermission().then(response => { 242 | if (response === 'granted') { 243 | this.notify(); 244 | } 245 | }); 246 | } else { 247 | this.notify(); 248 | } 249 | } 250 | }, 1000) 251 | } 252 | 253 | notify() { 254 | notification.sendNotification({ 255 | title: "Mail-Dev: SMTP Connection", 256 | body: "SMTP server started successfully", 257 | }) 258 | } 259 | 260 | 261 | } 262 | 263 | export default withRouter(connect( 264 | state => ({ 265 | srvStatus: state.setting.srvStatus, 266 | srvResponseMessage: state.setting.srvResponseMessage, 267 | framework: state.setting.framework, 268 | ipAddress: state.setting.ipAddress, 269 | port: state.setting.port, 270 | 271 | forwardEmailHost: state.setting.forwardEmailHost, 272 | forwardEmailPort: state.setting.forwardEmailPort, 273 | forwardEmailUsername: state.setting.forwardEmailUsername, 274 | forwardEmailPassword: state.setting.forwardEmailPassword, 275 | forwardEnabled: state.setting.forwardEnabled, 276 | 277 | useNotification: state.setting.useNotification, 278 | 279 | }), 280 | { 281 | setSrvStatus, 282 | setSrvResponseMessage, 283 | setIpAddress, 284 | setPort, 285 | setFramework, 286 | setForwardEmailHost, 287 | setForwardEmailPort, 288 | setForwardEmailUsername, 289 | setForwardEmailPassword, 290 | setForwardEnabled, 291 | setUseNotification, 292 | } 293 | )(Settings)); 294 | -------------------------------------------------------------------------------- /src/styles/tailwind.css: -------------------------------------------------------------------------------- 1 | /* 2 | ! tailwindcss v3.1.8 | MIT License | https://tailwindcss.com 3 | */ 4 | 5 | /* 6 | 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) 7 | 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) 8 | */ 9 | 10 | *, 11 | ::before, 12 | ::after { 13 | box-sizing: border-box; 14 | /* 1 */ 15 | border-width: 0; 16 | /* 2 */ 17 | border-style: solid; 18 | /* 2 */ 19 | border-color: #e7e5e4; 20 | /* 2 */ 21 | } 22 | 23 | ::before, 24 | ::after { 25 | --tw-content: ''; 26 | } 27 | 28 | /* 29 | 1. Use a consistent sensible line-height in all browsers. 30 | 2. Prevent adjustments of font size after orientation changes in iOS. 31 | 3. Use a more readable tab size. 32 | 4. Use the user's configured `sans` font-family by default. 33 | */ 34 | 35 | html { 36 | line-height: 1.5; 37 | /* 1 */ 38 | -webkit-text-size-adjust: 100%; 39 | /* 2 */ 40 | -moz-tab-size: 4; 41 | /* 3 */ 42 | -o-tab-size: 4; 43 | tab-size: 4; 44 | /* 3 */ 45 | font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; 46 | /* 4 */ 47 | } 48 | 49 | /* 50 | 1. Remove the margin in all browsers. 51 | 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. 52 | */ 53 | 54 | body { 55 | margin: 0; 56 | /* 1 */ 57 | line-height: inherit; 58 | /* 2 */ 59 | } 60 | 61 | /* 62 | 1. Add the correct height in Firefox. 63 | 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) 64 | 3. Ensure horizontal rules are visible by default. 65 | */ 66 | 67 | hr { 68 | height: 0; 69 | /* 1 */ 70 | color: inherit; 71 | /* 2 */ 72 | border-top-width: 1px; 73 | /* 3 */ 74 | } 75 | 76 | /* 77 | Add the correct text decoration in Chrome, Edge, and Safari. 78 | */ 79 | 80 | abbr:where([title]) { 81 | -webkit-text-decoration: underline dotted; 82 | text-decoration: underline dotted; 83 | } 84 | 85 | /* 86 | Remove the default font size and weight for headings. 87 | */ 88 | 89 | h1, 90 | h2, 91 | h3, 92 | h4, 93 | h5, 94 | h6 { 95 | font-size: inherit; 96 | font-weight: inherit; 97 | } 98 | 99 | /* 100 | Reset links to optimize for opt-in styling instead of opt-out. 101 | */ 102 | 103 | a { 104 | color: inherit; 105 | text-decoration: inherit; 106 | } 107 | 108 | /* 109 | Add the correct font weight in Edge and Safari. 110 | */ 111 | 112 | b, 113 | strong { 114 | font-weight: bolder; 115 | } 116 | 117 | /* 118 | 1. Use the user's configured `mono` font family by default. 119 | 2. Correct the odd `em` font sizing in all browsers. 120 | */ 121 | 122 | code, 123 | kbd, 124 | samp, 125 | pre { 126 | font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; 127 | /* 1 */ 128 | font-size: 1em; 129 | /* 2 */ 130 | } 131 | 132 | /* 133 | Add the correct font size in all browsers. 134 | */ 135 | 136 | small { 137 | font-size: 80%; 138 | } 139 | 140 | /* 141 | Prevent `sub` and `sup` elements from affecting the line height in all browsers. 142 | */ 143 | 144 | sub, 145 | sup { 146 | font-size: 75%; 147 | line-height: 0; 148 | position: relative; 149 | vertical-align: baseline; 150 | } 151 | 152 | sub { 153 | bottom: -0.25em; 154 | } 155 | 156 | sup { 157 | top: -0.5em; 158 | } 159 | 160 | /* 161 | 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) 162 | 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) 163 | 3. Remove gaps between table borders by default. 164 | */ 165 | 166 | table { 167 | text-indent: 0; 168 | /* 1 */ 169 | border-color: inherit; 170 | /* 2 */ 171 | border-collapse: collapse; 172 | /* 3 */ 173 | } 174 | 175 | /* 176 | 1. Change the font styles in all browsers. 177 | 2. Remove the margin in Firefox and Safari. 178 | 3. Remove default padding in all browsers. 179 | */ 180 | 181 | button, 182 | input, 183 | optgroup, 184 | select, 185 | textarea { 186 | font-family: inherit; 187 | /* 1 */ 188 | font-size: 100%; 189 | /* 1 */ 190 | font-weight: inherit; 191 | /* 1 */ 192 | line-height: inherit; 193 | /* 1 */ 194 | color: inherit; 195 | /* 1 */ 196 | margin: 0; 197 | /* 2 */ 198 | padding: 0; 199 | /* 3 */ 200 | } 201 | 202 | /* 203 | Remove the inheritance of text transform in Edge and Firefox. 204 | */ 205 | 206 | button, 207 | select { 208 | text-transform: none; 209 | } 210 | 211 | /* 212 | 1. Correct the inability to style clickable types in iOS and Safari. 213 | 2. Remove default button styles. 214 | */ 215 | 216 | button, 217 | [type='button'], 218 | [type='reset'], 219 | [type='submit'] { 220 | -webkit-appearance: button; 221 | /* 1 */ 222 | background-color: transparent; 223 | /* 2 */ 224 | background-image: none; 225 | /* 2 */ 226 | } 227 | 228 | /* 229 | Use the modern Firefox focus style for all focusable elements. 230 | */ 231 | 232 | :-moz-focusring { 233 | outline: auto; 234 | } 235 | 236 | /* 237 | Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) 238 | */ 239 | 240 | :-moz-ui-invalid { 241 | box-shadow: none; 242 | } 243 | 244 | /* 245 | Add the correct vertical alignment in Chrome and Firefox. 246 | */ 247 | 248 | progress { 249 | vertical-align: baseline; 250 | } 251 | 252 | /* 253 | Correct the cursor style of increment and decrement buttons in Safari. 254 | */ 255 | 256 | ::-webkit-inner-spin-button, 257 | ::-webkit-outer-spin-button { 258 | height: auto; 259 | } 260 | 261 | /* 262 | 1. Correct the odd appearance in Chrome and Safari. 263 | 2. Correct the outline style in Safari. 264 | */ 265 | 266 | [type='search'] { 267 | -webkit-appearance: textfield; 268 | /* 1 */ 269 | outline-offset: -2px; 270 | /* 2 */ 271 | } 272 | 273 | /* 274 | Remove the inner padding in Chrome and Safari on macOS. 275 | */ 276 | 277 | ::-webkit-search-decoration { 278 | -webkit-appearance: none; 279 | } 280 | 281 | /* 282 | 1. Correct the inability to style clickable types in iOS and Safari. 283 | 2. Change font properties to `inherit` in Safari. 284 | */ 285 | 286 | ::-webkit-file-upload-button { 287 | -webkit-appearance: button; 288 | /* 1 */ 289 | font: inherit; 290 | /* 2 */ 291 | } 292 | 293 | /* 294 | Add the correct display in Chrome and Safari. 295 | */ 296 | 297 | summary { 298 | display: list-item; 299 | } 300 | 301 | /* 302 | Removes the default spacing and border for appropriate elements. 303 | */ 304 | 305 | blockquote, 306 | dl, 307 | dd, 308 | h1, 309 | h2, 310 | h3, 311 | h4, 312 | h5, 313 | h6, 314 | hr, 315 | figure, 316 | p, 317 | pre { 318 | margin: 0; 319 | } 320 | 321 | fieldset { 322 | margin: 0; 323 | padding: 0; 324 | } 325 | 326 | legend { 327 | padding: 0; 328 | } 329 | 330 | ol, 331 | ul, 332 | menu { 333 | list-style: none; 334 | margin: 0; 335 | padding: 0; 336 | } 337 | 338 | /* 339 | Prevent resizing textareas horizontally by default. 340 | */ 341 | 342 | textarea { 343 | resize: vertical; 344 | } 345 | 346 | /* 347 | 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) 348 | 2. Set the default placeholder color to the user's configured gray 400 color. 349 | */ 350 | 351 | input::-moz-placeholder, textarea::-moz-placeholder { 352 | opacity: 1; 353 | /* 1 */ 354 | color: #a8a29e; 355 | /* 2 */ 356 | } 357 | 358 | input::placeholder, 359 | textarea::placeholder { 360 | opacity: 1; 361 | /* 1 */ 362 | color: #a8a29e; 363 | /* 2 */ 364 | } 365 | 366 | /* 367 | Set the default cursor for buttons. 368 | */ 369 | 370 | button, 371 | [role="button"] { 372 | cursor: pointer; 373 | } 374 | 375 | /* 376 | Make sure disabled buttons don't get the pointer cursor. 377 | */ 378 | 379 | :disabled { 380 | cursor: default; 381 | } 382 | 383 | /* 384 | 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) 385 | 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) 386 | This can trigger a poorly considered lint error in some tools but is included by design. 387 | */ 388 | 389 | img, 390 | svg, 391 | video, 392 | canvas, 393 | audio, 394 | iframe, 395 | embed, 396 | object { 397 | display: block; 398 | /* 1 */ 399 | vertical-align: middle; 400 | /* 2 */ 401 | } 402 | 403 | /* 404 | Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) 405 | */ 406 | 407 | img, 408 | video { 409 | max-width: 100%; 410 | height: auto; 411 | } 412 | 413 | [type='text'],[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select { 414 | -webkit-appearance: none; 415 | -moz-appearance: none; 416 | appearance: none; 417 | background-color: #fff; 418 | border-color: #78716c; 419 | border-width: 1px; 420 | border-radius: 0px; 421 | padding-top: 0.5rem; 422 | padding-right: 0.75rem; 423 | padding-bottom: 0.5rem; 424 | padding-left: 0.75rem; 425 | font-size: 1rem; 426 | line-height: 1.5rem; 427 | --tw-shadow: 0 0 #0000; 428 | } 429 | 430 | [type='text']:focus, [type='email']:focus, [type='url']:focus, [type='password']:focus, [type='number']:focus, [type='date']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='week']:focus, [multiple]:focus, textarea:focus, select:focus { 431 | outline: 2px solid transparent; 432 | outline-offset: 2px; 433 | --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); 434 | --tw-ring-offset-width: 0px; 435 | --tw-ring-offset-color: #fff; 436 | --tw-ring-color: #0284c7; 437 | --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); 438 | --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); 439 | box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); 440 | border-color: #0284c7; 441 | } 442 | 443 | input::-moz-placeholder, textarea::-moz-placeholder { 444 | color: #78716c; 445 | opacity: 1; 446 | } 447 | 448 | input::placeholder,textarea::placeholder { 449 | color: #78716c; 450 | opacity: 1; 451 | } 452 | 453 | ::-webkit-datetime-edit-fields-wrapper { 454 | padding: 0; 455 | } 456 | 457 | ::-webkit-date-and-time-value { 458 | min-height: 1.5em; 459 | } 460 | 461 | ::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field { 462 | padding-top: 0; 463 | padding-bottom: 0; 464 | } 465 | 466 | select { 467 | background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%2378716c' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e"); 468 | background-position: right 0.5rem center; 469 | background-repeat: no-repeat; 470 | background-size: 1.5em 1.5em; 471 | padding-right: 2.5rem; 472 | -webkit-print-color-adjust: exact; 473 | color-adjust: exact; 474 | print-color-adjust: exact; 475 | } 476 | 477 | [multiple] { 478 | background-image: initial; 479 | background-position: initial; 480 | background-repeat: unset; 481 | background-size: initial; 482 | padding-right: 0.75rem; 483 | -webkit-print-color-adjust: unset; 484 | color-adjust: unset; 485 | print-color-adjust: unset; 486 | } 487 | 488 | [type='checkbox'],[type='radio'] { 489 | -webkit-appearance: none; 490 | -moz-appearance: none; 491 | appearance: none; 492 | padding: 0; 493 | -webkit-print-color-adjust: exact; 494 | color-adjust: exact; 495 | print-color-adjust: exact; 496 | display: inline-block; 497 | vertical-align: middle; 498 | background-origin: border-box; 499 | -webkit-user-select: none; 500 | -moz-user-select: none; 501 | user-select: none; 502 | flex-shrink: 0; 503 | height: 1rem; 504 | width: 1rem; 505 | color: #0284c7; 506 | background-color: #fff; 507 | border-color: #78716c; 508 | border-width: 1px; 509 | --tw-shadow: 0 0 #0000; 510 | } 511 | 512 | [type='checkbox'] { 513 | border-radius: 0px; 514 | } 515 | 516 | [type='radio'] { 517 | border-radius: 100%; 518 | } 519 | 520 | [type='checkbox']:focus,[type='radio']:focus { 521 | outline: 2px solid transparent; 522 | outline-offset: 2px; 523 | --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); 524 | --tw-ring-offset-width: 2px; 525 | --tw-ring-offset-color: #fff; 526 | --tw-ring-color: #0284c7; 527 | --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); 528 | --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); 529 | box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); 530 | } 531 | 532 | [type='checkbox']:checked,[type='radio']:checked { 533 | border-color: transparent; 534 | background-color: currentColor; 535 | background-size: 100% 100%; 536 | background-position: center; 537 | background-repeat: no-repeat; 538 | } 539 | 540 | [type='checkbox']:checked { 541 | background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e"); 542 | } 543 | 544 | [type='radio']:checked { 545 | background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e"); 546 | } 547 | 548 | [type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus { 549 | border-color: transparent; 550 | background-color: currentColor; 551 | } 552 | 553 | [type='checkbox']:indeterminate { 554 | background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e"); 555 | border-color: transparent; 556 | background-color: currentColor; 557 | background-size: 100% 100%; 558 | background-position: center; 559 | background-repeat: no-repeat; 560 | } 561 | 562 | [type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus { 563 | border-color: transparent; 564 | background-color: currentColor; 565 | } 566 | 567 | [type='file'] { 568 | background: unset; 569 | border-color: inherit; 570 | border-width: 0; 571 | border-radius: 0; 572 | padding: 0; 573 | font-size: unset; 574 | line-height: inherit; 575 | } 576 | 577 | [type='file']:focus { 578 | outline: 1px solid ButtonText; 579 | outline: 1px auto -webkit-focus-ring-color; 580 | } 581 | 582 | *, ::before, ::after { 583 | --tw-border-spacing-x: 0; 584 | --tw-border-spacing-y: 0; 585 | --tw-translate-x: 0; 586 | --tw-translate-y: 0; 587 | --tw-rotate: 0; 588 | --tw-skew-x: 0; 589 | --tw-skew-y: 0; 590 | --tw-scale-x: 1; 591 | --tw-scale-y: 1; 592 | --tw-pan-x: ; 593 | --tw-pan-y: ; 594 | --tw-pinch-zoom: ; 595 | --tw-scroll-snap-strictness: proximity; 596 | --tw-ordinal: ; 597 | --tw-slashed-zero: ; 598 | --tw-numeric-figure: ; 599 | --tw-numeric-spacing: ; 600 | --tw-numeric-fraction: ; 601 | --tw-ring-inset: ; 602 | --tw-ring-offset-width: 0px; 603 | --tw-ring-offset-color: #fff; 604 | --tw-ring-color: rgb(14 165 233 / 0.5); 605 | --tw-ring-offset-shadow: 0 0 #0000; 606 | --tw-ring-shadow: 0 0 #0000; 607 | --tw-shadow: 0 0 #0000; 608 | --tw-shadow-colored: 0 0 #0000; 609 | --tw-blur: ; 610 | --tw-brightness: ; 611 | --tw-contrast: ; 612 | --tw-grayscale: ; 613 | --tw-hue-rotate: ; 614 | --tw-invert: ; 615 | --tw-saturate: ; 616 | --tw-sepia: ; 617 | --tw-drop-shadow: ; 618 | --tw-backdrop-blur: ; 619 | --tw-backdrop-brightness: ; 620 | --tw-backdrop-contrast: ; 621 | --tw-backdrop-grayscale: ; 622 | --tw-backdrop-hue-rotate: ; 623 | --tw-backdrop-invert: ; 624 | --tw-backdrop-opacity: ; 625 | --tw-backdrop-saturate: ; 626 | --tw-backdrop-sepia: ; 627 | } 628 | 629 | ::-webkit-backdrop { 630 | --tw-border-spacing-x: 0; 631 | --tw-border-spacing-y: 0; 632 | --tw-translate-x: 0; 633 | --tw-translate-y: 0; 634 | --tw-rotate: 0; 635 | --tw-skew-x: 0; 636 | --tw-skew-y: 0; 637 | --tw-scale-x: 1; 638 | --tw-scale-y: 1; 639 | --tw-pan-x: ; 640 | --tw-pan-y: ; 641 | --tw-pinch-zoom: ; 642 | --tw-scroll-snap-strictness: proximity; 643 | --tw-ordinal: ; 644 | --tw-slashed-zero: ; 645 | --tw-numeric-figure: ; 646 | --tw-numeric-spacing: ; 647 | --tw-numeric-fraction: ; 648 | --tw-ring-inset: ; 649 | --tw-ring-offset-width: 0px; 650 | --tw-ring-offset-color: #fff; 651 | --tw-ring-color: rgb(14 165 233 / 0.5); 652 | --tw-ring-offset-shadow: 0 0 #0000; 653 | --tw-ring-shadow: 0 0 #0000; 654 | --tw-shadow: 0 0 #0000; 655 | --tw-shadow-colored: 0 0 #0000; 656 | --tw-blur: ; 657 | --tw-brightness: ; 658 | --tw-contrast: ; 659 | --tw-grayscale: ; 660 | --tw-hue-rotate: ; 661 | --tw-invert: ; 662 | --tw-saturate: ; 663 | --tw-sepia: ; 664 | --tw-drop-shadow: ; 665 | --tw-backdrop-blur: ; 666 | --tw-backdrop-brightness: ; 667 | --tw-backdrop-contrast: ; 668 | --tw-backdrop-grayscale: ; 669 | --tw-backdrop-hue-rotate: ; 670 | --tw-backdrop-invert: ; 671 | --tw-backdrop-opacity: ; 672 | --tw-backdrop-saturate: ; 673 | --tw-backdrop-sepia: ; 674 | } 675 | 676 | ::backdrop { 677 | --tw-border-spacing-x: 0; 678 | --tw-border-spacing-y: 0; 679 | --tw-translate-x: 0; 680 | --tw-translate-y: 0; 681 | --tw-rotate: 0; 682 | --tw-skew-x: 0; 683 | --tw-skew-y: 0; 684 | --tw-scale-x: 1; 685 | --tw-scale-y: 1; 686 | --tw-pan-x: ; 687 | --tw-pan-y: ; 688 | --tw-pinch-zoom: ; 689 | --tw-scroll-snap-strictness: proximity; 690 | --tw-ordinal: ; 691 | --tw-slashed-zero: ; 692 | --tw-numeric-figure: ; 693 | --tw-numeric-spacing: ; 694 | --tw-numeric-fraction: ; 695 | --tw-ring-inset: ; 696 | --tw-ring-offset-width: 0px; 697 | --tw-ring-offset-color: #fff; 698 | --tw-ring-color: rgb(14 165 233 / 0.5); 699 | --tw-ring-offset-shadow: 0 0 #0000; 700 | --tw-ring-shadow: 0 0 #0000; 701 | --tw-shadow: 0 0 #0000; 702 | --tw-shadow-colored: 0 0 #0000; 703 | --tw-blur: ; 704 | --tw-brightness: ; 705 | --tw-contrast: ; 706 | --tw-grayscale: ; 707 | --tw-hue-rotate: ; 708 | --tw-invert: ; 709 | --tw-saturate: ; 710 | --tw-sepia: ; 711 | --tw-drop-shadow: ; 712 | --tw-backdrop-blur: ; 713 | --tw-backdrop-brightness: ; 714 | --tw-backdrop-contrast: ; 715 | --tw-backdrop-grayscale: ; 716 | --tw-backdrop-hue-rotate: ; 717 | --tw-backdrop-invert: ; 718 | --tw-backdrop-opacity: ; 719 | --tw-backdrop-saturate: ; 720 | --tw-backdrop-sepia: ; 721 | } 722 | 723 | .absolute { 724 | position: absolute; 725 | } 726 | 727 | .relative { 728 | position: relative; 729 | } 730 | 731 | .top-5 { 732 | top: 1.25rem; 733 | } 734 | 735 | .-left-1 { 736 | left: -0.25rem; 737 | } 738 | 739 | .z-40 { 740 | z-index: 40; 741 | } 742 | 743 | .mb-1 { 744 | margin-bottom: 0.25rem; 745 | } 746 | 747 | .mb-3 { 748 | margin-bottom: 0.75rem; 749 | } 750 | 751 | .mb-4 { 752 | margin-bottom: 1rem; 753 | } 754 | 755 | .mb-2 { 756 | margin-bottom: 0.5rem; 757 | } 758 | 759 | .ml-2 { 760 | margin-left: 0.5rem; 761 | } 762 | 763 | .ml-auto { 764 | margin-left: auto; 765 | } 766 | 767 | .mr-2 { 768 | margin-right: 0.5rem; 769 | } 770 | 771 | .mt-4 { 772 | margin-top: 1rem; 773 | } 774 | 775 | .mr-1\.5 { 776 | margin-right: 0.375rem; 777 | } 778 | 779 | .mr-1 { 780 | margin-right: 0.25rem; 781 | } 782 | 783 | .mr-0\.5 { 784 | margin-right: 0.125rem; 785 | } 786 | 787 | .mr-0 { 788 | margin-right: 0px; 789 | } 790 | 791 | .ml-1 { 792 | margin-left: 0.25rem; 793 | } 794 | 795 | .mr-3 { 796 | margin-right: 0.75rem; 797 | } 798 | 799 | .mt-1 { 800 | margin-top: 0.25rem; 801 | } 802 | 803 | .block { 804 | display: block; 805 | } 806 | 807 | .flex { 808 | display: flex; 809 | } 810 | 811 | .inline-flex { 812 | display: inline-flex; 813 | } 814 | 815 | .table { 816 | display: table; 817 | } 818 | 819 | .contents { 820 | display: contents; 821 | } 822 | 823 | .hidden { 824 | display: none; 825 | } 826 | 827 | .h-screen { 828 | height: 100vh; 829 | } 830 | 831 | .h-full { 832 | height: 100%; 833 | } 834 | 835 | .h-4 { 836 | height: 1rem; 837 | } 838 | 839 | .h-10 { 840 | height: 2.5rem; 841 | } 842 | 843 | .h-8 { 844 | height: 2rem; 845 | } 846 | 847 | .h-5 { 848 | height: 1.25rem; 849 | } 850 | 851 | .h-2 { 852 | height: 0.5rem; 853 | } 854 | 855 | .h-3 { 856 | height: 0.75rem; 857 | } 858 | 859 | .min-h-screen { 860 | min-height: 100vh; 861 | } 862 | 863 | .w-full { 864 | width: 100%; 865 | } 866 | 867 | .w-16 { 868 | width: 4rem; 869 | } 870 | 871 | .w-20 { 872 | width: 5rem; 873 | } 874 | 875 | .w-2 { 876 | width: 0.5rem; 877 | } 878 | 879 | .w-10 { 880 | width: 2.5rem; 881 | } 882 | 883 | .w-4 { 884 | width: 1rem; 885 | } 886 | 887 | .w-64 { 888 | width: 16rem; 889 | } 890 | 891 | .w-5 { 892 | width: 1.25rem; 893 | } 894 | 895 | .w-44 { 896 | width: 11rem; 897 | } 898 | 899 | .w-3 { 900 | width: 0.75rem; 901 | } 902 | 903 | .w-32 { 904 | width: 8rem; 905 | } 906 | 907 | .w-48 { 908 | width: 12rem; 909 | } 910 | 911 | .w-40 { 912 | width: 10rem; 913 | } 914 | 915 | .w-36 { 916 | width: 9rem; 917 | } 918 | 919 | .flex-shrink-0 { 920 | flex-shrink: 0; 921 | } 922 | 923 | .grow { 924 | flex-grow: 1; 925 | } 926 | 927 | .border-collapse { 928 | border-collapse: collapse; 929 | } 930 | 931 | @-webkit-keyframes pulse { 932 | 50% { 933 | opacity: .5; 934 | } 935 | } 936 | 937 | @keyframes pulse { 938 | 50% { 939 | opacity: .5; 940 | } 941 | } 942 | 943 | .animate-pulse { 944 | -webkit-animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; 945 | animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; 946 | } 947 | 948 | .cursor-pointer { 949 | cursor: pointer; 950 | } 951 | 952 | .select-none { 953 | -webkit-user-select: none; 954 | -moz-user-select: none; 955 | user-select: none; 956 | } 957 | 958 | .resize { 959 | resize: both; 960 | } 961 | 962 | .flex-col { 963 | flex-direction: column; 964 | } 965 | 966 | .items-center { 967 | align-items: center; 968 | } 969 | 970 | .justify-end { 971 | justify-content: flex-end; 972 | } 973 | 974 | .justify-center { 975 | justify-content: center; 976 | } 977 | 978 | .gap-x-1 { 979 | -moz-column-gap: 0.25rem; 980 | column-gap: 0.25rem; 981 | } 982 | 983 | .overflow-y-auto { 984 | overflow-y: auto; 985 | } 986 | 987 | .truncate { 988 | overflow: hidden; 989 | text-overflow: ellipsis; 990 | white-space: nowrap; 991 | } 992 | 993 | .whitespace-nowrap { 994 | white-space: nowrap; 995 | } 996 | 997 | .whitespace-pre-wrap { 998 | white-space: pre-wrap; 999 | } 1000 | 1001 | .rounded { 1002 | border-radius: 0.25rem; 1003 | } 1004 | 1005 | .rounded-full { 1006 | border-radius: 9999px; 1007 | } 1008 | 1009 | .rounded-md { 1010 | border-radius: 0.375rem; 1011 | } 1012 | 1013 | .border { 1014 | border-width: 1px; 1015 | } 1016 | 1017 | .border-t-2 { 1018 | border-top-width: 2px; 1019 | } 1020 | 1021 | .border-r { 1022 | border-right-width: 1px; 1023 | } 1024 | 1025 | .border-b { 1026 | border-bottom-width: 1px; 1027 | } 1028 | 1029 | .border-b-2 { 1030 | border-bottom-width: 2px; 1031 | } 1032 | 1033 | .border-dashed { 1034 | border-style: dashed; 1035 | } 1036 | 1037 | .border-gray-300 { 1038 | --tw-border-opacity: 1; 1039 | border-color: rgb(214 211 209 / var(--tw-border-opacity)); 1040 | } 1041 | 1042 | .border-transparent { 1043 | border-color: transparent; 1044 | } 1045 | 1046 | .border-opacity-70 { 1047 | --tw-border-opacity: 0.7; 1048 | } 1049 | 1050 | .bg-gray-100 { 1051 | --tw-bg-opacity: 1; 1052 | background-color: rgb(245 245 244 / var(--tw-bg-opacity)); 1053 | } 1054 | 1055 | .bg-gray-300 { 1056 | --tw-bg-opacity: 1; 1057 | background-color: rgb(214 211 209 / var(--tw-bg-opacity)); 1058 | } 1059 | 1060 | .bg-gray-700 { 1061 | --tw-bg-opacity: 1; 1062 | background-color: rgb(68 64 60 / var(--tw-bg-opacity)); 1063 | } 1064 | 1065 | .bg-gray-400 { 1066 | --tw-bg-opacity: 1; 1067 | background-color: rgb(168 162 158 / var(--tw-bg-opacity)); 1068 | } 1069 | 1070 | .bg-gray-900 { 1071 | --tw-bg-opacity: 1; 1072 | background-color: rgb(28 25 23 / var(--tw-bg-opacity)); 1073 | } 1074 | 1075 | .bg-green-500 { 1076 | --tw-bg-opacity: 1; 1077 | background-color: rgb(16 185 129 / var(--tw-bg-opacity)); 1078 | } 1079 | 1080 | .bg-gray-200 { 1081 | --tw-bg-opacity: 1; 1082 | background-color: rgb(231 229 228 / var(--tw-bg-opacity)); 1083 | } 1084 | 1085 | .bg-gray-50 { 1086 | --tw-bg-opacity: 1; 1087 | background-color: rgb(250 250 249 / var(--tw-bg-opacity)); 1088 | } 1089 | 1090 | .bg-white { 1091 | --tw-bg-opacity: 1; 1092 | background-color: rgb(255 255 255 / var(--tw-bg-opacity)); 1093 | } 1094 | 1095 | .bg-gray-600 { 1096 | --tw-bg-opacity: 1; 1097 | background-color: rgb(87 83 78 / var(--tw-bg-opacity)); 1098 | } 1099 | 1100 | .bg-gray-500 { 1101 | --tw-bg-opacity: 1; 1102 | background-color: rgb(120 113 108 / var(--tw-bg-opacity)); 1103 | } 1104 | 1105 | .bg-red-500 { 1106 | --tw-bg-opacity: 1; 1107 | background-color: rgb(239 68 68 / var(--tw-bg-opacity)); 1108 | } 1109 | 1110 | .bg-opacity-40 { 1111 | --tw-bg-opacity: 0.4; 1112 | } 1113 | 1114 | .bg-opacity-50 { 1115 | --tw-bg-opacity: 0.5; 1116 | } 1117 | 1118 | .fill-current { 1119 | fill: currentColor; 1120 | } 1121 | 1122 | .p-2 { 1123 | padding: 0.5rem; 1124 | } 1125 | 1126 | .p-4 { 1127 | padding: 1rem; 1128 | } 1129 | 1130 | .py-2 { 1131 | padding-top: 0.5rem; 1132 | padding-bottom: 0.5rem; 1133 | } 1134 | 1135 | .py-1 { 1136 | padding-top: 0.25rem; 1137 | padding-bottom: 0.25rem; 1138 | } 1139 | 1140 | .px-2 { 1141 | padding-left: 0.5rem; 1142 | padding-right: 0.5rem; 1143 | } 1144 | 1145 | .px-2\.5 { 1146 | padding-left: 0.625rem; 1147 | padding-right: 0.625rem; 1148 | } 1149 | 1150 | .py-1\.5 { 1151 | padding-top: 0.375rem; 1152 | padding-bottom: 0.375rem; 1153 | } 1154 | 1155 | .py-3 { 1156 | padding-top: 0.75rem; 1157 | padding-bottom: 0.75rem; 1158 | } 1159 | 1160 | .px-6 { 1161 | padding-left: 1.5rem; 1162 | padding-right: 1.5rem; 1163 | } 1164 | 1165 | .py-0\.5 { 1166 | padding-top: 0.125rem; 1167 | padding-bottom: 0.125rem; 1168 | } 1169 | 1170 | .py-0 { 1171 | padding-top: 0px; 1172 | padding-bottom: 0px; 1173 | } 1174 | 1175 | .py-4 { 1176 | padding-top: 1rem; 1177 | padding-bottom: 1rem; 1178 | } 1179 | 1180 | .px-4 { 1181 | padding-left: 1rem; 1182 | padding-right: 1rem; 1183 | } 1184 | 1185 | .px-3 { 1186 | padding-left: 0.75rem; 1187 | padding-right: 0.75rem; 1188 | } 1189 | 1190 | .py-2\.5 { 1191 | padding-top: 0.625rem; 1192 | padding-bottom: 0.625rem; 1193 | } 1194 | 1195 | .pt-2 { 1196 | padding-top: 0.5rem; 1197 | } 1198 | 1199 | .pr-4 { 1200 | padding-right: 1rem; 1201 | } 1202 | 1203 | .pb-4 { 1204 | padding-bottom: 1rem; 1205 | } 1206 | 1207 | .pb-2 { 1208 | padding-bottom: 0.5rem; 1209 | } 1210 | 1211 | .pb-3 { 1212 | padding-bottom: 0.75rem; 1213 | } 1214 | 1215 | .pl-3 { 1216 | padding-left: 0.75rem; 1217 | } 1218 | 1219 | .pr-10 { 1220 | padding-right: 2.5rem; 1221 | } 1222 | 1223 | .text-left { 1224 | text-align: left; 1225 | } 1226 | 1227 | .text-center { 1228 | text-align: center; 1229 | } 1230 | 1231 | .text-right { 1232 | text-align: right; 1233 | } 1234 | 1235 | .font-sans { 1236 | font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; 1237 | } 1238 | 1239 | .font-mono { 1240 | font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; 1241 | } 1242 | 1243 | .text-sm { 1244 | font-size: 0.875rem; 1245 | line-height: 1.25rem; 1246 | } 1247 | 1248 | .text-xs { 1249 | font-size: 0.75rem; 1250 | line-height: 1rem; 1251 | } 1252 | 1253 | .text-lg { 1254 | font-size: 1.125rem; 1255 | line-height: 1.75rem; 1256 | } 1257 | 1258 | .text-xl { 1259 | font-size: 1.25rem; 1260 | line-height: 1.75rem; 1261 | } 1262 | 1263 | .text-base { 1264 | font-size: 1rem; 1265 | line-height: 1.5rem; 1266 | } 1267 | 1268 | .font-semibold { 1269 | font-weight: 600; 1270 | } 1271 | 1272 | .font-medium { 1273 | font-weight: 500; 1274 | } 1275 | 1276 | .font-bold { 1277 | font-weight: 700; 1278 | } 1279 | 1280 | .uppercase { 1281 | text-transform: uppercase; 1282 | } 1283 | 1284 | .leading-4 { 1285 | line-height: 1rem; 1286 | } 1287 | 1288 | .text-gray-600 { 1289 | --tw-text-opacity: 1; 1290 | color: rgb(87 83 78 / var(--tw-text-opacity)); 1291 | } 1292 | 1293 | .text-gray-100 { 1294 | --tw-text-opacity: 1; 1295 | color: rgb(245 245 244 / var(--tw-text-opacity)); 1296 | } 1297 | 1298 | .text-gray-700 { 1299 | --tw-text-opacity: 1; 1300 | color: rgb(68 64 60 / var(--tw-text-opacity)); 1301 | } 1302 | 1303 | .text-gray-500 { 1304 | --tw-text-opacity: 1; 1305 | color: rgb(120 113 108 / var(--tw-text-opacity)); 1306 | } 1307 | 1308 | .text-gray-300 { 1309 | --tw-text-opacity: 1; 1310 | color: rgb(214 211 209 / var(--tw-text-opacity)); 1311 | } 1312 | 1313 | .text-green-500 { 1314 | --tw-text-opacity: 1; 1315 | color: rgb(16 185 129 / var(--tw-text-opacity)); 1316 | } 1317 | 1318 | .text-gray-800 { 1319 | --tw-text-opacity: 1; 1320 | color: rgb(41 37 36 / var(--tw-text-opacity)); 1321 | } 1322 | 1323 | .text-white { 1324 | --tw-text-opacity: 1; 1325 | color: rgb(255 255 255 / var(--tw-text-opacity)); 1326 | } 1327 | 1328 | .underline { 1329 | -webkit-text-decoration-line: underline; 1330 | text-decoration-line: underline; 1331 | } 1332 | 1333 | .opacity-40 { 1334 | opacity: 0.4; 1335 | } 1336 | 1337 | .opacity-60 { 1338 | opacity: 0.6; 1339 | } 1340 | 1341 | .opacity-10 { 1342 | opacity: 0.1; 1343 | } 1344 | 1345 | .opacity-80 { 1346 | opacity: 0.8; 1347 | } 1348 | 1349 | .shadow-inner { 1350 | --tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / 0.05); 1351 | --tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color); 1352 | box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); 1353 | } 1354 | 1355 | .shadow-sm { 1356 | --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); 1357 | --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); 1358 | box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); 1359 | } 1360 | 1361 | .filter { 1362 | filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); 1363 | } 1364 | 1365 | .odd\:bg-opacity-20:nth-child(odd) { 1366 | --tw-bg-opacity: 0.2; 1367 | } 1368 | 1369 | .even\:bg-opacity-40:nth-child(even) { 1370 | --tw-bg-opacity: 0.4; 1371 | } 1372 | 1373 | .hover\:bg-gray-300:hover { 1374 | --tw-bg-opacity: 1; 1375 | background-color: rgb(214 211 209 / var(--tw-bg-opacity)); 1376 | } 1377 | 1378 | .hover\:bg-green-600:hover { 1379 | --tw-bg-opacity: 1; 1380 | background-color: rgb(5 150 105 / var(--tw-bg-opacity)); 1381 | } 1382 | 1383 | .hover\:bg-red-600:hover { 1384 | --tw-bg-opacity: 1; 1385 | background-color: rgb(220 38 38 / var(--tw-bg-opacity)); 1386 | } 1387 | 1388 | .hover\:bg-opacity-40:hover { 1389 | --tw-bg-opacity: 0.4; 1390 | } 1391 | 1392 | .hover\:text-red-500:hover { 1393 | --tw-text-opacity: 1; 1394 | color: rgb(239 68 68 / var(--tw-text-opacity)); 1395 | } 1396 | 1397 | .hover\:text-gray-900:hover { 1398 | --tw-text-opacity: 1; 1399 | color: rgb(28 25 23 / var(--tw-text-opacity)); 1400 | } 1401 | 1402 | .hover\:opacity-90:hover { 1403 | opacity: 0.9; 1404 | } 1405 | 1406 | .hover\:opacity-80:hover { 1407 | opacity: 0.8; 1408 | } 1409 | 1410 | .focus\:border-gray-500:focus { 1411 | --tw-border-opacity: 1; 1412 | border-color: rgb(120 113 108 / var(--tw-border-opacity)); 1413 | } 1414 | 1415 | .focus\:outline-none:focus { 1416 | outline: 2px solid transparent; 1417 | outline-offset: 2px; 1418 | } 1419 | 1420 | .focus\:ring-2:focus { 1421 | --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); 1422 | --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); 1423 | box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); 1424 | } 1425 | 1426 | .focus\:ring-gray-500:focus { 1427 | --tw-ring-opacity: 1; 1428 | --tw-ring-color: rgb(120 113 108 / var(--tw-ring-opacity)); 1429 | } 1430 | 1431 | .focus\:ring-opacity-40:focus { 1432 | --tw-ring-opacity: 0.4; 1433 | } 1434 | 1435 | .focus\:ring-offset-2:focus { 1436 | --tw-ring-offset-width: 2px; 1437 | } 1438 | 1439 | @media (min-width: 640px) { 1440 | .sm\:text-sm { 1441 | font-size: 0.875rem; 1442 | line-height: 1.25rem; 1443 | } 1444 | } 1445 | 1446 | @media (min-width: 1024px) { 1447 | .lg\:w-80 { 1448 | width: 20rem; 1449 | } 1450 | 1451 | .lg\:w-60 { 1452 | width: 15rem; 1453 | } 1454 | } 1455 | 1456 | @media (min-width: 1280px) { 1457 | .xl\:w-96 { 1458 | width: 24rem; 1459 | } 1460 | 1461 | .xl\:w-72 { 1462 | width: 18rem; 1463 | } 1464 | 1465 | .xl\:w-64 { 1466 | width: 16rem; 1467 | } 1468 | 1469 | .xl\:w-28 { 1470 | width: 7rem; 1471 | } 1472 | 1473 | .xl\:w-56 { 1474 | width: 14rem; 1475 | } 1476 | } -------------------------------------------------------------------------------- /src-tauri/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "adler" 7 | version = "1.0.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 10 | 11 | [[package]] 12 | name = "adler32" 13 | version = "1.2.0" 14 | source = "registry+https://github.com/rust-lang/crates.io-index" 15 | checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" 16 | 17 | [[package]] 18 | name = "aho-corasick" 19 | version = "0.7.18" 20 | source = "registry+https://github.com/rust-lang/crates.io-index" 21 | checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" 22 | dependencies = [ 23 | "memchr", 24 | ] 25 | 26 | [[package]] 27 | name = "alloc-no-stdlib" 28 | version = "2.0.3" 29 | source = "registry+https://github.com/rust-lang/crates.io-index" 30 | checksum = "35ef4730490ad1c4eae5c4325b2a95f521d023e5c885853ff7aca0a6a1631db3" 31 | 32 | [[package]] 33 | name = "alloc-stdlib" 34 | version = "0.2.1" 35 | source = "registry+https://github.com/rust-lang/crates.io-index" 36 | checksum = "697ed7edc0f1711de49ce108c541623a0af97c6c60b2f6e2b65229847ac843c2" 37 | dependencies = [ 38 | "alloc-no-stdlib", 39 | ] 40 | 41 | [[package]] 42 | name = "ansi_term" 43 | version = "0.12.1" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" 46 | dependencies = [ 47 | "winapi", 48 | ] 49 | 50 | [[package]] 51 | name = "anyhow" 52 | version = "1.0.59" 53 | source = "registry+https://github.com/rust-lang/crates.io-index" 54 | checksum = "c91f1f46651137be86f3a2b9a8359f9ab421d04d941c62b5982e1ca21113adf9" 55 | 56 | [[package]] 57 | name = "atk" 58 | version = "0.15.1" 59 | source = "registry+https://github.com/rust-lang/crates.io-index" 60 | checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd" 61 | dependencies = [ 62 | "atk-sys", 63 | "bitflags", 64 | "glib", 65 | "libc", 66 | ] 67 | 68 | [[package]] 69 | name = "atk-sys" 70 | version = "0.15.1" 71 | source = "registry+https://github.com/rust-lang/crates.io-index" 72 | checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6" 73 | dependencies = [ 74 | "glib-sys", 75 | "gobject-sys", 76 | "libc", 77 | "system-deps 6.0.2", 78 | ] 79 | 80 | [[package]] 81 | name = "attohttpc" 82 | version = "0.19.1" 83 | source = "registry+https://github.com/rust-lang/crates.io-index" 84 | checksum = "262c3f7f5d61249d8c00e5546e2685cd15ebeeb1bc0f3cc5449350a1cb07319e" 85 | dependencies = [ 86 | "flate2", 87 | "http", 88 | "log", 89 | "native-tls", 90 | "openssl", 91 | "serde", 92 | "serde_json", 93 | "serde_urlencoded", 94 | "url", 95 | "wildmatch", 96 | ] 97 | 98 | [[package]] 99 | name = "autocfg" 100 | version = "1.1.0" 101 | source = "registry+https://github.com/rust-lang/crates.io-index" 102 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 103 | 104 | [[package]] 105 | name = "base64" 106 | version = "0.13.0" 107 | source = "registry+https://github.com/rust-lang/crates.io-index" 108 | checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" 109 | 110 | [[package]] 111 | name = "bitflags" 112 | version = "1.3.2" 113 | source = "registry+https://github.com/rust-lang/crates.io-index" 114 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 115 | 116 | [[package]] 117 | name = "block" 118 | version = "0.1.6" 119 | source = "registry+https://github.com/rust-lang/crates.io-index" 120 | checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 121 | 122 | [[package]] 123 | name = "block-buffer" 124 | version = "0.10.2" 125 | source = "registry+https://github.com/rust-lang/crates.io-index" 126 | checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" 127 | dependencies = [ 128 | "generic-array", 129 | ] 130 | 131 | [[package]] 132 | name = "brotli" 133 | version = "3.3.4" 134 | source = "registry+https://github.com/rust-lang/crates.io-index" 135 | checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" 136 | dependencies = [ 137 | "alloc-no-stdlib", 138 | "alloc-stdlib", 139 | "brotli-decompressor", 140 | ] 141 | 142 | [[package]] 143 | name = "brotli-decompressor" 144 | version = "2.3.2" 145 | source = "registry+https://github.com/rust-lang/crates.io-index" 146 | checksum = "59ad2d4653bf5ca36ae797b1f4bb4dbddb60ce49ca4aed8a2ce4829f60425b80" 147 | dependencies = [ 148 | "alloc-no-stdlib", 149 | "alloc-stdlib", 150 | ] 151 | 152 | [[package]] 153 | name = "bstr" 154 | version = "0.2.17" 155 | source = "registry+https://github.com/rust-lang/crates.io-index" 156 | checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" 157 | dependencies = [ 158 | "memchr", 159 | ] 160 | 161 | [[package]] 162 | name = "bufstream" 163 | version = "0.1.4" 164 | source = "registry+https://github.com/rust-lang/crates.io-index" 165 | checksum = "40e38929add23cdf8a366df9b0e088953150724bcbe5fc330b0d8eb3b328eec8" 166 | 167 | [[package]] 168 | name = "bumpalo" 169 | version = "3.10.0" 170 | source = "registry+https://github.com/rust-lang/crates.io-index" 171 | checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" 172 | 173 | [[package]] 174 | name = "bytemuck" 175 | version = "1.11.0" 176 | source = "registry+https://github.com/rust-lang/crates.io-index" 177 | checksum = "a5377c8865e74a160d21f29c2d40669f53286db6eab59b88540cbb12ffc8b835" 178 | 179 | [[package]] 180 | name = "byteorder" 181 | version = "1.4.3" 182 | source = "registry+https://github.com/rust-lang/crates.io-index" 183 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 184 | 185 | [[package]] 186 | name = "bytes" 187 | version = "1.2.1" 188 | source = "registry+https://github.com/rust-lang/crates.io-index" 189 | checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" 190 | 191 | [[package]] 192 | name = "cairo-rs" 193 | version = "0.15.12" 194 | source = "registry+https://github.com/rust-lang/crates.io-index" 195 | checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc" 196 | dependencies = [ 197 | "bitflags", 198 | "cairo-sys-rs", 199 | "glib", 200 | "libc", 201 | "thiserror", 202 | ] 203 | 204 | [[package]] 205 | name = "cairo-sys-rs" 206 | version = "0.15.1" 207 | source = "registry+https://github.com/rust-lang/crates.io-index" 208 | checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8" 209 | dependencies = [ 210 | "glib-sys", 211 | "libc", 212 | "system-deps 6.0.2", 213 | ] 214 | 215 | [[package]] 216 | name = "cargo_toml" 217 | version = "0.11.5" 218 | source = "registry+https://github.com/rust-lang/crates.io-index" 219 | checksum = "5809dd3e6444651fd1cdd3dbec71eca438c439a0fcc8081674a14da0afe50185" 220 | dependencies = [ 221 | "serde", 222 | "serde_derive", 223 | "toml", 224 | ] 225 | 226 | [[package]] 227 | name = "cc" 228 | version = "1.0.73" 229 | source = "registry+https://github.com/rust-lang/crates.io-index" 230 | checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" 231 | 232 | [[package]] 233 | name = "cesu8" 234 | version = "1.1.0" 235 | source = "registry+https://github.com/rust-lang/crates.io-index" 236 | checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" 237 | 238 | [[package]] 239 | name = "cfb" 240 | version = "0.6.1" 241 | source = "registry+https://github.com/rust-lang/crates.io-index" 242 | checksum = "74f89d248799e3f15f91b70917f65381062a01bb8e222700ea0e5a7ff9785f9c" 243 | dependencies = [ 244 | "byteorder", 245 | "uuid 0.8.2", 246 | ] 247 | 248 | [[package]] 249 | name = "cfg-expr" 250 | version = "0.9.1" 251 | source = "registry+https://github.com/rust-lang/crates.io-index" 252 | checksum = "3431df59f28accaf4cb4eed4a9acc66bea3f3c3753aa6cdc2f024174ef232af7" 253 | dependencies = [ 254 | "smallvec", 255 | ] 256 | 257 | [[package]] 258 | name = "cfg-expr" 259 | version = "0.10.3" 260 | source = "registry+https://github.com/rust-lang/crates.io-index" 261 | checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db" 262 | dependencies = [ 263 | "smallvec", 264 | ] 265 | 266 | [[package]] 267 | name = "cfg-if" 268 | version = "1.0.0" 269 | source = "registry+https://github.com/rust-lang/crates.io-index" 270 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 271 | 272 | [[package]] 273 | name = "charset" 274 | version = "0.1.3" 275 | source = "registry+https://github.com/rust-lang/crates.io-index" 276 | checksum = "18e9079d1a12a2cc2bffb5db039c43661836ead4082120d5844f02555aca2d46" 277 | dependencies = [ 278 | "base64", 279 | "encoding_rs", 280 | ] 281 | 282 | [[package]] 283 | name = "cocoa" 284 | version = "0.24.0" 285 | source = "registry+https://github.com/rust-lang/crates.io-index" 286 | checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832" 287 | dependencies = [ 288 | "bitflags", 289 | "block", 290 | "cocoa-foundation", 291 | "core-foundation", 292 | "core-graphics", 293 | "foreign-types", 294 | "libc", 295 | "objc", 296 | ] 297 | 298 | [[package]] 299 | name = "cocoa-foundation" 300 | version = "0.1.0" 301 | source = "registry+https://github.com/rust-lang/crates.io-index" 302 | checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" 303 | dependencies = [ 304 | "bitflags", 305 | "block", 306 | "core-foundation", 307 | "core-graphics-types", 308 | "foreign-types", 309 | "libc", 310 | "objc", 311 | ] 312 | 313 | [[package]] 314 | name = "color_quant" 315 | version = "1.1.0" 316 | source = "registry+https://github.com/rust-lang/crates.io-index" 317 | checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" 318 | 319 | [[package]] 320 | name = "combine" 321 | version = "4.6.4" 322 | source = "registry+https://github.com/rust-lang/crates.io-index" 323 | checksum = "2a604e93b79d1808327a6fca85a6f2d69de66461e7620f5a4cbf5fb4d1d7c948" 324 | dependencies = [ 325 | "bytes", 326 | "memchr", 327 | ] 328 | 329 | [[package]] 330 | name = "convert_case" 331 | version = "0.4.0" 332 | source = "registry+https://github.com/rust-lang/crates.io-index" 333 | checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" 334 | 335 | [[package]] 336 | name = "core-foundation" 337 | version = "0.9.3" 338 | source = "registry+https://github.com/rust-lang/crates.io-index" 339 | checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" 340 | dependencies = [ 341 | "core-foundation-sys", 342 | "libc", 343 | ] 344 | 345 | [[package]] 346 | name = "core-foundation-sys" 347 | version = "0.8.3" 348 | source = "registry+https://github.com/rust-lang/crates.io-index" 349 | checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" 350 | 351 | [[package]] 352 | name = "core-graphics" 353 | version = "0.22.3" 354 | source = "registry+https://github.com/rust-lang/crates.io-index" 355 | checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" 356 | dependencies = [ 357 | "bitflags", 358 | "core-foundation", 359 | "core-graphics-types", 360 | "foreign-types", 361 | "libc", 362 | ] 363 | 364 | [[package]] 365 | name = "core-graphics-types" 366 | version = "0.1.1" 367 | source = "registry+https://github.com/rust-lang/crates.io-index" 368 | checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" 369 | dependencies = [ 370 | "bitflags", 371 | "core-foundation", 372 | "foreign-types", 373 | "libc", 374 | ] 375 | 376 | [[package]] 377 | name = "cpufeatures" 378 | version = "0.2.2" 379 | source = "registry+https://github.com/rust-lang/crates.io-index" 380 | checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" 381 | dependencies = [ 382 | "libc", 383 | ] 384 | 385 | [[package]] 386 | name = "crc32fast" 387 | version = "1.3.2" 388 | source = "registry+https://github.com/rust-lang/crates.io-index" 389 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" 390 | dependencies = [ 391 | "cfg-if", 392 | ] 393 | 394 | [[package]] 395 | name = "crossbeam-channel" 396 | version = "0.5.6" 397 | source = "registry+https://github.com/rust-lang/crates.io-index" 398 | checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" 399 | dependencies = [ 400 | "cfg-if", 401 | "crossbeam-utils", 402 | ] 403 | 404 | [[package]] 405 | name = "crossbeam-utils" 406 | version = "0.8.11" 407 | source = "registry+https://github.com/rust-lang/crates.io-index" 408 | checksum = "51887d4adc7b564537b15adcfb307936f8075dfcd5f00dde9a9f1d29383682bc" 409 | dependencies = [ 410 | "cfg-if", 411 | "once_cell", 412 | ] 413 | 414 | [[package]] 415 | name = "crypto-common" 416 | version = "0.1.6" 417 | source = "registry+https://github.com/rust-lang/crates.io-index" 418 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 419 | dependencies = [ 420 | "generic-array", 421 | "typenum", 422 | ] 423 | 424 | [[package]] 425 | name = "cssparser" 426 | version = "0.27.2" 427 | source = "registry+https://github.com/rust-lang/crates.io-index" 428 | checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" 429 | dependencies = [ 430 | "cssparser-macros", 431 | "dtoa-short", 432 | "itoa 0.4.8", 433 | "matches", 434 | "phf 0.8.0", 435 | "proc-macro2", 436 | "quote", 437 | "smallvec", 438 | "syn", 439 | ] 440 | 441 | [[package]] 442 | name = "cssparser-macros" 443 | version = "0.6.0" 444 | source = "registry+https://github.com/rust-lang/crates.io-index" 445 | checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" 446 | dependencies = [ 447 | "quote", 448 | "syn", 449 | ] 450 | 451 | [[package]] 452 | name = "ctor" 453 | version = "0.1.23" 454 | source = "registry+https://github.com/rust-lang/crates.io-index" 455 | checksum = "cdffe87e1d521a10f9696f833fe502293ea446d7f256c06128293a4119bdf4cb" 456 | dependencies = [ 457 | "quote", 458 | "syn", 459 | ] 460 | 461 | [[package]] 462 | name = "cty" 463 | version = "0.2.2" 464 | source = "registry+https://github.com/rust-lang/crates.io-index" 465 | checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" 466 | 467 | [[package]] 468 | name = "darling" 469 | version = "0.13.4" 470 | source = "registry+https://github.com/rust-lang/crates.io-index" 471 | checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" 472 | dependencies = [ 473 | "darling_core", 474 | "darling_macro", 475 | ] 476 | 477 | [[package]] 478 | name = "darling_core" 479 | version = "0.13.4" 480 | source = "registry+https://github.com/rust-lang/crates.io-index" 481 | checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" 482 | dependencies = [ 483 | "fnv", 484 | "ident_case", 485 | "proc-macro2", 486 | "quote", 487 | "strsim", 488 | "syn", 489 | ] 490 | 491 | [[package]] 492 | name = "darling_macro" 493 | version = "0.13.4" 494 | source = "registry+https://github.com/rust-lang/crates.io-index" 495 | checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" 496 | dependencies = [ 497 | "darling_core", 498 | "quote", 499 | "syn", 500 | ] 501 | 502 | [[package]] 503 | name = "data-encoding" 504 | version = "2.3.2" 505 | source = "registry+https://github.com/rust-lang/crates.io-index" 506 | checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" 507 | 508 | [[package]] 509 | name = "dbus" 510 | version = "0.9.6" 511 | source = "registry+https://github.com/rust-lang/crates.io-index" 512 | checksum = "6f8bcdd56d2e5c4ed26a529c5a9029f5db8290d433497506f958eae3be148eb6" 513 | dependencies = [ 514 | "libc", 515 | "libdbus-sys", 516 | "winapi", 517 | ] 518 | 519 | [[package]] 520 | name = "deflate" 521 | version = "0.7.20" 522 | source = "registry+https://github.com/rust-lang/crates.io-index" 523 | checksum = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4" 524 | dependencies = [ 525 | "adler32", 526 | "byteorder", 527 | ] 528 | 529 | [[package]] 530 | name = "deflate" 531 | version = "1.0.0" 532 | source = "registry+https://github.com/rust-lang/crates.io-index" 533 | checksum = "c86f7e25f518f4b81808a2cf1c50996a61f5c2eb394b2393bd87f2a4780a432f" 534 | dependencies = [ 535 | "adler32", 536 | ] 537 | 538 | [[package]] 539 | name = "derive_more" 540 | version = "0.99.17" 541 | source = "registry+https://github.com/rust-lang/crates.io-index" 542 | checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" 543 | dependencies = [ 544 | "convert_case", 545 | "proc-macro2", 546 | "quote", 547 | "rustc_version 0.4.0", 548 | "syn", 549 | ] 550 | 551 | [[package]] 552 | name = "digest" 553 | version = "0.10.3" 554 | source = "registry+https://github.com/rust-lang/crates.io-index" 555 | checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" 556 | dependencies = [ 557 | "block-buffer", 558 | "crypto-common", 559 | ] 560 | 561 | [[package]] 562 | name = "dirs-next" 563 | version = "2.0.0" 564 | source = "registry+https://github.com/rust-lang/crates.io-index" 565 | checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" 566 | dependencies = [ 567 | "cfg-if", 568 | "dirs-sys-next", 569 | ] 570 | 571 | [[package]] 572 | name = "dirs-sys-next" 573 | version = "0.1.2" 574 | source = "registry+https://github.com/rust-lang/crates.io-index" 575 | checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" 576 | dependencies = [ 577 | "libc", 578 | "redox_users", 579 | "winapi", 580 | ] 581 | 582 | [[package]] 583 | name = "dispatch" 584 | version = "0.2.0" 585 | source = "registry+https://github.com/rust-lang/crates.io-index" 586 | checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" 587 | 588 | [[package]] 589 | name = "dtoa" 590 | version = "0.4.8" 591 | source = "registry+https://github.com/rust-lang/crates.io-index" 592 | checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" 593 | 594 | [[package]] 595 | name = "dtoa-short" 596 | version = "0.3.3" 597 | source = "registry+https://github.com/rust-lang/crates.io-index" 598 | checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6" 599 | dependencies = [ 600 | "dtoa", 601 | ] 602 | 603 | [[package]] 604 | name = "either" 605 | version = "1.7.0" 606 | source = "registry+https://github.com/rust-lang/crates.io-index" 607 | checksum = "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be" 608 | 609 | [[package]] 610 | name = "email-encoding" 611 | version = "0.1.3" 612 | source = "registry+https://github.com/rust-lang/crates.io-index" 613 | checksum = "34dd14c63662e0206599796cd5e1ad0268ab2b9d19b868d6050d688eba2bbf98" 614 | dependencies = [ 615 | "base64", 616 | "memchr", 617 | ] 618 | 619 | [[package]] 620 | name = "email_address" 621 | version = "0.2.1" 622 | source = "registry+https://github.com/rust-lang/crates.io-index" 623 | checksum = "8684b7c9cb4857dfa1e5b9629ef584ba618c9b93bae60f58cb23f4f271d0468e" 624 | 625 | [[package]] 626 | name = "embed-resource" 627 | version = "1.7.2" 628 | source = "registry+https://github.com/rust-lang/crates.io-index" 629 | checksum = "ecc24ff8d764818e9ab17963b0593c535f077a513f565e75e4352d758bc4d8c0" 630 | dependencies = [ 631 | "cc", 632 | "rustc_version 0.4.0", 633 | "toml", 634 | "vswhom", 635 | "winreg", 636 | ] 637 | 638 | [[package]] 639 | name = "embed_plist" 640 | version = "1.2.2" 641 | source = "registry+https://github.com/rust-lang/crates.io-index" 642 | checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" 643 | 644 | [[package]] 645 | name = "encoding_rs" 646 | version = "0.8.31" 647 | source = "registry+https://github.com/rust-lang/crates.io-index" 648 | checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" 649 | dependencies = [ 650 | "cfg-if", 651 | ] 652 | 653 | [[package]] 654 | name = "fastrand" 655 | version = "1.8.0" 656 | source = "registry+https://github.com/rust-lang/crates.io-index" 657 | checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" 658 | dependencies = [ 659 | "instant", 660 | ] 661 | 662 | [[package]] 663 | name = "field-offset" 664 | version = "0.3.4" 665 | source = "registry+https://github.com/rust-lang/crates.io-index" 666 | checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92" 667 | dependencies = [ 668 | "memoffset", 669 | "rustc_version 0.3.3", 670 | ] 671 | 672 | [[package]] 673 | name = "filetime" 674 | version = "0.2.17" 675 | source = "registry+https://github.com/rust-lang/crates.io-index" 676 | checksum = "e94a7bbaa59354bc20dd75b67f23e2797b4490e9d6928203fb105c79e448c86c" 677 | dependencies = [ 678 | "cfg-if", 679 | "libc", 680 | "redox_syscall", 681 | "windows-sys", 682 | ] 683 | 684 | [[package]] 685 | name = "flate2" 686 | version = "1.0.24" 687 | source = "registry+https://github.com/rust-lang/crates.io-index" 688 | checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" 689 | dependencies = [ 690 | "crc32fast", 691 | "miniz_oxide", 692 | ] 693 | 694 | [[package]] 695 | name = "fnv" 696 | version = "1.0.7" 697 | source = "registry+https://github.com/rust-lang/crates.io-index" 698 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 699 | 700 | [[package]] 701 | name = "foreign-types" 702 | version = "0.3.2" 703 | source = "registry+https://github.com/rust-lang/crates.io-index" 704 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 705 | dependencies = [ 706 | "foreign-types-shared", 707 | ] 708 | 709 | [[package]] 710 | name = "foreign-types-shared" 711 | version = "0.1.1" 712 | source = "registry+https://github.com/rust-lang/crates.io-index" 713 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 714 | 715 | [[package]] 716 | name = "form_urlencoded" 717 | version = "1.0.1" 718 | source = "registry+https://github.com/rust-lang/crates.io-index" 719 | checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" 720 | dependencies = [ 721 | "matches", 722 | "percent-encoding", 723 | ] 724 | 725 | [[package]] 726 | name = "futf" 727 | version = "0.1.5" 728 | source = "registry+https://github.com/rust-lang/crates.io-index" 729 | checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" 730 | dependencies = [ 731 | "mac", 732 | "new_debug_unreachable", 733 | ] 734 | 735 | [[package]] 736 | name = "futures" 737 | version = "0.3.21" 738 | source = "registry+https://github.com/rust-lang/crates.io-index" 739 | checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" 740 | dependencies = [ 741 | "futures-channel", 742 | "futures-core", 743 | "futures-executor", 744 | "futures-io", 745 | "futures-sink", 746 | "futures-task", 747 | "futures-util", 748 | ] 749 | 750 | [[package]] 751 | name = "futures-channel" 752 | version = "0.3.21" 753 | source = "registry+https://github.com/rust-lang/crates.io-index" 754 | checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" 755 | dependencies = [ 756 | "futures-core", 757 | "futures-sink", 758 | ] 759 | 760 | [[package]] 761 | name = "futures-core" 762 | version = "0.3.21" 763 | source = "registry+https://github.com/rust-lang/crates.io-index" 764 | checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" 765 | 766 | [[package]] 767 | name = "futures-executor" 768 | version = "0.3.21" 769 | source = "registry+https://github.com/rust-lang/crates.io-index" 770 | checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" 771 | dependencies = [ 772 | "futures-core", 773 | "futures-task", 774 | "futures-util", 775 | ] 776 | 777 | [[package]] 778 | name = "futures-io" 779 | version = "0.3.21" 780 | source = "registry+https://github.com/rust-lang/crates.io-index" 781 | checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" 782 | 783 | [[package]] 784 | name = "futures-lite" 785 | version = "1.12.0" 786 | source = "registry+https://github.com/rust-lang/crates.io-index" 787 | checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" 788 | dependencies = [ 789 | "fastrand", 790 | "futures-core", 791 | "futures-io", 792 | "memchr", 793 | "parking", 794 | "pin-project-lite", 795 | "waker-fn", 796 | ] 797 | 798 | [[package]] 799 | name = "futures-macro" 800 | version = "0.3.21" 801 | source = "registry+https://github.com/rust-lang/crates.io-index" 802 | checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" 803 | dependencies = [ 804 | "proc-macro2", 805 | "quote", 806 | "syn", 807 | ] 808 | 809 | [[package]] 810 | name = "futures-sink" 811 | version = "0.3.21" 812 | source = "registry+https://github.com/rust-lang/crates.io-index" 813 | checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" 814 | 815 | [[package]] 816 | name = "futures-task" 817 | version = "0.3.21" 818 | source = "registry+https://github.com/rust-lang/crates.io-index" 819 | checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" 820 | 821 | [[package]] 822 | name = "futures-util" 823 | version = "0.3.21" 824 | source = "registry+https://github.com/rust-lang/crates.io-index" 825 | checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" 826 | dependencies = [ 827 | "futures-channel", 828 | "futures-core", 829 | "futures-io", 830 | "futures-macro", 831 | "futures-sink", 832 | "futures-task", 833 | "memchr", 834 | "pin-project-lite", 835 | "pin-utils", 836 | "slab", 837 | ] 838 | 839 | [[package]] 840 | name = "fxhash" 841 | version = "0.2.1" 842 | source = "registry+https://github.com/rust-lang/crates.io-index" 843 | checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" 844 | dependencies = [ 845 | "byteorder", 846 | ] 847 | 848 | [[package]] 849 | name = "gdk" 850 | version = "0.15.4" 851 | source = "registry+https://github.com/rust-lang/crates.io-index" 852 | checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8" 853 | dependencies = [ 854 | "bitflags", 855 | "cairo-rs", 856 | "gdk-pixbuf", 857 | "gdk-sys", 858 | "gio", 859 | "glib", 860 | "libc", 861 | "pango", 862 | ] 863 | 864 | [[package]] 865 | name = "gdk-pixbuf" 866 | version = "0.15.11" 867 | source = "registry+https://github.com/rust-lang/crates.io-index" 868 | checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a" 869 | dependencies = [ 870 | "bitflags", 871 | "gdk-pixbuf-sys", 872 | "gio", 873 | "glib", 874 | "libc", 875 | ] 876 | 877 | [[package]] 878 | name = "gdk-pixbuf-sys" 879 | version = "0.15.10" 880 | source = "registry+https://github.com/rust-lang/crates.io-index" 881 | checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7" 882 | dependencies = [ 883 | "gio-sys", 884 | "glib-sys", 885 | "gobject-sys", 886 | "libc", 887 | "system-deps 6.0.2", 888 | ] 889 | 890 | [[package]] 891 | name = "gdk-sys" 892 | version = "0.15.1" 893 | source = "registry+https://github.com/rust-lang/crates.io-index" 894 | checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88" 895 | dependencies = [ 896 | "cairo-sys-rs", 897 | "gdk-pixbuf-sys", 898 | "gio-sys", 899 | "glib-sys", 900 | "gobject-sys", 901 | "libc", 902 | "pango-sys", 903 | "pkg-config", 904 | "system-deps 6.0.2", 905 | ] 906 | 907 | [[package]] 908 | name = "gdkx11-sys" 909 | version = "0.15.1" 910 | source = "registry+https://github.com/rust-lang/crates.io-index" 911 | checksum = "b4b7f8c7a84b407aa9b143877e267e848ff34106578b64d1e0a24bf550716178" 912 | dependencies = [ 913 | "gdk-sys", 914 | "glib-sys", 915 | "libc", 916 | "system-deps 6.0.2", 917 | "x11", 918 | ] 919 | 920 | [[package]] 921 | name = "generator" 922 | version = "0.7.1" 923 | source = "registry+https://github.com/rust-lang/crates.io-index" 924 | checksum = "cc184cace1cea8335047a471cc1da80f18acf8a76f3bab2028d499e328948ec7" 925 | dependencies = [ 926 | "cc", 927 | "libc", 928 | "log", 929 | "rustversion", 930 | "windows 0.32.0", 931 | ] 932 | 933 | [[package]] 934 | name = "generic-array" 935 | version = "0.14.6" 936 | source = "registry+https://github.com/rust-lang/crates.io-index" 937 | checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" 938 | dependencies = [ 939 | "typenum", 940 | "version_check", 941 | ] 942 | 943 | [[package]] 944 | name = "getrandom" 945 | version = "0.1.16" 946 | source = "registry+https://github.com/rust-lang/crates.io-index" 947 | checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" 948 | dependencies = [ 949 | "cfg-if", 950 | "libc", 951 | "wasi 0.9.0+wasi-snapshot-preview1", 952 | ] 953 | 954 | [[package]] 955 | name = "getrandom" 956 | version = "0.2.7" 957 | source = "registry+https://github.com/rust-lang/crates.io-index" 958 | checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" 959 | dependencies = [ 960 | "cfg-if", 961 | "libc", 962 | "wasi 0.11.0+wasi-snapshot-preview1", 963 | ] 964 | 965 | [[package]] 966 | name = "gio" 967 | version = "0.15.12" 968 | source = "registry+https://github.com/rust-lang/crates.io-index" 969 | checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b" 970 | dependencies = [ 971 | "bitflags", 972 | "futures-channel", 973 | "futures-core", 974 | "futures-io", 975 | "gio-sys", 976 | "glib", 977 | "libc", 978 | "once_cell", 979 | "thiserror", 980 | ] 981 | 982 | [[package]] 983 | name = "gio-sys" 984 | version = "0.15.10" 985 | source = "registry+https://github.com/rust-lang/crates.io-index" 986 | checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d" 987 | dependencies = [ 988 | "glib-sys", 989 | "gobject-sys", 990 | "libc", 991 | "system-deps 6.0.2", 992 | "winapi", 993 | ] 994 | 995 | [[package]] 996 | name = "glib" 997 | version = "0.15.12" 998 | source = "registry+https://github.com/rust-lang/crates.io-index" 999 | checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d" 1000 | dependencies = [ 1001 | "bitflags", 1002 | "futures-channel", 1003 | "futures-core", 1004 | "futures-executor", 1005 | "futures-task", 1006 | "glib-macros", 1007 | "glib-sys", 1008 | "gobject-sys", 1009 | "libc", 1010 | "once_cell", 1011 | "smallvec", 1012 | "thiserror", 1013 | ] 1014 | 1015 | [[package]] 1016 | name = "glib-macros" 1017 | version = "0.15.11" 1018 | source = "registry+https://github.com/rust-lang/crates.io-index" 1019 | checksum = "25a68131a662b04931e71891fb14aaf65ee4b44d08e8abc10f49e77418c86c64" 1020 | dependencies = [ 1021 | "anyhow", 1022 | "heck 0.4.0", 1023 | "proc-macro-crate", 1024 | "proc-macro-error", 1025 | "proc-macro2", 1026 | "quote", 1027 | "syn", 1028 | ] 1029 | 1030 | [[package]] 1031 | name = "glib-sys" 1032 | version = "0.15.10" 1033 | source = "registry+https://github.com/rust-lang/crates.io-index" 1034 | checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4" 1035 | dependencies = [ 1036 | "libc", 1037 | "system-deps 6.0.2", 1038 | ] 1039 | 1040 | [[package]] 1041 | name = "glob" 1042 | version = "0.3.0" 1043 | source = "registry+https://github.com/rust-lang/crates.io-index" 1044 | checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" 1045 | 1046 | [[package]] 1047 | name = "globset" 1048 | version = "0.4.9" 1049 | source = "registry+https://github.com/rust-lang/crates.io-index" 1050 | checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a" 1051 | dependencies = [ 1052 | "aho-corasick", 1053 | "bstr", 1054 | "fnv", 1055 | "log", 1056 | "regex", 1057 | ] 1058 | 1059 | [[package]] 1060 | name = "gobject-sys" 1061 | version = "0.15.10" 1062 | source = "registry+https://github.com/rust-lang/crates.io-index" 1063 | checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a" 1064 | dependencies = [ 1065 | "glib-sys", 1066 | "libc", 1067 | "system-deps 6.0.2", 1068 | ] 1069 | 1070 | [[package]] 1071 | name = "gtk" 1072 | version = "0.15.5" 1073 | source = "registry+https://github.com/rust-lang/crates.io-index" 1074 | checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0" 1075 | dependencies = [ 1076 | "atk", 1077 | "bitflags", 1078 | "cairo-rs", 1079 | "field-offset", 1080 | "futures-channel", 1081 | "gdk", 1082 | "gdk-pixbuf", 1083 | "gio", 1084 | "glib", 1085 | "gtk-sys", 1086 | "gtk3-macros", 1087 | "libc", 1088 | "once_cell", 1089 | "pango", 1090 | "pkg-config", 1091 | ] 1092 | 1093 | [[package]] 1094 | name = "gtk-sys" 1095 | version = "0.15.3" 1096 | source = "registry+https://github.com/rust-lang/crates.io-index" 1097 | checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84" 1098 | dependencies = [ 1099 | "atk-sys", 1100 | "cairo-sys-rs", 1101 | "gdk-pixbuf-sys", 1102 | "gdk-sys", 1103 | "gio-sys", 1104 | "glib-sys", 1105 | "gobject-sys", 1106 | "libc", 1107 | "pango-sys", 1108 | "system-deps 6.0.2", 1109 | ] 1110 | 1111 | [[package]] 1112 | name = "gtk3-macros" 1113 | version = "0.15.4" 1114 | source = "registry+https://github.com/rust-lang/crates.io-index" 1115 | checksum = "24f518afe90c23fba585b2d7697856f9e6a7bbc62f65588035e66f6afb01a2e9" 1116 | dependencies = [ 1117 | "anyhow", 1118 | "proc-macro-crate", 1119 | "proc-macro-error", 1120 | "proc-macro2", 1121 | "quote", 1122 | "syn", 1123 | ] 1124 | 1125 | [[package]] 1126 | name = "hashbrown" 1127 | version = "0.12.3" 1128 | source = "registry+https://github.com/rust-lang/crates.io-index" 1129 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 1130 | 1131 | [[package]] 1132 | name = "heck" 1133 | version = "0.3.3" 1134 | source = "registry+https://github.com/rust-lang/crates.io-index" 1135 | checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" 1136 | dependencies = [ 1137 | "unicode-segmentation", 1138 | ] 1139 | 1140 | [[package]] 1141 | name = "heck" 1142 | version = "0.4.0" 1143 | source = "registry+https://github.com/rust-lang/crates.io-index" 1144 | checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" 1145 | 1146 | [[package]] 1147 | name = "hermit-abi" 1148 | version = "0.1.19" 1149 | source = "registry+https://github.com/rust-lang/crates.io-index" 1150 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 1151 | dependencies = [ 1152 | "libc", 1153 | ] 1154 | 1155 | [[package]] 1156 | name = "hostname" 1157 | version = "0.3.1" 1158 | source = "registry+https://github.com/rust-lang/crates.io-index" 1159 | checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" 1160 | dependencies = [ 1161 | "libc", 1162 | "match_cfg", 1163 | "winapi", 1164 | ] 1165 | 1166 | [[package]] 1167 | name = "html5ever" 1168 | version = "0.25.2" 1169 | source = "registry+https://github.com/rust-lang/crates.io-index" 1170 | checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148" 1171 | dependencies = [ 1172 | "log", 1173 | "mac", 1174 | "markup5ever", 1175 | "proc-macro2", 1176 | "quote", 1177 | "syn", 1178 | ] 1179 | 1180 | [[package]] 1181 | name = "http" 1182 | version = "0.2.8" 1183 | source = "registry+https://github.com/rust-lang/crates.io-index" 1184 | checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" 1185 | dependencies = [ 1186 | "bytes", 1187 | "fnv", 1188 | "itoa 1.0.3", 1189 | ] 1190 | 1191 | [[package]] 1192 | name = "http-range" 1193 | version = "0.1.5" 1194 | source = "registry+https://github.com/rust-lang/crates.io-index" 1195 | checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" 1196 | 1197 | [[package]] 1198 | name = "httpdate" 1199 | version = "1.0.2" 1200 | source = "registry+https://github.com/rust-lang/crates.io-index" 1201 | checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" 1202 | 1203 | [[package]] 1204 | name = "ico" 1205 | version = "0.1.0" 1206 | source = "registry+https://github.com/rust-lang/crates.io-index" 1207 | checksum = "6a4b3331534254a9b64095ae60d3dc2a8225a7a70229cd5888be127cdc1f6804" 1208 | dependencies = [ 1209 | "byteorder", 1210 | "png 0.11.0", 1211 | ] 1212 | 1213 | [[package]] 1214 | name = "ident_case" 1215 | version = "1.0.1" 1216 | source = "registry+https://github.com/rust-lang/crates.io-index" 1217 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 1218 | 1219 | [[package]] 1220 | name = "idna" 1221 | version = "0.2.3" 1222 | source = "registry+https://github.com/rust-lang/crates.io-index" 1223 | checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" 1224 | dependencies = [ 1225 | "matches", 1226 | "unicode-bidi", 1227 | "unicode-normalization", 1228 | ] 1229 | 1230 | [[package]] 1231 | name = "ignore" 1232 | version = "0.4.18" 1233 | source = "registry+https://github.com/rust-lang/crates.io-index" 1234 | checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d" 1235 | dependencies = [ 1236 | "crossbeam-utils", 1237 | "globset", 1238 | "lazy_static", 1239 | "log", 1240 | "memchr", 1241 | "regex", 1242 | "same-file", 1243 | "thread_local", 1244 | "walkdir", 1245 | "winapi-util", 1246 | ] 1247 | 1248 | [[package]] 1249 | name = "image" 1250 | version = "0.24.3" 1251 | source = "registry+https://github.com/rust-lang/crates.io-index" 1252 | checksum = "7e30ca2ecf7666107ff827a8e481de6a132a9b687ed3bb20bb1c144a36c00964" 1253 | dependencies = [ 1254 | "bytemuck", 1255 | "byteorder", 1256 | "color_quant", 1257 | "num-rational", 1258 | "num-traits", 1259 | ] 1260 | 1261 | [[package]] 1262 | name = "indexmap" 1263 | version = "1.9.1" 1264 | source = "registry+https://github.com/rust-lang/crates.io-index" 1265 | checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" 1266 | dependencies = [ 1267 | "autocfg", 1268 | "hashbrown", 1269 | ] 1270 | 1271 | [[package]] 1272 | name = "infer" 1273 | version = "0.7.0" 1274 | source = "registry+https://github.com/rust-lang/crates.io-index" 1275 | checksum = "20b2b533137b9cad970793453d4f921c2e91312a6d88b1085c07bc15fc51bb3b" 1276 | dependencies = [ 1277 | "cfb", 1278 | ] 1279 | 1280 | [[package]] 1281 | name = "inflate" 1282 | version = "0.3.4" 1283 | source = "registry+https://github.com/rust-lang/crates.io-index" 1284 | checksum = "f5f9f47468e9a76a6452271efadc88fe865a82be91fe75e6c0c57b87ccea59d4" 1285 | dependencies = [ 1286 | "adler32", 1287 | ] 1288 | 1289 | [[package]] 1290 | name = "instant" 1291 | version = "0.1.12" 1292 | source = "registry+https://github.com/rust-lang/crates.io-index" 1293 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" 1294 | dependencies = [ 1295 | "cfg-if", 1296 | ] 1297 | 1298 | [[package]] 1299 | name = "itoa" 1300 | version = "0.4.8" 1301 | source = "registry+https://github.com/rust-lang/crates.io-index" 1302 | checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" 1303 | 1304 | [[package]] 1305 | name = "itoa" 1306 | version = "1.0.3" 1307 | source = "registry+https://github.com/rust-lang/crates.io-index" 1308 | checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" 1309 | 1310 | [[package]] 1311 | name = "javascriptcore-rs" 1312 | version = "0.16.0" 1313 | source = "registry+https://github.com/rust-lang/crates.io-index" 1314 | checksum = "bf053e7843f2812ff03ef5afe34bb9c06ffee120385caad4f6b9967fcd37d41c" 1315 | dependencies = [ 1316 | "bitflags", 1317 | "glib", 1318 | "javascriptcore-rs-sys", 1319 | ] 1320 | 1321 | [[package]] 1322 | name = "javascriptcore-rs-sys" 1323 | version = "0.4.0" 1324 | source = "registry+https://github.com/rust-lang/crates.io-index" 1325 | checksum = "905fbb87419c5cde6e3269537e4ea7d46431f3008c5d057e915ef3f115e7793c" 1326 | dependencies = [ 1327 | "glib-sys", 1328 | "gobject-sys", 1329 | "libc", 1330 | "system-deps 5.0.0", 1331 | ] 1332 | 1333 | [[package]] 1334 | name = "jni" 1335 | version = "0.18.0" 1336 | source = "registry+https://github.com/rust-lang/crates.io-index" 1337 | checksum = "24967112a1e4301ca5342ea339763613a37592b8a6ce6cf2e4494537c7a42faf" 1338 | dependencies = [ 1339 | "cesu8", 1340 | "combine", 1341 | "jni-sys", 1342 | "log", 1343 | "thiserror", 1344 | "walkdir", 1345 | ] 1346 | 1347 | [[package]] 1348 | name = "jni" 1349 | version = "0.19.0" 1350 | source = "registry+https://github.com/rust-lang/crates.io-index" 1351 | checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" 1352 | dependencies = [ 1353 | "cesu8", 1354 | "combine", 1355 | "jni-sys", 1356 | "log", 1357 | "thiserror", 1358 | "walkdir", 1359 | ] 1360 | 1361 | [[package]] 1362 | name = "jni-sys" 1363 | version = "0.3.0" 1364 | source = "registry+https://github.com/rust-lang/crates.io-index" 1365 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 1366 | 1367 | [[package]] 1368 | name = "js-sys" 1369 | version = "0.3.59" 1370 | source = "registry+https://github.com/rust-lang/crates.io-index" 1371 | checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2" 1372 | dependencies = [ 1373 | "wasm-bindgen", 1374 | ] 1375 | 1376 | [[package]] 1377 | name = "json-patch" 1378 | version = "0.2.6" 1379 | source = "registry+https://github.com/rust-lang/crates.io-index" 1380 | checksum = "f995a3c8f2bc3dd52a18a583e90f9ec109c047fa1603a853e46bcda14d2e279d" 1381 | dependencies = [ 1382 | "serde", 1383 | "serde_json", 1384 | "treediff", 1385 | ] 1386 | 1387 | [[package]] 1388 | name = "kuchiki" 1389 | version = "0.8.1" 1390 | source = "registry+https://github.com/rust-lang/crates.io-index" 1391 | checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358" 1392 | dependencies = [ 1393 | "cssparser", 1394 | "html5ever", 1395 | "matches", 1396 | "selectors", 1397 | ] 1398 | 1399 | [[package]] 1400 | name = "lazy_static" 1401 | version = "1.4.0" 1402 | source = "registry+https://github.com/rust-lang/crates.io-index" 1403 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 1404 | 1405 | [[package]] 1406 | name = "lettre" 1407 | version = "0.10.1" 1408 | source = "registry+https://github.com/rust-lang/crates.io-index" 1409 | checksum = "2eabca5e0b4d0e98e7f2243fb5b7520b6af2b65d8f87bcc86f2c75185a6ff243" 1410 | dependencies = [ 1411 | "base64", 1412 | "email-encoding", 1413 | "email_address", 1414 | "fastrand", 1415 | "futures-util", 1416 | "hostname", 1417 | "httpdate", 1418 | "idna", 1419 | "mime", 1420 | "native-tls", 1421 | "nom", 1422 | "once_cell", 1423 | "quoted_printable", 1424 | "socket2", 1425 | ] 1426 | 1427 | [[package]] 1428 | name = "libc" 1429 | version = "0.2.127" 1430 | source = "registry+https://github.com/rust-lang/crates.io-index" 1431 | checksum = "505e71a4706fa491e9b1b55f51b95d4037d0821ee40131190475f692b35b009b" 1432 | 1433 | [[package]] 1434 | name = "libdbus-sys" 1435 | version = "0.2.2" 1436 | source = "registry+https://github.com/rust-lang/crates.io-index" 1437 | checksum = "c185b5b7ad900923ef3a8ff594083d4d9b5aea80bb4f32b8342363138c0d456b" 1438 | dependencies = [ 1439 | "pkg-config", 1440 | ] 1441 | 1442 | [[package]] 1443 | name = "line-wrap" 1444 | version = "0.1.1" 1445 | source = "registry+https://github.com/rust-lang/crates.io-index" 1446 | checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" 1447 | dependencies = [ 1448 | "safemem", 1449 | ] 1450 | 1451 | [[package]] 1452 | name = "lock_api" 1453 | version = "0.4.7" 1454 | source = "registry+https://github.com/rust-lang/crates.io-index" 1455 | checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" 1456 | dependencies = [ 1457 | "autocfg", 1458 | "scopeguard", 1459 | ] 1460 | 1461 | [[package]] 1462 | name = "log" 1463 | version = "0.4.17" 1464 | source = "registry+https://github.com/rust-lang/crates.io-index" 1465 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 1466 | dependencies = [ 1467 | "cfg-if", 1468 | ] 1469 | 1470 | [[package]] 1471 | name = "loom" 1472 | version = "0.5.6" 1473 | source = "registry+https://github.com/rust-lang/crates.io-index" 1474 | checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" 1475 | dependencies = [ 1476 | "cfg-if", 1477 | "generator", 1478 | "scoped-tls", 1479 | "serde", 1480 | "serde_json", 1481 | "tracing", 1482 | "tracing-subscriber", 1483 | ] 1484 | 1485 | [[package]] 1486 | name = "mac" 1487 | version = "0.1.1" 1488 | source = "registry+https://github.com/rust-lang/crates.io-index" 1489 | checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" 1490 | 1491 | [[package]] 1492 | name = "mac-notification-sys" 1493 | version = "0.5.5" 1494 | source = "registry+https://github.com/rust-lang/crates.io-index" 1495 | checksum = "fff231a88fe2e9985f9d159a2f02986fe46daa0f6af976a0d934be4870cc9d02" 1496 | dependencies = [ 1497 | "cc", 1498 | "dirs-next", 1499 | "objc-foundation", 1500 | "objc_id", 1501 | "time", 1502 | ] 1503 | 1504 | [[package]] 1505 | name = "mail-dev" 1506 | version = "0.7.0" 1507 | dependencies = [ 1508 | "lettre", 1509 | "mailin-embedded", 1510 | "mailparse", 1511 | "serde", 1512 | "serde_json", 1513 | "tauri", 1514 | "tauri-build", 1515 | ] 1516 | 1517 | [[package]] 1518 | name = "mailin" 1519 | version = "0.6.1" 1520 | source = "registry+https://github.com/rust-lang/crates.io-index" 1521 | checksum = "24d0411d6d3cf6baacae37461dc5b0a32b9c68ae99ddef61bcd88174b8da890a" 1522 | dependencies = [ 1523 | "base64", 1524 | "either", 1525 | "log", 1526 | "nom", 1527 | "ternop", 1528 | ] 1529 | 1530 | [[package]] 1531 | name = "mailin-embedded" 1532 | version = "0.7.1" 1533 | source = "registry+https://github.com/rust-lang/crates.io-index" 1534 | checksum = "e2f29d14249fb45f7795bc8564175ca7b963254217f24e8cde84ba40d38b58cc" 1535 | dependencies = [ 1536 | "bufstream", 1537 | "lazy_static", 1538 | "log", 1539 | "mailin", 1540 | "rustls", 1541 | "rustls-pemfile", 1542 | "scoped_threadpool", 1543 | ] 1544 | 1545 | [[package]] 1546 | name = "mailparse" 1547 | version = "0.13.8" 1548 | source = "registry+https://github.com/rust-lang/crates.io-index" 1549 | checksum = "8cae768a50835557749599277fc59f7c728118724eb34185e8feb633ef266a32" 1550 | dependencies = [ 1551 | "charset", 1552 | "data-encoding", 1553 | "quoted_printable", 1554 | ] 1555 | 1556 | [[package]] 1557 | name = "malloc_buf" 1558 | version = "0.0.6" 1559 | source = "registry+https://github.com/rust-lang/crates.io-index" 1560 | checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 1561 | dependencies = [ 1562 | "libc", 1563 | ] 1564 | 1565 | [[package]] 1566 | name = "markup5ever" 1567 | version = "0.10.1" 1568 | source = "registry+https://github.com/rust-lang/crates.io-index" 1569 | checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" 1570 | dependencies = [ 1571 | "log", 1572 | "phf 0.8.0", 1573 | "phf_codegen", 1574 | "string_cache", 1575 | "string_cache_codegen", 1576 | "tendril", 1577 | ] 1578 | 1579 | [[package]] 1580 | name = "match_cfg" 1581 | version = "0.1.0" 1582 | source = "registry+https://github.com/rust-lang/crates.io-index" 1583 | checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" 1584 | 1585 | [[package]] 1586 | name = "matchers" 1587 | version = "0.1.0" 1588 | source = "registry+https://github.com/rust-lang/crates.io-index" 1589 | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" 1590 | dependencies = [ 1591 | "regex-automata", 1592 | ] 1593 | 1594 | [[package]] 1595 | name = "matches" 1596 | version = "0.1.9" 1597 | source = "registry+https://github.com/rust-lang/crates.io-index" 1598 | checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" 1599 | 1600 | [[package]] 1601 | name = "memchr" 1602 | version = "2.5.0" 1603 | source = "registry+https://github.com/rust-lang/crates.io-index" 1604 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 1605 | 1606 | [[package]] 1607 | name = "memoffset" 1608 | version = "0.6.5" 1609 | source = "registry+https://github.com/rust-lang/crates.io-index" 1610 | checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" 1611 | dependencies = [ 1612 | "autocfg", 1613 | ] 1614 | 1615 | [[package]] 1616 | name = "mime" 1617 | version = "0.3.16" 1618 | source = "registry+https://github.com/rust-lang/crates.io-index" 1619 | checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" 1620 | 1621 | [[package]] 1622 | name = "minimal-lexical" 1623 | version = "0.2.1" 1624 | source = "registry+https://github.com/rust-lang/crates.io-index" 1625 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 1626 | 1627 | [[package]] 1628 | name = "miniz_oxide" 1629 | version = "0.5.3" 1630 | source = "registry+https://github.com/rust-lang/crates.io-index" 1631 | checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc" 1632 | dependencies = [ 1633 | "adler", 1634 | ] 1635 | 1636 | [[package]] 1637 | name = "native-tls" 1638 | version = "0.2.10" 1639 | source = "registry+https://github.com/rust-lang/crates.io-index" 1640 | checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" 1641 | dependencies = [ 1642 | "lazy_static", 1643 | "libc", 1644 | "log", 1645 | "openssl", 1646 | "openssl-probe", 1647 | "openssl-sys", 1648 | "schannel", 1649 | "security-framework", 1650 | "security-framework-sys", 1651 | "tempfile", 1652 | ] 1653 | 1654 | [[package]] 1655 | name = "ndk" 1656 | version = "0.6.0" 1657 | source = "registry+https://github.com/rust-lang/crates.io-index" 1658 | checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" 1659 | dependencies = [ 1660 | "bitflags", 1661 | "jni-sys", 1662 | "ndk-sys", 1663 | "num_enum", 1664 | "thiserror", 1665 | ] 1666 | 1667 | [[package]] 1668 | name = "ndk-context" 1669 | version = "0.1.1" 1670 | source = "registry+https://github.com/rust-lang/crates.io-index" 1671 | checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" 1672 | 1673 | [[package]] 1674 | name = "ndk-sys" 1675 | version = "0.3.0" 1676 | source = "registry+https://github.com/rust-lang/crates.io-index" 1677 | checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" 1678 | dependencies = [ 1679 | "jni-sys", 1680 | ] 1681 | 1682 | [[package]] 1683 | name = "new_debug_unreachable" 1684 | version = "1.0.4" 1685 | source = "registry+https://github.com/rust-lang/crates.io-index" 1686 | checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" 1687 | 1688 | [[package]] 1689 | name = "nodrop" 1690 | version = "0.1.14" 1691 | source = "registry+https://github.com/rust-lang/crates.io-index" 1692 | checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" 1693 | 1694 | [[package]] 1695 | name = "nom" 1696 | version = "7.1.1" 1697 | source = "registry+https://github.com/rust-lang/crates.io-index" 1698 | checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" 1699 | dependencies = [ 1700 | "memchr", 1701 | "minimal-lexical", 1702 | ] 1703 | 1704 | [[package]] 1705 | name = "notify-rust" 1706 | version = "4.5.8" 1707 | source = "registry+https://github.com/rust-lang/crates.io-index" 1708 | checksum = "a995a3d2834cefa389218e7a35156e8ce544bc95f836900da01ee0b26a07e9d4" 1709 | dependencies = [ 1710 | "dbus", 1711 | "mac-notification-sys", 1712 | "winrt-notification", 1713 | ] 1714 | 1715 | [[package]] 1716 | name = "num-integer" 1717 | version = "0.1.45" 1718 | source = "registry+https://github.com/rust-lang/crates.io-index" 1719 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" 1720 | dependencies = [ 1721 | "autocfg", 1722 | "num-traits", 1723 | ] 1724 | 1725 | [[package]] 1726 | name = "num-iter" 1727 | version = "0.1.43" 1728 | source = "registry+https://github.com/rust-lang/crates.io-index" 1729 | checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" 1730 | dependencies = [ 1731 | "autocfg", 1732 | "num-integer", 1733 | "num-traits", 1734 | ] 1735 | 1736 | [[package]] 1737 | name = "num-rational" 1738 | version = "0.4.1" 1739 | source = "registry+https://github.com/rust-lang/crates.io-index" 1740 | checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" 1741 | dependencies = [ 1742 | "autocfg", 1743 | "num-integer", 1744 | "num-traits", 1745 | ] 1746 | 1747 | [[package]] 1748 | name = "num-traits" 1749 | version = "0.2.15" 1750 | source = "registry+https://github.com/rust-lang/crates.io-index" 1751 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" 1752 | dependencies = [ 1753 | "autocfg", 1754 | ] 1755 | 1756 | [[package]] 1757 | name = "num_cpus" 1758 | version = "1.13.1" 1759 | source = "registry+https://github.com/rust-lang/crates.io-index" 1760 | checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" 1761 | dependencies = [ 1762 | "hermit-abi", 1763 | "libc", 1764 | ] 1765 | 1766 | [[package]] 1767 | name = "num_enum" 1768 | version = "0.5.7" 1769 | source = "registry+https://github.com/rust-lang/crates.io-index" 1770 | checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9" 1771 | dependencies = [ 1772 | "num_enum_derive", 1773 | ] 1774 | 1775 | [[package]] 1776 | name = "num_enum_derive" 1777 | version = "0.5.7" 1778 | source = "registry+https://github.com/rust-lang/crates.io-index" 1779 | checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce" 1780 | dependencies = [ 1781 | "proc-macro-crate", 1782 | "proc-macro2", 1783 | "quote", 1784 | "syn", 1785 | ] 1786 | 1787 | [[package]] 1788 | name = "num_threads" 1789 | version = "0.1.6" 1790 | source = "registry+https://github.com/rust-lang/crates.io-index" 1791 | checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" 1792 | dependencies = [ 1793 | "libc", 1794 | ] 1795 | 1796 | [[package]] 1797 | name = "objc" 1798 | version = "0.2.7" 1799 | source = "registry+https://github.com/rust-lang/crates.io-index" 1800 | checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 1801 | dependencies = [ 1802 | "malloc_buf", 1803 | "objc_exception", 1804 | ] 1805 | 1806 | [[package]] 1807 | name = "objc-foundation" 1808 | version = "0.1.1" 1809 | source = "registry+https://github.com/rust-lang/crates.io-index" 1810 | checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" 1811 | dependencies = [ 1812 | "block", 1813 | "objc", 1814 | "objc_id", 1815 | ] 1816 | 1817 | [[package]] 1818 | name = "objc_exception" 1819 | version = "0.1.2" 1820 | source = "registry+https://github.com/rust-lang/crates.io-index" 1821 | checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" 1822 | dependencies = [ 1823 | "cc", 1824 | ] 1825 | 1826 | [[package]] 1827 | name = "objc_id" 1828 | version = "0.1.1" 1829 | source = "registry+https://github.com/rust-lang/crates.io-index" 1830 | checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" 1831 | dependencies = [ 1832 | "objc", 1833 | ] 1834 | 1835 | [[package]] 1836 | name = "once_cell" 1837 | version = "1.13.0" 1838 | source = "registry+https://github.com/rust-lang/crates.io-index" 1839 | checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" 1840 | 1841 | [[package]] 1842 | name = "open" 1843 | version = "3.0.2" 1844 | source = "registry+https://github.com/rust-lang/crates.io-index" 1845 | checksum = "f23a407004a1033f53e93f9b45580d14de23928faad187384f891507c9b0c045" 1846 | dependencies = [ 1847 | "pathdiff", 1848 | "windows-sys", 1849 | ] 1850 | 1851 | [[package]] 1852 | name = "openssl" 1853 | version = "0.10.41" 1854 | source = "registry+https://github.com/rust-lang/crates.io-index" 1855 | checksum = "618febf65336490dfcf20b73f885f5651a0c89c64c2d4a8c3662585a70bf5bd0" 1856 | dependencies = [ 1857 | "bitflags", 1858 | "cfg-if", 1859 | "foreign-types", 1860 | "libc", 1861 | "once_cell", 1862 | "openssl-macros", 1863 | "openssl-sys", 1864 | ] 1865 | 1866 | [[package]] 1867 | name = "openssl-macros" 1868 | version = "0.1.0" 1869 | source = "registry+https://github.com/rust-lang/crates.io-index" 1870 | checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" 1871 | dependencies = [ 1872 | "proc-macro2", 1873 | "quote", 1874 | "syn", 1875 | ] 1876 | 1877 | [[package]] 1878 | name = "openssl-probe" 1879 | version = "0.1.5" 1880 | source = "registry+https://github.com/rust-lang/crates.io-index" 1881 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 1882 | 1883 | [[package]] 1884 | name = "openssl-sys" 1885 | version = "0.9.75" 1886 | source = "registry+https://github.com/rust-lang/crates.io-index" 1887 | checksum = "e5f9bd0c2710541a3cda73d6f9ac4f1b240de4ae261065d309dbe73d9dceb42f" 1888 | dependencies = [ 1889 | "autocfg", 1890 | "cc", 1891 | "libc", 1892 | "pkg-config", 1893 | "vcpkg", 1894 | ] 1895 | 1896 | [[package]] 1897 | name = "os_info" 1898 | version = "3.5.0" 1899 | source = "registry+https://github.com/rust-lang/crates.io-index" 1900 | checksum = "5209b2162b2c140df493a93689e04f8deab3a67634f5bc7a553c0a98e5b8d399" 1901 | dependencies = [ 1902 | "log", 1903 | "serde", 1904 | "winapi", 1905 | ] 1906 | 1907 | [[package]] 1908 | name = "os_pipe" 1909 | version = "1.0.1" 1910 | source = "registry+https://github.com/rust-lang/crates.io-index" 1911 | checksum = "2c92f2b54f081d635c77e7120862d48db8e91f7f21cef23ab1b4fe9971c59f55" 1912 | dependencies = [ 1913 | "libc", 1914 | "winapi", 1915 | ] 1916 | 1917 | [[package]] 1918 | name = "pango" 1919 | version = "0.15.10" 1920 | source = "registry+https://github.com/rust-lang/crates.io-index" 1921 | checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f" 1922 | dependencies = [ 1923 | "bitflags", 1924 | "glib", 1925 | "libc", 1926 | "once_cell", 1927 | "pango-sys", 1928 | ] 1929 | 1930 | [[package]] 1931 | name = "pango-sys" 1932 | version = "0.15.10" 1933 | source = "registry+https://github.com/rust-lang/crates.io-index" 1934 | checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa" 1935 | dependencies = [ 1936 | "glib-sys", 1937 | "gobject-sys", 1938 | "libc", 1939 | "system-deps 6.0.2", 1940 | ] 1941 | 1942 | [[package]] 1943 | name = "parking" 1944 | version = "2.0.0" 1945 | source = "registry+https://github.com/rust-lang/crates.io-index" 1946 | checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" 1947 | 1948 | [[package]] 1949 | name = "parking_lot" 1950 | version = "0.12.1" 1951 | source = "registry+https://github.com/rust-lang/crates.io-index" 1952 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" 1953 | dependencies = [ 1954 | "lock_api", 1955 | "parking_lot_core", 1956 | ] 1957 | 1958 | [[package]] 1959 | name = "parking_lot_core" 1960 | version = "0.9.3" 1961 | source = "registry+https://github.com/rust-lang/crates.io-index" 1962 | checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" 1963 | dependencies = [ 1964 | "cfg-if", 1965 | "libc", 1966 | "redox_syscall", 1967 | "smallvec", 1968 | "windows-sys", 1969 | ] 1970 | 1971 | [[package]] 1972 | name = "paste" 1973 | version = "1.0.8" 1974 | source = "registry+https://github.com/rust-lang/crates.io-index" 1975 | checksum = "9423e2b32f7a043629287a536f21951e8c6a82482d0acb1eeebfc90bc2225b22" 1976 | 1977 | [[package]] 1978 | name = "pathdiff" 1979 | version = "0.2.1" 1980 | source = "registry+https://github.com/rust-lang/crates.io-index" 1981 | checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" 1982 | 1983 | [[package]] 1984 | name = "percent-encoding" 1985 | version = "2.1.0" 1986 | source = "registry+https://github.com/rust-lang/crates.io-index" 1987 | checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" 1988 | 1989 | [[package]] 1990 | name = "pest" 1991 | version = "2.2.1" 1992 | source = "registry+https://github.com/rust-lang/crates.io-index" 1993 | checksum = "69486e2b8c2d2aeb9762db7b4e00b0331156393555cff467f4163ff06821eef8" 1994 | dependencies = [ 1995 | "thiserror", 1996 | "ucd-trie", 1997 | ] 1998 | 1999 | [[package]] 2000 | name = "phf" 2001 | version = "0.8.0" 2002 | source = "registry+https://github.com/rust-lang/crates.io-index" 2003 | checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" 2004 | dependencies = [ 2005 | "phf_macros 0.8.0", 2006 | "phf_shared 0.8.0", 2007 | "proc-macro-hack", 2008 | ] 2009 | 2010 | [[package]] 2011 | name = "phf" 2012 | version = "0.10.1" 2013 | source = "registry+https://github.com/rust-lang/crates.io-index" 2014 | checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" 2015 | dependencies = [ 2016 | "phf_macros 0.10.0", 2017 | "phf_shared 0.10.0", 2018 | "proc-macro-hack", 2019 | ] 2020 | 2021 | [[package]] 2022 | name = "phf_codegen" 2023 | version = "0.8.0" 2024 | source = "registry+https://github.com/rust-lang/crates.io-index" 2025 | checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" 2026 | dependencies = [ 2027 | "phf_generator 0.8.0", 2028 | "phf_shared 0.8.0", 2029 | ] 2030 | 2031 | [[package]] 2032 | name = "phf_generator" 2033 | version = "0.8.0" 2034 | source = "registry+https://github.com/rust-lang/crates.io-index" 2035 | checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" 2036 | dependencies = [ 2037 | "phf_shared 0.8.0", 2038 | "rand 0.7.3", 2039 | ] 2040 | 2041 | [[package]] 2042 | name = "phf_generator" 2043 | version = "0.10.0" 2044 | source = "registry+https://github.com/rust-lang/crates.io-index" 2045 | checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" 2046 | dependencies = [ 2047 | "phf_shared 0.10.0", 2048 | "rand 0.8.5", 2049 | ] 2050 | 2051 | [[package]] 2052 | name = "phf_macros" 2053 | version = "0.8.0" 2054 | source = "registry+https://github.com/rust-lang/crates.io-index" 2055 | checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" 2056 | dependencies = [ 2057 | "phf_generator 0.8.0", 2058 | "phf_shared 0.8.0", 2059 | "proc-macro-hack", 2060 | "proc-macro2", 2061 | "quote", 2062 | "syn", 2063 | ] 2064 | 2065 | [[package]] 2066 | name = "phf_macros" 2067 | version = "0.10.0" 2068 | source = "registry+https://github.com/rust-lang/crates.io-index" 2069 | checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" 2070 | dependencies = [ 2071 | "phf_generator 0.10.0", 2072 | "phf_shared 0.10.0", 2073 | "proc-macro-hack", 2074 | "proc-macro2", 2075 | "quote", 2076 | "syn", 2077 | ] 2078 | 2079 | [[package]] 2080 | name = "phf_shared" 2081 | version = "0.8.0" 2082 | source = "registry+https://github.com/rust-lang/crates.io-index" 2083 | checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" 2084 | dependencies = [ 2085 | "siphasher", 2086 | ] 2087 | 2088 | [[package]] 2089 | name = "phf_shared" 2090 | version = "0.10.0" 2091 | source = "registry+https://github.com/rust-lang/crates.io-index" 2092 | checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" 2093 | dependencies = [ 2094 | "siphasher", 2095 | ] 2096 | 2097 | [[package]] 2098 | name = "pin-project-lite" 2099 | version = "0.2.9" 2100 | source = "registry+https://github.com/rust-lang/crates.io-index" 2101 | checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" 2102 | 2103 | [[package]] 2104 | name = "pin-utils" 2105 | version = "0.1.0" 2106 | source = "registry+https://github.com/rust-lang/crates.io-index" 2107 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 2108 | 2109 | [[package]] 2110 | name = "pkg-config" 2111 | version = "0.3.25" 2112 | source = "registry+https://github.com/rust-lang/crates.io-index" 2113 | checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" 2114 | 2115 | [[package]] 2116 | name = "plist" 2117 | version = "1.3.1" 2118 | source = "registry+https://github.com/rust-lang/crates.io-index" 2119 | checksum = "bd39bc6cdc9355ad1dc5eeedefee696bb35c34caf21768741e81826c0bbd7225" 2120 | dependencies = [ 2121 | "base64", 2122 | "indexmap", 2123 | "line-wrap", 2124 | "serde", 2125 | "time", 2126 | "xml-rs", 2127 | ] 2128 | 2129 | [[package]] 2130 | name = "png" 2131 | version = "0.11.0" 2132 | source = "registry+https://github.com/rust-lang/crates.io-index" 2133 | checksum = "f0b0cabbbd20c2d7f06dbf015e06aad59b6ca3d9ed14848783e98af9aaf19925" 2134 | dependencies = [ 2135 | "bitflags", 2136 | "deflate 0.7.20", 2137 | "inflate", 2138 | "num-iter", 2139 | ] 2140 | 2141 | [[package]] 2142 | name = "png" 2143 | version = "0.17.5" 2144 | source = "registry+https://github.com/rust-lang/crates.io-index" 2145 | checksum = "dc38c0ad57efb786dd57b9864e5b18bae478c00c824dc55a38bbc9da95dde3ba" 2146 | dependencies = [ 2147 | "bitflags", 2148 | "crc32fast", 2149 | "deflate 1.0.0", 2150 | "miniz_oxide", 2151 | ] 2152 | 2153 | [[package]] 2154 | name = "ppv-lite86" 2155 | version = "0.2.16" 2156 | source = "registry+https://github.com/rust-lang/crates.io-index" 2157 | checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" 2158 | 2159 | [[package]] 2160 | name = "precomputed-hash" 2161 | version = "0.1.1" 2162 | source = "registry+https://github.com/rust-lang/crates.io-index" 2163 | checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" 2164 | 2165 | [[package]] 2166 | name = "proc-macro-crate" 2167 | version = "1.2.0" 2168 | source = "registry+https://github.com/rust-lang/crates.io-index" 2169 | checksum = "26d50bfb8c23f23915855a00d98b5a35ef2e0b871bb52937bacadb798fbb66c8" 2170 | dependencies = [ 2171 | "once_cell", 2172 | "thiserror", 2173 | "toml", 2174 | ] 2175 | 2176 | [[package]] 2177 | name = "proc-macro-error" 2178 | version = "1.0.4" 2179 | source = "registry+https://github.com/rust-lang/crates.io-index" 2180 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 2181 | dependencies = [ 2182 | "proc-macro-error-attr", 2183 | "proc-macro2", 2184 | "quote", 2185 | "syn", 2186 | "version_check", 2187 | ] 2188 | 2189 | [[package]] 2190 | name = "proc-macro-error-attr" 2191 | version = "1.0.4" 2192 | source = "registry+https://github.com/rust-lang/crates.io-index" 2193 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 2194 | dependencies = [ 2195 | "proc-macro2", 2196 | "quote", 2197 | "version_check", 2198 | ] 2199 | 2200 | [[package]] 2201 | name = "proc-macro-hack" 2202 | version = "0.5.19" 2203 | source = "registry+https://github.com/rust-lang/crates.io-index" 2204 | checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" 2205 | 2206 | [[package]] 2207 | name = "proc-macro2" 2208 | version = "1.0.43" 2209 | source = "registry+https://github.com/rust-lang/crates.io-index" 2210 | checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" 2211 | dependencies = [ 2212 | "unicode-ident", 2213 | ] 2214 | 2215 | [[package]] 2216 | name = "quote" 2217 | version = "1.0.21" 2218 | source = "registry+https://github.com/rust-lang/crates.io-index" 2219 | checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" 2220 | dependencies = [ 2221 | "proc-macro2", 2222 | ] 2223 | 2224 | [[package]] 2225 | name = "quoted_printable" 2226 | version = "0.4.5" 2227 | source = "registry+https://github.com/rust-lang/crates.io-index" 2228 | checksum = "3fee2dce59f7a43418e3382c766554c614e06a552d53a8f07ef499ea4b332c0f" 2229 | 2230 | [[package]] 2231 | name = "rand" 2232 | version = "0.7.3" 2233 | source = "registry+https://github.com/rust-lang/crates.io-index" 2234 | checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" 2235 | dependencies = [ 2236 | "getrandom 0.1.16", 2237 | "libc", 2238 | "rand_chacha 0.2.2", 2239 | "rand_core 0.5.1", 2240 | "rand_hc", 2241 | "rand_pcg", 2242 | ] 2243 | 2244 | [[package]] 2245 | name = "rand" 2246 | version = "0.8.5" 2247 | source = "registry+https://github.com/rust-lang/crates.io-index" 2248 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 2249 | dependencies = [ 2250 | "libc", 2251 | "rand_chacha 0.3.1", 2252 | "rand_core 0.6.3", 2253 | ] 2254 | 2255 | [[package]] 2256 | name = "rand_chacha" 2257 | version = "0.2.2" 2258 | source = "registry+https://github.com/rust-lang/crates.io-index" 2259 | checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" 2260 | dependencies = [ 2261 | "ppv-lite86", 2262 | "rand_core 0.5.1", 2263 | ] 2264 | 2265 | [[package]] 2266 | name = "rand_chacha" 2267 | version = "0.3.1" 2268 | source = "registry+https://github.com/rust-lang/crates.io-index" 2269 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 2270 | dependencies = [ 2271 | "ppv-lite86", 2272 | "rand_core 0.6.3", 2273 | ] 2274 | 2275 | [[package]] 2276 | name = "rand_core" 2277 | version = "0.5.1" 2278 | source = "registry+https://github.com/rust-lang/crates.io-index" 2279 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" 2280 | dependencies = [ 2281 | "getrandom 0.1.16", 2282 | ] 2283 | 2284 | [[package]] 2285 | name = "rand_core" 2286 | version = "0.6.3" 2287 | source = "registry+https://github.com/rust-lang/crates.io-index" 2288 | checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" 2289 | dependencies = [ 2290 | "getrandom 0.2.7", 2291 | ] 2292 | 2293 | [[package]] 2294 | name = "rand_hc" 2295 | version = "0.2.0" 2296 | source = "registry+https://github.com/rust-lang/crates.io-index" 2297 | checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" 2298 | dependencies = [ 2299 | "rand_core 0.5.1", 2300 | ] 2301 | 2302 | [[package]] 2303 | name = "rand_pcg" 2304 | version = "0.2.1" 2305 | source = "registry+https://github.com/rust-lang/crates.io-index" 2306 | checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" 2307 | dependencies = [ 2308 | "rand_core 0.5.1", 2309 | ] 2310 | 2311 | [[package]] 2312 | name = "raw-window-handle" 2313 | version = "0.4.3" 2314 | source = "registry+https://github.com/rust-lang/crates.io-index" 2315 | checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41" 2316 | dependencies = [ 2317 | "cty", 2318 | ] 2319 | 2320 | [[package]] 2321 | name = "redox_syscall" 2322 | version = "0.2.16" 2323 | source = "registry+https://github.com/rust-lang/crates.io-index" 2324 | checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" 2325 | dependencies = [ 2326 | "bitflags", 2327 | ] 2328 | 2329 | [[package]] 2330 | name = "redox_users" 2331 | version = "0.4.3" 2332 | source = "registry+https://github.com/rust-lang/crates.io-index" 2333 | checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" 2334 | dependencies = [ 2335 | "getrandom 0.2.7", 2336 | "redox_syscall", 2337 | "thiserror", 2338 | ] 2339 | 2340 | [[package]] 2341 | name = "regex" 2342 | version = "1.6.0" 2343 | source = "registry+https://github.com/rust-lang/crates.io-index" 2344 | checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" 2345 | dependencies = [ 2346 | "aho-corasick", 2347 | "memchr", 2348 | "regex-syntax", 2349 | ] 2350 | 2351 | [[package]] 2352 | name = "regex-automata" 2353 | version = "0.1.10" 2354 | source = "registry+https://github.com/rust-lang/crates.io-index" 2355 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" 2356 | dependencies = [ 2357 | "regex-syntax", 2358 | ] 2359 | 2360 | [[package]] 2361 | name = "regex-syntax" 2362 | version = "0.6.27" 2363 | source = "registry+https://github.com/rust-lang/crates.io-index" 2364 | checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" 2365 | 2366 | [[package]] 2367 | name = "remove_dir_all" 2368 | version = "0.5.3" 2369 | source = "registry+https://github.com/rust-lang/crates.io-index" 2370 | checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" 2371 | dependencies = [ 2372 | "winapi", 2373 | ] 2374 | 2375 | [[package]] 2376 | name = "rfd" 2377 | version = "0.9.1" 2378 | source = "registry+https://github.com/rust-lang/crates.io-index" 2379 | checksum = "f121348fd3b9035ed11be1f028e8944263c30641f8c5deacf57a4320782fb402" 2380 | dependencies = [ 2381 | "block", 2382 | "dispatch", 2383 | "embed-resource", 2384 | "glib-sys", 2385 | "gobject-sys", 2386 | "gtk-sys", 2387 | "js-sys", 2388 | "lazy_static", 2389 | "log", 2390 | "objc", 2391 | "objc-foundation", 2392 | "objc_id", 2393 | "raw-window-handle", 2394 | "wasm-bindgen", 2395 | "wasm-bindgen-futures", 2396 | "web-sys", 2397 | "windows 0.37.0", 2398 | ] 2399 | 2400 | [[package]] 2401 | name = "ring" 2402 | version = "0.16.20" 2403 | source = "registry+https://github.com/rust-lang/crates.io-index" 2404 | checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" 2405 | dependencies = [ 2406 | "cc", 2407 | "libc", 2408 | "once_cell", 2409 | "spin", 2410 | "untrusted", 2411 | "web-sys", 2412 | "winapi", 2413 | ] 2414 | 2415 | [[package]] 2416 | name = "rustc_version" 2417 | version = "0.3.3" 2418 | source = "registry+https://github.com/rust-lang/crates.io-index" 2419 | checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" 2420 | dependencies = [ 2421 | "semver 0.11.0", 2422 | ] 2423 | 2424 | [[package]] 2425 | name = "rustc_version" 2426 | version = "0.4.0" 2427 | source = "registry+https://github.com/rust-lang/crates.io-index" 2428 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" 2429 | dependencies = [ 2430 | "semver 1.0.13", 2431 | ] 2432 | 2433 | [[package]] 2434 | name = "rustls" 2435 | version = "0.20.6" 2436 | source = "registry+https://github.com/rust-lang/crates.io-index" 2437 | checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033" 2438 | dependencies = [ 2439 | "log", 2440 | "ring", 2441 | "sct", 2442 | "webpki", 2443 | ] 2444 | 2445 | [[package]] 2446 | name = "rustls-pemfile" 2447 | version = "1.0.1" 2448 | source = "registry+https://github.com/rust-lang/crates.io-index" 2449 | checksum = "0864aeff53f8c05aa08d86e5ef839d3dfcf07aeba2db32f12db0ef716e87bd55" 2450 | dependencies = [ 2451 | "base64", 2452 | ] 2453 | 2454 | [[package]] 2455 | name = "rustversion" 2456 | version = "1.0.9" 2457 | source = "registry+https://github.com/rust-lang/crates.io-index" 2458 | checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8" 2459 | 2460 | [[package]] 2461 | name = "ryu" 2462 | version = "1.0.11" 2463 | source = "registry+https://github.com/rust-lang/crates.io-index" 2464 | checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" 2465 | 2466 | [[package]] 2467 | name = "safemem" 2468 | version = "0.3.3" 2469 | source = "registry+https://github.com/rust-lang/crates.io-index" 2470 | checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" 2471 | 2472 | [[package]] 2473 | name = "same-file" 2474 | version = "1.0.6" 2475 | source = "registry+https://github.com/rust-lang/crates.io-index" 2476 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 2477 | dependencies = [ 2478 | "winapi-util", 2479 | ] 2480 | 2481 | [[package]] 2482 | name = "schannel" 2483 | version = "0.1.20" 2484 | source = "registry+https://github.com/rust-lang/crates.io-index" 2485 | checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" 2486 | dependencies = [ 2487 | "lazy_static", 2488 | "windows-sys", 2489 | ] 2490 | 2491 | [[package]] 2492 | name = "scoped-tls" 2493 | version = "1.0.0" 2494 | source = "registry+https://github.com/rust-lang/crates.io-index" 2495 | checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" 2496 | 2497 | [[package]] 2498 | name = "scoped_threadpool" 2499 | version = "0.1.9" 2500 | source = "registry+https://github.com/rust-lang/crates.io-index" 2501 | checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" 2502 | 2503 | [[package]] 2504 | name = "scopeguard" 2505 | version = "1.1.0" 2506 | source = "registry+https://github.com/rust-lang/crates.io-index" 2507 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 2508 | 2509 | [[package]] 2510 | name = "sct" 2511 | version = "0.7.0" 2512 | source = "registry+https://github.com/rust-lang/crates.io-index" 2513 | checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" 2514 | dependencies = [ 2515 | "ring", 2516 | "untrusted", 2517 | ] 2518 | 2519 | [[package]] 2520 | name = "security-framework" 2521 | version = "2.6.1" 2522 | source = "registry+https://github.com/rust-lang/crates.io-index" 2523 | checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" 2524 | dependencies = [ 2525 | "bitflags", 2526 | "core-foundation", 2527 | "core-foundation-sys", 2528 | "libc", 2529 | "security-framework-sys", 2530 | ] 2531 | 2532 | [[package]] 2533 | name = "security-framework-sys" 2534 | version = "2.6.1" 2535 | source = "registry+https://github.com/rust-lang/crates.io-index" 2536 | checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" 2537 | dependencies = [ 2538 | "core-foundation-sys", 2539 | "libc", 2540 | ] 2541 | 2542 | [[package]] 2543 | name = "selectors" 2544 | version = "0.22.0" 2545 | source = "registry+https://github.com/rust-lang/crates.io-index" 2546 | checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" 2547 | dependencies = [ 2548 | "bitflags", 2549 | "cssparser", 2550 | "derive_more", 2551 | "fxhash", 2552 | "log", 2553 | "matches", 2554 | "phf 0.8.0", 2555 | "phf_codegen", 2556 | "precomputed-hash", 2557 | "servo_arc", 2558 | "smallvec", 2559 | "thin-slice", 2560 | ] 2561 | 2562 | [[package]] 2563 | name = "semver" 2564 | version = "0.11.0" 2565 | source = "registry+https://github.com/rust-lang/crates.io-index" 2566 | checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" 2567 | dependencies = [ 2568 | "semver-parser", 2569 | ] 2570 | 2571 | [[package]] 2572 | name = "semver" 2573 | version = "1.0.13" 2574 | source = "registry+https://github.com/rust-lang/crates.io-index" 2575 | checksum = "93f6841e709003d68bb2deee8c343572bf446003ec20a583e76f7b15cebf3711" 2576 | dependencies = [ 2577 | "serde", 2578 | ] 2579 | 2580 | [[package]] 2581 | name = "semver-parser" 2582 | version = "0.10.2" 2583 | source = "registry+https://github.com/rust-lang/crates.io-index" 2584 | checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" 2585 | dependencies = [ 2586 | "pest", 2587 | ] 2588 | 2589 | [[package]] 2590 | name = "serde" 2591 | version = "1.0.142" 2592 | source = "registry+https://github.com/rust-lang/crates.io-index" 2593 | checksum = "e590c437916fb6b221e1d00df6e3294f3fccd70ca7e92541c475d6ed6ef5fee2" 2594 | dependencies = [ 2595 | "serde_derive", 2596 | ] 2597 | 2598 | [[package]] 2599 | name = "serde_derive" 2600 | version = "1.0.142" 2601 | source = "registry+https://github.com/rust-lang/crates.io-index" 2602 | checksum = "34b5b8d809babe02f538c2cfec6f2c1ed10804c0e5a6a041a049a4f5588ccc2e" 2603 | dependencies = [ 2604 | "proc-macro2", 2605 | "quote", 2606 | "syn", 2607 | ] 2608 | 2609 | [[package]] 2610 | name = "serde_json" 2611 | version = "1.0.83" 2612 | source = "registry+https://github.com/rust-lang/crates.io-index" 2613 | checksum = "38dd04e3c8279e75b31ef29dbdceebfe5ad89f4d0937213c53f7d49d01b3d5a7" 2614 | dependencies = [ 2615 | "itoa 1.0.3", 2616 | "ryu", 2617 | "serde", 2618 | ] 2619 | 2620 | [[package]] 2621 | name = "serde_repr" 2622 | version = "0.1.9" 2623 | source = "registry+https://github.com/rust-lang/crates.io-index" 2624 | checksum = "1fe39d9fbb0ebf5eb2c7cb7e2a47e4f462fad1379f1166b8ae49ad9eae89a7ca" 2625 | dependencies = [ 2626 | "proc-macro2", 2627 | "quote", 2628 | "syn", 2629 | ] 2630 | 2631 | [[package]] 2632 | name = "serde_urlencoded" 2633 | version = "0.7.1" 2634 | source = "registry+https://github.com/rust-lang/crates.io-index" 2635 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 2636 | dependencies = [ 2637 | "form_urlencoded", 2638 | "itoa 1.0.3", 2639 | "ryu", 2640 | "serde", 2641 | ] 2642 | 2643 | [[package]] 2644 | name = "serde_with" 2645 | version = "1.14.0" 2646 | source = "registry+https://github.com/rust-lang/crates.io-index" 2647 | checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" 2648 | dependencies = [ 2649 | "serde", 2650 | "serde_with_macros", 2651 | ] 2652 | 2653 | [[package]] 2654 | name = "serde_with_macros" 2655 | version = "1.5.2" 2656 | source = "registry+https://github.com/rust-lang/crates.io-index" 2657 | checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" 2658 | dependencies = [ 2659 | "darling", 2660 | "proc-macro2", 2661 | "quote", 2662 | "syn", 2663 | ] 2664 | 2665 | [[package]] 2666 | name = "serialize-to-javascript" 2667 | version = "0.1.1" 2668 | source = "registry+https://github.com/rust-lang/crates.io-index" 2669 | checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" 2670 | dependencies = [ 2671 | "serde", 2672 | "serde_json", 2673 | "serialize-to-javascript-impl", 2674 | ] 2675 | 2676 | [[package]] 2677 | name = "serialize-to-javascript-impl" 2678 | version = "0.1.1" 2679 | source = "registry+https://github.com/rust-lang/crates.io-index" 2680 | checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" 2681 | dependencies = [ 2682 | "proc-macro2", 2683 | "quote", 2684 | "syn", 2685 | ] 2686 | 2687 | [[package]] 2688 | name = "servo_arc" 2689 | version = "0.1.1" 2690 | source = "registry+https://github.com/rust-lang/crates.io-index" 2691 | checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" 2692 | dependencies = [ 2693 | "nodrop", 2694 | "stable_deref_trait", 2695 | ] 2696 | 2697 | [[package]] 2698 | name = "sha2" 2699 | version = "0.10.2" 2700 | source = "registry+https://github.com/rust-lang/crates.io-index" 2701 | checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" 2702 | dependencies = [ 2703 | "cfg-if", 2704 | "cpufeatures", 2705 | "digest", 2706 | ] 2707 | 2708 | [[package]] 2709 | name = "sharded-slab" 2710 | version = "0.1.4" 2711 | source = "registry+https://github.com/rust-lang/crates.io-index" 2712 | checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" 2713 | dependencies = [ 2714 | "lazy_static", 2715 | ] 2716 | 2717 | [[package]] 2718 | name = "shared_child" 2719 | version = "1.0.0" 2720 | source = "registry+https://github.com/rust-lang/crates.io-index" 2721 | checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef" 2722 | dependencies = [ 2723 | "libc", 2724 | "winapi", 2725 | ] 2726 | 2727 | [[package]] 2728 | name = "siphasher" 2729 | version = "0.3.10" 2730 | source = "registry+https://github.com/rust-lang/crates.io-index" 2731 | checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" 2732 | 2733 | [[package]] 2734 | name = "slab" 2735 | version = "0.4.7" 2736 | source = "registry+https://github.com/rust-lang/crates.io-index" 2737 | checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" 2738 | dependencies = [ 2739 | "autocfg", 2740 | ] 2741 | 2742 | [[package]] 2743 | name = "smallvec" 2744 | version = "1.9.0" 2745 | source = "registry+https://github.com/rust-lang/crates.io-index" 2746 | checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" 2747 | 2748 | [[package]] 2749 | name = "socket2" 2750 | version = "0.4.4" 2751 | source = "registry+https://github.com/rust-lang/crates.io-index" 2752 | checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" 2753 | dependencies = [ 2754 | "libc", 2755 | "winapi", 2756 | ] 2757 | 2758 | [[package]] 2759 | name = "soup2" 2760 | version = "0.2.1" 2761 | source = "registry+https://github.com/rust-lang/crates.io-index" 2762 | checksum = "b2b4d76501d8ba387cf0fefbe055c3e0a59891d09f0f995ae4e4b16f6b60f3c0" 2763 | dependencies = [ 2764 | "bitflags", 2765 | "gio", 2766 | "glib", 2767 | "libc", 2768 | "once_cell", 2769 | "soup2-sys", 2770 | ] 2771 | 2772 | [[package]] 2773 | name = "soup2-sys" 2774 | version = "0.2.0" 2775 | source = "registry+https://github.com/rust-lang/crates.io-index" 2776 | checksum = "009ef427103fcb17f802871647a7fa6c60cbb654b4c4e4c0ac60a31c5f6dc9cf" 2777 | dependencies = [ 2778 | "bitflags", 2779 | "gio-sys", 2780 | "glib-sys", 2781 | "gobject-sys", 2782 | "libc", 2783 | "system-deps 5.0.0", 2784 | ] 2785 | 2786 | [[package]] 2787 | name = "spin" 2788 | version = "0.5.2" 2789 | source = "registry+https://github.com/rust-lang/crates.io-index" 2790 | checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" 2791 | 2792 | [[package]] 2793 | name = "stable_deref_trait" 2794 | version = "1.2.0" 2795 | source = "registry+https://github.com/rust-lang/crates.io-index" 2796 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 2797 | 2798 | [[package]] 2799 | name = "state" 2800 | version = "0.5.3" 2801 | source = "registry+https://github.com/rust-lang/crates.io-index" 2802 | checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" 2803 | dependencies = [ 2804 | "loom", 2805 | ] 2806 | 2807 | [[package]] 2808 | name = "string_cache" 2809 | version = "0.8.4" 2810 | source = "registry+https://github.com/rust-lang/crates.io-index" 2811 | checksum = "213494b7a2b503146286049378ce02b482200519accc31872ee8be91fa820a08" 2812 | dependencies = [ 2813 | "new_debug_unreachable", 2814 | "once_cell", 2815 | "parking_lot", 2816 | "phf_shared 0.10.0", 2817 | "precomputed-hash", 2818 | "serde", 2819 | ] 2820 | 2821 | [[package]] 2822 | name = "string_cache_codegen" 2823 | version = "0.5.2" 2824 | source = "registry+https://github.com/rust-lang/crates.io-index" 2825 | checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" 2826 | dependencies = [ 2827 | "phf_generator 0.10.0", 2828 | "phf_shared 0.10.0", 2829 | "proc-macro2", 2830 | "quote", 2831 | ] 2832 | 2833 | [[package]] 2834 | name = "strsim" 2835 | version = "0.10.0" 2836 | source = "registry+https://github.com/rust-lang/crates.io-index" 2837 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 2838 | 2839 | [[package]] 2840 | name = "strum" 2841 | version = "0.22.0" 2842 | source = "registry+https://github.com/rust-lang/crates.io-index" 2843 | checksum = "f7ac893c7d471c8a21f31cfe213ec4f6d9afeed25537c772e08ef3f005f8729e" 2844 | dependencies = [ 2845 | "strum_macros", 2846 | ] 2847 | 2848 | [[package]] 2849 | name = "strum_macros" 2850 | version = "0.22.0" 2851 | source = "registry+https://github.com/rust-lang/crates.io-index" 2852 | checksum = "339f799d8b549e3744c7ac7feb216383e4005d94bdb22561b3ab8f3b808ae9fb" 2853 | dependencies = [ 2854 | "heck 0.3.3", 2855 | "proc-macro2", 2856 | "quote", 2857 | "syn", 2858 | ] 2859 | 2860 | [[package]] 2861 | name = "syn" 2862 | version = "1.0.99" 2863 | source = "registry+https://github.com/rust-lang/crates.io-index" 2864 | checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" 2865 | dependencies = [ 2866 | "proc-macro2", 2867 | "quote", 2868 | "unicode-ident", 2869 | ] 2870 | 2871 | [[package]] 2872 | name = "system-deps" 2873 | version = "5.0.0" 2874 | source = "registry+https://github.com/rust-lang/crates.io-index" 2875 | checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e" 2876 | dependencies = [ 2877 | "cfg-expr 0.9.1", 2878 | "heck 0.3.3", 2879 | "pkg-config", 2880 | "toml", 2881 | "version-compare 0.0.11", 2882 | ] 2883 | 2884 | [[package]] 2885 | name = "system-deps" 2886 | version = "6.0.2" 2887 | source = "registry+https://github.com/rust-lang/crates.io-index" 2888 | checksum = "a1a45a1c4c9015217e12347f2a411b57ce2c4fc543913b14b6fe40483328e709" 2889 | dependencies = [ 2890 | "cfg-expr 0.10.3", 2891 | "heck 0.4.0", 2892 | "pkg-config", 2893 | "toml", 2894 | "version-compare 0.1.0", 2895 | ] 2896 | 2897 | [[package]] 2898 | name = "tao" 2899 | version = "0.12.2" 2900 | source = "registry+https://github.com/rust-lang/crates.io-index" 2901 | checksum = "f6fd7725dc1e593e9ecabd9fe49c112a204c8c8694db4182e78b2a5af490b1ae" 2902 | dependencies = [ 2903 | "bitflags", 2904 | "cairo-rs", 2905 | "cc", 2906 | "cocoa", 2907 | "core-foundation", 2908 | "core-graphics", 2909 | "crossbeam-channel", 2910 | "dispatch", 2911 | "gdk", 2912 | "gdk-pixbuf", 2913 | "gdk-sys", 2914 | "gdkx11-sys", 2915 | "gio", 2916 | "glib", 2917 | "glib-sys", 2918 | "gtk", 2919 | "image", 2920 | "instant", 2921 | "jni 0.19.0", 2922 | "lazy_static", 2923 | "libc", 2924 | "log", 2925 | "ndk", 2926 | "ndk-context", 2927 | "ndk-sys", 2928 | "objc", 2929 | "once_cell", 2930 | "parking_lot", 2931 | "paste", 2932 | "png 0.17.5", 2933 | "raw-window-handle", 2934 | "scopeguard", 2935 | "serde", 2936 | "unicode-segmentation", 2937 | "uuid 1.1.2", 2938 | "windows 0.37.0", 2939 | "windows-implement", 2940 | "x11-dl", 2941 | ] 2942 | 2943 | [[package]] 2944 | name = "tar" 2945 | version = "0.4.38" 2946 | source = "registry+https://github.com/rust-lang/crates.io-index" 2947 | checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" 2948 | dependencies = [ 2949 | "filetime", 2950 | "libc", 2951 | "xattr", 2952 | ] 2953 | 2954 | [[package]] 2955 | name = "tauri" 2956 | version = "1.0.5" 2957 | source = "registry+https://github.com/rust-lang/crates.io-index" 2958 | checksum = "e1a56a8b125069c2682bd31610109b4436c050c74447bee1078217a0325c1add" 2959 | dependencies = [ 2960 | "anyhow", 2961 | "attohttpc", 2962 | "cocoa", 2963 | "dirs-next", 2964 | "embed_plist", 2965 | "flate2", 2966 | "futures", 2967 | "futures-lite", 2968 | "glib", 2969 | "glob", 2970 | "gtk", 2971 | "heck 0.4.0", 2972 | "http", 2973 | "ignore", 2974 | "notify-rust", 2975 | "objc", 2976 | "once_cell", 2977 | "open", 2978 | "os_info", 2979 | "os_pipe", 2980 | "percent-encoding", 2981 | "rand 0.8.5", 2982 | "raw-window-handle", 2983 | "regex", 2984 | "rfd", 2985 | "semver 1.0.13", 2986 | "serde", 2987 | "serde_json", 2988 | "serde_repr", 2989 | "serialize-to-javascript", 2990 | "shared_child", 2991 | "state", 2992 | "tar", 2993 | "tauri-macros", 2994 | "tauri-runtime", 2995 | "tauri-runtime-wry", 2996 | "tauri-utils", 2997 | "tempfile", 2998 | "thiserror", 2999 | "tokio", 3000 | "url", 3001 | "uuid 1.1.2", 3002 | "webkit2gtk", 3003 | "webview2-com", 3004 | "windows 0.37.0", 3005 | ] 3006 | 3007 | [[package]] 3008 | name = "tauri-build" 3009 | version = "1.0.4" 3010 | source = "registry+https://github.com/rust-lang/crates.io-index" 3011 | checksum = "acafb1c515c5d14234a294461bd43c723639a84891a45f6a250fd3441ad2e8ed" 3012 | dependencies = [ 3013 | "anyhow", 3014 | "cargo_toml", 3015 | "heck 0.4.0", 3016 | "json-patch", 3017 | "semver 1.0.13", 3018 | "serde_json", 3019 | "tauri-utils", 3020 | "winres", 3021 | ] 3022 | 3023 | [[package]] 3024 | name = "tauri-codegen" 3025 | version = "1.0.4" 3026 | source = "registry+https://github.com/rust-lang/crates.io-index" 3027 | checksum = "16d62a3c8790d6cba686cea6e3f7f569d12c662c3274c2d165a4fd33e3871b72" 3028 | dependencies = [ 3029 | "base64", 3030 | "brotli", 3031 | "ico", 3032 | "json-patch", 3033 | "plist", 3034 | "png 0.17.5", 3035 | "proc-macro2", 3036 | "quote", 3037 | "regex", 3038 | "semver 1.0.13", 3039 | "serde", 3040 | "serde_json", 3041 | "sha2", 3042 | "tauri-utils", 3043 | "thiserror", 3044 | "time", 3045 | "uuid 1.1.2", 3046 | "walkdir", 3047 | ] 3048 | 3049 | [[package]] 3050 | name = "tauri-macros" 3051 | version = "1.0.4" 3052 | source = "registry+https://github.com/rust-lang/crates.io-index" 3053 | checksum = "7296fa17996629f43081e1c66d554703900187ed900c5bf46f97f0bcfb069278" 3054 | dependencies = [ 3055 | "heck 0.4.0", 3056 | "proc-macro2", 3057 | "quote", 3058 | "syn", 3059 | "tauri-codegen", 3060 | "tauri-utils", 3061 | ] 3062 | 3063 | [[package]] 3064 | name = "tauri-runtime" 3065 | version = "0.10.2" 3066 | source = "registry+https://github.com/rust-lang/crates.io-index" 3067 | checksum = "4e4cff3b4d9469727fa2107c4b3d2eda110df1ba45103fb420178e536362fae4" 3068 | dependencies = [ 3069 | "gtk", 3070 | "http", 3071 | "http-range", 3072 | "infer", 3073 | "raw-window-handle", 3074 | "serde", 3075 | "serde_json", 3076 | "tauri-utils", 3077 | "thiserror", 3078 | "uuid 1.1.2", 3079 | "webview2-com", 3080 | "windows 0.37.0", 3081 | ] 3082 | 3083 | [[package]] 3084 | name = "tauri-runtime-wry" 3085 | version = "0.10.2" 3086 | source = "registry+https://github.com/rust-lang/crates.io-index" 3087 | checksum = "3fa8c4edaf01d8b556e7172c844b1b4dd3399adcd1a606bd520fc3e65f698546" 3088 | dependencies = [ 3089 | "cocoa", 3090 | "gtk", 3091 | "percent-encoding", 3092 | "rand 0.8.5", 3093 | "raw-window-handle", 3094 | "tauri-runtime", 3095 | "tauri-utils", 3096 | "uuid 1.1.2", 3097 | "webkit2gtk", 3098 | "webview2-com", 3099 | "windows 0.37.0", 3100 | "wry", 3101 | ] 3102 | 3103 | [[package]] 3104 | name = "tauri-utils" 3105 | version = "1.0.3" 3106 | source = "registry+https://github.com/rust-lang/crates.io-index" 3107 | checksum = "12ff4b68d9faeb57c9c727bf58c9c9768d2b67d8e84e62ce6146e7859a2e9c6b" 3108 | dependencies = [ 3109 | "brotli", 3110 | "ctor", 3111 | "glob", 3112 | "heck 0.4.0", 3113 | "html5ever", 3114 | "json-patch", 3115 | "kuchiki", 3116 | "memchr", 3117 | "phf 0.10.1", 3118 | "proc-macro2", 3119 | "quote", 3120 | "semver 1.0.13", 3121 | "serde", 3122 | "serde_json", 3123 | "serde_with", 3124 | "thiserror", 3125 | "url", 3126 | "walkdir", 3127 | "windows 0.37.0", 3128 | ] 3129 | 3130 | [[package]] 3131 | name = "tempfile" 3132 | version = "3.3.0" 3133 | source = "registry+https://github.com/rust-lang/crates.io-index" 3134 | checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" 3135 | dependencies = [ 3136 | "cfg-if", 3137 | "fastrand", 3138 | "libc", 3139 | "redox_syscall", 3140 | "remove_dir_all", 3141 | "winapi", 3142 | ] 3143 | 3144 | [[package]] 3145 | name = "tendril" 3146 | version = "0.4.3" 3147 | source = "registry+https://github.com/rust-lang/crates.io-index" 3148 | checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" 3149 | dependencies = [ 3150 | "futf", 3151 | "mac", 3152 | "utf-8", 3153 | ] 3154 | 3155 | [[package]] 3156 | name = "ternop" 3157 | version = "1.0.1" 3158 | source = "registry+https://github.com/rust-lang/crates.io-index" 3159 | checksum = "9d4ae32d0a4605a89c28534371b056919c12e7a070ee07505af75130ff030111" 3160 | 3161 | [[package]] 3162 | name = "thin-slice" 3163 | version = "0.1.1" 3164 | source = "registry+https://github.com/rust-lang/crates.io-index" 3165 | checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" 3166 | 3167 | [[package]] 3168 | name = "thiserror" 3169 | version = "1.0.32" 3170 | source = "registry+https://github.com/rust-lang/crates.io-index" 3171 | checksum = "f5f6586b7f764adc0231f4c79be7b920e766bb2f3e51b3661cdb263828f19994" 3172 | dependencies = [ 3173 | "thiserror-impl", 3174 | ] 3175 | 3176 | [[package]] 3177 | name = "thiserror-impl" 3178 | version = "1.0.32" 3179 | source = "registry+https://github.com/rust-lang/crates.io-index" 3180 | checksum = "12bafc5b54507e0149cdf1b145a5d80ab80a90bcd9275df43d4fff68460f6c21" 3181 | dependencies = [ 3182 | "proc-macro2", 3183 | "quote", 3184 | "syn", 3185 | ] 3186 | 3187 | [[package]] 3188 | name = "thread_local" 3189 | version = "1.1.4" 3190 | source = "registry+https://github.com/rust-lang/crates.io-index" 3191 | checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" 3192 | dependencies = [ 3193 | "once_cell", 3194 | ] 3195 | 3196 | [[package]] 3197 | name = "time" 3198 | version = "0.3.12" 3199 | source = "registry+https://github.com/rust-lang/crates.io-index" 3200 | checksum = "74b7cc93fc23ba97fde84f7eea56c55d1ba183f495c6715defdfc7b9cb8c870f" 3201 | dependencies = [ 3202 | "itoa 1.0.3", 3203 | "js-sys", 3204 | "libc", 3205 | "num_threads", 3206 | ] 3207 | 3208 | [[package]] 3209 | name = "tinyvec" 3210 | version = "1.6.0" 3211 | source = "registry+https://github.com/rust-lang/crates.io-index" 3212 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 3213 | dependencies = [ 3214 | "tinyvec_macros", 3215 | ] 3216 | 3217 | [[package]] 3218 | name = "tinyvec_macros" 3219 | version = "0.1.0" 3220 | source = "registry+https://github.com/rust-lang/crates.io-index" 3221 | checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" 3222 | 3223 | [[package]] 3224 | name = "tokio" 3225 | version = "1.20.1" 3226 | source = "registry+https://github.com/rust-lang/crates.io-index" 3227 | checksum = "7a8325f63a7d4774dd041e363b2409ed1c5cbbd0f867795e661df066b2b0a581" 3228 | dependencies = [ 3229 | "autocfg", 3230 | "bytes", 3231 | "memchr", 3232 | "num_cpus", 3233 | "once_cell", 3234 | "pin-project-lite", 3235 | ] 3236 | 3237 | [[package]] 3238 | name = "toml" 3239 | version = "0.5.9" 3240 | source = "registry+https://github.com/rust-lang/crates.io-index" 3241 | checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" 3242 | dependencies = [ 3243 | "serde", 3244 | ] 3245 | 3246 | [[package]] 3247 | name = "tracing" 3248 | version = "0.1.36" 3249 | source = "registry+https://github.com/rust-lang/crates.io-index" 3250 | checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307" 3251 | dependencies = [ 3252 | "cfg-if", 3253 | "pin-project-lite", 3254 | "tracing-attributes", 3255 | "tracing-core", 3256 | ] 3257 | 3258 | [[package]] 3259 | name = "tracing-attributes" 3260 | version = "0.1.22" 3261 | source = "registry+https://github.com/rust-lang/crates.io-index" 3262 | checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2" 3263 | dependencies = [ 3264 | "proc-macro2", 3265 | "quote", 3266 | "syn", 3267 | ] 3268 | 3269 | [[package]] 3270 | name = "tracing-core" 3271 | version = "0.1.29" 3272 | source = "registry+https://github.com/rust-lang/crates.io-index" 3273 | checksum = "5aeea4303076558a00714b823f9ad67d58a3bbda1df83d8827d21193156e22f7" 3274 | dependencies = [ 3275 | "once_cell", 3276 | "valuable", 3277 | ] 3278 | 3279 | [[package]] 3280 | name = "tracing-log" 3281 | version = "0.1.3" 3282 | source = "registry+https://github.com/rust-lang/crates.io-index" 3283 | checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" 3284 | dependencies = [ 3285 | "lazy_static", 3286 | "log", 3287 | "tracing-core", 3288 | ] 3289 | 3290 | [[package]] 3291 | name = "tracing-subscriber" 3292 | version = "0.3.15" 3293 | source = "registry+https://github.com/rust-lang/crates.io-index" 3294 | checksum = "60db860322da191b40952ad9affe65ea23e7dd6a5c442c2c42865810c6ab8e6b" 3295 | dependencies = [ 3296 | "ansi_term", 3297 | "matchers", 3298 | "once_cell", 3299 | "regex", 3300 | "sharded-slab", 3301 | "smallvec", 3302 | "thread_local", 3303 | "tracing", 3304 | "tracing-core", 3305 | "tracing-log", 3306 | ] 3307 | 3308 | [[package]] 3309 | name = "treediff" 3310 | version = "3.0.2" 3311 | source = "registry+https://github.com/rust-lang/crates.io-index" 3312 | checksum = "761e8d5ad7ce14bb82b7e61ccc0ca961005a275a060b9644a2431aa11553c2ff" 3313 | dependencies = [ 3314 | "serde_json", 3315 | ] 3316 | 3317 | [[package]] 3318 | name = "typenum" 3319 | version = "1.15.0" 3320 | source = "registry+https://github.com/rust-lang/crates.io-index" 3321 | checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" 3322 | 3323 | [[package]] 3324 | name = "ucd-trie" 3325 | version = "0.1.4" 3326 | source = "registry+https://github.com/rust-lang/crates.io-index" 3327 | checksum = "89570599c4fe5585de2b388aab47e99f7fa4e9238a1399f707a02e356058141c" 3328 | 3329 | [[package]] 3330 | name = "unicode-bidi" 3331 | version = "0.3.8" 3332 | source = "registry+https://github.com/rust-lang/crates.io-index" 3333 | checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" 3334 | 3335 | [[package]] 3336 | name = "unicode-ident" 3337 | version = "1.0.3" 3338 | source = "registry+https://github.com/rust-lang/crates.io-index" 3339 | checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" 3340 | 3341 | [[package]] 3342 | name = "unicode-normalization" 3343 | version = "0.1.21" 3344 | source = "registry+https://github.com/rust-lang/crates.io-index" 3345 | checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6" 3346 | dependencies = [ 3347 | "tinyvec", 3348 | ] 3349 | 3350 | [[package]] 3351 | name = "unicode-segmentation" 3352 | version = "1.9.0" 3353 | source = "registry+https://github.com/rust-lang/crates.io-index" 3354 | checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" 3355 | 3356 | [[package]] 3357 | name = "untrusted" 3358 | version = "0.7.1" 3359 | source = "registry+https://github.com/rust-lang/crates.io-index" 3360 | checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" 3361 | 3362 | [[package]] 3363 | name = "url" 3364 | version = "2.2.2" 3365 | source = "registry+https://github.com/rust-lang/crates.io-index" 3366 | checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" 3367 | dependencies = [ 3368 | "form_urlencoded", 3369 | "idna", 3370 | "matches", 3371 | "percent-encoding", 3372 | "serde", 3373 | ] 3374 | 3375 | [[package]] 3376 | name = "utf-8" 3377 | version = "0.7.6" 3378 | source = "registry+https://github.com/rust-lang/crates.io-index" 3379 | checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 3380 | 3381 | [[package]] 3382 | name = "uuid" 3383 | version = "0.8.2" 3384 | source = "registry+https://github.com/rust-lang/crates.io-index" 3385 | checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" 3386 | 3387 | [[package]] 3388 | name = "uuid" 3389 | version = "1.1.2" 3390 | source = "registry+https://github.com/rust-lang/crates.io-index" 3391 | checksum = "dd6469f4314d5f1ffec476e05f17cc9a78bc7a27a6a857842170bdf8d6f98d2f" 3392 | dependencies = [ 3393 | "getrandom 0.2.7", 3394 | ] 3395 | 3396 | [[package]] 3397 | name = "valuable" 3398 | version = "0.1.0" 3399 | source = "registry+https://github.com/rust-lang/crates.io-index" 3400 | checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" 3401 | 3402 | [[package]] 3403 | name = "vcpkg" 3404 | version = "0.2.15" 3405 | source = "registry+https://github.com/rust-lang/crates.io-index" 3406 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 3407 | 3408 | [[package]] 3409 | name = "version-compare" 3410 | version = "0.0.11" 3411 | source = "registry+https://github.com/rust-lang/crates.io-index" 3412 | checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" 3413 | 3414 | [[package]] 3415 | name = "version-compare" 3416 | version = "0.1.0" 3417 | source = "registry+https://github.com/rust-lang/crates.io-index" 3418 | checksum = "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73" 3419 | 3420 | [[package]] 3421 | name = "version_check" 3422 | version = "0.9.4" 3423 | source = "registry+https://github.com/rust-lang/crates.io-index" 3424 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 3425 | 3426 | [[package]] 3427 | name = "vswhom" 3428 | version = "0.1.0" 3429 | source = "registry+https://github.com/rust-lang/crates.io-index" 3430 | checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" 3431 | dependencies = [ 3432 | "libc", 3433 | "vswhom-sys", 3434 | ] 3435 | 3436 | [[package]] 3437 | name = "vswhom-sys" 3438 | version = "0.1.1" 3439 | source = "registry+https://github.com/rust-lang/crates.io-index" 3440 | checksum = "22025f6d8eb903ebf920ea6933b70b1e495be37e2cb4099e62c80454aaf57c39" 3441 | dependencies = [ 3442 | "cc", 3443 | "libc", 3444 | ] 3445 | 3446 | [[package]] 3447 | name = "waker-fn" 3448 | version = "1.1.0" 3449 | source = "registry+https://github.com/rust-lang/crates.io-index" 3450 | checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" 3451 | 3452 | [[package]] 3453 | name = "walkdir" 3454 | version = "2.3.2" 3455 | source = "registry+https://github.com/rust-lang/crates.io-index" 3456 | checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" 3457 | dependencies = [ 3458 | "same-file", 3459 | "winapi", 3460 | "winapi-util", 3461 | ] 3462 | 3463 | [[package]] 3464 | name = "wasi" 3465 | version = "0.9.0+wasi-snapshot-preview1" 3466 | source = "registry+https://github.com/rust-lang/crates.io-index" 3467 | checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" 3468 | 3469 | [[package]] 3470 | name = "wasi" 3471 | version = "0.11.0+wasi-snapshot-preview1" 3472 | source = "registry+https://github.com/rust-lang/crates.io-index" 3473 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 3474 | 3475 | [[package]] 3476 | name = "wasm-bindgen" 3477 | version = "0.2.82" 3478 | source = "registry+https://github.com/rust-lang/crates.io-index" 3479 | checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d" 3480 | dependencies = [ 3481 | "cfg-if", 3482 | "wasm-bindgen-macro", 3483 | ] 3484 | 3485 | [[package]] 3486 | name = "wasm-bindgen-backend" 3487 | version = "0.2.82" 3488 | source = "registry+https://github.com/rust-lang/crates.io-index" 3489 | checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f" 3490 | dependencies = [ 3491 | "bumpalo", 3492 | "log", 3493 | "once_cell", 3494 | "proc-macro2", 3495 | "quote", 3496 | "syn", 3497 | "wasm-bindgen-shared", 3498 | ] 3499 | 3500 | [[package]] 3501 | name = "wasm-bindgen-futures" 3502 | version = "0.4.32" 3503 | source = "registry+https://github.com/rust-lang/crates.io-index" 3504 | checksum = "fa76fb221a1f8acddf5b54ace85912606980ad661ac7a503b4570ffd3a624dad" 3505 | dependencies = [ 3506 | "cfg-if", 3507 | "js-sys", 3508 | "wasm-bindgen", 3509 | "web-sys", 3510 | ] 3511 | 3512 | [[package]] 3513 | name = "wasm-bindgen-macro" 3514 | version = "0.2.82" 3515 | source = "registry+https://github.com/rust-lang/crates.io-index" 3516 | checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602" 3517 | dependencies = [ 3518 | "quote", 3519 | "wasm-bindgen-macro-support", 3520 | ] 3521 | 3522 | [[package]] 3523 | name = "wasm-bindgen-macro-support" 3524 | version = "0.2.82" 3525 | source = "registry+https://github.com/rust-lang/crates.io-index" 3526 | checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da" 3527 | dependencies = [ 3528 | "proc-macro2", 3529 | "quote", 3530 | "syn", 3531 | "wasm-bindgen-backend", 3532 | "wasm-bindgen-shared", 3533 | ] 3534 | 3535 | [[package]] 3536 | name = "wasm-bindgen-shared" 3537 | version = "0.2.82" 3538 | source = "registry+https://github.com/rust-lang/crates.io-index" 3539 | checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a" 3540 | 3541 | [[package]] 3542 | name = "web-sys" 3543 | version = "0.3.59" 3544 | source = "registry+https://github.com/rust-lang/crates.io-index" 3545 | checksum = "ed055ab27f941423197eb86b2035720b1a3ce40504df082cac2ecc6ed73335a1" 3546 | dependencies = [ 3547 | "js-sys", 3548 | "wasm-bindgen", 3549 | ] 3550 | 3551 | [[package]] 3552 | name = "webkit2gtk" 3553 | version = "0.18.0" 3554 | source = "registry+https://github.com/rust-lang/crates.io-index" 3555 | checksum = "29952969fb5e10fe834a52eb29ad0814ccdfd8387159b0933edf1344a1c9cdcc" 3556 | dependencies = [ 3557 | "bitflags", 3558 | "cairo-rs", 3559 | "gdk", 3560 | "gdk-sys", 3561 | "gio", 3562 | "gio-sys", 3563 | "glib", 3564 | "glib-sys", 3565 | "gobject-sys", 3566 | "gtk", 3567 | "gtk-sys", 3568 | "javascriptcore-rs", 3569 | "libc", 3570 | "once_cell", 3571 | "soup2", 3572 | "webkit2gtk-sys", 3573 | ] 3574 | 3575 | [[package]] 3576 | name = "webkit2gtk-sys" 3577 | version = "0.18.0" 3578 | source = "registry+https://github.com/rust-lang/crates.io-index" 3579 | checksum = "4d76ca6ecc47aeba01ec61e480139dda143796abcae6f83bcddf50d6b5b1dcf3" 3580 | dependencies = [ 3581 | "atk-sys", 3582 | "bitflags", 3583 | "cairo-sys-rs", 3584 | "gdk-pixbuf-sys", 3585 | "gdk-sys", 3586 | "gio-sys", 3587 | "glib-sys", 3588 | "gobject-sys", 3589 | "gtk-sys", 3590 | "javascriptcore-rs-sys", 3591 | "libc", 3592 | "pango-sys", 3593 | "pkg-config", 3594 | "soup2-sys", 3595 | "system-deps 6.0.2", 3596 | ] 3597 | 3598 | [[package]] 3599 | name = "webpki" 3600 | version = "0.22.0" 3601 | source = "registry+https://github.com/rust-lang/crates.io-index" 3602 | checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" 3603 | dependencies = [ 3604 | "ring", 3605 | "untrusted", 3606 | ] 3607 | 3608 | [[package]] 3609 | name = "webview2-com" 3610 | version = "0.16.0" 3611 | source = "registry+https://github.com/rust-lang/crates.io-index" 3612 | checksum = "a489a9420acabb3c2ed0434b6f71f6b56b9485ec32665a28dec1ee186d716e0f" 3613 | dependencies = [ 3614 | "webview2-com-macros", 3615 | "webview2-com-sys", 3616 | "windows 0.37.0", 3617 | "windows-implement", 3618 | ] 3619 | 3620 | [[package]] 3621 | name = "webview2-com-macros" 3622 | version = "0.6.0" 3623 | source = "registry+https://github.com/rust-lang/crates.io-index" 3624 | checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" 3625 | dependencies = [ 3626 | "proc-macro2", 3627 | "quote", 3628 | "syn", 3629 | ] 3630 | 3631 | [[package]] 3632 | name = "webview2-com-sys" 3633 | version = "0.16.0" 3634 | source = "registry+https://github.com/rust-lang/crates.io-index" 3635 | checksum = "0258c53ee9adc0a4f8ba1c8c317588f7a58c7048a55b621d469ba75ab3709ca1" 3636 | dependencies = [ 3637 | "regex", 3638 | "serde", 3639 | "serde_json", 3640 | "thiserror", 3641 | "windows 0.37.0", 3642 | "windows-bindgen", 3643 | ] 3644 | 3645 | [[package]] 3646 | name = "wildmatch" 3647 | version = "2.1.1" 3648 | source = "registry+https://github.com/rust-lang/crates.io-index" 3649 | checksum = "ee583bdc5ff1cf9db20e9db5bb3ff4c3089a8f6b8b31aff265c9aba85812db86" 3650 | 3651 | [[package]] 3652 | name = "winapi" 3653 | version = "0.3.9" 3654 | source = "registry+https://github.com/rust-lang/crates.io-index" 3655 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 3656 | dependencies = [ 3657 | "winapi-i686-pc-windows-gnu", 3658 | "winapi-x86_64-pc-windows-gnu", 3659 | ] 3660 | 3661 | [[package]] 3662 | name = "winapi-i686-pc-windows-gnu" 3663 | version = "0.4.0" 3664 | source = "registry+https://github.com/rust-lang/crates.io-index" 3665 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 3666 | 3667 | [[package]] 3668 | name = "winapi-util" 3669 | version = "0.1.5" 3670 | source = "registry+https://github.com/rust-lang/crates.io-index" 3671 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 3672 | dependencies = [ 3673 | "winapi", 3674 | ] 3675 | 3676 | [[package]] 3677 | name = "winapi-x86_64-pc-windows-gnu" 3678 | version = "0.4.0" 3679 | source = "registry+https://github.com/rust-lang/crates.io-index" 3680 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 3681 | 3682 | [[package]] 3683 | name = "windows" 3684 | version = "0.24.0" 3685 | source = "registry+https://github.com/rust-lang/crates.io-index" 3686 | checksum = "a9f39345ae0c8ab072c0ac7fe8a8b411636aa34f89be19ddd0d9226544f13944" 3687 | dependencies = [ 3688 | "windows_i686_gnu 0.24.0", 3689 | "windows_i686_msvc 0.24.0", 3690 | "windows_x86_64_gnu 0.24.0", 3691 | "windows_x86_64_msvc 0.24.0", 3692 | ] 3693 | 3694 | [[package]] 3695 | name = "windows" 3696 | version = "0.32.0" 3697 | source = "registry+https://github.com/rust-lang/crates.io-index" 3698 | checksum = "fbedf6db9096bc2364adce0ae0aa636dcd89f3c3f2cd67947062aaf0ca2a10ec" 3699 | dependencies = [ 3700 | "windows_aarch64_msvc 0.32.0", 3701 | "windows_i686_gnu 0.32.0", 3702 | "windows_i686_msvc 0.32.0", 3703 | "windows_x86_64_gnu 0.32.0", 3704 | "windows_x86_64_msvc 0.32.0", 3705 | ] 3706 | 3707 | [[package]] 3708 | name = "windows" 3709 | version = "0.37.0" 3710 | source = "registry+https://github.com/rust-lang/crates.io-index" 3711 | checksum = "57b543186b344cc61c85b5aab0d2e3adf4e0f99bc076eff9aa5927bcc0b8a647" 3712 | dependencies = [ 3713 | "windows-implement", 3714 | "windows_aarch64_msvc 0.37.0", 3715 | "windows_i686_gnu 0.37.0", 3716 | "windows_i686_msvc 0.37.0", 3717 | "windows_x86_64_gnu 0.37.0", 3718 | "windows_x86_64_msvc 0.37.0", 3719 | ] 3720 | 3721 | [[package]] 3722 | name = "windows-bindgen" 3723 | version = "0.37.0" 3724 | source = "registry+https://github.com/rust-lang/crates.io-index" 3725 | checksum = "0bed7be31ade0af08fec9b5343e9edcc005d22b1f11859b8a59b24797f5858e8" 3726 | dependencies = [ 3727 | "windows-metadata", 3728 | "windows-tokens", 3729 | ] 3730 | 3731 | [[package]] 3732 | name = "windows-implement" 3733 | version = "0.37.0" 3734 | source = "registry+https://github.com/rust-lang/crates.io-index" 3735 | checksum = "67a1062e555f7d9d66fd1130ed4f7c6ec41a47529ee0850cd0e926d95b26bb14" 3736 | dependencies = [ 3737 | "syn", 3738 | "windows-tokens", 3739 | ] 3740 | 3741 | [[package]] 3742 | name = "windows-metadata" 3743 | version = "0.37.0" 3744 | source = "registry+https://github.com/rust-lang/crates.io-index" 3745 | checksum = "4f33f2b90a6664e369c41ab5ff262d06f048fc9685d9bf8a0e99a47750bb0463" 3746 | 3747 | [[package]] 3748 | name = "windows-sys" 3749 | version = "0.36.1" 3750 | source = "registry+https://github.com/rust-lang/crates.io-index" 3751 | checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" 3752 | dependencies = [ 3753 | "windows_aarch64_msvc 0.36.1", 3754 | "windows_i686_gnu 0.36.1", 3755 | "windows_i686_msvc 0.36.1", 3756 | "windows_x86_64_gnu 0.36.1", 3757 | "windows_x86_64_msvc 0.36.1", 3758 | ] 3759 | 3760 | [[package]] 3761 | name = "windows-tokens" 3762 | version = "0.37.0" 3763 | source = "registry+https://github.com/rust-lang/crates.io-index" 3764 | checksum = "3263d25f1170419995b78ff10c06b949e8a986c35c208dc24333c64753a87169" 3765 | 3766 | [[package]] 3767 | name = "windows_aarch64_msvc" 3768 | version = "0.32.0" 3769 | source = "registry+https://github.com/rust-lang/crates.io-index" 3770 | checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5" 3771 | 3772 | [[package]] 3773 | name = "windows_aarch64_msvc" 3774 | version = "0.36.1" 3775 | source = "registry+https://github.com/rust-lang/crates.io-index" 3776 | checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" 3777 | 3778 | [[package]] 3779 | name = "windows_aarch64_msvc" 3780 | version = "0.37.0" 3781 | source = "registry+https://github.com/rust-lang/crates.io-index" 3782 | checksum = "2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a" 3783 | 3784 | [[package]] 3785 | name = "windows_i686_gnu" 3786 | version = "0.24.0" 3787 | source = "registry+https://github.com/rust-lang/crates.io-index" 3788 | checksum = "c0866510a3eca9aed73a077490bbbf03e5eaac4e1fd70849d89539e5830501fd" 3789 | 3790 | [[package]] 3791 | name = "windows_i686_gnu" 3792 | version = "0.32.0" 3793 | source = "registry+https://github.com/rust-lang/crates.io-index" 3794 | checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615" 3795 | 3796 | [[package]] 3797 | name = "windows_i686_gnu" 3798 | version = "0.36.1" 3799 | source = "registry+https://github.com/rust-lang/crates.io-index" 3800 | checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" 3801 | 3802 | [[package]] 3803 | name = "windows_i686_gnu" 3804 | version = "0.37.0" 3805 | source = "registry+https://github.com/rust-lang/crates.io-index" 3806 | checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1" 3807 | 3808 | [[package]] 3809 | name = "windows_i686_msvc" 3810 | version = "0.24.0" 3811 | source = "registry+https://github.com/rust-lang/crates.io-index" 3812 | checksum = "bf0ffed56b7e9369a29078d2ab3aaeceea48eb58999d2cff3aa2494a275b95c6" 3813 | 3814 | [[package]] 3815 | name = "windows_i686_msvc" 3816 | version = "0.32.0" 3817 | source = "registry+https://github.com/rust-lang/crates.io-index" 3818 | checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172" 3819 | 3820 | [[package]] 3821 | name = "windows_i686_msvc" 3822 | version = "0.36.1" 3823 | source = "registry+https://github.com/rust-lang/crates.io-index" 3824 | checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" 3825 | 3826 | [[package]] 3827 | name = "windows_i686_msvc" 3828 | version = "0.37.0" 3829 | source = "registry+https://github.com/rust-lang/crates.io-index" 3830 | checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c" 3831 | 3832 | [[package]] 3833 | name = "windows_x86_64_gnu" 3834 | version = "0.24.0" 3835 | source = "registry+https://github.com/rust-lang/crates.io-index" 3836 | checksum = "384a173630588044205a2993b6864a2f56e5a8c1e7668c07b93ec18cf4888dc4" 3837 | 3838 | [[package]] 3839 | name = "windows_x86_64_gnu" 3840 | version = "0.32.0" 3841 | source = "registry+https://github.com/rust-lang/crates.io-index" 3842 | checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc" 3843 | 3844 | [[package]] 3845 | name = "windows_x86_64_gnu" 3846 | version = "0.36.1" 3847 | source = "registry+https://github.com/rust-lang/crates.io-index" 3848 | checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" 3849 | 3850 | [[package]] 3851 | name = "windows_x86_64_gnu" 3852 | version = "0.37.0" 3853 | source = "registry+https://github.com/rust-lang/crates.io-index" 3854 | checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d" 3855 | 3856 | [[package]] 3857 | name = "windows_x86_64_msvc" 3858 | version = "0.24.0" 3859 | source = "registry+https://github.com/rust-lang/crates.io-index" 3860 | checksum = "9bd8f062d8ca5446358159d79a90be12c543b3a965c847c8f3eedf14b321d399" 3861 | 3862 | [[package]] 3863 | name = "windows_x86_64_msvc" 3864 | version = "0.32.0" 3865 | source = "registry+https://github.com/rust-lang/crates.io-index" 3866 | checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" 3867 | 3868 | [[package]] 3869 | name = "windows_x86_64_msvc" 3870 | version = "0.36.1" 3871 | source = "registry+https://github.com/rust-lang/crates.io-index" 3872 | checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" 3873 | 3874 | [[package]] 3875 | name = "windows_x86_64_msvc" 3876 | version = "0.37.0" 3877 | source = "registry+https://github.com/rust-lang/crates.io-index" 3878 | checksum = "f4dd6dc7df2d84cf7b33822ed5b86318fb1781948e9663bacd047fc9dd52259d" 3879 | 3880 | [[package]] 3881 | name = "winreg" 3882 | version = "0.10.1" 3883 | source = "registry+https://github.com/rust-lang/crates.io-index" 3884 | checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" 3885 | dependencies = [ 3886 | "winapi", 3887 | ] 3888 | 3889 | [[package]] 3890 | name = "winres" 3891 | version = "0.1.12" 3892 | source = "registry+https://github.com/rust-lang/crates.io-index" 3893 | checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c" 3894 | dependencies = [ 3895 | "toml", 3896 | ] 3897 | 3898 | [[package]] 3899 | name = "winrt-notification" 3900 | version = "0.5.1" 3901 | source = "registry+https://github.com/rust-lang/crates.io-index" 3902 | checksum = "007a0353840b23e0c6dc73e5b962ff58ed7f6bc9ceff3ce7fe6fbad8d496edf4" 3903 | dependencies = [ 3904 | "strum", 3905 | "windows 0.24.0", 3906 | "xml-rs", 3907 | ] 3908 | 3909 | [[package]] 3910 | name = "wry" 3911 | version = "0.19.0" 3912 | source = "registry+https://github.com/rust-lang/crates.io-index" 3913 | checksum = "ce19dddbd3ce01dc8f14eb6d4c8f914123bf8379aaa838f6da4f981ff7104a3f" 3914 | dependencies = [ 3915 | "block", 3916 | "cocoa", 3917 | "core-graphics", 3918 | "gdk", 3919 | "gio", 3920 | "glib", 3921 | "gtk", 3922 | "http", 3923 | "jni 0.18.0", 3924 | "libc", 3925 | "log", 3926 | "objc", 3927 | "objc_id", 3928 | "once_cell", 3929 | "serde", 3930 | "serde_json", 3931 | "tao", 3932 | "thiserror", 3933 | "url", 3934 | "webkit2gtk", 3935 | "webkit2gtk-sys", 3936 | "webview2-com", 3937 | "windows 0.37.0", 3938 | "windows-implement", 3939 | ] 3940 | 3941 | [[package]] 3942 | name = "x11" 3943 | version = "2.19.1" 3944 | source = "registry+https://github.com/rust-lang/crates.io-index" 3945 | checksum = "6dd0565fa8bfba8c5efe02725b14dff114c866724eff2cfd44d76cea74bcd87a" 3946 | dependencies = [ 3947 | "libc", 3948 | "pkg-config", 3949 | ] 3950 | 3951 | [[package]] 3952 | name = "x11-dl" 3953 | version = "2.19.1" 3954 | source = "registry+https://github.com/rust-lang/crates.io-index" 3955 | checksum = "ea26926b4ce81a6f5d9d0f3a0bc401e5a37c6ae14a1bfaa8ff6099ca80038c59" 3956 | dependencies = [ 3957 | "lazy_static", 3958 | "libc", 3959 | "pkg-config", 3960 | ] 3961 | 3962 | [[package]] 3963 | name = "xattr" 3964 | version = "0.2.3" 3965 | source = "registry+https://github.com/rust-lang/crates.io-index" 3966 | checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" 3967 | dependencies = [ 3968 | "libc", 3969 | ] 3970 | 3971 | [[package]] 3972 | name = "xml-rs" 3973 | version = "0.8.4" 3974 | source = "registry+https://github.com/rust-lang/crates.io-index" 3975 | checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" 3976 | --------------------------------------------------------------------------------