├── .gitignore ├── doc ├── dark.png ├── light.png ├── update-rustdoc.py └── preview.md ├── demo ├── Cargo.toml ├── src │ ├── auto_viewport_theme.rs │ ├── linux_system_theme.rs │ └── main.rs └── index.html ├── deny.toml ├── Cargo.toml ├── changelog.md ├── src ├── sun.rs ├── cogwheel.rs ├── rotated_rect.rs ├── moon.rs ├── arc.rs └── lib.rs ├── license-mit.txt ├── .github └── workflows │ ├── demo.yml │ └── ci.yml ├── readme.md ├── license-apache.txt └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | /demo/dist/ 3 | -------------------------------------------------------------------------------- /doc/dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tautropfli/egui-theme-switch/HEAD/doc/dark.png -------------------------------------------------------------------------------- /doc/light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tautropfli/egui-theme-switch/HEAD/doc/light.png -------------------------------------------------------------------------------- /demo/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "egui-theme-switch-demo" 3 | version = "0.1.0" 4 | edition = "2024" 5 | license = "MIT OR Apache-2.0" 6 | publish = false 7 | 8 | [dependencies] 9 | eframe.workspace = true 10 | egui.workspace = true 11 | egui-theme-switch = { path = ".." } 12 | log = "0.4" 13 | 14 | [target.'cfg(target_arch = "wasm32")'.dependencies] 15 | wasm-bindgen-futures = "0.4" 16 | web-sys = "0.3.4" 17 | -------------------------------------------------------------------------------- /deny.toml: -------------------------------------------------------------------------------- 1 | [graph] 2 | all-features = true 3 | 4 | [output] 5 | feature-depth = 1 6 | 7 | [licenses] 8 | allow = [ 9 | "Apache-2.0", 10 | "BSD-2-Clause", 11 | "MIT", 12 | ] 13 | confidence-threshold = 1.0 14 | 15 | [bans] 16 | multiple-versions = "warn" 17 | wildcards = "deny" 18 | allow-wildcard-paths = true 19 | 20 | [sources] 21 | unknown-registry = "deny" 22 | unknown-git = "deny" 23 | allow-registry = ["https://github.com/rust-lang/crates.io-index"] 24 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "egui-theme-switch" 3 | version = "0.5.0" 4 | edition = "2024" 5 | rust-version = "1.88" 6 | license = "MIT OR Apache-2.0" 7 | readme = "readme.md" 8 | repository = "https://github.com/bash/egui-theme-switch" 9 | description = "A pretty theme switch for your egui app" 10 | keywords = ["egui", "widget", "dark-light", "switch"] 11 | categories = ["gui"] 12 | exclude = [".github", "doc/*.py", "doc/*.png", "deny.toml"] 13 | 14 | [dependencies] 15 | egui.workspace = true 16 | 17 | [workspace] 18 | members = ["demo"] 19 | 20 | [workspace.dependencies] 21 | egui = { version = "0.33", default-features = false } 22 | eframe = { version = "0.33", features = ["persistence"] } 23 | -------------------------------------------------------------------------------- /doc/update-rustdoc.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | from base64 import b64encode 4 | 5 | 6 | def update_rustdoc(): 7 | with open("doc/preview.md", "w+") as fp: 8 | fp.write( 9 | template( 10 | dark=base64_encode("doc/dark.png"), 11 | light=base64_encode("doc/light.png"), 12 | ) 13 | ) 14 | 15 | 16 | def base64_encode(file_path): 17 | with open(file_path, "rb") as fp: 18 | return b64encode(fp.read()).decode("utf-8") 19 | 20 | 21 | def template(*, dark, light): 22 | return f""" 23 | 24 | 25 | 26 | 27 | """ 28 | 29 | 30 | if __name__ == "__main__": 31 | update_rustdoc() 32 | -------------------------------------------------------------------------------- /changelog.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | ## 0.5.0 3 | * Update to egui 0.33.0 by @lmaxyz. 4 | * Raise MSRV to 1.88.0 (this matches egui's MSRV). 5 | 6 | ## 0.4.0 7 | * Update to egui 0.32.0. 8 | * Raise MSRV to 1.85.0 (this matches egui's MSRV). 9 | 10 | ## 0.3.0 11 | * Update to egui 0.31.0 by @hacknus. 12 | * Raise MSRV to 1.81.0 (this matches egui's MSRV). 13 | 14 | ## 0.2.3 15 | * Raise MSRV to 1.80.0 (this matches egui's MSRV). 16 | 17 | ## 0.2.2 18 | * Update to egui 0.30.0. 19 | 20 | ## 0.2.1 21 | * Remove PNG files from package. 22 | 23 | ## 0.2.0 24 | * Update to egui 0.29.0 25 | * egui now provides its own `ThemePreference` type, so ours was removed. 26 | * Added a new `global_theme_switch` function that controls egui's global theme preference. 27 | 28 | ## 0.1.1 29 | * Added serde `Serialize` and `Deserialize` support to `ThemePreference` (gated by the `serde` feature). 30 | 31 | ## 0.1.0 32 | Initial release 33 | -------------------------------------------------------------------------------- /src/sun.rs: -------------------------------------------------------------------------------- 1 | use super::rotated_rect::draw_rotated_rect; 2 | use egui::Painter; 3 | use egui::emath::{Pos2, Rect, Rot2, Vec2, vec2}; 4 | use egui::epaint::{Color32, Stroke}; 5 | use std::f32::consts::TAU; 6 | 7 | pub(crate) fn sun(painter: &Painter, center: Pos2, radius: f32, color: Color32) { 8 | let clipped = painter.with_clip_rect(Rect::from_center_size(center, Vec2::splat(radius * 2.))); 9 | let sun_radius = radius * 0.5; 10 | 11 | clipped.circle(center, sun_radius, color, Stroke::NONE); 12 | 13 | let rays = 8; 14 | let ray_radius = radius / 4.; 15 | let ray_spacing = radius / 7.5; 16 | let ray_length = radius - sun_radius - ray_spacing; 17 | 18 | for n in 0..rays { 19 | let ray_center = center - vec2(0., sun_radius + ray_spacing + ray_length / 2.); 20 | let ray_size = vec2(ray_radius, ray_length); 21 | let rect = Rect::from_center_size(ray_center, ray_size); 22 | let rotation = Rot2::from_angle(TAU / rays as f32 * n as f32); 23 | draw_rotated_rect(painter, rect, ray_radius / 2.0, color, rotation, center); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /license-mit.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Tau Gärtli 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.github/workflows/demo.yml: -------------------------------------------------------------------------------- 1 | name: Demo 2 | 3 | on: 4 | push: 5 | branches: ["main"] 6 | pull_request: 7 | branches: ["main"] 8 | 9 | env: 10 | CARGO_TERM_COLOR: always 11 | 12 | jobs: 13 | build: 14 | name: Build Demo 15 | runs-on: fedora-latest 16 | steps: 17 | - uses: actions/checkout@v4 18 | - run: sudo dnf install -y trunk 19 | - run: rustup target add wasm32-unknown-unknown 20 | - run: trunk build --public-url 'https://tau.garden/egui-theme-switch' 21 | working-directory: demo 22 | - uses: https://codeberg.org/tautropfli/websites/upload-package@main 23 | if: format('refs/heads/{0}', forgejo.event.repository.default_branch) == forgejo.ref 24 | with: 25 | domain_name: tau.garden 26 | subpath: /egui-theme-switch 27 | package_push_token: ${{secrets.PACKAGE_PUSH_TOKEN}} 28 | directory: demo/dist 29 | - uses: https://codeberg.org/tautropfli/websites/deploy@main 30 | if: format('refs/heads/{0}', forgejo.event.repository.default_branch) == forgejo.ref 31 | with: 32 | dispatch_token: ${{secrets.DISPATCH_TOKEN}} 33 | -------------------------------------------------------------------------------- /src/cogwheel.rs: -------------------------------------------------------------------------------- 1 | use super::rotated_rect::draw_rotated_rect; 2 | use crate::Painter; 3 | use egui::emath::{Pos2, Rect, Rot2, vec2}; 4 | use egui::epaint::{Color32, CornerRadiusF32}; 5 | use std::f32::consts::TAU; 6 | 7 | pub(crate) fn cogwheel(painter: &Painter, center: Pos2, radius: f32, color: Color32) { 8 | let inner_radius = 0.3 * radius; 9 | let outer_radius = 0.8 * radius; 10 | let thickness = 0.3 * radius; 11 | 12 | painter.circle( 13 | center, 14 | inner_radius + thickness / 2., 15 | Color32::TRANSPARENT, 16 | (thickness, color), 17 | ); 18 | 19 | let cogs = 8; 20 | let cog_width = radius / 2.5; 21 | let cog_rounding = radius / 16.; 22 | let cog_length = radius - outer_radius + thickness / 2.; 23 | 24 | for n in 0..cogs { 25 | let cog_center = center - vec2(0., outer_radius + cog_length / 2. - thickness / 2.); 26 | let cog_size = vec2(cog_width, cog_length); 27 | let rotation = Rot2::from_angle(TAU / cogs as f32 * n as f32); 28 | let rect = Rect::from_center_size(cog_center, cog_size); 29 | let rounding = CornerRadiusF32 { 30 | nw: cog_rounding, 31 | ne: cog_rounding, 32 | ..Default::default() 33 | }; 34 | draw_rotated_rect(painter, rect, rounding, color, rotation, center); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # `egui-theme-switch` 2 | 3 | [![Docs](https://img.shields.io/docsrs/egui-theme-switch/latest)](https://docs.rs/egui-theme-switch) 4 | [![Crate Version](https://img.shields.io/crates/v/egui-theme-switch)](https://crates.io/crates/egui-theme-switch) 5 | 6 | A *very* pretty theme switch widget for your egui app. 7 | It allows you to choose between dark, light and follow system. 8 | 9 | 10 | 11 | Screenshot of a tri-state switch with three options: follow system, dark, light 12 | 13 | 14 | ## Example 15 | 16 | ```rust 17 | use egui::ThemePreference; 18 | use egui_theme_switch::{ThemeSwitch, global_theme_switch}; 19 | 20 | // A switch for egui's global theme preference: 21 | global_theme_switch(ui); 22 | 23 | // ... or alternatively: 24 | let mut preference = ThemePreference::System; 25 | if ui.add(ThemeSwitch::new(&mut preference)).changed() { 26 | // ... 27 | } 28 | ``` 29 | 30 | ## [Interactive Demo](https://tau.garden/egui-theme-switch/) 31 | 32 | ## [Docs](https://docs.rs/egui-theme-switch) 33 | 34 | ## License 35 | Licensed under either of 36 | 37 | * Apache License, Version 2.0 38 | ([license-apache.txt](license-apache.txt) or ) 39 | * MIT license 40 | ([license-mit.txt](license-mit.txt) or ) 41 | 42 | at your option. 43 | 44 | ## Contribution 45 | Unless you explicitly state otherwise, any contribution intentionally submitted 46 | for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. 47 | -------------------------------------------------------------------------------- /src/rotated_rect.rs: -------------------------------------------------------------------------------- 1 | use egui::Painter; 2 | use egui::emath::{Pos2, Rect, Rot2, vec2}; 3 | use egui::epaint::{Color32, CornerRadiusF32, PathShape, Stroke}; 4 | 5 | /// Draws a rectangle with rounded corners, rotated around an origin. 6 | pub(crate) fn draw_rotated_rect( 7 | painter: &Painter, 8 | rect: Rect, 9 | rounding: impl Into, 10 | fill: impl Into, 11 | rot: impl Into, 12 | origin: Pos2, 13 | ) { 14 | let rounding = rounding.into(); 15 | let fill = fill.into(); 16 | let rot = rot.into(); 17 | let safe_inset_points = safe_inset_points(rect, rot, origin, rounding); 18 | 19 | painter.add(PathShape::convex_polygon( 20 | safe_inset_points.to_vec(), 21 | fill, 22 | Stroke::NONE, 23 | )); 24 | 25 | // Nobody will notice that we're not actually drawing 26 | // the round bits... 🤫 27 | } 28 | 29 | fn safe_inset_points(rect: Rect, rot: Rot2, origin: Pos2, rounding: CornerRadiusF32) -> [Pos2; 8] { 30 | [ 31 | rotate(rect.left_top() + vec2(0.0, rounding.nw), rot, origin), 32 | rotate(rect.left_top() + vec2(rounding.nw, 0.0), rot, origin), 33 | rotate(rect.right_top() - vec2(rounding.ne, 0.0), rot, origin), 34 | rotate(rect.right_top() + vec2(0.0, rounding.ne), rot, origin), 35 | rotate(rect.right_bottom() - vec2(0.0, rounding.se), rot, origin), 36 | rotate(rect.right_bottom() - vec2(rounding.se, 0.0), rot, origin), 37 | rotate(rect.left_bottom() + vec2(rounding.sw, 0.0), rot, origin), 38 | rotate(rect.left_bottom() - vec2(0.0, rounding.sw), rot, origin), 39 | ] 40 | } 41 | 42 | fn rotate(point: Pos2, rot: Rot2, origin: Pos2) -> Pos2 { 43 | origin + rot * (point - origin) 44 | } 45 | -------------------------------------------------------------------------------- /demo/src/auto_viewport_theme.rs: -------------------------------------------------------------------------------- 1 | //! An egui plugin that syncs egui's current theme to the viewport's. 2 | 3 | #[cfg(target_arch = "wasm32")] 4 | pub(crate) fn register(_ctx: &egui::Context) {} 5 | 6 | #[cfg(not(target_arch = "wasm32"))] 7 | pub(crate) use native::register; 8 | 9 | #[cfg(not(target_arch = "wasm32"))] 10 | mod native { 11 | use egui::{Context, Id, SystemTheme, ThemePreference, ViewportCommand}; 12 | use std::sync::Arc; 13 | 14 | pub(crate) fn register(ctx: &Context) { 15 | // We use Id::NULL because there's only one instance of this plugin. 16 | if ctx.data(|d| d.get_temp::(Id::NULL).is_none()) { 17 | ctx.on_end_pass("update_viewport_theme", Arc::new(State::end_frame)); 18 | } 19 | } 20 | 21 | #[derive(Debug, Clone)] 22 | struct State { 23 | preference: ThemePreference, 24 | } 25 | 26 | impl State { 27 | fn end_frame(ctx: &Context) { 28 | let preference = ctx.options(|opt| opt.theme_preference); 29 | let has_changed = !ctx 30 | .data(|d| d.get_temp::(Id::NULL)) 31 | .map(|s| s.preference) 32 | .is_some_and(|old| old == preference); 33 | if has_changed { 34 | ctx.send_viewport_cmd(ViewportCommand::SetTheme(to_system_theme(preference))); 35 | ctx.data_mut(|d| d.insert_temp(Id::NULL, State { preference })); 36 | } 37 | } 38 | } 39 | 40 | fn to_system_theme(preference: ThemePreference) -> SystemTheme { 41 | match preference { 42 | ThemePreference::System => SystemTheme::SystemDefault, 43 | ThemePreference::Dark => SystemTheme::Dark, 44 | ThemePreference::Light => SystemTheme::Light, 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /demo/src/linux_system_theme.rs: -------------------------------------------------------------------------------- 1 | use std::sync::{Arc, RwLock}; 2 | 3 | use ashpd::desktop::settings::{ColorScheme, Settings}; 4 | use async_std::{stream::StreamExt as _, task}; 5 | use egui::{Context, Id, Theme}; 6 | 7 | pub(crate) fn register(ctx: &Context) { 8 | let theme = Arc::new(RwLock::new(None)); 9 | let handle = task::spawn(update_theme(theme.clone())); 10 | ctx.data_mut(|w| w.insert_temp(Id::NULL, State(Arc::new(RwLock::new(Some(handle)))))); 11 | ctx.on_begin_pass( 12 | "update_system_theme", 13 | Arc::new(move |ctx| { 14 | ctx.input_mut(|input| input.raw.system_theme = theme.read().ok().map(|t| *t).flatten()) 15 | }), 16 | ) 17 | } 18 | 19 | #[derive(Debug, Clone)] 20 | struct State(Arc>>>); 21 | 22 | impl Drop for State { 23 | fn drop(&mut self) { 24 | if let Ok(mut handle) = self.0.write() { 25 | if let Some(handle) = handle.take() { 26 | _ = handle.cancel(); 27 | } 28 | } 29 | } 30 | } 31 | 32 | async fn update_theme(output: Arc>>) { 33 | if let Ok(settings) = Settings::new().await { 34 | let stream = settings.receive_color_scheme_changed().await.unwrap(); 35 | let theme = settings.color_scheme().await.ok().and_then(to_theme); 36 | *output.write().unwrap() = theme; 37 | stream 38 | .for_each(|color_scheme| *output.write().unwrap() = to_theme(color_scheme)) 39 | .await 40 | } 41 | } 42 | 43 | /// Eframe doesn't follow the system theme on Linux. 44 | /// See: 45 | 46 | fn to_theme(color_scheme: ColorScheme) -> Option { 47 | match color_scheme { 48 | ColorScheme::NoPreference => None, 49 | ColorScheme::PreferLight => Some(Theme::Light), 50 | ColorScheme::PreferDark => Some(Theme::Dark), 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/moon.rs: -------------------------------------------------------------------------------- 1 | use super::arc; 2 | use egui::epaint::{CubicBezierShape, PathShape, PathStroke}; 3 | use egui::{Color32, Painter, Pos2, Vec2}; 4 | use std::f32::consts::{PI, TAU}; 5 | 6 | /// Draws an outlined moon symbol in the waxing crescent phase. 7 | pub(crate) fn moon(painter: &Painter, center: Pos2, radius: f32, color: Color32) { 8 | let stroke_width = radius / 5.0; 9 | 10 | let start = 0.04 * TAU; 11 | let start_vec = radius * Vec2::angled(start); 12 | let size = 0.65 * TAU; 13 | let end_vec = radius * Vec2::angled(start + size); 14 | 15 | let direction_angle = start - (TAU - size) / 2.; 16 | let direction = Vec2::angled(direction_angle); 17 | 18 | // We want to draw a circle with the same radius somewhere on the line 19 | // `direction` such that it intersects with our first circle at `start` and `end`. 20 | // The connection between the start and end points is a chord of our occluding circle. 21 | let chord = start_vec - end_vec; 22 | let angle = 2.0 * (chord.length() / (2.0 * radius)).asin(); 23 | let sagitta = radius * (1.0 - (angle / 2.0).cos()); 24 | let apothem = radius - sagitta; 25 | let occluding_center = center + midpoint(start_vec, end_vec) + apothem * direction; 26 | 27 | let occlusion_start = direction_angle + PI - angle / 2.; 28 | let occlusion_end = direction_angle + PI + angle / 2.; 29 | 30 | let main_arc = arc::approximate_with_beziers( 31 | center, 32 | radius, 33 | start..=(start + size), 34 | Color32::TRANSPARENT, 35 | (stroke_width, color), 36 | ); 37 | let occluding_arc = arc::approximate_with_beziers( 38 | occluding_center, 39 | radius, 40 | occlusion_end..=occlusion_start, 41 | Color32::TRANSPARENT, 42 | (stroke_width, color), 43 | ); 44 | 45 | // We join the beziers together to a path which improves 46 | // the drawing of the joints somewhat. 47 | let path = to_path(main_arc.chain(occluding_arc), (stroke_width, color)); 48 | 49 | painter.add(path); 50 | } 51 | 52 | fn midpoint(a: Vec2, b: Vec2) -> Vec2 { 53 | 0.5 * (a + b) 54 | } 55 | 56 | fn to_path( 57 | beziers: impl IntoIterator, 58 | stroke: impl Into, 59 | ) -> PathShape { 60 | let points = beziers.into_iter().flat_map(|b| b.flatten(None)).collect(); 61 | PathShape { 62 | points, 63 | closed: false, 64 | fill: Default::default(), 65 | stroke: stroke.into(), 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: ["main"] 6 | pull_request: 7 | branches: ["main"] 8 | 9 | env: 10 | CARGO_TERM_COLOR: always 11 | RUSTFLAGS: -Dwarnings 12 | 13 | jobs: 14 | pre-build: 15 | name: Pre-Build 16 | runs-on: fedora-latest 17 | outputs: 18 | rust-version: ${{ steps.rust-version.outputs.rust-version }} 19 | steps: 20 | - uses: actions/checkout@v4 21 | - name: Determine Rust Version 22 | id: rust-version 23 | run: | 24 | rust_version=$(cargo metadata --format-version 1 --no-deps | jq -r '.packages[] | select(.name == "egui-theme-switch") | .rust_version') 25 | echo "rust-version=$rust_version" >> "$GITHUB_OUTPUT" 26 | 27 | build: 28 | needs: pre-build 29 | name: ${{ format('Build ({0})', matrix.rust-version) }} 30 | runs-on: fedora-latest 31 | strategy: 32 | matrix: 33 | rust-version: 34 | ["${{needs.pre-build.outputs.rust-version}}", stable, nightly] 35 | steps: 36 | - uses: actions/checkout@v4 37 | - name: Use Rust ${{matrix.rust-version}} 38 | if: matrix.rust-version != 'stable' 39 | run: rustup override set '${{matrix.rust-version}}' 40 | - name: Build 41 | run: cargo build --workspace --all-targets --all-features 42 | 43 | docs: 44 | name: Docs 45 | runs-on: fedora-latest 46 | steps: 47 | - uses: actions/checkout@v4 48 | - run: rustup override set nightly 49 | - name: Build Docs 50 | run: cargo doc --workspace --all-features --no-deps 51 | env: 52 | RUSTDOCFLAGS: -Dwarnings 53 | 54 | lint: 55 | runs-on: fedora-latest 56 | name: Lint 57 | steps: 58 | - uses: actions/checkout@v4 59 | - run: rustup update stable && rustup default stable 60 | - run: rustup component add rustfmt 61 | - name: Check format 62 | run: cargo fmt -- --check 63 | - name: Run clippy 64 | run: cargo clippy --workspace --all-targets --all-features -- --deny warnings 65 | - uses: https://github.com/EmbarkStudios/cargo-deny-action@v2 66 | 67 | test: 68 | name: Test 69 | strategy: 70 | matrix: 71 | os: [fedora-latest, macos-latest, windows-latest] 72 | runs-on: ${{ matrix.os }} 73 | steps: 74 | - uses: actions/checkout@v4 75 | - name: Run tests on all targets 76 | run: cargo test --workspace --all-targets --all-features 77 | - name: Run doc tests 78 | run: cargo test --workspace --doc --all-features 79 | 80 | test_package: 81 | name: Test Package 82 | runs-on: fedora-latest 83 | steps: 84 | - uses: actions/checkout@v4 85 | - name: Package 86 | run: cargo package -p egui-theme-switch 87 | - name: Test Package 88 | run: (cd target/package/egui-theme-switch-*/ && cargo test) 89 | -------------------------------------------------------------------------------- /src/arc.rs: -------------------------------------------------------------------------------- 1 | use egui::emath::{Pos2, Vec2, vec2}; 2 | use egui::epaint::{Color32, CubicBezierShape, Stroke}; 3 | use std::f32::consts::FRAC_PI_2; 4 | use std::ops::RangeInclusive; 5 | 6 | pub(crate) fn approximate_with_beziers( 7 | center: impl Into, 8 | radius: impl Into, 9 | range: impl Into>, 10 | fill: impl Into, 11 | stroke: impl Into, 12 | ) -> impl Iterator + Clone { 13 | let fill = fill.into(); 14 | let stroke = stroke.into(); 15 | approximate_with_beziers_impl(center.into(), radius.into(), range.into()) 16 | .map(move |p| CubicBezierShape::from_points_stroke(p, false, fill, stroke)) 17 | } 18 | 19 | // Implementation based on: 20 | // Riškus, Aleksas. (2006). Approximation of a cubic bezier curve by circular arcs and vice versa. 21 | // Information Technology and Control. 35. 22 | 23 | fn approximate_with_beziers_impl( 24 | center: Pos2, 25 | radius: f32, 26 | range: RangeInclusive, 27 | ) -> impl Iterator + Clone { 28 | QuarterTurnsIter(Some(range)) 29 | .map(move |r| approximate_with_bezier(center, radius, *r.start(), *r.end())) 30 | } 31 | 32 | fn approximate_with_bezier(center: Pos2, radius: f32, start: f32, end: f32) -> [Pos2; 4] { 33 | let p1 = center + radius * Vec2::angled(start); 34 | let p4 = center + radius * Vec2::angled(end); 35 | 36 | let a = p1 - center; 37 | let b = p4 - center; 38 | let q1 = a.length_sq(); 39 | let q2 = q1 + a.dot(b); 40 | let k2 = (4.0 / 3.0) * ((2.0 * q1 * q2).sqrt() - q2) / (a.x * b.y - a.y * b.x); 41 | 42 | let p2 = center + vec2(a.x - k2 * a.y, a.y + k2 * a.x); 43 | let p3 = center + vec2(b.x + k2 * b.y, b.y - k2 * b.x); 44 | 45 | [p1, p2, p3, p4] 46 | } 47 | 48 | // We can approximate at most one quadrant of the circle 49 | // so we divide it up into individual chunks that we then approximate 50 | // using bezier curves. 51 | #[derive(Clone)] 52 | struct QuarterTurnsIter(Option>); 53 | 54 | const QUARTER_TURN: f32 = FRAC_PI_2; 55 | 56 | impl Iterator for QuarterTurnsIter { 57 | type Item = RangeInclusive; 58 | 59 | fn next(&mut self) -> Option { 60 | let (start, end) = self.0.clone()?.into_inner(); 61 | let distance = end - start; 62 | if distance < QUARTER_TURN { 63 | self.0 = None; 64 | Some(start..=end) 65 | } else { 66 | let new_start = start + (QUARTER_TURN * distance.signum()); 67 | self.0 = Some(new_start..=end); 68 | Some(start..=new_start) 69 | } 70 | } 71 | 72 | fn size_hint(&self) -> (usize, Option) { 73 | if let Some((start, end)) = self.0.clone().map(|x| x.into_inner()) { 74 | let turns = (start - end).abs() / QUARTER_TURN; 75 | let lower = turns.floor() as usize; 76 | let upper = turns.ceil() as usize; 77 | (lower, Some(upper)) 78 | } else { 79 | (0, None) 80 | } 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /demo/src/main.rs: -------------------------------------------------------------------------------- 1 | #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release 2 | 3 | #[cfg(target_arch = "wasm32")] 4 | use eframe::wasm_bindgen::JsCast as _; 5 | use eframe::{CreationContext, Frame}; 6 | use egui::{CentralPanel, Hyperlink}; 7 | use egui_theme_switch::global_theme_switch; 8 | 9 | mod auto_viewport_theme; 10 | 11 | #[cfg(not(target_arch = "wasm32"))] 12 | fn main() -> eframe::Result { 13 | use egui::{ViewportBuilder, vec2}; 14 | 15 | let options = eframe::NativeOptions { 16 | centered: true, 17 | persist_window: false, 18 | viewport: ViewportBuilder { 19 | inner_size: Some(vec2(200., 70.)), 20 | ..Default::default() 21 | }, 22 | ..Default::default() 23 | }; 24 | 25 | eframe::run_native( 26 | "Theme Switch Demo", 27 | options, 28 | Box::new(move |cc| Ok(Box::new(ThemeSwitchDemoApp::new(cc)))), 29 | ) 30 | } 31 | 32 | #[cfg(target_arch = "wasm32")] 33 | fn main() { 34 | // Redirect `log` message to `console.log` and friends: 35 | eframe::WebLogger::init(log::LevelFilter::Debug).ok(); 36 | 37 | let web_options = eframe::WebOptions::default(); 38 | 39 | wasm_bindgen_futures::spawn_local(async { 40 | let canvas = web_sys::window() 41 | .unwrap() 42 | .document() 43 | .unwrap() 44 | .get_element_by_id("egui-app") 45 | .unwrap(); 46 | let start_result = eframe::WebRunner::new() 47 | .start( 48 | canvas.dyn_into().unwrap(), 49 | web_options, 50 | Box::new(|cc| Ok(Box::new(ThemeSwitchDemoApp::new(cc)))), 51 | ) 52 | .await; 53 | 54 | // Remove the loading text and spinner: 55 | let loading_text = web_sys::window() 56 | .and_then(|w| w.document()) 57 | .and_then(|d| d.get_element_by_id("loading_text")); 58 | if let Some(loading_text) = loading_text { 59 | match start_result { 60 | Ok(_) => { 61 | loading_text.remove(); 62 | } 63 | Err(e) => { 64 | loading_text.set_inner_html( 65 | "

