├── .github
├── dependabot.yml
└── workflows
│ ├── ci.yml
│ ├── dependabot-automerge.yml
│ └── release.yml
├── .gitignore
├── .vscode
└── extensions.json
├── LICENSE
├── README.md
├── bun.lockb
├── index.html
├── package.json
├── src-tauri
├── .gitignore
├── Cargo.lock
├── Cargo.toml
├── build.rs
├── icons
│ ├── 128x128.png
│ ├── 128x128@2x.png
│ ├── 32x32.png
│ ├── Square107x107Logo.png
│ ├── Square142x142Logo.png
│ ├── Square150x150Logo.png
│ ├── Square284x284Logo.png
│ ├── Square30x30Logo.png
│ ├── Square310x310Logo.png
│ ├── Square44x44Logo.png
│ ├── Square71x71Logo.png
│ ├── Square89x89Logo.png
│ ├── StoreLogo.png
│ ├── icon.icns
│ ├── icon.ico
│ ├── icon.png
│ └── icon.svg
├── src
│ └── main.rs
└── tauri.conf.json
├── src
├── App.svelte
├── lib
│ ├── audioRecorder.ts
│ ├── homeAssistant.ts
│ └── recorder.worklet.js
├── main.ts
├── pages
│ ├── Home.svelte
│ └── Settings.svelte
├── styles.css
├── types
│ ├── assistResponse.ts
│ ├── homeAssistantAssist.ts
│ └── settings.ts
└── vite-env.d.ts
├── svelte.config.js
├── tsconfig.json
├── tsconfig.node.json
└── vite.config.ts
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | ---
2 | version: 2
3 | updates:
4 | - package-ecosystem: "cargo"
5 | directory: "/src-tauri"
6 | schedule:
7 | interval: "daily"
8 | - package-ecosystem: "github-actions"
9 | directory: "/"
10 | schedule:
11 | interval: "daily"
12 | - package-ecosystem: "npm"
13 | directory: "/"
14 | schedule:
15 | interval: "daily"
16 |
--------------------------------------------------------------------------------
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | ---
2 | name: "CI"
3 |
4 | on:
5 | push:
6 | branches:
7 | - "master"
8 | pull_request:
9 | branches:
10 | - "master"
11 | workflow_dispatch:
12 |
13 | jobs:
14 | build:
15 | strategy:
16 | fail-fast: false
17 | matrix:
18 | platform: [macos-latest, ubuntu-latest, windows-latest]
19 | runs-on: ${{ matrix.platform }}
20 | steps:
21 | - name: Checkout repository
22 | uses: actions/checkout@v4.1.7
23 | - name: Install dependencies (ubuntu only)
24 | if: matrix.platform == 'ubuntu-latest'
25 | run: |
26 | sudo apt update
27 | sudo apt install \
28 | libwebkit2gtk-4.0-dev \
29 | build-essential \
30 | curl \
31 | wget \
32 | file \
33 | libssl-dev \
34 | libgtk-3-dev \
35 | libayatana-appindicator3-dev \
36 | librsvg2-dev
37 | - name: Rust setup
38 | uses: dtolnay/rust-toolchain@stable
39 | - name: Rust cache
40 | uses: swatinem/rust-cache@v2.7.3
41 | with:
42 | workspaces: "./src-tauri -> target"
43 | - name: Setup Bun
44 | uses: oven-sh/setup-bun@v2
45 | with:
46 | bun-version: latest
47 | no-cache: false
48 | - name: Install frontend dependencies
49 | run: bun install
50 | - name: Build the app
51 | uses: tauri-apps/tauri-action@v0.5.6
52 | - name: Publish artifacts
53 | uses: actions/upload-artifact@v4.3.3
54 | with:
55 | name: tauri-app-${{ matrix.platform }}
56 | path: |
57 | src-tauri/target/release/bundle
58 |
--------------------------------------------------------------------------------
/.github/workflows/dependabot-automerge.yml:
--------------------------------------------------------------------------------
1 | ---
2 | name: "Dependabot - Auto-merge"
3 |
4 | # yamllint disable-line rule:truthy
5 | on:
6 | pull_request_target:
7 |
8 | permissions:
9 | pull-requests: write
10 | contents: write
11 |
12 | jobs:
13 | dependabot-automerge:
14 | uses: timmo001/workflows/.github/workflows/dependabot-automerge-any.yml@master
15 |
--------------------------------------------------------------------------------
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 | ---
2 | name: "Release"
3 |
4 | on:
5 | push:
6 | tags:
7 | - "*"
8 | workflow_dispatch:
9 |
10 | jobs:
11 | release:
12 | permissions:
13 | contents: write
14 | strategy:
15 | fail-fast: false
16 | matrix:
17 | platform: [macos-latest, ubuntu-latest, windows-latest]
18 | runs-on: ${{ matrix.platform }}
19 | steps:
20 | - name: Checkout repository
21 | uses: actions/checkout@v4.1.7
22 | - name: Install dependencies (ubuntu only)
23 | if: matrix.platform == 'ubuntu-latest'
24 | run: |
25 | sudo apt update
26 | sudo apt install \
27 | libwebkit2gtk-4.0-dev \
28 | build-essential \
29 | curl \
30 | wget \
31 | file \
32 | libssl-dev \
33 | libgtk-3-dev \
34 | libayatana-appindicator3-dev \
35 | librsvg2-dev
36 | - name: Rust setup
37 | uses: dtolnay/rust-toolchain@stable
38 | - name: Rust cache
39 | uses: swatinem/rust-cache@v2.7.3
40 | with:
41 | workspaces: "./src-tauri -> target"
42 | - name: Setup Bun
43 | uses: oven-sh/setup-bun@v2
44 | with:
45 | bun-version: latest
46 | no-cache: false
47 | - name: Install frontend dependencies
48 | run: bun install
49 | - name: Build the app
50 | uses: tauri-apps/tauri-action@v0.5.6
51 | env:
52 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
53 | with:
54 | tagName: ${{ github.ref_name }} # This only works if your workflow triggers on new tags.
55 | releaseName: "App Name v__VERSION__" # tauri-action replaces \_\_VERSION\_\_ with the app version.
56 | releaseBody: "See the assets to download and install this version."
57 | releaseDraft: true
58 | prerelease: false
59 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": [
3 | "svelte.svelte-vscode",
4 | "tauri-apps.tauri-vscode",
5 | "rust-lang.rust-analyzer"
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright [yyyy] [name of copyright owner]
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Home Assistant Assist - Desktop
2 |
3 | This is a desktop app for [Home Assistant](https://www.home-assistant.io) Assist. It is built using [Tauri](https://tauri.app) and [Svelte](https://svelte.dev).
4 |
5 | Compatible with Windows, MacOS, and Linux.
6 |
7 | You can find out more about Home Assistant Assist [here](https://www.home-assistant.io/voice_control/).
8 |
9 | [Community forum post](https://community.home-assistant.io/t/home-assistant-assist-desktop/656737?u=timmo001)
10 |
11 | [Discuss project](https://github.com/timmo001/home-assistant-assist-desktop/discussions)
12 |
13 | [Report issues](https://github.com/timmo001/home-assistant-assist-desktop/issues)
14 |
15 | ## Features
16 |
17 | - Speech to text
18 | - Text to speech
19 | - Assist pipeline picker via Assist icon in main window
20 | - Toggle with keyboard shortcuts
21 | - `Ctrl + Alt + A` to toggle main window
22 | - `Alt + Shift + A` to trigger voice pipeline
23 | - System tray icon
24 | - Double click to toggle main window
25 |
26 | 
27 |
28 | 
29 |
30 | ## Installation
31 |
32 | You can download the latest release from the [releases](https://github.com/timmo001/home-assistant-assist-desktop/releases) page.
33 |
34 | ### Setup
35 |
36 | When you first run the app, you will be prompted to enter your Home Assistant URL and Long Lived Access Token. These are used to connect to your Home Assistant instance.
37 |
38 | > Your Home Assistant URL must be https due to [browser security restrictions](https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content).
39 |
40 | ## Development
41 |
42 | ### Prerequisites
43 |
44 | - [Node.js](https://nodejs.org/en/)
45 | - [Yarn](https://yarnpkg.com/)
46 | - [Rust](https://www.rust-lang.org/)
47 |
48 | ### Setup
49 |
50 | ```bash
51 | yarn install
52 | ```
53 |
54 | ### Running
55 |
56 | ```bash
57 | yarn tauri dev
58 | ```
59 |
60 | ### Building
61 |
62 | ```bash
63 | yarn tauri build
64 | ```
65 |
66 | ## Attributions
67 |
68 | A lot of the assist code is based on the Home Assistant frontend code. Here are some of the files which were used:
69 |
70 | https://github.com/home-assistant/frontend/blob/dev/src/dialogs/voice-command-dialog/ha-voice-command-dialog.ts
71 |
72 | https://github.com/home-assistant/frontend/blob/dev/src/util/audio-recorder.ts
73 |
74 | https://github.com/home-assistant/frontend/blob/dev/src/data/conversation.ts
75 |
--------------------------------------------------------------------------------
/bun.lockb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timmo001/home-assistant-assist-desktop/82ae0add1f676a612fca9a49f315b140160d6157/bun.lockb
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Home Assistant Assist Desktop
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "home-assistant-assist-desktop",
3 | "private": true,
4 | "version": "1.4.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "vite build",
9 | "preview": "vite preview",
10 | "check": "svelte-check --tsconfig ./tsconfig.json",
11 | "tauri": "tauri"
12 | },
13 | "dependencies": {
14 | "@tauri-apps/api": "1.5.6",
15 | "home-assistant-js-websocket": "9.4.0",
16 | "svelte-routing": "2.13.0",
17 | "tauri-plugin-autostart-api": "https://github.com/tauri-apps/tauri-plugin-autostart#v1",
18 | "tauri-plugin-log-api": "https://github.com/tauri-apps/tauri-plugin-log#v1"
19 | },
20 | "devDependencies": {
21 | "@sveltejs/vite-plugin-svelte": "3.1.1",
22 | "@tauri-apps/cli": "1.5.14",
23 | "@tsconfig/svelte": "5.0.4",
24 | "svelte": "4.2.19",
25 | "svelte-check": "3.8.4",
26 | "tslib": "2.6.3",
27 | "typescript": "5.5.2",
28 | "vite": "5.4.12"
29 | },
30 | "packageManager": "yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447"
31 | }
32 |
--------------------------------------------------------------------------------
/src-tauri/.gitignore:
--------------------------------------------------------------------------------
1 | # Generated by Cargo
2 | # will have compiled files and executables
3 | /target/
4 |
5 |
--------------------------------------------------------------------------------
/src-tauri/Cargo.lock:
--------------------------------------------------------------------------------
1 | # This file is automatically @generated by Cargo.
2 | # It is not intended for manual editing.
3 | version = 4
4 |
5 | [[package]]
6 | name = "addr2line"
7 | version = "0.21.0"
8 | source = "registry+https://github.com/rust-lang/crates.io-index"
9 | checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
10 | dependencies = [
11 | "gimli",
12 | ]
13 |
14 | [[package]]
15 | name = "adler"
16 | version = "1.0.2"
17 | source = "registry+https://github.com/rust-lang/crates.io-index"
18 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
19 |
20 | [[package]]
21 | name = "ahash"
22 | version = "0.7.8"
23 | source = "registry+https://github.com/rust-lang/crates.io-index"
24 | checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9"
25 | dependencies = [
26 | "getrandom 0.2.14",
27 | "once_cell",
28 | "version_check",
29 | ]
30 |
31 | [[package]]
32 | name = "aho-corasick"
33 | version = "1.1.3"
34 | source = "registry+https://github.com/rust-lang/crates.io-index"
35 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
36 | dependencies = [
37 | "memchr",
38 | ]
39 |
40 | [[package]]
41 | name = "alloc-no-stdlib"
42 | version = "2.0.4"
43 | source = "registry+https://github.com/rust-lang/crates.io-index"
44 | checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
45 |
46 | [[package]]
47 | name = "alloc-stdlib"
48 | version = "0.2.2"
49 | source = "registry+https://github.com/rust-lang/crates.io-index"
50 | checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
51 | dependencies = [
52 | "alloc-no-stdlib",
53 | ]
54 |
55 | [[package]]
56 | name = "android-tzdata"
57 | version = "0.1.1"
58 | source = "registry+https://github.com/rust-lang/crates.io-index"
59 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
60 |
61 | [[package]]
62 | name = "android_system_properties"
63 | version = "0.1.5"
64 | source = "registry+https://github.com/rust-lang/crates.io-index"
65 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
66 | dependencies = [
67 | "libc",
68 | ]
69 |
70 | [[package]]
71 | name = "anyhow"
72 | version = "1.0.82"
73 | source = "registry+https://github.com/rust-lang/crates.io-index"
74 | checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519"
75 |
76 | [[package]]
77 | name = "arrayvec"
78 | version = "0.7.4"
79 | source = "registry+https://github.com/rust-lang/crates.io-index"
80 | checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
81 |
82 | [[package]]
83 | name = "atk"
84 | version = "0.15.1"
85 | source = "registry+https://github.com/rust-lang/crates.io-index"
86 | checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd"
87 | dependencies = [
88 | "atk-sys",
89 | "bitflags 1.3.2",
90 | "glib",
91 | "libc",
92 | ]
93 |
94 | [[package]]
95 | name = "atk-sys"
96 | version = "0.15.1"
97 | source = "registry+https://github.com/rust-lang/crates.io-index"
98 | checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6"
99 | dependencies = [
100 | "glib-sys",
101 | "gobject-sys",
102 | "libc",
103 | "system-deps 6.2.2",
104 | ]
105 |
106 | [[package]]
107 | name = "auto-launch"
108 | version = "0.5.0"
109 | source = "registry+https://github.com/rust-lang/crates.io-index"
110 | checksum = "1f012b8cc0c850f34117ec8252a44418f2e34a2cf501de89e29b241ae5f79471"
111 | dependencies = [
112 | "dirs 4.0.0",
113 | "thiserror",
114 | "winreg 0.10.1",
115 | ]
116 |
117 | [[package]]
118 | name = "autocfg"
119 | version = "1.2.0"
120 | source = "registry+https://github.com/rust-lang/crates.io-index"
121 | checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80"
122 |
123 | [[package]]
124 | name = "backtrace"
125 | version = "0.3.71"
126 | source = "registry+https://github.com/rust-lang/crates.io-index"
127 | checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d"
128 | dependencies = [
129 | "addr2line",
130 | "cc",
131 | "cfg-if",
132 | "libc",
133 | "miniz_oxide",
134 | "object",
135 | "rustc-demangle",
136 | ]
137 |
138 | [[package]]
139 | name = "base64"
140 | version = "0.13.1"
141 | source = "registry+https://github.com/rust-lang/crates.io-index"
142 | checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
143 |
144 | [[package]]
145 | name = "base64"
146 | version = "0.21.7"
147 | source = "registry+https://github.com/rust-lang/crates.io-index"
148 | checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
149 |
150 | [[package]]
151 | name = "base64"
152 | version = "0.22.0"
153 | source = "registry+https://github.com/rust-lang/crates.io-index"
154 | checksum = "9475866fec1451be56a3c2400fd081ff546538961565ccb5b7142cbd22bc7a51"
155 |
156 | [[package]]
157 | name = "bitflags"
158 | version = "1.3.2"
159 | source = "registry+https://github.com/rust-lang/crates.io-index"
160 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
161 |
162 | [[package]]
163 | name = "bitflags"
164 | version = "2.5.0"
165 | source = "registry+https://github.com/rust-lang/crates.io-index"
166 | checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"
167 | dependencies = [
168 | "serde",
169 | ]
170 |
171 | [[package]]
172 | name = "bitvec"
173 | version = "1.0.1"
174 | source = "registry+https://github.com/rust-lang/crates.io-index"
175 | checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
176 | dependencies = [
177 | "funty",
178 | "radium",
179 | "tap",
180 | "wyz",
181 | ]
182 |
183 | [[package]]
184 | name = "block"
185 | version = "0.1.6"
186 | source = "registry+https://github.com/rust-lang/crates.io-index"
187 | checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
188 |
189 | [[package]]
190 | name = "block-buffer"
191 | version = "0.10.4"
192 | source = "registry+https://github.com/rust-lang/crates.io-index"
193 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
194 | dependencies = [
195 | "generic-array",
196 | ]
197 |
198 | [[package]]
199 | name = "borsh"
200 | version = "1.4.0"
201 | source = "registry+https://github.com/rust-lang/crates.io-index"
202 | checksum = "0901fc8eb0aca4c83be0106d6f2db17d86a08dfc2c25f0e84464bf381158add6"
203 | dependencies = [
204 | "borsh-derive",
205 | "cfg_aliases",
206 | ]
207 |
208 | [[package]]
209 | name = "borsh-derive"
210 | version = "1.4.0"
211 | source = "registry+https://github.com/rust-lang/crates.io-index"
212 | checksum = "51670c3aa053938b0ee3bd67c3817e471e626151131b934038e83c5bf8de48f5"
213 | dependencies = [
214 | "once_cell",
215 | "proc-macro-crate 3.1.0",
216 | "proc-macro2",
217 | "quote",
218 | "syn 2.0.60",
219 | "syn_derive",
220 | ]
221 |
222 | [[package]]
223 | name = "brotli"
224 | version = "3.5.0"
225 | source = "registry+https://github.com/rust-lang/crates.io-index"
226 | checksum = "d640d25bc63c50fb1f0b545ffd80207d2e10a4c965530809b40ba3386825c391"
227 | dependencies = [
228 | "alloc-no-stdlib",
229 | "alloc-stdlib",
230 | "brotli-decompressor",
231 | ]
232 |
233 | [[package]]
234 | name = "brotli-decompressor"
235 | version = "2.5.1"
236 | source = "registry+https://github.com/rust-lang/crates.io-index"
237 | checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f"
238 | dependencies = [
239 | "alloc-no-stdlib",
240 | "alloc-stdlib",
241 | ]
242 |
243 | [[package]]
244 | name = "bstr"
245 | version = "1.9.1"
246 | source = "registry+https://github.com/rust-lang/crates.io-index"
247 | checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706"
248 | dependencies = [
249 | "memchr",
250 | "regex-automata 0.4.6",
251 | "serde",
252 | ]
253 |
254 | [[package]]
255 | name = "bumpalo"
256 | version = "3.16.0"
257 | source = "registry+https://github.com/rust-lang/crates.io-index"
258 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
259 |
260 | [[package]]
261 | name = "byte-unit"
262 | version = "5.1.4"
263 | source = "registry+https://github.com/rust-lang/crates.io-index"
264 | checksum = "33ac19bdf0b2665407c39d82dbc937e951e7e2001609f0fb32edd0af45a2d63e"
265 | dependencies = [
266 | "rust_decimal",
267 | "serde",
268 | "utf8-width",
269 | ]
270 |
271 | [[package]]
272 | name = "bytecheck"
273 | version = "0.6.12"
274 | source = "registry+https://github.com/rust-lang/crates.io-index"
275 | checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2"
276 | dependencies = [
277 | "bytecheck_derive",
278 | "ptr_meta",
279 | "simdutf8",
280 | ]
281 |
282 | [[package]]
283 | name = "bytecheck_derive"
284 | version = "0.6.12"
285 | source = "registry+https://github.com/rust-lang/crates.io-index"
286 | checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659"
287 | dependencies = [
288 | "proc-macro2",
289 | "quote",
290 | "syn 1.0.109",
291 | ]
292 |
293 | [[package]]
294 | name = "bytemuck"
295 | version = "1.15.0"
296 | source = "registry+https://github.com/rust-lang/crates.io-index"
297 | checksum = "5d6d68c57235a3a081186990eca2867354726650f42f7516ca50c28d6281fd15"
298 |
299 | [[package]]
300 | name = "byteorder"
301 | version = "1.5.0"
302 | source = "registry+https://github.com/rust-lang/crates.io-index"
303 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
304 |
305 | [[package]]
306 | name = "bytes"
307 | version = "1.6.0"
308 | source = "registry+https://github.com/rust-lang/crates.io-index"
309 | checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9"
310 |
311 | [[package]]
312 | name = "cairo-rs"
313 | version = "0.15.12"
314 | source = "registry+https://github.com/rust-lang/crates.io-index"
315 | checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc"
316 | dependencies = [
317 | "bitflags 1.3.2",
318 | "cairo-sys-rs",
319 | "glib",
320 | "libc",
321 | "thiserror",
322 | ]
323 |
324 | [[package]]
325 | name = "cairo-sys-rs"
326 | version = "0.15.1"
327 | source = "registry+https://github.com/rust-lang/crates.io-index"
328 | checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8"
329 | dependencies = [
330 | "glib-sys",
331 | "libc",
332 | "system-deps 6.2.2",
333 | ]
334 |
335 | [[package]]
336 | name = "cargo_toml"
337 | version = "0.15.3"
338 | source = "registry+https://github.com/rust-lang/crates.io-index"
339 | checksum = "599aa35200ffff8f04c1925aa1acc92fa2e08874379ef42e210a80e527e60838"
340 | dependencies = [
341 | "serde",
342 | "toml 0.7.8",
343 | ]
344 |
345 | [[package]]
346 | name = "cc"
347 | version = "1.0.95"
348 | source = "registry+https://github.com/rust-lang/crates.io-index"
349 | checksum = "d32a725bc159af97c3e629873bb9f88fb8cf8a4867175f76dc987815ea07c83b"
350 |
351 | [[package]]
352 | name = "cesu8"
353 | version = "1.1.0"
354 | source = "registry+https://github.com/rust-lang/crates.io-index"
355 | checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
356 |
357 | [[package]]
358 | name = "cfb"
359 | version = "0.7.3"
360 | source = "registry+https://github.com/rust-lang/crates.io-index"
361 | checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f"
362 | dependencies = [
363 | "byteorder",
364 | "fnv",
365 | "uuid",
366 | ]
367 |
368 | [[package]]
369 | name = "cfg-expr"
370 | version = "0.9.1"
371 | source = "registry+https://github.com/rust-lang/crates.io-index"
372 | checksum = "3431df59f28accaf4cb4eed4a9acc66bea3f3c3753aa6cdc2f024174ef232af7"
373 | dependencies = [
374 | "smallvec",
375 | ]
376 |
377 | [[package]]
378 | name = "cfg-expr"
379 | version = "0.15.8"
380 | source = "registry+https://github.com/rust-lang/crates.io-index"
381 | checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02"
382 | dependencies = [
383 | "smallvec",
384 | "target-lexicon",
385 | ]
386 |
387 | [[package]]
388 | name = "cfg-if"
389 | version = "1.0.0"
390 | source = "registry+https://github.com/rust-lang/crates.io-index"
391 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
392 |
393 | [[package]]
394 | name = "cfg_aliases"
395 | version = "0.1.1"
396 | source = "registry+https://github.com/rust-lang/crates.io-index"
397 | checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
398 |
399 | [[package]]
400 | name = "chrono"
401 | version = "0.4.38"
402 | source = "registry+https://github.com/rust-lang/crates.io-index"
403 | checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
404 | dependencies = [
405 | "android-tzdata",
406 | "iana-time-zone",
407 | "num-traits",
408 | "serde",
409 | "windows-targets 0.52.5",
410 | ]
411 |
412 | [[package]]
413 | name = "cocoa"
414 | version = "0.24.1"
415 | source = "registry+https://github.com/rust-lang/crates.io-index"
416 | checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a"
417 | dependencies = [
418 | "bitflags 1.3.2",
419 | "block",
420 | "cocoa-foundation",
421 | "core-foundation",
422 | "core-graphics 0.22.3",
423 | "foreign-types 0.3.2",
424 | "libc",
425 | "objc",
426 | ]
427 |
428 | [[package]]
429 | name = "cocoa"
430 | version = "0.25.0"
431 | source = "registry+https://github.com/rust-lang/crates.io-index"
432 | checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c"
433 | dependencies = [
434 | "bitflags 1.3.2",
435 | "block",
436 | "cocoa-foundation",
437 | "core-foundation",
438 | "core-graphics 0.23.2",
439 | "foreign-types 0.5.0",
440 | "libc",
441 | "objc",
442 | ]
443 |
444 | [[package]]
445 | name = "cocoa-foundation"
446 | version = "0.1.2"
447 | source = "registry+https://github.com/rust-lang/crates.io-index"
448 | checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7"
449 | dependencies = [
450 | "bitflags 1.3.2",
451 | "block",
452 | "core-foundation",
453 | "core-graphics-types",
454 | "libc",
455 | "objc",
456 | ]
457 |
458 | [[package]]
459 | name = "color_quant"
460 | version = "1.1.0"
461 | source = "registry+https://github.com/rust-lang/crates.io-index"
462 | checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
463 |
464 | [[package]]
465 | name = "combine"
466 | version = "4.6.7"
467 | source = "registry+https://github.com/rust-lang/crates.io-index"
468 | checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
469 | dependencies = [
470 | "bytes",
471 | "memchr",
472 | ]
473 |
474 | [[package]]
475 | name = "convert_case"
476 | version = "0.4.0"
477 | source = "registry+https://github.com/rust-lang/crates.io-index"
478 | checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
479 |
480 | [[package]]
481 | name = "core-foundation"
482 | version = "0.9.4"
483 | source = "registry+https://github.com/rust-lang/crates.io-index"
484 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
485 | dependencies = [
486 | "core-foundation-sys",
487 | "libc",
488 | ]
489 |
490 | [[package]]
491 | name = "core-foundation-sys"
492 | version = "0.8.6"
493 | source = "registry+https://github.com/rust-lang/crates.io-index"
494 | checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
495 |
496 | [[package]]
497 | name = "core-graphics"
498 | version = "0.22.3"
499 | source = "registry+https://github.com/rust-lang/crates.io-index"
500 | checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
501 | dependencies = [
502 | "bitflags 1.3.2",
503 | "core-foundation",
504 | "core-graphics-types",
505 | "foreign-types 0.3.2",
506 | "libc",
507 | ]
508 |
509 | [[package]]
510 | name = "core-graphics"
511 | version = "0.23.2"
512 | source = "registry+https://github.com/rust-lang/crates.io-index"
513 | checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081"
514 | dependencies = [
515 | "bitflags 1.3.2",
516 | "core-foundation",
517 | "core-graphics-types",
518 | "foreign-types 0.5.0",
519 | "libc",
520 | ]
521 |
522 | [[package]]
523 | name = "core-graphics-types"
524 | version = "0.1.3"
525 | source = "registry+https://github.com/rust-lang/crates.io-index"
526 | checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf"
527 | dependencies = [
528 | "bitflags 1.3.2",
529 | "core-foundation",
530 | "libc",
531 | ]
532 |
533 | [[package]]
534 | name = "cpufeatures"
535 | version = "0.2.12"
536 | source = "registry+https://github.com/rust-lang/crates.io-index"
537 | checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
538 | dependencies = [
539 | "libc",
540 | ]
541 |
542 | [[package]]
543 | name = "crc32fast"
544 | version = "1.4.0"
545 | source = "registry+https://github.com/rust-lang/crates.io-index"
546 | checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa"
547 | dependencies = [
548 | "cfg-if",
549 | ]
550 |
551 | [[package]]
552 | name = "crossbeam-channel"
553 | version = "0.5.12"
554 | source = "registry+https://github.com/rust-lang/crates.io-index"
555 | checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95"
556 | dependencies = [
557 | "crossbeam-utils",
558 | ]
559 |
560 | [[package]]
561 | name = "crossbeam-deque"
562 | version = "0.8.5"
563 | source = "registry+https://github.com/rust-lang/crates.io-index"
564 | checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
565 | dependencies = [
566 | "crossbeam-epoch",
567 | "crossbeam-utils",
568 | ]
569 |
570 | [[package]]
571 | name = "crossbeam-epoch"
572 | version = "0.9.18"
573 | source = "registry+https://github.com/rust-lang/crates.io-index"
574 | checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
575 | dependencies = [
576 | "crossbeam-utils",
577 | ]
578 |
579 | [[package]]
580 | name = "crossbeam-utils"
581 | version = "0.8.19"
582 | source = "registry+https://github.com/rust-lang/crates.io-index"
583 | checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345"
584 |
585 | [[package]]
586 | name = "crypto-common"
587 | version = "0.1.6"
588 | source = "registry+https://github.com/rust-lang/crates.io-index"
589 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
590 | dependencies = [
591 | "generic-array",
592 | "typenum",
593 | ]
594 |
595 | [[package]]
596 | name = "cssparser"
597 | version = "0.27.2"
598 | source = "registry+https://github.com/rust-lang/crates.io-index"
599 | checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a"
600 | dependencies = [
601 | "cssparser-macros",
602 | "dtoa-short",
603 | "itoa 0.4.8",
604 | "matches",
605 | "phf 0.8.0",
606 | "proc-macro2",
607 | "quote",
608 | "smallvec",
609 | "syn 1.0.109",
610 | ]
611 |
612 | [[package]]
613 | name = "cssparser-macros"
614 | version = "0.6.1"
615 | source = "registry+https://github.com/rust-lang/crates.io-index"
616 | checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
617 | dependencies = [
618 | "quote",
619 | "syn 2.0.60",
620 | ]
621 |
622 | [[package]]
623 | name = "ctor"
624 | version = "0.2.8"
625 | source = "registry+https://github.com/rust-lang/crates.io-index"
626 | checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f"
627 | dependencies = [
628 | "quote",
629 | "syn 2.0.60",
630 | ]
631 |
632 | [[package]]
633 | name = "darling"
634 | version = "0.20.8"
635 | source = "registry+https://github.com/rust-lang/crates.io-index"
636 | checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391"
637 | dependencies = [
638 | "darling_core",
639 | "darling_macro",
640 | ]
641 |
642 | [[package]]
643 | name = "darling_core"
644 | version = "0.20.8"
645 | source = "registry+https://github.com/rust-lang/crates.io-index"
646 | checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f"
647 | dependencies = [
648 | "fnv",
649 | "ident_case",
650 | "proc-macro2",
651 | "quote",
652 | "strsim",
653 | "syn 2.0.60",
654 | ]
655 |
656 | [[package]]
657 | name = "darling_macro"
658 | version = "0.20.8"
659 | source = "registry+https://github.com/rust-lang/crates.io-index"
660 | checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f"
661 | dependencies = [
662 | "darling_core",
663 | "quote",
664 | "syn 2.0.60",
665 | ]
666 |
667 | [[package]]
668 | name = "dbus"
669 | version = "0.9.7"
670 | source = "registry+https://github.com/rust-lang/crates.io-index"
671 | checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b"
672 | dependencies = [
673 | "libc",
674 | "libdbus-sys",
675 | "winapi",
676 | ]
677 |
678 | [[package]]
679 | name = "deranged"
680 | version = "0.3.11"
681 | source = "registry+https://github.com/rust-lang/crates.io-index"
682 | checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
683 | dependencies = [
684 | "powerfmt",
685 | "serde",
686 | ]
687 |
688 | [[package]]
689 | name = "derive_more"
690 | version = "0.99.17"
691 | source = "registry+https://github.com/rust-lang/crates.io-index"
692 | checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
693 | dependencies = [
694 | "convert_case",
695 | "proc-macro2",
696 | "quote",
697 | "rustc_version",
698 | "syn 1.0.109",
699 | ]
700 |
701 | [[package]]
702 | name = "digest"
703 | version = "0.10.7"
704 | source = "registry+https://github.com/rust-lang/crates.io-index"
705 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
706 | dependencies = [
707 | "block-buffer",
708 | "crypto-common",
709 | ]
710 |
711 | [[package]]
712 | name = "dirs"
713 | version = "4.0.0"
714 | source = "registry+https://github.com/rust-lang/crates.io-index"
715 | checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
716 | dependencies = [
717 | "dirs-sys 0.3.7",
718 | ]
719 |
720 | [[package]]
721 | name = "dirs"
722 | version = "5.0.1"
723 | source = "registry+https://github.com/rust-lang/crates.io-index"
724 | checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
725 | dependencies = [
726 | "dirs-sys 0.4.1",
727 | ]
728 |
729 | [[package]]
730 | name = "dirs-next"
731 | version = "2.0.0"
732 | source = "registry+https://github.com/rust-lang/crates.io-index"
733 | checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
734 | dependencies = [
735 | "cfg-if",
736 | "dirs-sys-next",
737 | ]
738 |
739 | [[package]]
740 | name = "dirs-sys"
741 | version = "0.3.7"
742 | source = "registry+https://github.com/rust-lang/crates.io-index"
743 | checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
744 | dependencies = [
745 | "libc",
746 | "redox_users",
747 | "winapi",
748 | ]
749 |
750 | [[package]]
751 | name = "dirs-sys"
752 | version = "0.4.1"
753 | source = "registry+https://github.com/rust-lang/crates.io-index"
754 | checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
755 | dependencies = [
756 | "libc",
757 | "option-ext",
758 | "redox_users",
759 | "windows-sys 0.48.0",
760 | ]
761 |
762 | [[package]]
763 | name = "dirs-sys-next"
764 | version = "0.1.2"
765 | source = "registry+https://github.com/rust-lang/crates.io-index"
766 | checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
767 | dependencies = [
768 | "libc",
769 | "redox_users",
770 | "winapi",
771 | ]
772 |
773 | [[package]]
774 | name = "dispatch"
775 | version = "0.2.0"
776 | source = "registry+https://github.com/rust-lang/crates.io-index"
777 | checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
778 |
779 | [[package]]
780 | name = "dtoa"
781 | version = "1.0.9"
782 | source = "registry+https://github.com/rust-lang/crates.io-index"
783 | checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653"
784 |
785 | [[package]]
786 | name = "dtoa-short"
787 | version = "0.3.4"
788 | source = "registry+https://github.com/rust-lang/crates.io-index"
789 | checksum = "dbaceec3c6e4211c79e7b1800fb9680527106beb2f9c51904a3210c03a448c74"
790 | dependencies = [
791 | "dtoa",
792 | ]
793 |
794 | [[package]]
795 | name = "dunce"
796 | version = "1.0.4"
797 | source = "registry+https://github.com/rust-lang/crates.io-index"
798 | checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
799 |
800 | [[package]]
801 | name = "embed-resource"
802 | version = "2.4.2"
803 | source = "registry+https://github.com/rust-lang/crates.io-index"
804 | checksum = "c6985554d0688b687c5cb73898a34fbe3ad6c24c58c238a4d91d5e840670ee9d"
805 | dependencies = [
806 | "cc",
807 | "memchr",
808 | "rustc_version",
809 | "toml 0.8.12",
810 | "vswhom",
811 | "winreg 0.52.0",
812 | ]
813 |
814 | [[package]]
815 | name = "embed_plist"
816 | version = "1.2.2"
817 | source = "registry+https://github.com/rust-lang/crates.io-index"
818 | checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7"
819 |
820 | [[package]]
821 | name = "encoding_rs"
822 | version = "0.8.34"
823 | source = "registry+https://github.com/rust-lang/crates.io-index"
824 | checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59"
825 | dependencies = [
826 | "cfg-if",
827 | ]
828 |
829 | [[package]]
830 | name = "equivalent"
831 | version = "1.0.1"
832 | source = "registry+https://github.com/rust-lang/crates.io-index"
833 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
834 |
835 | [[package]]
836 | name = "errno"
837 | version = "0.3.8"
838 | source = "registry+https://github.com/rust-lang/crates.io-index"
839 | checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
840 | dependencies = [
841 | "libc",
842 | "windows-sys 0.52.0",
843 | ]
844 |
845 | [[package]]
846 | name = "fastrand"
847 | version = "2.1.0"
848 | source = "registry+https://github.com/rust-lang/crates.io-index"
849 | checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a"
850 |
851 | [[package]]
852 | name = "fdeflate"
853 | version = "0.3.4"
854 | source = "registry+https://github.com/rust-lang/crates.io-index"
855 | checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645"
856 | dependencies = [
857 | "simd-adler32",
858 | ]
859 |
860 | [[package]]
861 | name = "fern"
862 | version = "0.6.2"
863 | source = "registry+https://github.com/rust-lang/crates.io-index"
864 | checksum = "d9f0c14694cbd524c8720dd69b0e3179344f04ebb5f90f2e4a440c6ea3b2f1ee"
865 | dependencies = [
866 | "log",
867 | ]
868 |
869 | [[package]]
870 | name = "field-offset"
871 | version = "0.3.6"
872 | source = "registry+https://github.com/rust-lang/crates.io-index"
873 | checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f"
874 | dependencies = [
875 | "memoffset",
876 | "rustc_version",
877 | ]
878 |
879 | [[package]]
880 | name = "filetime"
881 | version = "0.2.23"
882 | source = "registry+https://github.com/rust-lang/crates.io-index"
883 | checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd"
884 | dependencies = [
885 | "cfg-if",
886 | "libc",
887 | "redox_syscall 0.4.1",
888 | "windows-sys 0.52.0",
889 | ]
890 |
891 | [[package]]
892 | name = "flate2"
893 | version = "1.0.29"
894 | source = "registry+https://github.com/rust-lang/crates.io-index"
895 | checksum = "4556222738635b7a3417ae6130d8f52201e45a0c4d1a907f0826383adb5f85e7"
896 | dependencies = [
897 | "crc32fast",
898 | "miniz_oxide",
899 | ]
900 |
901 | [[package]]
902 | name = "fnv"
903 | version = "1.0.7"
904 | source = "registry+https://github.com/rust-lang/crates.io-index"
905 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
906 |
907 | [[package]]
908 | name = "foreign-types"
909 | version = "0.3.2"
910 | source = "registry+https://github.com/rust-lang/crates.io-index"
911 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
912 | dependencies = [
913 | "foreign-types-shared 0.1.1",
914 | ]
915 |
916 | [[package]]
917 | name = "foreign-types"
918 | version = "0.5.0"
919 | source = "registry+https://github.com/rust-lang/crates.io-index"
920 | checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
921 | dependencies = [
922 | "foreign-types-macros",
923 | "foreign-types-shared 0.3.1",
924 | ]
925 |
926 | [[package]]
927 | name = "foreign-types-macros"
928 | version = "0.2.3"
929 | source = "registry+https://github.com/rust-lang/crates.io-index"
930 | checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
931 | dependencies = [
932 | "proc-macro2",
933 | "quote",
934 | "syn 2.0.60",
935 | ]
936 |
937 | [[package]]
938 | name = "foreign-types-shared"
939 | version = "0.1.1"
940 | source = "registry+https://github.com/rust-lang/crates.io-index"
941 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
942 |
943 | [[package]]
944 | name = "foreign-types-shared"
945 | version = "0.3.1"
946 | source = "registry+https://github.com/rust-lang/crates.io-index"
947 | checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
948 |
949 | [[package]]
950 | name = "form_urlencoded"
951 | version = "1.2.1"
952 | source = "registry+https://github.com/rust-lang/crates.io-index"
953 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
954 | dependencies = [
955 | "percent-encoding",
956 | ]
957 |
958 | [[package]]
959 | name = "funty"
960 | version = "2.0.0"
961 | source = "registry+https://github.com/rust-lang/crates.io-index"
962 | checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
963 |
964 | [[package]]
965 | name = "futf"
966 | version = "0.1.5"
967 | source = "registry+https://github.com/rust-lang/crates.io-index"
968 | checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
969 | dependencies = [
970 | "mac",
971 | "new_debug_unreachable",
972 | ]
973 |
974 | [[package]]
975 | name = "futures-channel"
976 | version = "0.3.30"
977 | source = "registry+https://github.com/rust-lang/crates.io-index"
978 | checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
979 | dependencies = [
980 | "futures-core",
981 | ]
982 |
983 | [[package]]
984 | name = "futures-core"
985 | version = "0.3.30"
986 | source = "registry+https://github.com/rust-lang/crates.io-index"
987 | checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
988 |
989 | [[package]]
990 | name = "futures-executor"
991 | version = "0.3.30"
992 | source = "registry+https://github.com/rust-lang/crates.io-index"
993 | checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
994 | dependencies = [
995 | "futures-core",
996 | "futures-task",
997 | "futures-util",
998 | ]
999 |
1000 | [[package]]
1001 | name = "futures-io"
1002 | version = "0.3.30"
1003 | source = "registry+https://github.com/rust-lang/crates.io-index"
1004 | checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
1005 |
1006 | [[package]]
1007 | name = "futures-macro"
1008 | version = "0.3.30"
1009 | source = "registry+https://github.com/rust-lang/crates.io-index"
1010 | checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
1011 | dependencies = [
1012 | "proc-macro2",
1013 | "quote",
1014 | "syn 2.0.60",
1015 | ]
1016 |
1017 | [[package]]
1018 | name = "futures-task"
1019 | version = "0.3.30"
1020 | source = "registry+https://github.com/rust-lang/crates.io-index"
1021 | checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
1022 |
1023 | [[package]]
1024 | name = "futures-util"
1025 | version = "0.3.30"
1026 | source = "registry+https://github.com/rust-lang/crates.io-index"
1027 | checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
1028 | dependencies = [
1029 | "futures-core",
1030 | "futures-macro",
1031 | "futures-task",
1032 | "pin-project-lite",
1033 | "pin-utils",
1034 | "slab",
1035 | ]
1036 |
1037 | [[package]]
1038 | name = "fxhash"
1039 | version = "0.2.1"
1040 | source = "registry+https://github.com/rust-lang/crates.io-index"
1041 | checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
1042 | dependencies = [
1043 | "byteorder",
1044 | ]
1045 |
1046 | [[package]]
1047 | name = "gdk"
1048 | version = "0.15.4"
1049 | source = "registry+https://github.com/rust-lang/crates.io-index"
1050 | checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8"
1051 | dependencies = [
1052 | "bitflags 1.3.2",
1053 | "cairo-rs",
1054 | "gdk-pixbuf",
1055 | "gdk-sys",
1056 | "gio",
1057 | "glib",
1058 | "libc",
1059 | "pango",
1060 | ]
1061 |
1062 | [[package]]
1063 | name = "gdk-pixbuf"
1064 | version = "0.15.11"
1065 | source = "registry+https://github.com/rust-lang/crates.io-index"
1066 | checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a"
1067 | dependencies = [
1068 | "bitflags 1.3.2",
1069 | "gdk-pixbuf-sys",
1070 | "gio",
1071 | "glib",
1072 | "libc",
1073 | ]
1074 |
1075 | [[package]]
1076 | name = "gdk-pixbuf-sys"
1077 | version = "0.15.10"
1078 | source = "registry+https://github.com/rust-lang/crates.io-index"
1079 | checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7"
1080 | dependencies = [
1081 | "gio-sys",
1082 | "glib-sys",
1083 | "gobject-sys",
1084 | "libc",
1085 | "system-deps 6.2.2",
1086 | ]
1087 |
1088 | [[package]]
1089 | name = "gdk-sys"
1090 | version = "0.15.1"
1091 | source = "registry+https://github.com/rust-lang/crates.io-index"
1092 | checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88"
1093 | dependencies = [
1094 | "cairo-sys-rs",
1095 | "gdk-pixbuf-sys",
1096 | "gio-sys",
1097 | "glib-sys",
1098 | "gobject-sys",
1099 | "libc",
1100 | "pango-sys",
1101 | "pkg-config",
1102 | "system-deps 6.2.2",
1103 | ]
1104 |
1105 | [[package]]
1106 | name = "gdkwayland-sys"
1107 | version = "0.15.3"
1108 | source = "registry+https://github.com/rust-lang/crates.io-index"
1109 | checksum = "cca49a59ad8cfdf36ef7330fe7bdfbe1d34323220cc16a0de2679ee773aee2c2"
1110 | dependencies = [
1111 | "gdk-sys",
1112 | "glib-sys",
1113 | "gobject-sys",
1114 | "libc",
1115 | "pkg-config",
1116 | "system-deps 6.2.2",
1117 | ]
1118 |
1119 | [[package]]
1120 | name = "gdkx11-sys"
1121 | version = "0.15.1"
1122 | source = "registry+https://github.com/rust-lang/crates.io-index"
1123 | checksum = "b4b7f8c7a84b407aa9b143877e267e848ff34106578b64d1e0a24bf550716178"
1124 | dependencies = [
1125 | "gdk-sys",
1126 | "glib-sys",
1127 | "libc",
1128 | "system-deps 6.2.2",
1129 | "x11",
1130 | ]
1131 |
1132 | [[package]]
1133 | name = "generator"
1134 | version = "0.7.5"
1135 | source = "registry+https://github.com/rust-lang/crates.io-index"
1136 | checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e"
1137 | dependencies = [
1138 | "cc",
1139 | "libc",
1140 | "log",
1141 | "rustversion",
1142 | "windows 0.48.0",
1143 | ]
1144 |
1145 | [[package]]
1146 | name = "generic-array"
1147 | version = "0.14.7"
1148 | source = "registry+https://github.com/rust-lang/crates.io-index"
1149 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
1150 | dependencies = [
1151 | "typenum",
1152 | "version_check",
1153 | ]
1154 |
1155 | [[package]]
1156 | name = "getrandom"
1157 | version = "0.1.16"
1158 | source = "registry+https://github.com/rust-lang/crates.io-index"
1159 | checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
1160 | dependencies = [
1161 | "cfg-if",
1162 | "libc",
1163 | "wasi 0.9.0+wasi-snapshot-preview1",
1164 | ]
1165 |
1166 | [[package]]
1167 | name = "getrandom"
1168 | version = "0.2.14"
1169 | source = "registry+https://github.com/rust-lang/crates.io-index"
1170 | checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c"
1171 | dependencies = [
1172 | "cfg-if",
1173 | "libc",
1174 | "wasi 0.11.0+wasi-snapshot-preview1",
1175 | ]
1176 |
1177 | [[package]]
1178 | name = "gimli"
1179 | version = "0.28.1"
1180 | source = "registry+https://github.com/rust-lang/crates.io-index"
1181 | checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
1182 |
1183 | [[package]]
1184 | name = "gio"
1185 | version = "0.15.12"
1186 | source = "registry+https://github.com/rust-lang/crates.io-index"
1187 | checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b"
1188 | dependencies = [
1189 | "bitflags 1.3.2",
1190 | "futures-channel",
1191 | "futures-core",
1192 | "futures-io",
1193 | "gio-sys",
1194 | "glib",
1195 | "libc",
1196 | "once_cell",
1197 | "thiserror",
1198 | ]
1199 |
1200 | [[package]]
1201 | name = "gio-sys"
1202 | version = "0.15.10"
1203 | source = "registry+https://github.com/rust-lang/crates.io-index"
1204 | checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d"
1205 | dependencies = [
1206 | "glib-sys",
1207 | "gobject-sys",
1208 | "libc",
1209 | "system-deps 6.2.2",
1210 | "winapi",
1211 | ]
1212 |
1213 | [[package]]
1214 | name = "glib"
1215 | version = "0.15.12"
1216 | source = "registry+https://github.com/rust-lang/crates.io-index"
1217 | checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d"
1218 | dependencies = [
1219 | "bitflags 1.3.2",
1220 | "futures-channel",
1221 | "futures-core",
1222 | "futures-executor",
1223 | "futures-task",
1224 | "glib-macros",
1225 | "glib-sys",
1226 | "gobject-sys",
1227 | "libc",
1228 | "once_cell",
1229 | "smallvec",
1230 | "thiserror",
1231 | ]
1232 |
1233 | [[package]]
1234 | name = "glib-macros"
1235 | version = "0.15.13"
1236 | source = "registry+https://github.com/rust-lang/crates.io-index"
1237 | checksum = "10c6ae9f6fa26f4fb2ac16b528d138d971ead56141de489f8111e259b9df3c4a"
1238 | dependencies = [
1239 | "anyhow",
1240 | "heck 0.4.1",
1241 | "proc-macro-crate 1.3.1",
1242 | "proc-macro-error",
1243 | "proc-macro2",
1244 | "quote",
1245 | "syn 1.0.109",
1246 | ]
1247 |
1248 | [[package]]
1249 | name = "glib-sys"
1250 | version = "0.15.10"
1251 | source = "registry+https://github.com/rust-lang/crates.io-index"
1252 | checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4"
1253 | dependencies = [
1254 | "libc",
1255 | "system-deps 6.2.2",
1256 | ]
1257 |
1258 | [[package]]
1259 | name = "glob"
1260 | version = "0.3.1"
1261 | source = "registry+https://github.com/rust-lang/crates.io-index"
1262 | checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
1263 |
1264 | [[package]]
1265 | name = "global-hotkey"
1266 | version = "0.5.4"
1267 | source = "registry+https://github.com/rust-lang/crates.io-index"
1268 | checksum = "89cb13e8c52c87e28a46eae3e5e65b8f0cd465c4c9e67b13d56c70412e792bc3"
1269 | dependencies = [
1270 | "bitflags 2.5.0",
1271 | "cocoa 0.25.0",
1272 | "crossbeam-channel",
1273 | "keyboard-types",
1274 | "objc",
1275 | "once_cell",
1276 | "thiserror",
1277 | "windows-sys 0.52.0",
1278 | "x11-dl",
1279 | ]
1280 |
1281 | [[package]]
1282 | name = "globset"
1283 | version = "0.4.14"
1284 | source = "registry+https://github.com/rust-lang/crates.io-index"
1285 | checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1"
1286 | dependencies = [
1287 | "aho-corasick",
1288 | "bstr",
1289 | "log",
1290 | "regex-automata 0.4.6",
1291 | "regex-syntax 0.8.3",
1292 | ]
1293 |
1294 | [[package]]
1295 | name = "gobject-sys"
1296 | version = "0.15.10"
1297 | source = "registry+https://github.com/rust-lang/crates.io-index"
1298 | checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a"
1299 | dependencies = [
1300 | "glib-sys",
1301 | "libc",
1302 | "system-deps 6.2.2",
1303 | ]
1304 |
1305 | [[package]]
1306 | name = "gtk"
1307 | version = "0.15.5"
1308 | source = "registry+https://github.com/rust-lang/crates.io-index"
1309 | checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0"
1310 | dependencies = [
1311 | "atk",
1312 | "bitflags 1.3.2",
1313 | "cairo-rs",
1314 | "field-offset",
1315 | "futures-channel",
1316 | "gdk",
1317 | "gdk-pixbuf",
1318 | "gio",
1319 | "glib",
1320 | "gtk-sys",
1321 | "gtk3-macros",
1322 | "libc",
1323 | "once_cell",
1324 | "pango",
1325 | "pkg-config",
1326 | ]
1327 |
1328 | [[package]]
1329 | name = "gtk-sys"
1330 | version = "0.15.3"
1331 | source = "registry+https://github.com/rust-lang/crates.io-index"
1332 | checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84"
1333 | dependencies = [
1334 | "atk-sys",
1335 | "cairo-sys-rs",
1336 | "gdk-pixbuf-sys",
1337 | "gdk-sys",
1338 | "gio-sys",
1339 | "glib-sys",
1340 | "gobject-sys",
1341 | "libc",
1342 | "pango-sys",
1343 | "system-deps 6.2.2",
1344 | ]
1345 |
1346 | [[package]]
1347 | name = "gtk3-macros"
1348 | version = "0.15.6"
1349 | source = "registry+https://github.com/rust-lang/crates.io-index"
1350 | checksum = "684c0456c086e8e7e9af73ec5b84e35938df394712054550e81558d21c44ab0d"
1351 | dependencies = [
1352 | "anyhow",
1353 | "proc-macro-crate 1.3.1",
1354 | "proc-macro-error",
1355 | "proc-macro2",
1356 | "quote",
1357 | "syn 1.0.109",
1358 | ]
1359 |
1360 | [[package]]
1361 | name = "hashbrown"
1362 | version = "0.12.3"
1363 | source = "registry+https://github.com/rust-lang/crates.io-index"
1364 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
1365 | dependencies = [
1366 | "ahash",
1367 | ]
1368 |
1369 | [[package]]
1370 | name = "hashbrown"
1371 | version = "0.14.5"
1372 | source = "registry+https://github.com/rust-lang/crates.io-index"
1373 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
1374 |
1375 | [[package]]
1376 | name = "heck"
1377 | version = "0.3.3"
1378 | source = "registry+https://github.com/rust-lang/crates.io-index"
1379 | checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
1380 | dependencies = [
1381 | "unicode-segmentation",
1382 | ]
1383 |
1384 | [[package]]
1385 | name = "heck"
1386 | version = "0.4.1"
1387 | source = "registry+https://github.com/rust-lang/crates.io-index"
1388 | checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
1389 |
1390 | [[package]]
1391 | name = "heck"
1392 | version = "0.5.0"
1393 | source = "registry+https://github.com/rust-lang/crates.io-index"
1394 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
1395 |
1396 | [[package]]
1397 | name = "hermit-abi"
1398 | version = "0.3.9"
1399 | source = "registry+https://github.com/rust-lang/crates.io-index"
1400 | checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
1401 |
1402 | [[package]]
1403 | name = "hex"
1404 | version = "0.4.3"
1405 | source = "registry+https://github.com/rust-lang/crates.io-index"
1406 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
1407 |
1408 | [[package]]
1409 | name = "home-assistant-assist-desktop"
1410 | version = "1.4.0"
1411 | dependencies = [
1412 | "dirs 5.0.1",
1413 | "global-hotkey",
1414 | "log",
1415 | "opener",
1416 | "serde",
1417 | "serde_json",
1418 | "tauri",
1419 | "tauri-build",
1420 | "tauri-plugin-autostart",
1421 | "tauri-plugin-log",
1422 | "tokio",
1423 | "url",
1424 | ]
1425 |
1426 | [[package]]
1427 | name = "html5ever"
1428 | version = "0.26.0"
1429 | source = "registry+https://github.com/rust-lang/crates.io-index"
1430 | checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7"
1431 | dependencies = [
1432 | "log",
1433 | "mac",
1434 | "markup5ever",
1435 | "proc-macro2",
1436 | "quote",
1437 | "syn 1.0.109",
1438 | ]
1439 |
1440 | [[package]]
1441 | name = "http"
1442 | version = "0.2.12"
1443 | source = "registry+https://github.com/rust-lang/crates.io-index"
1444 | checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
1445 | dependencies = [
1446 | "bytes",
1447 | "fnv",
1448 | "itoa 1.0.11",
1449 | ]
1450 |
1451 | [[package]]
1452 | name = "http-range"
1453 | version = "0.1.5"
1454 | source = "registry+https://github.com/rust-lang/crates.io-index"
1455 | checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573"
1456 |
1457 | [[package]]
1458 | name = "iana-time-zone"
1459 | version = "0.1.60"
1460 | source = "registry+https://github.com/rust-lang/crates.io-index"
1461 | checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141"
1462 | dependencies = [
1463 | "android_system_properties",
1464 | "core-foundation-sys",
1465 | "iana-time-zone-haiku",
1466 | "js-sys",
1467 | "wasm-bindgen",
1468 | "windows-core",
1469 | ]
1470 |
1471 | [[package]]
1472 | name = "iana-time-zone-haiku"
1473 | version = "0.1.2"
1474 | source = "registry+https://github.com/rust-lang/crates.io-index"
1475 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
1476 | dependencies = [
1477 | "cc",
1478 | ]
1479 |
1480 | [[package]]
1481 | name = "ico"
1482 | version = "0.3.0"
1483 | source = "registry+https://github.com/rust-lang/crates.io-index"
1484 | checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae"
1485 | dependencies = [
1486 | "byteorder",
1487 | "png",
1488 | ]
1489 |
1490 | [[package]]
1491 | name = "ident_case"
1492 | version = "1.0.1"
1493 | source = "registry+https://github.com/rust-lang/crates.io-index"
1494 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
1495 |
1496 | [[package]]
1497 | name = "idna"
1498 | version = "0.5.0"
1499 | source = "registry+https://github.com/rust-lang/crates.io-index"
1500 | checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
1501 | dependencies = [
1502 | "unicode-bidi",
1503 | "unicode-normalization",
1504 | ]
1505 |
1506 | [[package]]
1507 | name = "ignore"
1508 | version = "0.4.22"
1509 | source = "registry+https://github.com/rust-lang/crates.io-index"
1510 | checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1"
1511 | dependencies = [
1512 | "crossbeam-deque",
1513 | "globset",
1514 | "log",
1515 | "memchr",
1516 | "regex-automata 0.4.6",
1517 | "same-file",
1518 | "walkdir",
1519 | "winapi-util",
1520 | ]
1521 |
1522 | [[package]]
1523 | name = "image"
1524 | version = "0.24.9"
1525 | source = "registry+https://github.com/rust-lang/crates.io-index"
1526 | checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d"
1527 | dependencies = [
1528 | "bytemuck",
1529 | "byteorder",
1530 | "color_quant",
1531 | "num-traits",
1532 | ]
1533 |
1534 | [[package]]
1535 | name = "indexmap"
1536 | version = "1.9.3"
1537 | source = "registry+https://github.com/rust-lang/crates.io-index"
1538 | checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
1539 | dependencies = [
1540 | "autocfg",
1541 | "hashbrown 0.12.3",
1542 | "serde",
1543 | ]
1544 |
1545 | [[package]]
1546 | name = "indexmap"
1547 | version = "2.2.6"
1548 | source = "registry+https://github.com/rust-lang/crates.io-index"
1549 | checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26"
1550 | dependencies = [
1551 | "equivalent",
1552 | "hashbrown 0.14.5",
1553 | "serde",
1554 | ]
1555 |
1556 | [[package]]
1557 | name = "infer"
1558 | version = "0.13.0"
1559 | source = "registry+https://github.com/rust-lang/crates.io-index"
1560 | checksum = "f551f8c3a39f68f986517db0d1759de85881894fdc7db798bd2a9df9cb04b7fc"
1561 | dependencies = [
1562 | "cfb",
1563 | ]
1564 |
1565 | [[package]]
1566 | name = "instant"
1567 | version = "0.1.12"
1568 | source = "registry+https://github.com/rust-lang/crates.io-index"
1569 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
1570 | dependencies = [
1571 | "cfg-if",
1572 | ]
1573 |
1574 | [[package]]
1575 | name = "itoa"
1576 | version = "0.4.8"
1577 | source = "registry+https://github.com/rust-lang/crates.io-index"
1578 | checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
1579 |
1580 | [[package]]
1581 | name = "itoa"
1582 | version = "1.0.11"
1583 | source = "registry+https://github.com/rust-lang/crates.io-index"
1584 | checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
1585 |
1586 | [[package]]
1587 | name = "javascriptcore-rs"
1588 | version = "0.16.0"
1589 | source = "registry+https://github.com/rust-lang/crates.io-index"
1590 | checksum = "bf053e7843f2812ff03ef5afe34bb9c06ffee120385caad4f6b9967fcd37d41c"
1591 | dependencies = [
1592 | "bitflags 1.3.2",
1593 | "glib",
1594 | "javascriptcore-rs-sys",
1595 | ]
1596 |
1597 | [[package]]
1598 | name = "javascriptcore-rs-sys"
1599 | version = "0.4.0"
1600 | source = "registry+https://github.com/rust-lang/crates.io-index"
1601 | checksum = "905fbb87419c5cde6e3269537e4ea7d46431f3008c5d057e915ef3f115e7793c"
1602 | dependencies = [
1603 | "glib-sys",
1604 | "gobject-sys",
1605 | "libc",
1606 | "system-deps 5.0.0",
1607 | ]
1608 |
1609 | [[package]]
1610 | name = "jni"
1611 | version = "0.20.0"
1612 | source = "registry+https://github.com/rust-lang/crates.io-index"
1613 | checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c"
1614 | dependencies = [
1615 | "cesu8",
1616 | "combine",
1617 | "jni-sys",
1618 | "log",
1619 | "thiserror",
1620 | "walkdir",
1621 | ]
1622 |
1623 | [[package]]
1624 | name = "jni-sys"
1625 | version = "0.3.0"
1626 | source = "registry+https://github.com/rust-lang/crates.io-index"
1627 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
1628 |
1629 | [[package]]
1630 | name = "js-sys"
1631 | version = "0.3.69"
1632 | source = "registry+https://github.com/rust-lang/crates.io-index"
1633 | checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d"
1634 | dependencies = [
1635 | "wasm-bindgen",
1636 | ]
1637 |
1638 | [[package]]
1639 | name = "json-patch"
1640 | version = "1.2.0"
1641 | source = "registry+https://github.com/rust-lang/crates.io-index"
1642 | checksum = "55ff1e1486799e3f64129f8ccad108b38290df9cd7015cd31bed17239f0789d6"
1643 | dependencies = [
1644 | "serde",
1645 | "serde_json",
1646 | "thiserror",
1647 | "treediff",
1648 | ]
1649 |
1650 | [[package]]
1651 | name = "keyboard-types"
1652 | version = "0.7.0"
1653 | source = "registry+https://github.com/rust-lang/crates.io-index"
1654 | checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a"
1655 | dependencies = [
1656 | "bitflags 2.5.0",
1657 | "serde",
1658 | "unicode-segmentation",
1659 | ]
1660 |
1661 | [[package]]
1662 | name = "kuchikiki"
1663 | version = "0.8.2"
1664 | source = "registry+https://github.com/rust-lang/crates.io-index"
1665 | checksum = "f29e4755b7b995046f510a7520c42b2fed58b77bd94d5a87a8eb43d2fd126da8"
1666 | dependencies = [
1667 | "cssparser",
1668 | "html5ever",
1669 | "indexmap 1.9.3",
1670 | "matches",
1671 | "selectors",
1672 | ]
1673 |
1674 | [[package]]
1675 | name = "lazy_static"
1676 | version = "1.4.0"
1677 | source = "registry+https://github.com/rust-lang/crates.io-index"
1678 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
1679 |
1680 | [[package]]
1681 | name = "libappindicator"
1682 | version = "0.7.1"
1683 | source = "registry+https://github.com/rust-lang/crates.io-index"
1684 | checksum = "db2d3cb96d092b4824cb306c9e544c856a4cb6210c1081945187f7f1924b47e8"
1685 | dependencies = [
1686 | "glib",
1687 | "gtk",
1688 | "gtk-sys",
1689 | "libappindicator-sys",
1690 | "log",
1691 | ]
1692 |
1693 | [[package]]
1694 | name = "libappindicator-sys"
1695 | version = "0.7.3"
1696 | source = "registry+https://github.com/rust-lang/crates.io-index"
1697 | checksum = "f1b3b6681973cea8cc3bce7391e6d7d5502720b80a581c9a95c9cbaf592826aa"
1698 | dependencies = [
1699 | "gtk-sys",
1700 | "libloading",
1701 | "once_cell",
1702 | ]
1703 |
1704 | [[package]]
1705 | name = "libc"
1706 | version = "0.2.153"
1707 | source = "registry+https://github.com/rust-lang/crates.io-index"
1708 | checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
1709 |
1710 | [[package]]
1711 | name = "libdbus-sys"
1712 | version = "0.2.5"
1713 | source = "registry+https://github.com/rust-lang/crates.io-index"
1714 | checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72"
1715 | dependencies = [
1716 | "cc",
1717 | "pkg-config",
1718 | ]
1719 |
1720 | [[package]]
1721 | name = "libloading"
1722 | version = "0.7.4"
1723 | source = "registry+https://github.com/rust-lang/crates.io-index"
1724 | checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
1725 | dependencies = [
1726 | "cfg-if",
1727 | "winapi",
1728 | ]
1729 |
1730 | [[package]]
1731 | name = "libredox"
1732 | version = "0.1.3"
1733 | source = "registry+https://github.com/rust-lang/crates.io-index"
1734 | checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
1735 | dependencies = [
1736 | "bitflags 2.5.0",
1737 | "libc",
1738 | ]
1739 |
1740 | [[package]]
1741 | name = "line-wrap"
1742 | version = "0.2.0"
1743 | source = "registry+https://github.com/rust-lang/crates.io-index"
1744 | checksum = "dd1bc4d24ad230d21fb898d1116b1801d7adfc449d42026475862ab48b11e70e"
1745 |
1746 | [[package]]
1747 | name = "linux-raw-sys"
1748 | version = "0.4.13"
1749 | source = "registry+https://github.com/rust-lang/crates.io-index"
1750 | checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c"
1751 |
1752 | [[package]]
1753 | name = "lock_api"
1754 | version = "0.4.12"
1755 | source = "registry+https://github.com/rust-lang/crates.io-index"
1756 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
1757 | dependencies = [
1758 | "autocfg",
1759 | "scopeguard",
1760 | ]
1761 |
1762 | [[package]]
1763 | name = "log"
1764 | version = "0.4.22"
1765 | source = "registry+https://github.com/rust-lang/crates.io-index"
1766 | checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
1767 | dependencies = [
1768 | "value-bag",
1769 | ]
1770 |
1771 | [[package]]
1772 | name = "loom"
1773 | version = "0.5.6"
1774 | source = "registry+https://github.com/rust-lang/crates.io-index"
1775 | checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5"
1776 | dependencies = [
1777 | "cfg-if",
1778 | "generator",
1779 | "scoped-tls",
1780 | "serde",
1781 | "serde_json",
1782 | "tracing",
1783 | "tracing-subscriber",
1784 | ]
1785 |
1786 | [[package]]
1787 | name = "mac"
1788 | version = "0.1.1"
1789 | source = "registry+https://github.com/rust-lang/crates.io-index"
1790 | checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
1791 |
1792 | [[package]]
1793 | name = "malloc_buf"
1794 | version = "0.0.6"
1795 | source = "registry+https://github.com/rust-lang/crates.io-index"
1796 | checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
1797 | dependencies = [
1798 | "libc",
1799 | ]
1800 |
1801 | [[package]]
1802 | name = "markup5ever"
1803 | version = "0.11.0"
1804 | source = "registry+https://github.com/rust-lang/crates.io-index"
1805 | checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016"
1806 | dependencies = [
1807 | "log",
1808 | "phf 0.10.1",
1809 | "phf_codegen 0.10.0",
1810 | "string_cache",
1811 | "string_cache_codegen",
1812 | "tendril",
1813 | ]
1814 |
1815 | [[package]]
1816 | name = "matchers"
1817 | version = "0.1.0"
1818 | source = "registry+https://github.com/rust-lang/crates.io-index"
1819 | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
1820 | dependencies = [
1821 | "regex-automata 0.1.10",
1822 | ]
1823 |
1824 | [[package]]
1825 | name = "matches"
1826 | version = "0.1.10"
1827 | source = "registry+https://github.com/rust-lang/crates.io-index"
1828 | checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
1829 |
1830 | [[package]]
1831 | name = "memchr"
1832 | version = "2.7.2"
1833 | source = "registry+https://github.com/rust-lang/crates.io-index"
1834 | checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d"
1835 |
1836 | [[package]]
1837 | name = "memoffset"
1838 | version = "0.9.1"
1839 | source = "registry+https://github.com/rust-lang/crates.io-index"
1840 | checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
1841 | dependencies = [
1842 | "autocfg",
1843 | ]
1844 |
1845 | [[package]]
1846 | name = "miniz_oxide"
1847 | version = "0.7.2"
1848 | source = "registry+https://github.com/rust-lang/crates.io-index"
1849 | checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7"
1850 | dependencies = [
1851 | "adler",
1852 | "simd-adler32",
1853 | ]
1854 |
1855 | [[package]]
1856 | name = "ndk"
1857 | version = "0.6.0"
1858 | source = "registry+https://github.com/rust-lang/crates.io-index"
1859 | checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4"
1860 | dependencies = [
1861 | "bitflags 1.3.2",
1862 | "jni-sys",
1863 | "ndk-sys",
1864 | "num_enum",
1865 | "thiserror",
1866 | ]
1867 |
1868 | [[package]]
1869 | name = "ndk-context"
1870 | version = "0.1.1"
1871 | source = "registry+https://github.com/rust-lang/crates.io-index"
1872 | checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
1873 |
1874 | [[package]]
1875 | name = "ndk-sys"
1876 | version = "0.3.0"
1877 | source = "registry+https://github.com/rust-lang/crates.io-index"
1878 | checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97"
1879 | dependencies = [
1880 | "jni-sys",
1881 | ]
1882 |
1883 | [[package]]
1884 | name = "new_debug_unreachable"
1885 | version = "1.0.6"
1886 | source = "registry+https://github.com/rust-lang/crates.io-index"
1887 | checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"
1888 |
1889 | [[package]]
1890 | name = "nodrop"
1891 | version = "0.1.14"
1892 | source = "registry+https://github.com/rust-lang/crates.io-index"
1893 | checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
1894 |
1895 | [[package]]
1896 | name = "normpath"
1897 | version = "1.2.0"
1898 | source = "registry+https://github.com/rust-lang/crates.io-index"
1899 | checksum = "5831952a9476f2fed74b77d74182fa5ddc4d21c72ec45a333b250e3ed0272804"
1900 | dependencies = [
1901 | "windows-sys 0.52.0",
1902 | ]
1903 |
1904 | [[package]]
1905 | name = "nu-ansi-term"
1906 | version = "0.46.0"
1907 | source = "registry+https://github.com/rust-lang/crates.io-index"
1908 | checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
1909 | dependencies = [
1910 | "overload",
1911 | "winapi",
1912 | ]
1913 |
1914 | [[package]]
1915 | name = "num-conv"
1916 | version = "0.1.0"
1917 | source = "registry+https://github.com/rust-lang/crates.io-index"
1918 | checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
1919 |
1920 | [[package]]
1921 | name = "num-traits"
1922 | version = "0.2.18"
1923 | source = "registry+https://github.com/rust-lang/crates.io-index"
1924 | checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a"
1925 | dependencies = [
1926 | "autocfg",
1927 | ]
1928 |
1929 | [[package]]
1930 | name = "num_cpus"
1931 | version = "1.16.0"
1932 | source = "registry+https://github.com/rust-lang/crates.io-index"
1933 | checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
1934 | dependencies = [
1935 | "hermit-abi",
1936 | "libc",
1937 | ]
1938 |
1939 | [[package]]
1940 | name = "num_enum"
1941 | version = "0.5.11"
1942 | source = "registry+https://github.com/rust-lang/crates.io-index"
1943 | checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
1944 | dependencies = [
1945 | "num_enum_derive",
1946 | ]
1947 |
1948 | [[package]]
1949 | name = "num_enum_derive"
1950 | version = "0.5.11"
1951 | source = "registry+https://github.com/rust-lang/crates.io-index"
1952 | checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
1953 | dependencies = [
1954 | "proc-macro-crate 1.3.1",
1955 | "proc-macro2",
1956 | "quote",
1957 | "syn 1.0.109",
1958 | ]
1959 |
1960 | [[package]]
1961 | name = "num_threads"
1962 | version = "0.1.7"
1963 | source = "registry+https://github.com/rust-lang/crates.io-index"
1964 | checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9"
1965 | dependencies = [
1966 | "libc",
1967 | ]
1968 |
1969 | [[package]]
1970 | name = "objc"
1971 | version = "0.2.7"
1972 | source = "registry+https://github.com/rust-lang/crates.io-index"
1973 | checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
1974 | dependencies = [
1975 | "malloc_buf",
1976 | "objc_exception",
1977 | ]
1978 |
1979 | [[package]]
1980 | name = "objc_exception"
1981 | version = "0.1.2"
1982 | source = "registry+https://github.com/rust-lang/crates.io-index"
1983 | checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4"
1984 | dependencies = [
1985 | "cc",
1986 | ]
1987 |
1988 | [[package]]
1989 | name = "objc_id"
1990 | version = "0.1.1"
1991 | source = "registry+https://github.com/rust-lang/crates.io-index"
1992 | checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
1993 | dependencies = [
1994 | "objc",
1995 | ]
1996 |
1997 | [[package]]
1998 | name = "object"
1999 | version = "0.32.2"
2000 | source = "registry+https://github.com/rust-lang/crates.io-index"
2001 | checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
2002 | dependencies = [
2003 | "memchr",
2004 | ]
2005 |
2006 | [[package]]
2007 | name = "once_cell"
2008 | version = "1.19.0"
2009 | source = "registry+https://github.com/rust-lang/crates.io-index"
2010 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
2011 |
2012 | [[package]]
2013 | name = "open"
2014 | version = "3.2.0"
2015 | source = "registry+https://github.com/rust-lang/crates.io-index"
2016 | checksum = "2078c0039e6a54a0c42c28faa984e115fb4c2d5bf2208f77d1961002df8576f8"
2017 | dependencies = [
2018 | "pathdiff",
2019 | "windows-sys 0.42.0",
2020 | ]
2021 |
2022 | [[package]]
2023 | name = "opener"
2024 | version = "0.7.1"
2025 | source = "registry+https://github.com/rust-lang/crates.io-index"
2026 | checksum = "f8df34be653210fbe9ffaff41d3b92721c56ce82dfee58ee684f9afb5e3a90c0"
2027 | dependencies = [
2028 | "bstr",
2029 | "dbus",
2030 | "normpath",
2031 | "windows-sys 0.52.0",
2032 | ]
2033 |
2034 | [[package]]
2035 | name = "option-ext"
2036 | version = "0.2.0"
2037 | source = "registry+https://github.com/rust-lang/crates.io-index"
2038 | checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
2039 |
2040 | [[package]]
2041 | name = "overload"
2042 | version = "0.1.1"
2043 | source = "registry+https://github.com/rust-lang/crates.io-index"
2044 | checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
2045 |
2046 | [[package]]
2047 | name = "pango"
2048 | version = "0.15.10"
2049 | source = "registry+https://github.com/rust-lang/crates.io-index"
2050 | checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f"
2051 | dependencies = [
2052 | "bitflags 1.3.2",
2053 | "glib",
2054 | "libc",
2055 | "once_cell",
2056 | "pango-sys",
2057 | ]
2058 |
2059 | [[package]]
2060 | name = "pango-sys"
2061 | version = "0.15.10"
2062 | source = "registry+https://github.com/rust-lang/crates.io-index"
2063 | checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa"
2064 | dependencies = [
2065 | "glib-sys",
2066 | "gobject-sys",
2067 | "libc",
2068 | "system-deps 6.2.2",
2069 | ]
2070 |
2071 | [[package]]
2072 | name = "parking_lot"
2073 | version = "0.12.2"
2074 | source = "registry+https://github.com/rust-lang/crates.io-index"
2075 | checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb"
2076 | dependencies = [
2077 | "lock_api",
2078 | "parking_lot_core",
2079 | ]
2080 |
2081 | [[package]]
2082 | name = "parking_lot_core"
2083 | version = "0.9.10"
2084 | source = "registry+https://github.com/rust-lang/crates.io-index"
2085 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
2086 | dependencies = [
2087 | "cfg-if",
2088 | "libc",
2089 | "redox_syscall 0.5.1",
2090 | "smallvec",
2091 | "windows-targets 0.52.5",
2092 | ]
2093 |
2094 | [[package]]
2095 | name = "pathdiff"
2096 | version = "0.2.1"
2097 | source = "registry+https://github.com/rust-lang/crates.io-index"
2098 | checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
2099 |
2100 | [[package]]
2101 | name = "percent-encoding"
2102 | version = "2.3.1"
2103 | source = "registry+https://github.com/rust-lang/crates.io-index"
2104 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
2105 |
2106 | [[package]]
2107 | name = "phf"
2108 | version = "0.8.0"
2109 | source = "registry+https://github.com/rust-lang/crates.io-index"
2110 | checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
2111 | dependencies = [
2112 | "phf_macros 0.8.0",
2113 | "phf_shared 0.8.0",
2114 | "proc-macro-hack",
2115 | ]
2116 |
2117 | [[package]]
2118 | name = "phf"
2119 | version = "0.10.1"
2120 | source = "registry+https://github.com/rust-lang/crates.io-index"
2121 | checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
2122 | dependencies = [
2123 | "phf_shared 0.10.0",
2124 | ]
2125 |
2126 | [[package]]
2127 | name = "phf"
2128 | version = "0.11.2"
2129 | source = "registry+https://github.com/rust-lang/crates.io-index"
2130 | checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
2131 | dependencies = [
2132 | "phf_macros 0.11.2",
2133 | "phf_shared 0.11.2",
2134 | ]
2135 |
2136 | [[package]]
2137 | name = "phf_codegen"
2138 | version = "0.8.0"
2139 | source = "registry+https://github.com/rust-lang/crates.io-index"
2140 | checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815"
2141 | dependencies = [
2142 | "phf_generator 0.8.0",
2143 | "phf_shared 0.8.0",
2144 | ]
2145 |
2146 | [[package]]
2147 | name = "phf_codegen"
2148 | version = "0.10.0"
2149 | source = "registry+https://github.com/rust-lang/crates.io-index"
2150 | checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd"
2151 | dependencies = [
2152 | "phf_generator 0.10.0",
2153 | "phf_shared 0.10.0",
2154 | ]
2155 |
2156 | [[package]]
2157 | name = "phf_generator"
2158 | version = "0.8.0"
2159 | source = "registry+https://github.com/rust-lang/crates.io-index"
2160 | checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
2161 | dependencies = [
2162 | "phf_shared 0.8.0",
2163 | "rand 0.7.3",
2164 | ]
2165 |
2166 | [[package]]
2167 | name = "phf_generator"
2168 | version = "0.10.0"
2169 | source = "registry+https://github.com/rust-lang/crates.io-index"
2170 | checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
2171 | dependencies = [
2172 | "phf_shared 0.10.0",
2173 | "rand 0.8.5",
2174 | ]
2175 |
2176 | [[package]]
2177 | name = "phf_generator"
2178 | version = "0.11.2"
2179 | source = "registry+https://github.com/rust-lang/crates.io-index"
2180 | checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0"
2181 | dependencies = [
2182 | "phf_shared 0.11.2",
2183 | "rand 0.8.5",
2184 | ]
2185 |
2186 | [[package]]
2187 | name = "phf_macros"
2188 | version = "0.8.0"
2189 | source = "registry+https://github.com/rust-lang/crates.io-index"
2190 | checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c"
2191 | dependencies = [
2192 | "phf_generator 0.8.0",
2193 | "phf_shared 0.8.0",
2194 | "proc-macro-hack",
2195 | "proc-macro2",
2196 | "quote",
2197 | "syn 1.0.109",
2198 | ]
2199 |
2200 | [[package]]
2201 | name = "phf_macros"
2202 | version = "0.11.2"
2203 | source = "registry+https://github.com/rust-lang/crates.io-index"
2204 | checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b"
2205 | dependencies = [
2206 | "phf_generator 0.11.2",
2207 | "phf_shared 0.11.2",
2208 | "proc-macro2",
2209 | "quote",
2210 | "syn 2.0.60",
2211 | ]
2212 |
2213 | [[package]]
2214 | name = "phf_shared"
2215 | version = "0.8.0"
2216 | source = "registry+https://github.com/rust-lang/crates.io-index"
2217 | checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
2218 | dependencies = [
2219 | "siphasher",
2220 | ]
2221 |
2222 | [[package]]
2223 | name = "phf_shared"
2224 | version = "0.10.0"
2225 | source = "registry+https://github.com/rust-lang/crates.io-index"
2226 | checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
2227 | dependencies = [
2228 | "siphasher",
2229 | ]
2230 |
2231 | [[package]]
2232 | name = "phf_shared"
2233 | version = "0.11.2"
2234 | source = "registry+https://github.com/rust-lang/crates.io-index"
2235 | checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
2236 | dependencies = [
2237 | "siphasher",
2238 | ]
2239 |
2240 | [[package]]
2241 | name = "pin-project-lite"
2242 | version = "0.2.14"
2243 | source = "registry+https://github.com/rust-lang/crates.io-index"
2244 | checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02"
2245 |
2246 | [[package]]
2247 | name = "pin-utils"
2248 | version = "0.1.0"
2249 | source = "registry+https://github.com/rust-lang/crates.io-index"
2250 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
2251 |
2252 | [[package]]
2253 | name = "pkg-config"
2254 | version = "0.3.30"
2255 | source = "registry+https://github.com/rust-lang/crates.io-index"
2256 | checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
2257 |
2258 | [[package]]
2259 | name = "plist"
2260 | version = "1.6.1"
2261 | source = "registry+https://github.com/rust-lang/crates.io-index"
2262 | checksum = "d9d34169e64b3c7a80c8621a48adaf44e0cf62c78a9b25dd9dd35f1881a17cf9"
2263 | dependencies = [
2264 | "base64 0.21.7",
2265 | "indexmap 2.2.6",
2266 | "line-wrap",
2267 | "quick-xml",
2268 | "serde",
2269 | "time",
2270 | ]
2271 |
2272 | [[package]]
2273 | name = "png"
2274 | version = "0.17.13"
2275 | source = "registry+https://github.com/rust-lang/crates.io-index"
2276 | checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1"
2277 | dependencies = [
2278 | "bitflags 1.3.2",
2279 | "crc32fast",
2280 | "fdeflate",
2281 | "flate2",
2282 | "miniz_oxide",
2283 | ]
2284 |
2285 | [[package]]
2286 | name = "powerfmt"
2287 | version = "0.2.0"
2288 | source = "registry+https://github.com/rust-lang/crates.io-index"
2289 | checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
2290 |
2291 | [[package]]
2292 | name = "ppv-lite86"
2293 | version = "0.2.17"
2294 | source = "registry+https://github.com/rust-lang/crates.io-index"
2295 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
2296 |
2297 | [[package]]
2298 | name = "precomputed-hash"
2299 | version = "0.1.1"
2300 | source = "registry+https://github.com/rust-lang/crates.io-index"
2301 | checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
2302 |
2303 | [[package]]
2304 | name = "proc-macro-crate"
2305 | version = "1.3.1"
2306 | source = "registry+https://github.com/rust-lang/crates.io-index"
2307 | checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
2308 | dependencies = [
2309 | "once_cell",
2310 | "toml_edit 0.19.15",
2311 | ]
2312 |
2313 | [[package]]
2314 | name = "proc-macro-crate"
2315 | version = "3.1.0"
2316 | source = "registry+https://github.com/rust-lang/crates.io-index"
2317 | checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284"
2318 | dependencies = [
2319 | "toml_edit 0.21.1",
2320 | ]
2321 |
2322 | [[package]]
2323 | name = "proc-macro-error"
2324 | version = "1.0.4"
2325 | source = "registry+https://github.com/rust-lang/crates.io-index"
2326 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
2327 | dependencies = [
2328 | "proc-macro-error-attr",
2329 | "proc-macro2",
2330 | "quote",
2331 | "syn 1.0.109",
2332 | "version_check",
2333 | ]
2334 |
2335 | [[package]]
2336 | name = "proc-macro-error-attr"
2337 | version = "1.0.4"
2338 | source = "registry+https://github.com/rust-lang/crates.io-index"
2339 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
2340 | dependencies = [
2341 | "proc-macro2",
2342 | "quote",
2343 | "version_check",
2344 | ]
2345 |
2346 | [[package]]
2347 | name = "proc-macro-hack"
2348 | version = "0.5.20+deprecated"
2349 | source = "registry+https://github.com/rust-lang/crates.io-index"
2350 | checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
2351 |
2352 | [[package]]
2353 | name = "proc-macro2"
2354 | version = "1.0.81"
2355 | source = "registry+https://github.com/rust-lang/crates.io-index"
2356 | checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba"
2357 | dependencies = [
2358 | "unicode-ident",
2359 | ]
2360 |
2361 | [[package]]
2362 | name = "ptr_meta"
2363 | version = "0.1.4"
2364 | source = "registry+https://github.com/rust-lang/crates.io-index"
2365 | checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1"
2366 | dependencies = [
2367 | "ptr_meta_derive",
2368 | ]
2369 |
2370 | [[package]]
2371 | name = "ptr_meta_derive"
2372 | version = "0.1.4"
2373 | source = "registry+https://github.com/rust-lang/crates.io-index"
2374 | checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac"
2375 | dependencies = [
2376 | "proc-macro2",
2377 | "quote",
2378 | "syn 1.0.109",
2379 | ]
2380 |
2381 | [[package]]
2382 | name = "quick-xml"
2383 | version = "0.31.0"
2384 | source = "registry+https://github.com/rust-lang/crates.io-index"
2385 | checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33"
2386 | dependencies = [
2387 | "memchr",
2388 | ]
2389 |
2390 | [[package]]
2391 | name = "quote"
2392 | version = "1.0.36"
2393 | source = "registry+https://github.com/rust-lang/crates.io-index"
2394 | checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
2395 | dependencies = [
2396 | "proc-macro2",
2397 | ]
2398 |
2399 | [[package]]
2400 | name = "radium"
2401 | version = "0.7.0"
2402 | source = "registry+https://github.com/rust-lang/crates.io-index"
2403 | checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
2404 |
2405 | [[package]]
2406 | name = "rand"
2407 | version = "0.7.3"
2408 | source = "registry+https://github.com/rust-lang/crates.io-index"
2409 | checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
2410 | dependencies = [
2411 | "getrandom 0.1.16",
2412 | "libc",
2413 | "rand_chacha 0.2.2",
2414 | "rand_core 0.5.1",
2415 | "rand_hc",
2416 | "rand_pcg",
2417 | ]
2418 |
2419 | [[package]]
2420 | name = "rand"
2421 | version = "0.8.5"
2422 | source = "registry+https://github.com/rust-lang/crates.io-index"
2423 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
2424 | dependencies = [
2425 | "libc",
2426 | "rand_chacha 0.3.1",
2427 | "rand_core 0.6.4",
2428 | ]
2429 |
2430 | [[package]]
2431 | name = "rand_chacha"
2432 | version = "0.2.2"
2433 | source = "registry+https://github.com/rust-lang/crates.io-index"
2434 | checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
2435 | dependencies = [
2436 | "ppv-lite86",
2437 | "rand_core 0.5.1",
2438 | ]
2439 |
2440 | [[package]]
2441 | name = "rand_chacha"
2442 | version = "0.3.1"
2443 | source = "registry+https://github.com/rust-lang/crates.io-index"
2444 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
2445 | dependencies = [
2446 | "ppv-lite86",
2447 | "rand_core 0.6.4",
2448 | ]
2449 |
2450 | [[package]]
2451 | name = "rand_core"
2452 | version = "0.5.1"
2453 | source = "registry+https://github.com/rust-lang/crates.io-index"
2454 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
2455 | dependencies = [
2456 | "getrandom 0.1.16",
2457 | ]
2458 |
2459 | [[package]]
2460 | name = "rand_core"
2461 | version = "0.6.4"
2462 | source = "registry+https://github.com/rust-lang/crates.io-index"
2463 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
2464 | dependencies = [
2465 | "getrandom 0.2.14",
2466 | ]
2467 |
2468 | [[package]]
2469 | name = "rand_hc"
2470 | version = "0.2.0"
2471 | source = "registry+https://github.com/rust-lang/crates.io-index"
2472 | checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
2473 | dependencies = [
2474 | "rand_core 0.5.1",
2475 | ]
2476 |
2477 | [[package]]
2478 | name = "rand_pcg"
2479 | version = "0.2.1"
2480 | source = "registry+https://github.com/rust-lang/crates.io-index"
2481 | checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
2482 | dependencies = [
2483 | "rand_core 0.5.1",
2484 | ]
2485 |
2486 | [[package]]
2487 | name = "raw-window-handle"
2488 | version = "0.5.2"
2489 | source = "registry+https://github.com/rust-lang/crates.io-index"
2490 | checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
2491 |
2492 | [[package]]
2493 | name = "redox_syscall"
2494 | version = "0.4.1"
2495 | source = "registry+https://github.com/rust-lang/crates.io-index"
2496 | checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
2497 | dependencies = [
2498 | "bitflags 1.3.2",
2499 | ]
2500 |
2501 | [[package]]
2502 | name = "redox_syscall"
2503 | version = "0.5.1"
2504 | source = "registry+https://github.com/rust-lang/crates.io-index"
2505 | checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e"
2506 | dependencies = [
2507 | "bitflags 2.5.0",
2508 | ]
2509 |
2510 | [[package]]
2511 | name = "redox_users"
2512 | version = "0.4.5"
2513 | source = "registry+https://github.com/rust-lang/crates.io-index"
2514 | checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891"
2515 | dependencies = [
2516 | "getrandom 0.2.14",
2517 | "libredox",
2518 | "thiserror",
2519 | ]
2520 |
2521 | [[package]]
2522 | name = "regex"
2523 | version = "1.10.4"
2524 | source = "registry+https://github.com/rust-lang/crates.io-index"
2525 | checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c"
2526 | dependencies = [
2527 | "aho-corasick",
2528 | "memchr",
2529 | "regex-automata 0.4.6",
2530 | "regex-syntax 0.8.3",
2531 | ]
2532 |
2533 | [[package]]
2534 | name = "regex-automata"
2535 | version = "0.1.10"
2536 | source = "registry+https://github.com/rust-lang/crates.io-index"
2537 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
2538 | dependencies = [
2539 | "regex-syntax 0.6.29",
2540 | ]
2541 |
2542 | [[package]]
2543 | name = "regex-automata"
2544 | version = "0.4.6"
2545 | source = "registry+https://github.com/rust-lang/crates.io-index"
2546 | checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea"
2547 | dependencies = [
2548 | "aho-corasick",
2549 | "memchr",
2550 | "regex-syntax 0.8.3",
2551 | ]
2552 |
2553 | [[package]]
2554 | name = "regex-syntax"
2555 | version = "0.6.29"
2556 | source = "registry+https://github.com/rust-lang/crates.io-index"
2557 | checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
2558 |
2559 | [[package]]
2560 | name = "regex-syntax"
2561 | version = "0.8.3"
2562 | source = "registry+https://github.com/rust-lang/crates.io-index"
2563 | checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56"
2564 |
2565 | [[package]]
2566 | name = "rend"
2567 | version = "0.4.2"
2568 | source = "registry+https://github.com/rust-lang/crates.io-index"
2569 | checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c"
2570 | dependencies = [
2571 | "bytecheck",
2572 | ]
2573 |
2574 | [[package]]
2575 | name = "rkyv"
2576 | version = "0.7.44"
2577 | source = "registry+https://github.com/rust-lang/crates.io-index"
2578 | checksum = "5cba464629b3394fc4dbc6f940ff8f5b4ff5c7aef40f29166fd4ad12acbc99c0"
2579 | dependencies = [
2580 | "bitvec",
2581 | "bytecheck",
2582 | "bytes",
2583 | "hashbrown 0.12.3",
2584 | "ptr_meta",
2585 | "rend",
2586 | "rkyv_derive",
2587 | "seahash",
2588 | "tinyvec",
2589 | "uuid",
2590 | ]
2591 |
2592 | [[package]]
2593 | name = "rkyv_derive"
2594 | version = "0.7.44"
2595 | source = "registry+https://github.com/rust-lang/crates.io-index"
2596 | checksum = "a7dddfff8de25e6f62b9d64e6e432bf1c6736c57d20323e15ee10435fbda7c65"
2597 | dependencies = [
2598 | "proc-macro2",
2599 | "quote",
2600 | "syn 1.0.109",
2601 | ]
2602 |
2603 | [[package]]
2604 | name = "rust_decimal"
2605 | version = "1.35.0"
2606 | source = "registry+https://github.com/rust-lang/crates.io-index"
2607 | checksum = "1790d1c4c0ca81211399e0e0af16333276f375209e71a37b67698a373db5b47a"
2608 | dependencies = [
2609 | "arrayvec",
2610 | "borsh",
2611 | "bytes",
2612 | "num-traits",
2613 | "rand 0.8.5",
2614 | "rkyv",
2615 | "serde",
2616 | "serde_json",
2617 | ]
2618 |
2619 | [[package]]
2620 | name = "rustc-demangle"
2621 | version = "0.1.23"
2622 | source = "registry+https://github.com/rust-lang/crates.io-index"
2623 | checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
2624 |
2625 | [[package]]
2626 | name = "rustc_version"
2627 | version = "0.4.0"
2628 | source = "registry+https://github.com/rust-lang/crates.io-index"
2629 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
2630 | dependencies = [
2631 | "semver",
2632 | ]
2633 |
2634 | [[package]]
2635 | name = "rustix"
2636 | version = "0.38.34"
2637 | source = "registry+https://github.com/rust-lang/crates.io-index"
2638 | checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f"
2639 | dependencies = [
2640 | "bitflags 2.5.0",
2641 | "errno",
2642 | "libc",
2643 | "linux-raw-sys",
2644 | "windows-sys 0.52.0",
2645 | ]
2646 |
2647 | [[package]]
2648 | name = "rustversion"
2649 | version = "1.0.15"
2650 | source = "registry+https://github.com/rust-lang/crates.io-index"
2651 | checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47"
2652 |
2653 | [[package]]
2654 | name = "ryu"
2655 | version = "1.0.17"
2656 | source = "registry+https://github.com/rust-lang/crates.io-index"
2657 | checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1"
2658 |
2659 | [[package]]
2660 | name = "same-file"
2661 | version = "1.0.6"
2662 | source = "registry+https://github.com/rust-lang/crates.io-index"
2663 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
2664 | dependencies = [
2665 | "winapi-util",
2666 | ]
2667 |
2668 | [[package]]
2669 | name = "scoped-tls"
2670 | version = "1.0.1"
2671 | source = "registry+https://github.com/rust-lang/crates.io-index"
2672 | checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
2673 |
2674 | [[package]]
2675 | name = "scopeguard"
2676 | version = "1.2.0"
2677 | source = "registry+https://github.com/rust-lang/crates.io-index"
2678 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
2679 |
2680 | [[package]]
2681 | name = "seahash"
2682 | version = "4.1.0"
2683 | source = "registry+https://github.com/rust-lang/crates.io-index"
2684 | checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
2685 |
2686 | [[package]]
2687 | name = "selectors"
2688 | version = "0.22.0"
2689 | source = "registry+https://github.com/rust-lang/crates.io-index"
2690 | checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe"
2691 | dependencies = [
2692 | "bitflags 1.3.2",
2693 | "cssparser",
2694 | "derive_more",
2695 | "fxhash",
2696 | "log",
2697 | "matches",
2698 | "phf 0.8.0",
2699 | "phf_codegen 0.8.0",
2700 | "precomputed-hash",
2701 | "servo_arc",
2702 | "smallvec",
2703 | "thin-slice",
2704 | ]
2705 |
2706 | [[package]]
2707 | name = "semver"
2708 | version = "1.0.22"
2709 | source = "registry+https://github.com/rust-lang/crates.io-index"
2710 | checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca"
2711 | dependencies = [
2712 | "serde",
2713 | ]
2714 |
2715 | [[package]]
2716 | name = "serde"
2717 | version = "1.0.203"
2718 | source = "registry+https://github.com/rust-lang/crates.io-index"
2719 | checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094"
2720 | dependencies = [
2721 | "serde_derive",
2722 | ]
2723 |
2724 | [[package]]
2725 | name = "serde_derive"
2726 | version = "1.0.203"
2727 | source = "registry+https://github.com/rust-lang/crates.io-index"
2728 | checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba"
2729 | dependencies = [
2730 | "proc-macro2",
2731 | "quote",
2732 | "syn 2.0.60",
2733 | ]
2734 |
2735 | [[package]]
2736 | name = "serde_json"
2737 | version = "1.0.119"
2738 | source = "registry+https://github.com/rust-lang/crates.io-index"
2739 | checksum = "e8eddb61f0697cc3989c5d64b452f5488e2b8a60fd7d5076a3045076ffef8cb0"
2740 | dependencies = [
2741 | "indexmap 2.2.6",
2742 | "itoa 1.0.11",
2743 | "ryu",
2744 | "serde",
2745 | ]
2746 |
2747 | [[package]]
2748 | name = "serde_repr"
2749 | version = "0.1.19"
2750 | source = "registry+https://github.com/rust-lang/crates.io-index"
2751 | checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9"
2752 | dependencies = [
2753 | "proc-macro2",
2754 | "quote",
2755 | "syn 2.0.60",
2756 | ]
2757 |
2758 | [[package]]
2759 | name = "serde_spanned"
2760 | version = "0.6.5"
2761 | source = "registry+https://github.com/rust-lang/crates.io-index"
2762 | checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1"
2763 | dependencies = [
2764 | "serde",
2765 | ]
2766 |
2767 | [[package]]
2768 | name = "serde_with"
2769 | version = "3.8.1"
2770 | source = "registry+https://github.com/rust-lang/crates.io-index"
2771 | checksum = "0ad483d2ab0149d5a5ebcd9972a3852711e0153d863bf5a5d0391d28883c4a20"
2772 | dependencies = [
2773 | "base64 0.22.0",
2774 | "chrono",
2775 | "hex",
2776 | "indexmap 1.9.3",
2777 | "indexmap 2.2.6",
2778 | "serde",
2779 | "serde_derive",
2780 | "serde_json",
2781 | "serde_with_macros",
2782 | "time",
2783 | ]
2784 |
2785 | [[package]]
2786 | name = "serde_with_macros"
2787 | version = "3.8.1"
2788 | source = "registry+https://github.com/rust-lang/crates.io-index"
2789 | checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2"
2790 | dependencies = [
2791 | "darling",
2792 | "proc-macro2",
2793 | "quote",
2794 | "syn 2.0.60",
2795 | ]
2796 |
2797 | [[package]]
2798 | name = "serialize-to-javascript"
2799 | version = "0.1.1"
2800 | source = "registry+https://github.com/rust-lang/crates.io-index"
2801 | checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb"
2802 | dependencies = [
2803 | "serde",
2804 | "serde_json",
2805 | "serialize-to-javascript-impl",
2806 | ]
2807 |
2808 | [[package]]
2809 | name = "serialize-to-javascript-impl"
2810 | version = "0.1.1"
2811 | source = "registry+https://github.com/rust-lang/crates.io-index"
2812 | checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763"
2813 | dependencies = [
2814 | "proc-macro2",
2815 | "quote",
2816 | "syn 1.0.109",
2817 | ]
2818 |
2819 | [[package]]
2820 | name = "servo_arc"
2821 | version = "0.1.1"
2822 | source = "registry+https://github.com/rust-lang/crates.io-index"
2823 | checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432"
2824 | dependencies = [
2825 | "nodrop",
2826 | "stable_deref_trait",
2827 | ]
2828 |
2829 | [[package]]
2830 | name = "sha2"
2831 | version = "0.10.8"
2832 | source = "registry+https://github.com/rust-lang/crates.io-index"
2833 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
2834 | dependencies = [
2835 | "cfg-if",
2836 | "cpufeatures",
2837 | "digest",
2838 | ]
2839 |
2840 | [[package]]
2841 | name = "sharded-slab"
2842 | version = "0.1.7"
2843 | source = "registry+https://github.com/rust-lang/crates.io-index"
2844 | checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
2845 | dependencies = [
2846 | "lazy_static",
2847 | ]
2848 |
2849 | [[package]]
2850 | name = "simd-adler32"
2851 | version = "0.3.7"
2852 | source = "registry+https://github.com/rust-lang/crates.io-index"
2853 | checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
2854 |
2855 | [[package]]
2856 | name = "simdutf8"
2857 | version = "0.1.4"
2858 | source = "registry+https://github.com/rust-lang/crates.io-index"
2859 | checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a"
2860 |
2861 | [[package]]
2862 | name = "siphasher"
2863 | version = "0.3.11"
2864 | source = "registry+https://github.com/rust-lang/crates.io-index"
2865 | checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
2866 |
2867 | [[package]]
2868 | name = "slab"
2869 | version = "0.4.9"
2870 | source = "registry+https://github.com/rust-lang/crates.io-index"
2871 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
2872 | dependencies = [
2873 | "autocfg",
2874 | ]
2875 |
2876 | [[package]]
2877 | name = "smallvec"
2878 | version = "1.13.2"
2879 | source = "registry+https://github.com/rust-lang/crates.io-index"
2880 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
2881 |
2882 | [[package]]
2883 | name = "soup2"
2884 | version = "0.2.1"
2885 | source = "registry+https://github.com/rust-lang/crates.io-index"
2886 | checksum = "b2b4d76501d8ba387cf0fefbe055c3e0a59891d09f0f995ae4e4b16f6b60f3c0"
2887 | dependencies = [
2888 | "bitflags 1.3.2",
2889 | "gio",
2890 | "glib",
2891 | "libc",
2892 | "once_cell",
2893 | "soup2-sys",
2894 | ]
2895 |
2896 | [[package]]
2897 | name = "soup2-sys"
2898 | version = "0.2.0"
2899 | source = "registry+https://github.com/rust-lang/crates.io-index"
2900 | checksum = "009ef427103fcb17f802871647a7fa6c60cbb654b4c4e4c0ac60a31c5f6dc9cf"
2901 | dependencies = [
2902 | "bitflags 1.3.2",
2903 | "gio-sys",
2904 | "glib-sys",
2905 | "gobject-sys",
2906 | "libc",
2907 | "system-deps 5.0.0",
2908 | ]
2909 |
2910 | [[package]]
2911 | name = "stable_deref_trait"
2912 | version = "1.2.0"
2913 | source = "registry+https://github.com/rust-lang/crates.io-index"
2914 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
2915 |
2916 | [[package]]
2917 | name = "state"
2918 | version = "0.5.3"
2919 | source = "registry+https://github.com/rust-lang/crates.io-index"
2920 | checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b"
2921 | dependencies = [
2922 | "loom",
2923 | ]
2924 |
2925 | [[package]]
2926 | name = "string_cache"
2927 | version = "0.8.7"
2928 | source = "registry+https://github.com/rust-lang/crates.io-index"
2929 | checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
2930 | dependencies = [
2931 | "new_debug_unreachable",
2932 | "once_cell",
2933 | "parking_lot",
2934 | "phf_shared 0.10.0",
2935 | "precomputed-hash",
2936 | "serde",
2937 | ]
2938 |
2939 | [[package]]
2940 | name = "string_cache_codegen"
2941 | version = "0.5.2"
2942 | source = "registry+https://github.com/rust-lang/crates.io-index"
2943 | checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
2944 | dependencies = [
2945 | "phf_generator 0.10.0",
2946 | "phf_shared 0.10.0",
2947 | "proc-macro2",
2948 | "quote",
2949 | ]
2950 |
2951 | [[package]]
2952 | name = "strsim"
2953 | version = "0.10.0"
2954 | source = "registry+https://github.com/rust-lang/crates.io-index"
2955 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
2956 |
2957 | [[package]]
2958 | name = "syn"
2959 | version = "1.0.109"
2960 | source = "registry+https://github.com/rust-lang/crates.io-index"
2961 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
2962 | dependencies = [
2963 | "proc-macro2",
2964 | "quote",
2965 | "unicode-ident",
2966 | ]
2967 |
2968 | [[package]]
2969 | name = "syn"
2970 | version = "2.0.60"
2971 | source = "registry+https://github.com/rust-lang/crates.io-index"
2972 | checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3"
2973 | dependencies = [
2974 | "proc-macro2",
2975 | "quote",
2976 | "unicode-ident",
2977 | ]
2978 |
2979 | [[package]]
2980 | name = "syn_derive"
2981 | version = "0.1.8"
2982 | source = "registry+https://github.com/rust-lang/crates.io-index"
2983 | checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b"
2984 | dependencies = [
2985 | "proc-macro-error",
2986 | "proc-macro2",
2987 | "quote",
2988 | "syn 2.0.60",
2989 | ]
2990 |
2991 | [[package]]
2992 | name = "system-deps"
2993 | version = "5.0.0"
2994 | source = "registry+https://github.com/rust-lang/crates.io-index"
2995 | checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e"
2996 | dependencies = [
2997 | "cfg-expr 0.9.1",
2998 | "heck 0.3.3",
2999 | "pkg-config",
3000 | "toml 0.5.11",
3001 | "version-compare 0.0.11",
3002 | ]
3003 |
3004 | [[package]]
3005 | name = "system-deps"
3006 | version = "6.2.2"
3007 | source = "registry+https://github.com/rust-lang/crates.io-index"
3008 | checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349"
3009 | dependencies = [
3010 | "cfg-expr 0.15.8",
3011 | "heck 0.5.0",
3012 | "pkg-config",
3013 | "toml 0.8.12",
3014 | "version-compare 0.2.0",
3015 | ]
3016 |
3017 | [[package]]
3018 | name = "tao"
3019 | version = "0.16.9"
3020 | source = "registry+https://github.com/rust-lang/crates.io-index"
3021 | checksum = "575c856fc21e551074869dcfaad8f706412bd5b803dfa0fbf6881c4ff4bfafab"
3022 | dependencies = [
3023 | "bitflags 1.3.2",
3024 | "cairo-rs",
3025 | "cc",
3026 | "cocoa 0.24.1",
3027 | "core-foundation",
3028 | "core-graphics 0.22.3",
3029 | "crossbeam-channel",
3030 | "dirs-next",
3031 | "dispatch",
3032 | "gdk",
3033 | "gdk-pixbuf",
3034 | "gdk-sys",
3035 | "gdkwayland-sys",
3036 | "gdkx11-sys",
3037 | "gio",
3038 | "glib",
3039 | "glib-sys",
3040 | "gtk",
3041 | "image",
3042 | "instant",
3043 | "jni",
3044 | "lazy_static",
3045 | "libappindicator",
3046 | "libc",
3047 | "log",
3048 | "ndk",
3049 | "ndk-context",
3050 | "ndk-sys",
3051 | "objc",
3052 | "once_cell",
3053 | "parking_lot",
3054 | "png",
3055 | "raw-window-handle",
3056 | "scopeguard",
3057 | "serde",
3058 | "tao-macros",
3059 | "unicode-segmentation",
3060 | "uuid",
3061 | "windows 0.39.0",
3062 | "windows-implement",
3063 | "x11-dl",
3064 | ]
3065 |
3066 | [[package]]
3067 | name = "tao-macros"
3068 | version = "0.1.2"
3069 | source = "registry+https://github.com/rust-lang/crates.io-index"
3070 | checksum = "ec114582505d158b669b136e6851f85840c109819d77c42bb7c0709f727d18c2"
3071 | dependencies = [
3072 | "proc-macro2",
3073 | "quote",
3074 | "syn 1.0.109",
3075 | ]
3076 |
3077 | [[package]]
3078 | name = "tap"
3079 | version = "1.0.1"
3080 | source = "registry+https://github.com/rust-lang/crates.io-index"
3081 | checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
3082 |
3083 | [[package]]
3084 | name = "tar"
3085 | version = "0.4.40"
3086 | source = "registry+https://github.com/rust-lang/crates.io-index"
3087 | checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb"
3088 | dependencies = [
3089 | "filetime",
3090 | "libc",
3091 | "xattr",
3092 | ]
3093 |
3094 | [[package]]
3095 | name = "target-lexicon"
3096 | version = "0.12.14"
3097 | source = "registry+https://github.com/rust-lang/crates.io-index"
3098 | checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f"
3099 |
3100 | [[package]]
3101 | name = "tauri"
3102 | version = "1.6.8"
3103 | source = "registry+https://github.com/rust-lang/crates.io-index"
3104 | checksum = "77567d2b3b74de4588d544147142d02297f3eaa171a25a065252141d8597a516"
3105 | dependencies = [
3106 | "anyhow",
3107 | "cocoa 0.24.1",
3108 | "dirs-next",
3109 | "dunce",
3110 | "embed_plist",
3111 | "encoding_rs",
3112 | "flate2",
3113 | "futures-util",
3114 | "getrandom 0.2.14",
3115 | "glib",
3116 | "glob",
3117 | "gtk",
3118 | "heck 0.5.0",
3119 | "http",
3120 | "ignore",
3121 | "objc",
3122 | "once_cell",
3123 | "open",
3124 | "percent-encoding",
3125 | "rand 0.8.5",
3126 | "raw-window-handle",
3127 | "regex",
3128 | "semver",
3129 | "serde",
3130 | "serde_json",
3131 | "serde_repr",
3132 | "serialize-to-javascript",
3133 | "state",
3134 | "tar",
3135 | "tauri-macros",
3136 | "tauri-runtime",
3137 | "tauri-runtime-wry",
3138 | "tauri-utils",
3139 | "tempfile",
3140 | "thiserror",
3141 | "tokio",
3142 | "url",
3143 | "uuid",
3144 | "webkit2gtk",
3145 | "webview2-com",
3146 | "windows 0.39.0",
3147 | ]
3148 |
3149 | [[package]]
3150 | name = "tauri-build"
3151 | version = "1.5.2"
3152 | source = "registry+https://github.com/rust-lang/crates.io-index"
3153 | checksum = "ab30cba12974d0f9b09794f61e72cad6da2142d3ceb81e519321bab86ce53312"
3154 | dependencies = [
3155 | "anyhow",
3156 | "cargo_toml",
3157 | "dirs-next",
3158 | "heck 0.5.0",
3159 | "json-patch",
3160 | "semver",
3161 | "serde",
3162 | "serde_json",
3163 | "tauri-utils",
3164 | "tauri-winres",
3165 | "walkdir",
3166 | ]
3167 |
3168 | [[package]]
3169 | name = "tauri-codegen"
3170 | version = "1.4.3"
3171 | source = "registry+https://github.com/rust-lang/crates.io-index"
3172 | checksum = "c3a1d90db526a8cdfd54444ad3f34d8d4d58fa5c536463915942393743bd06f8"
3173 | dependencies = [
3174 | "base64 0.21.7",
3175 | "brotli",
3176 | "ico",
3177 | "json-patch",
3178 | "plist",
3179 | "png",
3180 | "proc-macro2",
3181 | "quote",
3182 | "regex",
3183 | "semver",
3184 | "serde",
3185 | "serde_json",
3186 | "sha2",
3187 | "tauri-utils",
3188 | "thiserror",
3189 | "time",
3190 | "uuid",
3191 | "walkdir",
3192 | ]
3193 |
3194 | [[package]]
3195 | name = "tauri-macros"
3196 | version = "1.4.4"
3197 | source = "registry+https://github.com/rust-lang/crates.io-index"
3198 | checksum = "6a582d75414250122e4a597b9dd7d3c910a2c77906648fc2ac9353845ff0feec"
3199 | dependencies = [
3200 | "heck 0.5.0",
3201 | "proc-macro2",
3202 | "quote",
3203 | "syn 1.0.109",
3204 | "tauri-codegen",
3205 | "tauri-utils",
3206 | ]
3207 |
3208 | [[package]]
3209 | name = "tauri-plugin-autostart"
3210 | version = "0.0.0"
3211 | source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#9fa0be8b42df7b2fd89e504b38f2da2bf31008ca"
3212 | dependencies = [
3213 | "auto-launch",
3214 | "log",
3215 | "serde",
3216 | "serde_json",
3217 | "tauri",
3218 | "thiserror",
3219 | ]
3220 |
3221 | [[package]]
3222 | name = "tauri-plugin-log"
3223 | version = "0.0.0"
3224 | source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#9fa0be8b42df7b2fd89e504b38f2da2bf31008ca"
3225 | dependencies = [
3226 | "byte-unit",
3227 | "fern",
3228 | "log",
3229 | "serde",
3230 | "serde_json",
3231 | "serde_repr",
3232 | "tauri",
3233 | "time",
3234 | ]
3235 |
3236 | [[package]]
3237 | name = "tauri-runtime"
3238 | version = "0.14.3"
3239 | source = "registry+https://github.com/rust-lang/crates.io-index"
3240 | checksum = "cd7ffddf36d450791018e63a3ddf54979b9581d9644c584a5fb5611e6b5f20b4"
3241 | dependencies = [
3242 | "gtk",
3243 | "http",
3244 | "http-range",
3245 | "rand 0.8.5",
3246 | "raw-window-handle",
3247 | "serde",
3248 | "serde_json",
3249 | "tauri-utils",
3250 | "thiserror",
3251 | "url",
3252 | "uuid",
3253 | "webview2-com",
3254 | "windows 0.39.0",
3255 | ]
3256 |
3257 | [[package]]
3258 | name = "tauri-runtime-wry"
3259 | version = "0.14.8"
3260 | source = "registry+https://github.com/rust-lang/crates.io-index"
3261 | checksum = "1989b3b4d611f5428b3414a4abae6fa6df30c7eb8ed33250ca90a5f7e5bb3655"
3262 | dependencies = [
3263 | "cocoa 0.24.1",
3264 | "gtk",
3265 | "percent-encoding",
3266 | "rand 0.8.5",
3267 | "raw-window-handle",
3268 | "tauri-runtime",
3269 | "tauri-utils",
3270 | "uuid",
3271 | "webkit2gtk",
3272 | "webview2-com",
3273 | "windows 0.39.0",
3274 | "wry",
3275 | ]
3276 |
3277 | [[package]]
3278 | name = "tauri-utils"
3279 | version = "1.5.4"
3280 | source = "registry+https://github.com/rust-lang/crates.io-index"
3281 | checksum = "450b17a7102e5d46d4bdabae0d1590fd27953e704e691fc081f06c06d2253b35"
3282 | dependencies = [
3283 | "brotli",
3284 | "ctor",
3285 | "dunce",
3286 | "glob",
3287 | "heck 0.5.0",
3288 | "html5ever",
3289 | "infer",
3290 | "json-patch",
3291 | "kuchikiki",
3292 | "log",
3293 | "memchr",
3294 | "phf 0.11.2",
3295 | "proc-macro2",
3296 | "quote",
3297 | "semver",
3298 | "serde",
3299 | "serde_json",
3300 | "serde_with",
3301 | "thiserror",
3302 | "url",
3303 | "walkdir",
3304 | "windows-version",
3305 | ]
3306 |
3307 | [[package]]
3308 | name = "tauri-winres"
3309 | version = "0.1.1"
3310 | source = "registry+https://github.com/rust-lang/crates.io-index"
3311 | checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb"
3312 | dependencies = [
3313 | "embed-resource",
3314 | "toml 0.7.8",
3315 | ]
3316 |
3317 | [[package]]
3318 | name = "tempfile"
3319 | version = "3.10.1"
3320 | source = "registry+https://github.com/rust-lang/crates.io-index"
3321 | checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1"
3322 | dependencies = [
3323 | "cfg-if",
3324 | "fastrand",
3325 | "rustix",
3326 | "windows-sys 0.52.0",
3327 | ]
3328 |
3329 | [[package]]
3330 | name = "tendril"
3331 | version = "0.4.3"
3332 | source = "registry+https://github.com/rust-lang/crates.io-index"
3333 | checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
3334 | dependencies = [
3335 | "futf",
3336 | "mac",
3337 | "utf-8",
3338 | ]
3339 |
3340 | [[package]]
3341 | name = "thin-slice"
3342 | version = "0.1.1"
3343 | source = "registry+https://github.com/rust-lang/crates.io-index"
3344 | checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c"
3345 |
3346 | [[package]]
3347 | name = "thiserror"
3348 | version = "1.0.59"
3349 | source = "registry+https://github.com/rust-lang/crates.io-index"
3350 | checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa"
3351 | dependencies = [
3352 | "thiserror-impl",
3353 | ]
3354 |
3355 | [[package]]
3356 | name = "thiserror-impl"
3357 | version = "1.0.59"
3358 | source = "registry+https://github.com/rust-lang/crates.io-index"
3359 | checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66"
3360 | dependencies = [
3361 | "proc-macro2",
3362 | "quote",
3363 | "syn 2.0.60",
3364 | ]
3365 |
3366 | [[package]]
3367 | name = "thread_local"
3368 | version = "1.1.8"
3369 | source = "registry+https://github.com/rust-lang/crates.io-index"
3370 | checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c"
3371 | dependencies = [
3372 | "cfg-if",
3373 | "once_cell",
3374 | ]
3375 |
3376 | [[package]]
3377 | name = "time"
3378 | version = "0.3.36"
3379 | source = "registry+https://github.com/rust-lang/crates.io-index"
3380 | checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
3381 | dependencies = [
3382 | "deranged",
3383 | "itoa 1.0.11",
3384 | "libc",
3385 | "num-conv",
3386 | "num_threads",
3387 | "powerfmt",
3388 | "serde",
3389 | "time-core",
3390 | "time-macros",
3391 | ]
3392 |
3393 | [[package]]
3394 | name = "time-core"
3395 | version = "0.1.2"
3396 | source = "registry+https://github.com/rust-lang/crates.io-index"
3397 | checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
3398 |
3399 | [[package]]
3400 | name = "time-macros"
3401 | version = "0.2.18"
3402 | source = "registry+https://github.com/rust-lang/crates.io-index"
3403 | checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf"
3404 | dependencies = [
3405 | "num-conv",
3406 | "time-core",
3407 | ]
3408 |
3409 | [[package]]
3410 | name = "tinyvec"
3411 | version = "1.6.0"
3412 | source = "registry+https://github.com/rust-lang/crates.io-index"
3413 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
3414 | dependencies = [
3415 | "tinyvec_macros",
3416 | ]
3417 |
3418 | [[package]]
3419 | name = "tinyvec_macros"
3420 | version = "0.1.1"
3421 | source = "registry+https://github.com/rust-lang/crates.io-index"
3422 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
3423 |
3424 | [[package]]
3425 | name = "tokio"
3426 | version = "1.38.0"
3427 | source = "registry+https://github.com/rust-lang/crates.io-index"
3428 | checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a"
3429 | dependencies = [
3430 | "backtrace",
3431 | "bytes",
3432 | "num_cpus",
3433 | "pin-project-lite",
3434 | ]
3435 |
3436 | [[package]]
3437 | name = "toml"
3438 | version = "0.5.11"
3439 | source = "registry+https://github.com/rust-lang/crates.io-index"
3440 | checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
3441 | dependencies = [
3442 | "serde",
3443 | ]
3444 |
3445 | [[package]]
3446 | name = "toml"
3447 | version = "0.7.8"
3448 | source = "registry+https://github.com/rust-lang/crates.io-index"
3449 | checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257"
3450 | dependencies = [
3451 | "serde",
3452 | "serde_spanned",
3453 | "toml_datetime",
3454 | "toml_edit 0.19.15",
3455 | ]
3456 |
3457 | [[package]]
3458 | name = "toml"
3459 | version = "0.8.12"
3460 | source = "registry+https://github.com/rust-lang/crates.io-index"
3461 | checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3"
3462 | dependencies = [
3463 | "serde",
3464 | "serde_spanned",
3465 | "toml_datetime",
3466 | "toml_edit 0.22.12",
3467 | ]
3468 |
3469 | [[package]]
3470 | name = "toml_datetime"
3471 | version = "0.6.5"
3472 | source = "registry+https://github.com/rust-lang/crates.io-index"
3473 | checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
3474 | dependencies = [
3475 | "serde",
3476 | ]
3477 |
3478 | [[package]]
3479 | name = "toml_edit"
3480 | version = "0.19.15"
3481 | source = "registry+https://github.com/rust-lang/crates.io-index"
3482 | checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
3483 | dependencies = [
3484 | "indexmap 2.2.6",
3485 | "serde",
3486 | "serde_spanned",
3487 | "toml_datetime",
3488 | "winnow 0.5.40",
3489 | ]
3490 |
3491 | [[package]]
3492 | name = "toml_edit"
3493 | version = "0.21.1"
3494 | source = "registry+https://github.com/rust-lang/crates.io-index"
3495 | checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1"
3496 | dependencies = [
3497 | "indexmap 2.2.6",
3498 | "toml_datetime",
3499 | "winnow 0.5.40",
3500 | ]
3501 |
3502 | [[package]]
3503 | name = "toml_edit"
3504 | version = "0.22.12"
3505 | source = "registry+https://github.com/rust-lang/crates.io-index"
3506 | checksum = "d3328d4f68a705b2a4498da1d580585d39a6510f98318a2cec3018a7ec61ddef"
3507 | dependencies = [
3508 | "indexmap 2.2.6",
3509 | "serde",
3510 | "serde_spanned",
3511 | "toml_datetime",
3512 | "winnow 0.6.7",
3513 | ]
3514 |
3515 | [[package]]
3516 | name = "tracing"
3517 | version = "0.1.40"
3518 | source = "registry+https://github.com/rust-lang/crates.io-index"
3519 | checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
3520 | dependencies = [
3521 | "pin-project-lite",
3522 | "tracing-attributes",
3523 | "tracing-core",
3524 | ]
3525 |
3526 | [[package]]
3527 | name = "tracing-attributes"
3528 | version = "0.1.27"
3529 | source = "registry+https://github.com/rust-lang/crates.io-index"
3530 | checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
3531 | dependencies = [
3532 | "proc-macro2",
3533 | "quote",
3534 | "syn 2.0.60",
3535 | ]
3536 |
3537 | [[package]]
3538 | name = "tracing-core"
3539 | version = "0.1.32"
3540 | source = "registry+https://github.com/rust-lang/crates.io-index"
3541 | checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
3542 | dependencies = [
3543 | "once_cell",
3544 | "valuable",
3545 | ]
3546 |
3547 | [[package]]
3548 | name = "tracing-log"
3549 | version = "0.2.0"
3550 | source = "registry+https://github.com/rust-lang/crates.io-index"
3551 | checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
3552 | dependencies = [
3553 | "log",
3554 | "once_cell",
3555 | "tracing-core",
3556 | ]
3557 |
3558 | [[package]]
3559 | name = "tracing-subscriber"
3560 | version = "0.3.18"
3561 | source = "registry+https://github.com/rust-lang/crates.io-index"
3562 | checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
3563 | dependencies = [
3564 | "matchers",
3565 | "nu-ansi-term",
3566 | "once_cell",
3567 | "regex",
3568 | "sharded-slab",
3569 | "smallvec",
3570 | "thread_local",
3571 | "tracing",
3572 | "tracing-core",
3573 | "tracing-log",
3574 | ]
3575 |
3576 | [[package]]
3577 | name = "treediff"
3578 | version = "4.0.3"
3579 | source = "registry+https://github.com/rust-lang/crates.io-index"
3580 | checksum = "4d127780145176e2b5d16611cc25a900150e86e9fd79d3bde6ff3a37359c9cb5"
3581 | dependencies = [
3582 | "serde_json",
3583 | ]
3584 |
3585 | [[package]]
3586 | name = "typenum"
3587 | version = "1.17.0"
3588 | source = "registry+https://github.com/rust-lang/crates.io-index"
3589 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
3590 |
3591 | [[package]]
3592 | name = "unicode-bidi"
3593 | version = "0.3.15"
3594 | source = "registry+https://github.com/rust-lang/crates.io-index"
3595 | checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75"
3596 |
3597 | [[package]]
3598 | name = "unicode-ident"
3599 | version = "1.0.12"
3600 | source = "registry+https://github.com/rust-lang/crates.io-index"
3601 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
3602 |
3603 | [[package]]
3604 | name = "unicode-normalization"
3605 | version = "0.1.23"
3606 | source = "registry+https://github.com/rust-lang/crates.io-index"
3607 | checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5"
3608 | dependencies = [
3609 | "tinyvec",
3610 | ]
3611 |
3612 | [[package]]
3613 | name = "unicode-segmentation"
3614 | version = "1.11.0"
3615 | source = "registry+https://github.com/rust-lang/crates.io-index"
3616 | checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202"
3617 |
3618 | [[package]]
3619 | name = "url"
3620 | version = "2.5.2"
3621 | source = "registry+https://github.com/rust-lang/crates.io-index"
3622 | checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c"
3623 | dependencies = [
3624 | "form_urlencoded",
3625 | "idna",
3626 | "percent-encoding",
3627 | "serde",
3628 | ]
3629 |
3630 | [[package]]
3631 | name = "utf-8"
3632 | version = "0.7.6"
3633 | source = "registry+https://github.com/rust-lang/crates.io-index"
3634 | checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
3635 |
3636 | [[package]]
3637 | name = "utf8-width"
3638 | version = "0.1.7"
3639 | source = "registry+https://github.com/rust-lang/crates.io-index"
3640 | checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3"
3641 |
3642 | [[package]]
3643 | name = "uuid"
3644 | version = "1.8.0"
3645 | source = "registry+https://github.com/rust-lang/crates.io-index"
3646 | checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0"
3647 | dependencies = [
3648 | "getrandom 0.2.14",
3649 | ]
3650 |
3651 | [[package]]
3652 | name = "valuable"
3653 | version = "0.1.0"
3654 | source = "registry+https://github.com/rust-lang/crates.io-index"
3655 | checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
3656 |
3657 | [[package]]
3658 | name = "value-bag"
3659 | version = "1.8.1"
3660 | source = "registry+https://github.com/rust-lang/crates.io-index"
3661 | checksum = "74797339c3b98616c009c7c3eb53a0ce41e85c8ec66bd3db96ed132d20cfdee8"
3662 |
3663 | [[package]]
3664 | name = "version-compare"
3665 | version = "0.0.11"
3666 | source = "registry+https://github.com/rust-lang/crates.io-index"
3667 | checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b"
3668 |
3669 | [[package]]
3670 | name = "version-compare"
3671 | version = "0.2.0"
3672 | source = "registry+https://github.com/rust-lang/crates.io-index"
3673 | checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"
3674 |
3675 | [[package]]
3676 | name = "version_check"
3677 | version = "0.9.4"
3678 | source = "registry+https://github.com/rust-lang/crates.io-index"
3679 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
3680 |
3681 | [[package]]
3682 | name = "vswhom"
3683 | version = "0.1.0"
3684 | source = "registry+https://github.com/rust-lang/crates.io-index"
3685 | checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b"
3686 | dependencies = [
3687 | "libc",
3688 | "vswhom-sys",
3689 | ]
3690 |
3691 | [[package]]
3692 | name = "vswhom-sys"
3693 | version = "0.1.2"
3694 | source = "registry+https://github.com/rust-lang/crates.io-index"
3695 | checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18"
3696 | dependencies = [
3697 | "cc",
3698 | "libc",
3699 | ]
3700 |
3701 | [[package]]
3702 | name = "walkdir"
3703 | version = "2.5.0"
3704 | source = "registry+https://github.com/rust-lang/crates.io-index"
3705 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
3706 | dependencies = [
3707 | "same-file",
3708 | "winapi-util",
3709 | ]
3710 |
3711 | [[package]]
3712 | name = "wasi"
3713 | version = "0.9.0+wasi-snapshot-preview1"
3714 | source = "registry+https://github.com/rust-lang/crates.io-index"
3715 | checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
3716 |
3717 | [[package]]
3718 | name = "wasi"
3719 | version = "0.11.0+wasi-snapshot-preview1"
3720 | source = "registry+https://github.com/rust-lang/crates.io-index"
3721 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
3722 |
3723 | [[package]]
3724 | name = "wasm-bindgen"
3725 | version = "0.2.92"
3726 | source = "registry+https://github.com/rust-lang/crates.io-index"
3727 | checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
3728 | dependencies = [
3729 | "cfg-if",
3730 | "wasm-bindgen-macro",
3731 | ]
3732 |
3733 | [[package]]
3734 | name = "wasm-bindgen-backend"
3735 | version = "0.2.92"
3736 | source = "registry+https://github.com/rust-lang/crates.io-index"
3737 | checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
3738 | dependencies = [
3739 | "bumpalo",
3740 | "log",
3741 | "once_cell",
3742 | "proc-macro2",
3743 | "quote",
3744 | "syn 2.0.60",
3745 | "wasm-bindgen-shared",
3746 | ]
3747 |
3748 | [[package]]
3749 | name = "wasm-bindgen-macro"
3750 | version = "0.2.92"
3751 | source = "registry+https://github.com/rust-lang/crates.io-index"
3752 | checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
3753 | dependencies = [
3754 | "quote",
3755 | "wasm-bindgen-macro-support",
3756 | ]
3757 |
3758 | [[package]]
3759 | name = "wasm-bindgen-macro-support"
3760 | version = "0.2.92"
3761 | source = "registry+https://github.com/rust-lang/crates.io-index"
3762 | checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
3763 | dependencies = [
3764 | "proc-macro2",
3765 | "quote",
3766 | "syn 2.0.60",
3767 | "wasm-bindgen-backend",
3768 | "wasm-bindgen-shared",
3769 | ]
3770 |
3771 | [[package]]
3772 | name = "wasm-bindgen-shared"
3773 | version = "0.2.92"
3774 | source = "registry+https://github.com/rust-lang/crates.io-index"
3775 | checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
3776 |
3777 | [[package]]
3778 | name = "webkit2gtk"
3779 | version = "0.18.2"
3780 | source = "registry+https://github.com/rust-lang/crates.io-index"
3781 | checksum = "b8f859735e4a452aeb28c6c56a852967a8a76c8eb1cc32dbf931ad28a13d6370"
3782 | dependencies = [
3783 | "bitflags 1.3.2",
3784 | "cairo-rs",
3785 | "gdk",
3786 | "gdk-sys",
3787 | "gio",
3788 | "gio-sys",
3789 | "glib",
3790 | "glib-sys",
3791 | "gobject-sys",
3792 | "gtk",
3793 | "gtk-sys",
3794 | "javascriptcore-rs",
3795 | "libc",
3796 | "once_cell",
3797 | "soup2",
3798 | "webkit2gtk-sys",
3799 | ]
3800 |
3801 | [[package]]
3802 | name = "webkit2gtk-sys"
3803 | version = "0.18.0"
3804 | source = "registry+https://github.com/rust-lang/crates.io-index"
3805 | checksum = "4d76ca6ecc47aeba01ec61e480139dda143796abcae6f83bcddf50d6b5b1dcf3"
3806 | dependencies = [
3807 | "atk-sys",
3808 | "bitflags 1.3.2",
3809 | "cairo-sys-rs",
3810 | "gdk-pixbuf-sys",
3811 | "gdk-sys",
3812 | "gio-sys",
3813 | "glib-sys",
3814 | "gobject-sys",
3815 | "gtk-sys",
3816 | "javascriptcore-rs-sys",
3817 | "libc",
3818 | "pango-sys",
3819 | "pkg-config",
3820 | "soup2-sys",
3821 | "system-deps 6.2.2",
3822 | ]
3823 |
3824 | [[package]]
3825 | name = "webview2-com"
3826 | version = "0.19.1"
3827 | source = "registry+https://github.com/rust-lang/crates.io-index"
3828 | checksum = "b4a769c9f1a64a8734bde70caafac2b96cada12cd4aefa49196b3a386b8b4178"
3829 | dependencies = [
3830 | "webview2-com-macros",
3831 | "webview2-com-sys",
3832 | "windows 0.39.0",
3833 | "windows-implement",
3834 | ]
3835 |
3836 | [[package]]
3837 | name = "webview2-com-macros"
3838 | version = "0.6.0"
3839 | source = "registry+https://github.com/rust-lang/crates.io-index"
3840 | checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac"
3841 | dependencies = [
3842 | "proc-macro2",
3843 | "quote",
3844 | "syn 1.0.109",
3845 | ]
3846 |
3847 | [[package]]
3848 | name = "webview2-com-sys"
3849 | version = "0.19.0"
3850 | source = "registry+https://github.com/rust-lang/crates.io-index"
3851 | checksum = "aac48ef20ddf657755fdcda8dfed2a7b4fc7e4581acce6fe9b88c3d64f29dee7"
3852 | dependencies = [
3853 | "regex",
3854 | "serde",
3855 | "serde_json",
3856 | "thiserror",
3857 | "windows 0.39.0",
3858 | "windows-bindgen",
3859 | "windows-metadata",
3860 | ]
3861 |
3862 | [[package]]
3863 | name = "winapi"
3864 | version = "0.3.9"
3865 | source = "registry+https://github.com/rust-lang/crates.io-index"
3866 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
3867 | dependencies = [
3868 | "winapi-i686-pc-windows-gnu",
3869 | "winapi-x86_64-pc-windows-gnu",
3870 | ]
3871 |
3872 | [[package]]
3873 | name = "winapi-i686-pc-windows-gnu"
3874 | version = "0.4.0"
3875 | source = "registry+https://github.com/rust-lang/crates.io-index"
3876 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
3877 |
3878 | [[package]]
3879 | name = "winapi-util"
3880 | version = "0.1.8"
3881 | source = "registry+https://github.com/rust-lang/crates.io-index"
3882 | checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b"
3883 | dependencies = [
3884 | "windows-sys 0.52.0",
3885 | ]
3886 |
3887 | [[package]]
3888 | name = "winapi-x86_64-pc-windows-gnu"
3889 | version = "0.4.0"
3890 | source = "registry+https://github.com/rust-lang/crates.io-index"
3891 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
3892 |
3893 | [[package]]
3894 | name = "windows"
3895 | version = "0.39.0"
3896 | source = "registry+https://github.com/rust-lang/crates.io-index"
3897 | checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a"
3898 | dependencies = [
3899 | "windows-implement",
3900 | "windows_aarch64_msvc 0.39.0",
3901 | "windows_i686_gnu 0.39.0",
3902 | "windows_i686_msvc 0.39.0",
3903 | "windows_x86_64_gnu 0.39.0",
3904 | "windows_x86_64_msvc 0.39.0",
3905 | ]
3906 |
3907 | [[package]]
3908 | name = "windows"
3909 | version = "0.48.0"
3910 | source = "registry+https://github.com/rust-lang/crates.io-index"
3911 | checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
3912 | dependencies = [
3913 | "windows-targets 0.48.5",
3914 | ]
3915 |
3916 | [[package]]
3917 | name = "windows-bindgen"
3918 | version = "0.39.0"
3919 | source = "registry+https://github.com/rust-lang/crates.io-index"
3920 | checksum = "68003dbd0e38abc0fb85b939240f4bce37c43a5981d3df37ccbaaa981b47cb41"
3921 | dependencies = [
3922 | "windows-metadata",
3923 | "windows-tokens",
3924 | ]
3925 |
3926 | [[package]]
3927 | name = "windows-core"
3928 | version = "0.52.0"
3929 | source = "registry+https://github.com/rust-lang/crates.io-index"
3930 | checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
3931 | dependencies = [
3932 | "windows-targets 0.52.5",
3933 | ]
3934 |
3935 | [[package]]
3936 | name = "windows-implement"
3937 | version = "0.39.0"
3938 | source = "registry+https://github.com/rust-lang/crates.io-index"
3939 | checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7"
3940 | dependencies = [
3941 | "syn 1.0.109",
3942 | "windows-tokens",
3943 | ]
3944 |
3945 | [[package]]
3946 | name = "windows-metadata"
3947 | version = "0.39.0"
3948 | source = "registry+https://github.com/rust-lang/crates.io-index"
3949 | checksum = "9ee5e275231f07c6e240d14f34e1b635bf1faa1c76c57cfd59a5cdb9848e4278"
3950 |
3951 | [[package]]
3952 | name = "windows-sys"
3953 | version = "0.42.0"
3954 | source = "registry+https://github.com/rust-lang/crates.io-index"
3955 | checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
3956 | dependencies = [
3957 | "windows_aarch64_gnullvm 0.42.2",
3958 | "windows_aarch64_msvc 0.42.2",
3959 | "windows_i686_gnu 0.42.2",
3960 | "windows_i686_msvc 0.42.2",
3961 | "windows_x86_64_gnu 0.42.2",
3962 | "windows_x86_64_gnullvm 0.42.2",
3963 | "windows_x86_64_msvc 0.42.2",
3964 | ]
3965 |
3966 | [[package]]
3967 | name = "windows-sys"
3968 | version = "0.48.0"
3969 | source = "registry+https://github.com/rust-lang/crates.io-index"
3970 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
3971 | dependencies = [
3972 | "windows-targets 0.48.5",
3973 | ]
3974 |
3975 | [[package]]
3976 | name = "windows-sys"
3977 | version = "0.52.0"
3978 | source = "registry+https://github.com/rust-lang/crates.io-index"
3979 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
3980 | dependencies = [
3981 | "windows-targets 0.52.5",
3982 | ]
3983 |
3984 | [[package]]
3985 | name = "windows-targets"
3986 | version = "0.48.5"
3987 | source = "registry+https://github.com/rust-lang/crates.io-index"
3988 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
3989 | dependencies = [
3990 | "windows_aarch64_gnullvm 0.48.5",
3991 | "windows_aarch64_msvc 0.48.5",
3992 | "windows_i686_gnu 0.48.5",
3993 | "windows_i686_msvc 0.48.5",
3994 | "windows_x86_64_gnu 0.48.5",
3995 | "windows_x86_64_gnullvm 0.48.5",
3996 | "windows_x86_64_msvc 0.48.5",
3997 | ]
3998 |
3999 | [[package]]
4000 | name = "windows-targets"
4001 | version = "0.52.5"
4002 | source = "registry+https://github.com/rust-lang/crates.io-index"
4003 | checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
4004 | dependencies = [
4005 | "windows_aarch64_gnullvm 0.52.5",
4006 | "windows_aarch64_msvc 0.52.5",
4007 | "windows_i686_gnu 0.52.5",
4008 | "windows_i686_gnullvm",
4009 | "windows_i686_msvc 0.52.5",
4010 | "windows_x86_64_gnu 0.52.5",
4011 | "windows_x86_64_gnullvm 0.52.5",
4012 | "windows_x86_64_msvc 0.52.5",
4013 | ]
4014 |
4015 | [[package]]
4016 | name = "windows-tokens"
4017 | version = "0.39.0"
4018 | source = "registry+https://github.com/rust-lang/crates.io-index"
4019 | checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597"
4020 |
4021 | [[package]]
4022 | name = "windows-version"
4023 | version = "0.1.1"
4024 | source = "registry+https://github.com/rust-lang/crates.io-index"
4025 | checksum = "6998aa457c9ba8ff2fb9f13e9d2a930dabcea28f1d0ab94d687d8b3654844515"
4026 | dependencies = [
4027 | "windows-targets 0.52.5",
4028 | ]
4029 |
4030 | [[package]]
4031 | name = "windows_aarch64_gnullvm"
4032 | version = "0.42.2"
4033 | source = "registry+https://github.com/rust-lang/crates.io-index"
4034 | checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
4035 |
4036 | [[package]]
4037 | name = "windows_aarch64_gnullvm"
4038 | version = "0.48.5"
4039 | source = "registry+https://github.com/rust-lang/crates.io-index"
4040 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
4041 |
4042 | [[package]]
4043 | name = "windows_aarch64_gnullvm"
4044 | version = "0.52.5"
4045 | source = "registry+https://github.com/rust-lang/crates.io-index"
4046 | checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
4047 |
4048 | [[package]]
4049 | name = "windows_aarch64_msvc"
4050 | version = "0.39.0"
4051 | source = "registry+https://github.com/rust-lang/crates.io-index"
4052 | checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2"
4053 |
4054 | [[package]]
4055 | name = "windows_aarch64_msvc"
4056 | version = "0.42.2"
4057 | source = "registry+https://github.com/rust-lang/crates.io-index"
4058 | checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
4059 |
4060 | [[package]]
4061 | name = "windows_aarch64_msvc"
4062 | version = "0.48.5"
4063 | source = "registry+https://github.com/rust-lang/crates.io-index"
4064 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
4065 |
4066 | [[package]]
4067 | name = "windows_aarch64_msvc"
4068 | version = "0.52.5"
4069 | source = "registry+https://github.com/rust-lang/crates.io-index"
4070 | checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
4071 |
4072 | [[package]]
4073 | name = "windows_i686_gnu"
4074 | version = "0.39.0"
4075 | source = "registry+https://github.com/rust-lang/crates.io-index"
4076 | checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b"
4077 |
4078 | [[package]]
4079 | name = "windows_i686_gnu"
4080 | version = "0.42.2"
4081 | source = "registry+https://github.com/rust-lang/crates.io-index"
4082 | checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
4083 |
4084 | [[package]]
4085 | name = "windows_i686_gnu"
4086 | version = "0.48.5"
4087 | source = "registry+https://github.com/rust-lang/crates.io-index"
4088 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
4089 |
4090 | [[package]]
4091 | name = "windows_i686_gnu"
4092 | version = "0.52.5"
4093 | source = "registry+https://github.com/rust-lang/crates.io-index"
4094 | checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
4095 |
4096 | [[package]]
4097 | name = "windows_i686_gnullvm"
4098 | version = "0.52.5"
4099 | source = "registry+https://github.com/rust-lang/crates.io-index"
4100 | checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
4101 |
4102 | [[package]]
4103 | name = "windows_i686_msvc"
4104 | version = "0.39.0"
4105 | source = "registry+https://github.com/rust-lang/crates.io-index"
4106 | checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106"
4107 |
4108 | [[package]]
4109 | name = "windows_i686_msvc"
4110 | version = "0.42.2"
4111 | source = "registry+https://github.com/rust-lang/crates.io-index"
4112 | checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
4113 |
4114 | [[package]]
4115 | name = "windows_i686_msvc"
4116 | version = "0.48.5"
4117 | source = "registry+https://github.com/rust-lang/crates.io-index"
4118 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
4119 |
4120 | [[package]]
4121 | name = "windows_i686_msvc"
4122 | version = "0.52.5"
4123 | source = "registry+https://github.com/rust-lang/crates.io-index"
4124 | checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
4125 |
4126 | [[package]]
4127 | name = "windows_x86_64_gnu"
4128 | version = "0.39.0"
4129 | source = "registry+https://github.com/rust-lang/crates.io-index"
4130 | checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65"
4131 |
4132 | [[package]]
4133 | name = "windows_x86_64_gnu"
4134 | version = "0.42.2"
4135 | source = "registry+https://github.com/rust-lang/crates.io-index"
4136 | checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
4137 |
4138 | [[package]]
4139 | name = "windows_x86_64_gnu"
4140 | version = "0.48.5"
4141 | source = "registry+https://github.com/rust-lang/crates.io-index"
4142 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
4143 |
4144 | [[package]]
4145 | name = "windows_x86_64_gnu"
4146 | version = "0.52.5"
4147 | source = "registry+https://github.com/rust-lang/crates.io-index"
4148 | checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
4149 |
4150 | [[package]]
4151 | name = "windows_x86_64_gnullvm"
4152 | version = "0.42.2"
4153 | source = "registry+https://github.com/rust-lang/crates.io-index"
4154 | checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
4155 |
4156 | [[package]]
4157 | name = "windows_x86_64_gnullvm"
4158 | version = "0.48.5"
4159 | source = "registry+https://github.com/rust-lang/crates.io-index"
4160 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
4161 |
4162 | [[package]]
4163 | name = "windows_x86_64_gnullvm"
4164 | version = "0.52.5"
4165 | source = "registry+https://github.com/rust-lang/crates.io-index"
4166 | checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
4167 |
4168 | [[package]]
4169 | name = "windows_x86_64_msvc"
4170 | version = "0.39.0"
4171 | source = "registry+https://github.com/rust-lang/crates.io-index"
4172 | checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809"
4173 |
4174 | [[package]]
4175 | name = "windows_x86_64_msvc"
4176 | version = "0.42.2"
4177 | source = "registry+https://github.com/rust-lang/crates.io-index"
4178 | checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
4179 |
4180 | [[package]]
4181 | name = "windows_x86_64_msvc"
4182 | version = "0.48.5"
4183 | source = "registry+https://github.com/rust-lang/crates.io-index"
4184 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
4185 |
4186 | [[package]]
4187 | name = "windows_x86_64_msvc"
4188 | version = "0.52.5"
4189 | source = "registry+https://github.com/rust-lang/crates.io-index"
4190 | checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
4191 |
4192 | [[package]]
4193 | name = "winnow"
4194 | version = "0.5.40"
4195 | source = "registry+https://github.com/rust-lang/crates.io-index"
4196 | checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876"
4197 | dependencies = [
4198 | "memchr",
4199 | ]
4200 |
4201 | [[package]]
4202 | name = "winnow"
4203 | version = "0.6.7"
4204 | source = "registry+https://github.com/rust-lang/crates.io-index"
4205 | checksum = "14b9415ee827af173ebb3f15f9083df5a122eb93572ec28741fb153356ea2578"
4206 | dependencies = [
4207 | "memchr",
4208 | ]
4209 |
4210 | [[package]]
4211 | name = "winreg"
4212 | version = "0.10.1"
4213 | source = "registry+https://github.com/rust-lang/crates.io-index"
4214 | checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
4215 | dependencies = [
4216 | "winapi",
4217 | ]
4218 |
4219 | [[package]]
4220 | name = "winreg"
4221 | version = "0.52.0"
4222 | source = "registry+https://github.com/rust-lang/crates.io-index"
4223 | checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5"
4224 | dependencies = [
4225 | "cfg-if",
4226 | "windows-sys 0.48.0",
4227 | ]
4228 |
4229 | [[package]]
4230 | name = "wry"
4231 | version = "0.24.10"
4232 | source = "registry+https://github.com/rust-lang/crates.io-index"
4233 | checksum = "00711278ed357350d44c749c286786ecac644e044e4da410d466212152383b45"
4234 | dependencies = [
4235 | "base64 0.13.1",
4236 | "block",
4237 | "cocoa 0.24.1",
4238 | "core-graphics 0.22.3",
4239 | "crossbeam-channel",
4240 | "dunce",
4241 | "gdk",
4242 | "gio",
4243 | "glib",
4244 | "gtk",
4245 | "html5ever",
4246 | "http",
4247 | "kuchikiki",
4248 | "libc",
4249 | "log",
4250 | "objc",
4251 | "objc_id",
4252 | "once_cell",
4253 | "serde",
4254 | "serde_json",
4255 | "sha2",
4256 | "soup2",
4257 | "tao",
4258 | "thiserror",
4259 | "url",
4260 | "webkit2gtk",
4261 | "webkit2gtk-sys",
4262 | "webview2-com",
4263 | "windows 0.39.0",
4264 | "windows-implement",
4265 | ]
4266 |
4267 | [[package]]
4268 | name = "wyz"
4269 | version = "0.5.1"
4270 | source = "registry+https://github.com/rust-lang/crates.io-index"
4271 | checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
4272 | dependencies = [
4273 | "tap",
4274 | ]
4275 |
4276 | [[package]]
4277 | name = "x11"
4278 | version = "2.21.0"
4279 | source = "registry+https://github.com/rust-lang/crates.io-index"
4280 | checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e"
4281 | dependencies = [
4282 | "libc",
4283 | "pkg-config",
4284 | ]
4285 |
4286 | [[package]]
4287 | name = "x11-dl"
4288 | version = "2.21.0"
4289 | source = "registry+https://github.com/rust-lang/crates.io-index"
4290 | checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
4291 | dependencies = [
4292 | "libc",
4293 | "once_cell",
4294 | "pkg-config",
4295 | ]
4296 |
4297 | [[package]]
4298 | name = "xattr"
4299 | version = "1.3.1"
4300 | source = "registry+https://github.com/rust-lang/crates.io-index"
4301 | checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f"
4302 | dependencies = [
4303 | "libc",
4304 | "linux-raw-sys",
4305 | "rustix",
4306 | ]
4307 |
--------------------------------------------------------------------------------
/src-tauri/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "home-assistant-assist-desktop"
3 | version = "1.4.0"
4 | description = "A Tauri App"
5 | authors = ["you"]
6 | license = ""
7 | repository = ""
8 | edition = "2021"
9 |
10 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
11 |
12 | [build-dependencies]
13 | tauri-build = { version = "1.5", features = [] }
14 |
15 | [dependencies]
16 | tauri = { version = "1.6", features = [ "global-shortcut-all", "system-tray", "shell-open"] }
17 | tauri-plugin-autostart = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" }
18 | tauri-plugin-log = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" }
19 | serde = { version = "1.0", features = ["derive"] }
20 | serde_json = "1.0"
21 | dirs = "5.0.1"
22 | global-hotkey = "0.5.4"
23 | log = "^0.4"
24 | tokio = "1.38.0"
25 | url = "2.5.2"
26 | opener = "0.7.1"
27 |
28 | [features]
29 | # this feature is used for production builds or when `devPath` points to the filesystem
30 | # DO NOT REMOVE!!
31 | custom-protocol = ["tauri/custom-protocol"]
32 |
--------------------------------------------------------------------------------
/src-tauri/build.rs:
--------------------------------------------------------------------------------
1 | fn main() {
2 | tauri_build::build()
3 | }
4 |
--------------------------------------------------------------------------------
/src-tauri/icons/128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timmo001/home-assistant-assist-desktop/82ae0add1f676a612fca9a49f315b140160d6157/src-tauri/icons/128x128.png
--------------------------------------------------------------------------------
/src-tauri/icons/128x128@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timmo001/home-assistant-assist-desktop/82ae0add1f676a612fca9a49f315b140160d6157/src-tauri/icons/128x128@2x.png
--------------------------------------------------------------------------------
/src-tauri/icons/32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timmo001/home-assistant-assist-desktop/82ae0add1f676a612fca9a49f315b140160d6157/src-tauri/icons/32x32.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square107x107Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timmo001/home-assistant-assist-desktop/82ae0add1f676a612fca9a49f315b140160d6157/src-tauri/icons/Square107x107Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square142x142Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timmo001/home-assistant-assist-desktop/82ae0add1f676a612fca9a49f315b140160d6157/src-tauri/icons/Square142x142Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square150x150Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timmo001/home-assistant-assist-desktop/82ae0add1f676a612fca9a49f315b140160d6157/src-tauri/icons/Square150x150Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square284x284Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timmo001/home-assistant-assist-desktop/82ae0add1f676a612fca9a49f315b140160d6157/src-tauri/icons/Square284x284Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square30x30Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timmo001/home-assistant-assist-desktop/82ae0add1f676a612fca9a49f315b140160d6157/src-tauri/icons/Square30x30Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square310x310Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timmo001/home-assistant-assist-desktop/82ae0add1f676a612fca9a49f315b140160d6157/src-tauri/icons/Square310x310Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square44x44Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timmo001/home-assistant-assist-desktop/82ae0add1f676a612fca9a49f315b140160d6157/src-tauri/icons/Square44x44Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square71x71Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timmo001/home-assistant-assist-desktop/82ae0add1f676a612fca9a49f315b140160d6157/src-tauri/icons/Square71x71Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square89x89Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timmo001/home-assistant-assist-desktop/82ae0add1f676a612fca9a49f315b140160d6157/src-tauri/icons/Square89x89Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/StoreLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timmo001/home-assistant-assist-desktop/82ae0add1f676a612fca9a49f315b140160d6157/src-tauri/icons/StoreLogo.png
--------------------------------------------------------------------------------
/src-tauri/icons/icon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timmo001/home-assistant-assist-desktop/82ae0add1f676a612fca9a49f315b140160d6157/src-tauri/icons/icon.icns
--------------------------------------------------------------------------------
/src-tauri/icons/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timmo001/home-assistant-assist-desktop/82ae0add1f676a612fca9a49f315b140160d6157/src-tauri/icons/icon.ico
--------------------------------------------------------------------------------
/src-tauri/icons/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/timmo001/home-assistant-assist-desktop/82ae0add1f676a612fca9a49f315b140160d6157/src-tauri/icons/icon.png
--------------------------------------------------------------------------------
/src-tauri/icons/icon.svg:
--------------------------------------------------------------------------------
1 |
2 |
15 |
17 |
35 |
39 |
40 |
--------------------------------------------------------------------------------
/src-tauri/src/main.rs:
--------------------------------------------------------------------------------
1 | // Prevents additional console window on Windows in release, DO NOT REMOVE!!
2 | #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
3 |
4 | use opener::open_browser;
5 | use serde::{Deserialize, Serialize};
6 | use std::fs::File;
7 | use tauri::GlobalShortcutManager;
8 | use tauri::Manager;
9 | use tauri::SystemTray;
10 | use tauri::{CustomMenuItem, SystemTrayMenu, SystemTrayMenuItem};
11 | use tauri_plugin_autostart::MacosLauncher;
12 | use tauri_plugin_log::LogTarget;
13 | use url::Url;
14 |
15 | // Define settings
16 | #[derive(Serialize, Deserialize)]
17 | struct HomeAssistantSettings {
18 | access_token: String,
19 | host: String,
20 | port: u16,
21 | ssl: bool,
22 | }
23 |
24 | #[derive(Serialize, Deserialize)]
25 | struct TraySettings {
26 | double_click_action: String,
27 | }
28 |
29 | #[derive(Serialize, Deserialize)]
30 | struct Settings {
31 | autostart: bool,
32 | home_assistant: HomeAssistantSettings,
33 | tray: Option,
34 | }
35 |
36 | #[derive(Debug, Serialize)]
37 | struct CommandError {
38 | message: String,
39 | }
40 |
41 | impl From for CommandError {
42 | fn from(error: serde_json::Error) -> Self {
43 | CommandError {
44 | message: error.to_string(),
45 | }
46 | }
47 | }
48 |
49 | fn show_window_app(window: tauri::Window) {
50 | log::info!("Showing window...");
51 | let url = window.url().to_string();
52 | if url.contains("settings") {
53 | open_app(window);
54 | return;
55 | }
56 | window.show().expect("failed to show the window");
57 | window.set_focus().expect("failed to focus the window");
58 | window
59 | .emit("focus", {})
60 | .expect("failed to emit focus event");
61 | }
62 |
63 | // Learn more about Tauri commands at https://tauri.app/v1/guides/features/command
64 | #[tauri::command]
65 | fn open_app(window: tauri::Window) {
66 | println!("Opening app...");
67 |
68 | let current_url: String = window.url().to_string();
69 | let mut url = Url::parse(¤t_url).expect("failed to parse URL");
70 |
71 | window.show().expect("failed to show the window");
72 | window.set_focus().expect("failed to focus the window");
73 |
74 | url.set_path("/");
75 | println!("Navigating to {}", url);
76 |
77 | window
78 | .eval(&format!("window.location.href = '{}';", url))
79 | .unwrap();
80 | }
81 |
82 | #[tauri::command]
83 | fn open_settings(window: tauri::Window) {
84 | println!("Opening settings...");
85 |
86 | let current_url: String = window.url().to_string();
87 | let mut url = Url::parse(¤t_url).expect("failed to parse URL");
88 |
89 | window.show().expect("failed to show the window");
90 | window.set_focus().expect("failed to focus the window");
91 |
92 | url.set_path("/settings");
93 | println!("Navigating to {}", url);
94 |
95 | window
96 | .eval(&format!("window.location.href = '{}';", url))
97 | .unwrap();
98 | }
99 |
100 | #[tauri::command]
101 | fn load_settings(app_handle: tauri::AppHandle) -> Result {
102 | let settings_path: String = app_handle
103 | .path_resolver()
104 | .app_config_dir()
105 | .unwrap()
106 | .join("settings.json")
107 | .to_str()
108 | .unwrap()
109 | .to_string();
110 |
111 | println!("Loading settings from {}...", settings_path);
112 |
113 | // If the directory doesn't exist, create it.
114 | if !std::path::Path::new(&settings_path)
115 | .parent()
116 | .unwrap()
117 | .exists()
118 | {
119 | std::fs::create_dir_all(std::path::Path::new(&settings_path).parent().unwrap()).unwrap();
120 | }
121 |
122 | // Convert the settings path to a Path.
123 | let path: &std::path::Path = std::path::Path::new(&settings_path);
124 |
125 | // Check if the file exists.
126 | if !path.exists() {
127 | // Create the file if it doesn't exist.
128 | let file: File = File::create(path).unwrap();
129 | // Create a new Settings struct.
130 | let settings: Settings = Settings {
131 | autostart: false,
132 | home_assistant: HomeAssistantSettings {
133 | access_token: "".to_string(),
134 | host: "homeassistant.local".to_string(),
135 | port: 8123,
136 | ssl: false,
137 | },
138 | tray: Some(TraySettings {
139 | double_click_action: "toggle_window".to_string(),
140 | }),
141 | };
142 | // Serialize the Settings struct into JSON.
143 | serde_json::to_writer_pretty(file, &settings).unwrap();
144 | }
145 | // Open the file in read-only mode.
146 | let file: File = File::open(path).unwrap();
147 | // Read the JSON contents of the file as an instance of `Settings`.
148 | let mut settings: Settings = serde_json::from_reader(file)?;
149 |
150 | if settings.tray.is_none() {
151 | settings.tray = Some(TraySettings {
152 | double_click_action: "toggle_window".to_string(),
153 | });
154 | }
155 |
156 | Ok(settings)
157 | }
158 |
159 | #[tauri::command]
160 | fn update_settings(app_handle: tauri::AppHandle, settings: Settings) -> Result<(), CommandError> {
161 | let settings_path: String = app_handle
162 | .path_resolver()
163 | .app_config_dir()
164 | .unwrap()
165 | .join("settings.json")
166 | .to_str()
167 | .unwrap()
168 | .to_string();
169 |
170 | println!("Updating settings at {}...", settings_path);
171 |
172 | // Open the file in write-only mode.
173 | let file: File = File::create(settings_path).unwrap();
174 | // Serialize the Settings struct into JSON.
175 | serde_json::to_writer_pretty(file, &settings).unwrap();
176 |
177 | Ok(())
178 | }
179 |
180 | #[tauri::command]
181 | fn toggle_window(window: tauri::Window) {
182 | let window_visible = window
183 | .is_visible()
184 | .expect("failed to check if the window is visible");
185 | println!("Window visible: {}", window_visible);
186 | if window_visible {
187 | println!("Hiding window...");
188 | window.hide().expect("failed to hide the window");
189 | } else {
190 | show_window_app(window.clone());
191 | }
192 | }
193 |
194 | #[tauri::command]
195 | fn trigger_voice_pipeline(window: tauri::Window) {
196 | if !window
197 | .is_visible()
198 | .expect("failed to check if the window is visible")
199 | {
200 | show_window_app(window.clone());
201 | }
202 |
203 | log::info!("Triggering voice pipeline...");
204 | window
205 | .emit("trigger-voice-pipeline", {})
206 | .expect("failed to emit trigger-voice-pipeline event");
207 | }
208 |
209 | #[tauri::command]
210 | fn hide_window(window: tauri::Window) {
211 | window.hide().expect("failed to hide the window");
212 | }
213 |
214 | #[tauri::command]
215 | fn open_logs_directory(app_handle: tauri::AppHandle) {
216 | let path: String = app_handle
217 | .path_resolver()
218 | .app_log_dir()
219 | .unwrap()
220 | .to_str()
221 | .unwrap()
222 | .to_string();
223 |
224 | println!("Opening logs directory at {}...", path);
225 |
226 | // Open file with default application
227 | opener::open(path).unwrap();
228 | }
229 |
230 | #[tauri::command]
231 | fn quit_application(window: tauri::Window) {
232 | window.close().expect("failed to close the window");
233 | std::process::exit(0);
234 | }
235 |
236 | fn main() {
237 | let tray_menu: SystemTrayMenu = SystemTrayMenu::new()
238 | .add_item(CustomMenuItem::new(
239 | "toggle_window".to_string(),
240 | "Show/Hide Window (Ctrl+Alt+A)",
241 | ))
242 | .add_item(CustomMenuItem::new(
243 | "trigger_voice_pipeline".to_string(),
244 | "Trigger Voice Pipeline (Alt+Shift+A)",
245 | ))
246 | .add_native_item(SystemTrayMenuItem::Separator)
247 | .add_item(CustomMenuItem::new("open_settings".to_string(), "Settings"))
248 | .add_item(CustomMenuItem::new(
249 | "open_logs_directory".to_string(),
250 | "Open Logs",
251 | ))
252 | .add_native_item(SystemTrayMenuItem::Separator)
253 | .add_item(CustomMenuItem::new(
254 | "check_for_updates".to_string(),
255 | format!("Check for Updates ({})", env!("CARGO_PKG_VERSION")),
256 | ))
257 | .add_native_item(SystemTrayMenuItem::Separator)
258 | .add_item(CustomMenuItem::new("quit_application".to_string(), "Quit"));
259 |
260 | tauri::Builder::default()
261 | .plugin(tauri_plugin_autostart::init(
262 | MacosLauncher::LaunchAgent,
263 | Some(vec![]),
264 | ))
265 | .plugin(
266 | tauri_plugin_log::Builder::default()
267 | .targets([LogTarget::LogDir, LogTarget::Stdout, LogTarget::Webview])
268 | .build(),
269 | )
270 | .on_window_event(|event: tauri::GlobalWindowEvent| match event.event() {
271 | tauri::WindowEvent::CloseRequested { api, .. } => {
272 | event.window().hide().unwrap();
273 | api.prevent_close();
274 | }
275 | _ => {}
276 | })
277 | .system_tray(SystemTray::new().with_menu(tray_menu))
278 | .on_system_tray_event(
279 | |app: &tauri::AppHandle, event: tauri::SystemTrayEvent| match event {
280 | tauri::SystemTrayEvent::DoubleClick { .. } => {
281 | let settings = load_settings(app.clone()).unwrap();
282 |
283 | let action = if settings.tray.is_some() {
284 | settings.tray.unwrap().double_click_action
285 | } else {
286 | "toggle_window".to_string()
287 | };
288 |
289 | let window: tauri::Window = app.get_window("main").unwrap();
290 | match action.as_str() {
291 | "toggle_window" => {
292 | toggle_window(window);
293 | }
294 | "trigger_voice_pipeline" => {
295 | trigger_voice_pipeline(window);
296 | }
297 | _ => {}
298 | }
299 | }
300 | tauri::SystemTrayEvent::MenuItemClick { id, .. } => {
301 | let window: tauri::Window = app.get_window("main").unwrap();
302 | match id.as_str() {
303 | "toggle_window" => toggle_window(window),
304 | "trigger_voice_pipeline" => trigger_voice_pipeline(window),
305 | "open_settings" => open_settings(window),
306 | "open_logs_directory" => open_logs_directory(app.clone()),
307 | "check_for_updates" => open_browser(
308 | "https://github.com/timmo001/home-assistant-assist-desktop/releases",
309 | )
310 | .unwrap(),
311 | "quit_application" => quit_application(window),
312 | _ => {}
313 | }
314 | }
315 | _ => {}
316 | },
317 | )
318 | .invoke_handler(tauri::generate_handler![
319 | open_app,
320 | open_settings,
321 | load_settings,
322 | update_settings,
323 | toggle_window,
324 | trigger_voice_pipeline,
325 | hide_window,
326 | open_logs_directory,
327 | quit_application
328 | ])
329 | .setup(|app: &mut tauri::App| {
330 | let window = app.get_window("main").unwrap();
331 | app.global_shortcut_manager()
332 | .register("Ctrl+Alt+A", move || {
333 | toggle_window(window.clone());
334 | })
335 | .expect("failed to register Ctrl+Alt+A shortcut");
336 |
337 | let window = app.get_window("main").unwrap();
338 | app.global_shortcut_manager()
339 | .register("Alt+Shift+A", move || {
340 | trigger_voice_pipeline(window.clone());
341 | })
342 | .expect("failed to register Alt+Shift+A shortcut");
343 |
344 | Ok(())
345 | })
346 | .run(tauri::generate_context!())
347 | .expect("error while running tauri application");
348 | }
349 |
--------------------------------------------------------------------------------
/src-tauri/tauri.conf.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "beforeDevCommand": "yarn dev",
4 | "beforeBuildCommand": "yarn build",
5 | "devPath": "http://localhost:1420",
6 | "distDir": "../dist"
7 | },
8 | "package": {
9 | "productName": "Home Assistant Assist",
10 | "version": "1.4.0"
11 | },
12 | "tauri": {
13 | "allowlist": {
14 | "all": false,
15 | "globalShortcut": {
16 | "all": true
17 | },
18 | "shell": {
19 | "all": false,
20 | "open": true
21 | }
22 | },
23 | "bundle": {
24 | "active": true,
25 | "appimage": {
26 | "bundleMediaFramework": true
27 | },
28 | "category": "Utility",
29 | "targets": "all",
30 | "identifier": "dev.timmo.home-assistant-assist-desktop",
31 | "icon": [
32 | "icons/32x32.png",
33 | "icons/128x128.png",
34 | "icons/128x128@2x.png",
35 | "icons/icon.icns",
36 | "icons/icon.ico"
37 | ],
38 | "shortDescription": "This is a desktop app for Home Assistant Assist."
39 | },
40 | "security": {
41 | "csp": null
42 | },
43 | "systemTray": {
44 | "iconPath": "icons/icon.png",
45 | "iconAsTemplate": true
46 | },
47 | "windows": [
48 | {
49 | "title": "Home Assistant Assist",
50 | "width": 620,
51 | "height": 300,
52 | "alwaysOnTop": true,
53 | "center": true,
54 | "decorations": false,
55 | "focus": true,
56 | "fullscreen": false,
57 | "resizable": false,
58 | "transparent": true,
59 | "visible": false
60 | }
61 | ]
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/src/App.svelte:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/lib/audioRecorder.ts:
--------------------------------------------------------------------------------
1 | import { error, info } from "tauri-plugin-log-api";
2 |
3 | export class AudioRecorder {
4 | private _active = false;
5 |
6 | private _callback: (data: Int16Array) => void;
7 |
8 | private _context: AudioContext | undefined;
9 |
10 | private _stream: MediaStream | undefined;
11 |
12 | private _source: MediaStreamAudioSourceNode | undefined;
13 |
14 | private _recorder: AudioWorkletNode | undefined;
15 |
16 | constructor(callback: (data: Int16Array) => void) {
17 | this._callback = callback;
18 | }
19 |
20 | public get active() {
21 | return this._active;
22 | }
23 |
24 | public get sampleRate() {
25 | return this._context?.sampleRate;
26 | }
27 |
28 | public static get isSupported() {
29 | return (
30 | window.isSecureContext &&
31 | // @ts-ignore-next-line
32 | (window.AudioContext || window.webkitAudioContext)
33 | );
34 | }
35 |
36 | public async start() {
37 | if (!this._context || !this._stream || !this._source || !this._recorder) {
38 | try {
39 | await this._createContext();
40 | } catch (err: any) {
41 | error(`Error creating context: ${err}`);
42 | this._active = false;
43 | }
44 | } else {
45 | this._stream.getTracks()[0].enabled = true;
46 | await this._context.resume();
47 | this._active = true;
48 | }
49 | }
50 |
51 | public async stop() {
52 | this._active = false;
53 | if (this._stream) {
54 | this._stream.getTracks()[0].enabled = false;
55 | }
56 | await this._context?.suspend();
57 | }
58 |
59 | public close() {
60 | this._active = false;
61 | this._stream?.getTracks()[0].stop();
62 | if (this._recorder) {
63 | this._recorder.port.onmessage = null;
64 | }
65 | this._source?.disconnect();
66 | this._context?.close();
67 | this._stream = undefined;
68 | this._source = undefined;
69 | this._recorder = undefined;
70 | this._context = undefined;
71 | }
72 |
73 | private async _createContext() {
74 | // @ts-ignore-next-line
75 | this._context = new (window.AudioContext || window.webkitAudioContext)();
76 | info("Created audio context");
77 | this._stream = await navigator.mediaDevices.getUserMedia({ audio: true });
78 | info("Created stream");
79 |
80 | info(`url: ${import.meta.url}`);
81 | await this._context.audioWorklet.addModule(
82 | new URL("./recorder.worklet.js", import.meta.url)
83 | );
84 | info("Added worklet");
85 |
86 | this._source = this._context.createMediaStreamSource(this._stream);
87 | info("Created source");
88 | this._recorder = new AudioWorkletNode(this._context, "recorder.worklet");
89 | info("Created recorder");
90 |
91 | this._recorder.port.onmessage = (e) => {
92 | if (!this._active) {
93 | return;
94 | }
95 | this._callback(e.data);
96 | };
97 | this._active = true;
98 | this._source.connect(this._recorder);
99 | info("Connected source to recorder");
100 | }
101 | }
102 |
--------------------------------------------------------------------------------
/src/lib/homeAssistant.ts:
--------------------------------------------------------------------------------
1 | import {
2 | type HassConfig,
3 | type HassUser,
4 | Auth,
5 | Connection,
6 | createConnection,
7 | createLongLivedTokenAuth,
8 | getUser,
9 | subscribeConfig,
10 | } from "home-assistant-js-websocket";
11 | import { info, warn } from "tauri-plugin-log-api";
12 |
13 | import { type HomeAssistantSettings } from "../types/settings";
14 | import {
15 | type PipelineRun,
16 | type PipelineRunEvent,
17 | type PipelineRunOptions,
18 | type AssistPipeline,
19 | type AssistPipelineMutableParams,
20 | } from "../types/homeAssistantAssist";
21 |
22 | export function generateHomeAssistantURLFromSettings(settings: HomeAssistantSettings): string {
23 | return `${settings.ssl ? "https" : "http"}://${settings.host}${
24 | settings.port === 443 ? "" : `:${settings.port}`
25 | }`;
26 | }
27 |
28 | export class HomeAssistant {
29 | public connection: Connection | null = null;
30 |
31 | private auth: Auth | null = null;
32 | private config: HomeAssistantSettings | null = null;
33 | private connectedCallback: (connection: Connection, user: HassUser) => void;
34 | private configCallback: (config: HassConfig) => void;
35 |
36 | constructor(
37 | connectedCallback: (connection: Connection, user: HassUser) => void,
38 | configReceivedCallback: (config: HassConfig) => void,
39 | config?: HomeAssistantSettings,
40 | connection?: Connection
41 | ) {
42 | info("Home Assistant: create new client");
43 |
44 | this.connectedCallback = connectedCallback;
45 | this.configCallback = configReceivedCallback;
46 | this.config = config || null;
47 | this.connection = connection || null;
48 | }
49 |
50 | public get connected(): boolean {
51 | info(`Home Assistant: connected: ${this.connection !== null}`);
52 | return this.connection !== null;
53 | }
54 |
55 | disconnect(): void {
56 | if (this.connection) {
57 | this.connection.close();
58 | this.connection = null;
59 | }
60 | }
61 |
62 | async connect(): Promise {
63 | if (this.connection) return;
64 | if (!this.config?.host) throw new Error("Missing Home Assistant host");
65 | if (!this.config?.access_token)
66 | throw new Error("Missing Home Assistant access token");
67 |
68 | const url = `${this.config.ssl ? "https" : "http"}://${this.config.host}:${
69 | this.config.port
70 | }`;
71 |
72 | info(`Home Assistant: ${url}`);
73 |
74 | // Create auth object
75 | info("Home Assistant: createLongLivedTokenAuth");
76 | this.auth = createLongLivedTokenAuth(url, this.config.access_token);
77 |
78 | // Connect to Home Assistant
79 | info("Home Assistant: createConnection");
80 | this.connection = await createConnection({ auth: this.auth });
81 |
82 | this.connection.addEventListener("ready", () => {
83 | info("Home Assistant connection ready");
84 | });
85 |
86 | this.connection.addEventListener("disconnected", () => {
87 | info("Disconnected from Home Assistant");
88 | if (this.connection) this.connection.reconnect();
89 | });
90 |
91 | subscribeConfig(this.connection, (config: HassConfig) => {
92 | this.configCallback(config);
93 | });
94 |
95 | getUser(this.connection).then((user: HassUser) => {
96 | this.connectedCallback(this.connection!, user);
97 | });
98 | }
99 |
100 | processEvent = (
101 | run: PipelineRun | undefined,
102 | event: PipelineRunEvent,
103 | options?: PipelineRunOptions
104 | ): PipelineRun | undefined => {
105 | if (event.type === "run-start") {
106 | run = {
107 | init_options: options,
108 | stage: "ready",
109 | run: event.data,
110 | events: [event],
111 | };
112 | return run;
113 | }
114 |
115 | if (!run) {
116 | warn(
117 | `Received unexpected event before receiving session: ${JSON.stringify(
118 | event
119 | )}`
120 | );
121 | return undefined;
122 | }
123 |
124 | if (event.type === "wake_word-start") {
125 | run = {
126 | ...run,
127 | stage: "wake_word",
128 | wake_word: { ...event.data, done: false },
129 | };
130 | } else if (event.type === "wake_word-end") {
131 | run = {
132 | ...run,
133 | wake_word: { ...run.wake_word!, ...event.data, done: true },
134 | };
135 | } else if (event.type === "stt-start") {
136 | run = {
137 | ...run,
138 | stage: "stt",
139 | stt: { ...event.data, done: false },
140 | };
141 | } else if (event.type === "stt-end") {
142 | run = {
143 | ...run,
144 | stt: { ...run.stt!, ...event.data, done: true },
145 | };
146 | } else if (event.type === "intent-start") {
147 | run = {
148 | ...run,
149 | stage: "intent",
150 | intent: { ...event.data, done: false },
151 | };
152 | } else if (event.type === "intent-end") {
153 | run = {
154 | ...run,
155 | intent: { ...run.intent!, ...event.data, done: true },
156 | };
157 | } else if (event.type === "tts-start") {
158 | run = {
159 | ...run,
160 | stage: "tts",
161 | tts: { ...event.data, done: false },
162 | };
163 | } else if (event.type === "tts-end") {
164 | run = {
165 | ...run,
166 | tts: { ...run.tts!, ...event.data, done: true },
167 | };
168 | } else if (event.type === "run-end") {
169 | run = { ...run, stage: "done" };
170 | } else if (event.type === "error") {
171 | run = { ...run, stage: "error", error: event.data };
172 | } else {
173 | run = { ...run };
174 | }
175 |
176 | run.events = [...run.events, event];
177 |
178 | return run;
179 | };
180 |
181 | runAssistPipeline = (
182 | options: PipelineRunOptions,
183 | callback: (event: PipelineRunEvent) => void
184 | ) =>
185 | this.connection?.subscribeMessage(callback, {
186 | ...options,
187 | type: "assist_pipeline/run",
188 | });
189 |
190 | listAssistPipelines = () =>
191 | this.connection?.sendMessagePromise<{
192 | pipelines: AssistPipeline[];
193 | preferred_pipeline: string | null;
194 | }>({
195 | type: "assist_pipeline/pipeline/list",
196 | });
197 |
198 | getAssistPipeline = (pipeline_id?: string) =>
199 | this.connection?.sendMessagePromise({
200 | type: "assist_pipeline/pipeline/get",
201 | pipeline_id,
202 | });
203 |
204 | createAssistPipeline = (pipeline: AssistPipelineMutableParams) =>
205 | this.connection?.sendMessagePromise({
206 | type: "assist_pipeline/pipeline/create",
207 | ...pipeline,
208 | });
209 |
210 | updateAssistPipeline = (
211 | pipeline_id: string,
212 | pipeline: AssistPipelineMutableParams
213 | ) =>
214 | this.connection?.sendMessagePromise({
215 | type: "assist_pipeline/pipeline/update",
216 | pipeline_id,
217 | ...pipeline,
218 | });
219 |
220 | setAssistPipelinePreferred = (pipeline_id: string) =>
221 | this.connection?.sendMessagePromise({
222 | type: "assist_pipeline/pipeline/set_preferred",
223 | pipeline_id,
224 | });
225 |
226 | deleteAssistPipeline = (pipelineId: string) =>
227 | this.connection?.sendMessagePromise({
228 | type: "assist_pipeline/pipeline/delete",
229 | pipeline_id: pipelineId,
230 | });
231 |
232 | fetchAssistPipelineLanguages = () =>
233 | this.connection?.sendMessagePromise<{ languages: string[] }>({
234 | type: "assist_pipeline/language/list",
235 | });
236 | }
237 |
--------------------------------------------------------------------------------
/src/lib/recorder.worklet.js:
--------------------------------------------------------------------------------
1 | class RecorderProcessor extends AudioWorkletProcessor {
2 | process(inputList, _outputList, _parameters) {
3 | if (inputList[0].length < 1) {
4 | return true;
5 | }
6 |
7 | const float32Data = inputList[0][0];
8 | const int16Data = new Int16Array(float32Data.length);
9 |
10 | for (let i = 0; i < float32Data.length; i++) {
11 | const s = Math.max(-1, Math.min(1, float32Data[i]));
12 | int16Data[i] = s < 0 ? s * 0x8000 : s * 0x7fff;
13 | }
14 |
15 | this.port.postMessage(int16Data);
16 |
17 | return true;
18 | }
19 | }
20 |
21 | registerProcessor("recorder.worklet", RecorderProcessor);
22 |
--------------------------------------------------------------------------------
/src/main.ts:
--------------------------------------------------------------------------------
1 | import "./styles.css";
2 | import App from "./App.svelte";
3 |
4 | const element = document.getElementById("app");
5 |
6 | if (!element) {
7 | throw new Error("Could not find element with id 'app'");
8 | }
9 |
10 | const app = new App({
11 | target: element,
12 | });
13 |
14 | export default app;
15 |
--------------------------------------------------------------------------------
/src/pages/Home.svelte:
--------------------------------------------------------------------------------
1 |
510 |
511 |
512 |
552 |
553 |
554 | {#each responses as response}
555 |
564 | {response.text}
565 |
566 | {/each}
567 |
568 |
569 |
570 | {#if showPipelineMenu}
571 |
591 | {/if}
592 |
593 |
688 |
--------------------------------------------------------------------------------
/src/pages/Settings.svelte:
--------------------------------------------------------------------------------
1 |
96 |
97 |
98 |
105 |
135 |
136 | Tray
137 |
138 | Double Click Action
139 |
140 | Toggle Window
141 | Trigger Voice Pipeline
142 |
143 |
144 |
145 |
162 |
163 |
164 |
203 |
--------------------------------------------------------------------------------
/src/styles.css:
--------------------------------------------------------------------------------
1 | ::-webkit-scrollbar {
2 | background: rgba(0, 0, 0, 0);
3 | width: 0.2rem;
4 | }
5 |
6 | ::-webkit-scrollbar-track {
7 | background: rgba(0, 0, 0, 0);
8 | }
9 |
10 | ::-webkit-scrollbar-thumb {
11 | background-color: rgba(48, 48, 48, 0.8);
12 | border-radius: 1.8rem;
13 | border: 0.2rem solid rgba(0, 0, 0, 0);
14 | }
15 |
16 | html {
17 | background-color: rgba(0, 0, 0, 0.6);
18 | border-radius: 1.2rem;
19 | border: none;
20 | text-align: center;
21 | color: rgba(248, 248, 248, 1);
22 | }
23 |
24 | body {
25 | margin: 0;
26 | color: rgba(248, 248, 248, 1);
27 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
28 | "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
29 | sans-serif;
30 | overflow: hidden;
31 | }
32 |
33 | main {
34 | display: flex;
35 | flex-direction: column;
36 | align-items: center;
37 | justify-content: start;
38 | height: 100vh;
39 | }
40 |
41 | section {
42 | display: flex;
43 | width: 100%;
44 | flex-direction: column;
45 | align-items: center;
46 | justify-content: flex-start;
47 | padding: 0.4rem;
48 | }
49 |
50 | section > * {
51 | width: calc(100% - 2.8rem);
52 | }
53 |
54 | section > span {
55 | text-align: start;
56 | margin: 0;
57 | padding: 0;
58 | }
59 |
60 | input {
61 | background-color: rgb(0, 0, 0);
62 | color: rgba(248, 248, 248, 1);
63 | border: 1px solid rgba(248, 248, 248, 1);
64 | border-radius: 5px;
65 | padding: 5px;
66 | margin: 5px;
67 | }
68 |
69 | select {
70 | flex: 2;
71 | text-align: start;
72 | outline: none;
73 | border: none;
74 | color: rgba(248, 248, 248, 1);
75 | background-color: rgba(28, 28, 28, 0.9);
76 | font-size: 1.2rem;
77 | min-width: 340px;
78 | }
79 |
80 | hr {
81 | width: 100%;
82 | border: 0.05rem solid rgba(248, 248, 248, 0.2);
83 | margin: 0;
84 | }
85 |
86 | h1 {
87 | margin: 0.8rem 0 0.4rem;
88 | padding: 0;
89 | }
90 |
91 | h2 {
92 | text-align: start;
93 | margin: 0.8rem 0 0.4rem;
94 | padding: 0;
95 | }
96 |
97 | .button-icon {
98 | display: flex;
99 | flex-direction: row;
100 | align-items: center;
101 | justify-content: center;
102 | width: 2.8rem;
103 | height: 2.8rem;
104 | margin: 0;
105 | padding: 0.4rem 0.6rem;
106 | border-radius: 2.2rem;
107 | border: none;
108 | background-color: transparent;
109 | box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.1);
110 | cursor: pointer;
111 | transition: all 0.2s ease-in-out;
112 | }
113 |
114 | .button-icon svg {
115 | width: 1.8rem;
116 | height: 1.8rem;
117 | margin: 0 !important;
118 | fill: rgba(248, 248, 248, 0.6);
119 | }
120 |
121 | .button-icon:active,
122 | .button-icon:hover,
123 | .button-icon-active {
124 | background-color: rgba(82, 82, 82, 0.8);
125 | box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.2);
126 | }
127 |
128 | .button-icon:focus {
129 | outline: none;
130 | }
131 |
132 | .button-icon-disabled {
133 | cursor: default;
134 | box-shadow: none;
135 | }
136 |
137 | .button-icon-disabled svg {
138 | fill: rgba(248, 248, 248, 0.2);
139 | }
140 |
141 | .input-box {
142 | display: flex;
143 | flex-direction: row;
144 | align-items: center;
145 | justify-content: center;
146 | width: calc(100% - 2.8rem);
147 | margin: 0.6rem 0 0;
148 | padding: 0.4rem 0.6rem;
149 | border-radius: 1.2rem;
150 | border: none;
151 | background-color: rgba(28, 28, 28, 0.9);
152 | box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.1);
153 | }
154 |
155 | .input-box svg {
156 | width: 1.8rem;
157 | height: 1.8rem;
158 | margin: 0.6rem 0.2rem 0.6rem 0.4rem;
159 | fill: rgba(248, 248, 248, 0.6);
160 | }
161 |
162 | .input-box span {
163 | flex: 1;
164 | text-align: start;
165 | width: 100%;
166 | padding: 0 0.8rem;
167 | }
168 |
169 | .input-box input {
170 | flex: 2;
171 | text-align: start;
172 | outline: none;
173 | border: none;
174 | background-color: transparent;
175 | font-size: 1.4rem;
176 | }
177 |
178 | .scrollable {
179 | overflow-y: auto;
180 | overflow-x: hidden;
181 | height: 100%;
182 | }
183 |
184 | #app {
185 | height: 100vh;
186 | text-align: center;
187 | }
188 |
--------------------------------------------------------------------------------
/src/types/assistResponse.ts:
--------------------------------------------------------------------------------
1 | export enum AssistResponseType {
2 | Assist = "assist",
3 | Error = "error",
4 | User = "user",
5 | }
6 |
7 | export interface AssistResponse {
8 | type: AssistResponseType;
9 | text: string;
10 | }
11 |
--------------------------------------------------------------------------------
/src/types/homeAssistantAssist.ts:
--------------------------------------------------------------------------------
1 | // https://github.com/home-assistant/frontend/blob/dev/src/data/conversation.ts
2 | interface IntentTarget {
3 | type: "area" | "device" | "entity" | "domain" | "device_class" | "custom";
4 | name: string;
5 | id: string | null;
6 | }
7 |
8 | interface IntentResultBase {
9 | language: string;
10 | speech:
11 | | {
12 | [SpeechType in "plain" | "ssml"]: { extra_data: any; speech: string };
13 | }
14 | | null;
15 | }
16 |
17 | interface IntentResultActionDone extends IntentResultBase {
18 | response_type: "action_done";
19 | data: {
20 | targets: IntentTarget[];
21 | success: IntentTarget[];
22 | failed: IntentTarget[];
23 | };
24 | }
25 |
26 | interface IntentResultQueryAnswer extends IntentResultBase {
27 | response_type: "query_answer";
28 | data: {
29 | targets: IntentTarget[];
30 | success: IntentTarget[];
31 | failed: IntentTarget[];
32 | };
33 | }
34 |
35 | interface IntentResultError extends IntentResultBase {
36 | response_type: "error";
37 | data: {
38 | code:
39 | | "no_intent_match"
40 | | "no_valid_targets"
41 | | "failed_to_handle"
42 | | "unknown";
43 | };
44 | }
45 |
46 | export interface ConversationResult {
47 | conversation_id: string | null;
48 | response:
49 | | IntentResultActionDone
50 | | IntentResultQueryAnswer
51 | | IntentResultError;
52 | }
53 |
54 | // https://github.com/home-assistant/frontend/blob/dev/src/data/stt.ts
55 | export interface SpeechMetadata {
56 | language: string;
57 | format: "wav" | "ogg";
58 | codec: "pcm" | "opus";
59 | bit_rate: 8 | 16 | 24 | 32;
60 | sample_rate:
61 | | 8000
62 | | 11000
63 | | 16000
64 | | 18900
65 | | 22000
66 | | 32000
67 | | 37800
68 | | 44100
69 | | 48000;
70 | channel: 1 | 2;
71 | }
72 |
73 | // https://github.com/home-assistant/frontend/blob/dev/src/data/media_source.ts
74 | export interface ResolvedMediaSource {
75 | url: string;
76 | mime_type: string;
77 | }
78 |
79 | // https://github.com/home-assistant/frontend/blob/dev/src/data/assist_pipeline.ts
80 | export interface AssistPipeline {
81 | id: string;
82 | name: string;
83 | language: string;
84 | conversation_engine: string;
85 | conversation_language: string | null;
86 | stt_engine: string | null;
87 | stt_language: string | null;
88 | tts_engine: string | null;
89 | tts_language: string | null;
90 | tts_voice: string | null;
91 | wake_word_entity: string | null;
92 | wake_word_id: string | null;
93 | }
94 |
95 | export interface AssistPipelineMutableParams {
96 | name: string;
97 | language: string;
98 | conversation_engine: string;
99 | conversation_language: string | null;
100 | stt_engine: string | null;
101 | stt_language: string | null;
102 | tts_engine: string | null;
103 | tts_language: string | null;
104 | tts_voice: string | null;
105 | wake_word_entity: string | null;
106 | wake_word_id: string | null;
107 | }
108 |
109 | export interface assistRunListing {
110 | pipeline_run_id: string;
111 | timestamp: string;
112 | }
113 |
114 | interface PipelineEventBase {
115 | timestamp: string;
116 | }
117 |
118 | interface PipelineRunStartEvent extends PipelineEventBase {
119 | type: "run-start";
120 | data: {
121 | pipeline: string;
122 | language: string;
123 | runner_data: {
124 | stt_binary_handler_id: number | null;
125 | timeout: number;
126 | };
127 | };
128 | }
129 | interface PipelineRunEndEvent extends PipelineEventBase {
130 | type: "run-end";
131 | data: Record;
132 | }
133 |
134 | interface PipelineErrorEvent extends PipelineEventBase {
135 | type: "error";
136 | data: {
137 | code: string;
138 | message: string;
139 | };
140 | }
141 |
142 | interface PipelineWakeWordStartEvent extends PipelineEventBase {
143 | type: "wake_word-start";
144 | data: {
145 | engine: string;
146 | metadata: SpeechMetadata;
147 | };
148 | }
149 |
150 | interface PipelineWakeWordEndEvent extends PipelineEventBase {
151 | type: "wake_word-end";
152 | data: { wake_word_output: { ww_id: string; timestamp: number } };
153 | }
154 |
155 | interface PipelineSTTStartEvent extends PipelineEventBase {
156 | type: "stt-start";
157 | data: {
158 | engine: string;
159 | metadata: SpeechMetadata;
160 | };
161 | }
162 | interface PipelineSTTEndEvent extends PipelineEventBase {
163 | type: "stt-end";
164 | data: {
165 | stt_output: { text: string };
166 | };
167 | }
168 |
169 | interface PipelineIntentStartEvent extends PipelineEventBase {
170 | type: "intent-start";
171 | data: {
172 | engine: string;
173 | language: string;
174 | intent_input: string;
175 | };
176 | }
177 | interface PipelineIntentEndEvent extends PipelineEventBase {
178 | type: "intent-end";
179 | data: {
180 | intent_output: ConversationResult;
181 | };
182 | }
183 |
184 | interface PipelineTTSStartEvent extends PipelineEventBase {
185 | type: "tts-start";
186 | data: {
187 | engine: string;
188 | language: string;
189 | voice: string;
190 | tts_input: string;
191 | };
192 | }
193 | interface PipelineTTSEndEvent extends PipelineEventBase {
194 | type: "tts-end";
195 | data: {
196 | tts_output: ResolvedMediaSource;
197 | };
198 | }
199 |
200 | export type PipelineRunEvent =
201 | | PipelineRunStartEvent
202 | | PipelineRunEndEvent
203 | | PipelineErrorEvent
204 | | PipelineWakeWordStartEvent
205 | | PipelineWakeWordEndEvent
206 | | PipelineSTTStartEvent
207 | | PipelineSTTEndEvent
208 | | PipelineIntentStartEvent
209 | | PipelineIntentEndEvent
210 | | PipelineTTSStartEvent
211 | | PipelineTTSEndEvent;
212 |
213 | export type PipelineRunOptions = (
214 | | {
215 | start_stage: "intent" | "tts";
216 | input: { text: string };
217 | }
218 | | {
219 | start_stage: "stt";
220 | input: { sample_rate: number };
221 | }
222 | | {
223 | start_stage: "wake_word";
224 | input: {
225 | sample_rate: number;
226 | timeout?: number;
227 | audio_seconds_to_buffer?: number;
228 | };
229 | }
230 | ) & {
231 | end_stage: "stt" | "intent" | "tts";
232 | pipeline?: string;
233 | conversation_id?: string | null;
234 | };
235 |
236 | export interface PipelineRun {
237 | init_options?: PipelineRunOptions;
238 | events: PipelineRunEvent[];
239 | stage: "ready" | "wake_word" | "stt" | "intent" | "tts" | "done" | "error";
240 | run: PipelineRunStartEvent["data"];
241 | error?: PipelineErrorEvent["data"];
242 | wake_word?: PipelineWakeWordStartEvent["data"] &
243 | Partial & { done: boolean };
244 | stt?: PipelineSTTStartEvent["data"] &
245 | Partial & { done: boolean };
246 | intent?: PipelineIntentStartEvent["data"] &
247 | Partial & { done: boolean };
248 | tts?: PipelineTTSStartEvent["data"] &
249 | Partial & { done: boolean };
250 | }
251 |
--------------------------------------------------------------------------------
/src/types/settings.ts:
--------------------------------------------------------------------------------
1 | export interface HomeAssistantSettings {
2 | access_token?: string;
3 | host: string;
4 | port: number;
5 | ssl: boolean;
6 | }
7 |
8 | export interface TraySettings {
9 | double_click_action: string;
10 | }
11 |
12 | export interface Settings {
13 | autostart?: boolean;
14 | home_assistant: HomeAssistantSettings;
15 | tray: TraySettings;
16 | }
17 |
--------------------------------------------------------------------------------
/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
--------------------------------------------------------------------------------
/svelte.config.js:
--------------------------------------------------------------------------------
1 | import { vitePreprocess } from "@sveltejs/vite-plugin-svelte";
2 |
3 | export default {
4 | // Consult https://svelte.dev/docs#compile-time-svelte-preprocess
5 | // for more information about preprocessors
6 | preprocess: vitePreprocess(),
7 | };
8 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "@tsconfig/svelte/tsconfig.json",
3 | "compilerOptions": {
4 | "target": "ESNext",
5 | "useDefineForClassFields": true,
6 | "module": "ESNext",
7 | "resolveJsonModule": true,
8 | /**
9 | * Typecheck JS in `.svelte` and `.js` files by default.
10 | * Disable checkJs if you'd like to use dynamic types in JS.
11 | * Note that setting allowJs false does not prevent the use
12 | * of JS in `.svelte` files.
13 | */
14 | "allowJs": true,
15 | "checkJs": true,
16 | "isolatedModules": true
17 | },
18 | "include": ["src/**/*.d.ts", "src/**/*.ts", "src/**/*.js", "src/**/*.svelte"],
19 | "references": [{ "path": "./tsconfig.node.json" }]
20 | }
21 |
--------------------------------------------------------------------------------
/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "skipLibCheck": true,
5 | "module": "ESNext",
6 | "moduleResolution": "bundler"
7 | },
8 | "include": ["vite.config.ts"]
9 | }
10 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "vite";
2 | import { svelte } from "@sveltejs/vite-plugin-svelte";
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig(async () => ({
6 | plugins: [svelte()],
7 |
8 | // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build`
9 | //
10 | // 1. prevent vite from obscuring rust errors
11 | clearScreen: false,
12 | // 2. tauri expects a fixed port, fail if that port is not available
13 | server: {
14 | port: 1420,
15 | strictPort: true,
16 | },
17 | }));
18 |
--------------------------------------------------------------------------------