The app has crashed. See the developer console for details.

", 66 | ); 67 | panic!("Failed to start eframe: {e:?}"); 68 | } 69 | } 70 | } 71 | }); 72 | } 73 | 74 | #[derive(Debug)] 75 | struct ThemeSwitchDemoApp; 76 | 77 | impl ThemeSwitchDemoApp { 78 | fn new(cc: &CreationContext) -> Self { 79 | auto_viewport_theme::register(&cc.egui_ctx); 80 | Self 81 | } 82 | } 83 | 84 | impl eframe::App for ThemeSwitchDemoApp { 85 | fn update(&mut self, ctx: &egui::Context, _frame: &mut Frame) { 86 | CentralPanel::default().show(ctx, |ui| { 87 | ui.style_mut().spacing.interact_size *= 1.5; 88 | 89 | ui.vertical_centered(|ui| { 90 | #[cfg(target_arch = "wasm32")] 91 | { 92 | ui.heading("Theme Switch Demo"); 93 | ui.add_space(2.0); 94 | } 95 | 96 | ui.add_space(2.0); 97 | global_theme_switch(ui); 98 | 99 | ui.add_space(4.0); 100 | ui.add( 101 | Hyperlink::from_label_and_url( 102 | "source code", 103 | "https://github.com/bash/egui-theme-switch", 104 | ) 105 | .open_in_new_tab(true), // TODO: find out why opening in the same tab just reloads the current page 106 | ); 107 | }) 108 | }); 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /demo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | Theme Switch Demo 13 | 14 | 15 | 16 | 17 | 18 | 19 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 |
114 |

Loading…

115 |
116 |
117 | 118 | 119 | -------------------------------------------------------------------------------- /license-apache.txt: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | #![deny(clippy::dbg_macro, clippy::unwrap_used)] 2 | 3 | //! A *very* pretty theme switch widget for your egui app. 4 | //! It allows you to choose between dark, light and follow system. 5 | //! 6 | #![cfg_attr(doc, doc = include_str!("../doc/preview.md"))] 7 | //! 8 | //! ## Example 9 | //! ``` 10 | //! use egui::ThemePreference; 11 | //! use egui_theme_switch::global_theme_switch; 12 | //! 13 | //! # egui::__run_test_ui(|ui| { 14 | //! global_theme_switch(ui); 15 | //! # }); 16 | //! ``` 17 | 18 | use egui::emath::{Pos2, Rect}; 19 | use egui::epaint::Color32; 20 | use egui::{Painter, Response, ThemePreference, Ui, Widget}; 21 | 22 | mod arc; 23 | mod cogwheel; 24 | mod moon; 25 | mod rotated_rect; 26 | mod sun; 27 | 28 | /// A switch control to configure the global theme preference. 29 | pub fn global_theme_switch(ui: &mut Ui) { 30 | let mut preference = ui.ctx().options(|opt| opt.theme_preference); 31 | if ui.add(ThemeSwitch::new(&mut preference)).changed() { 32 | ui.ctx().set_theme(preference); 33 | } 34 | } 35 | 36 | /// A switch control that allows choosing the theme 37 | /// preference (dark, light or follow system). 38 | /// 39 | /// ``` 40 | /// use egui::ThemePreference; 41 | /// use egui_theme_switch::ThemeSwitch; 42 | /// 43 | /// # egui::__run_test_ui(|ui| { 44 | /// let mut preference = ThemePreference::System; 45 | /// if ui.add(ThemeSwitch::new(&mut preference)).changed() { 46 | /// // ... 47 | /// } 48 | /// # }); 49 | /// ``` 50 | #[must_use = "You should put this widget in an ui with `ui.add(widget);`"] 51 | #[derive(Debug)] 52 | pub struct ThemeSwitch<'a> { 53 | value: &'a mut ThemePreference, 54 | } 55 | 56 | impl<'a> ThemeSwitch<'a> { 57 | pub fn new(value: &'a mut ThemePreference) -> Self { 58 | Self { value } 59 | } 60 | } 61 | 62 | impl Widget for ThemeSwitch<'_> { 63 | fn ui(self, ui: &mut crate::Ui) -> crate::Response { 64 | static OPTIONS: [SwitchOption; 3] = [ 65 | SwitchOption { 66 | value: ThemePreference::System, 67 | icon: cogwheel::cogwheel, 68 | label: "Follow System", 69 | }, 70 | SwitchOption { 71 | value: ThemePreference::Dark, 72 | icon: moon::moon, 73 | label: "Dark", 74 | }, 75 | SwitchOption { 76 | value: ThemePreference::Light, 77 | icon: sun::sun, 78 | label: "Light", 79 | }, 80 | ]; 81 | let (update, response) = switch(ui, *self.value, "Theme", &OPTIONS); 82 | 83 | if let Some(value) = update { 84 | *self.value = value; 85 | } 86 | 87 | response 88 | } 89 | } 90 | 91 | #[derive(Debug, Clone)] 92 | struct SwitchOption { 93 | value: T, 94 | icon: IconPainter, 95 | label: &'static str, 96 | } 97 | 98 | type IconPainter = fn(&Painter, Pos2, f32, Color32); 99 | 100 | fn switch( 101 | ui: &mut Ui, 102 | value: T, 103 | label: &str, 104 | options: &[SwitchOption], 105 | ) -> (Option, Response) 106 | where 107 | T: PartialEq + Clone, 108 | { 109 | let mut space = space_allocation::allocate_space(ui, options); 110 | 111 | let updated_value = interactivity::update_value_on_click(&mut space, &value); 112 | let value = updated_value.clone().unwrap_or(value); 113 | 114 | if ui.is_rect_visible(space.rect) { 115 | painting::draw_switch_background(ui, &space); 116 | painting::draw_active_indicator(ui, &space, &value); 117 | 118 | for button in &space.buttons { 119 | painting::draw_button(ui, button, value == button.option.value); 120 | } 121 | } 122 | 123 | accessibility::attach_widget_info(ui, &space, label, &value); 124 | 125 | (updated_value, unioned_response(space)) 126 | } 127 | 128 | fn unioned_response(space: AllocatedSpace) -> Response { 129 | space 130 | .buttons 131 | .into_iter() 132 | .fold(space.response, |r, button| r.union(button.response)) 133 | } 134 | 135 | struct AllocatedSpace { 136 | response: Response, 137 | rect: Rect, 138 | buttons: Vec>, 139 | radius: f32, 140 | } 141 | 142 | struct ButtonSpace { 143 | center: Pos2, 144 | response: Response, 145 | radius: f32, 146 | option: SwitchOption, 147 | } 148 | 149 | mod space_allocation { 150 | use super::*; 151 | use egui::emath::vec2; 152 | use egui::{Id, Sense}; 153 | 154 | pub(super) fn allocate_space(ui: &mut Ui, options: &[SwitchOption]) -> AllocatedSpace 155 | where 156 | T: Clone, 157 | { 158 | let (rect, response, measurements) = allocate_switch(ui, options); 159 | let id = response.id; 160 | 161 | let ui_builder = egui::UiBuilder::new().accessibility_parent(id); 162 | let ui = ui.new_child(ui_builder); 163 | 164 | let buttons = options 165 | .iter() 166 | .enumerate() 167 | .scan(rect, |remaining, (n, option)| { 168 | Some(allocate_button( 169 | &ui, 170 | remaining, 171 | id, 172 | &measurements, 173 | n, 174 | option, 175 | )) 176 | }) 177 | .collect(); 178 | 179 | AllocatedSpace { 180 | response, 181 | rect, 182 | buttons, 183 | radius: measurements.radius, 184 | } 185 | } 186 | 187 | fn allocate_switch( 188 | ui: &mut Ui, 189 | options: &[SwitchOption], 190 | ) -> (Rect, Response, SwitchMeasurements) { 191 | let diameter = ui.spacing().interact_size.y; 192 | let radius = diameter / 2.0; 193 | let padding = ui.spacing().button_padding.min_elem(); 194 | let min_gap = 0.5 * ui.spacing().item_spacing.x; 195 | let gap_count = options.len().saturating_sub(1) as f32; 196 | let button_count = options.len() as f32; 197 | 198 | let min_size = vec2( 199 | button_count * diameter + (gap_count * min_gap) + (2.0 * padding), 200 | diameter + (2.0 * padding), 201 | ); 202 | let sense = Sense::focusable_noninteractive(); 203 | let (rect, response) = ui.allocate_at_least(min_size, sense); 204 | 205 | // The space we're given might be larger so we calculate 206 | // the margin based on the allocated rect. 207 | let total_gap = rect.width() - (button_count * diameter) - (2.0 * padding); 208 | let gap = total_gap / gap_count; 209 | 210 | let measurements = SwitchMeasurements { 211 | gap, 212 | radius, 213 | padding, 214 | buttons: options.len(), 215 | }; 216 | 217 | (rect, response, measurements) 218 | } 219 | 220 | struct SwitchMeasurements { 221 | gap: f32, 222 | radius: f32, 223 | padding: f32, 224 | buttons: usize, 225 | } 226 | 227 | fn allocate_button( 228 | ui: &Ui, 229 | remaining: &mut Rect, 230 | switch_id: Id, 231 | measurements: &SwitchMeasurements, 232 | n: usize, 233 | option: &SwitchOption, 234 | ) -> ButtonSpace 235 | where 236 | T: Clone, 237 | { 238 | let (rect, center) = partition(remaining, measurements, n); 239 | let response = ui.interact(rect, switch_id.with(n), Sense::click()); 240 | ButtonSpace { 241 | center, 242 | response, 243 | radius: measurements.radius, 244 | option: option.clone(), 245 | } 246 | } 247 | 248 | fn partition( 249 | remaining: &mut Rect, 250 | measurements: &SwitchMeasurements, 251 | n: usize, 252 | ) -> (Rect, Pos2) { 253 | let (leading, trailing) = offset(n, measurements); 254 | let center = remaining.left_center() + vec2(leading + measurements.radius, 0.0); 255 | let right = remaining.min.x + leading + 2.0 * measurements.radius + trailing; 256 | let (rect, new_remaining) = remaining.split_left_right_at_x(right); 257 | *remaining = new_remaining; 258 | (rect, center) 259 | } 260 | 261 | // Calculates the leading and trailing space for a button. 262 | // The gap between buttons is divided up evenly so that the entire 263 | // switch is clickable. 264 | fn offset(n: usize, measurements: &SwitchMeasurements) -> (f32, f32) { 265 | let leading = if n == 0 { 266 | measurements.padding 267 | } else { 268 | measurements.gap / 2.0 269 | }; 270 | let trailing = if n == measurements.buttons - 1 { 271 | measurements.padding 272 | } else { 273 | measurements.gap / 2.0 274 | }; 275 | (leading, trailing) 276 | } 277 | } 278 | 279 | mod interactivity { 280 | use super::*; 281 | 282 | pub(super) fn update_value_on_click(space: &mut AllocatedSpace, value: &T) -> Option 283 | where 284 | T: PartialEq + Clone, 285 | { 286 | let clicked = space 287 | .buttons 288 | .iter_mut() 289 | .find(|b| b.response.clicked()) 290 | .filter(|b| &b.option.value != value)?; 291 | clicked.response.mark_changed(); 292 | Some(clicked.option.value.clone()) 293 | } 294 | } 295 | 296 | mod painting { 297 | use super::*; 298 | use egui::emath::pos2; 299 | use egui::epaint::Stroke; 300 | use egui::style::WidgetVisuals; 301 | use egui::{Id, StrokeKind}; 302 | 303 | pub(super) fn draw_switch_background(ui: &Ui, space: &AllocatedSpace) { 304 | let rect = space.rect; 305 | let rounding = 0.5 * rect.height(); 306 | let WidgetVisuals { 307 | bg_fill, bg_stroke, .. 308 | } = switch_visuals(ui, &space.response); 309 | ui.painter() 310 | .rect(rect, rounding, bg_fill, bg_stroke, StrokeKind::Middle); 311 | } 312 | 313 | fn switch_visuals(ui: &Ui, response: &Response) -> WidgetVisuals { 314 | if response.has_focus() { 315 | ui.style().visuals.widgets.hovered 316 | } else { 317 | ui.style().visuals.widgets.inactive 318 | } 319 | } 320 | 321 | pub(super) fn draw_active_indicator( 322 | ui: &Ui, 323 | space: &AllocatedSpace, 324 | value: &T, 325 | ) { 326 | let fill = ui.visuals().selection.bg_fill; 327 | if let Some(pos) = space 328 | .buttons 329 | .iter() 330 | .find(|button| &button.option.value == value) 331 | .map(|button| button.center) 332 | { 333 | let pos = animate_active_indicator_position(ui, space.response.id, space.rect.min, pos); 334 | ui.painter().circle(pos, space.radius, fill, Stroke::NONE); 335 | } 336 | } 337 | 338 | fn animate_active_indicator_position(ui: &Ui, id: Id, anchor: Pos2, pos: Pos2) -> Pos2 { 339 | let animation_time = ui.style().animation_time; 340 | // Animate the relative position to prevent 341 | // animating the active indicator when the switch itself is moved around. 342 | let x = pos.x - anchor.x; 343 | let x = anchor.x + ui.ctx().animate_value_with_time(id, x, animation_time); 344 | pos2(x, pos.y) 345 | } 346 | 347 | pub(super) fn draw_button(ui: &Ui, button: &ButtonSpace, selected: bool) { 348 | let visuals = ui.style().interact_selectable(&button.response, selected); 349 | let animation_factor = animate_click(ui, &button.response); 350 | let radius = animation_factor * button.radius; 351 | let icon_radius = 0.5 * radius * animation_factor; 352 | let bg_fill = button_fill(&button.response, &visuals); 353 | 354 | let painter = ui.painter(); 355 | painter.circle(button.center, radius, bg_fill, visuals.bg_stroke); 356 | (button.option.icon)(painter, button.center, icon_radius, visuals.fg_stroke.color); 357 | } 358 | 359 | // We want to avoid drawing a background when the button is either active itself or was previously active. 360 | fn button_fill(response: &Response, visuals: &WidgetVisuals) -> Color32 { 361 | if interacted(response) { 362 | visuals.bg_fill 363 | } else { 364 | Color32::TRANSPARENT 365 | } 366 | } 367 | 368 | fn interacted(response: &Response) -> bool { 369 | response.clicked() || response.hovered() || response.has_focus() 370 | } 371 | 372 | fn animate_click(ui: &Ui, response: &Response) -> f32 { 373 | let ctx = ui.ctx(); 374 | let animation_time = ui.style().animation_time; 375 | let value = if response.is_pointer_button_down_on() { 376 | 0.9 377 | } else { 378 | 1.0 379 | }; 380 | ctx.animate_value_with_time(response.id, value, animation_time) 381 | } 382 | } 383 | 384 | mod accessibility { 385 | use super::*; 386 | use egui::{WidgetInfo, WidgetType}; 387 | 388 | pub(super) fn attach_widget_info( 389 | ui: &Ui, 390 | space: &AllocatedSpace, 391 | label: &str, 392 | value: &T, 393 | ) { 394 | space 395 | .response 396 | .widget_info(|| radio_group_widget_info(ui, label)); 397 | 398 | for button in &space.buttons { 399 | let selected = value == &button.option.value; 400 | attach_widget_info_to_button(ui, button, selected); 401 | } 402 | } 403 | 404 | fn attach_widget_info_to_button(ui: &Ui, button: &ButtonSpace, selected: bool) { 405 | let response = &button.response; 406 | let label = button.option.label; 407 | response.widget_info(|| button_widget_info(ui, label, selected)); 408 | response.clone().on_hover_text(label); 409 | } 410 | 411 | fn radio_group_widget_info(ui: &Ui, label: &str) -> WidgetInfo { 412 | WidgetInfo::labeled(WidgetType::RadioGroup, ui.is_enabled(), label) 413 | } 414 | 415 | fn button_widget_info(ui: &Ui, label: &str, selected: bool) -> WidgetInfo { 416 | WidgetInfo::selected(WidgetType::RadioButton, ui.is_enabled(), selected, label) 417 | } 418 | } 419 | -------------------------------------------------------------------------------- /doc/preview.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /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 = "ab_glyph" 7 | version = "0.2.32" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "01c0457472c38ea5bd1c3b5ada5e368271cb550be7a4ca4a0b4634e9913f6cc2" 10 | dependencies = [ 11 | "ab_glyph_rasterizer", 12 | "owned_ttf_parser", 13 | ] 14 | 15 | [[package]] 16 | name = "ab_glyph_rasterizer" 17 | version = "0.1.9" 18 | source = "registry+https://github.com/rust-lang/crates.io-index" 19 | checksum = "b2187590a23ab1e3df8681afdf0987c48504d80291f002fcdb651f0ef5e25169" 20 | 21 | [[package]] 22 | name = "accesskit" 23 | version = "0.21.1" 24 | source = "registry+https://github.com/rust-lang/crates.io-index" 25 | checksum = "cf203f9d3bd8f29f98833d1fbef628df18f759248a547e7e01cfbf63cda36a99" 26 | dependencies = [ 27 | "enumn", 28 | "serde", 29 | ] 30 | 31 | [[package]] 32 | name = "accesskit_atspi_common" 33 | version = "0.14.1" 34 | source = "registry+https://github.com/rust-lang/crates.io-index" 35 | checksum = "29f73a9b855b6f4af4962a94553ef0c092b80cf5e17038724d5e30945d036f69" 36 | dependencies = [ 37 | "accesskit", 38 | "accesskit_consumer", 39 | "atspi-common", 40 | "serde", 41 | "thiserror 1.0.69", 42 | "zvariant", 43 | ] 44 | 45 | [[package]] 46 | name = "accesskit_consumer" 47 | version = "0.30.1" 48 | source = "registry+https://github.com/rust-lang/crates.io-index" 49 | checksum = "bdd06f5fea9819250fffd4debf926709f3593ac22f8c1541a2573e5ee0ca01cd" 50 | dependencies = [ 51 | "accesskit", 52 | "hashbrown 0.15.4", 53 | ] 54 | 55 | [[package]] 56 | name = "accesskit_macos" 57 | version = "0.22.1" 58 | source = "registry+https://github.com/rust-lang/crates.io-index" 59 | checksum = "93fbaf15815f39084e0cb24950c232f0e3634702c2dfbf182ae3b4919a4a1d45" 60 | dependencies = [ 61 | "accesskit", 62 | "accesskit_consumer", 63 | "hashbrown 0.15.4", 64 | "objc2 0.5.2", 65 | "objc2-app-kit 0.2.2", 66 | "objc2-foundation 0.2.2", 67 | ] 68 | 69 | [[package]] 70 | name = "accesskit_unix" 71 | version = "0.17.1" 72 | source = "registry+https://github.com/rust-lang/crates.io-index" 73 | checksum = "64926a930368d52d95422b822ede15014c04536cabaa2394f99567a1f4788dc6" 74 | dependencies = [ 75 | "accesskit", 76 | "accesskit_atspi_common", 77 | "async-channel", 78 | "async-executor", 79 | "async-task", 80 | "atspi", 81 | "futures-lite", 82 | "futures-util", 83 | "serde", 84 | "zbus", 85 | ] 86 | 87 | [[package]] 88 | name = "accesskit_windows" 89 | version = "0.29.1" 90 | source = "registry+https://github.com/rust-lang/crates.io-index" 91 | checksum = "792991159fa9ba57459de59e12e918bb90c5346fea7d40ac1a11f8632b41e63a" 92 | dependencies = [ 93 | "accesskit", 94 | "accesskit_consumer", 95 | "hashbrown 0.15.4", 96 | "static_assertions", 97 | "windows 0.61.3", 98 | "windows-core 0.61.2", 99 | ] 100 | 101 | [[package]] 102 | name = "accesskit_winit" 103 | version = "0.29.1" 104 | source = "registry+https://github.com/rust-lang/crates.io-index" 105 | checksum = "cd9db0ea66997e3f4eae4a5f2c6b6486cf206642639ee629dbbb860ace1dec87" 106 | dependencies = [ 107 | "accesskit", 108 | "accesskit_macos", 109 | "accesskit_unix", 110 | "accesskit_windows", 111 | "raw-window-handle", 112 | "winit", 113 | ] 114 | 115 | [[package]] 116 | name = "adler2" 117 | version = "2.0.1" 118 | source = "registry+https://github.com/rust-lang/crates.io-index" 119 | checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" 120 | 121 | [[package]] 122 | name = "ahash" 123 | version = "0.8.12" 124 | source = "registry+https://github.com/rust-lang/crates.io-index" 125 | checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" 126 | dependencies = [ 127 | "cfg-if", 128 | "getrandom", 129 | "once_cell", 130 | "serde", 131 | "version_check", 132 | "zerocopy", 133 | ] 134 | 135 | [[package]] 136 | name = "android-activity" 137 | version = "0.6.0" 138 | source = "registry+https://github.com/rust-lang/crates.io-index" 139 | checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" 140 | dependencies = [ 141 | "android-properties", 142 | "bitflags 2.9.4", 143 | "cc", 144 | "cesu8", 145 | "jni", 146 | "jni-sys", 147 | "libc", 148 | "log", 149 | "ndk", 150 | "ndk-context", 151 | "ndk-sys", 152 | "num_enum", 153 | "thiserror 1.0.69", 154 | ] 155 | 156 | [[package]] 157 | name = "android-properties" 158 | version = "0.2.2" 159 | source = "registry+https://github.com/rust-lang/crates.io-index" 160 | checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" 161 | 162 | [[package]] 163 | name = "android_system_properties" 164 | version = "0.1.5" 165 | source = "registry+https://github.com/rust-lang/crates.io-index" 166 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 167 | dependencies = [ 168 | "libc", 169 | ] 170 | 171 | [[package]] 172 | name = "arboard" 173 | version = "3.6.1" 174 | source = "registry+https://github.com/rust-lang/crates.io-index" 175 | checksum = "0348a1c054491f4bfe6ab86a7b6ab1e44e45d899005de92f58b3df180b36ddaf" 176 | dependencies = [ 177 | "clipboard-win", 178 | "image", 179 | "log", 180 | "objc2 0.6.1", 181 | "objc2-app-kit 0.3.1", 182 | "objc2-core-foundation", 183 | "objc2-core-graphics", 184 | "objc2-foundation 0.3.1", 185 | "parking_lot", 186 | "percent-encoding", 187 | "windows-sys 0.60.2", 188 | "x11rb", 189 | ] 190 | 191 | [[package]] 192 | name = "arrayref" 193 | version = "0.3.9" 194 | source = "registry+https://github.com/rust-lang/crates.io-index" 195 | checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" 196 | 197 | [[package]] 198 | name = "arrayvec" 199 | version = "0.7.6" 200 | source = "registry+https://github.com/rust-lang/crates.io-index" 201 | checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 202 | 203 | [[package]] 204 | name = "as-raw-xcb-connection" 205 | version = "1.0.1" 206 | source = "registry+https://github.com/rust-lang/crates.io-index" 207 | checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" 208 | 209 | [[package]] 210 | name = "ash" 211 | version = "0.38.0+1.3.281" 212 | source = "registry+https://github.com/rust-lang/crates.io-index" 213 | checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" 214 | dependencies = [ 215 | "libloading", 216 | ] 217 | 218 | [[package]] 219 | name = "async-broadcast" 220 | version = "0.7.2" 221 | source = "registry+https://github.com/rust-lang/crates.io-index" 222 | checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" 223 | dependencies = [ 224 | "event-listener", 225 | "event-listener-strategy", 226 | "futures-core", 227 | "pin-project-lite", 228 | ] 229 | 230 | [[package]] 231 | name = "async-channel" 232 | version = "2.5.0" 233 | source = "registry+https://github.com/rust-lang/crates.io-index" 234 | checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" 235 | dependencies = [ 236 | "concurrent-queue", 237 | "event-listener-strategy", 238 | "futures-core", 239 | "pin-project-lite", 240 | ] 241 | 242 | [[package]] 243 | name = "async-executor" 244 | version = "1.13.2" 245 | source = "registry+https://github.com/rust-lang/crates.io-index" 246 | checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" 247 | dependencies = [ 248 | "async-task", 249 | "concurrent-queue", 250 | "fastrand", 251 | "futures-lite", 252 | "pin-project-lite", 253 | "slab", 254 | ] 255 | 256 | [[package]] 257 | name = "async-io" 258 | version = "2.4.1" 259 | source = "registry+https://github.com/rust-lang/crates.io-index" 260 | checksum = "1237c0ae75a0f3765f58910ff9cdd0a12eeb39ab2f4c7de23262f337f0aacbb3" 261 | dependencies = [ 262 | "async-lock", 263 | "cfg-if", 264 | "concurrent-queue", 265 | "futures-io", 266 | "futures-lite", 267 | "parking", 268 | "polling", 269 | "rustix 1.0.7", 270 | "slab", 271 | "tracing", 272 | "windows-sys 0.59.0", 273 | ] 274 | 275 | [[package]] 276 | name = "async-lock" 277 | version = "3.4.0" 278 | source = "registry+https://github.com/rust-lang/crates.io-index" 279 | checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" 280 | dependencies = [ 281 | "event-listener", 282 | "event-listener-strategy", 283 | "pin-project-lite", 284 | ] 285 | 286 | [[package]] 287 | name = "async-process" 288 | version = "2.3.1" 289 | source = "registry+https://github.com/rust-lang/crates.io-index" 290 | checksum = "cde3f4e40e6021d7acffc90095cbd6dc54cb593903d1de5832f435eb274b85dc" 291 | dependencies = [ 292 | "async-channel", 293 | "async-io", 294 | "async-lock", 295 | "async-signal", 296 | "async-task", 297 | "blocking", 298 | "cfg-if", 299 | "event-listener", 300 | "futures-lite", 301 | "rustix 1.0.7", 302 | "tracing", 303 | ] 304 | 305 | [[package]] 306 | name = "async-recursion" 307 | version = "1.1.1" 308 | source = "registry+https://github.com/rust-lang/crates.io-index" 309 | checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" 310 | dependencies = [ 311 | "proc-macro2", 312 | "quote", 313 | "syn", 314 | ] 315 | 316 | [[package]] 317 | name = "async-signal" 318 | version = "0.2.11" 319 | source = "registry+https://github.com/rust-lang/crates.io-index" 320 | checksum = "d7605a4e50d4b06df3898d5a70bf5fde51ed9059b0434b73105193bc27acce0d" 321 | dependencies = [ 322 | "async-io", 323 | "async-lock", 324 | "atomic-waker", 325 | "cfg-if", 326 | "futures-core", 327 | "futures-io", 328 | "rustix 1.0.7", 329 | "signal-hook-registry", 330 | "slab", 331 | "windows-sys 0.59.0", 332 | ] 333 | 334 | [[package]] 335 | name = "async-task" 336 | version = "4.7.1" 337 | source = "registry+https://github.com/rust-lang/crates.io-index" 338 | checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" 339 | 340 | [[package]] 341 | name = "async-trait" 342 | version = "0.1.88" 343 | source = "registry+https://github.com/rust-lang/crates.io-index" 344 | checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" 345 | dependencies = [ 346 | "proc-macro2", 347 | "quote", 348 | "syn", 349 | ] 350 | 351 | [[package]] 352 | name = "atomic-waker" 353 | version = "1.1.2" 354 | source = "registry+https://github.com/rust-lang/crates.io-index" 355 | checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 356 | 357 | [[package]] 358 | name = "atspi" 359 | version = "0.25.0" 360 | source = "registry+https://github.com/rust-lang/crates.io-index" 361 | checksum = "c83247582e7508838caf5f316c00791eee0e15c0bf743e6880585b867e16815c" 362 | dependencies = [ 363 | "atspi-common", 364 | "atspi-connection", 365 | "atspi-proxies", 366 | ] 367 | 368 | [[package]] 369 | name = "atspi-common" 370 | version = "0.9.0" 371 | source = "registry+https://github.com/rust-lang/crates.io-index" 372 | checksum = "33dfc05e7cdf90988a197803bf24f5788f94f7c94a69efa95683e8ffe76cfdfb" 373 | dependencies = [ 374 | "enumflags2", 375 | "serde", 376 | "static_assertions", 377 | "zbus", 378 | "zbus-lockstep", 379 | "zbus-lockstep-macros", 380 | "zbus_names", 381 | "zvariant", 382 | ] 383 | 384 | [[package]] 385 | name = "atspi-connection" 386 | version = "0.9.0" 387 | source = "registry+https://github.com/rust-lang/crates.io-index" 388 | checksum = "4193d51303d8332304056ae0004714256b46b6635a5c556109b319c0d3784938" 389 | dependencies = [ 390 | "atspi-common", 391 | "atspi-proxies", 392 | "futures-lite", 393 | "zbus", 394 | ] 395 | 396 | [[package]] 397 | name = "atspi-proxies" 398 | version = "0.9.0" 399 | source = "registry+https://github.com/rust-lang/crates.io-index" 400 | checksum = "d2eebcb9e7e76f26d0bcfd6f0295e1cd1e6f33bedbc5698a971db8dc43d7751c" 401 | dependencies = [ 402 | "atspi-common", 403 | "serde", 404 | "zbus", 405 | ] 406 | 407 | [[package]] 408 | name = "autocfg" 409 | version = "1.5.0" 410 | source = "registry+https://github.com/rust-lang/crates.io-index" 411 | checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 412 | 413 | [[package]] 414 | name = "base64" 415 | version = "0.22.1" 416 | source = "registry+https://github.com/rust-lang/crates.io-index" 417 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 418 | 419 | [[package]] 420 | name = "bit-set" 421 | version = "0.8.0" 422 | source = "registry+https://github.com/rust-lang/crates.io-index" 423 | checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" 424 | dependencies = [ 425 | "bit-vec", 426 | ] 427 | 428 | [[package]] 429 | name = "bit-vec" 430 | version = "0.8.0" 431 | source = "registry+https://github.com/rust-lang/crates.io-index" 432 | checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" 433 | 434 | [[package]] 435 | name = "bitflags" 436 | version = "1.3.2" 437 | source = "registry+https://github.com/rust-lang/crates.io-index" 438 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 439 | 440 | [[package]] 441 | name = "bitflags" 442 | version = "2.9.4" 443 | source = "registry+https://github.com/rust-lang/crates.io-index" 444 | checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" 445 | dependencies = [ 446 | "serde", 447 | ] 448 | 449 | [[package]] 450 | name = "block" 451 | version = "0.1.6" 452 | source = "registry+https://github.com/rust-lang/crates.io-index" 453 | checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 454 | 455 | [[package]] 456 | name = "block2" 457 | version = "0.5.1" 458 | source = "registry+https://github.com/rust-lang/crates.io-index" 459 | checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" 460 | dependencies = [ 461 | "objc2 0.5.2", 462 | ] 463 | 464 | [[package]] 465 | name = "blocking" 466 | version = "1.6.2" 467 | source = "registry+https://github.com/rust-lang/crates.io-index" 468 | checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" 469 | dependencies = [ 470 | "async-channel", 471 | "async-task", 472 | "futures-io", 473 | "futures-lite", 474 | "piper", 475 | ] 476 | 477 | [[package]] 478 | name = "bumpalo" 479 | version = "3.19.0" 480 | source = "registry+https://github.com/rust-lang/crates.io-index" 481 | checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" 482 | 483 | [[package]] 484 | name = "bytemuck" 485 | version = "1.24.0" 486 | source = "registry+https://github.com/rust-lang/crates.io-index" 487 | checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" 488 | dependencies = [ 489 | "bytemuck_derive", 490 | ] 491 | 492 | [[package]] 493 | name = "bytemuck_derive" 494 | version = "1.10.2" 495 | source = "registry+https://github.com/rust-lang/crates.io-index" 496 | checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" 497 | dependencies = [ 498 | "proc-macro2", 499 | "quote", 500 | "syn", 501 | ] 502 | 503 | [[package]] 504 | name = "byteorder-lite" 505 | version = "0.1.0" 506 | source = "registry+https://github.com/rust-lang/crates.io-index" 507 | checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" 508 | 509 | [[package]] 510 | name = "bytes" 511 | version = "1.10.1" 512 | source = "registry+https://github.com/rust-lang/crates.io-index" 513 | checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 514 | 515 | [[package]] 516 | name = "calloop" 517 | version = "0.13.0" 518 | source = "registry+https://github.com/rust-lang/crates.io-index" 519 | checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" 520 | dependencies = [ 521 | "bitflags 2.9.4", 522 | "log", 523 | "polling", 524 | "rustix 0.38.44", 525 | "slab", 526 | "thiserror 1.0.69", 527 | ] 528 | 529 | [[package]] 530 | name = "calloop-wayland-source" 531 | version = "0.3.0" 532 | source = "registry+https://github.com/rust-lang/crates.io-index" 533 | checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" 534 | dependencies = [ 535 | "calloop", 536 | "rustix 0.38.44", 537 | "wayland-backend", 538 | "wayland-client", 539 | ] 540 | 541 | [[package]] 542 | name = "cc" 543 | version = "1.2.29" 544 | source = "registry+https://github.com/rust-lang/crates.io-index" 545 | checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362" 546 | dependencies = [ 547 | "jobserver", 548 | "libc", 549 | "shlex", 550 | ] 551 | 552 | [[package]] 553 | name = "cesu8" 554 | version = "1.1.0" 555 | source = "registry+https://github.com/rust-lang/crates.io-index" 556 | checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" 557 | 558 | [[package]] 559 | name = "cfg-if" 560 | version = "1.0.1" 561 | source = "registry+https://github.com/rust-lang/crates.io-index" 562 | checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" 563 | 564 | [[package]] 565 | name = "cfg_aliases" 566 | version = "0.2.1" 567 | source = "registry+https://github.com/rust-lang/crates.io-index" 568 | checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 569 | 570 | [[package]] 571 | name = "cgl" 572 | version = "0.3.2" 573 | source = "registry+https://github.com/rust-lang/crates.io-index" 574 | checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" 575 | dependencies = [ 576 | "libc", 577 | ] 578 | 579 | [[package]] 580 | name = "clipboard-win" 581 | version = "5.4.0" 582 | source = "registry+https://github.com/rust-lang/crates.io-index" 583 | checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" 584 | dependencies = [ 585 | "error-code", 586 | ] 587 | 588 | [[package]] 589 | name = "codespan-reporting" 590 | version = "0.12.0" 591 | source = "registry+https://github.com/rust-lang/crates.io-index" 592 | checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" 593 | dependencies = [ 594 | "serde", 595 | "termcolor", 596 | "unicode-width", 597 | ] 598 | 599 | [[package]] 600 | name = "combine" 601 | version = "4.6.7" 602 | source = "registry+https://github.com/rust-lang/crates.io-index" 603 | checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" 604 | dependencies = [ 605 | "bytes", 606 | "memchr", 607 | ] 608 | 609 | [[package]] 610 | name = "concurrent-queue" 611 | version = "2.5.0" 612 | source = "registry+https://github.com/rust-lang/crates.io-index" 613 | checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 614 | dependencies = [ 615 | "crossbeam-utils", 616 | ] 617 | 618 | [[package]] 619 | name = "core-foundation" 620 | version = "0.9.4" 621 | source = "registry+https://github.com/rust-lang/crates.io-index" 622 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 623 | dependencies = [ 624 | "core-foundation-sys", 625 | "libc", 626 | ] 627 | 628 | [[package]] 629 | name = "core-foundation" 630 | version = "0.10.1" 631 | source = "registry+https://github.com/rust-lang/crates.io-index" 632 | checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" 633 | dependencies = [ 634 | "core-foundation-sys", 635 | "libc", 636 | ] 637 | 638 | [[package]] 639 | name = "core-foundation-sys" 640 | version = "0.8.7" 641 | source = "registry+https://github.com/rust-lang/crates.io-index" 642 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 643 | 644 | [[package]] 645 | name = "core-graphics" 646 | version = "0.23.2" 647 | source = "registry+https://github.com/rust-lang/crates.io-index" 648 | checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" 649 | dependencies = [ 650 | "bitflags 1.3.2", 651 | "core-foundation 0.9.4", 652 | "core-graphics-types 0.1.3", 653 | "foreign-types", 654 | "libc", 655 | ] 656 | 657 | [[package]] 658 | name = "core-graphics-types" 659 | version = "0.1.3" 660 | source = "registry+https://github.com/rust-lang/crates.io-index" 661 | checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" 662 | dependencies = [ 663 | "bitflags 1.3.2", 664 | "core-foundation 0.9.4", 665 | "libc", 666 | ] 667 | 668 | [[package]] 669 | name = "core-graphics-types" 670 | version = "0.2.0" 671 | source = "registry+https://github.com/rust-lang/crates.io-index" 672 | checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" 673 | dependencies = [ 674 | "bitflags 2.9.4", 675 | "core-foundation 0.10.1", 676 | "libc", 677 | ] 678 | 679 | [[package]] 680 | name = "crc32fast" 681 | version = "1.4.2" 682 | source = "registry+https://github.com/rust-lang/crates.io-index" 683 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 684 | dependencies = [ 685 | "cfg-if", 686 | ] 687 | 688 | [[package]] 689 | name = "crossbeam-utils" 690 | version = "0.8.21" 691 | source = "registry+https://github.com/rust-lang/crates.io-index" 692 | checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 693 | 694 | [[package]] 695 | name = "crunchy" 696 | version = "0.2.4" 697 | source = "registry+https://github.com/rust-lang/crates.io-index" 698 | checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" 699 | 700 | [[package]] 701 | name = "cursor-icon" 702 | version = "1.2.0" 703 | source = "registry+https://github.com/rust-lang/crates.io-index" 704 | checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" 705 | 706 | [[package]] 707 | name = "dispatch" 708 | version = "0.2.0" 709 | source = "registry+https://github.com/rust-lang/crates.io-index" 710 | checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" 711 | 712 | [[package]] 713 | name = "dispatch2" 714 | version = "0.3.0" 715 | source = "registry+https://github.com/rust-lang/crates.io-index" 716 | checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" 717 | dependencies = [ 718 | "bitflags 2.9.4", 719 | "objc2 0.6.1", 720 | ] 721 | 722 | [[package]] 723 | name = "displaydoc" 724 | version = "0.2.5" 725 | source = "registry+https://github.com/rust-lang/crates.io-index" 726 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 727 | dependencies = [ 728 | "proc-macro2", 729 | "quote", 730 | "syn", 731 | ] 732 | 733 | [[package]] 734 | name = "dlib" 735 | version = "0.5.2" 736 | source = "registry+https://github.com/rust-lang/crates.io-index" 737 | checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" 738 | dependencies = [ 739 | "libloading", 740 | ] 741 | 742 | [[package]] 743 | name = "document-features" 744 | version = "0.2.11" 745 | source = "registry+https://github.com/rust-lang/crates.io-index" 746 | checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" 747 | dependencies = [ 748 | "litrs", 749 | ] 750 | 751 | [[package]] 752 | name = "downcast-rs" 753 | version = "1.2.1" 754 | source = "registry+https://github.com/rust-lang/crates.io-index" 755 | checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" 756 | 757 | [[package]] 758 | name = "dpi" 759 | version = "0.1.2" 760 | source = "registry+https://github.com/rust-lang/crates.io-index" 761 | checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" 762 | 763 | [[package]] 764 | name = "ecolor" 765 | version = "0.33.0" 766 | source = "registry+https://github.com/rust-lang/crates.io-index" 767 | checksum = "adf31f99fad93fe83c1055b92b5c1b135f1ecfa464789817c372000e768d4bd1" 768 | dependencies = [ 769 | "bytemuck", 770 | "emath", 771 | "serde", 772 | ] 773 | 774 | [[package]] 775 | name = "eframe" 776 | version = "0.33.0" 777 | source = "registry+https://github.com/rust-lang/crates.io-index" 778 | checksum = "b829d302a09deb4acde242262a1840ba14fadd0371980ebf713060077a1987bc" 779 | dependencies = [ 780 | "ahash", 781 | "bytemuck", 782 | "document-features", 783 | "egui", 784 | "egui-wgpu", 785 | "egui-winit", 786 | "egui_glow", 787 | "glow", 788 | "glutin", 789 | "glutin-winit", 790 | "home", 791 | "image", 792 | "js-sys", 793 | "log", 794 | "objc2 0.5.2", 795 | "objc2-app-kit 0.2.2", 796 | "objc2-foundation 0.2.2", 797 | "parking_lot", 798 | "percent-encoding", 799 | "profiling", 800 | "raw-window-handle", 801 | "ron", 802 | "serde", 803 | "static_assertions", 804 | "wasm-bindgen", 805 | "wasm-bindgen-futures", 806 | "web-sys", 807 | "web-time", 808 | "windows-sys 0.61.2", 809 | "winit", 810 | ] 811 | 812 | [[package]] 813 | name = "egui" 814 | version = "0.33.0" 815 | source = "registry+https://github.com/rust-lang/crates.io-index" 816 | checksum = "ab9b5d3376c79439f53a78bf7da1e3c0b862ffa3e29f46ab0f3e107430f2e576" 817 | dependencies = [ 818 | "accesskit", 819 | "ahash", 820 | "bitflags 2.9.4", 821 | "emath", 822 | "epaint", 823 | "log", 824 | "nohash-hasher", 825 | "profiling", 826 | "ron", 827 | "serde", 828 | "smallvec", 829 | "unicode-segmentation", 830 | ] 831 | 832 | [[package]] 833 | name = "egui-theme-switch" 834 | version = "0.5.0" 835 | dependencies = [ 836 | "egui", 837 | ] 838 | 839 | [[package]] 840 | name = "egui-theme-switch-demo" 841 | version = "0.1.0" 842 | dependencies = [ 843 | "eframe", 844 | "egui", 845 | "egui-theme-switch", 846 | "log", 847 | "wasm-bindgen-futures", 848 | "web-sys", 849 | ] 850 | 851 | [[package]] 852 | name = "egui-wgpu" 853 | version = "0.33.0" 854 | source = "registry+https://github.com/rust-lang/crates.io-index" 855 | checksum = "cef1fe83ba30b3d045814b2d811804f2a7e50a832034c975408f71c20df596e4" 856 | dependencies = [ 857 | "ahash", 858 | "bytemuck", 859 | "document-features", 860 | "egui", 861 | "epaint", 862 | "log", 863 | "profiling", 864 | "thiserror 2.0.17", 865 | "type-map", 866 | "web-time", 867 | "wgpu", 868 | "winit", 869 | ] 870 | 871 | [[package]] 872 | name = "egui-winit" 873 | version = "0.33.0" 874 | source = "registry+https://github.com/rust-lang/crates.io-index" 875 | checksum = "bb4ea8cb063c00d8f23ce11279c01eb63a195a72be0e21d429148246dab7983e" 876 | dependencies = [ 877 | "accesskit_winit", 878 | "arboard", 879 | "bytemuck", 880 | "egui", 881 | "log", 882 | "objc2 0.5.2", 883 | "objc2-foundation 0.2.2", 884 | "objc2-ui-kit", 885 | "profiling", 886 | "raw-window-handle", 887 | "serde", 888 | "smithay-clipboard", 889 | "web-time", 890 | "webbrowser", 891 | "winit", 892 | ] 893 | 894 | [[package]] 895 | name = "egui_glow" 896 | version = "0.33.0" 897 | source = "registry+https://github.com/rust-lang/crates.io-index" 898 | checksum = "668c0d4f726cc33838f0915f6b8c00af0ca0910e975ab58cf34b3e39c614552c" 899 | dependencies = [ 900 | "bytemuck", 901 | "egui", 902 | "glow", 903 | "log", 904 | "memoffset", 905 | "profiling", 906 | "wasm-bindgen", 907 | "web-sys", 908 | "winit", 909 | ] 910 | 911 | [[package]] 912 | name = "emath" 913 | version = "0.33.0" 914 | source = "registry+https://github.com/rust-lang/crates.io-index" 915 | checksum = "c615516cdceec867065f20d7db13d8eb8aedd65c9e32cc0c7c379380fa42e6e8" 916 | dependencies = [ 917 | "bytemuck", 918 | "serde", 919 | ] 920 | 921 | [[package]] 922 | name = "endi" 923 | version = "1.1.0" 924 | source = "registry+https://github.com/rust-lang/crates.io-index" 925 | checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" 926 | 927 | [[package]] 928 | name = "enumflags2" 929 | version = "0.7.12" 930 | source = "registry+https://github.com/rust-lang/crates.io-index" 931 | checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" 932 | dependencies = [ 933 | "enumflags2_derive", 934 | "serde", 935 | ] 936 | 937 | [[package]] 938 | name = "enumflags2_derive" 939 | version = "0.7.12" 940 | source = "registry+https://github.com/rust-lang/crates.io-index" 941 | checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" 942 | dependencies = [ 943 | "proc-macro2", 944 | "quote", 945 | "syn", 946 | ] 947 | 948 | [[package]] 949 | name = "enumn" 950 | version = "0.1.14" 951 | source = "registry+https://github.com/rust-lang/crates.io-index" 952 | checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" 953 | dependencies = [ 954 | "proc-macro2", 955 | "quote", 956 | "syn", 957 | ] 958 | 959 | [[package]] 960 | name = "epaint" 961 | version = "0.33.0" 962 | source = "registry+https://github.com/rust-lang/crates.io-index" 963 | checksum = "9926b9500ccb917adb070207ec722dd8ea78b8321f94a85ebec776f501f2930c" 964 | dependencies = [ 965 | "ab_glyph", 966 | "ahash", 967 | "bytemuck", 968 | "ecolor", 969 | "emath", 970 | "epaint_default_fonts", 971 | "log", 972 | "nohash-hasher", 973 | "parking_lot", 974 | "profiling", 975 | "serde", 976 | ] 977 | 978 | [[package]] 979 | name = "epaint_default_fonts" 980 | version = "0.33.0" 981 | source = "registry+https://github.com/rust-lang/crates.io-index" 982 | checksum = "66054d943c66715c6003a27a3dc152d87cadf714ef2597ccd79f550413009b97" 983 | 984 | [[package]] 985 | name = "equivalent" 986 | version = "1.0.2" 987 | source = "registry+https://github.com/rust-lang/crates.io-index" 988 | checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 989 | 990 | [[package]] 991 | name = "errno" 992 | version = "0.3.13" 993 | source = "registry+https://github.com/rust-lang/crates.io-index" 994 | checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" 995 | dependencies = [ 996 | "libc", 997 | "windows-sys 0.60.2", 998 | ] 999 | 1000 | [[package]] 1001 | name = "error-code" 1002 | version = "3.3.2" 1003 | source = "registry+https://github.com/rust-lang/crates.io-index" 1004 | checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" 1005 | 1006 | [[package]] 1007 | name = "event-listener" 1008 | version = "5.4.0" 1009 | source = "registry+https://github.com/rust-lang/crates.io-index" 1010 | checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" 1011 | dependencies = [ 1012 | "concurrent-queue", 1013 | "parking", 1014 | "pin-project-lite", 1015 | ] 1016 | 1017 | [[package]] 1018 | name = "event-listener-strategy" 1019 | version = "0.5.4" 1020 | source = "registry+https://github.com/rust-lang/crates.io-index" 1021 | checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" 1022 | dependencies = [ 1023 | "event-listener", 1024 | "pin-project-lite", 1025 | ] 1026 | 1027 | [[package]] 1028 | name = "fastrand" 1029 | version = "2.3.0" 1030 | source = "registry+https://github.com/rust-lang/crates.io-index" 1031 | checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 1032 | 1033 | [[package]] 1034 | name = "fdeflate" 1035 | version = "0.3.7" 1036 | source = "registry+https://github.com/rust-lang/crates.io-index" 1037 | checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" 1038 | dependencies = [ 1039 | "simd-adler32", 1040 | ] 1041 | 1042 | [[package]] 1043 | name = "flate2" 1044 | version = "1.1.2" 1045 | source = "registry+https://github.com/rust-lang/crates.io-index" 1046 | checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" 1047 | dependencies = [ 1048 | "crc32fast", 1049 | "miniz_oxide", 1050 | ] 1051 | 1052 | [[package]] 1053 | name = "foldhash" 1054 | version = "0.1.5" 1055 | source = "registry+https://github.com/rust-lang/crates.io-index" 1056 | checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 1057 | 1058 | [[package]] 1059 | name = "foldhash" 1060 | version = "0.2.0" 1061 | source = "registry+https://github.com/rust-lang/crates.io-index" 1062 | checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" 1063 | 1064 | [[package]] 1065 | name = "foreign-types" 1066 | version = "0.5.0" 1067 | source = "registry+https://github.com/rust-lang/crates.io-index" 1068 | checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" 1069 | dependencies = [ 1070 | "foreign-types-macros", 1071 | "foreign-types-shared", 1072 | ] 1073 | 1074 | [[package]] 1075 | name = "foreign-types-macros" 1076 | version = "0.2.3" 1077 | source = "registry+https://github.com/rust-lang/crates.io-index" 1078 | checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" 1079 | dependencies = [ 1080 | "proc-macro2", 1081 | "quote", 1082 | "syn", 1083 | ] 1084 | 1085 | [[package]] 1086 | name = "foreign-types-shared" 1087 | version = "0.3.1" 1088 | source = "registry+https://github.com/rust-lang/crates.io-index" 1089 | checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" 1090 | 1091 | [[package]] 1092 | name = "form_urlencoded" 1093 | version = "1.2.1" 1094 | source = "registry+https://github.com/rust-lang/crates.io-index" 1095 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 1096 | dependencies = [ 1097 | "percent-encoding", 1098 | ] 1099 | 1100 | [[package]] 1101 | name = "futures-core" 1102 | version = "0.3.31" 1103 | source = "registry+https://github.com/rust-lang/crates.io-index" 1104 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 1105 | 1106 | [[package]] 1107 | name = "futures-io" 1108 | version = "0.3.31" 1109 | source = "registry+https://github.com/rust-lang/crates.io-index" 1110 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 1111 | 1112 | [[package]] 1113 | name = "futures-lite" 1114 | version = "2.6.0" 1115 | source = "registry+https://github.com/rust-lang/crates.io-index" 1116 | checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" 1117 | dependencies = [ 1118 | "fastrand", 1119 | "futures-core", 1120 | "futures-io", 1121 | "parking", 1122 | "pin-project-lite", 1123 | ] 1124 | 1125 | [[package]] 1126 | name = "futures-macro" 1127 | version = "0.3.31" 1128 | source = "registry+https://github.com/rust-lang/crates.io-index" 1129 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 1130 | dependencies = [ 1131 | "proc-macro2", 1132 | "quote", 1133 | "syn", 1134 | ] 1135 | 1136 | [[package]] 1137 | name = "futures-task" 1138 | version = "0.3.31" 1139 | source = "registry+https://github.com/rust-lang/crates.io-index" 1140 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 1141 | 1142 | [[package]] 1143 | name = "futures-util" 1144 | version = "0.3.31" 1145 | source = "registry+https://github.com/rust-lang/crates.io-index" 1146 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 1147 | dependencies = [ 1148 | "futures-core", 1149 | "futures-macro", 1150 | "futures-task", 1151 | "pin-project-lite", 1152 | "pin-utils", 1153 | "slab", 1154 | ] 1155 | 1156 | [[package]] 1157 | name = "gethostname" 1158 | version = "0.4.3" 1159 | source = "registry+https://github.com/rust-lang/crates.io-index" 1160 | checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" 1161 | dependencies = [ 1162 | "libc", 1163 | "windows-targets 0.48.5", 1164 | ] 1165 | 1166 | [[package]] 1167 | name = "getrandom" 1168 | version = "0.3.3" 1169 | source = "registry+https://github.com/rust-lang/crates.io-index" 1170 | checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" 1171 | dependencies = [ 1172 | "cfg-if", 1173 | "libc", 1174 | "r-efi", 1175 | "wasi", 1176 | ] 1177 | 1178 | [[package]] 1179 | name = "gl_generator" 1180 | version = "0.14.0" 1181 | source = "registry+https://github.com/rust-lang/crates.io-index" 1182 | checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" 1183 | dependencies = [ 1184 | "khronos_api", 1185 | "log", 1186 | "xml-rs", 1187 | ] 1188 | 1189 | [[package]] 1190 | name = "glow" 1191 | version = "0.16.0" 1192 | source = "registry+https://github.com/rust-lang/crates.io-index" 1193 | checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" 1194 | dependencies = [ 1195 | "js-sys", 1196 | "slotmap", 1197 | "wasm-bindgen", 1198 | "web-sys", 1199 | ] 1200 | 1201 | [[package]] 1202 | name = "glutin" 1203 | version = "0.32.3" 1204 | source = "registry+https://github.com/rust-lang/crates.io-index" 1205 | checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" 1206 | dependencies = [ 1207 | "bitflags 2.9.4", 1208 | "cfg_aliases", 1209 | "cgl", 1210 | "dispatch2", 1211 | "glutin_egl_sys", 1212 | "glutin_glx_sys", 1213 | "glutin_wgl_sys", 1214 | "libloading", 1215 | "objc2 0.6.1", 1216 | "objc2-app-kit 0.3.1", 1217 | "objc2-core-foundation", 1218 | "objc2-foundation 0.3.1", 1219 | "once_cell", 1220 | "raw-window-handle", 1221 | "wayland-sys", 1222 | "windows-sys 0.52.0", 1223 | "x11-dl", 1224 | ] 1225 | 1226 | [[package]] 1227 | name = "glutin-winit" 1228 | version = "0.5.0" 1229 | source = "registry+https://github.com/rust-lang/crates.io-index" 1230 | checksum = "85edca7075f8fc728f28cb8fbb111a96c3b89e930574369e3e9c27eb75d3788f" 1231 | dependencies = [ 1232 | "cfg_aliases", 1233 | "glutin", 1234 | "raw-window-handle", 1235 | "winit", 1236 | ] 1237 | 1238 | [[package]] 1239 | name = "glutin_egl_sys" 1240 | version = "0.7.1" 1241 | source = "registry+https://github.com/rust-lang/crates.io-index" 1242 | checksum = "4c4680ba6195f424febdc3ba46e7a42a0e58743f2edb115297b86d7f8ecc02d2" 1243 | dependencies = [ 1244 | "gl_generator", 1245 | "windows-sys 0.52.0", 1246 | ] 1247 | 1248 | [[package]] 1249 | name = "glutin_glx_sys" 1250 | version = "0.6.1" 1251 | source = "registry+https://github.com/rust-lang/crates.io-index" 1252 | checksum = "8a7bb2938045a88b612499fbcba375a77198e01306f52272e692f8c1f3751185" 1253 | dependencies = [ 1254 | "gl_generator", 1255 | "x11-dl", 1256 | ] 1257 | 1258 | [[package]] 1259 | name = "glutin_wgl_sys" 1260 | version = "0.6.1" 1261 | source = "registry+https://github.com/rust-lang/crates.io-index" 1262 | checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e" 1263 | dependencies = [ 1264 | "gl_generator", 1265 | ] 1266 | 1267 | [[package]] 1268 | name = "gpu-alloc" 1269 | version = "0.6.0" 1270 | source = "registry+https://github.com/rust-lang/crates.io-index" 1271 | checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" 1272 | dependencies = [ 1273 | "bitflags 2.9.4", 1274 | "gpu-alloc-types", 1275 | ] 1276 | 1277 | [[package]] 1278 | name = "gpu-alloc-types" 1279 | version = "0.3.0" 1280 | source = "registry+https://github.com/rust-lang/crates.io-index" 1281 | checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" 1282 | dependencies = [ 1283 | "bitflags 2.9.4", 1284 | ] 1285 | 1286 | [[package]] 1287 | name = "gpu-allocator" 1288 | version = "0.27.0" 1289 | source = "registry+https://github.com/rust-lang/crates.io-index" 1290 | checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" 1291 | dependencies = [ 1292 | "log", 1293 | "presser", 1294 | "thiserror 1.0.69", 1295 | "windows 0.58.0", 1296 | ] 1297 | 1298 | [[package]] 1299 | name = "gpu-descriptor" 1300 | version = "0.3.2" 1301 | source = "registry+https://github.com/rust-lang/crates.io-index" 1302 | checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" 1303 | dependencies = [ 1304 | "bitflags 2.9.4", 1305 | "gpu-descriptor-types", 1306 | "hashbrown 0.15.4", 1307 | ] 1308 | 1309 | [[package]] 1310 | name = "gpu-descriptor-types" 1311 | version = "0.2.0" 1312 | source = "registry+https://github.com/rust-lang/crates.io-index" 1313 | checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" 1314 | dependencies = [ 1315 | "bitflags 2.9.4", 1316 | ] 1317 | 1318 | [[package]] 1319 | name = "half" 1320 | version = "2.6.0" 1321 | source = "registry+https://github.com/rust-lang/crates.io-index" 1322 | checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" 1323 | dependencies = [ 1324 | "cfg-if", 1325 | "crunchy", 1326 | "num-traits", 1327 | ] 1328 | 1329 | [[package]] 1330 | name = "hashbrown" 1331 | version = "0.15.4" 1332 | source = "registry+https://github.com/rust-lang/crates.io-index" 1333 | checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" 1334 | dependencies = [ 1335 | "foldhash 0.1.5", 1336 | ] 1337 | 1338 | [[package]] 1339 | name = "hashbrown" 1340 | version = "0.16.0" 1341 | source = "registry+https://github.com/rust-lang/crates.io-index" 1342 | checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" 1343 | dependencies = [ 1344 | "foldhash 0.2.0", 1345 | ] 1346 | 1347 | [[package]] 1348 | name = "hermit-abi" 1349 | version = "0.5.2" 1350 | source = "registry+https://github.com/rust-lang/crates.io-index" 1351 | checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" 1352 | 1353 | [[package]] 1354 | name = "hex" 1355 | version = "0.4.3" 1356 | source = "registry+https://github.com/rust-lang/crates.io-index" 1357 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1358 | 1359 | [[package]] 1360 | name = "hexf-parse" 1361 | version = "0.2.1" 1362 | source = "registry+https://github.com/rust-lang/crates.io-index" 1363 | checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" 1364 | 1365 | [[package]] 1366 | name = "home" 1367 | version = "0.5.11" 1368 | source = "registry+https://github.com/rust-lang/crates.io-index" 1369 | checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" 1370 | dependencies = [ 1371 | "windows-sys 0.59.0", 1372 | ] 1373 | 1374 | [[package]] 1375 | name = "icu_collections" 1376 | version = "2.0.0" 1377 | source = "registry+https://github.com/rust-lang/crates.io-index" 1378 | checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" 1379 | dependencies = [ 1380 | "displaydoc", 1381 | "potential_utf", 1382 | "yoke", 1383 | "zerofrom", 1384 | "zerovec", 1385 | ] 1386 | 1387 | [[package]] 1388 | name = "icu_locale_core" 1389 | version = "2.0.0" 1390 | source = "registry+https://github.com/rust-lang/crates.io-index" 1391 | checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" 1392 | dependencies = [ 1393 | "displaydoc", 1394 | "litemap", 1395 | "tinystr", 1396 | "writeable", 1397 | "zerovec", 1398 | ] 1399 | 1400 | [[package]] 1401 | name = "icu_normalizer" 1402 | version = "2.0.0" 1403 | source = "registry+https://github.com/rust-lang/crates.io-index" 1404 | checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" 1405 | dependencies = [ 1406 | "displaydoc", 1407 | "icu_collections", 1408 | "icu_normalizer_data", 1409 | "icu_properties", 1410 | "icu_provider", 1411 | "smallvec", 1412 | "zerovec", 1413 | ] 1414 | 1415 | [[package]] 1416 | name = "icu_normalizer_data" 1417 | version = "2.0.0" 1418 | source = "registry+https://github.com/rust-lang/crates.io-index" 1419 | checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" 1420 | 1421 | [[package]] 1422 | name = "icu_properties" 1423 | version = "2.0.1" 1424 | source = "registry+https://github.com/rust-lang/crates.io-index" 1425 | checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" 1426 | dependencies = [ 1427 | "displaydoc", 1428 | "icu_collections", 1429 | "icu_locale_core", 1430 | "icu_properties_data", 1431 | "icu_provider", 1432 | "potential_utf", 1433 | "zerotrie", 1434 | "zerovec", 1435 | ] 1436 | 1437 | [[package]] 1438 | name = "icu_properties_data" 1439 | version = "2.0.1" 1440 | source = "registry+https://github.com/rust-lang/crates.io-index" 1441 | checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" 1442 | 1443 | [[package]] 1444 | name = "icu_provider" 1445 | version = "2.0.0" 1446 | source = "registry+https://github.com/rust-lang/crates.io-index" 1447 | checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" 1448 | dependencies = [ 1449 | "displaydoc", 1450 | "icu_locale_core", 1451 | "stable_deref_trait", 1452 | "tinystr", 1453 | "writeable", 1454 | "yoke", 1455 | "zerofrom", 1456 | "zerotrie", 1457 | "zerovec", 1458 | ] 1459 | 1460 | [[package]] 1461 | name = "idna" 1462 | version = "1.0.3" 1463 | source = "registry+https://github.com/rust-lang/crates.io-index" 1464 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 1465 | dependencies = [ 1466 | "idna_adapter", 1467 | "smallvec", 1468 | "utf8_iter", 1469 | ] 1470 | 1471 | [[package]] 1472 | name = "idna_adapter" 1473 | version = "1.2.1" 1474 | source = "registry+https://github.com/rust-lang/crates.io-index" 1475 | checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" 1476 | dependencies = [ 1477 | "icu_normalizer", 1478 | "icu_properties", 1479 | ] 1480 | 1481 | [[package]] 1482 | name = "image" 1483 | version = "0.25.6" 1484 | source = "registry+https://github.com/rust-lang/crates.io-index" 1485 | checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" 1486 | dependencies = [ 1487 | "bytemuck", 1488 | "byteorder-lite", 1489 | "num-traits", 1490 | "png", 1491 | "tiff", 1492 | ] 1493 | 1494 | [[package]] 1495 | name = "indexmap" 1496 | version = "2.10.0" 1497 | source = "registry+https://github.com/rust-lang/crates.io-index" 1498 | checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" 1499 | dependencies = [ 1500 | "equivalent", 1501 | "hashbrown 0.15.4", 1502 | ] 1503 | 1504 | [[package]] 1505 | name = "jni" 1506 | version = "0.21.1" 1507 | source = "registry+https://github.com/rust-lang/crates.io-index" 1508 | checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" 1509 | dependencies = [ 1510 | "cesu8", 1511 | "cfg-if", 1512 | "combine", 1513 | "jni-sys", 1514 | "log", 1515 | "thiserror 1.0.69", 1516 | "walkdir", 1517 | "windows-sys 0.45.0", 1518 | ] 1519 | 1520 | [[package]] 1521 | name = "jni-sys" 1522 | version = "0.3.0" 1523 | source = "registry+https://github.com/rust-lang/crates.io-index" 1524 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 1525 | 1526 | [[package]] 1527 | name = "jobserver" 1528 | version = "0.1.33" 1529 | source = "registry+https://github.com/rust-lang/crates.io-index" 1530 | checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" 1531 | dependencies = [ 1532 | "getrandom", 1533 | "libc", 1534 | ] 1535 | 1536 | [[package]] 1537 | name = "jpeg-decoder" 1538 | version = "0.3.2" 1539 | source = "registry+https://github.com/rust-lang/crates.io-index" 1540 | checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" 1541 | 1542 | [[package]] 1543 | name = "js-sys" 1544 | version = "0.3.77" 1545 | source = "registry+https://github.com/rust-lang/crates.io-index" 1546 | checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 1547 | dependencies = [ 1548 | "once_cell", 1549 | "wasm-bindgen", 1550 | ] 1551 | 1552 | [[package]] 1553 | name = "khronos-egl" 1554 | version = "6.0.0" 1555 | source = "registry+https://github.com/rust-lang/crates.io-index" 1556 | checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" 1557 | dependencies = [ 1558 | "libc", 1559 | "libloading", 1560 | "pkg-config", 1561 | ] 1562 | 1563 | [[package]] 1564 | name = "khronos_api" 1565 | version = "3.1.0" 1566 | source = "registry+https://github.com/rust-lang/crates.io-index" 1567 | checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" 1568 | 1569 | [[package]] 1570 | name = "libc" 1571 | version = "0.2.174" 1572 | source = "registry+https://github.com/rust-lang/crates.io-index" 1573 | checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" 1574 | 1575 | [[package]] 1576 | name = "libloading" 1577 | version = "0.8.8" 1578 | source = "registry+https://github.com/rust-lang/crates.io-index" 1579 | checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" 1580 | dependencies = [ 1581 | "cfg-if", 1582 | "windows-targets 0.53.2", 1583 | ] 1584 | 1585 | [[package]] 1586 | name = "libm" 1587 | version = "0.2.15" 1588 | source = "registry+https://github.com/rust-lang/crates.io-index" 1589 | checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" 1590 | 1591 | [[package]] 1592 | name = "libredox" 1593 | version = "0.1.4" 1594 | source = "registry+https://github.com/rust-lang/crates.io-index" 1595 | checksum = "1580801010e535496706ba011c15f8532df6b42297d2e471fec38ceadd8c0638" 1596 | dependencies = [ 1597 | "bitflags 2.9.4", 1598 | "libc", 1599 | "redox_syscall 0.5.13", 1600 | ] 1601 | 1602 | [[package]] 1603 | name = "linux-raw-sys" 1604 | version = "0.4.15" 1605 | source = "registry+https://github.com/rust-lang/crates.io-index" 1606 | checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" 1607 | 1608 | [[package]] 1609 | name = "linux-raw-sys" 1610 | version = "0.9.4" 1611 | source = "registry+https://github.com/rust-lang/crates.io-index" 1612 | checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" 1613 | 1614 | [[package]] 1615 | name = "litemap" 1616 | version = "0.8.0" 1617 | source = "registry+https://github.com/rust-lang/crates.io-index" 1618 | checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" 1619 | 1620 | [[package]] 1621 | name = "litrs" 1622 | version = "0.4.1" 1623 | source = "registry+https://github.com/rust-lang/crates.io-index" 1624 | checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" 1625 | 1626 | [[package]] 1627 | name = "lock_api" 1628 | version = "0.4.14" 1629 | source = "registry+https://github.com/rust-lang/crates.io-index" 1630 | checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" 1631 | dependencies = [ 1632 | "scopeguard", 1633 | ] 1634 | 1635 | [[package]] 1636 | name = "log" 1637 | version = "0.4.28" 1638 | source = "registry+https://github.com/rust-lang/crates.io-index" 1639 | checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" 1640 | 1641 | [[package]] 1642 | name = "malloc_buf" 1643 | version = "0.0.6" 1644 | source = "registry+https://github.com/rust-lang/crates.io-index" 1645 | checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 1646 | dependencies = [ 1647 | "libc", 1648 | ] 1649 | 1650 | [[package]] 1651 | name = "memchr" 1652 | version = "2.7.5" 1653 | source = "registry+https://github.com/rust-lang/crates.io-index" 1654 | checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" 1655 | 1656 | [[package]] 1657 | name = "memmap2" 1658 | version = "0.9.5" 1659 | source = "registry+https://github.com/rust-lang/crates.io-index" 1660 | checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" 1661 | dependencies = [ 1662 | "libc", 1663 | ] 1664 | 1665 | [[package]] 1666 | name = "memoffset" 1667 | version = "0.9.1" 1668 | source = "registry+https://github.com/rust-lang/crates.io-index" 1669 | checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" 1670 | dependencies = [ 1671 | "autocfg", 1672 | ] 1673 | 1674 | [[package]] 1675 | name = "metal" 1676 | version = "0.32.0" 1677 | source = "registry+https://github.com/rust-lang/crates.io-index" 1678 | checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605" 1679 | dependencies = [ 1680 | "bitflags 2.9.4", 1681 | "block", 1682 | "core-graphics-types 0.2.0", 1683 | "foreign-types", 1684 | "log", 1685 | "objc", 1686 | "paste", 1687 | ] 1688 | 1689 | [[package]] 1690 | name = "miniz_oxide" 1691 | version = "0.8.9" 1692 | source = "registry+https://github.com/rust-lang/crates.io-index" 1693 | checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" 1694 | dependencies = [ 1695 | "adler2", 1696 | "simd-adler32", 1697 | ] 1698 | 1699 | [[package]] 1700 | name = "naga" 1701 | version = "27.0.0" 1702 | source = "registry+https://github.com/rust-lang/crates.io-index" 1703 | checksum = "12b2e757b11b47345d44e7760e45458339bc490463d9548cd8651c53ae523153" 1704 | dependencies = [ 1705 | "arrayvec", 1706 | "bit-set", 1707 | "bitflags 2.9.4", 1708 | "cfg-if", 1709 | "cfg_aliases", 1710 | "codespan-reporting", 1711 | "half", 1712 | "hashbrown 0.16.0", 1713 | "hexf-parse", 1714 | "indexmap", 1715 | "libm", 1716 | "log", 1717 | "num-traits", 1718 | "once_cell", 1719 | "rustc-hash 1.1.0", 1720 | "spirv", 1721 | "thiserror 2.0.17", 1722 | "unicode-ident", 1723 | ] 1724 | 1725 | [[package]] 1726 | name = "ndk" 1727 | version = "0.9.0" 1728 | source = "registry+https://github.com/rust-lang/crates.io-index" 1729 | checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" 1730 | dependencies = [ 1731 | "bitflags 2.9.4", 1732 | "jni-sys", 1733 | "log", 1734 | "ndk-sys", 1735 | "num_enum", 1736 | "raw-window-handle", 1737 | "thiserror 1.0.69", 1738 | ] 1739 | 1740 | [[package]] 1741 | name = "ndk-context" 1742 | version = "0.1.1" 1743 | source = "registry+https://github.com/rust-lang/crates.io-index" 1744 | checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" 1745 | 1746 | [[package]] 1747 | name = "ndk-sys" 1748 | version = "0.6.0+11769913" 1749 | source = "registry+https://github.com/rust-lang/crates.io-index" 1750 | checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" 1751 | dependencies = [ 1752 | "jni-sys", 1753 | ] 1754 | 1755 | [[package]] 1756 | name = "nix" 1757 | version = "0.30.1" 1758 | source = "registry+https://github.com/rust-lang/crates.io-index" 1759 | checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" 1760 | dependencies = [ 1761 | "bitflags 2.9.4", 1762 | "cfg-if", 1763 | "cfg_aliases", 1764 | "libc", 1765 | "memoffset", 1766 | ] 1767 | 1768 | [[package]] 1769 | name = "nohash-hasher" 1770 | version = "0.2.0" 1771 | source = "registry+https://github.com/rust-lang/crates.io-index" 1772 | checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" 1773 | 1774 | [[package]] 1775 | name = "num-traits" 1776 | version = "0.2.19" 1777 | source = "registry+https://github.com/rust-lang/crates.io-index" 1778 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1779 | dependencies = [ 1780 | "autocfg", 1781 | "libm", 1782 | ] 1783 | 1784 | [[package]] 1785 | name = "num_enum" 1786 | version = "0.7.4" 1787 | source = "registry+https://github.com/rust-lang/crates.io-index" 1788 | checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" 1789 | dependencies = [ 1790 | "num_enum_derive", 1791 | "rustversion", 1792 | ] 1793 | 1794 | [[package]] 1795 | name = "num_enum_derive" 1796 | version = "0.7.4" 1797 | source = "registry+https://github.com/rust-lang/crates.io-index" 1798 | checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" 1799 | dependencies = [ 1800 | "proc-macro-crate", 1801 | "proc-macro2", 1802 | "quote", 1803 | "syn", 1804 | ] 1805 | 1806 | [[package]] 1807 | name = "objc" 1808 | version = "0.2.7" 1809 | source = "registry+https://github.com/rust-lang/crates.io-index" 1810 | checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 1811 | dependencies = [ 1812 | "malloc_buf", 1813 | ] 1814 | 1815 | [[package]] 1816 | name = "objc-sys" 1817 | version = "0.3.5" 1818 | source = "registry+https://github.com/rust-lang/crates.io-index" 1819 | checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" 1820 | 1821 | [[package]] 1822 | name = "objc2" 1823 | version = "0.5.2" 1824 | source = "registry+https://github.com/rust-lang/crates.io-index" 1825 | checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" 1826 | dependencies = [ 1827 | "objc-sys", 1828 | "objc2-encode", 1829 | ] 1830 | 1831 | [[package]] 1832 | name = "objc2" 1833 | version = "0.6.1" 1834 | source = "registry+https://github.com/rust-lang/crates.io-index" 1835 | checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551" 1836 | dependencies = [ 1837 | "objc2-encode", 1838 | ] 1839 | 1840 | [[package]] 1841 | name = "objc2-app-kit" 1842 | version = "0.2.2" 1843 | source = "registry+https://github.com/rust-lang/crates.io-index" 1844 | checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" 1845 | dependencies = [ 1846 | "bitflags 2.9.4", 1847 | "block2", 1848 | "libc", 1849 | "objc2 0.5.2", 1850 | "objc2-core-data", 1851 | "objc2-core-image", 1852 | "objc2-foundation 0.2.2", 1853 | "objc2-quartz-core", 1854 | ] 1855 | 1856 | [[package]] 1857 | name = "objc2-app-kit" 1858 | version = "0.3.1" 1859 | source = "registry+https://github.com/rust-lang/crates.io-index" 1860 | checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" 1861 | dependencies = [ 1862 | "bitflags 2.9.4", 1863 | "objc2 0.6.1", 1864 | "objc2-core-foundation", 1865 | "objc2-core-graphics", 1866 | "objc2-foundation 0.3.1", 1867 | ] 1868 | 1869 | [[package]] 1870 | name = "objc2-cloud-kit" 1871 | version = "0.2.2" 1872 | source = "registry+https://github.com/rust-lang/crates.io-index" 1873 | checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" 1874 | dependencies = [ 1875 | "bitflags 2.9.4", 1876 | "block2", 1877 | "objc2 0.5.2", 1878 | "objc2-core-location", 1879 | "objc2-foundation 0.2.2", 1880 | ] 1881 | 1882 | [[package]] 1883 | name = "objc2-contacts" 1884 | version = "0.2.2" 1885 | source = "registry+https://github.com/rust-lang/crates.io-index" 1886 | checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" 1887 | dependencies = [ 1888 | "block2", 1889 | "objc2 0.5.2", 1890 | "objc2-foundation 0.2.2", 1891 | ] 1892 | 1893 | [[package]] 1894 | name = "objc2-core-data" 1895 | version = "0.2.2" 1896 | source = "registry+https://github.com/rust-lang/crates.io-index" 1897 | checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" 1898 | dependencies = [ 1899 | "bitflags 2.9.4", 1900 | "block2", 1901 | "objc2 0.5.2", 1902 | "objc2-foundation 0.2.2", 1903 | ] 1904 | 1905 | [[package]] 1906 | name = "objc2-core-foundation" 1907 | version = "0.3.1" 1908 | source = "registry+https://github.com/rust-lang/crates.io-index" 1909 | checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" 1910 | dependencies = [ 1911 | "bitflags 2.9.4", 1912 | "dispatch2", 1913 | "objc2 0.6.1", 1914 | ] 1915 | 1916 | [[package]] 1917 | name = "objc2-core-graphics" 1918 | version = "0.3.1" 1919 | source = "registry+https://github.com/rust-lang/crates.io-index" 1920 | checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" 1921 | dependencies = [ 1922 | "bitflags 2.9.4", 1923 | "dispatch2", 1924 | "objc2 0.6.1", 1925 | "objc2-core-foundation", 1926 | "objc2-io-surface", 1927 | ] 1928 | 1929 | [[package]] 1930 | name = "objc2-core-image" 1931 | version = "0.2.2" 1932 | source = "registry+https://github.com/rust-lang/crates.io-index" 1933 | checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" 1934 | dependencies = [ 1935 | "block2", 1936 | "objc2 0.5.2", 1937 | "objc2-foundation 0.2.2", 1938 | "objc2-metal", 1939 | ] 1940 | 1941 | [[package]] 1942 | name = "objc2-core-location" 1943 | version = "0.2.2" 1944 | source = "registry+https://github.com/rust-lang/crates.io-index" 1945 | checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" 1946 | dependencies = [ 1947 | "block2", 1948 | "objc2 0.5.2", 1949 | "objc2-contacts", 1950 | "objc2-foundation 0.2.2", 1951 | ] 1952 | 1953 | [[package]] 1954 | name = "objc2-encode" 1955 | version = "4.1.0" 1956 | source = "registry+https://github.com/rust-lang/crates.io-index" 1957 | checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" 1958 | 1959 | [[package]] 1960 | name = "objc2-foundation" 1961 | version = "0.2.2" 1962 | source = "registry+https://github.com/rust-lang/crates.io-index" 1963 | checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" 1964 | dependencies = [ 1965 | "bitflags 2.9.4", 1966 | "block2", 1967 | "dispatch", 1968 | "libc", 1969 | "objc2 0.5.2", 1970 | ] 1971 | 1972 | [[package]] 1973 | name = "objc2-foundation" 1974 | version = "0.3.1" 1975 | source = "registry+https://github.com/rust-lang/crates.io-index" 1976 | checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" 1977 | dependencies = [ 1978 | "bitflags 2.9.4", 1979 | "objc2 0.6.1", 1980 | "objc2-core-foundation", 1981 | ] 1982 | 1983 | [[package]] 1984 | name = "objc2-io-surface" 1985 | version = "0.3.1" 1986 | source = "registry+https://github.com/rust-lang/crates.io-index" 1987 | checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" 1988 | dependencies = [ 1989 | "bitflags 2.9.4", 1990 | "objc2 0.6.1", 1991 | "objc2-core-foundation", 1992 | ] 1993 | 1994 | [[package]] 1995 | name = "objc2-link-presentation" 1996 | version = "0.2.2" 1997 | source = "registry+https://github.com/rust-lang/crates.io-index" 1998 | checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" 1999 | dependencies = [ 2000 | "block2", 2001 | "objc2 0.5.2", 2002 | "objc2-app-kit 0.2.2", 2003 | "objc2-foundation 0.2.2", 2004 | ] 2005 | 2006 | [[package]] 2007 | name = "objc2-metal" 2008 | version = "0.2.2" 2009 | source = "registry+https://github.com/rust-lang/crates.io-index" 2010 | checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" 2011 | dependencies = [ 2012 | "bitflags 2.9.4", 2013 | "block2", 2014 | "objc2 0.5.2", 2015 | "objc2-foundation 0.2.2", 2016 | ] 2017 | 2018 | [[package]] 2019 | name = "objc2-quartz-core" 2020 | version = "0.2.2" 2021 | source = "registry+https://github.com/rust-lang/crates.io-index" 2022 | checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" 2023 | dependencies = [ 2024 | "bitflags 2.9.4", 2025 | "block2", 2026 | "objc2 0.5.2", 2027 | "objc2-foundation 0.2.2", 2028 | "objc2-metal", 2029 | ] 2030 | 2031 | [[package]] 2032 | name = "objc2-symbols" 2033 | version = "0.2.2" 2034 | source = "registry+https://github.com/rust-lang/crates.io-index" 2035 | checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" 2036 | dependencies = [ 2037 | "objc2 0.5.2", 2038 | "objc2-foundation 0.2.2", 2039 | ] 2040 | 2041 | [[package]] 2042 | name = "objc2-ui-kit" 2043 | version = "0.2.2" 2044 | source = "registry+https://github.com/rust-lang/crates.io-index" 2045 | checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" 2046 | dependencies = [ 2047 | "bitflags 2.9.4", 2048 | "block2", 2049 | "objc2 0.5.2", 2050 | "objc2-cloud-kit", 2051 | "objc2-core-data", 2052 | "objc2-core-image", 2053 | "objc2-core-location", 2054 | "objc2-foundation 0.2.2", 2055 | "objc2-link-presentation", 2056 | "objc2-quartz-core", 2057 | "objc2-symbols", 2058 | "objc2-uniform-type-identifiers", 2059 | "objc2-user-notifications", 2060 | ] 2061 | 2062 | [[package]] 2063 | name = "objc2-uniform-type-identifiers" 2064 | version = "0.2.2" 2065 | source = "registry+https://github.com/rust-lang/crates.io-index" 2066 | checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" 2067 | dependencies = [ 2068 | "block2", 2069 | "objc2 0.5.2", 2070 | "objc2-foundation 0.2.2", 2071 | ] 2072 | 2073 | [[package]] 2074 | name = "objc2-user-notifications" 2075 | version = "0.2.2" 2076 | source = "registry+https://github.com/rust-lang/crates.io-index" 2077 | checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" 2078 | dependencies = [ 2079 | "bitflags 2.9.4", 2080 | "block2", 2081 | "objc2 0.5.2", 2082 | "objc2-core-location", 2083 | "objc2-foundation 0.2.2", 2084 | ] 2085 | 2086 | [[package]] 2087 | name = "once_cell" 2088 | version = "1.21.3" 2089 | source = "registry+https://github.com/rust-lang/crates.io-index" 2090 | checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 2091 | 2092 | [[package]] 2093 | name = "orbclient" 2094 | version = "0.3.48" 2095 | source = "registry+https://github.com/rust-lang/crates.io-index" 2096 | checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43" 2097 | dependencies = [ 2098 | "libredox", 2099 | ] 2100 | 2101 | [[package]] 2102 | name = "ordered-float" 2103 | version = "5.0.0" 2104 | source = "registry+https://github.com/rust-lang/crates.io-index" 2105 | checksum = "e2c1f9f56e534ac6a9b8a4600bdf0f530fb393b5f393e7b4d03489c3cf0c3f01" 2106 | dependencies = [ 2107 | "num-traits", 2108 | ] 2109 | 2110 | [[package]] 2111 | name = "ordered-stream" 2112 | version = "0.2.0" 2113 | source = "registry+https://github.com/rust-lang/crates.io-index" 2114 | checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" 2115 | dependencies = [ 2116 | "futures-core", 2117 | "pin-project-lite", 2118 | ] 2119 | 2120 | [[package]] 2121 | name = "owned_ttf_parser" 2122 | version = "0.25.0" 2123 | source = "registry+https://github.com/rust-lang/crates.io-index" 2124 | checksum = "22ec719bbf3b2a81c109a4e20b1f129b5566b7dce654bc3872f6a05abf82b2c4" 2125 | dependencies = [ 2126 | "ttf-parser", 2127 | ] 2128 | 2129 | [[package]] 2130 | name = "parking" 2131 | version = "2.2.1" 2132 | source = "registry+https://github.com/rust-lang/crates.io-index" 2133 | checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 2134 | 2135 | [[package]] 2136 | name = "parking_lot" 2137 | version = "0.12.5" 2138 | source = "registry+https://github.com/rust-lang/crates.io-index" 2139 | checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" 2140 | dependencies = [ 2141 | "lock_api", 2142 | "parking_lot_core", 2143 | ] 2144 | 2145 | [[package]] 2146 | name = "parking_lot_core" 2147 | version = "0.9.12" 2148 | source = "registry+https://github.com/rust-lang/crates.io-index" 2149 | checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" 2150 | dependencies = [ 2151 | "cfg-if", 2152 | "libc", 2153 | "redox_syscall 0.5.13", 2154 | "smallvec", 2155 | "windows-link 0.2.1", 2156 | ] 2157 | 2158 | [[package]] 2159 | name = "paste" 2160 | version = "1.0.15" 2161 | source = "registry+https://github.com/rust-lang/crates.io-index" 2162 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 2163 | 2164 | [[package]] 2165 | name = "percent-encoding" 2166 | version = "2.3.2" 2167 | source = "registry+https://github.com/rust-lang/crates.io-index" 2168 | checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 2169 | 2170 | [[package]] 2171 | name = "pin-project" 2172 | version = "1.1.10" 2173 | source = "registry+https://github.com/rust-lang/crates.io-index" 2174 | checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" 2175 | dependencies = [ 2176 | "pin-project-internal", 2177 | ] 2178 | 2179 | [[package]] 2180 | name = "pin-project-internal" 2181 | version = "1.1.10" 2182 | source = "registry+https://github.com/rust-lang/crates.io-index" 2183 | checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" 2184 | dependencies = [ 2185 | "proc-macro2", 2186 | "quote", 2187 | "syn", 2188 | ] 2189 | 2190 | [[package]] 2191 | name = "pin-project-lite" 2192 | version = "0.2.16" 2193 | source = "registry+https://github.com/rust-lang/crates.io-index" 2194 | checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 2195 | 2196 | [[package]] 2197 | name = "pin-utils" 2198 | version = "0.1.0" 2199 | source = "registry+https://github.com/rust-lang/crates.io-index" 2200 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 2201 | 2202 | [[package]] 2203 | name = "piper" 2204 | version = "0.2.4" 2205 | source = "registry+https://github.com/rust-lang/crates.io-index" 2206 | checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" 2207 | dependencies = [ 2208 | "atomic-waker", 2209 | "fastrand", 2210 | "futures-io", 2211 | ] 2212 | 2213 | [[package]] 2214 | name = "pkg-config" 2215 | version = "0.3.32" 2216 | source = "registry+https://github.com/rust-lang/crates.io-index" 2217 | checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 2218 | 2219 | [[package]] 2220 | name = "png" 2221 | version = "0.17.16" 2222 | source = "registry+https://github.com/rust-lang/crates.io-index" 2223 | checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" 2224 | dependencies = [ 2225 | "bitflags 1.3.2", 2226 | "crc32fast", 2227 | "fdeflate", 2228 | "flate2", 2229 | "miniz_oxide", 2230 | ] 2231 | 2232 | [[package]] 2233 | name = "polling" 2234 | version = "3.8.0" 2235 | source = "registry+https://github.com/rust-lang/crates.io-index" 2236 | checksum = "b53a684391ad002dd6a596ceb6c74fd004fdce75f4be2e3f615068abbea5fd50" 2237 | dependencies = [ 2238 | "cfg-if", 2239 | "concurrent-queue", 2240 | "hermit-abi", 2241 | "pin-project-lite", 2242 | "rustix 1.0.7", 2243 | "tracing", 2244 | "windows-sys 0.59.0", 2245 | ] 2246 | 2247 | [[package]] 2248 | name = "portable-atomic" 2249 | version = "1.11.1" 2250 | source = "registry+https://github.com/rust-lang/crates.io-index" 2251 | checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" 2252 | 2253 | [[package]] 2254 | name = "portable-atomic-util" 2255 | version = "0.2.4" 2256 | source = "registry+https://github.com/rust-lang/crates.io-index" 2257 | checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" 2258 | dependencies = [ 2259 | "portable-atomic", 2260 | ] 2261 | 2262 | [[package]] 2263 | name = "potential_utf" 2264 | version = "0.1.2" 2265 | source = "registry+https://github.com/rust-lang/crates.io-index" 2266 | checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" 2267 | dependencies = [ 2268 | "zerovec", 2269 | ] 2270 | 2271 | [[package]] 2272 | name = "presser" 2273 | version = "0.3.1" 2274 | source = "registry+https://github.com/rust-lang/crates.io-index" 2275 | checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" 2276 | 2277 | [[package]] 2278 | name = "proc-macro-crate" 2279 | version = "3.3.0" 2280 | source = "registry+https://github.com/rust-lang/crates.io-index" 2281 | checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" 2282 | dependencies = [ 2283 | "toml_edit", 2284 | ] 2285 | 2286 | [[package]] 2287 | name = "proc-macro2" 2288 | version = "1.0.95" 2289 | source = "registry+https://github.com/rust-lang/crates.io-index" 2290 | checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" 2291 | dependencies = [ 2292 | "unicode-ident", 2293 | ] 2294 | 2295 | [[package]] 2296 | name = "profiling" 2297 | version = "1.0.17" 2298 | source = "registry+https://github.com/rust-lang/crates.io-index" 2299 | checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" 2300 | 2301 | [[package]] 2302 | name = "quick-xml" 2303 | version = "0.36.2" 2304 | source = "registry+https://github.com/rust-lang/crates.io-index" 2305 | checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe" 2306 | dependencies = [ 2307 | "memchr", 2308 | "serde", 2309 | ] 2310 | 2311 | [[package]] 2312 | name = "quick-xml" 2313 | version = "0.37.5" 2314 | source = "registry+https://github.com/rust-lang/crates.io-index" 2315 | checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" 2316 | dependencies = [ 2317 | "memchr", 2318 | ] 2319 | 2320 | [[package]] 2321 | name = "quote" 2322 | version = "1.0.40" 2323 | source = "registry+https://github.com/rust-lang/crates.io-index" 2324 | checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 2325 | dependencies = [ 2326 | "proc-macro2", 2327 | ] 2328 | 2329 | [[package]] 2330 | name = "r-efi" 2331 | version = "5.3.0" 2332 | source = "registry+https://github.com/rust-lang/crates.io-index" 2333 | checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" 2334 | 2335 | [[package]] 2336 | name = "range-alloc" 2337 | version = "0.1.4" 2338 | source = "registry+https://github.com/rust-lang/crates.io-index" 2339 | checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" 2340 | 2341 | [[package]] 2342 | name = "raw-window-handle" 2343 | version = "0.6.2" 2344 | source = "registry+https://github.com/rust-lang/crates.io-index" 2345 | checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" 2346 | 2347 | [[package]] 2348 | name = "redox_syscall" 2349 | version = "0.4.1" 2350 | source = "registry+https://github.com/rust-lang/crates.io-index" 2351 | checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" 2352 | dependencies = [ 2353 | "bitflags 1.3.2", 2354 | ] 2355 | 2356 | [[package]] 2357 | name = "redox_syscall" 2358 | version = "0.5.13" 2359 | source = "registry+https://github.com/rust-lang/crates.io-index" 2360 | checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" 2361 | dependencies = [ 2362 | "bitflags 2.9.4", 2363 | ] 2364 | 2365 | [[package]] 2366 | name = "renderdoc-sys" 2367 | version = "1.1.0" 2368 | source = "registry+https://github.com/rust-lang/crates.io-index" 2369 | checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" 2370 | 2371 | [[package]] 2372 | name = "ron" 2373 | version = "0.11.0" 2374 | source = "registry+https://github.com/rust-lang/crates.io-index" 2375 | checksum = "db09040cc89e461f1a265139777a2bde7f8d8c67c4936f700c63ce3e2904d468" 2376 | dependencies = [ 2377 | "base64", 2378 | "bitflags 2.9.4", 2379 | "serde", 2380 | "serde_derive", 2381 | "unicode-ident", 2382 | ] 2383 | 2384 | [[package]] 2385 | name = "rustc-hash" 2386 | version = "1.1.0" 2387 | source = "registry+https://github.com/rust-lang/crates.io-index" 2388 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 2389 | 2390 | [[package]] 2391 | name = "rustc-hash" 2392 | version = "2.1.1" 2393 | source = "registry+https://github.com/rust-lang/crates.io-index" 2394 | checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" 2395 | 2396 | [[package]] 2397 | name = "rustix" 2398 | version = "0.38.44" 2399 | source = "registry+https://github.com/rust-lang/crates.io-index" 2400 | checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" 2401 | dependencies = [ 2402 | "bitflags 2.9.4", 2403 | "errno", 2404 | "libc", 2405 | "linux-raw-sys 0.4.15", 2406 | "windows-sys 0.59.0", 2407 | ] 2408 | 2409 | [[package]] 2410 | name = "rustix" 2411 | version = "1.0.7" 2412 | source = "registry+https://github.com/rust-lang/crates.io-index" 2413 | checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" 2414 | dependencies = [ 2415 | "bitflags 2.9.4", 2416 | "errno", 2417 | "libc", 2418 | "linux-raw-sys 0.9.4", 2419 | "windows-sys 0.59.0", 2420 | ] 2421 | 2422 | [[package]] 2423 | name = "rustversion" 2424 | version = "1.0.21" 2425 | source = "registry+https://github.com/rust-lang/crates.io-index" 2426 | checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" 2427 | 2428 | [[package]] 2429 | name = "same-file" 2430 | version = "1.0.6" 2431 | source = "registry+https://github.com/rust-lang/crates.io-index" 2432 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 2433 | dependencies = [ 2434 | "winapi-util", 2435 | ] 2436 | 2437 | [[package]] 2438 | name = "scoped-tls" 2439 | version = "1.0.1" 2440 | source = "registry+https://github.com/rust-lang/crates.io-index" 2441 | checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" 2442 | 2443 | [[package]] 2444 | name = "scopeguard" 2445 | version = "1.2.0" 2446 | source = "registry+https://github.com/rust-lang/crates.io-index" 2447 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2448 | 2449 | [[package]] 2450 | name = "sctk-adwaita" 2451 | version = "0.10.1" 2452 | source = "registry+https://github.com/rust-lang/crates.io-index" 2453 | checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" 2454 | dependencies = [ 2455 | "ab_glyph", 2456 | "log", 2457 | "memmap2", 2458 | "smithay-client-toolkit", 2459 | "tiny-skia", 2460 | ] 2461 | 2462 | [[package]] 2463 | name = "serde" 2464 | version = "1.0.228" 2465 | source = "registry+https://github.com/rust-lang/crates.io-index" 2466 | checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" 2467 | dependencies = [ 2468 | "serde_core", 2469 | "serde_derive", 2470 | ] 2471 | 2472 | [[package]] 2473 | name = "serde_core" 2474 | version = "1.0.228" 2475 | source = "registry+https://github.com/rust-lang/crates.io-index" 2476 | checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" 2477 | dependencies = [ 2478 | "serde_derive", 2479 | ] 2480 | 2481 | [[package]] 2482 | name = "serde_derive" 2483 | version = "1.0.228" 2484 | source = "registry+https://github.com/rust-lang/crates.io-index" 2485 | checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" 2486 | dependencies = [ 2487 | "proc-macro2", 2488 | "quote", 2489 | "syn", 2490 | ] 2491 | 2492 | [[package]] 2493 | name = "serde_repr" 2494 | version = "0.1.20" 2495 | source = "registry+https://github.com/rust-lang/crates.io-index" 2496 | checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" 2497 | dependencies = [ 2498 | "proc-macro2", 2499 | "quote", 2500 | "syn", 2501 | ] 2502 | 2503 | [[package]] 2504 | name = "shlex" 2505 | version = "1.3.0" 2506 | source = "registry+https://github.com/rust-lang/crates.io-index" 2507 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 2508 | 2509 | [[package]] 2510 | name = "signal-hook-registry" 2511 | version = "1.4.5" 2512 | source = "registry+https://github.com/rust-lang/crates.io-index" 2513 | checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" 2514 | dependencies = [ 2515 | "libc", 2516 | ] 2517 | 2518 | [[package]] 2519 | name = "simd-adler32" 2520 | version = "0.3.7" 2521 | source = "registry+https://github.com/rust-lang/crates.io-index" 2522 | checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" 2523 | 2524 | [[package]] 2525 | name = "slab" 2526 | version = "0.4.10" 2527 | source = "registry+https://github.com/rust-lang/crates.io-index" 2528 | checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" 2529 | 2530 | [[package]] 2531 | name = "slotmap" 2532 | version = "1.0.7" 2533 | source = "registry+https://github.com/rust-lang/crates.io-index" 2534 | checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" 2535 | dependencies = [ 2536 | "version_check", 2537 | ] 2538 | 2539 | [[package]] 2540 | name = "smallvec" 2541 | version = "1.15.1" 2542 | source = "registry+https://github.com/rust-lang/crates.io-index" 2543 | checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 2544 | 2545 | [[package]] 2546 | name = "smithay-client-toolkit" 2547 | version = "0.19.2" 2548 | source = "registry+https://github.com/rust-lang/crates.io-index" 2549 | checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" 2550 | dependencies = [ 2551 | "bitflags 2.9.4", 2552 | "calloop", 2553 | "calloop-wayland-source", 2554 | "cursor-icon", 2555 | "libc", 2556 | "log", 2557 | "memmap2", 2558 | "rustix 0.38.44", 2559 | "thiserror 1.0.69", 2560 | "wayland-backend", 2561 | "wayland-client", 2562 | "wayland-csd-frame", 2563 | "wayland-cursor", 2564 | "wayland-protocols", 2565 | "wayland-protocols-wlr", 2566 | "wayland-scanner", 2567 | "xkeysym", 2568 | ] 2569 | 2570 | [[package]] 2571 | name = "smithay-clipboard" 2572 | version = "0.7.2" 2573 | source = "registry+https://github.com/rust-lang/crates.io-index" 2574 | checksum = "cc8216eec463674a0e90f29e0ae41a4db573ec5b56b1c6c1c71615d249b6d846" 2575 | dependencies = [ 2576 | "libc", 2577 | "smithay-client-toolkit", 2578 | "wayland-backend", 2579 | ] 2580 | 2581 | [[package]] 2582 | name = "smol_str" 2583 | version = "0.2.2" 2584 | source = "registry+https://github.com/rust-lang/crates.io-index" 2585 | checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" 2586 | dependencies = [ 2587 | "serde", 2588 | ] 2589 | 2590 | [[package]] 2591 | name = "spirv" 2592 | version = "0.3.0+sdk-1.3.268.0" 2593 | source = "registry+https://github.com/rust-lang/crates.io-index" 2594 | checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" 2595 | dependencies = [ 2596 | "bitflags 2.9.4", 2597 | ] 2598 | 2599 | [[package]] 2600 | name = "stable_deref_trait" 2601 | version = "1.2.0" 2602 | source = "registry+https://github.com/rust-lang/crates.io-index" 2603 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 2604 | 2605 | [[package]] 2606 | name = "static_assertions" 2607 | version = "1.1.0" 2608 | source = "registry+https://github.com/rust-lang/crates.io-index" 2609 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 2610 | 2611 | [[package]] 2612 | name = "strict-num" 2613 | version = "0.1.1" 2614 | source = "registry+https://github.com/rust-lang/crates.io-index" 2615 | checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" 2616 | 2617 | [[package]] 2618 | name = "syn" 2619 | version = "2.0.104" 2620 | source = "registry+https://github.com/rust-lang/crates.io-index" 2621 | checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" 2622 | dependencies = [ 2623 | "proc-macro2", 2624 | "quote", 2625 | "unicode-ident", 2626 | ] 2627 | 2628 | [[package]] 2629 | name = "synstructure" 2630 | version = "0.13.2" 2631 | source = "registry+https://github.com/rust-lang/crates.io-index" 2632 | checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 2633 | dependencies = [ 2634 | "proc-macro2", 2635 | "quote", 2636 | "syn", 2637 | ] 2638 | 2639 | [[package]] 2640 | name = "tempfile" 2641 | version = "3.20.0" 2642 | source = "registry+https://github.com/rust-lang/crates.io-index" 2643 | checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" 2644 | dependencies = [ 2645 | "fastrand", 2646 | "getrandom", 2647 | "once_cell", 2648 | "rustix 1.0.7", 2649 | "windows-sys 0.59.0", 2650 | ] 2651 | 2652 | [[package]] 2653 | name = "termcolor" 2654 | version = "1.4.1" 2655 | source = "registry+https://github.com/rust-lang/crates.io-index" 2656 | checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" 2657 | dependencies = [ 2658 | "winapi-util", 2659 | ] 2660 | 2661 | [[package]] 2662 | name = "thiserror" 2663 | version = "1.0.69" 2664 | source = "registry+https://github.com/rust-lang/crates.io-index" 2665 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 2666 | dependencies = [ 2667 | "thiserror-impl 1.0.69", 2668 | ] 2669 | 2670 | [[package]] 2671 | name = "thiserror" 2672 | version = "2.0.17" 2673 | source = "registry+https://github.com/rust-lang/crates.io-index" 2674 | checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" 2675 | dependencies = [ 2676 | "thiserror-impl 2.0.17", 2677 | ] 2678 | 2679 | [[package]] 2680 | name = "thiserror-impl" 2681 | version = "1.0.69" 2682 | source = "registry+https://github.com/rust-lang/crates.io-index" 2683 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 2684 | dependencies = [ 2685 | "proc-macro2", 2686 | "quote", 2687 | "syn", 2688 | ] 2689 | 2690 | [[package]] 2691 | name = "thiserror-impl" 2692 | version = "2.0.17" 2693 | source = "registry+https://github.com/rust-lang/crates.io-index" 2694 | checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" 2695 | dependencies = [ 2696 | "proc-macro2", 2697 | "quote", 2698 | "syn", 2699 | ] 2700 | 2701 | [[package]] 2702 | name = "tiff" 2703 | version = "0.9.1" 2704 | source = "registry+https://github.com/rust-lang/crates.io-index" 2705 | checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" 2706 | dependencies = [ 2707 | "flate2", 2708 | "jpeg-decoder", 2709 | "weezl", 2710 | ] 2711 | 2712 | [[package]] 2713 | name = "tiny-skia" 2714 | version = "0.11.4" 2715 | source = "registry+https://github.com/rust-lang/crates.io-index" 2716 | checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" 2717 | dependencies = [ 2718 | "arrayref", 2719 | "arrayvec", 2720 | "bytemuck", 2721 | "cfg-if", 2722 | "log", 2723 | "tiny-skia-path", 2724 | ] 2725 | 2726 | [[package]] 2727 | name = "tiny-skia-path" 2728 | version = "0.11.4" 2729 | source = "registry+https://github.com/rust-lang/crates.io-index" 2730 | checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" 2731 | dependencies = [ 2732 | "arrayref", 2733 | "bytemuck", 2734 | "strict-num", 2735 | ] 2736 | 2737 | [[package]] 2738 | name = "tinystr" 2739 | version = "0.8.1" 2740 | source = "registry+https://github.com/rust-lang/crates.io-index" 2741 | checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" 2742 | dependencies = [ 2743 | "displaydoc", 2744 | "zerovec", 2745 | ] 2746 | 2747 | [[package]] 2748 | name = "toml_datetime" 2749 | version = "0.6.11" 2750 | source = "registry+https://github.com/rust-lang/crates.io-index" 2751 | checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" 2752 | 2753 | [[package]] 2754 | name = "toml_edit" 2755 | version = "0.22.27" 2756 | source = "registry+https://github.com/rust-lang/crates.io-index" 2757 | checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" 2758 | dependencies = [ 2759 | "indexmap", 2760 | "toml_datetime", 2761 | "winnow", 2762 | ] 2763 | 2764 | [[package]] 2765 | name = "tracing" 2766 | version = "0.1.41" 2767 | source = "registry+https://github.com/rust-lang/crates.io-index" 2768 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 2769 | dependencies = [ 2770 | "pin-project-lite", 2771 | "tracing-attributes", 2772 | "tracing-core", 2773 | ] 2774 | 2775 | [[package]] 2776 | name = "tracing-attributes" 2777 | version = "0.1.30" 2778 | source = "registry+https://github.com/rust-lang/crates.io-index" 2779 | checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" 2780 | dependencies = [ 2781 | "proc-macro2", 2782 | "quote", 2783 | "syn", 2784 | ] 2785 | 2786 | [[package]] 2787 | name = "tracing-core" 2788 | version = "0.1.34" 2789 | source = "registry+https://github.com/rust-lang/crates.io-index" 2790 | checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" 2791 | dependencies = [ 2792 | "once_cell", 2793 | ] 2794 | 2795 | [[package]] 2796 | name = "ttf-parser" 2797 | version = "0.25.1" 2798 | source = "registry+https://github.com/rust-lang/crates.io-index" 2799 | checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" 2800 | 2801 | [[package]] 2802 | name = "type-map" 2803 | version = "0.5.1" 2804 | source = "registry+https://github.com/rust-lang/crates.io-index" 2805 | checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90" 2806 | dependencies = [ 2807 | "rustc-hash 2.1.1", 2808 | ] 2809 | 2810 | [[package]] 2811 | name = "uds_windows" 2812 | version = "1.1.0" 2813 | source = "registry+https://github.com/rust-lang/crates.io-index" 2814 | checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" 2815 | dependencies = [ 2816 | "memoffset", 2817 | "tempfile", 2818 | "winapi", 2819 | ] 2820 | 2821 | [[package]] 2822 | name = "unicode-ident" 2823 | version = "1.0.18" 2824 | source = "registry+https://github.com/rust-lang/crates.io-index" 2825 | checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 2826 | 2827 | [[package]] 2828 | name = "unicode-segmentation" 2829 | version = "1.12.0" 2830 | source = "registry+https://github.com/rust-lang/crates.io-index" 2831 | checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 2832 | 2833 | [[package]] 2834 | name = "unicode-width" 2835 | version = "0.1.14" 2836 | source = "registry+https://github.com/rust-lang/crates.io-index" 2837 | checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" 2838 | 2839 | [[package]] 2840 | name = "url" 2841 | version = "2.5.4" 2842 | source = "registry+https://github.com/rust-lang/crates.io-index" 2843 | checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 2844 | dependencies = [ 2845 | "form_urlencoded", 2846 | "idna", 2847 | "percent-encoding", 2848 | ] 2849 | 2850 | [[package]] 2851 | name = "utf8_iter" 2852 | version = "1.0.4" 2853 | source = "registry+https://github.com/rust-lang/crates.io-index" 2854 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 2855 | 2856 | [[package]] 2857 | name = "version_check" 2858 | version = "0.9.5" 2859 | source = "registry+https://github.com/rust-lang/crates.io-index" 2860 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 2861 | 2862 | [[package]] 2863 | name = "walkdir" 2864 | version = "2.5.0" 2865 | source = "registry+https://github.com/rust-lang/crates.io-index" 2866 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 2867 | dependencies = [ 2868 | "same-file", 2869 | "winapi-util", 2870 | ] 2871 | 2872 | [[package]] 2873 | name = "wasi" 2874 | version = "0.14.2+wasi-0.2.4" 2875 | source = "registry+https://github.com/rust-lang/crates.io-index" 2876 | checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" 2877 | dependencies = [ 2878 | "wit-bindgen-rt", 2879 | ] 2880 | 2881 | [[package]] 2882 | name = "wasm-bindgen" 2883 | version = "0.2.100" 2884 | source = "registry+https://github.com/rust-lang/crates.io-index" 2885 | checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 2886 | dependencies = [ 2887 | "cfg-if", 2888 | "once_cell", 2889 | "rustversion", 2890 | "wasm-bindgen-macro", 2891 | ] 2892 | 2893 | [[package]] 2894 | name = "wasm-bindgen-backend" 2895 | version = "0.2.100" 2896 | source = "registry+https://github.com/rust-lang/crates.io-index" 2897 | checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 2898 | dependencies = [ 2899 | "bumpalo", 2900 | "log", 2901 | "proc-macro2", 2902 | "quote", 2903 | "syn", 2904 | "wasm-bindgen-shared", 2905 | ] 2906 | 2907 | [[package]] 2908 | name = "wasm-bindgen-futures" 2909 | version = "0.4.50" 2910 | source = "registry+https://github.com/rust-lang/crates.io-index" 2911 | checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" 2912 | dependencies = [ 2913 | "cfg-if", 2914 | "js-sys", 2915 | "once_cell", 2916 | "wasm-bindgen", 2917 | "web-sys", 2918 | ] 2919 | 2920 | [[package]] 2921 | name = "wasm-bindgen-macro" 2922 | version = "0.2.100" 2923 | source = "registry+https://github.com/rust-lang/crates.io-index" 2924 | checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 2925 | dependencies = [ 2926 | "quote", 2927 | "wasm-bindgen-macro-support", 2928 | ] 2929 | 2930 | [[package]] 2931 | name = "wasm-bindgen-macro-support" 2932 | version = "0.2.100" 2933 | source = "registry+https://github.com/rust-lang/crates.io-index" 2934 | checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 2935 | dependencies = [ 2936 | "proc-macro2", 2937 | "quote", 2938 | "syn", 2939 | "wasm-bindgen-backend", 2940 | "wasm-bindgen-shared", 2941 | ] 2942 | 2943 | [[package]] 2944 | name = "wasm-bindgen-shared" 2945 | version = "0.2.100" 2946 | source = "registry+https://github.com/rust-lang/crates.io-index" 2947 | checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 2948 | dependencies = [ 2949 | "unicode-ident", 2950 | ] 2951 | 2952 | [[package]] 2953 | name = "wayland-backend" 2954 | version = "0.3.10" 2955 | source = "registry+https://github.com/rust-lang/crates.io-index" 2956 | checksum = "fe770181423e5fc79d3e2a7f4410b7799d5aab1de4372853de3c6aa13ca24121" 2957 | dependencies = [ 2958 | "cc", 2959 | "downcast-rs", 2960 | "rustix 0.38.44", 2961 | "scoped-tls", 2962 | "smallvec", 2963 | "wayland-sys", 2964 | ] 2965 | 2966 | [[package]] 2967 | name = "wayland-client" 2968 | version = "0.31.10" 2969 | source = "registry+https://github.com/rust-lang/crates.io-index" 2970 | checksum = "978fa7c67b0847dbd6a9f350ca2569174974cd4082737054dbb7fbb79d7d9a61" 2971 | dependencies = [ 2972 | "bitflags 2.9.4", 2973 | "rustix 0.38.44", 2974 | "wayland-backend", 2975 | "wayland-scanner", 2976 | ] 2977 | 2978 | [[package]] 2979 | name = "wayland-csd-frame" 2980 | version = "0.3.0" 2981 | source = "registry+https://github.com/rust-lang/crates.io-index" 2982 | checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" 2983 | dependencies = [ 2984 | "bitflags 2.9.4", 2985 | "cursor-icon", 2986 | "wayland-backend", 2987 | ] 2988 | 2989 | [[package]] 2990 | name = "wayland-cursor" 2991 | version = "0.31.10" 2992 | source = "registry+https://github.com/rust-lang/crates.io-index" 2993 | checksum = "a65317158dec28d00416cb16705934070aef4f8393353d41126c54264ae0f182" 2994 | dependencies = [ 2995 | "rustix 0.38.44", 2996 | "wayland-client", 2997 | "xcursor", 2998 | ] 2999 | 3000 | [[package]] 3001 | name = "wayland-protocols" 3002 | version = "0.32.8" 3003 | source = "registry+https://github.com/rust-lang/crates.io-index" 3004 | checksum = "779075454e1e9a521794fed15886323ea0feda3f8b0fc1390f5398141310422a" 3005 | dependencies = [ 3006 | "bitflags 2.9.4", 3007 | "wayland-backend", 3008 | "wayland-client", 3009 | "wayland-scanner", 3010 | ] 3011 | 3012 | [[package]] 3013 | name = "wayland-protocols-plasma" 3014 | version = "0.3.8" 3015 | source = "registry+https://github.com/rust-lang/crates.io-index" 3016 | checksum = "4fd38cdad69b56ace413c6bcc1fbf5acc5e2ef4af9d5f8f1f9570c0c83eae175" 3017 | dependencies = [ 3018 | "bitflags 2.9.4", 3019 | "wayland-backend", 3020 | "wayland-client", 3021 | "wayland-protocols", 3022 | "wayland-scanner", 3023 | ] 3024 | 3025 | [[package]] 3026 | name = "wayland-protocols-wlr" 3027 | version = "0.3.8" 3028 | source = "registry+https://github.com/rust-lang/crates.io-index" 3029 | checksum = "1cb6cdc73399c0e06504c437fe3cf886f25568dd5454473d565085b36d6a8bbf" 3030 | dependencies = [ 3031 | "bitflags 2.9.4", 3032 | "wayland-backend", 3033 | "wayland-client", 3034 | "wayland-protocols", 3035 | "wayland-scanner", 3036 | ] 3037 | 3038 | [[package]] 3039 | name = "wayland-scanner" 3040 | version = "0.31.6" 3041 | source = "registry+https://github.com/rust-lang/crates.io-index" 3042 | checksum = "896fdafd5d28145fce7958917d69f2fd44469b1d4e861cb5961bcbeebc6d1484" 3043 | dependencies = [ 3044 | "proc-macro2", 3045 | "quick-xml 0.37.5", 3046 | "quote", 3047 | ] 3048 | 3049 | [[package]] 3050 | name = "wayland-sys" 3051 | version = "0.31.6" 3052 | source = "registry+https://github.com/rust-lang/crates.io-index" 3053 | checksum = "dbcebb399c77d5aa9fa5db874806ee7b4eba4e73650948e8f93963f128896615" 3054 | dependencies = [ 3055 | "dlib", 3056 | "log", 3057 | "once_cell", 3058 | "pkg-config", 3059 | ] 3060 | 3061 | [[package]] 3062 | name = "web-sys" 3063 | version = "0.3.77" 3064 | source = "registry+https://github.com/rust-lang/crates.io-index" 3065 | checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" 3066 | dependencies = [ 3067 | "js-sys", 3068 | "wasm-bindgen", 3069 | ] 3070 | 3071 | [[package]] 3072 | name = "web-time" 3073 | version = "1.1.0" 3074 | source = "registry+https://github.com/rust-lang/crates.io-index" 3075 | checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" 3076 | dependencies = [ 3077 | "js-sys", 3078 | "wasm-bindgen", 3079 | ] 3080 | 3081 | [[package]] 3082 | name = "webbrowser" 3083 | version = "1.0.5" 3084 | source = "registry+https://github.com/rust-lang/crates.io-index" 3085 | checksum = "aaf4f3c0ba838e82b4e5ccc4157003fb8c324ee24c058470ffb82820becbde98" 3086 | dependencies = [ 3087 | "core-foundation 0.10.1", 3088 | "jni", 3089 | "log", 3090 | "ndk-context", 3091 | "objc2 0.6.1", 3092 | "objc2-foundation 0.3.1", 3093 | "url", 3094 | "web-sys", 3095 | ] 3096 | 3097 | [[package]] 3098 | name = "weezl" 3099 | version = "0.1.10" 3100 | source = "registry+https://github.com/rust-lang/crates.io-index" 3101 | checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" 3102 | 3103 | [[package]] 3104 | name = "wgpu" 3105 | version = "27.0.1" 3106 | source = "registry+https://github.com/rust-lang/crates.io-index" 3107 | checksum = "bfe68bac7cde125de7a731c3400723cadaaf1703795ad3f4805f187459cd7a77" 3108 | dependencies = [ 3109 | "arrayvec", 3110 | "bitflags 2.9.4", 3111 | "cfg-if", 3112 | "cfg_aliases", 3113 | "document-features", 3114 | "hashbrown 0.16.0", 3115 | "js-sys", 3116 | "log", 3117 | "naga", 3118 | "parking_lot", 3119 | "portable-atomic", 3120 | "profiling", 3121 | "raw-window-handle", 3122 | "smallvec", 3123 | "static_assertions", 3124 | "wasm-bindgen", 3125 | "wasm-bindgen-futures", 3126 | "web-sys", 3127 | "wgpu-core", 3128 | "wgpu-hal", 3129 | "wgpu-types", 3130 | ] 3131 | 3132 | [[package]] 3133 | name = "wgpu-core" 3134 | version = "27.0.1" 3135 | source = "registry+https://github.com/rust-lang/crates.io-index" 3136 | checksum = "e3d654c0b6c6335edfca18c11bdaed964def641b8e9997d3a495a2ff4077c922" 3137 | dependencies = [ 3138 | "arrayvec", 3139 | "bit-set", 3140 | "bit-vec", 3141 | "bitflags 2.9.4", 3142 | "bytemuck", 3143 | "cfg_aliases", 3144 | "document-features", 3145 | "hashbrown 0.16.0", 3146 | "indexmap", 3147 | "log", 3148 | "naga", 3149 | "once_cell", 3150 | "parking_lot", 3151 | "portable-atomic", 3152 | "profiling", 3153 | "raw-window-handle", 3154 | "rustc-hash 1.1.0", 3155 | "smallvec", 3156 | "thiserror 2.0.17", 3157 | "wgpu-core-deps-apple", 3158 | "wgpu-core-deps-emscripten", 3159 | "wgpu-core-deps-windows-linux-android", 3160 | "wgpu-hal", 3161 | "wgpu-types", 3162 | ] 3163 | 3164 | [[package]] 3165 | name = "wgpu-core-deps-apple" 3166 | version = "27.0.0" 3167 | source = "registry+https://github.com/rust-lang/crates.io-index" 3168 | checksum = "0772ae958e9be0c729561d5e3fd9a19679bcdfb945b8b1a1969d9bfe8056d233" 3169 | dependencies = [ 3170 | "wgpu-hal", 3171 | ] 3172 | 3173 | [[package]] 3174 | name = "wgpu-core-deps-emscripten" 3175 | version = "27.0.0" 3176 | source = "registry+https://github.com/rust-lang/crates.io-index" 3177 | checksum = "b06ac3444a95b0813ecfd81ddb2774b66220b264b3e2031152a4a29fda4da6b5" 3178 | dependencies = [ 3179 | "wgpu-hal", 3180 | ] 3181 | 3182 | [[package]] 3183 | name = "wgpu-core-deps-windows-linux-android" 3184 | version = "27.0.0" 3185 | source = "registry+https://github.com/rust-lang/crates.io-index" 3186 | checksum = "71197027d61a71748e4120f05a9242b2ad142e3c01f8c1b47707945a879a03c3" 3187 | dependencies = [ 3188 | "wgpu-hal", 3189 | ] 3190 | 3191 | [[package]] 3192 | name = "wgpu-hal" 3193 | version = "27.0.2" 3194 | source = "registry+https://github.com/rust-lang/crates.io-index" 3195 | checksum = "2618a2d6b8a5964ecc1ac32a5db56cb3b1e518725fcd773fd9a782e023453f2b" 3196 | dependencies = [ 3197 | "android_system_properties", 3198 | "arrayvec", 3199 | "ash", 3200 | "bit-set", 3201 | "bitflags 2.9.4", 3202 | "block", 3203 | "bytemuck", 3204 | "cfg-if", 3205 | "cfg_aliases", 3206 | "core-graphics-types 0.2.0", 3207 | "glow", 3208 | "glutin_wgl_sys", 3209 | "gpu-alloc", 3210 | "gpu-allocator", 3211 | "gpu-descriptor", 3212 | "hashbrown 0.16.0", 3213 | "js-sys", 3214 | "khronos-egl", 3215 | "libc", 3216 | "libloading", 3217 | "log", 3218 | "metal", 3219 | "naga", 3220 | "ndk-sys", 3221 | "objc", 3222 | "once_cell", 3223 | "ordered-float", 3224 | "parking_lot", 3225 | "portable-atomic", 3226 | "portable-atomic-util", 3227 | "profiling", 3228 | "range-alloc", 3229 | "raw-window-handle", 3230 | "renderdoc-sys", 3231 | "smallvec", 3232 | "thiserror 2.0.17", 3233 | "wasm-bindgen", 3234 | "web-sys", 3235 | "wgpu-types", 3236 | "windows 0.58.0", 3237 | "windows-core 0.58.0", 3238 | ] 3239 | 3240 | [[package]] 3241 | name = "wgpu-types" 3242 | version = "27.0.1" 3243 | source = "registry+https://github.com/rust-lang/crates.io-index" 3244 | checksum = "afdcf84c395990db737f2dd91628706cb31e86d72e53482320d368e52b5da5eb" 3245 | dependencies = [ 3246 | "bitflags 2.9.4", 3247 | "bytemuck", 3248 | "js-sys", 3249 | "log", 3250 | "thiserror 2.0.17", 3251 | "web-sys", 3252 | ] 3253 | 3254 | [[package]] 3255 | name = "winapi" 3256 | version = "0.3.9" 3257 | source = "registry+https://github.com/rust-lang/crates.io-index" 3258 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 3259 | dependencies = [ 3260 | "winapi-i686-pc-windows-gnu", 3261 | "winapi-x86_64-pc-windows-gnu", 3262 | ] 3263 | 3264 | [[package]] 3265 | name = "winapi-i686-pc-windows-gnu" 3266 | version = "0.4.0" 3267 | source = "registry+https://github.com/rust-lang/crates.io-index" 3268 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 3269 | 3270 | [[package]] 3271 | name = "winapi-util" 3272 | version = "0.1.9" 3273 | source = "registry+https://github.com/rust-lang/crates.io-index" 3274 | checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 3275 | dependencies = [ 3276 | "windows-sys 0.59.0", 3277 | ] 3278 | 3279 | [[package]] 3280 | name = "winapi-x86_64-pc-windows-gnu" 3281 | version = "0.4.0" 3282 | source = "registry+https://github.com/rust-lang/crates.io-index" 3283 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 3284 | 3285 | [[package]] 3286 | name = "windows" 3287 | version = "0.58.0" 3288 | source = "registry+https://github.com/rust-lang/crates.io-index" 3289 | checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" 3290 | dependencies = [ 3291 | "windows-core 0.58.0", 3292 | "windows-targets 0.52.6", 3293 | ] 3294 | 3295 | [[package]] 3296 | name = "windows" 3297 | version = "0.61.3" 3298 | source = "registry+https://github.com/rust-lang/crates.io-index" 3299 | checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" 3300 | dependencies = [ 3301 | "windows-collections", 3302 | "windows-core 0.61.2", 3303 | "windows-future", 3304 | "windows-link 0.1.3", 3305 | "windows-numerics", 3306 | ] 3307 | 3308 | [[package]] 3309 | name = "windows-collections" 3310 | version = "0.2.0" 3311 | source = "registry+https://github.com/rust-lang/crates.io-index" 3312 | checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" 3313 | dependencies = [ 3314 | "windows-core 0.61.2", 3315 | ] 3316 | 3317 | [[package]] 3318 | name = "windows-core" 3319 | version = "0.58.0" 3320 | source = "registry+https://github.com/rust-lang/crates.io-index" 3321 | checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" 3322 | dependencies = [ 3323 | "windows-implement 0.58.0", 3324 | "windows-interface 0.58.0", 3325 | "windows-result 0.2.0", 3326 | "windows-strings 0.1.0", 3327 | "windows-targets 0.52.6", 3328 | ] 3329 | 3330 | [[package]] 3331 | name = "windows-core" 3332 | version = "0.61.2" 3333 | source = "registry+https://github.com/rust-lang/crates.io-index" 3334 | checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" 3335 | dependencies = [ 3336 | "windows-implement 0.60.0", 3337 | "windows-interface 0.59.1", 3338 | "windows-link 0.1.3", 3339 | "windows-result 0.3.4", 3340 | "windows-strings 0.4.2", 3341 | ] 3342 | 3343 | [[package]] 3344 | name = "windows-future" 3345 | version = "0.2.1" 3346 | source = "registry+https://github.com/rust-lang/crates.io-index" 3347 | checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" 3348 | dependencies = [ 3349 | "windows-core 0.61.2", 3350 | "windows-link 0.1.3", 3351 | "windows-threading", 3352 | ] 3353 | 3354 | [[package]] 3355 | name = "windows-implement" 3356 | version = "0.58.0" 3357 | source = "registry+https://github.com/rust-lang/crates.io-index" 3358 | checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" 3359 | dependencies = [ 3360 | "proc-macro2", 3361 | "quote", 3362 | "syn", 3363 | ] 3364 | 3365 | [[package]] 3366 | name = "windows-implement" 3367 | version = "0.60.0" 3368 | source = "registry+https://github.com/rust-lang/crates.io-index" 3369 | checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" 3370 | dependencies = [ 3371 | "proc-macro2", 3372 | "quote", 3373 | "syn", 3374 | ] 3375 | 3376 | [[package]] 3377 | name = "windows-interface" 3378 | version = "0.58.0" 3379 | source = "registry+https://github.com/rust-lang/crates.io-index" 3380 | checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" 3381 | dependencies = [ 3382 | "proc-macro2", 3383 | "quote", 3384 | "syn", 3385 | ] 3386 | 3387 | [[package]] 3388 | name = "windows-interface" 3389 | version = "0.59.1" 3390 | source = "registry+https://github.com/rust-lang/crates.io-index" 3391 | checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" 3392 | dependencies = [ 3393 | "proc-macro2", 3394 | "quote", 3395 | "syn", 3396 | ] 3397 | 3398 | [[package]] 3399 | name = "windows-link" 3400 | version = "0.1.3" 3401 | source = "registry+https://github.com/rust-lang/crates.io-index" 3402 | checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" 3403 | 3404 | [[package]] 3405 | name = "windows-link" 3406 | version = "0.2.1" 3407 | source = "registry+https://github.com/rust-lang/crates.io-index" 3408 | checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" 3409 | 3410 | [[package]] 3411 | name = "windows-numerics" 3412 | version = "0.2.0" 3413 | source = "registry+https://github.com/rust-lang/crates.io-index" 3414 | checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" 3415 | dependencies = [ 3416 | "windows-core 0.61.2", 3417 | "windows-link 0.1.3", 3418 | ] 3419 | 3420 | [[package]] 3421 | name = "windows-result" 3422 | version = "0.2.0" 3423 | source = "registry+https://github.com/rust-lang/crates.io-index" 3424 | checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" 3425 | dependencies = [ 3426 | "windows-targets 0.52.6", 3427 | ] 3428 | 3429 | [[package]] 3430 | name = "windows-result" 3431 | version = "0.3.4" 3432 | source = "registry+https://github.com/rust-lang/crates.io-index" 3433 | checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 3434 | dependencies = [ 3435 | "windows-link 0.1.3", 3436 | ] 3437 | 3438 | [[package]] 3439 | name = "windows-strings" 3440 | version = "0.1.0" 3441 | source = "registry+https://github.com/rust-lang/crates.io-index" 3442 | checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" 3443 | dependencies = [ 3444 | "windows-result 0.2.0", 3445 | "windows-targets 0.52.6", 3446 | ] 3447 | 3448 | [[package]] 3449 | name = "windows-strings" 3450 | version = "0.4.2" 3451 | source = "registry+https://github.com/rust-lang/crates.io-index" 3452 | checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 3453 | dependencies = [ 3454 | "windows-link 0.1.3", 3455 | ] 3456 | 3457 | [[package]] 3458 | name = "windows-sys" 3459 | version = "0.45.0" 3460 | source = "registry+https://github.com/rust-lang/crates.io-index" 3461 | checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 3462 | dependencies = [ 3463 | "windows-targets 0.42.2", 3464 | ] 3465 | 3466 | [[package]] 3467 | name = "windows-sys" 3468 | version = "0.52.0" 3469 | source = "registry+https://github.com/rust-lang/crates.io-index" 3470 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 3471 | dependencies = [ 3472 | "windows-targets 0.52.6", 3473 | ] 3474 | 3475 | [[package]] 3476 | name = "windows-sys" 3477 | version = "0.59.0" 3478 | source = "registry+https://github.com/rust-lang/crates.io-index" 3479 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 3480 | dependencies = [ 3481 | "windows-targets 0.52.6", 3482 | ] 3483 | 3484 | [[package]] 3485 | name = "windows-sys" 3486 | version = "0.60.2" 3487 | source = "registry+https://github.com/rust-lang/crates.io-index" 3488 | checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" 3489 | dependencies = [ 3490 | "windows-targets 0.53.2", 3491 | ] 3492 | 3493 | [[package]] 3494 | name = "windows-sys" 3495 | version = "0.61.2" 3496 | source = "registry+https://github.com/rust-lang/crates.io-index" 3497 | checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" 3498 | dependencies = [ 3499 | "windows-link 0.2.1", 3500 | ] 3501 | 3502 | [[package]] 3503 | name = "windows-targets" 3504 | version = "0.42.2" 3505 | source = "registry+https://github.com/rust-lang/crates.io-index" 3506 | checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" 3507 | dependencies = [ 3508 | "windows_aarch64_gnullvm 0.42.2", 3509 | "windows_aarch64_msvc 0.42.2", 3510 | "windows_i686_gnu 0.42.2", 3511 | "windows_i686_msvc 0.42.2", 3512 | "windows_x86_64_gnu 0.42.2", 3513 | "windows_x86_64_gnullvm 0.42.2", 3514 | "windows_x86_64_msvc 0.42.2", 3515 | ] 3516 | 3517 | [[package]] 3518 | name = "windows-targets" 3519 | version = "0.48.5" 3520 | source = "registry+https://github.com/rust-lang/crates.io-index" 3521 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 3522 | dependencies = [ 3523 | "windows_aarch64_gnullvm 0.48.5", 3524 | "windows_aarch64_msvc 0.48.5", 3525 | "windows_i686_gnu 0.48.5", 3526 | "windows_i686_msvc 0.48.5", 3527 | "windows_x86_64_gnu 0.48.5", 3528 | "windows_x86_64_gnullvm 0.48.5", 3529 | "windows_x86_64_msvc 0.48.5", 3530 | ] 3531 | 3532 | [[package]] 3533 | name = "windows-targets" 3534 | version = "0.52.6" 3535 | source = "registry+https://github.com/rust-lang/crates.io-index" 3536 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 3537 | dependencies = [ 3538 | "windows_aarch64_gnullvm 0.52.6", 3539 | "windows_aarch64_msvc 0.52.6", 3540 | "windows_i686_gnu 0.52.6", 3541 | "windows_i686_gnullvm 0.52.6", 3542 | "windows_i686_msvc 0.52.6", 3543 | "windows_x86_64_gnu 0.52.6", 3544 | "windows_x86_64_gnullvm 0.52.6", 3545 | "windows_x86_64_msvc 0.52.6", 3546 | ] 3547 | 3548 | [[package]] 3549 | name = "windows-targets" 3550 | version = "0.53.2" 3551 | source = "registry+https://github.com/rust-lang/crates.io-index" 3552 | checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" 3553 | dependencies = [ 3554 | "windows_aarch64_gnullvm 0.53.0", 3555 | "windows_aarch64_msvc 0.53.0", 3556 | "windows_i686_gnu 0.53.0", 3557 | "windows_i686_gnullvm 0.53.0", 3558 | "windows_i686_msvc 0.53.0", 3559 | "windows_x86_64_gnu 0.53.0", 3560 | "windows_x86_64_gnullvm 0.53.0", 3561 | "windows_x86_64_msvc 0.53.0", 3562 | ] 3563 | 3564 | [[package]] 3565 | name = "windows-threading" 3566 | version = "0.1.0" 3567 | source = "registry+https://github.com/rust-lang/crates.io-index" 3568 | checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" 3569 | dependencies = [ 3570 | "windows-link 0.1.3", 3571 | ] 3572 | 3573 | [[package]] 3574 | name = "windows_aarch64_gnullvm" 3575 | version = "0.42.2" 3576 | source = "registry+https://github.com/rust-lang/crates.io-index" 3577 | checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" 3578 | 3579 | [[package]] 3580 | name = "windows_aarch64_gnullvm" 3581 | version = "0.48.5" 3582 | source = "registry+https://github.com/rust-lang/crates.io-index" 3583 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 3584 | 3585 | [[package]] 3586 | name = "windows_aarch64_gnullvm" 3587 | version = "0.52.6" 3588 | source = "registry+https://github.com/rust-lang/crates.io-index" 3589 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 3590 | 3591 | [[package]] 3592 | name = "windows_aarch64_gnullvm" 3593 | version = "0.53.0" 3594 | source = "registry+https://github.com/rust-lang/crates.io-index" 3595 | checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" 3596 | 3597 | [[package]] 3598 | name = "windows_aarch64_msvc" 3599 | version = "0.42.2" 3600 | source = "registry+https://github.com/rust-lang/crates.io-index" 3601 | checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" 3602 | 3603 | [[package]] 3604 | name = "windows_aarch64_msvc" 3605 | version = "0.48.5" 3606 | source = "registry+https://github.com/rust-lang/crates.io-index" 3607 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 3608 | 3609 | [[package]] 3610 | name = "windows_aarch64_msvc" 3611 | version = "0.52.6" 3612 | source = "registry+https://github.com/rust-lang/crates.io-index" 3613 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 3614 | 3615 | [[package]] 3616 | name = "windows_aarch64_msvc" 3617 | version = "0.53.0" 3618 | source = "registry+https://github.com/rust-lang/crates.io-index" 3619 | checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" 3620 | 3621 | [[package]] 3622 | name = "windows_i686_gnu" 3623 | version = "0.42.2" 3624 | source = "registry+https://github.com/rust-lang/crates.io-index" 3625 | checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" 3626 | 3627 | [[package]] 3628 | name = "windows_i686_gnu" 3629 | version = "0.48.5" 3630 | source = "registry+https://github.com/rust-lang/crates.io-index" 3631 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 3632 | 3633 | [[package]] 3634 | name = "windows_i686_gnu" 3635 | version = "0.52.6" 3636 | source = "registry+https://github.com/rust-lang/crates.io-index" 3637 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 3638 | 3639 | [[package]] 3640 | name = "windows_i686_gnu" 3641 | version = "0.53.0" 3642 | source = "registry+https://github.com/rust-lang/crates.io-index" 3643 | checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" 3644 | 3645 | [[package]] 3646 | name = "windows_i686_gnullvm" 3647 | version = "0.52.6" 3648 | source = "registry+https://github.com/rust-lang/crates.io-index" 3649 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 3650 | 3651 | [[package]] 3652 | name = "windows_i686_gnullvm" 3653 | version = "0.53.0" 3654 | source = "registry+https://github.com/rust-lang/crates.io-index" 3655 | checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" 3656 | 3657 | [[package]] 3658 | name = "windows_i686_msvc" 3659 | version = "0.42.2" 3660 | source = "registry+https://github.com/rust-lang/crates.io-index" 3661 | checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" 3662 | 3663 | [[package]] 3664 | name = "windows_i686_msvc" 3665 | version = "0.48.5" 3666 | source = "registry+https://github.com/rust-lang/crates.io-index" 3667 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 3668 | 3669 | [[package]] 3670 | name = "windows_i686_msvc" 3671 | version = "0.52.6" 3672 | source = "registry+https://github.com/rust-lang/crates.io-index" 3673 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 3674 | 3675 | [[package]] 3676 | name = "windows_i686_msvc" 3677 | version = "0.53.0" 3678 | source = "registry+https://github.com/rust-lang/crates.io-index" 3679 | checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" 3680 | 3681 | [[package]] 3682 | name = "windows_x86_64_gnu" 3683 | version = "0.42.2" 3684 | source = "registry+https://github.com/rust-lang/crates.io-index" 3685 | checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" 3686 | 3687 | [[package]] 3688 | name = "windows_x86_64_gnu" 3689 | version = "0.48.5" 3690 | source = "registry+https://github.com/rust-lang/crates.io-index" 3691 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 3692 | 3693 | [[package]] 3694 | name = "windows_x86_64_gnu" 3695 | version = "0.52.6" 3696 | source = "registry+https://github.com/rust-lang/crates.io-index" 3697 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 3698 | 3699 | [[package]] 3700 | name = "windows_x86_64_gnu" 3701 | version = "0.53.0" 3702 | source = "registry+https://github.com/rust-lang/crates.io-index" 3703 | checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" 3704 | 3705 | [[package]] 3706 | name = "windows_x86_64_gnullvm" 3707 | version = "0.42.2" 3708 | source = "registry+https://github.com/rust-lang/crates.io-index" 3709 | checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" 3710 | 3711 | [[package]] 3712 | name = "windows_x86_64_gnullvm" 3713 | version = "0.48.5" 3714 | source = "registry+https://github.com/rust-lang/crates.io-index" 3715 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 3716 | 3717 | [[package]] 3718 | name = "windows_x86_64_gnullvm" 3719 | version = "0.52.6" 3720 | source = "registry+https://github.com/rust-lang/crates.io-index" 3721 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 3722 | 3723 | [[package]] 3724 | name = "windows_x86_64_gnullvm" 3725 | version = "0.53.0" 3726 | source = "registry+https://github.com/rust-lang/crates.io-index" 3727 | checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" 3728 | 3729 | [[package]] 3730 | name = "windows_x86_64_msvc" 3731 | version = "0.42.2" 3732 | source = "registry+https://github.com/rust-lang/crates.io-index" 3733 | checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" 3734 | 3735 | [[package]] 3736 | name = "windows_x86_64_msvc" 3737 | version = "0.48.5" 3738 | source = "registry+https://github.com/rust-lang/crates.io-index" 3739 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 3740 | 3741 | [[package]] 3742 | name = "windows_x86_64_msvc" 3743 | version = "0.52.6" 3744 | source = "registry+https://github.com/rust-lang/crates.io-index" 3745 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 3746 | 3747 | [[package]] 3748 | name = "windows_x86_64_msvc" 3749 | version = "0.53.0" 3750 | source = "registry+https://github.com/rust-lang/crates.io-index" 3751 | checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" 3752 | 3753 | [[package]] 3754 | name = "winit" 3755 | version = "0.30.12" 3756 | source = "registry+https://github.com/rust-lang/crates.io-index" 3757 | checksum = "c66d4b9ed69c4009f6321f762d6e61ad8a2389cd431b97cb1e146812e9e6c732" 3758 | dependencies = [ 3759 | "ahash", 3760 | "android-activity", 3761 | "atomic-waker", 3762 | "bitflags 2.9.4", 3763 | "block2", 3764 | "bytemuck", 3765 | "calloop", 3766 | "cfg_aliases", 3767 | "concurrent-queue", 3768 | "core-foundation 0.9.4", 3769 | "core-graphics", 3770 | "cursor-icon", 3771 | "dpi", 3772 | "js-sys", 3773 | "libc", 3774 | "memmap2", 3775 | "ndk", 3776 | "objc2 0.5.2", 3777 | "objc2-app-kit 0.2.2", 3778 | "objc2-foundation 0.2.2", 3779 | "objc2-ui-kit", 3780 | "orbclient", 3781 | "percent-encoding", 3782 | "pin-project", 3783 | "raw-window-handle", 3784 | "redox_syscall 0.4.1", 3785 | "rustix 0.38.44", 3786 | "sctk-adwaita", 3787 | "smithay-client-toolkit", 3788 | "smol_str", 3789 | "tracing", 3790 | "unicode-segmentation", 3791 | "wasm-bindgen", 3792 | "wasm-bindgen-futures", 3793 | "wayland-backend", 3794 | "wayland-client", 3795 | "wayland-protocols", 3796 | "wayland-protocols-plasma", 3797 | "web-sys", 3798 | "web-time", 3799 | "windows-sys 0.52.0", 3800 | "x11-dl", 3801 | "x11rb", 3802 | "xkbcommon-dl", 3803 | ] 3804 | 3805 | [[package]] 3806 | name = "winnow" 3807 | version = "0.7.11" 3808 | source = "registry+https://github.com/rust-lang/crates.io-index" 3809 | checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" 3810 | dependencies = [ 3811 | "memchr", 3812 | ] 3813 | 3814 | [[package]] 3815 | name = "wit-bindgen-rt" 3816 | version = "0.39.0" 3817 | source = "registry+https://github.com/rust-lang/crates.io-index" 3818 | checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" 3819 | dependencies = [ 3820 | "bitflags 2.9.4", 3821 | ] 3822 | 3823 | [[package]] 3824 | name = "writeable" 3825 | version = "0.6.1" 3826 | source = "registry+https://github.com/rust-lang/crates.io-index" 3827 | checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" 3828 | 3829 | [[package]] 3830 | name = "x11-dl" 3831 | version = "2.21.0" 3832 | source = "registry+https://github.com/rust-lang/crates.io-index" 3833 | checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" 3834 | dependencies = [ 3835 | "libc", 3836 | "once_cell", 3837 | "pkg-config", 3838 | ] 3839 | 3840 | [[package]] 3841 | name = "x11rb" 3842 | version = "0.13.1" 3843 | source = "registry+https://github.com/rust-lang/crates.io-index" 3844 | checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" 3845 | dependencies = [ 3846 | "as-raw-xcb-connection", 3847 | "gethostname", 3848 | "libc", 3849 | "libloading", 3850 | "once_cell", 3851 | "rustix 0.38.44", 3852 | "x11rb-protocol", 3853 | ] 3854 | 3855 | [[package]] 3856 | name = "x11rb-protocol" 3857 | version = "0.13.1" 3858 | source = "registry+https://github.com/rust-lang/crates.io-index" 3859 | checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" 3860 | 3861 | [[package]] 3862 | name = "xcursor" 3863 | version = "0.3.10" 3864 | source = "registry+https://github.com/rust-lang/crates.io-index" 3865 | checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b" 3866 | 3867 | [[package]] 3868 | name = "xkbcommon-dl" 3869 | version = "0.4.2" 3870 | source = "registry+https://github.com/rust-lang/crates.io-index" 3871 | checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" 3872 | dependencies = [ 3873 | "bitflags 2.9.4", 3874 | "dlib", 3875 | "log", 3876 | "once_cell", 3877 | "xkeysym", 3878 | ] 3879 | 3880 | [[package]] 3881 | name = "xkeysym" 3882 | version = "0.2.1" 3883 | source = "registry+https://github.com/rust-lang/crates.io-index" 3884 | checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" 3885 | 3886 | [[package]] 3887 | name = "xml-rs" 3888 | version = "0.8.27" 3889 | source = "registry+https://github.com/rust-lang/crates.io-index" 3890 | checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" 3891 | 3892 | [[package]] 3893 | name = "yoke" 3894 | version = "0.8.0" 3895 | source = "registry+https://github.com/rust-lang/crates.io-index" 3896 | checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" 3897 | dependencies = [ 3898 | "serde", 3899 | "stable_deref_trait", 3900 | "yoke-derive", 3901 | "zerofrom", 3902 | ] 3903 | 3904 | [[package]] 3905 | name = "yoke-derive" 3906 | version = "0.8.0" 3907 | source = "registry+https://github.com/rust-lang/crates.io-index" 3908 | checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" 3909 | dependencies = [ 3910 | "proc-macro2", 3911 | "quote", 3912 | "syn", 3913 | "synstructure", 3914 | ] 3915 | 3916 | [[package]] 3917 | name = "zbus" 3918 | version = "5.8.0" 3919 | source = "registry+https://github.com/rust-lang/crates.io-index" 3920 | checksum = "597f45e98bc7e6f0988276012797855613cd8269e23b5be62cc4e5d28b7e515d" 3921 | dependencies = [ 3922 | "async-broadcast", 3923 | "async-executor", 3924 | "async-io", 3925 | "async-lock", 3926 | "async-process", 3927 | "async-recursion", 3928 | "async-task", 3929 | "async-trait", 3930 | "blocking", 3931 | "enumflags2", 3932 | "event-listener", 3933 | "futures-core", 3934 | "futures-lite", 3935 | "hex", 3936 | "nix", 3937 | "ordered-stream", 3938 | "serde", 3939 | "serde_repr", 3940 | "tracing", 3941 | "uds_windows", 3942 | "windows-sys 0.59.0", 3943 | "winnow", 3944 | "zbus_macros", 3945 | "zbus_names", 3946 | "zvariant", 3947 | ] 3948 | 3949 | [[package]] 3950 | name = "zbus-lockstep" 3951 | version = "0.5.1" 3952 | source = "registry+https://github.com/rust-lang/crates.io-index" 3953 | checksum = "29e96e38ded30eeab90b6ba88cb888d70aef4e7489b6cd212c5e5b5ec38045b6" 3954 | dependencies = [ 3955 | "zbus_xml", 3956 | "zvariant", 3957 | ] 3958 | 3959 | [[package]] 3960 | name = "zbus-lockstep-macros" 3961 | version = "0.5.1" 3962 | source = "registry+https://github.com/rust-lang/crates.io-index" 3963 | checksum = "dc6821851fa840b708b4cbbaf6241868cabc85a2dc22f426361b0292bfc0b836" 3964 | dependencies = [ 3965 | "proc-macro2", 3966 | "quote", 3967 | "syn", 3968 | "zbus-lockstep", 3969 | "zbus_xml", 3970 | "zvariant", 3971 | ] 3972 | 3973 | [[package]] 3974 | name = "zbus_macros" 3975 | version = "5.8.0" 3976 | source = "registry+https://github.com/rust-lang/crates.io-index" 3977 | checksum = "e5c8e4e14dcdd9d97a98b189cd1220f30e8394ad271e8c987da84f73693862c2" 3978 | dependencies = [ 3979 | "proc-macro-crate", 3980 | "proc-macro2", 3981 | "quote", 3982 | "syn", 3983 | "zbus_names", 3984 | "zvariant", 3985 | "zvariant_utils", 3986 | ] 3987 | 3988 | [[package]] 3989 | name = "zbus_names" 3990 | version = "4.2.0" 3991 | source = "registry+https://github.com/rust-lang/crates.io-index" 3992 | checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" 3993 | dependencies = [ 3994 | "serde", 3995 | "static_assertions", 3996 | "winnow", 3997 | "zvariant", 3998 | ] 3999 | 4000 | [[package]] 4001 | name = "zbus_xml" 4002 | version = "5.0.2" 4003 | source = "registry+https://github.com/rust-lang/crates.io-index" 4004 | checksum = "589e9a02bfafb9754bb2340a9e3b38f389772684c63d9637e76b1870377bec29" 4005 | dependencies = [ 4006 | "quick-xml 0.36.2", 4007 | "serde", 4008 | "static_assertions", 4009 | "zbus_names", 4010 | "zvariant", 4011 | ] 4012 | 4013 | [[package]] 4014 | name = "zerocopy" 4015 | version = "0.8.26" 4016 | source = "registry+https://github.com/rust-lang/crates.io-index" 4017 | checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" 4018 | dependencies = [ 4019 | "zerocopy-derive", 4020 | ] 4021 | 4022 | [[package]] 4023 | name = "zerocopy-derive" 4024 | version = "0.8.26" 4025 | source = "registry+https://github.com/rust-lang/crates.io-index" 4026 | checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" 4027 | dependencies = [ 4028 | "proc-macro2", 4029 | "quote", 4030 | "syn", 4031 | ] 4032 | 4033 | [[package]] 4034 | name = "zerofrom" 4035 | version = "0.1.6" 4036 | source = "registry+https://github.com/rust-lang/crates.io-index" 4037 | checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 4038 | dependencies = [ 4039 | "zerofrom-derive", 4040 | ] 4041 | 4042 | [[package]] 4043 | name = "zerofrom-derive" 4044 | version = "0.1.6" 4045 | source = "registry+https://github.com/rust-lang/crates.io-index" 4046 | checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 4047 | dependencies = [ 4048 | "proc-macro2", 4049 | "quote", 4050 | "syn", 4051 | "synstructure", 4052 | ] 4053 | 4054 | [[package]] 4055 | name = "zerotrie" 4056 | version = "0.2.2" 4057 | source = "registry+https://github.com/rust-lang/crates.io-index" 4058 | checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" 4059 | dependencies = [ 4060 | "displaydoc", 4061 | "yoke", 4062 | "zerofrom", 4063 | ] 4064 | 4065 | [[package]] 4066 | name = "zerovec" 4067 | version = "0.11.2" 4068 | source = "registry+https://github.com/rust-lang/crates.io-index" 4069 | checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" 4070 | dependencies = [ 4071 | "yoke", 4072 | "zerofrom", 4073 | "zerovec-derive", 4074 | ] 4075 | 4076 | [[package]] 4077 | name = "zerovec-derive" 4078 | version = "0.11.1" 4079 | source = "registry+https://github.com/rust-lang/crates.io-index" 4080 | checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" 4081 | dependencies = [ 4082 | "proc-macro2", 4083 | "quote", 4084 | "syn", 4085 | ] 4086 | 4087 | [[package]] 4088 | name = "zvariant" 4089 | version = "5.6.0" 4090 | source = "registry+https://github.com/rust-lang/crates.io-index" 4091 | checksum = "d91b3680bb339216abd84714172b5138a4edac677e641ef17e1d8cb1b3ca6e6f" 4092 | dependencies = [ 4093 | "endi", 4094 | "enumflags2", 4095 | "serde", 4096 | "winnow", 4097 | "zvariant_derive", 4098 | "zvariant_utils", 4099 | ] 4100 | 4101 | [[package]] 4102 | name = "zvariant_derive" 4103 | version = "5.6.0" 4104 | source = "registry+https://github.com/rust-lang/crates.io-index" 4105 | checksum = "3a8c68501be459a8dbfffbe5d792acdd23b4959940fc87785fb013b32edbc208" 4106 | dependencies = [ 4107 | "proc-macro-crate", 4108 | "proc-macro2", 4109 | "quote", 4110 | "syn", 4111 | "zvariant_utils", 4112 | ] 4113 | 4114 | [[package]] 4115 | name = "zvariant_utils" 4116 | version = "3.2.0" 4117 | source = "registry+https://github.com/rust-lang/crates.io-index" 4118 | checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34" 4119 | dependencies = [ 4120 | "proc-macro2", 4121 | "quote", 4122 | "serde", 4123 | "static_assertions", 4124 | "syn", 4125 | "winnow", 4126 | ] 4127 | --------------------------------------------------------------------------------