├── .gitignore ├── examples ├── assets │ └── ferris.png ├── alignments │ ├── Cargo.toml │ └── src │ │ └── main.rs └── containers │ ├── Cargo.toml │ └── src │ └── main.rs ├── Cargo.toml ├── crates └── egui_alignments │ ├── Cargo.toml │ └── src │ ├── alignable.rs │ ├── container │ ├── column.rs │ └── row.rs │ ├── lib.rs │ ├── container.rs │ └── aligner.rs ├── CHANGELOG.md ├── README.md └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | **/target 2 | -------------------------------------------------------------------------------- /examples/assets/ferris.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a-littlebit/egui_alignments/HEAD/examples/assets/ferris.png -------------------------------------------------------------------------------- /examples/alignments/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "alignments" 3 | license.workspace = true 4 | version.workspace = true 5 | edition.workspace = true 6 | 7 | [dependencies] 8 | eframe = { workspace = true } 9 | egui = { workspace = true } 10 | egui_alignments = { workspace = true } 11 | egui_extras = { workspace = true } 12 | -------------------------------------------------------------------------------- /examples/containers/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "containers" 3 | license.workspace = true 4 | version.workspace = true 5 | edition.workspace = true 6 | 7 | [dependencies] 8 | eframe = { workspace = true } 9 | egui = { workspace = true } 10 | egui_alignments = { workspace = true } 11 | egui_extras = { workspace = true } 12 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | resolver = "2" 3 | members = ["crates/egui_alignments", "examples/alignments", "examples/containers"] 4 | 5 | [workspace.package] 6 | license = "MIT OR Apache-2.0" 7 | version = "0.3.6" 8 | edition = "2021" 9 | 10 | [workspace.dependencies] 11 | eframe = "0.33" 12 | egui = "0.33" 13 | egui_alignments = { path = "crates/egui_alignments" } 14 | egui_extras = { version = "0.33", features = ["all_loaders"] } 15 | -------------------------------------------------------------------------------- /crates/egui_alignments/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "egui_alignments" 3 | version.workspace = true 4 | edition.workspace = true 5 | description = "Simple alignment tools for egui" 6 | readme = "../../README.md" 7 | keywords = ["egui", "alignment", "layout"] 8 | homepage = "https://github.com/a-littlebit/egui_alignments" 9 | repository = "https://github.com/a-littlebit/egui_alignments" 10 | license.workspace = true 11 | 12 | [dependencies] 13 | egui = { workspace = true } -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # egui_alignments changelog 2 | 3 | All notable changes to this crate will be documented in this file. 4 | 5 | ## 0.3.4 - 2025-04-10 6 | 7 | - Fixed: Wrapped layouts with stretch never unwrapping. [#7](https://github.com/a-littlebit/egui_alignments/issues/7) 8 | 9 | ## 0.3.3 - 2025-04-09 10 | 11 | - Fixed: a wrapping row can take up full available height. [#6](https://github.com/a-littlebit/egui_alignments/issues/6) 12 | 13 | ## 0.3.2 - 2025-03-19 14 | 15 | - Added `stretch` feature to align items in a container more flexibly. 16 | 17 | - P.S. Where is 0.3.0? Actually 0.3.0 has been published on crates.io, but it seems I failed to push the related commits to GitHub. The has led to a version confusion. Anyway, 0.3.2 will be the latest version before 0.3.3 or 0.4.0 with interesting new features compared to 0.2.x and is compatible with later version of `egui` compared to 0.3.0. I'm sorry for the inconvenience. Just try 0.3.2! 18 | 19 | ## 0.2.7 20 | 21 | - Update egui to 0.31.1 22 | 23 | ## 0.2.6 24 | 25 | - Update egui to 0.31.0 26 | 27 | ## 0.2.5 28 | 29 | - Update egui to 0.30.0 30 | 31 | ## 0.2.4 32 | 33 | - Fix: column containers appear at incorrect position when overflowing 34 | 35 | ## 0.2.3 - 2024-09-30 36 | 37 | - Add `container` module with container `Row` and `Column` 38 | 39 | ## 0.2.2 - 2024-09-28 40 | 41 | - Update egui to 0.29.0 42 | 43 | ## 0.2.1 - 2024-09-27 44 | 45 | - Fix: Nested alignments result in endless repaint and high CPU usage 46 | 47 | ## 0.2.0 - 2024-09-26 48 | 49 | - Support alignments releative to the whole Ui 50 | - Support allocate no space & content row & content column 51 | 52 | ## 0.1.0 - 2024-09-25 53 | 54 | - First release -------------------------------------------------------------------------------- /examples/alignments/src/main.rs: -------------------------------------------------------------------------------- 1 | #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release 2 | #![allow(rustdoc::missing_crate_level_docs)] // it's an example 3 | 4 | use eframe::egui; 5 | use egui::{vec2, Image, Label, WidgetText}; 6 | use egui_alignments::{top_horizontal, Alignable}; 7 | 8 | fn main() -> eframe::Result { 9 | let options = eframe::NativeOptions { 10 | viewport: egui::ViewportBuilder::default().with_inner_size([320.0, 240.0]), 11 | ..Default::default() 12 | }; 13 | eframe::run_native( 14 | "My egui App", 15 | options, 16 | Box::new(|cc| { 17 | // This gives us image support: 18 | egui_extras::install_image_loaders(&cc.egui_ctx); 19 | 20 | Ok(Box::::default()) 21 | }), 22 | ) 23 | } 24 | 25 | struct MyApp { 26 | name: String, 27 | age: u32, 28 | } 29 | 30 | impl Default for MyApp { 31 | fn default() -> Self { 32 | Self { 33 | name: "Arthur".to_owned(), 34 | age: 42, 35 | } 36 | } 37 | } 38 | 39 | impl eframe::App for MyApp { 40 | fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { 41 | egui::CentralPanel::default().show(ctx, |ui| { 42 | Label::new(WidgetText::from("My egui Application").heading()).top(ui); 43 | 44 | top_horizontal(ui, |ui| { 45 | let name_label = ui.label("Your name: "); 46 | 47 | if ui.button("Increment").clicked() { 48 | self.age += 1; 49 | } 50 | 51 | ui.text_edit_singleline(&mut self.name) 52 | .labelled_by(name_label.id); 53 | }); 54 | 55 | egui::Slider::new(&mut self.age, 0..=120) 56 | .text("age") 57 | .top(ui); 58 | Label::new(format!("Hello '{}', age {}", self.name, self.age)).top(ui); 59 | 60 | Image::new(egui::include_image!("../../assets/ferris.png")) 61 | .fit_to_exact_size(vec2(200.0, 200.0)) 62 | .center(ui); 63 | }); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /crates/egui_alignments/src/alignable.rs: -------------------------------------------------------------------------------- 1 | use egui::{Align2, Response, Ui, Widget}; 2 | 3 | use crate::*; 4 | 5 | /// A widget that can adjust its position using an [`Alignment`] 6 | /// or a widget aligns its itself using the specified [`Alignment`] 7 | /// before rendering. 8 | /// 9 | /// # Examples 10 | /// ``` 11 | /// use egui::{Button, Label}; 12 | /// use egui_alignments::Alignable; 13 | /// 14 | /// # egui::__run_test_ui(|ui| { 15 | /// Label::new("This label will be shown at the top") 16 | /// .top(ui); 17 | /// if Button::new("This label will be shown at the center") 18 | /// .center(ui) 19 | /// .clicked() { 20 | /// println!("Center button clicked!"); 21 | /// } 22 | /// Label::new("This label will be shown at the bottom") 23 | /// .bottom(ui); 24 | /// # }); 25 | /// ``` 26 | pub trait Alignable: Widget + Sized { 27 | /// Show the widget at the position specified by the [`Alignment`]. 28 | fn align(self, ui: &mut Ui, align: impl Alignment) -> Response; 29 | 30 | /// Show the widget at the center of the available space. 31 | fn center(self, ui: &mut Ui) -> Response { 32 | self.align(ui, Align2::CENTER_CENTER) 33 | } 34 | 35 | /// Show the widget at the top of the available space. 36 | fn top(self, ui: &mut Ui) -> Response { 37 | self.align(ui, Align2::CENTER_TOP) 38 | } 39 | 40 | /// Show the widget at the bottom of the available space. 41 | fn bottom(self, ui: &mut Ui) -> Response { 42 | self.align(ui, Align2::CENTER_BOTTOM) 43 | } 44 | 45 | /// Show the widget at the left of the available space. 46 | fn left(self, ui: &mut Ui) -> Response { 47 | self.align(ui, Align2::LEFT_CENTER) 48 | } 49 | 50 | /// Show the widget at the right of the available space. 51 | fn right(self, ui: &mut Ui) -> Response { 52 | self.align(ui, Align2::RIGHT_CENTER) 53 | } 54 | 55 | /// Show the widget at the top left of the available space. 56 | fn top_left(self, ui: &mut Ui) -> Response { 57 | self.align(ui, Align2::LEFT_TOP) 58 | } 59 | 60 | /// Show the widget at the top right of the available space. 61 | fn top_right(self, ui: &mut Ui) -> Response { 62 | self.align(ui, Align2::RIGHT_TOP) 63 | } 64 | 65 | /// Show the widget at the bottom left of the available space. 66 | fn bottom_left(self, ui: &mut Ui) -> Response { 67 | self.align(ui, Align2::LEFT_BOTTOM) 68 | } 69 | 70 | /// Show the widget at the bottom right of the available space. 71 | fn bottom_right(self, ui: &mut Ui) -> Response { 72 | self.align(ui, Align2::RIGHT_BOTTOM) 73 | } 74 | } 75 | 76 | /// Implements [`Alignable`] for all [`Widget`]s 77 | /// by adjust their positions using [`Aligner`]. 78 | impl Alignable for T { 79 | fn align(self, ui: &mut Ui, align: impl Alignment) -> Response { 80 | Aligner::from_align(align).show(ui, |ui| self.ui(ui)).inner 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /examples/containers/src/main.rs: -------------------------------------------------------------------------------- 1 | #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release 2 | #![allow(rustdoc::missing_crate_level_docs)] // it's an example 3 | 4 | use eframe::egui; 5 | use egui::{vec2, Label, Widget}; 6 | use egui_alignments::{column, row, stretch, stretch_with_weight, Alignable, Row}; 7 | 8 | fn main() -> eframe::Result { 9 | let options = eframe::NativeOptions { 10 | viewport: egui::ViewportBuilder::default().with_inner_size([400.0, 320.0]), 11 | ..Default::default() 12 | }; 13 | eframe::run_native( 14 | "My egui App", 15 | options, 16 | Box::new(|cc| { 17 | // This gives us image support: 18 | egui_extras::install_image_loaders(&cc.egui_ctx); 19 | 20 | Ok(Box::::default()) 21 | }), 22 | ) 23 | } 24 | 25 | struct MyApp { 26 | name: String, 27 | age: u32, 28 | } 29 | 30 | impl Default for MyApp { 31 | fn default() -> Self { 32 | Self { 33 | name: "Arthur".to_owned(), 34 | age: 42, 35 | } 36 | } 37 | } 38 | 39 | impl eframe::App for MyApp { 40 | fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { 41 | egui::CentralPanel::default().show(ctx, |ui| { 42 | ui.spacing_mut().item_spacing = vec2(6.0, 12.0); 43 | 44 | ui.centered_and_justified(|ui| { 45 | column(ui, egui::Align::Center, |ui| { 46 | stretch_with_weight(ui, 2.0); 47 | 48 | ui.heading("My egui Application"); 49 | 50 | stretch(ui); 51 | 52 | let edit_row = Row::new(egui::Align::Min).wrapping(true); 53 | edit_row.show(ui, |ui| { 54 | let name_label = Label::new("Your name: ") 55 | .wrap_mode(egui::TextWrapMode::Extend) 56 | .ui(ui); 57 | 58 | stretch(ui); 59 | 60 | ui.text_edit_singleline(&mut self.name) 61 | .labelled_by(name_label.id); 62 | }); 63 | 64 | stretch(ui); 65 | 66 | row(ui, egui::Align::Min, |ui| { 67 | column(ui, egui::Align::Center, |ui| { 68 | ui.spacing_mut().item_spacing.y = 6.0; 69 | if ui.button("Increment").clicked() { 70 | self.age += 1; 71 | } 72 | if ui.button("Decrement").clicked() { 73 | self.age -= 1; 74 | } 75 | }); 76 | 77 | row(ui, egui::Align::Center, |ui| { 78 | egui::Slider::new(&mut self.age, 0..=120) 79 | .text("age") 80 | .top(ui); 81 | }); 82 | }); 83 | 84 | ui.label(format!("Hello '{}', age {}", self.name, self.age)); 85 | 86 | stretch(ui); 87 | 88 | ui.image(egui::include_image!("../../assets/ferris.png")); 89 | 90 | stretch_with_weight(ui, 2.0); 91 | }); 92 | }); 93 | }); 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /crates/egui_alignments/src/container/column.rs: -------------------------------------------------------------------------------- 1 | use std::f32::INFINITY; 2 | 3 | use egui::{vec2, Align, Id, InnerResponse, Layout, Margin, Ui}; 4 | 5 | use super::Container; 6 | 7 | /// A container which aligns its contents vertically. 8 | /// See module [`crate::container`] for example usage. 9 | pub struct Column { 10 | /// The id of the column. Used for memorize content size. 11 | /// If `None`, the id will be generated automatically. 12 | pub id: Option, 13 | 14 | /// The horizontal alignment of the column items. 15 | pub halign: Align, 16 | 17 | /// The padding of the column items. 18 | pub padding: Margin, 19 | 20 | /// If `true`, the items will be arranged from bottom to top. 21 | /// If `false`, the items will be arranged from top to bottom. 22 | /// Default: `false`. 23 | pub bottom_up: bool, 24 | 25 | /// The maximum width of the column. 26 | pub max_width: f32, 27 | 28 | /// The minimum width of the column. 29 | pub min_width: f32, 30 | } 31 | 32 | impl Column { 33 | #[inline] 34 | /// Create a new column with the given horizontal alignment. 35 | pub fn new(halign: Align) -> Self { 36 | Self { 37 | id: None, 38 | halign, 39 | padding: Margin::ZERO, 40 | bottom_up: false, 41 | max_width: INFINITY, 42 | min_width: 0.0, 43 | } 44 | } 45 | 46 | #[inline] 47 | /// Set the id of the column. 48 | pub fn id(mut self, id: Id) -> Self { 49 | self.id = Some(id); 50 | self 51 | } 52 | 53 | #[inline] 54 | /// Set the horizontal alignment of the column items. 55 | pub fn halign(mut self, align: Align) -> Self { 56 | self.halign = align; 57 | self 58 | } 59 | 60 | #[inline] 61 | /// Set the padding of the column items. 62 | pub fn padding(mut self, padding: impl Into) -> Self { 63 | self.padding = padding.into(); 64 | self 65 | } 66 | 67 | #[inline] 68 | /// Set the bottom-up mode of the column. 69 | pub fn bottom_up(mut self, bottom_up: bool) -> Self { 70 | self.bottom_up = bottom_up; 71 | self 72 | } 73 | 74 | #[inline] 75 | /// Set the fixed width of the column. 76 | pub fn width(mut self, width: f32) -> Self { 77 | self.min_width = width; 78 | self.max_width = width; 79 | self 80 | } 81 | 82 | #[inline] 83 | /// Set the maximum width of the column. 84 | pub fn max_width(mut self, width: f32) -> Self { 85 | self.max_width = width; 86 | self 87 | } 88 | 89 | #[inline] 90 | /// Set the minimum width of the column. 91 | pub fn min_width(mut self, width: f32) -> Self { 92 | self.min_width = width; 93 | self 94 | } 95 | } 96 | 97 | impl Default for Column { 98 | fn default() -> Self { 99 | Self::new(Align::Min) 100 | } 101 | } 102 | 103 | impl Column { 104 | /// Show the column in the given ui. 105 | pub fn show( 106 | &self, 107 | ui: &mut Ui, 108 | add_contents: impl FnOnce(&mut Ui) -> R, 109 | ) -> InnerResponse { 110 | let Self { 111 | id, 112 | halign, 113 | padding, 114 | max_width, 115 | min_width, 116 | .. 117 | } = *self; 118 | 119 | let layout = if self.bottom_up { 120 | Layout::bottom_up(halign) 121 | } else { 122 | Layout::top_down(halign) 123 | }; 124 | 125 | Container { 126 | id, 127 | layout, 128 | padding, 129 | max_size: vec2(max_width, INFINITY), 130 | min_size: vec2(min_width, 0.0), 131 | } 132 | .show(ui, add_contents) 133 | } 134 | } 135 | 136 | #[inline] 137 | /// Create a new column 138 | /// 139 | /// # Example 140 | /// ```rust 141 | /// use egui::Align; 142 | /// use egui_alignments::column; 143 | /// 144 | /// # egui::__run_test_ui(|ui| { 145 | /// column(ui, Align::Center, |ui| { 146 | /// ui.label("Top floor"); 147 | /// ui.label("Second floor"); 148 | /// ui.label("First floor"); 149 | /// }); 150 | /// # }); 151 | /// ``` 152 | pub fn column( 153 | ui: &mut Ui, 154 | halign: Align, 155 | add_contents: impl FnOnce(&mut Ui) -> R, 156 | ) -> InnerResponse { 157 | Column::new(halign).show(ui, add_contents) 158 | } 159 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # egui_alignments 2 | 3 | Simple alignment tools for [egui](https://github.com/emilk/egui) 4 | 5 | ## Example Usage 6 | 7 | ### Align a single widget 8 | 9 | ```rust 10 | use egui::{Button, Label}; 11 | use egui_alignments::Alignable; 12 | 13 | Label::new("This label will be shown at the top") 14 | .top(ui); 15 | 16 | if Button::new("This label will be shown at the center") 17 | .center(ui) 18 | .clicked() 19 | { 20 | println!("Center button clicked!"); 21 | } 22 | 23 | Label::new("This label will be shown at the bottom") 24 | .bottom(ui); 25 | ``` 26 | 27 | ### Align multiple widgets 28 | 29 | The following buttons will be shown at the center of the screen horizontally 30 | with the tip text above and click results below. 31 | 32 | ```rust 33 | use egui::{Button, Widget}; 34 | use egui_alignments::center_horizontal; 35 | 36 | let mut clicked_button = None; 37 | 38 | center_vertical(ui, |ui| { 39 | ui.label("Click a button"); 40 | 41 | ui.add_space(20.0); 42 | 43 | center_horizontal(ui, |ui| { 44 | for i in 1..=10 { 45 | if Button::new(format!("Button {}", i)) 46 | .ui(ui) 47 | .clicked() 48 | { 49 | clicked_button = Some(i); 50 | } 51 | } 52 | }); 53 | 54 | ui.add_space(20.0); 55 | 56 | if let Some(i) = clicked_button { 57 | ui.label(format!("You clicked button {}", i)); 58 | } 59 | }) 60 | ``` 61 | 62 | ### Use containers 63 | 64 | Sometimes nested calls to alignment functions like `center_horizontal`, `top_vertical`, ... 65 | may cause layout confusion due to interaction between inner and outer layouts. 66 | 67 | To prevent inner layouts from disrupting the outer ones, you may use containers for inner layouts. 68 | 69 | Containers only cares about its inner alignments and act like a simple widget in the outer layout. 70 | 71 | The following is an example usage of containers. 72 | 73 | ```rust 74 | use egui::Align; 75 | use egui_alignments::{center_horizontal, column, row}; 76 | 77 | center_horizontal(ui, |ui| { 78 | ui.image("path/to/left/image"); 79 | column(ui, Align::Center, |ui| { 80 | ui.label("top of text right to image"); 81 | row(ui, Align::Center, |ui| { 82 | ui.label("left"); 83 | ui.label("middle"); 84 | ui.label("right"); 85 | }); 86 | ui.label("bottom of text right to image"); 87 | }); 88 | }); 89 | ``` 90 | 91 | This will show an image on the left, and a column of text on the right which contains a row of three labels in the middle. 92 | 93 | ### Use stretches in containers 94 | 95 | Sometimes you may not want the elements in a container to be closely aligned. 96 | You may use `stretch` to make the elements in a container stretch to fill the available space. 97 | 98 | ```rust 99 | use egui::Align; 100 | use egui_alignments::{center_horizontal, column, row}; 101 | 102 | center_horizontal(ui, |ui| { 103 | ui.image("path/to/left/image"); 104 | column(ui, Align::Center, |ui| { 105 | ui.label("top of text right to image"); 106 | stretch(ui); 107 | row(ui, Align::Center, |ui| { 108 | ui.label("left"); 109 | stretch(ui); 110 | ui.label("middle"); 111 | stretch(ui); 112 | ui.label("right"); 113 | }); 114 | stretch(ui); 115 | ui.label("bottom of text right to image"); 116 | }); 117 | }); 118 | ``` 119 | 120 | This will make the text elements right to the image aligned as far as possible. 121 | 122 | If you want the stretches in a container to have different weights, you may use `stretch_with_weight` instead. 123 | 124 | ```rust 125 | use egui::Align; 126 | use egui_alignments::{center_horizontal, column, row}; 127 | 128 | center_horizontal(ui, |ui| { 129 | stretch_with_weight(ui, 2.0); 130 | ui.image("path/to/left/image"); 131 | stretch_with_weight(ui, 1.0); 132 | column(ui, Align::Center, |ui| { 133 | ui.label("top of text right to image"); 134 | row(ui, Align::Center, |ui| { 135 | ui.label("left"); 136 | ui.label("middle"); 137 | ui.label("right"); 138 | }); 139 | ui.label("bottom of text right to image"); 140 | }); 141 | stretch_with_weight(ui, 2.0); 142 | }); 143 | ``` 144 | 145 | This will make the space left to the image and right to all the text elements 146 | to be twice as large as the gap between the image and the text. 147 | -------------------------------------------------------------------------------- /crates/egui_alignments/src/container/row.rs: -------------------------------------------------------------------------------- 1 | use std::f32::INFINITY; 2 | 3 | use egui::{vec2, Align, Id, InnerResponse, Layout, Margin, Ui}; 4 | 5 | use super::Container; 6 | 7 | /// A container which aligns its contents horizontally. 8 | /// See module [`crate::container`] for example usage. 9 | pub struct Row { 10 | /// The id of the row. Used to memorize the size of the contents. 11 | /// If None, the id will be generated automatically. 12 | pub id: Option, 13 | 14 | /// The vertical alignment of the row items. 15 | pub valign: Align, 16 | 17 | /// The padding of the row items. 18 | pub padding: Margin, 19 | 20 | /// If the row should be right-to-left, 21 | /// set to None to follow the local preferrence 22 | pub right_to_left: Option, 23 | 24 | /// If the row should wrap its contents, instead of overflowing. 25 | pub wrapping: bool, 26 | 27 | /// The maximum height of the row. 28 | pub max_height: f32, 29 | 30 | /// The minimum height of the row. 31 | pub min_height: f32, 32 | } 33 | 34 | impl Row { 35 | #[inline] 36 | /// Create a new row with the given vertical alignment. 37 | pub fn new(valign: Align) -> Self { 38 | Self { 39 | id: None, 40 | valign, 41 | padding: Margin::ZERO, 42 | right_to_left: None, 43 | wrapping: false, 44 | max_height: INFINITY, 45 | min_height: 0.0, 46 | } 47 | } 48 | 49 | #[inline] 50 | /// Set the id of the row. 51 | pub fn id(mut self, id: Id) -> Self { 52 | self.id = Some(id); 53 | self 54 | } 55 | 56 | #[inline] 57 | /// Set the vertical alignment of the row items. 58 | pub fn valign(mut self, align: Align) -> Self { 59 | self.valign = align; 60 | self 61 | } 62 | 63 | #[inline] 64 | /// Set the padding of the row items. 65 | pub fn padding(mut self, padding: impl Into) -> Self { 66 | self.padding = padding.into(); 67 | self 68 | } 69 | 70 | #[inline] 71 | /// Set the right-to-left mode of the row. 72 | pub fn right_to_left(mut self, right_to_left: bool) -> Self { 73 | self.right_to_left = Some(right_to_left); 74 | self 75 | } 76 | 77 | #[inline] 78 | /// Set the wrapping mode of the row. 79 | pub fn wrapping(mut self, wrapping: bool) -> Self { 80 | self.wrapping = wrapping; 81 | self 82 | } 83 | 84 | #[inline] 85 | /// Set the maximum height of the row. 86 | pub fn max_height(mut self, max_height: f32) -> Self { 87 | self.max_height = max_height; 88 | self 89 | } 90 | 91 | #[inline] 92 | /// Set the minimum height of the row. 93 | pub fn min_height(mut self, min_height: f32) -> Self { 94 | self.min_height = min_height; 95 | self 96 | } 97 | } 98 | 99 | impl Default for Row { 100 | fn default() -> Self { 101 | Self::new(Align::Min) 102 | } 103 | } 104 | 105 | impl Row { 106 | /// Show the row in the given ui. 107 | pub fn show( 108 | &self, 109 | ui: &mut Ui, 110 | add_contents: impl FnOnce(&mut Ui) -> R, 111 | ) -> InnerResponse { 112 | let Self { 113 | id, 114 | valign, 115 | padding, 116 | max_height, 117 | min_height, 118 | .. 119 | } = *self; 120 | 121 | let right_to_left = self 122 | .right_to_left 123 | .unwrap_or(ui.layout().prefer_right_to_left()); 124 | 125 | // If wrapping is enabled, Align::Center or Align::Max will cause the row to take up 126 | // the full height of the ui. 127 | let valign = if self.wrapping { Align::Min } else { valign }; 128 | let layout = if right_to_left { 129 | Layout::right_to_left(valign) 130 | } else { 131 | Layout::left_to_right(valign) 132 | } 133 | .with_main_wrap(self.wrapping); 134 | 135 | Container { 136 | id, 137 | layout, 138 | padding, 139 | max_size: vec2(INFINITY, max_height), 140 | min_size: vec2(0.0, min_height), 141 | } 142 | .show(ui, add_contents) 143 | } 144 | } 145 | 146 | #[inline] 147 | /// Create a new row 148 | /// 149 | /// # Example 150 | /// ```rust 151 | /// use egui::Align; 152 | /// use egui_alignments::row; 153 | /// 154 | /// # egui::__run_test_ui(|ui| { 155 | /// row(ui, Align::Center, |ui| { 156 | /// ui.label("Left side"); 157 | /// ui.label("Middle"); 158 | /// ui.label("Right side"); 159 | /// }); 160 | /// # }); 161 | /// ``` 162 | pub fn row(ui: &mut Ui, valign: Align, add_contents: impl FnOnce(&mut Ui)) -> InnerResponse<()> { 163 | Row::new(valign).show(ui, add_contents) 164 | } 165 | -------------------------------------------------------------------------------- /crates/egui_alignments/src/lib.rs: -------------------------------------------------------------------------------- 1 | //! # egui_alignments 2 | //! 3 | //! Simple alignment tools for egui 4 | //! 5 | //! ## Example Usage 6 | //! 7 | //! ### Align a single widget 8 | //! 9 | //! ```rust 10 | //! use egui::{Button, Label}; 11 | //! use egui_alignments::Alignable; 12 | //! 13 | //! # egui::__run_test_ui(|ui| { 14 | //! Label::new("This label will be shown at the top") 15 | //! .top(ui); 16 | //! 17 | //! if Button::new("This label will be shown at the center") 18 | //! .center(ui) 19 | //! .clicked() 20 | //! { 21 | //! println!("Center button clicked!"); 22 | //! } 23 | //! 24 | //! Label::new("This label will be shown at the bottom") 25 | //! .bottom(ui); 26 | //! # }); 27 | //! ``` 28 | //! 29 | //! ### Align multiple widgets 30 | //! 31 | //! The following buttons will be shown at the center of the screen horizontally 32 | //! with the tip text above and click results below. 33 | //! 34 | //! ```rust 35 | //! use egui::{Button, Widget}; 36 | //! use egui_alignments::{center_horizontal, center_vertical}; 37 | //! 38 | //! # egui::__run_test_ui(|ui| { 39 | //! let mut clicked_button = None; 40 | //! 41 | //! center_vertical(ui, |ui| { 42 | //! ui.label("Click a button"); 43 | //! 44 | //! ui.add_space(20.0); 45 | //! 46 | //! center_horizontal(ui, |ui| { 47 | //! for i in 1..=10 { 48 | //! if Button::new(format!("Button {}", i)) 49 | //! .ui(ui) 50 | //! .clicked() 51 | //! { 52 | //! clicked_button = Some(i); 53 | //! } 54 | //! } 55 | //! }); 56 | //! 57 | //! ui.add_space(20.0); 58 | //! 59 | //! if let Some(i) = clicked_button { 60 | //! ui.label(format!("You clicked button {}", i)); 61 | //! }; 62 | //! }); 63 | //! # }); 64 | //! ``` 65 | //! 66 | //! ### Use containers 67 | //! 68 | //! Sometimes nested calls to alignment functions like `center_horizontal`, `top_vertical`, ... 69 | //! may cause layout confusion due to interaction between inner and outer layouts. 70 | //! 71 | //! To prevent inner layouts from disrupting the outer ones, you may use containers for inner layouts 72 | //! 73 | //! Containers only cares about its inner alignments and act like a simple widget in the outer layout 74 | //! 75 | //! The following is an example usage of containers 76 | //! 77 | //! ```rust 78 | //! use egui::Align; 79 | //! use egui_alignments::{center_horizontal, column, row}; 80 | //! 81 | //! # egui::__run_test_ui(|ui| { 82 | //! center_horizontal(ui, |ui| { 83 | //! ui.image("path/to/left/image"); 84 | //! column(ui, Align::Center, |ui| { 85 | //! ui.label("top of right text"); 86 | //! row(ui, Align::Center, |ui| { 87 | //! ui.label("left"); 88 | //! ui.label("middle"); 89 | //! ui.label("right"); 90 | //! }); 91 | //! ui.label("bottom of right text"); 92 | //! }); 93 | //! }); 94 | //! # }); 95 | //! ``` 96 | //! 97 | //! This will show an image on the left, and a column of text on the right which contains a row of three labels in the middle. 98 | //! 99 | //! ### Use stretches 100 | //! 101 | //! Sometimes you may want to make a widget stretch to fill the remaining space 102 | //! between widgets instead of besides them in a container. 103 | //! 104 | //! Use `stretch` to achieve this. 105 | //! 106 | //! ```rust 107 | //! use egui::Align; 108 | //! use egui_alignments::{column, stretch}; 109 | //! 110 | //! # egui::__run_test_ui(|ui| { 111 | //! column(ui, Align::Center, |ui| { 112 | //! ui.label("Top"); 113 | //! stretch(ui); 114 | //! ui.label("Bottom"); 115 | //! }); 116 | //! # }); 117 | //! ``` 118 | //! 119 | //! If you want to have stretches with different sizes, you may use `stretch_with_weight`. 120 | //! 121 | //! ```rust 122 | //! use egui::Align; 123 | //! use egui_alignments::{column, stretch_with_weight}; 124 | //! 125 | //! # egui::__run_test_ui(|ui| { 126 | //! column(ui, Align::Center, |ui| { 127 | //! ui.label("100% height"); 128 | //! stretch_with_weight(ui, 1.0); 129 | //! ui.label("75% height"); 130 | //! stretch_with_weight(ui, 3.0); 131 | //! ui.label("0% height"); 132 | //! }); 133 | //! # }); 134 | //! ``` 135 | 136 | pub mod alignable; 137 | pub mod aligner; 138 | pub mod container; 139 | 140 | pub use alignable::*; 141 | pub use aligner::*; 142 | pub use container::*; 143 | 144 | use egui::{Align, Direction, Layout, Rect, Vec2}; 145 | 146 | // resize layout rect without moving the inner content. 147 | // this is useful for layouts that contain growable widgets like `ScrollArea`. 148 | pub(crate) fn resize_layout_rect(rect: Rect, size: Vec2, layout: &Layout) -> Rect { 149 | let mut new_rect = rect; 150 | let x_expand = size.x - rect.width(); 151 | let y_expand = size.y - rect.height(); 152 | 153 | let (halign, valign) = match layout.main_dir() { 154 | Direction::LeftToRight => (Align::Min, layout.cross_align), 155 | Direction::RightToLeft => (Align::Max, layout.cross_align), 156 | Direction::TopDown => (layout.cross_align, Align::Min), 157 | Direction::BottomUp => (layout.cross_align, Align::Max), 158 | }; 159 | 160 | match halign { 161 | Align::Min => { 162 | new_rect.max.x += x_expand; 163 | } 164 | Align::Center => { 165 | // if the layout always allocate the full width even if it doesn't need that much 166 | // then we should not expand the rect 167 | if !layout.horizontal_justify() && !layout.is_vertical() { 168 | new_rect.min.x -= x_expand / 2.0; 169 | new_rect.max.x += x_expand / 2.0; 170 | } 171 | } 172 | Align::Max => { 173 | new_rect.min.x -= x_expand; 174 | } 175 | }; 176 | 177 | match valign { 178 | Align::Min => { 179 | new_rect.max.y += y_expand; 180 | } 181 | Align::Center => { 182 | // if the layout always allocate the full height even if it doesn't need that much 183 | // then we should not expand the rect 184 | if !layout.vertical_justify() && !layout.is_horizontal() { 185 | new_rect.min.y -= y_expand / 2.0; 186 | new_rect.max.y += y_expand / 2.0; 187 | } 188 | } 189 | Align::Max => { 190 | new_rect.min.y -= y_expand; 191 | } 192 | } 193 | 194 | new_rect 195 | } 196 | -------------------------------------------------------------------------------- /crates/egui_alignments/src/container.rs: -------------------------------------------------------------------------------- 1 | //! Simple layout containers 2 | //! 3 | //! # Example 4 | //! ``` 5 | //! use egui::Align; 6 | //! use egui_alignments::{column, row}; 7 | //! 8 | //! # egui::__run_test_ui(|ui| { 9 | //! column(ui, Align::Center, |ui| { 10 | //! ui.label("top"); 11 | //! row(ui, Align::Center, |ui| { 12 | //! ui.label("left"); 13 | //! ui.label("center"); 14 | //! ui.label("right"); 15 | //! }); 16 | //! ui.label("bottom"); 17 | //! }); 18 | //! # }); 19 | //! ``` 20 | 21 | pub mod column; 22 | pub mod row; 23 | 24 | pub use column::*; 25 | pub use row::*; 26 | 27 | use egui::{Id, InnerResponse, Layout, Sense, Ui, UiBuilder, Vec2}; 28 | 29 | use crate::resize_layout_rect; 30 | 31 | pub struct Container { 32 | pub id: Option, 33 | pub layout: Layout, 34 | pub padding: egui::Margin, 35 | pub max_size: Vec2, 36 | pub min_size: Vec2, 37 | } 38 | 39 | impl Default for Container { 40 | fn default() -> Self { 41 | Self { 42 | id: None, 43 | layout: Layout::default(), 44 | padding: egui::Margin::ZERO, 45 | max_size: Vec2::INFINITY, 46 | min_size: Vec2::ZERO, 47 | } 48 | } 49 | } 50 | 51 | impl Container { 52 | #[inline] 53 | pub fn new(layout: Layout) -> Self { 54 | Self { 55 | layout, 56 | ..Default::default() 57 | } 58 | } 59 | 60 | #[inline] 61 | pub fn id(mut self, id: Id) -> Self { 62 | self.id = Some(id); 63 | self 64 | } 65 | 66 | #[inline] 67 | pub fn layout(mut self, layout: Layout) -> Self { 68 | self.layout = layout; 69 | self 70 | } 71 | 72 | #[inline] 73 | pub fn padding(mut self, padding: egui::Margin) -> Self { 74 | self.padding = padding; 75 | self 76 | } 77 | 78 | #[inline] 79 | pub fn max_size(mut self, max_size: Vec2) -> Self { 80 | self.max_size = max_size; 81 | self 82 | } 83 | 84 | #[inline] 85 | pub fn min_size(mut self, min_size: Vec2) -> Self { 86 | self.min_size = min_size; 87 | self 88 | } 89 | 90 | pub fn show( 91 | &self, 92 | ui: &mut Ui, 93 | add_contents: impl FnOnce(&mut Ui) -> R, 94 | ) -> InnerResponse { 95 | // used to memorize content size 96 | let id = self.id.unwrap_or_else(|| { 97 | let id = ui.next_auto_id(); 98 | ui.skip_ahead_auto_ids(1); 99 | id 100 | }); 101 | 102 | // try to get content size from cache 103 | // if not cached, start a sizing pass 104 | let mut sizing_pass = false; 105 | // make sure available_rect shrinks when screen rect is shrinking 106 | let available_rect = ui 107 | .available_rect_before_wrap() 108 | .intersect(ui.ctx().content_rect()); 109 | let desired_size = ui 110 | .ctx() 111 | .data_mut(|data| data.get_temp(id)) 112 | .unwrap_or_else(|| { 113 | sizing_pass = true; 114 | // the current pass is a sizing pass, request a rendering pass 115 | ui.ctx().request_discard("new Container"); 116 | available_rect.size() 117 | }); 118 | 119 | // get the expected content rect 120 | let (_, expected_rect) = ui 121 | .new_child(UiBuilder::new()) 122 | .allocate_space(desired_size.max(self.min_size).min(self.max_size)); 123 | let content_rect = 124 | resize_layout_rect(expected_rect, available_rect.size(), &self.layout) - self.padding; 125 | 126 | // create child ui 127 | let mut content_ui = ui.new_child({ 128 | let builder = UiBuilder::new().max_rect(content_rect); 129 | 130 | if sizing_pass { 131 | builder 132 | .layout( 133 | // in sizing pass, keep the layout size minimum 134 | self.layout 135 | .with_cross_align(egui::Align::Min) 136 | .with_cross_justify(false), 137 | ) 138 | .sizing_pass() 139 | .invisible() 140 | } else { 141 | builder.layout(self.layout) 142 | } 143 | }); 144 | 145 | // prepare data for stretch 146 | let stretch_space = if self.layout.is_horizontal() { 147 | available_rect.width() - desired_size.x 148 | } else { 149 | available_rect.height() - desired_size.y 150 | }; 151 | let last_weights = prepare_stretch(&mut content_ui, stretch_space); 152 | 153 | // add contents and calculate space to be allocated 154 | let inner = add_contents(&mut content_ui); 155 | let new_rect = content_ui.min_rect() + self.padding; 156 | // allocate space and get response 157 | // when already arranged, even if the content has grown, we allocate the expected size 158 | // if we allocate the whole new rect, it's actually in the wrong place and could disrupt the layout 159 | let response = ui.allocate_rect( 160 | if sizing_pass { new_rect } else { expected_rect }, 161 | Sense::hover(), 162 | ); 163 | 164 | // finish stretch 165 | finish_stretch(&mut content_ui, last_weights); 166 | 167 | // cache content size 168 | if sizing_pass || new_rect.size() != desired_size { 169 | ui.ctx() 170 | .data_mut(|data| data.insert_temp(id, new_rect.size())); 171 | } 172 | 173 | InnerResponse { inner, response } 174 | } 175 | } 176 | 177 | const STRETCH_SPACE_ID_SALT: &'static str = "egui_alignments::container::STRETCH_SPACE_ID_SALT"; 178 | const STRETCH_WEIGHT_ID_SALT: &'static str = "egui_alignments::container::STRETCH_WEIGHT_ID_SALT"; 179 | const STRETCH_WRAPPED_ID_SALT: &'static str = "egui_alignments::container::STRETCH_WRAPPED_ID_SALT"; 180 | 181 | pub(crate) fn register_stretch(ui: &mut Ui, weight: f32) -> Option { 182 | if weight <= 0.0 { 183 | return None; 184 | } 185 | 186 | let space_id = ui.unique_id().with(STRETCH_SPACE_ID_SALT); 187 | let weight_id = ui.unique_id().with(STRETCH_WEIGHT_ID_SALT); 188 | 189 | let spaces: Vec = ui.data(|data| data.get_temp(space_id))?; 190 | let mut weights: Vec = ui.data(|data| data.get_temp(weight_id))?; 191 | 192 | // calculate index based on the number of registered stretches 193 | let index = weights.len(); 194 | 195 | // register weight of self 196 | weights.push(weight); 197 | ui.data_mut(|data| { 198 | data.insert_temp(weight_id, weights); 199 | }); 200 | 201 | Some(*spaces.get(index)?) 202 | } 203 | 204 | fn prepare_stretch(ui: &mut Ui, available_space: f32) -> Option> { 205 | let space_id = ui.unique_id().with(STRETCH_SPACE_ID_SALT); 206 | let weight_id = ui.unique_id().with(STRETCH_WEIGHT_ID_SALT); 207 | let wrapped_id = ui.unique_id().with(STRETCH_WRAPPED_ID_SALT); 208 | 209 | let (Some(last_spaces), Some(last_weights)) = ui.data(|data| { 210 | ( 211 | data.get_temp::>(space_id), 212 | data.get_temp::>(weight_id), 213 | ) 214 | }) else { 215 | ui.data_mut(|data| { 216 | data.insert_temp(space_id, Vec::::new()); 217 | data.insert_temp(weight_id, Vec::::new()); 218 | }); 219 | return None; 220 | }; 221 | let mut available_space = (available_space + last_spaces.iter().sum::()).max(0.0); 222 | let wrapped = ui.data(|data| data.get_temp::(wrapped_id).unwrap_or(false)); 223 | if wrapped { 224 | // if the layout is wrapped, we consider that there is no space left 225 | available_space = 0.0; 226 | } 227 | let last_weights_sum: f32 = last_weights.iter().sum(); 228 | 229 | // calculate sizes 230 | let mut spaces = Vec::with_capacity(last_weights.len()); 231 | for weight in last_weights.iter() { 232 | let space = available_space * weight / last_weights_sum; 233 | spaces.push(space); 234 | } 235 | 236 | // prepare data for stretch 237 | ui.data_mut(|data| { 238 | data.insert_temp(space_id, spaces); 239 | data.insert_temp(weight_id, Vec::::new()); 240 | }); 241 | 242 | Some(last_weights) 243 | } 244 | 245 | fn finish_stretch(ui: &mut Ui, last_weights: Option>) { 246 | let weight_id = ui.unique_id().with(STRETCH_WEIGHT_ID_SALT); 247 | let wrapped_id = ui.unique_id().with(STRETCH_WRAPPED_ID_SALT); 248 | 249 | let Some(last_weights) = last_weights else { 250 | return; 251 | }; 252 | 253 | // release data and check if the weights changed 254 | let Some(new_weights) = ui.data(|r| r.get_temp::>(weight_id)) else { 255 | return; 256 | }; 257 | 258 | // check if the layout is wrapped 259 | let mut wrapped = false; 260 | if ui.layout().main_wrap { 261 | wrapped = if ui.layout().is_horizontal() { 262 | ui.cursor().top() > ui.min_rect().top() 263 | } else { 264 | ui.cursor().left() > ui.min_rect().left() 265 | }; 266 | } 267 | ui.data_mut(|data| { 268 | data.insert_temp(wrapped_id, wrapped); 269 | }); 270 | 271 | // request another pass if the weights changed 272 | if last_weights != new_weights { 273 | ui.ctx().request_discard("container stretch changed"); 274 | } 275 | } 276 | 277 | /// Stretch the available space with the given weight. Only available in a container. 278 | /// 279 | /// # Example 280 | /// ```rust 281 | /// use egui::Align; 282 | /// use egui_alignments::{column, stretch_with_weight}; 283 | /// 284 | /// # egui::__run_test_ui(|ui| { 285 | /// column(ui, Align::Center, |ui| { 286 | /// ui.label("100% height"); 287 | /// stretch_with_weight(ui, 1.0); 288 | /// ui.label("75% height"); 289 | /// stretch_with_weight(ui, 3.0); 290 | /// ui.label("0% height"); 291 | /// }); 292 | /// # }); 293 | /// ``` 294 | pub fn stretch_with_weight(ui: &mut Ui, weight: f32) -> f32 { 295 | let space = register_stretch(ui, weight); 296 | 297 | if let Some(space) = space { 298 | if space > 0.0 { 299 | ui.add_space(space); 300 | } 301 | space 302 | } else { 303 | 0.0 304 | } 305 | } 306 | 307 | #[inline] 308 | /// Stretch the available space. Only available in a container. 309 | /// If there are multiple stretches in a container, they will share the available space in average. 310 | /// If you want to have stretches with different sizes in a container, use [`stretch_with_weight`] instead. 311 | /// 312 | /// # Example 313 | /// ```rust 314 | /// use egui::Align; 315 | /// use egui_alignments::{column, stretch}; 316 | /// 317 | /// # egui::__run_test_ui(|ui| { 318 | /// column(ui, Align::Center, |ui| { 319 | /// ui.label("Top"); 320 | /// stretch(ui); 321 | /// ui.label("Bottom"); 322 | /// }); 323 | /// # }); 324 | /// ``` 325 | 326 | pub fn stretch(ui: &mut Ui) -> f32 { 327 | stretch_with_weight(ui, 1.0) 328 | } 329 | -------------------------------------------------------------------------------- /crates/egui_alignments/src/aligner.rs: -------------------------------------------------------------------------------- 1 | use egui::{ 2 | Align, Align2, Id, InnerResponse, Layout, Margin, Pos2, Rect, Sense, Ui, UiBuilder, Vec2, 3 | }; 4 | 5 | use crate::resize_layout_rect; 6 | 7 | /// Represents an alignment strategy. 8 | /// You can directly use `egui::Align2` or closure `FnOnce(egui::Vec2, egui::Rect) -> egui::Rect` 9 | /// to align the contents. 10 | /// Or you can implement your own alignment. 11 | pub trait Alignment { 12 | fn align(self, item_size: Vec2, bounds: Rect) -> Rect; 13 | } 14 | 15 | impl Alignment for egui::Align2 { 16 | fn align(self, item_size: Vec2, bounds: Rect) -> Rect { 17 | self.align_size_within_rect(item_size, bounds) 18 | } 19 | } 20 | 21 | impl Alignment for T 22 | where 23 | T: FnOnce(Vec2, Rect) -> Rect, 24 | { 25 | fn align(self, item_size: Vec2, bounds: Rect) -> Rect { 26 | self(item_size, bounds) 27 | } 28 | } 29 | 30 | /// Determines how [`Aligner`] allocate space for the aligned contents. 31 | #[derive(Copy, Clone, Debug, PartialEq, Eq)] 32 | pub enum AllocateType { 33 | /// Allocate no space. 34 | None, 35 | 36 | /// Allocate only the space allocated by the contents 37 | Content, 38 | 39 | /// Allocate only the height allocated by the contents 40 | /// and the whole width specified to align the contents. 41 | ContentRow, 42 | 43 | /// Allocate only the width allocated by the contents 44 | /// and the whole height specified to align the contents. 45 | ContentColumn, 46 | 47 | /// Allocate the whole bounds specified to align the contents. 48 | Bounds, 49 | } 50 | 51 | /// The bounds in which its contents will be aligned. 52 | #[derive(Copy, Clone, Debug, PartialEq)] 53 | pub enum Bounds { 54 | /// Align in Ui's next widget position with the given size. 55 | AvailableRect(Vec2), 56 | 57 | /// Align in the whole Ui, ignoring the specified margin. 58 | MaxRect(Margin), 59 | } 60 | 61 | impl Bounds { 62 | #[inline] 63 | /// Align in all the available space. 64 | pub fn available_rect() -> Self { 65 | Bounds::AvailableRect(Vec2::INFINITY) 66 | } 67 | 68 | #[inline] 69 | /// Align in the whole Ui. 70 | pub fn max_rect() -> Self { 71 | Bounds::MaxRect(0.0.into()) 72 | } 73 | } 74 | 75 | /// A container which aligns its contents 76 | /// within the given alignment and bounds. 77 | /// 78 | /// # Example 79 | /// ``` 80 | /// use egui_alignments::Aligner; 81 | /// 82 | /// # egui::__run_test_ui(|ui| { 83 | /// Aligner::center() 84 | /// .show(ui, |ui| { 85 | /// ui.label("This label will be shown at the center"); 86 | /// }); 87 | /// # }); 88 | /// ``` 89 | pub struct Aligner { 90 | /// Used to memorize content size. 91 | /// If not set, the id will be generated automatically. 92 | pub id: Option, 93 | 94 | /// The alignment. 95 | /// Could be a `egui::Align2`, a closure or a custom [`Alignment`]. 96 | pub align: T, 97 | 98 | /// The bounds in which its contents will be aligned. 99 | /// See [`Bounds`] 100 | pub bounds: Bounds, 101 | 102 | /// See [`AllocateType`] 103 | pub allocate_type: AllocateType, 104 | 105 | /// The layout of the contents. 106 | /// If None, use the layout of the current ui. 107 | pub layout: Option, 108 | } 109 | 110 | impl Default for Aligner { 111 | fn default() -> Self { 112 | Self { 113 | id: None, 114 | align: egui::Align2::LEFT_TOP, 115 | bounds: Bounds::available_rect(), 116 | allocate_type: AllocateType::Content, 117 | layout: None, 118 | } 119 | } 120 | } 121 | 122 | impl Aligner { 123 | #[inline] 124 | /// Create an `Alignable` 125 | /// which aligns its contents to the center of all the available space. 126 | pub fn center() -> Self { 127 | Self::from_align(Align2::CENTER_CENTER) 128 | } 129 | 130 | #[inline] 131 | /// Create an `Alignable` 132 | /// which aligns its contents to the center-bottom of all the available space. 133 | pub fn center_top() -> Self { 134 | Self::from_align(Align2::CENTER_TOP) 135 | } 136 | 137 | #[inline] 138 | /// Create an `Alignable` 139 | /// which aligns its contents to the center-bottom of all the available space. 140 | pub fn center_bottom() -> Self { 141 | Self::from_align(Align2::CENTER_BOTTOM) 142 | } 143 | 144 | #[inline] 145 | /// Create an `Alignable` 146 | /// which aligns its contents to the left of the available space. 147 | pub fn left() -> Self { 148 | Self::from_align(Align2::LEFT_CENTER) 149 | } 150 | 151 | #[inline] 152 | /// Create an `Alignable` 153 | /// which aligns its contents to the left-top of all the available space. 154 | pub fn left_top() -> Self { 155 | Self::from_align(Align2::LEFT_TOP) 156 | } 157 | 158 | #[inline] 159 | /// Create an `Alignable` 160 | /// which aligns its contents to the left-bottom of all the available space. 161 | pub fn left_bottom() -> Self { 162 | Self::from_align(Align2::LEFT_BOTTOM) 163 | } 164 | 165 | #[inline] 166 | /// Create an `Alignable` 167 | /// which aligns its contents to the right of the available space. 168 | pub fn right() -> Self { 169 | Self::from_align(Align2::RIGHT_CENTER) 170 | } 171 | 172 | #[inline] 173 | /// Create an `Alignable` 174 | /// which aligns its contents to the right-top of all the available space. 175 | pub fn right_top() -> Self { 176 | Self::from_align(Align2::RIGHT_TOP) 177 | } 178 | 179 | #[inline] 180 | /// Create an `Alignable` 181 | /// which aligns its contents to the right-bottom of all the available space. 182 | pub fn right_bottom() -> Self { 183 | Self::from_align(Align2::RIGHT_BOTTOM) 184 | } 185 | } 186 | 187 | impl Aligner { 188 | /// Create an `Alignable` 189 | /// which aligns its contents using the given alignment. 190 | pub fn from_align(align: T) -> Self { 191 | Self { 192 | id: None, 193 | align, 194 | bounds: Bounds::AvailableRect(Vec2::INFINITY), 195 | allocate_type: AllocateType::Content, 196 | layout: None, 197 | } 198 | } 199 | } 200 | 201 | impl Aligner { 202 | #[inline] 203 | /// Set the id of the aligned widget. 204 | /// The id is used to memorize the content size. 205 | /// If not set, the id will be generated automatically. 206 | pub fn id(mut self, id: Id) -> Self { 207 | self.id = Some(id); 208 | self 209 | } 210 | 211 | #[inline] 212 | /// Set the alignment. 213 | /// The alignment is used to align the contents. 214 | /// Could be a `egui::Align2`, a closure or a custom [`Alignment`]. 215 | pub fn align(mut self, align: T) -> Self { 216 | self.align = align; 217 | self 218 | } 219 | 220 | #[inline] 221 | /// Set the space in which its contents will be aligned. 222 | pub fn bounds(mut self, bounds: Bounds) -> Self { 223 | self.bounds = bounds; 224 | self 225 | } 226 | 227 | #[inline] 228 | /// See [`AllocateType`] 229 | pub fn allocate_type(mut self, allocate_type: AllocateType) -> Self { 230 | self.allocate_type = allocate_type; 231 | self 232 | } 233 | 234 | #[inline] 235 | /// Set the layout of the contents. 236 | /// If not set, use the layout of the current ui. 237 | pub fn layout(mut self, layout: Layout) -> Self { 238 | self.layout = Some(layout); 239 | self 240 | } 241 | } 242 | 243 | impl Aligner { 244 | /// Show the aligned contents. 245 | pub fn show( 246 | self, 247 | ui: &mut Ui, 248 | add_contents: impl FnOnce(&mut egui::Ui) -> R, 249 | ) -> InnerResponse { 250 | let id = self.id.unwrap_or_else(|| { 251 | let id = ui.next_auto_id(); 252 | // hold the id 253 | ui.skip_ahead_auto_ids(1); 254 | id 255 | }); 256 | 257 | let layout = self.layout.unwrap_or(*ui.layout()); 258 | 259 | // calculate the bounds 260 | let bounds = match self.bounds { 261 | Bounds::AvailableRect(size) => { 262 | ui.new_child(UiBuilder::new()) 263 | .allocate_space(size.min(ui.available_size())) 264 | .1 265 | } 266 | Bounds::MaxRect(margin) => ui.max_rect() - margin, 267 | }; 268 | 269 | // try to read content size from context memory 270 | // if not found, use the whole available rect to draw the contents 271 | let mut memorized = true; 272 | let content_size = ui.ctx().data(|r| r.get_temp(id)).unwrap_or_else(|| { 273 | memorized = false; 274 | bounds.size() 275 | }); 276 | 277 | // get the expected rect 278 | let expected_rect = self.align.align(content_size, bounds); 279 | // expand to allow content grow 280 | let content_rect = resize_layout_rect(expected_rect, bounds.size(), &layout); 281 | 282 | // create child ui 283 | let mut child_ui = ui.new_child({ 284 | let builder = UiBuilder::new().max_rect(content_rect).layout(layout); 285 | 286 | if memorized { 287 | builder 288 | } else { 289 | // no size memorized, set the pass to sizing pass 290 | ui.ctx().request_discard("new Aligner"); 291 | builder.sizing_pass().invisible() 292 | } 293 | }); 294 | 295 | // paint the contents 296 | let inner = add_contents(&mut child_ui); 297 | 298 | // allocate space and get response 299 | // when already arranged, even if the content has grown, we allocate the expected size 300 | // if we allocate the whole new rect, it's actually in the wrong place and could disrupt the layout 301 | let content_rect = if memorized { 302 | expected_rect 303 | } else { 304 | content_rect 305 | }; 306 | let response = ui.allocate_rect( 307 | match self.allocate_type { 308 | AllocateType::None => Rect::from_min_size(ui.next_widget_position(), Vec2::ZERO), 309 | AllocateType::Content => content_rect, 310 | AllocateType::ContentRow => { 311 | let min = Pos2::new(bounds.left(), content_rect.top()); 312 | let max = Pos2::new(bounds.right(), content_rect.bottom()); 313 | Rect::from_min_max(min, max) 314 | } 315 | AllocateType::ContentColumn => { 316 | let min = Pos2::new(content_rect.left(), bounds.top()); 317 | let max = Pos2::new(content_rect.right(), bounds.bottom()); 318 | Rect::from_min_max(min, max) 319 | } 320 | AllocateType::Bounds => bounds, 321 | }, 322 | Sense::hover(), 323 | ); 324 | 325 | // if the content changed size or not memorized, update the memorized size 326 | let new_size = child_ui.min_size(); 327 | if new_size != content_size || !memorized { 328 | ui.ctx().data_mut(|w| w.insert_temp(id, new_size)); 329 | } 330 | 331 | InnerResponse { inner, response } 332 | } 333 | 334 | #[inline] 335 | /// Show the contents horizontally. 336 | pub fn show_horizontal( 337 | self, 338 | ui: &mut Ui, 339 | add_contents: impl FnOnce(&mut Ui) -> R, 340 | ) -> InnerResponse { 341 | let layout = if ui.layout().prefer_right_to_left() { 342 | Layout::right_to_left(Align::Center) 343 | } else { 344 | Layout::left_to_right(Align::Center) 345 | } 346 | .with_main_wrap(false); 347 | 348 | self.layout(layout).show(ui, add_contents) 349 | } 350 | 351 | #[inline] 352 | /// Show the contents horizontally and wrap them when necessary. 353 | pub fn show_horizontal_wrapped( 354 | self, 355 | ui: &mut Ui, 356 | add_contents: impl FnOnce(&mut Ui) -> R, 357 | ) -> InnerResponse { 358 | let layout = if ui.layout().prefer_right_to_left() { 359 | Layout::right_to_left(Align::Center) 360 | } else { 361 | Layout::left_to_right(Align::Center) 362 | } 363 | .with_main_wrap(true); 364 | 365 | self.layout(layout).show(ui, add_contents) 366 | } 367 | 368 | #[inline] 369 | /// Show the contents vertically. 370 | pub fn show_vertical( 371 | self, 372 | ui: &mut Ui, 373 | add_contents: impl FnOnce(&mut Ui) -> R, 374 | ) -> InnerResponse { 375 | let layout = Layout::top_down(Align::Center); 376 | 377 | self.layout(layout).show(ui, add_contents) 378 | } 379 | } 380 | 381 | #[inline] 382 | /// Center the contents horizontally. 383 | pub fn center_horizontal( 384 | ui: &mut Ui, 385 | add_contents: impl FnOnce(&mut Ui) -> R, 386 | ) -> InnerResponse { 387 | let layout = if ui.layout().prefer_right_to_left() { 388 | Layout::right_to_left(Align::Center) 389 | } else { 390 | Layout::left_to_right(Align::Center) 391 | }; 392 | 393 | Aligner::center().layout(layout).show(ui, add_contents) 394 | } 395 | 396 | #[inline] 397 | /// Center the contents horizontally and wrap them when necessary. 398 | pub fn center_horizontal_wrapped( 399 | ui: &mut Ui, 400 | add_contents: impl FnOnce(&mut Ui) -> R, 401 | ) -> InnerResponse { 402 | let layout = if ui.layout().prefer_right_to_left() { 403 | Layout::right_to_left(Align::Center) 404 | } else { 405 | Layout::left_to_right(Align::Center) 406 | } 407 | .with_main_wrap(true); 408 | 409 | Aligner::center().layout(layout).show(ui, add_contents) 410 | } 411 | 412 | #[inline] 413 | /// Center the contents vertically. 414 | pub fn center_vertical( 415 | ui: &mut Ui, 416 | add_contents: impl FnOnce(&mut Ui) -> R, 417 | ) -> InnerResponse { 418 | Aligner::center() 419 | .layout(Layout::top_down(Align::Center)) 420 | .show(ui, add_contents) 421 | } 422 | 423 | #[inline] 424 | /// Align the contents to the top horizontally. 425 | pub fn top_horizontal(ui: &mut Ui, add_contents: impl FnOnce(&mut Ui) -> R) -> InnerResponse { 426 | let layout = if ui.layout().prefer_right_to_left() { 427 | Layout::right_to_left(Align::TOP) 428 | } else { 429 | Layout::left_to_right(Align::TOP) 430 | }; 431 | 432 | Aligner::from_align(egui::Align2::CENTER_TOP) 433 | .layout(layout) 434 | .show(ui, add_contents) 435 | } 436 | 437 | #[inline] 438 | /// Align the contents to the top horizontally and wrap them when necessary. 439 | pub fn top_horizontal_wrapped( 440 | ui: &mut Ui, 441 | add_contents: impl FnOnce(&mut Ui) -> R, 442 | ) -> InnerResponse { 443 | let layout = if ui.layout().prefer_right_to_left() { 444 | Layout::right_to_left(Align::TOP) 445 | } else { 446 | Layout::left_to_right(Align::TOP) 447 | } 448 | .with_main_wrap(true); 449 | 450 | Aligner::from_align(Align2::CENTER_TOP) 451 | .layout(layout) 452 | .show(ui, add_contents) 453 | } 454 | 455 | #[inline] 456 | /// Align the contents to the top vertically. 457 | pub fn top_vertical(ui: &mut Ui, add_contents: impl FnOnce(&mut Ui) -> R) -> InnerResponse { 458 | ui.vertical_centered(add_contents) 459 | } 460 | 461 | #[inline] 462 | /// Align the contents to the bottom horizontally. 463 | pub fn bottom_horizontal( 464 | ui: &mut Ui, 465 | add_contents: impl FnOnce(&mut Ui) -> R, 466 | ) -> InnerResponse { 467 | let layout = if ui.layout().prefer_right_to_left() { 468 | Layout::right_to_left(Align::BOTTOM) 469 | } else { 470 | Layout::left_to_right(Align::BOTTOM) 471 | }; 472 | 473 | Aligner::from_align(egui::Align2::CENTER_BOTTOM) 474 | .layout(layout) 475 | .show(ui, add_contents) 476 | } 477 | 478 | #[inline] 479 | /// Align the contents to the bottom horizontally and wrap them when necessary. 480 | pub fn bottom_horizontal_wrapped( 481 | ui: &mut Ui, 482 | add_contents: impl FnOnce(&mut Ui) -> R, 483 | ) -> InnerResponse { 484 | let layout = if ui.layout().prefer_right_to_left() { 485 | Layout::right_to_left(Align::BOTTOM) 486 | } else { 487 | Layout::left_to_right(Align::BOTTOM) 488 | } 489 | .with_main_wrap(true); 490 | 491 | Aligner::from_align(egui::Align2::CENTER_BOTTOM) 492 | .layout(layout) 493 | .show(ui, add_contents) 494 | } 495 | 496 | #[inline] 497 | /// Align the contents to the bottom vertically. 498 | pub fn bottom_vertical( 499 | ui: &mut Ui, 500 | add_contents: impl FnOnce(&mut Ui) -> R, 501 | ) -> InnerResponse { 502 | ui.with_layout(Layout::bottom_up(Align::Center), add_contents) 503 | } 504 | 505 | #[inline] 506 | /// Align the contents to the left horizontally. 507 | pub fn left_horizontal( 508 | ui: &mut Ui, 509 | add_contents: impl FnOnce(&mut Ui) -> R, 510 | ) -> InnerResponse { 511 | ui.horizontal_centered(add_contents) 512 | } 513 | 514 | #[inline] 515 | /// Align the contents to the left horizontally and wrap them when necessary. 516 | pub fn left_horizontal_wrapped( 517 | ui: &mut Ui, 518 | add_contents: impl FnOnce(&mut Ui) -> R, 519 | ) -> InnerResponse { 520 | let layout = Layout::left_to_right(Align::Center).with_main_wrap(true); 521 | 522 | Aligner::from_align(egui::Align2::LEFT_CENTER) 523 | .layout(layout) 524 | .show(ui, add_contents) 525 | } 526 | 527 | #[inline] 528 | /// Align the contents to the left vertically. 529 | pub fn left_vertical(ui: &mut Ui, add_contents: impl FnOnce(&mut Ui) -> R) -> InnerResponse { 530 | Aligner::from_align(egui::Align2::LEFT_CENTER) 531 | .layout(Layout::top_down(Align::Min)) 532 | .show(ui, add_contents) 533 | } 534 | 535 | #[inline] 536 | /// Align the contents to the right horizontally. 537 | pub fn right_horizontal( 538 | ui: &mut Ui, 539 | add_contents: impl FnOnce(&mut Ui) -> R, 540 | ) -> InnerResponse { 541 | ui.with_layout(Layout::right_to_left(Align::Center), add_contents) 542 | } 543 | 544 | #[inline] 545 | /// Align the contents to the right horizontally and wrap them when necessary. 546 | pub fn right_horizontal_wrapped( 547 | ui: &mut Ui, 548 | add_contents: impl FnOnce(&mut Ui) -> R, 549 | ) -> InnerResponse { 550 | let layout = Layout::right_to_left(Align::Center).with_main_wrap(true); 551 | Aligner::from_align(Align2::RIGHT_CENTER) 552 | .layout(layout) 553 | .show(ui, add_contents) 554 | } 555 | 556 | #[inline] 557 | /// Align the contents to the right vertically. 558 | pub fn right_vertical(ui: &mut Ui, add_contents: impl FnOnce(&mut Ui) -> R) -> InnerResponse { 559 | Aligner::from_align(Align2::RIGHT_CENTER) 560 | .layout(Layout::top_down(Align::Max)) 561 | .show(ui, add_contents) 562 | } 563 | -------------------------------------------------------------------------------- /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.8" 18 | source = "registry+https://github.com/rust-lang/crates.io-index" 19 | checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" 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 | 27 | [[package]] 28 | name = "accesskit_atspi_common" 29 | version = "0.14.1" 30 | source = "registry+https://github.com/rust-lang/crates.io-index" 31 | checksum = "29f73a9b855b6f4af4962a94553ef0c092b80cf5e17038724d5e30945d036f69" 32 | dependencies = [ 33 | "accesskit", 34 | "accesskit_consumer", 35 | "atspi-common", 36 | "serde", 37 | "thiserror 1.0.69", 38 | "zvariant", 39 | ] 40 | 41 | [[package]] 42 | name = "accesskit_consumer" 43 | version = "0.30.1" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | checksum = "bdd06f5fea9819250fffd4debf926709f3593ac22f8c1541a2573e5ee0ca01cd" 46 | dependencies = [ 47 | "accesskit", 48 | "hashbrown 0.15.2", 49 | ] 50 | 51 | [[package]] 52 | name = "accesskit_macos" 53 | version = "0.22.1" 54 | source = "registry+https://github.com/rust-lang/crates.io-index" 55 | checksum = "93fbaf15815f39084e0cb24950c232f0e3634702c2dfbf182ae3b4919a4a1d45" 56 | dependencies = [ 57 | "accesskit", 58 | "accesskit_consumer", 59 | "hashbrown 0.15.2", 60 | "objc2 0.5.2", 61 | "objc2-app-kit 0.2.2", 62 | "objc2-foundation 0.2.2", 63 | ] 64 | 65 | [[package]] 66 | name = "accesskit_unix" 67 | version = "0.17.1" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | checksum = "64926a930368d52d95422b822ede15014c04536cabaa2394f99567a1f4788dc6" 70 | dependencies = [ 71 | "accesskit", 72 | "accesskit_atspi_common", 73 | "async-channel", 74 | "async-executor", 75 | "async-task", 76 | "atspi", 77 | "futures-lite", 78 | "futures-util", 79 | "serde", 80 | "zbus", 81 | ] 82 | 83 | [[package]] 84 | name = "accesskit_windows" 85 | version = "0.29.1" 86 | source = "registry+https://github.com/rust-lang/crates.io-index" 87 | checksum = "792991159fa9ba57459de59e12e918bb90c5346fea7d40ac1a11f8632b41e63a" 88 | dependencies = [ 89 | "accesskit", 90 | "accesskit_consumer", 91 | "hashbrown 0.15.2", 92 | "static_assertions", 93 | "windows 0.61.3", 94 | "windows-core 0.61.2", 95 | ] 96 | 97 | [[package]] 98 | name = "accesskit_winit" 99 | version = "0.29.1" 100 | source = "registry+https://github.com/rust-lang/crates.io-index" 101 | checksum = "cd9db0ea66997e3f4eae4a5f2c6b6486cf206642639ee629dbbb860ace1dec87" 102 | dependencies = [ 103 | "accesskit", 104 | "accesskit_macos", 105 | "accesskit_unix", 106 | "accesskit_windows", 107 | "raw-window-handle", 108 | "winit", 109 | ] 110 | 111 | [[package]] 112 | name = "adler2" 113 | version = "2.0.0" 114 | source = "registry+https://github.com/rust-lang/crates.io-index" 115 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 116 | 117 | [[package]] 118 | name = "ahash" 119 | version = "0.8.12" 120 | source = "registry+https://github.com/rust-lang/crates.io-index" 121 | checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" 122 | dependencies = [ 123 | "cfg-if", 124 | "getrandom 0.3.3", 125 | "once_cell", 126 | "version_check", 127 | "zerocopy", 128 | ] 129 | 130 | [[package]] 131 | name = "alignments" 132 | version = "0.3.5" 133 | dependencies = [ 134 | "eframe", 135 | "egui", 136 | "egui_alignments", 137 | "egui_extras", 138 | ] 139 | 140 | [[package]] 141 | name = "android-activity" 142 | version = "0.6.0" 143 | source = "registry+https://github.com/rust-lang/crates.io-index" 144 | checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" 145 | dependencies = [ 146 | "android-properties", 147 | "bitflags 2.9.4", 148 | "cc", 149 | "cesu8", 150 | "jni", 151 | "jni-sys", 152 | "libc", 153 | "log", 154 | "ndk", 155 | "ndk-context", 156 | "ndk-sys", 157 | "num_enum", 158 | "thiserror 1.0.69", 159 | ] 160 | 161 | [[package]] 162 | name = "android-properties" 163 | version = "0.2.2" 164 | source = "registry+https://github.com/rust-lang/crates.io-index" 165 | checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" 166 | 167 | [[package]] 168 | name = "android_system_properties" 169 | version = "0.1.5" 170 | source = "registry+https://github.com/rust-lang/crates.io-index" 171 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 172 | dependencies = [ 173 | "libc", 174 | ] 175 | 176 | [[package]] 177 | name = "arboard" 178 | version = "3.6.1" 179 | source = "registry+https://github.com/rust-lang/crates.io-index" 180 | checksum = "0348a1c054491f4bfe6ab86a7b6ab1e44e45d899005de92f58b3df180b36ddaf" 181 | dependencies = [ 182 | "clipboard-win", 183 | "image", 184 | "log", 185 | "objc2 0.6.3", 186 | "objc2-app-kit 0.3.2", 187 | "objc2-core-foundation", 188 | "objc2-core-graphics", 189 | "objc2-foundation 0.3.2", 190 | "parking_lot", 191 | "percent-encoding", 192 | "windows-sys 0.59.0", 193 | "x11rb", 194 | ] 195 | 196 | [[package]] 197 | name = "arrayref" 198 | version = "0.3.9" 199 | source = "registry+https://github.com/rust-lang/crates.io-index" 200 | checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" 201 | 202 | [[package]] 203 | name = "arrayvec" 204 | version = "0.7.6" 205 | source = "registry+https://github.com/rust-lang/crates.io-index" 206 | checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 207 | 208 | [[package]] 209 | name = "as-raw-xcb-connection" 210 | version = "1.0.1" 211 | source = "registry+https://github.com/rust-lang/crates.io-index" 212 | checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" 213 | 214 | [[package]] 215 | name = "ash" 216 | version = "0.38.0+1.3.281" 217 | source = "registry+https://github.com/rust-lang/crates.io-index" 218 | checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" 219 | dependencies = [ 220 | "libloading", 221 | ] 222 | 223 | [[package]] 224 | name = "async-broadcast" 225 | version = "0.7.1" 226 | source = "registry+https://github.com/rust-lang/crates.io-index" 227 | checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e" 228 | dependencies = [ 229 | "event-listener", 230 | "event-listener-strategy", 231 | "futures-core", 232 | "pin-project-lite", 233 | ] 234 | 235 | [[package]] 236 | name = "async-channel" 237 | version = "2.3.1" 238 | source = "registry+https://github.com/rust-lang/crates.io-index" 239 | checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" 240 | dependencies = [ 241 | "concurrent-queue", 242 | "event-listener-strategy", 243 | "futures-core", 244 | "pin-project-lite", 245 | ] 246 | 247 | [[package]] 248 | name = "async-executor" 249 | version = "1.13.1" 250 | source = "registry+https://github.com/rust-lang/crates.io-index" 251 | checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" 252 | dependencies = [ 253 | "async-task", 254 | "concurrent-queue", 255 | "fastrand", 256 | "futures-lite", 257 | "slab", 258 | ] 259 | 260 | [[package]] 261 | name = "async-io" 262 | version = "2.4.0" 263 | source = "registry+https://github.com/rust-lang/crates.io-index" 264 | checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" 265 | dependencies = [ 266 | "async-lock", 267 | "cfg-if", 268 | "concurrent-queue", 269 | "futures-io", 270 | "futures-lite", 271 | "parking", 272 | "polling", 273 | "rustix 0.38.42", 274 | "slab", 275 | "tracing", 276 | "windows-sys 0.59.0", 277 | ] 278 | 279 | [[package]] 280 | name = "async-lock" 281 | version = "3.4.0" 282 | source = "registry+https://github.com/rust-lang/crates.io-index" 283 | checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" 284 | dependencies = [ 285 | "event-listener", 286 | "event-listener-strategy", 287 | "pin-project-lite", 288 | ] 289 | 290 | [[package]] 291 | name = "async-process" 292 | version = "2.3.0" 293 | source = "registry+https://github.com/rust-lang/crates.io-index" 294 | checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" 295 | dependencies = [ 296 | "async-channel", 297 | "async-io", 298 | "async-lock", 299 | "async-signal", 300 | "async-task", 301 | "blocking", 302 | "cfg-if", 303 | "event-listener", 304 | "futures-lite", 305 | "rustix 0.38.42", 306 | "tracing", 307 | ] 308 | 309 | [[package]] 310 | name = "async-recursion" 311 | version = "1.1.1" 312 | source = "registry+https://github.com/rust-lang/crates.io-index" 313 | checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" 314 | dependencies = [ 315 | "proc-macro2", 316 | "quote", 317 | "syn", 318 | ] 319 | 320 | [[package]] 321 | name = "async-signal" 322 | version = "0.2.10" 323 | source = "registry+https://github.com/rust-lang/crates.io-index" 324 | checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" 325 | dependencies = [ 326 | "async-io", 327 | "async-lock", 328 | "atomic-waker", 329 | "cfg-if", 330 | "futures-core", 331 | "futures-io", 332 | "rustix 0.38.42", 333 | "signal-hook-registry", 334 | "slab", 335 | "windows-sys 0.59.0", 336 | ] 337 | 338 | [[package]] 339 | name = "async-task" 340 | version = "4.7.1" 341 | source = "registry+https://github.com/rust-lang/crates.io-index" 342 | checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" 343 | 344 | [[package]] 345 | name = "async-trait" 346 | version = "0.1.83" 347 | source = "registry+https://github.com/rust-lang/crates.io-index" 348 | checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" 349 | dependencies = [ 350 | "proc-macro2", 351 | "quote", 352 | "syn", 353 | ] 354 | 355 | [[package]] 356 | name = "atomic-waker" 357 | version = "1.1.2" 358 | source = "registry+https://github.com/rust-lang/crates.io-index" 359 | checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 360 | 361 | [[package]] 362 | name = "atspi" 363 | version = "0.25.0" 364 | source = "registry+https://github.com/rust-lang/crates.io-index" 365 | checksum = "c83247582e7508838caf5f316c00791eee0e15c0bf743e6880585b867e16815c" 366 | dependencies = [ 367 | "atspi-common", 368 | "atspi-connection", 369 | "atspi-proxies", 370 | ] 371 | 372 | [[package]] 373 | name = "atspi-common" 374 | version = "0.9.0" 375 | source = "registry+https://github.com/rust-lang/crates.io-index" 376 | checksum = "33dfc05e7cdf90988a197803bf24f5788f94f7c94a69efa95683e8ffe76cfdfb" 377 | dependencies = [ 378 | "enumflags2", 379 | "serde", 380 | "static_assertions", 381 | "zbus", 382 | "zbus-lockstep", 383 | "zbus-lockstep-macros", 384 | "zbus_names", 385 | "zvariant", 386 | ] 387 | 388 | [[package]] 389 | name = "atspi-connection" 390 | version = "0.9.0" 391 | source = "registry+https://github.com/rust-lang/crates.io-index" 392 | checksum = "4193d51303d8332304056ae0004714256b46b6635a5c556109b319c0d3784938" 393 | dependencies = [ 394 | "atspi-common", 395 | "atspi-proxies", 396 | "futures-lite", 397 | "zbus", 398 | ] 399 | 400 | [[package]] 401 | name = "atspi-proxies" 402 | version = "0.9.0" 403 | source = "registry+https://github.com/rust-lang/crates.io-index" 404 | checksum = "d2eebcb9e7e76f26d0bcfd6f0295e1cd1e6f33bedbc5698a971db8dc43d7751c" 405 | dependencies = [ 406 | "atspi-common", 407 | "serde", 408 | "zbus", 409 | ] 410 | 411 | [[package]] 412 | name = "autocfg" 413 | version = "1.4.0" 414 | source = "registry+https://github.com/rust-lang/crates.io-index" 415 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 416 | 417 | [[package]] 418 | name = "base64" 419 | version = "0.22.1" 420 | source = "registry+https://github.com/rust-lang/crates.io-index" 421 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 422 | 423 | [[package]] 424 | name = "bit-set" 425 | version = "0.8.0" 426 | source = "registry+https://github.com/rust-lang/crates.io-index" 427 | checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" 428 | dependencies = [ 429 | "bit-vec", 430 | ] 431 | 432 | [[package]] 433 | name = "bit-vec" 434 | version = "0.8.0" 435 | source = "registry+https://github.com/rust-lang/crates.io-index" 436 | checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" 437 | 438 | [[package]] 439 | name = "bitflags" 440 | version = "1.3.2" 441 | source = "registry+https://github.com/rust-lang/crates.io-index" 442 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 443 | 444 | [[package]] 445 | name = "bitflags" 446 | version = "2.9.4" 447 | source = "registry+https://github.com/rust-lang/crates.io-index" 448 | checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" 449 | 450 | [[package]] 451 | name = "block" 452 | version = "0.1.6" 453 | source = "registry+https://github.com/rust-lang/crates.io-index" 454 | checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 455 | 456 | [[package]] 457 | name = "block2" 458 | version = "0.5.1" 459 | source = "registry+https://github.com/rust-lang/crates.io-index" 460 | checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" 461 | dependencies = [ 462 | "objc2 0.5.2", 463 | ] 464 | 465 | [[package]] 466 | name = "blocking" 467 | version = "1.6.1" 468 | source = "registry+https://github.com/rust-lang/crates.io-index" 469 | checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" 470 | dependencies = [ 471 | "async-channel", 472 | "async-task", 473 | "futures-io", 474 | "futures-lite", 475 | "piper", 476 | ] 477 | 478 | [[package]] 479 | name = "bumpalo" 480 | version = "3.16.0" 481 | source = "registry+https://github.com/rust-lang/crates.io-index" 482 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 483 | 484 | [[package]] 485 | name = "bytemuck" 486 | version = "1.24.0" 487 | source = "registry+https://github.com/rust-lang/crates.io-index" 488 | checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" 489 | dependencies = [ 490 | "bytemuck_derive", 491 | ] 492 | 493 | [[package]] 494 | name = "bytemuck_derive" 495 | version = "1.10.2" 496 | source = "registry+https://github.com/rust-lang/crates.io-index" 497 | checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" 498 | dependencies = [ 499 | "proc-macro2", 500 | "quote", 501 | "syn", 502 | ] 503 | 504 | [[package]] 505 | name = "byteorder-lite" 506 | version = "0.1.0" 507 | source = "registry+https://github.com/rust-lang/crates.io-index" 508 | checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" 509 | 510 | [[package]] 511 | name = "bytes" 512 | version = "1.9.0" 513 | source = "registry+https://github.com/rust-lang/crates.io-index" 514 | checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" 515 | 516 | [[package]] 517 | name = "calloop" 518 | version = "0.13.0" 519 | source = "registry+https://github.com/rust-lang/crates.io-index" 520 | checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" 521 | dependencies = [ 522 | "bitflags 2.9.4", 523 | "log", 524 | "polling", 525 | "rustix 0.38.42", 526 | "slab", 527 | "thiserror 1.0.69", 528 | ] 529 | 530 | [[package]] 531 | name = "calloop-wayland-source" 532 | version = "0.3.0" 533 | source = "registry+https://github.com/rust-lang/crates.io-index" 534 | checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" 535 | dependencies = [ 536 | "calloop", 537 | "rustix 0.38.42", 538 | "wayland-backend", 539 | "wayland-client", 540 | ] 541 | 542 | [[package]] 543 | name = "cc" 544 | version = "1.2.4" 545 | source = "registry+https://github.com/rust-lang/crates.io-index" 546 | checksum = "9157bbaa6b165880c27a4293a474c91cdcf265cc68cc829bf10be0964a391caf" 547 | dependencies = [ 548 | "jobserver", 549 | "libc", 550 | "shlex", 551 | ] 552 | 553 | [[package]] 554 | name = "cesu8" 555 | version = "1.1.0" 556 | source = "registry+https://github.com/rust-lang/crates.io-index" 557 | checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" 558 | 559 | [[package]] 560 | name = "cfg-if" 561 | version = "1.0.0" 562 | source = "registry+https://github.com/rust-lang/crates.io-index" 563 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 564 | 565 | [[package]] 566 | name = "cfg_aliases" 567 | version = "0.2.1" 568 | source = "registry+https://github.com/rust-lang/crates.io-index" 569 | checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 570 | 571 | [[package]] 572 | name = "cgl" 573 | version = "0.3.2" 574 | source = "registry+https://github.com/rust-lang/crates.io-index" 575 | checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" 576 | dependencies = [ 577 | "libc", 578 | ] 579 | 580 | [[package]] 581 | name = "clipboard-win" 582 | version = "5.4.0" 583 | source = "registry+https://github.com/rust-lang/crates.io-index" 584 | checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" 585 | dependencies = [ 586 | "error-code", 587 | ] 588 | 589 | [[package]] 590 | name = "codespan-reporting" 591 | version = "0.12.0" 592 | source = "registry+https://github.com/rust-lang/crates.io-index" 593 | checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" 594 | dependencies = [ 595 | "serde", 596 | "termcolor", 597 | "unicode-width", 598 | ] 599 | 600 | [[package]] 601 | name = "color_quant" 602 | version = "1.1.0" 603 | source = "registry+https://github.com/rust-lang/crates.io-index" 604 | checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" 605 | 606 | [[package]] 607 | name = "combine" 608 | version = "4.6.7" 609 | source = "registry+https://github.com/rust-lang/crates.io-index" 610 | checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" 611 | dependencies = [ 612 | "bytes", 613 | "memchr", 614 | ] 615 | 616 | [[package]] 617 | name = "concurrent-queue" 618 | version = "2.5.0" 619 | source = "registry+https://github.com/rust-lang/crates.io-index" 620 | checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 621 | dependencies = [ 622 | "crossbeam-utils", 623 | ] 624 | 625 | [[package]] 626 | name = "containers" 627 | version = "0.3.5" 628 | dependencies = [ 629 | "eframe", 630 | "egui", 631 | "egui_alignments", 632 | "egui_extras", 633 | ] 634 | 635 | [[package]] 636 | name = "core-foundation" 637 | version = "0.9.4" 638 | source = "registry+https://github.com/rust-lang/crates.io-index" 639 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 640 | dependencies = [ 641 | "core-foundation-sys", 642 | "libc", 643 | ] 644 | 645 | [[package]] 646 | name = "core-foundation" 647 | version = "0.10.0" 648 | source = "registry+https://github.com/rust-lang/crates.io-index" 649 | checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" 650 | dependencies = [ 651 | "core-foundation-sys", 652 | "libc", 653 | ] 654 | 655 | [[package]] 656 | name = "core-foundation-sys" 657 | version = "0.8.7" 658 | source = "registry+https://github.com/rust-lang/crates.io-index" 659 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 660 | 661 | [[package]] 662 | name = "core-graphics" 663 | version = "0.23.2" 664 | source = "registry+https://github.com/rust-lang/crates.io-index" 665 | checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" 666 | dependencies = [ 667 | "bitflags 1.3.2", 668 | "core-foundation 0.9.4", 669 | "core-graphics-types 0.1.3", 670 | "foreign-types", 671 | "libc", 672 | ] 673 | 674 | [[package]] 675 | name = "core-graphics-types" 676 | version = "0.1.3" 677 | source = "registry+https://github.com/rust-lang/crates.io-index" 678 | checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" 679 | dependencies = [ 680 | "bitflags 1.3.2", 681 | "core-foundation 0.9.4", 682 | "libc", 683 | ] 684 | 685 | [[package]] 686 | name = "core-graphics-types" 687 | version = "0.2.0" 688 | source = "registry+https://github.com/rust-lang/crates.io-index" 689 | checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" 690 | dependencies = [ 691 | "bitflags 2.9.4", 692 | "core-foundation 0.10.0", 693 | "libc", 694 | ] 695 | 696 | [[package]] 697 | name = "crc32fast" 698 | version = "1.4.2" 699 | source = "registry+https://github.com/rust-lang/crates.io-index" 700 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 701 | dependencies = [ 702 | "cfg-if", 703 | ] 704 | 705 | [[package]] 706 | name = "crossbeam-utils" 707 | version = "0.8.21" 708 | source = "registry+https://github.com/rust-lang/crates.io-index" 709 | checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 710 | 711 | [[package]] 712 | name = "crunchy" 713 | version = "0.2.4" 714 | source = "registry+https://github.com/rust-lang/crates.io-index" 715 | checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" 716 | 717 | [[package]] 718 | name = "cursor-icon" 719 | version = "1.1.0" 720 | source = "registry+https://github.com/rust-lang/crates.io-index" 721 | checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" 722 | 723 | [[package]] 724 | name = "data-url" 725 | version = "0.3.1" 726 | source = "registry+https://github.com/rust-lang/crates.io-index" 727 | checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" 728 | 729 | [[package]] 730 | name = "dispatch" 731 | version = "0.2.0" 732 | source = "registry+https://github.com/rust-lang/crates.io-index" 733 | checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" 734 | 735 | [[package]] 736 | name = "dispatch2" 737 | version = "0.3.0" 738 | source = "registry+https://github.com/rust-lang/crates.io-index" 739 | checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" 740 | dependencies = [ 741 | "bitflags 2.9.4", 742 | "objc2 0.6.3", 743 | ] 744 | 745 | [[package]] 746 | name = "displaydoc" 747 | version = "0.2.5" 748 | source = "registry+https://github.com/rust-lang/crates.io-index" 749 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 750 | dependencies = [ 751 | "proc-macro2", 752 | "quote", 753 | "syn", 754 | ] 755 | 756 | [[package]] 757 | name = "dlib" 758 | version = "0.5.2" 759 | source = "registry+https://github.com/rust-lang/crates.io-index" 760 | checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" 761 | dependencies = [ 762 | "libloading", 763 | ] 764 | 765 | [[package]] 766 | name = "document-features" 767 | version = "0.2.11" 768 | source = "registry+https://github.com/rust-lang/crates.io-index" 769 | checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" 770 | dependencies = [ 771 | "litrs", 772 | ] 773 | 774 | [[package]] 775 | name = "downcast-rs" 776 | version = "1.2.1" 777 | source = "registry+https://github.com/rust-lang/crates.io-index" 778 | checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" 779 | 780 | [[package]] 781 | name = "dpi" 782 | version = "0.1.1" 783 | source = "registry+https://github.com/rust-lang/crates.io-index" 784 | checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" 785 | 786 | [[package]] 787 | name = "ecolor" 788 | version = "0.33.0" 789 | source = "registry+https://github.com/rust-lang/crates.io-index" 790 | checksum = "adf31f99fad93fe83c1055b92b5c1b135f1ecfa464789817c372000e768d4bd1" 791 | dependencies = [ 792 | "bytemuck", 793 | "emath", 794 | ] 795 | 796 | [[package]] 797 | name = "eframe" 798 | version = "0.33.0" 799 | source = "registry+https://github.com/rust-lang/crates.io-index" 800 | checksum = "b829d302a09deb4acde242262a1840ba14fadd0371980ebf713060077a1987bc" 801 | dependencies = [ 802 | "ahash", 803 | "bytemuck", 804 | "document-features", 805 | "egui", 806 | "egui-wgpu", 807 | "egui-winit", 808 | "egui_glow", 809 | "glow", 810 | "glutin", 811 | "glutin-winit", 812 | "image", 813 | "js-sys", 814 | "log", 815 | "objc2 0.5.2", 816 | "objc2-app-kit 0.2.2", 817 | "objc2-foundation 0.2.2", 818 | "parking_lot", 819 | "percent-encoding", 820 | "profiling", 821 | "raw-window-handle", 822 | "static_assertions", 823 | "wasm-bindgen", 824 | "wasm-bindgen-futures", 825 | "web-sys", 826 | "web-time", 827 | "windows-sys 0.61.2", 828 | "winit", 829 | ] 830 | 831 | [[package]] 832 | name = "egui" 833 | version = "0.33.0" 834 | source = "registry+https://github.com/rust-lang/crates.io-index" 835 | checksum = "ab9b5d3376c79439f53a78bf7da1e3c0b862ffa3e29f46ab0f3e107430f2e576" 836 | dependencies = [ 837 | "accesskit", 838 | "ahash", 839 | "bitflags 2.9.4", 840 | "emath", 841 | "epaint", 842 | "log", 843 | "nohash-hasher", 844 | "profiling", 845 | "smallvec", 846 | "unicode-segmentation", 847 | ] 848 | 849 | [[package]] 850 | name = "egui-wgpu" 851 | version = "0.33.0" 852 | source = "registry+https://github.com/rust-lang/crates.io-index" 853 | checksum = "cef1fe83ba30b3d045814b2d811804f2a7e50a832034c975408f71c20df596e4" 854 | dependencies = [ 855 | "ahash", 856 | "bytemuck", 857 | "document-features", 858 | "egui", 859 | "epaint", 860 | "log", 861 | "profiling", 862 | "thiserror 2.0.17", 863 | "type-map", 864 | "web-time", 865 | "wgpu", 866 | "winit", 867 | ] 868 | 869 | [[package]] 870 | name = "egui-winit" 871 | version = "0.33.0" 872 | source = "registry+https://github.com/rust-lang/crates.io-index" 873 | checksum = "bb4ea8cb063c00d8f23ce11279c01eb63a195a72be0e21d429148246dab7983e" 874 | dependencies = [ 875 | "accesskit_winit", 876 | "arboard", 877 | "bytemuck", 878 | "egui", 879 | "log", 880 | "objc2 0.5.2", 881 | "objc2-foundation 0.2.2", 882 | "objc2-ui-kit", 883 | "profiling", 884 | "raw-window-handle", 885 | "smithay-clipboard", 886 | "web-time", 887 | "webbrowser", 888 | "winit", 889 | ] 890 | 891 | [[package]] 892 | name = "egui_alignments" 893 | version = "0.3.5" 894 | dependencies = [ 895 | "egui", 896 | ] 897 | 898 | [[package]] 899 | name = "egui_extras" 900 | version = "0.33.0" 901 | source = "registry+https://github.com/rust-lang/crates.io-index" 902 | checksum = "bdced1964ad8a02a116b1307f7b4f73dbe408c5f53dcdd488f527609f261da60" 903 | dependencies = [ 904 | "ahash", 905 | "egui", 906 | "ehttp", 907 | "enum-map", 908 | "image", 909 | "log", 910 | "mime_guess2", 911 | "profiling", 912 | "resvg", 913 | ] 914 | 915 | [[package]] 916 | name = "egui_glow" 917 | version = "0.33.0" 918 | source = "registry+https://github.com/rust-lang/crates.io-index" 919 | checksum = "668c0d4f726cc33838f0915f6b8c00af0ca0910e975ab58cf34b3e39c614552c" 920 | dependencies = [ 921 | "bytemuck", 922 | "egui", 923 | "glow", 924 | "log", 925 | "memoffset", 926 | "profiling", 927 | "wasm-bindgen", 928 | "web-sys", 929 | "winit", 930 | ] 931 | 932 | [[package]] 933 | name = "ehttp" 934 | version = "0.5.0" 935 | source = "registry+https://github.com/rust-lang/crates.io-index" 936 | checksum = "59a81c221a1e4dad06cb9c9deb19aea1193a5eea084e8cd42d869068132bf876" 937 | dependencies = [ 938 | "document-features", 939 | "js-sys", 940 | "ureq", 941 | "wasm-bindgen", 942 | "wasm-bindgen-futures", 943 | "web-sys", 944 | ] 945 | 946 | [[package]] 947 | name = "emath" 948 | version = "0.33.0" 949 | source = "registry+https://github.com/rust-lang/crates.io-index" 950 | checksum = "c615516cdceec867065f20d7db13d8eb8aedd65c9e32cc0c7c379380fa42e6e8" 951 | dependencies = [ 952 | "bytemuck", 953 | ] 954 | 955 | [[package]] 956 | name = "endi" 957 | version = "1.1.0" 958 | source = "registry+https://github.com/rust-lang/crates.io-index" 959 | checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" 960 | 961 | [[package]] 962 | name = "enum-map" 963 | version = "2.7.3" 964 | source = "registry+https://github.com/rust-lang/crates.io-index" 965 | checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9" 966 | dependencies = [ 967 | "enum-map-derive", 968 | ] 969 | 970 | [[package]] 971 | name = "enum-map-derive" 972 | version = "0.17.0" 973 | source = "registry+https://github.com/rust-lang/crates.io-index" 974 | checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" 975 | dependencies = [ 976 | "proc-macro2", 977 | "quote", 978 | "syn", 979 | ] 980 | 981 | [[package]] 982 | name = "enumflags2" 983 | version = "0.7.10" 984 | source = "registry+https://github.com/rust-lang/crates.io-index" 985 | checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" 986 | dependencies = [ 987 | "enumflags2_derive", 988 | "serde", 989 | ] 990 | 991 | [[package]] 992 | name = "enumflags2_derive" 993 | version = "0.7.10" 994 | source = "registry+https://github.com/rust-lang/crates.io-index" 995 | checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" 996 | dependencies = [ 997 | "proc-macro2", 998 | "quote", 999 | "syn", 1000 | ] 1001 | 1002 | [[package]] 1003 | name = "epaint" 1004 | version = "0.33.0" 1005 | source = "registry+https://github.com/rust-lang/crates.io-index" 1006 | checksum = "9926b9500ccb917adb070207ec722dd8ea78b8321f94a85ebec776f501f2930c" 1007 | dependencies = [ 1008 | "ab_glyph", 1009 | "ahash", 1010 | "bytemuck", 1011 | "ecolor", 1012 | "emath", 1013 | "epaint_default_fonts", 1014 | "log", 1015 | "nohash-hasher", 1016 | "parking_lot", 1017 | "profiling", 1018 | ] 1019 | 1020 | [[package]] 1021 | name = "epaint_default_fonts" 1022 | version = "0.33.0" 1023 | source = "registry+https://github.com/rust-lang/crates.io-index" 1024 | checksum = "66054d943c66715c6003a27a3dc152d87cadf714ef2597ccd79f550413009b97" 1025 | 1026 | [[package]] 1027 | name = "equivalent" 1028 | version = "1.0.1" 1029 | source = "registry+https://github.com/rust-lang/crates.io-index" 1030 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 1031 | 1032 | [[package]] 1033 | name = "errno" 1034 | version = "0.3.10" 1035 | source = "registry+https://github.com/rust-lang/crates.io-index" 1036 | checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" 1037 | dependencies = [ 1038 | "libc", 1039 | "windows-sys 0.59.0", 1040 | ] 1041 | 1042 | [[package]] 1043 | name = "error-code" 1044 | version = "3.3.1" 1045 | source = "registry+https://github.com/rust-lang/crates.io-index" 1046 | checksum = "a5d9305ccc6942a704f4335694ecd3de2ea531b114ac2d51f5f843750787a92f" 1047 | 1048 | [[package]] 1049 | name = "euclid" 1050 | version = "0.22.11" 1051 | source = "registry+https://github.com/rust-lang/crates.io-index" 1052 | checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48" 1053 | dependencies = [ 1054 | "num-traits", 1055 | ] 1056 | 1057 | [[package]] 1058 | name = "event-listener" 1059 | version = "5.3.1" 1060 | source = "registry+https://github.com/rust-lang/crates.io-index" 1061 | checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" 1062 | dependencies = [ 1063 | "concurrent-queue", 1064 | "parking", 1065 | "pin-project-lite", 1066 | ] 1067 | 1068 | [[package]] 1069 | name = "event-listener-strategy" 1070 | version = "0.5.3" 1071 | source = "registry+https://github.com/rust-lang/crates.io-index" 1072 | checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" 1073 | dependencies = [ 1074 | "event-listener", 1075 | "pin-project-lite", 1076 | ] 1077 | 1078 | [[package]] 1079 | name = "fastrand" 1080 | version = "2.3.0" 1081 | source = "registry+https://github.com/rust-lang/crates.io-index" 1082 | checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 1083 | 1084 | [[package]] 1085 | name = "fax" 1086 | version = "0.2.6" 1087 | source = "registry+https://github.com/rust-lang/crates.io-index" 1088 | checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab" 1089 | dependencies = [ 1090 | "fax_derive", 1091 | ] 1092 | 1093 | [[package]] 1094 | name = "fax_derive" 1095 | version = "0.2.0" 1096 | source = "registry+https://github.com/rust-lang/crates.io-index" 1097 | checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" 1098 | dependencies = [ 1099 | "proc-macro2", 1100 | "quote", 1101 | "syn", 1102 | ] 1103 | 1104 | [[package]] 1105 | name = "fdeflate" 1106 | version = "0.3.7" 1107 | source = "registry+https://github.com/rust-lang/crates.io-index" 1108 | checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" 1109 | dependencies = [ 1110 | "simd-adler32", 1111 | ] 1112 | 1113 | [[package]] 1114 | name = "flate2" 1115 | version = "1.0.35" 1116 | source = "registry+https://github.com/rust-lang/crates.io-index" 1117 | checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" 1118 | dependencies = [ 1119 | "crc32fast", 1120 | "miniz_oxide", 1121 | ] 1122 | 1123 | [[package]] 1124 | name = "float-cmp" 1125 | version = "0.9.0" 1126 | source = "registry+https://github.com/rust-lang/crates.io-index" 1127 | checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" 1128 | 1129 | [[package]] 1130 | name = "foldhash" 1131 | version = "0.1.3" 1132 | source = "registry+https://github.com/rust-lang/crates.io-index" 1133 | checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" 1134 | 1135 | [[package]] 1136 | name = "foldhash" 1137 | version = "0.2.0" 1138 | source = "registry+https://github.com/rust-lang/crates.io-index" 1139 | checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" 1140 | 1141 | [[package]] 1142 | name = "foreign-types" 1143 | version = "0.5.0" 1144 | source = "registry+https://github.com/rust-lang/crates.io-index" 1145 | checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" 1146 | dependencies = [ 1147 | "foreign-types-macros", 1148 | "foreign-types-shared", 1149 | ] 1150 | 1151 | [[package]] 1152 | name = "foreign-types-macros" 1153 | version = "0.2.3" 1154 | source = "registry+https://github.com/rust-lang/crates.io-index" 1155 | checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" 1156 | dependencies = [ 1157 | "proc-macro2", 1158 | "quote", 1159 | "syn", 1160 | ] 1161 | 1162 | [[package]] 1163 | name = "foreign-types-shared" 1164 | version = "0.3.1" 1165 | source = "registry+https://github.com/rust-lang/crates.io-index" 1166 | checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" 1167 | 1168 | [[package]] 1169 | name = "form_urlencoded" 1170 | version = "1.2.1" 1171 | source = "registry+https://github.com/rust-lang/crates.io-index" 1172 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 1173 | dependencies = [ 1174 | "percent-encoding", 1175 | ] 1176 | 1177 | [[package]] 1178 | name = "futures-core" 1179 | version = "0.3.31" 1180 | source = "registry+https://github.com/rust-lang/crates.io-index" 1181 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 1182 | 1183 | [[package]] 1184 | name = "futures-io" 1185 | version = "0.3.31" 1186 | source = "registry+https://github.com/rust-lang/crates.io-index" 1187 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 1188 | 1189 | [[package]] 1190 | name = "futures-lite" 1191 | version = "2.6.1" 1192 | source = "registry+https://github.com/rust-lang/crates.io-index" 1193 | checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" 1194 | dependencies = [ 1195 | "fastrand", 1196 | "futures-core", 1197 | "futures-io", 1198 | "parking", 1199 | "pin-project-lite", 1200 | ] 1201 | 1202 | [[package]] 1203 | name = "futures-macro" 1204 | version = "0.3.31" 1205 | source = "registry+https://github.com/rust-lang/crates.io-index" 1206 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 1207 | dependencies = [ 1208 | "proc-macro2", 1209 | "quote", 1210 | "syn", 1211 | ] 1212 | 1213 | [[package]] 1214 | name = "futures-task" 1215 | version = "0.3.31" 1216 | source = "registry+https://github.com/rust-lang/crates.io-index" 1217 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 1218 | 1219 | [[package]] 1220 | name = "futures-util" 1221 | version = "0.3.31" 1222 | source = "registry+https://github.com/rust-lang/crates.io-index" 1223 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 1224 | dependencies = [ 1225 | "futures-core", 1226 | "futures-macro", 1227 | "futures-task", 1228 | "pin-project-lite", 1229 | "pin-utils", 1230 | "slab", 1231 | ] 1232 | 1233 | [[package]] 1234 | name = "gethostname" 1235 | version = "0.4.3" 1236 | source = "registry+https://github.com/rust-lang/crates.io-index" 1237 | checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" 1238 | dependencies = [ 1239 | "libc", 1240 | "windows-targets 0.48.5", 1241 | ] 1242 | 1243 | [[package]] 1244 | name = "getrandom" 1245 | version = "0.2.15" 1246 | source = "registry+https://github.com/rust-lang/crates.io-index" 1247 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 1248 | dependencies = [ 1249 | "cfg-if", 1250 | "libc", 1251 | "wasi 0.11.0+wasi-snapshot-preview1", 1252 | ] 1253 | 1254 | [[package]] 1255 | name = "getrandom" 1256 | version = "0.3.3" 1257 | source = "registry+https://github.com/rust-lang/crates.io-index" 1258 | checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" 1259 | dependencies = [ 1260 | "cfg-if", 1261 | "libc", 1262 | "r-efi", 1263 | "wasi 0.14.7+wasi-0.2.4", 1264 | ] 1265 | 1266 | [[package]] 1267 | name = "gif" 1268 | version = "0.13.1" 1269 | source = "registry+https://github.com/rust-lang/crates.io-index" 1270 | checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" 1271 | dependencies = [ 1272 | "color_quant", 1273 | "weezl", 1274 | ] 1275 | 1276 | [[package]] 1277 | name = "gl_generator" 1278 | version = "0.14.0" 1279 | source = "registry+https://github.com/rust-lang/crates.io-index" 1280 | checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" 1281 | dependencies = [ 1282 | "khronos_api", 1283 | "log", 1284 | "xml-rs", 1285 | ] 1286 | 1287 | [[package]] 1288 | name = "glow" 1289 | version = "0.16.0" 1290 | source = "registry+https://github.com/rust-lang/crates.io-index" 1291 | checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" 1292 | dependencies = [ 1293 | "js-sys", 1294 | "slotmap", 1295 | "wasm-bindgen", 1296 | "web-sys", 1297 | ] 1298 | 1299 | [[package]] 1300 | name = "glutin" 1301 | version = "0.32.3" 1302 | source = "registry+https://github.com/rust-lang/crates.io-index" 1303 | checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" 1304 | dependencies = [ 1305 | "bitflags 2.9.4", 1306 | "cfg_aliases", 1307 | "cgl", 1308 | "dispatch2", 1309 | "glutin_egl_sys", 1310 | "glutin_glx_sys", 1311 | "glutin_wgl_sys", 1312 | "libloading", 1313 | "objc2 0.6.3", 1314 | "objc2-app-kit 0.3.2", 1315 | "objc2-core-foundation", 1316 | "objc2-foundation 0.3.2", 1317 | "once_cell", 1318 | "raw-window-handle", 1319 | "wayland-sys", 1320 | "windows-sys 0.52.0", 1321 | "x11-dl", 1322 | ] 1323 | 1324 | [[package]] 1325 | name = "glutin-winit" 1326 | version = "0.5.0" 1327 | source = "registry+https://github.com/rust-lang/crates.io-index" 1328 | checksum = "85edca7075f8fc728f28cb8fbb111a96c3b89e930574369e3e9c27eb75d3788f" 1329 | dependencies = [ 1330 | "cfg_aliases", 1331 | "glutin", 1332 | "raw-window-handle", 1333 | "winit", 1334 | ] 1335 | 1336 | [[package]] 1337 | name = "glutin_egl_sys" 1338 | version = "0.7.1" 1339 | source = "registry+https://github.com/rust-lang/crates.io-index" 1340 | checksum = "4c4680ba6195f424febdc3ba46e7a42a0e58743f2edb115297b86d7f8ecc02d2" 1341 | dependencies = [ 1342 | "gl_generator", 1343 | "windows-sys 0.52.0", 1344 | ] 1345 | 1346 | [[package]] 1347 | name = "glutin_glx_sys" 1348 | version = "0.6.1" 1349 | source = "registry+https://github.com/rust-lang/crates.io-index" 1350 | checksum = "8a7bb2938045a88b612499fbcba375a77198e01306f52272e692f8c1f3751185" 1351 | dependencies = [ 1352 | "gl_generator", 1353 | "x11-dl", 1354 | ] 1355 | 1356 | [[package]] 1357 | name = "glutin_wgl_sys" 1358 | version = "0.6.1" 1359 | source = "registry+https://github.com/rust-lang/crates.io-index" 1360 | checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e" 1361 | dependencies = [ 1362 | "gl_generator", 1363 | ] 1364 | 1365 | [[package]] 1366 | name = "gpu-alloc" 1367 | version = "0.6.0" 1368 | source = "registry+https://github.com/rust-lang/crates.io-index" 1369 | checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" 1370 | dependencies = [ 1371 | "bitflags 2.9.4", 1372 | "gpu-alloc-types", 1373 | ] 1374 | 1375 | [[package]] 1376 | name = "gpu-alloc-types" 1377 | version = "0.3.0" 1378 | source = "registry+https://github.com/rust-lang/crates.io-index" 1379 | checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" 1380 | dependencies = [ 1381 | "bitflags 2.9.4", 1382 | ] 1383 | 1384 | [[package]] 1385 | name = "gpu-allocator" 1386 | version = "0.27.0" 1387 | source = "registry+https://github.com/rust-lang/crates.io-index" 1388 | checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" 1389 | dependencies = [ 1390 | "log", 1391 | "presser", 1392 | "thiserror 1.0.69", 1393 | "windows 0.58.0", 1394 | ] 1395 | 1396 | [[package]] 1397 | name = "gpu-descriptor" 1398 | version = "0.3.2" 1399 | source = "registry+https://github.com/rust-lang/crates.io-index" 1400 | checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" 1401 | dependencies = [ 1402 | "bitflags 2.9.4", 1403 | "gpu-descriptor-types", 1404 | "hashbrown 0.15.2", 1405 | ] 1406 | 1407 | [[package]] 1408 | name = "gpu-descriptor-types" 1409 | version = "0.2.0" 1410 | source = "registry+https://github.com/rust-lang/crates.io-index" 1411 | checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" 1412 | dependencies = [ 1413 | "bitflags 2.9.4", 1414 | ] 1415 | 1416 | [[package]] 1417 | name = "half" 1418 | version = "2.7.0" 1419 | source = "registry+https://github.com/rust-lang/crates.io-index" 1420 | checksum = "e54c115d4f30f52c67202f079c5f9d8b49db4691f460fdb0b4c2e838261b2ba5" 1421 | dependencies = [ 1422 | "cfg-if", 1423 | "crunchy", 1424 | "num-traits", 1425 | "zerocopy", 1426 | ] 1427 | 1428 | [[package]] 1429 | name = "hashbrown" 1430 | version = "0.15.2" 1431 | source = "registry+https://github.com/rust-lang/crates.io-index" 1432 | checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" 1433 | dependencies = [ 1434 | "foldhash 0.1.3", 1435 | ] 1436 | 1437 | [[package]] 1438 | name = "hashbrown" 1439 | version = "0.16.0" 1440 | source = "registry+https://github.com/rust-lang/crates.io-index" 1441 | checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" 1442 | dependencies = [ 1443 | "foldhash 0.2.0", 1444 | ] 1445 | 1446 | [[package]] 1447 | name = "hermit-abi" 1448 | version = "0.4.0" 1449 | source = "registry+https://github.com/rust-lang/crates.io-index" 1450 | checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" 1451 | 1452 | [[package]] 1453 | name = "hex" 1454 | version = "0.4.3" 1455 | source = "registry+https://github.com/rust-lang/crates.io-index" 1456 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1457 | 1458 | [[package]] 1459 | name = "hexf-parse" 1460 | version = "0.2.1" 1461 | source = "registry+https://github.com/rust-lang/crates.io-index" 1462 | checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" 1463 | 1464 | [[package]] 1465 | name = "icu_collections" 1466 | version = "1.5.0" 1467 | source = "registry+https://github.com/rust-lang/crates.io-index" 1468 | checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" 1469 | dependencies = [ 1470 | "displaydoc", 1471 | "yoke", 1472 | "zerofrom", 1473 | "zerovec", 1474 | ] 1475 | 1476 | [[package]] 1477 | name = "icu_locid" 1478 | version = "1.5.0" 1479 | source = "registry+https://github.com/rust-lang/crates.io-index" 1480 | checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" 1481 | dependencies = [ 1482 | "displaydoc", 1483 | "litemap", 1484 | "tinystr", 1485 | "writeable", 1486 | "zerovec", 1487 | ] 1488 | 1489 | [[package]] 1490 | name = "icu_locid_transform" 1491 | version = "1.5.0" 1492 | source = "registry+https://github.com/rust-lang/crates.io-index" 1493 | checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" 1494 | dependencies = [ 1495 | "displaydoc", 1496 | "icu_locid", 1497 | "icu_locid_transform_data", 1498 | "icu_provider", 1499 | "tinystr", 1500 | "zerovec", 1501 | ] 1502 | 1503 | [[package]] 1504 | name = "icu_locid_transform_data" 1505 | version = "1.5.0" 1506 | source = "registry+https://github.com/rust-lang/crates.io-index" 1507 | checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" 1508 | 1509 | [[package]] 1510 | name = "icu_normalizer" 1511 | version = "1.5.0" 1512 | source = "registry+https://github.com/rust-lang/crates.io-index" 1513 | checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" 1514 | dependencies = [ 1515 | "displaydoc", 1516 | "icu_collections", 1517 | "icu_normalizer_data", 1518 | "icu_properties", 1519 | "icu_provider", 1520 | "smallvec", 1521 | "utf16_iter", 1522 | "utf8_iter", 1523 | "write16", 1524 | "zerovec", 1525 | ] 1526 | 1527 | [[package]] 1528 | name = "icu_normalizer_data" 1529 | version = "1.5.0" 1530 | source = "registry+https://github.com/rust-lang/crates.io-index" 1531 | checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" 1532 | 1533 | [[package]] 1534 | name = "icu_properties" 1535 | version = "1.5.1" 1536 | source = "registry+https://github.com/rust-lang/crates.io-index" 1537 | checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" 1538 | dependencies = [ 1539 | "displaydoc", 1540 | "icu_collections", 1541 | "icu_locid_transform", 1542 | "icu_properties_data", 1543 | "icu_provider", 1544 | "tinystr", 1545 | "zerovec", 1546 | ] 1547 | 1548 | [[package]] 1549 | name = "icu_properties_data" 1550 | version = "1.5.0" 1551 | source = "registry+https://github.com/rust-lang/crates.io-index" 1552 | checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" 1553 | 1554 | [[package]] 1555 | name = "icu_provider" 1556 | version = "1.5.0" 1557 | source = "registry+https://github.com/rust-lang/crates.io-index" 1558 | checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" 1559 | dependencies = [ 1560 | "displaydoc", 1561 | "icu_locid", 1562 | "icu_provider_macros", 1563 | "stable_deref_trait", 1564 | "tinystr", 1565 | "writeable", 1566 | "yoke", 1567 | "zerofrom", 1568 | "zerovec", 1569 | ] 1570 | 1571 | [[package]] 1572 | name = "icu_provider_macros" 1573 | version = "1.5.0" 1574 | source = "registry+https://github.com/rust-lang/crates.io-index" 1575 | checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" 1576 | dependencies = [ 1577 | "proc-macro2", 1578 | "quote", 1579 | "syn", 1580 | ] 1581 | 1582 | [[package]] 1583 | name = "idna" 1584 | version = "1.0.3" 1585 | source = "registry+https://github.com/rust-lang/crates.io-index" 1586 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 1587 | dependencies = [ 1588 | "idna_adapter", 1589 | "smallvec", 1590 | "utf8_iter", 1591 | ] 1592 | 1593 | [[package]] 1594 | name = "idna_adapter" 1595 | version = "1.2.0" 1596 | source = "registry+https://github.com/rust-lang/crates.io-index" 1597 | checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" 1598 | dependencies = [ 1599 | "icu_normalizer", 1600 | "icu_properties", 1601 | ] 1602 | 1603 | [[package]] 1604 | name = "image" 1605 | version = "0.25.8" 1606 | source = "registry+https://github.com/rust-lang/crates.io-index" 1607 | checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7" 1608 | dependencies = [ 1609 | "bytemuck", 1610 | "byteorder-lite", 1611 | "color_quant", 1612 | "gif", 1613 | "image-webp", 1614 | "moxcms", 1615 | "num-traits", 1616 | "png 0.18.0", 1617 | "tiff", 1618 | ] 1619 | 1620 | [[package]] 1621 | name = "image-webp" 1622 | version = "0.2.1" 1623 | source = "registry+https://github.com/rust-lang/crates.io-index" 1624 | checksum = "b77d01e822461baa8409e156015a1d91735549f0f2c17691bd2d996bef238f7f" 1625 | dependencies = [ 1626 | "byteorder-lite", 1627 | "quick-error", 1628 | ] 1629 | 1630 | [[package]] 1631 | name = "imagesize" 1632 | version = "0.13.0" 1633 | source = "registry+https://github.com/rust-lang/crates.io-index" 1634 | checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285" 1635 | 1636 | [[package]] 1637 | name = "indexmap" 1638 | version = "2.11.4" 1639 | source = "registry+https://github.com/rust-lang/crates.io-index" 1640 | checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" 1641 | dependencies = [ 1642 | "equivalent", 1643 | "hashbrown 0.15.2", 1644 | ] 1645 | 1646 | [[package]] 1647 | name = "jni" 1648 | version = "0.21.1" 1649 | source = "registry+https://github.com/rust-lang/crates.io-index" 1650 | checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" 1651 | dependencies = [ 1652 | "cesu8", 1653 | "cfg-if", 1654 | "combine", 1655 | "jni-sys", 1656 | "log", 1657 | "thiserror 1.0.69", 1658 | "walkdir", 1659 | "windows-sys 0.45.0", 1660 | ] 1661 | 1662 | [[package]] 1663 | name = "jni-sys" 1664 | version = "0.3.0" 1665 | source = "registry+https://github.com/rust-lang/crates.io-index" 1666 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 1667 | 1668 | [[package]] 1669 | name = "jobserver" 1670 | version = "0.1.32" 1671 | source = "registry+https://github.com/rust-lang/crates.io-index" 1672 | checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" 1673 | dependencies = [ 1674 | "libc", 1675 | ] 1676 | 1677 | [[package]] 1678 | name = "js-sys" 1679 | version = "0.3.81" 1680 | source = "registry+https://github.com/rust-lang/crates.io-index" 1681 | checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" 1682 | dependencies = [ 1683 | "once_cell", 1684 | "wasm-bindgen", 1685 | ] 1686 | 1687 | [[package]] 1688 | name = "khronos-egl" 1689 | version = "6.0.0" 1690 | source = "registry+https://github.com/rust-lang/crates.io-index" 1691 | checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" 1692 | dependencies = [ 1693 | "libc", 1694 | "libloading", 1695 | "pkg-config", 1696 | ] 1697 | 1698 | [[package]] 1699 | name = "khronos_api" 1700 | version = "3.1.0" 1701 | source = "registry+https://github.com/rust-lang/crates.io-index" 1702 | checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" 1703 | 1704 | [[package]] 1705 | name = "kurbo" 1706 | version = "0.11.3" 1707 | source = "registry+https://github.com/rust-lang/crates.io-index" 1708 | checksum = "c62026ae44756f8a599ba21140f350303d4f08dcdcc71b5ad9c9bb8128c13c62" 1709 | dependencies = [ 1710 | "arrayvec", 1711 | "euclid", 1712 | "smallvec", 1713 | ] 1714 | 1715 | [[package]] 1716 | name = "libc" 1717 | version = "0.2.177" 1718 | source = "registry+https://github.com/rust-lang/crates.io-index" 1719 | checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" 1720 | 1721 | [[package]] 1722 | name = "libloading" 1723 | version = "0.8.6" 1724 | source = "registry+https://github.com/rust-lang/crates.io-index" 1725 | checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" 1726 | dependencies = [ 1727 | "cfg-if", 1728 | "windows-targets 0.52.6", 1729 | ] 1730 | 1731 | [[package]] 1732 | name = "libm" 1733 | version = "0.2.15" 1734 | source = "registry+https://github.com/rust-lang/crates.io-index" 1735 | checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" 1736 | 1737 | [[package]] 1738 | name = "libredox" 1739 | version = "0.1.3" 1740 | source = "registry+https://github.com/rust-lang/crates.io-index" 1741 | checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" 1742 | dependencies = [ 1743 | "bitflags 2.9.4", 1744 | "libc", 1745 | "redox_syscall 0.5.8", 1746 | ] 1747 | 1748 | [[package]] 1749 | name = "linux-raw-sys" 1750 | version = "0.4.14" 1751 | source = "registry+https://github.com/rust-lang/crates.io-index" 1752 | checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" 1753 | 1754 | [[package]] 1755 | name = "linux-raw-sys" 1756 | version = "0.11.0" 1757 | source = "registry+https://github.com/rust-lang/crates.io-index" 1758 | checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" 1759 | 1760 | [[package]] 1761 | name = "litemap" 1762 | version = "0.7.4" 1763 | source = "registry+https://github.com/rust-lang/crates.io-index" 1764 | checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" 1765 | 1766 | [[package]] 1767 | name = "litrs" 1768 | version = "0.4.1" 1769 | source = "registry+https://github.com/rust-lang/crates.io-index" 1770 | checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" 1771 | 1772 | [[package]] 1773 | name = "lock_api" 1774 | version = "0.4.14" 1775 | source = "registry+https://github.com/rust-lang/crates.io-index" 1776 | checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" 1777 | dependencies = [ 1778 | "scopeguard", 1779 | ] 1780 | 1781 | [[package]] 1782 | name = "log" 1783 | version = "0.4.28" 1784 | source = "registry+https://github.com/rust-lang/crates.io-index" 1785 | checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" 1786 | 1787 | [[package]] 1788 | name = "malloc_buf" 1789 | version = "0.0.6" 1790 | source = "registry+https://github.com/rust-lang/crates.io-index" 1791 | checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 1792 | dependencies = [ 1793 | "libc", 1794 | ] 1795 | 1796 | [[package]] 1797 | name = "memchr" 1798 | version = "2.7.4" 1799 | source = "registry+https://github.com/rust-lang/crates.io-index" 1800 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 1801 | 1802 | [[package]] 1803 | name = "memmap2" 1804 | version = "0.9.5" 1805 | source = "registry+https://github.com/rust-lang/crates.io-index" 1806 | checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" 1807 | dependencies = [ 1808 | "libc", 1809 | ] 1810 | 1811 | [[package]] 1812 | name = "memoffset" 1813 | version = "0.9.1" 1814 | source = "registry+https://github.com/rust-lang/crates.io-index" 1815 | checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" 1816 | dependencies = [ 1817 | "autocfg", 1818 | ] 1819 | 1820 | [[package]] 1821 | name = "metal" 1822 | version = "0.32.0" 1823 | source = "registry+https://github.com/rust-lang/crates.io-index" 1824 | checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605" 1825 | dependencies = [ 1826 | "bitflags 2.9.4", 1827 | "block", 1828 | "core-graphics-types 0.2.0", 1829 | "foreign-types", 1830 | "log", 1831 | "objc", 1832 | "paste", 1833 | ] 1834 | 1835 | [[package]] 1836 | name = "mime" 1837 | version = "0.3.17" 1838 | source = "registry+https://github.com/rust-lang/crates.io-index" 1839 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 1840 | 1841 | [[package]] 1842 | name = "mime_guess2" 1843 | version = "2.3.1" 1844 | source = "registry+https://github.com/rust-lang/crates.io-index" 1845 | checksum = "1706dc14a2e140dec0a7a07109d9a3d5890b81e85bd6c60b906b249a77adf0ca" 1846 | dependencies = [ 1847 | "mime", 1848 | "phf", 1849 | "phf_shared", 1850 | "unicase", 1851 | ] 1852 | 1853 | [[package]] 1854 | name = "miniz_oxide" 1855 | version = "0.8.2" 1856 | source = "registry+https://github.com/rust-lang/crates.io-index" 1857 | checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" 1858 | dependencies = [ 1859 | "adler2", 1860 | "simd-adler32", 1861 | ] 1862 | 1863 | [[package]] 1864 | name = "moxcms" 1865 | version = "0.7.7" 1866 | source = "registry+https://github.com/rust-lang/crates.io-index" 1867 | checksum = "c588e11a3082784af229e23e8e4ecf5bcc6fbe4f69101e0421ce8d79da7f0b40" 1868 | dependencies = [ 1869 | "num-traits", 1870 | "pxfm", 1871 | ] 1872 | 1873 | [[package]] 1874 | name = "naga" 1875 | version = "27.0.0" 1876 | source = "registry+https://github.com/rust-lang/crates.io-index" 1877 | checksum = "12b2e757b11b47345d44e7760e45458339bc490463d9548cd8651c53ae523153" 1878 | dependencies = [ 1879 | "arrayvec", 1880 | "bit-set", 1881 | "bitflags 2.9.4", 1882 | "cfg-if", 1883 | "cfg_aliases", 1884 | "codespan-reporting", 1885 | "half", 1886 | "hashbrown 0.16.0", 1887 | "hexf-parse", 1888 | "indexmap", 1889 | "libm", 1890 | "log", 1891 | "num-traits", 1892 | "once_cell", 1893 | "rustc-hash 1.1.0", 1894 | "spirv", 1895 | "thiserror 2.0.17", 1896 | "unicode-ident", 1897 | ] 1898 | 1899 | [[package]] 1900 | name = "ndk" 1901 | version = "0.9.0" 1902 | source = "registry+https://github.com/rust-lang/crates.io-index" 1903 | checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" 1904 | dependencies = [ 1905 | "bitflags 2.9.4", 1906 | "jni-sys", 1907 | "log", 1908 | "ndk-sys", 1909 | "num_enum", 1910 | "raw-window-handle", 1911 | "thiserror 1.0.69", 1912 | ] 1913 | 1914 | [[package]] 1915 | name = "ndk-context" 1916 | version = "0.1.1" 1917 | source = "registry+https://github.com/rust-lang/crates.io-index" 1918 | checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" 1919 | 1920 | [[package]] 1921 | name = "ndk-sys" 1922 | version = "0.6.0+11769913" 1923 | source = "registry+https://github.com/rust-lang/crates.io-index" 1924 | checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" 1925 | dependencies = [ 1926 | "jni-sys", 1927 | ] 1928 | 1929 | [[package]] 1930 | name = "nix" 1931 | version = "0.30.1" 1932 | source = "registry+https://github.com/rust-lang/crates.io-index" 1933 | checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" 1934 | dependencies = [ 1935 | "bitflags 2.9.4", 1936 | "cfg-if", 1937 | "cfg_aliases", 1938 | "libc", 1939 | "memoffset", 1940 | ] 1941 | 1942 | [[package]] 1943 | name = "nohash-hasher" 1944 | version = "0.2.0" 1945 | source = "registry+https://github.com/rust-lang/crates.io-index" 1946 | checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" 1947 | 1948 | [[package]] 1949 | name = "num-traits" 1950 | version = "0.2.19" 1951 | source = "registry+https://github.com/rust-lang/crates.io-index" 1952 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1953 | dependencies = [ 1954 | "autocfg", 1955 | "libm", 1956 | ] 1957 | 1958 | [[package]] 1959 | name = "num_enum" 1960 | version = "0.7.3" 1961 | source = "registry+https://github.com/rust-lang/crates.io-index" 1962 | checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" 1963 | dependencies = [ 1964 | "num_enum_derive", 1965 | ] 1966 | 1967 | [[package]] 1968 | name = "num_enum_derive" 1969 | version = "0.7.3" 1970 | source = "registry+https://github.com/rust-lang/crates.io-index" 1971 | checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" 1972 | dependencies = [ 1973 | "proc-macro-crate", 1974 | "proc-macro2", 1975 | "quote", 1976 | "syn", 1977 | ] 1978 | 1979 | [[package]] 1980 | name = "objc" 1981 | version = "0.2.7" 1982 | source = "registry+https://github.com/rust-lang/crates.io-index" 1983 | checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 1984 | dependencies = [ 1985 | "malloc_buf", 1986 | ] 1987 | 1988 | [[package]] 1989 | name = "objc-sys" 1990 | version = "0.3.5" 1991 | source = "registry+https://github.com/rust-lang/crates.io-index" 1992 | checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" 1993 | 1994 | [[package]] 1995 | name = "objc2" 1996 | version = "0.5.2" 1997 | source = "registry+https://github.com/rust-lang/crates.io-index" 1998 | checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" 1999 | dependencies = [ 2000 | "objc-sys", 2001 | "objc2-encode", 2002 | ] 2003 | 2004 | [[package]] 2005 | name = "objc2" 2006 | version = "0.6.3" 2007 | source = "registry+https://github.com/rust-lang/crates.io-index" 2008 | checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" 2009 | dependencies = [ 2010 | "objc2-encode", 2011 | ] 2012 | 2013 | [[package]] 2014 | name = "objc2-app-kit" 2015 | version = "0.2.2" 2016 | source = "registry+https://github.com/rust-lang/crates.io-index" 2017 | checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" 2018 | dependencies = [ 2019 | "bitflags 2.9.4", 2020 | "block2", 2021 | "libc", 2022 | "objc2 0.5.2", 2023 | "objc2-core-data", 2024 | "objc2-core-image", 2025 | "objc2-foundation 0.2.2", 2026 | "objc2-quartz-core", 2027 | ] 2028 | 2029 | [[package]] 2030 | name = "objc2-app-kit" 2031 | version = "0.3.2" 2032 | source = "registry+https://github.com/rust-lang/crates.io-index" 2033 | checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" 2034 | dependencies = [ 2035 | "bitflags 2.9.4", 2036 | "objc2 0.6.3", 2037 | "objc2-core-foundation", 2038 | "objc2-core-graphics", 2039 | "objc2-foundation 0.3.2", 2040 | ] 2041 | 2042 | [[package]] 2043 | name = "objc2-cloud-kit" 2044 | version = "0.2.2" 2045 | source = "registry+https://github.com/rust-lang/crates.io-index" 2046 | checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" 2047 | dependencies = [ 2048 | "bitflags 2.9.4", 2049 | "block2", 2050 | "objc2 0.5.2", 2051 | "objc2-core-location", 2052 | "objc2-foundation 0.2.2", 2053 | ] 2054 | 2055 | [[package]] 2056 | name = "objc2-contacts" 2057 | version = "0.2.2" 2058 | source = "registry+https://github.com/rust-lang/crates.io-index" 2059 | checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" 2060 | dependencies = [ 2061 | "block2", 2062 | "objc2 0.5.2", 2063 | "objc2-foundation 0.2.2", 2064 | ] 2065 | 2066 | [[package]] 2067 | name = "objc2-core-data" 2068 | version = "0.2.2" 2069 | source = "registry+https://github.com/rust-lang/crates.io-index" 2070 | checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" 2071 | dependencies = [ 2072 | "bitflags 2.9.4", 2073 | "block2", 2074 | "objc2 0.5.2", 2075 | "objc2-foundation 0.2.2", 2076 | ] 2077 | 2078 | [[package]] 2079 | name = "objc2-core-foundation" 2080 | version = "0.3.2" 2081 | source = "registry+https://github.com/rust-lang/crates.io-index" 2082 | checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" 2083 | dependencies = [ 2084 | "bitflags 2.9.4", 2085 | "dispatch2", 2086 | "objc2 0.6.3", 2087 | ] 2088 | 2089 | [[package]] 2090 | name = "objc2-core-graphics" 2091 | version = "0.3.2" 2092 | source = "registry+https://github.com/rust-lang/crates.io-index" 2093 | checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" 2094 | dependencies = [ 2095 | "bitflags 2.9.4", 2096 | "dispatch2", 2097 | "objc2 0.6.3", 2098 | "objc2-core-foundation", 2099 | "objc2-io-surface", 2100 | ] 2101 | 2102 | [[package]] 2103 | name = "objc2-core-image" 2104 | version = "0.2.2" 2105 | source = "registry+https://github.com/rust-lang/crates.io-index" 2106 | checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" 2107 | dependencies = [ 2108 | "block2", 2109 | "objc2 0.5.2", 2110 | "objc2-foundation 0.2.2", 2111 | "objc2-metal", 2112 | ] 2113 | 2114 | [[package]] 2115 | name = "objc2-core-location" 2116 | version = "0.2.2" 2117 | source = "registry+https://github.com/rust-lang/crates.io-index" 2118 | checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" 2119 | dependencies = [ 2120 | "block2", 2121 | "objc2 0.5.2", 2122 | "objc2-contacts", 2123 | "objc2-foundation 0.2.2", 2124 | ] 2125 | 2126 | [[package]] 2127 | name = "objc2-encode" 2128 | version = "4.1.0" 2129 | source = "registry+https://github.com/rust-lang/crates.io-index" 2130 | checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" 2131 | 2132 | [[package]] 2133 | name = "objc2-foundation" 2134 | version = "0.2.2" 2135 | source = "registry+https://github.com/rust-lang/crates.io-index" 2136 | checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" 2137 | dependencies = [ 2138 | "bitflags 2.9.4", 2139 | "block2", 2140 | "dispatch", 2141 | "libc", 2142 | "objc2 0.5.2", 2143 | ] 2144 | 2145 | [[package]] 2146 | name = "objc2-foundation" 2147 | version = "0.3.2" 2148 | source = "registry+https://github.com/rust-lang/crates.io-index" 2149 | checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" 2150 | dependencies = [ 2151 | "bitflags 2.9.4", 2152 | "objc2 0.6.3", 2153 | "objc2-core-foundation", 2154 | ] 2155 | 2156 | [[package]] 2157 | name = "objc2-io-surface" 2158 | version = "0.3.2" 2159 | source = "registry+https://github.com/rust-lang/crates.io-index" 2160 | checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" 2161 | dependencies = [ 2162 | "bitflags 2.9.4", 2163 | "objc2 0.6.3", 2164 | "objc2-core-foundation", 2165 | ] 2166 | 2167 | [[package]] 2168 | name = "objc2-link-presentation" 2169 | version = "0.2.2" 2170 | source = "registry+https://github.com/rust-lang/crates.io-index" 2171 | checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" 2172 | dependencies = [ 2173 | "block2", 2174 | "objc2 0.5.2", 2175 | "objc2-app-kit 0.2.2", 2176 | "objc2-foundation 0.2.2", 2177 | ] 2178 | 2179 | [[package]] 2180 | name = "objc2-metal" 2181 | version = "0.2.2" 2182 | source = "registry+https://github.com/rust-lang/crates.io-index" 2183 | checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" 2184 | dependencies = [ 2185 | "bitflags 2.9.4", 2186 | "block2", 2187 | "objc2 0.5.2", 2188 | "objc2-foundation 0.2.2", 2189 | ] 2190 | 2191 | [[package]] 2192 | name = "objc2-quartz-core" 2193 | version = "0.2.2" 2194 | source = "registry+https://github.com/rust-lang/crates.io-index" 2195 | checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" 2196 | dependencies = [ 2197 | "bitflags 2.9.4", 2198 | "block2", 2199 | "objc2 0.5.2", 2200 | "objc2-foundation 0.2.2", 2201 | "objc2-metal", 2202 | ] 2203 | 2204 | [[package]] 2205 | name = "objc2-symbols" 2206 | version = "0.2.2" 2207 | source = "registry+https://github.com/rust-lang/crates.io-index" 2208 | checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" 2209 | dependencies = [ 2210 | "objc2 0.5.2", 2211 | "objc2-foundation 0.2.2", 2212 | ] 2213 | 2214 | [[package]] 2215 | name = "objc2-ui-kit" 2216 | version = "0.2.2" 2217 | source = "registry+https://github.com/rust-lang/crates.io-index" 2218 | checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" 2219 | dependencies = [ 2220 | "bitflags 2.9.4", 2221 | "block2", 2222 | "objc2 0.5.2", 2223 | "objc2-cloud-kit", 2224 | "objc2-core-data", 2225 | "objc2-core-image", 2226 | "objc2-core-location", 2227 | "objc2-foundation 0.2.2", 2228 | "objc2-link-presentation", 2229 | "objc2-quartz-core", 2230 | "objc2-symbols", 2231 | "objc2-uniform-type-identifiers", 2232 | "objc2-user-notifications", 2233 | ] 2234 | 2235 | [[package]] 2236 | name = "objc2-uniform-type-identifiers" 2237 | version = "0.2.2" 2238 | source = "registry+https://github.com/rust-lang/crates.io-index" 2239 | checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" 2240 | dependencies = [ 2241 | "block2", 2242 | "objc2 0.5.2", 2243 | "objc2-foundation 0.2.2", 2244 | ] 2245 | 2246 | [[package]] 2247 | name = "objc2-user-notifications" 2248 | version = "0.2.2" 2249 | source = "registry+https://github.com/rust-lang/crates.io-index" 2250 | checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" 2251 | dependencies = [ 2252 | "bitflags 2.9.4", 2253 | "block2", 2254 | "objc2 0.5.2", 2255 | "objc2-core-location", 2256 | "objc2-foundation 0.2.2", 2257 | ] 2258 | 2259 | [[package]] 2260 | name = "once_cell" 2261 | version = "1.21.3" 2262 | source = "registry+https://github.com/rust-lang/crates.io-index" 2263 | checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 2264 | 2265 | [[package]] 2266 | name = "orbclient" 2267 | version = "0.3.48" 2268 | source = "registry+https://github.com/rust-lang/crates.io-index" 2269 | checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43" 2270 | dependencies = [ 2271 | "libredox", 2272 | ] 2273 | 2274 | [[package]] 2275 | name = "ordered-float" 2276 | version = "4.6.0" 2277 | source = "registry+https://github.com/rust-lang/crates.io-index" 2278 | checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" 2279 | dependencies = [ 2280 | "num-traits", 2281 | ] 2282 | 2283 | [[package]] 2284 | name = "ordered-stream" 2285 | version = "0.2.0" 2286 | source = "registry+https://github.com/rust-lang/crates.io-index" 2287 | checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" 2288 | dependencies = [ 2289 | "futures-core", 2290 | "pin-project-lite", 2291 | ] 2292 | 2293 | [[package]] 2294 | name = "owned_ttf_parser" 2295 | version = "0.25.0" 2296 | source = "registry+https://github.com/rust-lang/crates.io-index" 2297 | checksum = "22ec719bbf3b2a81c109a4e20b1f129b5566b7dce654bc3872f6a05abf82b2c4" 2298 | dependencies = [ 2299 | "ttf-parser", 2300 | ] 2301 | 2302 | [[package]] 2303 | name = "parking" 2304 | version = "2.2.1" 2305 | source = "registry+https://github.com/rust-lang/crates.io-index" 2306 | checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 2307 | 2308 | [[package]] 2309 | name = "parking_lot" 2310 | version = "0.12.5" 2311 | source = "registry+https://github.com/rust-lang/crates.io-index" 2312 | checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" 2313 | dependencies = [ 2314 | "lock_api", 2315 | "parking_lot_core", 2316 | ] 2317 | 2318 | [[package]] 2319 | name = "parking_lot_core" 2320 | version = "0.9.12" 2321 | source = "registry+https://github.com/rust-lang/crates.io-index" 2322 | checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" 2323 | dependencies = [ 2324 | "cfg-if", 2325 | "libc", 2326 | "redox_syscall 0.5.8", 2327 | "smallvec", 2328 | "windows-link 0.2.1", 2329 | ] 2330 | 2331 | [[package]] 2332 | name = "paste" 2333 | version = "1.0.15" 2334 | source = "registry+https://github.com/rust-lang/crates.io-index" 2335 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 2336 | 2337 | [[package]] 2338 | name = "percent-encoding" 2339 | version = "2.3.2" 2340 | source = "registry+https://github.com/rust-lang/crates.io-index" 2341 | checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 2342 | 2343 | [[package]] 2344 | name = "phf" 2345 | version = "0.11.3" 2346 | source = "registry+https://github.com/rust-lang/crates.io-index" 2347 | checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" 2348 | dependencies = [ 2349 | "phf_macros", 2350 | "phf_shared", 2351 | ] 2352 | 2353 | [[package]] 2354 | name = "phf_generator" 2355 | version = "0.11.3" 2356 | source = "registry+https://github.com/rust-lang/crates.io-index" 2357 | checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" 2358 | dependencies = [ 2359 | "phf_shared", 2360 | "rand", 2361 | ] 2362 | 2363 | [[package]] 2364 | name = "phf_macros" 2365 | version = "0.11.3" 2366 | source = "registry+https://github.com/rust-lang/crates.io-index" 2367 | checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" 2368 | dependencies = [ 2369 | "phf_generator", 2370 | "phf_shared", 2371 | "proc-macro2", 2372 | "quote", 2373 | "syn", 2374 | "unicase", 2375 | ] 2376 | 2377 | [[package]] 2378 | name = "phf_shared" 2379 | version = "0.11.3" 2380 | source = "registry+https://github.com/rust-lang/crates.io-index" 2381 | checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" 2382 | dependencies = [ 2383 | "siphasher", 2384 | "unicase", 2385 | ] 2386 | 2387 | [[package]] 2388 | name = "pico-args" 2389 | version = "0.5.0" 2390 | source = "registry+https://github.com/rust-lang/crates.io-index" 2391 | checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" 2392 | 2393 | [[package]] 2394 | name = "pin-project" 2395 | version = "1.1.7" 2396 | source = "registry+https://github.com/rust-lang/crates.io-index" 2397 | checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" 2398 | dependencies = [ 2399 | "pin-project-internal", 2400 | ] 2401 | 2402 | [[package]] 2403 | name = "pin-project-internal" 2404 | version = "1.1.7" 2405 | source = "registry+https://github.com/rust-lang/crates.io-index" 2406 | checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" 2407 | dependencies = [ 2408 | "proc-macro2", 2409 | "quote", 2410 | "syn", 2411 | ] 2412 | 2413 | [[package]] 2414 | name = "pin-project-lite" 2415 | version = "0.2.15" 2416 | source = "registry+https://github.com/rust-lang/crates.io-index" 2417 | checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" 2418 | 2419 | [[package]] 2420 | name = "pin-utils" 2421 | version = "0.1.0" 2422 | source = "registry+https://github.com/rust-lang/crates.io-index" 2423 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 2424 | 2425 | [[package]] 2426 | name = "piper" 2427 | version = "0.2.4" 2428 | source = "registry+https://github.com/rust-lang/crates.io-index" 2429 | checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" 2430 | dependencies = [ 2431 | "atomic-waker", 2432 | "fastrand", 2433 | "futures-io", 2434 | ] 2435 | 2436 | [[package]] 2437 | name = "pkg-config" 2438 | version = "0.3.31" 2439 | source = "registry+https://github.com/rust-lang/crates.io-index" 2440 | checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" 2441 | 2442 | [[package]] 2443 | name = "png" 2444 | version = "0.17.15" 2445 | source = "registry+https://github.com/rust-lang/crates.io-index" 2446 | checksum = "b67582bd5b65bdff614270e2ea89a1cf15bef71245cc1e5f7ea126977144211d" 2447 | dependencies = [ 2448 | "bitflags 1.3.2", 2449 | "crc32fast", 2450 | "fdeflate", 2451 | "flate2", 2452 | "miniz_oxide", 2453 | ] 2454 | 2455 | [[package]] 2456 | name = "png" 2457 | version = "0.18.0" 2458 | source = "registry+https://github.com/rust-lang/crates.io-index" 2459 | checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" 2460 | dependencies = [ 2461 | "bitflags 2.9.4", 2462 | "crc32fast", 2463 | "fdeflate", 2464 | "flate2", 2465 | "miniz_oxide", 2466 | ] 2467 | 2468 | [[package]] 2469 | name = "polling" 2470 | version = "3.7.4" 2471 | source = "registry+https://github.com/rust-lang/crates.io-index" 2472 | checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" 2473 | dependencies = [ 2474 | "cfg-if", 2475 | "concurrent-queue", 2476 | "hermit-abi", 2477 | "pin-project-lite", 2478 | "rustix 0.38.42", 2479 | "tracing", 2480 | "windows-sys 0.59.0", 2481 | ] 2482 | 2483 | [[package]] 2484 | name = "portable-atomic" 2485 | version = "1.11.1" 2486 | source = "registry+https://github.com/rust-lang/crates.io-index" 2487 | checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" 2488 | 2489 | [[package]] 2490 | name = "portable-atomic-util" 2491 | version = "0.2.4" 2492 | source = "registry+https://github.com/rust-lang/crates.io-index" 2493 | checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" 2494 | dependencies = [ 2495 | "portable-atomic", 2496 | ] 2497 | 2498 | [[package]] 2499 | name = "presser" 2500 | version = "0.3.1" 2501 | source = "registry+https://github.com/rust-lang/crates.io-index" 2502 | checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" 2503 | 2504 | [[package]] 2505 | name = "proc-macro-crate" 2506 | version = "3.2.0" 2507 | source = "registry+https://github.com/rust-lang/crates.io-index" 2508 | checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" 2509 | dependencies = [ 2510 | "toml_edit", 2511 | ] 2512 | 2513 | [[package]] 2514 | name = "proc-macro2" 2515 | version = "1.0.92" 2516 | source = "registry+https://github.com/rust-lang/crates.io-index" 2517 | checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" 2518 | dependencies = [ 2519 | "unicode-ident", 2520 | ] 2521 | 2522 | [[package]] 2523 | name = "profiling" 2524 | version = "1.0.17" 2525 | source = "registry+https://github.com/rust-lang/crates.io-index" 2526 | checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" 2527 | 2528 | [[package]] 2529 | name = "pxfm" 2530 | version = "0.1.25" 2531 | source = "registry+https://github.com/rust-lang/crates.io-index" 2532 | checksum = "a3cbdf373972bf78df4d3b518d07003938e2c7d1fb5891e55f9cb6df57009d84" 2533 | dependencies = [ 2534 | "num-traits", 2535 | ] 2536 | 2537 | [[package]] 2538 | name = "quick-error" 2539 | version = "2.0.1" 2540 | source = "registry+https://github.com/rust-lang/crates.io-index" 2541 | checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" 2542 | 2543 | [[package]] 2544 | name = "quick-xml" 2545 | version = "0.36.2" 2546 | source = "registry+https://github.com/rust-lang/crates.io-index" 2547 | checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe" 2548 | dependencies = [ 2549 | "memchr", 2550 | "serde", 2551 | ] 2552 | 2553 | [[package]] 2554 | name = "quick-xml" 2555 | version = "0.37.5" 2556 | source = "registry+https://github.com/rust-lang/crates.io-index" 2557 | checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" 2558 | dependencies = [ 2559 | "memchr", 2560 | ] 2561 | 2562 | [[package]] 2563 | name = "quote" 2564 | version = "1.0.37" 2565 | source = "registry+https://github.com/rust-lang/crates.io-index" 2566 | checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" 2567 | dependencies = [ 2568 | "proc-macro2", 2569 | ] 2570 | 2571 | [[package]] 2572 | name = "r-efi" 2573 | version = "5.3.0" 2574 | source = "registry+https://github.com/rust-lang/crates.io-index" 2575 | checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" 2576 | 2577 | [[package]] 2578 | name = "rand" 2579 | version = "0.8.5" 2580 | source = "registry+https://github.com/rust-lang/crates.io-index" 2581 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 2582 | dependencies = [ 2583 | "rand_core", 2584 | ] 2585 | 2586 | [[package]] 2587 | name = "rand_core" 2588 | version = "0.6.4" 2589 | source = "registry+https://github.com/rust-lang/crates.io-index" 2590 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 2591 | 2592 | [[package]] 2593 | name = "range-alloc" 2594 | version = "0.1.4" 2595 | source = "registry+https://github.com/rust-lang/crates.io-index" 2596 | checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" 2597 | 2598 | [[package]] 2599 | name = "raw-window-handle" 2600 | version = "0.6.2" 2601 | source = "registry+https://github.com/rust-lang/crates.io-index" 2602 | checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" 2603 | 2604 | [[package]] 2605 | name = "redox_syscall" 2606 | version = "0.4.1" 2607 | source = "registry+https://github.com/rust-lang/crates.io-index" 2608 | checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" 2609 | dependencies = [ 2610 | "bitflags 1.3.2", 2611 | ] 2612 | 2613 | [[package]] 2614 | name = "redox_syscall" 2615 | version = "0.5.8" 2616 | source = "registry+https://github.com/rust-lang/crates.io-index" 2617 | checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" 2618 | dependencies = [ 2619 | "bitflags 2.9.4", 2620 | ] 2621 | 2622 | [[package]] 2623 | name = "renderdoc-sys" 2624 | version = "1.1.0" 2625 | source = "registry+https://github.com/rust-lang/crates.io-index" 2626 | checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" 2627 | 2628 | [[package]] 2629 | name = "resvg" 2630 | version = "0.45.1" 2631 | source = "registry+https://github.com/rust-lang/crates.io-index" 2632 | checksum = "a8928798c0a55e03c9ca6c4c6846f76377427d2c1e1f7e6de3c06ae57942df43" 2633 | dependencies = [ 2634 | "log", 2635 | "pico-args", 2636 | "rgb", 2637 | "svgtypes", 2638 | "tiny-skia", 2639 | "usvg", 2640 | ] 2641 | 2642 | [[package]] 2643 | name = "rgb" 2644 | version = "0.8.50" 2645 | source = "registry+https://github.com/rust-lang/crates.io-index" 2646 | checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" 2647 | dependencies = [ 2648 | "bytemuck", 2649 | ] 2650 | 2651 | [[package]] 2652 | name = "ring" 2653 | version = "0.17.8" 2654 | source = "registry+https://github.com/rust-lang/crates.io-index" 2655 | checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" 2656 | dependencies = [ 2657 | "cc", 2658 | "cfg-if", 2659 | "getrandom 0.2.15", 2660 | "libc", 2661 | "spin", 2662 | "untrusted", 2663 | "windows-sys 0.52.0", 2664 | ] 2665 | 2666 | [[package]] 2667 | name = "roxmltree" 2668 | version = "0.20.0" 2669 | source = "registry+https://github.com/rust-lang/crates.io-index" 2670 | checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" 2671 | 2672 | [[package]] 2673 | name = "rustc-hash" 2674 | version = "1.1.0" 2675 | source = "registry+https://github.com/rust-lang/crates.io-index" 2676 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 2677 | 2678 | [[package]] 2679 | name = "rustc-hash" 2680 | version = "2.1.1" 2681 | source = "registry+https://github.com/rust-lang/crates.io-index" 2682 | checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" 2683 | 2684 | [[package]] 2685 | name = "rustix" 2686 | version = "0.38.42" 2687 | source = "registry+https://github.com/rust-lang/crates.io-index" 2688 | checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" 2689 | dependencies = [ 2690 | "bitflags 2.9.4", 2691 | "errno", 2692 | "libc", 2693 | "linux-raw-sys 0.4.14", 2694 | "windows-sys 0.59.0", 2695 | ] 2696 | 2697 | [[package]] 2698 | name = "rustix" 2699 | version = "1.1.2" 2700 | source = "registry+https://github.com/rust-lang/crates.io-index" 2701 | checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" 2702 | dependencies = [ 2703 | "bitflags 2.9.4", 2704 | "errno", 2705 | "libc", 2706 | "linux-raw-sys 0.11.0", 2707 | "windows-sys 0.59.0", 2708 | ] 2709 | 2710 | [[package]] 2711 | name = "rustls" 2712 | version = "0.23.20" 2713 | source = "registry+https://github.com/rust-lang/crates.io-index" 2714 | checksum = "5065c3f250cbd332cd894be57c40fa52387247659b14a2d6041d121547903b1b" 2715 | dependencies = [ 2716 | "log", 2717 | "once_cell", 2718 | "ring", 2719 | "rustls-pki-types", 2720 | "rustls-webpki", 2721 | "subtle", 2722 | "zeroize", 2723 | ] 2724 | 2725 | [[package]] 2726 | name = "rustls-pki-types" 2727 | version = "1.10.1" 2728 | source = "registry+https://github.com/rust-lang/crates.io-index" 2729 | checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" 2730 | 2731 | [[package]] 2732 | name = "rustls-webpki" 2733 | version = "0.102.8" 2734 | source = "registry+https://github.com/rust-lang/crates.io-index" 2735 | checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" 2736 | dependencies = [ 2737 | "ring", 2738 | "rustls-pki-types", 2739 | "untrusted", 2740 | ] 2741 | 2742 | [[package]] 2743 | name = "rustversion" 2744 | version = "1.0.19" 2745 | source = "registry+https://github.com/rust-lang/crates.io-index" 2746 | checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" 2747 | 2748 | [[package]] 2749 | name = "same-file" 2750 | version = "1.0.6" 2751 | source = "registry+https://github.com/rust-lang/crates.io-index" 2752 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 2753 | dependencies = [ 2754 | "winapi-util", 2755 | ] 2756 | 2757 | [[package]] 2758 | name = "scoped-tls" 2759 | version = "1.0.1" 2760 | source = "registry+https://github.com/rust-lang/crates.io-index" 2761 | checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" 2762 | 2763 | [[package]] 2764 | name = "scopeguard" 2765 | version = "1.2.0" 2766 | source = "registry+https://github.com/rust-lang/crates.io-index" 2767 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2768 | 2769 | [[package]] 2770 | name = "sctk-adwaita" 2771 | version = "0.10.1" 2772 | source = "registry+https://github.com/rust-lang/crates.io-index" 2773 | checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" 2774 | dependencies = [ 2775 | "ab_glyph", 2776 | "log", 2777 | "memmap2", 2778 | "smithay-client-toolkit", 2779 | "tiny-skia", 2780 | ] 2781 | 2782 | [[package]] 2783 | name = "serde" 2784 | version = "1.0.216" 2785 | source = "registry+https://github.com/rust-lang/crates.io-index" 2786 | checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" 2787 | dependencies = [ 2788 | "serde_derive", 2789 | ] 2790 | 2791 | [[package]] 2792 | name = "serde_derive" 2793 | version = "1.0.216" 2794 | source = "registry+https://github.com/rust-lang/crates.io-index" 2795 | checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" 2796 | dependencies = [ 2797 | "proc-macro2", 2798 | "quote", 2799 | "syn", 2800 | ] 2801 | 2802 | [[package]] 2803 | name = "serde_repr" 2804 | version = "0.1.19" 2805 | source = "registry+https://github.com/rust-lang/crates.io-index" 2806 | checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" 2807 | dependencies = [ 2808 | "proc-macro2", 2809 | "quote", 2810 | "syn", 2811 | ] 2812 | 2813 | [[package]] 2814 | name = "shlex" 2815 | version = "1.3.0" 2816 | source = "registry+https://github.com/rust-lang/crates.io-index" 2817 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 2818 | 2819 | [[package]] 2820 | name = "signal-hook-registry" 2821 | version = "1.4.2" 2822 | source = "registry+https://github.com/rust-lang/crates.io-index" 2823 | checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" 2824 | dependencies = [ 2825 | "libc", 2826 | ] 2827 | 2828 | [[package]] 2829 | name = "simd-adler32" 2830 | version = "0.3.7" 2831 | source = "registry+https://github.com/rust-lang/crates.io-index" 2832 | checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" 2833 | 2834 | [[package]] 2835 | name = "simplecss" 2836 | version = "0.2.1" 2837 | source = "registry+https://github.com/rust-lang/crates.io-index" 2838 | checksum = "a11be7c62927d9427e9f40f3444d5499d868648e2edbc4e2116de69e7ec0e89d" 2839 | dependencies = [ 2840 | "log", 2841 | ] 2842 | 2843 | [[package]] 2844 | name = "siphasher" 2845 | version = "1.0.1" 2846 | source = "registry+https://github.com/rust-lang/crates.io-index" 2847 | checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" 2848 | 2849 | [[package]] 2850 | name = "slab" 2851 | version = "0.4.9" 2852 | source = "registry+https://github.com/rust-lang/crates.io-index" 2853 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 2854 | dependencies = [ 2855 | "autocfg", 2856 | ] 2857 | 2858 | [[package]] 2859 | name = "slotmap" 2860 | version = "1.0.7" 2861 | source = "registry+https://github.com/rust-lang/crates.io-index" 2862 | checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" 2863 | dependencies = [ 2864 | "version_check", 2865 | ] 2866 | 2867 | [[package]] 2868 | name = "smallvec" 2869 | version = "1.15.1" 2870 | source = "registry+https://github.com/rust-lang/crates.io-index" 2871 | checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 2872 | 2873 | [[package]] 2874 | name = "smithay-client-toolkit" 2875 | version = "0.19.2" 2876 | source = "registry+https://github.com/rust-lang/crates.io-index" 2877 | checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" 2878 | dependencies = [ 2879 | "bitflags 2.9.4", 2880 | "calloop", 2881 | "calloop-wayland-source", 2882 | "cursor-icon", 2883 | "libc", 2884 | "log", 2885 | "memmap2", 2886 | "rustix 0.38.42", 2887 | "thiserror 1.0.69", 2888 | "wayland-backend", 2889 | "wayland-client", 2890 | "wayland-csd-frame", 2891 | "wayland-cursor", 2892 | "wayland-protocols", 2893 | "wayland-protocols-wlr", 2894 | "wayland-scanner", 2895 | "xkeysym", 2896 | ] 2897 | 2898 | [[package]] 2899 | name = "smithay-clipboard" 2900 | version = "0.7.2" 2901 | source = "registry+https://github.com/rust-lang/crates.io-index" 2902 | checksum = "cc8216eec463674a0e90f29e0ae41a4db573ec5b56b1c6c1c71615d249b6d846" 2903 | dependencies = [ 2904 | "libc", 2905 | "smithay-client-toolkit", 2906 | "wayland-backend", 2907 | ] 2908 | 2909 | [[package]] 2910 | name = "smol_str" 2911 | version = "0.2.2" 2912 | source = "registry+https://github.com/rust-lang/crates.io-index" 2913 | checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" 2914 | dependencies = [ 2915 | "serde", 2916 | ] 2917 | 2918 | [[package]] 2919 | name = "spin" 2920 | version = "0.9.8" 2921 | source = "registry+https://github.com/rust-lang/crates.io-index" 2922 | checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 2923 | 2924 | [[package]] 2925 | name = "spirv" 2926 | version = "0.3.0+sdk-1.3.268.0" 2927 | source = "registry+https://github.com/rust-lang/crates.io-index" 2928 | checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" 2929 | dependencies = [ 2930 | "bitflags 2.9.4", 2931 | ] 2932 | 2933 | [[package]] 2934 | name = "stable_deref_trait" 2935 | version = "1.2.0" 2936 | source = "registry+https://github.com/rust-lang/crates.io-index" 2937 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 2938 | 2939 | [[package]] 2940 | name = "static_assertions" 2941 | version = "1.1.0" 2942 | source = "registry+https://github.com/rust-lang/crates.io-index" 2943 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 2944 | 2945 | [[package]] 2946 | name = "strict-num" 2947 | version = "0.1.1" 2948 | source = "registry+https://github.com/rust-lang/crates.io-index" 2949 | checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" 2950 | dependencies = [ 2951 | "float-cmp", 2952 | ] 2953 | 2954 | [[package]] 2955 | name = "subtle" 2956 | version = "2.6.1" 2957 | source = "registry+https://github.com/rust-lang/crates.io-index" 2958 | checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 2959 | 2960 | [[package]] 2961 | name = "svgtypes" 2962 | version = "0.15.3" 2963 | source = "registry+https://github.com/rust-lang/crates.io-index" 2964 | checksum = "68c7541fff44b35860c1a7a47a7cadf3e4a304c457b58f9870d9706ece028afc" 2965 | dependencies = [ 2966 | "kurbo", 2967 | "siphasher", 2968 | ] 2969 | 2970 | [[package]] 2971 | name = "syn" 2972 | version = "2.0.90" 2973 | source = "registry+https://github.com/rust-lang/crates.io-index" 2974 | checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" 2975 | dependencies = [ 2976 | "proc-macro2", 2977 | "quote", 2978 | "unicode-ident", 2979 | ] 2980 | 2981 | [[package]] 2982 | name = "synstructure" 2983 | version = "0.13.1" 2984 | source = "registry+https://github.com/rust-lang/crates.io-index" 2985 | checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" 2986 | dependencies = [ 2987 | "proc-macro2", 2988 | "quote", 2989 | "syn", 2990 | ] 2991 | 2992 | [[package]] 2993 | name = "tempfile" 2994 | version = "3.14.0" 2995 | source = "registry+https://github.com/rust-lang/crates.io-index" 2996 | checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" 2997 | dependencies = [ 2998 | "cfg-if", 2999 | "fastrand", 3000 | "once_cell", 3001 | "rustix 0.38.42", 3002 | "windows-sys 0.59.0", 3003 | ] 3004 | 3005 | [[package]] 3006 | name = "termcolor" 3007 | version = "1.4.1" 3008 | source = "registry+https://github.com/rust-lang/crates.io-index" 3009 | checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" 3010 | dependencies = [ 3011 | "winapi-util", 3012 | ] 3013 | 3014 | [[package]] 3015 | name = "thiserror" 3016 | version = "1.0.69" 3017 | source = "registry+https://github.com/rust-lang/crates.io-index" 3018 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 3019 | dependencies = [ 3020 | "thiserror-impl 1.0.69", 3021 | ] 3022 | 3023 | [[package]] 3024 | name = "thiserror" 3025 | version = "2.0.17" 3026 | source = "registry+https://github.com/rust-lang/crates.io-index" 3027 | checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" 3028 | dependencies = [ 3029 | "thiserror-impl 2.0.17", 3030 | ] 3031 | 3032 | [[package]] 3033 | name = "thiserror-impl" 3034 | version = "1.0.69" 3035 | source = "registry+https://github.com/rust-lang/crates.io-index" 3036 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 3037 | dependencies = [ 3038 | "proc-macro2", 3039 | "quote", 3040 | "syn", 3041 | ] 3042 | 3043 | [[package]] 3044 | name = "thiserror-impl" 3045 | version = "2.0.17" 3046 | source = "registry+https://github.com/rust-lang/crates.io-index" 3047 | checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" 3048 | dependencies = [ 3049 | "proc-macro2", 3050 | "quote", 3051 | "syn", 3052 | ] 3053 | 3054 | [[package]] 3055 | name = "tiff" 3056 | version = "0.10.3" 3057 | source = "registry+https://github.com/rust-lang/crates.io-index" 3058 | checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" 3059 | dependencies = [ 3060 | "fax", 3061 | "flate2", 3062 | "half", 3063 | "quick-error", 3064 | "weezl", 3065 | "zune-jpeg", 3066 | ] 3067 | 3068 | [[package]] 3069 | name = "tiny-skia" 3070 | version = "0.11.4" 3071 | source = "registry+https://github.com/rust-lang/crates.io-index" 3072 | checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" 3073 | dependencies = [ 3074 | "arrayref", 3075 | "arrayvec", 3076 | "bytemuck", 3077 | "cfg-if", 3078 | "log", 3079 | "png 0.17.15", 3080 | "tiny-skia-path", 3081 | ] 3082 | 3083 | [[package]] 3084 | name = "tiny-skia-path" 3085 | version = "0.11.4" 3086 | source = "registry+https://github.com/rust-lang/crates.io-index" 3087 | checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" 3088 | dependencies = [ 3089 | "arrayref", 3090 | "bytemuck", 3091 | "strict-num", 3092 | ] 3093 | 3094 | [[package]] 3095 | name = "tinystr" 3096 | version = "0.7.6" 3097 | source = "registry+https://github.com/rust-lang/crates.io-index" 3098 | checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" 3099 | dependencies = [ 3100 | "displaydoc", 3101 | "zerovec", 3102 | ] 3103 | 3104 | [[package]] 3105 | name = "toml_datetime" 3106 | version = "0.6.8" 3107 | source = "registry+https://github.com/rust-lang/crates.io-index" 3108 | checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" 3109 | 3110 | [[package]] 3111 | name = "toml_edit" 3112 | version = "0.22.22" 3113 | source = "registry+https://github.com/rust-lang/crates.io-index" 3114 | checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" 3115 | dependencies = [ 3116 | "indexmap", 3117 | "toml_datetime", 3118 | "winnow 0.6.20", 3119 | ] 3120 | 3121 | [[package]] 3122 | name = "tracing" 3123 | version = "0.1.41" 3124 | source = "registry+https://github.com/rust-lang/crates.io-index" 3125 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 3126 | dependencies = [ 3127 | "pin-project-lite", 3128 | "tracing-attributes", 3129 | "tracing-core", 3130 | ] 3131 | 3132 | [[package]] 3133 | name = "tracing-attributes" 3134 | version = "0.1.28" 3135 | source = "registry+https://github.com/rust-lang/crates.io-index" 3136 | checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" 3137 | dependencies = [ 3138 | "proc-macro2", 3139 | "quote", 3140 | "syn", 3141 | ] 3142 | 3143 | [[package]] 3144 | name = "tracing-core" 3145 | version = "0.1.33" 3146 | source = "registry+https://github.com/rust-lang/crates.io-index" 3147 | checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" 3148 | dependencies = [ 3149 | "once_cell", 3150 | ] 3151 | 3152 | [[package]] 3153 | name = "ttf-parser" 3154 | version = "0.25.1" 3155 | source = "registry+https://github.com/rust-lang/crates.io-index" 3156 | checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" 3157 | 3158 | [[package]] 3159 | name = "type-map" 3160 | version = "0.5.1" 3161 | source = "registry+https://github.com/rust-lang/crates.io-index" 3162 | checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90" 3163 | dependencies = [ 3164 | "rustc-hash 2.1.1", 3165 | ] 3166 | 3167 | [[package]] 3168 | name = "uds_windows" 3169 | version = "1.1.0" 3170 | source = "registry+https://github.com/rust-lang/crates.io-index" 3171 | checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" 3172 | dependencies = [ 3173 | "memoffset", 3174 | "tempfile", 3175 | "winapi", 3176 | ] 3177 | 3178 | [[package]] 3179 | name = "unicase" 3180 | version = "2.8.1" 3181 | source = "registry+https://github.com/rust-lang/crates.io-index" 3182 | checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" 3183 | 3184 | [[package]] 3185 | name = "unicode-ident" 3186 | version = "1.0.14" 3187 | source = "registry+https://github.com/rust-lang/crates.io-index" 3188 | checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" 3189 | 3190 | [[package]] 3191 | name = "unicode-segmentation" 3192 | version = "1.12.0" 3193 | source = "registry+https://github.com/rust-lang/crates.io-index" 3194 | checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 3195 | 3196 | [[package]] 3197 | name = "unicode-width" 3198 | version = "0.1.14" 3199 | source = "registry+https://github.com/rust-lang/crates.io-index" 3200 | checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" 3201 | 3202 | [[package]] 3203 | name = "untrusted" 3204 | version = "0.9.0" 3205 | source = "registry+https://github.com/rust-lang/crates.io-index" 3206 | checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 3207 | 3208 | [[package]] 3209 | name = "ureq" 3210 | version = "2.12.1" 3211 | source = "registry+https://github.com/rust-lang/crates.io-index" 3212 | checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d" 3213 | dependencies = [ 3214 | "base64", 3215 | "flate2", 3216 | "log", 3217 | "once_cell", 3218 | "rustls", 3219 | "rustls-pki-types", 3220 | "url", 3221 | "webpki-roots", 3222 | ] 3223 | 3224 | [[package]] 3225 | name = "url" 3226 | version = "2.5.4" 3227 | source = "registry+https://github.com/rust-lang/crates.io-index" 3228 | checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 3229 | dependencies = [ 3230 | "form_urlencoded", 3231 | "idna", 3232 | "percent-encoding", 3233 | ] 3234 | 3235 | [[package]] 3236 | name = "usvg" 3237 | version = "0.45.1" 3238 | source = "registry+https://github.com/rust-lang/crates.io-index" 3239 | checksum = "80be9b06fbae3b8b303400ab20778c80bbaf338f563afe567cf3c9eea17b47ef" 3240 | dependencies = [ 3241 | "base64", 3242 | "data-url", 3243 | "flate2", 3244 | "imagesize", 3245 | "kurbo", 3246 | "log", 3247 | "pico-args", 3248 | "roxmltree", 3249 | "simplecss", 3250 | "siphasher", 3251 | "strict-num", 3252 | "svgtypes", 3253 | "tiny-skia-path", 3254 | "xmlwriter", 3255 | ] 3256 | 3257 | [[package]] 3258 | name = "utf16_iter" 3259 | version = "1.0.5" 3260 | source = "registry+https://github.com/rust-lang/crates.io-index" 3261 | checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" 3262 | 3263 | [[package]] 3264 | name = "utf8_iter" 3265 | version = "1.0.4" 3266 | source = "registry+https://github.com/rust-lang/crates.io-index" 3267 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 3268 | 3269 | [[package]] 3270 | name = "version_check" 3271 | version = "0.9.5" 3272 | source = "registry+https://github.com/rust-lang/crates.io-index" 3273 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 3274 | 3275 | [[package]] 3276 | name = "walkdir" 3277 | version = "2.5.0" 3278 | source = "registry+https://github.com/rust-lang/crates.io-index" 3279 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 3280 | dependencies = [ 3281 | "same-file", 3282 | "winapi-util", 3283 | ] 3284 | 3285 | [[package]] 3286 | name = "wasi" 3287 | version = "0.11.0+wasi-snapshot-preview1" 3288 | source = "registry+https://github.com/rust-lang/crates.io-index" 3289 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 3290 | 3291 | [[package]] 3292 | name = "wasi" 3293 | version = "0.14.7+wasi-0.2.4" 3294 | source = "registry+https://github.com/rust-lang/crates.io-index" 3295 | checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" 3296 | dependencies = [ 3297 | "wasip2", 3298 | ] 3299 | 3300 | [[package]] 3301 | name = "wasip2" 3302 | version = "1.0.1+wasi-0.2.4" 3303 | source = "registry+https://github.com/rust-lang/crates.io-index" 3304 | checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" 3305 | dependencies = [ 3306 | "wit-bindgen", 3307 | ] 3308 | 3309 | [[package]] 3310 | name = "wasm-bindgen" 3311 | version = "0.2.104" 3312 | source = "registry+https://github.com/rust-lang/crates.io-index" 3313 | checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" 3314 | dependencies = [ 3315 | "cfg-if", 3316 | "once_cell", 3317 | "rustversion", 3318 | "wasm-bindgen-macro", 3319 | "wasm-bindgen-shared", 3320 | ] 3321 | 3322 | [[package]] 3323 | name = "wasm-bindgen-backend" 3324 | version = "0.2.104" 3325 | source = "registry+https://github.com/rust-lang/crates.io-index" 3326 | checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" 3327 | dependencies = [ 3328 | "bumpalo", 3329 | "log", 3330 | "proc-macro2", 3331 | "quote", 3332 | "syn", 3333 | "wasm-bindgen-shared", 3334 | ] 3335 | 3336 | [[package]] 3337 | name = "wasm-bindgen-futures" 3338 | version = "0.4.54" 3339 | source = "registry+https://github.com/rust-lang/crates.io-index" 3340 | checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" 3341 | dependencies = [ 3342 | "cfg-if", 3343 | "js-sys", 3344 | "once_cell", 3345 | "wasm-bindgen", 3346 | "web-sys", 3347 | ] 3348 | 3349 | [[package]] 3350 | name = "wasm-bindgen-macro" 3351 | version = "0.2.104" 3352 | source = "registry+https://github.com/rust-lang/crates.io-index" 3353 | checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" 3354 | dependencies = [ 3355 | "quote", 3356 | "wasm-bindgen-macro-support", 3357 | ] 3358 | 3359 | [[package]] 3360 | name = "wasm-bindgen-macro-support" 3361 | version = "0.2.104" 3362 | source = "registry+https://github.com/rust-lang/crates.io-index" 3363 | checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" 3364 | dependencies = [ 3365 | "proc-macro2", 3366 | "quote", 3367 | "syn", 3368 | "wasm-bindgen-backend", 3369 | "wasm-bindgen-shared", 3370 | ] 3371 | 3372 | [[package]] 3373 | name = "wasm-bindgen-shared" 3374 | version = "0.2.104" 3375 | source = "registry+https://github.com/rust-lang/crates.io-index" 3376 | checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" 3377 | dependencies = [ 3378 | "unicode-ident", 3379 | ] 3380 | 3381 | [[package]] 3382 | name = "wayland-backend" 3383 | version = "0.3.11" 3384 | source = "registry+https://github.com/rust-lang/crates.io-index" 3385 | checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35" 3386 | dependencies = [ 3387 | "cc", 3388 | "downcast-rs", 3389 | "rustix 1.1.2", 3390 | "scoped-tls", 3391 | "smallvec", 3392 | "wayland-sys", 3393 | ] 3394 | 3395 | [[package]] 3396 | name = "wayland-client" 3397 | version = "0.31.11" 3398 | source = "registry+https://github.com/rust-lang/crates.io-index" 3399 | checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" 3400 | dependencies = [ 3401 | "bitflags 2.9.4", 3402 | "rustix 1.1.2", 3403 | "wayland-backend", 3404 | "wayland-scanner", 3405 | ] 3406 | 3407 | [[package]] 3408 | name = "wayland-csd-frame" 3409 | version = "0.3.0" 3410 | source = "registry+https://github.com/rust-lang/crates.io-index" 3411 | checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" 3412 | dependencies = [ 3413 | "bitflags 2.9.4", 3414 | "cursor-icon", 3415 | "wayland-backend", 3416 | ] 3417 | 3418 | [[package]] 3419 | name = "wayland-cursor" 3420 | version = "0.31.7" 3421 | source = "registry+https://github.com/rust-lang/crates.io-index" 3422 | checksum = "32b08bc3aafdb0035e7fe0fdf17ba0c09c268732707dca4ae098f60cb28c9e4c" 3423 | dependencies = [ 3424 | "rustix 0.38.42", 3425 | "wayland-client", 3426 | "xcursor", 3427 | ] 3428 | 3429 | [[package]] 3430 | name = "wayland-protocols" 3431 | version = "0.32.9" 3432 | source = "registry+https://github.com/rust-lang/crates.io-index" 3433 | checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" 3434 | dependencies = [ 3435 | "bitflags 2.9.4", 3436 | "wayland-backend", 3437 | "wayland-client", 3438 | "wayland-scanner", 3439 | ] 3440 | 3441 | [[package]] 3442 | name = "wayland-protocols-plasma" 3443 | version = "0.3.9" 3444 | source = "registry+https://github.com/rust-lang/crates.io-index" 3445 | checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032" 3446 | dependencies = [ 3447 | "bitflags 2.9.4", 3448 | "wayland-backend", 3449 | "wayland-client", 3450 | "wayland-protocols", 3451 | "wayland-scanner", 3452 | ] 3453 | 3454 | [[package]] 3455 | name = "wayland-protocols-wlr" 3456 | version = "0.3.5" 3457 | source = "registry+https://github.com/rust-lang/crates.io-index" 3458 | checksum = "782e12f6cd923c3c316130d56205ebab53f55d6666b7faddfad36cecaeeb4022" 3459 | dependencies = [ 3460 | "bitflags 2.9.4", 3461 | "wayland-backend", 3462 | "wayland-client", 3463 | "wayland-protocols", 3464 | "wayland-scanner", 3465 | ] 3466 | 3467 | [[package]] 3468 | name = "wayland-scanner" 3469 | version = "0.31.7" 3470 | source = "registry+https://github.com/rust-lang/crates.io-index" 3471 | checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3" 3472 | dependencies = [ 3473 | "proc-macro2", 3474 | "quick-xml 0.37.5", 3475 | "quote", 3476 | ] 3477 | 3478 | [[package]] 3479 | name = "wayland-sys" 3480 | version = "0.31.7" 3481 | source = "registry+https://github.com/rust-lang/crates.io-index" 3482 | checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142" 3483 | dependencies = [ 3484 | "dlib", 3485 | "log", 3486 | "once_cell", 3487 | "pkg-config", 3488 | ] 3489 | 3490 | [[package]] 3491 | name = "web-sys" 3492 | version = "0.3.81" 3493 | source = "registry+https://github.com/rust-lang/crates.io-index" 3494 | checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" 3495 | dependencies = [ 3496 | "js-sys", 3497 | "wasm-bindgen", 3498 | ] 3499 | 3500 | [[package]] 3501 | name = "web-time" 3502 | version = "1.1.0" 3503 | source = "registry+https://github.com/rust-lang/crates.io-index" 3504 | checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" 3505 | dependencies = [ 3506 | "js-sys", 3507 | "wasm-bindgen", 3508 | ] 3509 | 3510 | [[package]] 3511 | name = "webbrowser" 3512 | version = "1.0.5" 3513 | source = "registry+https://github.com/rust-lang/crates.io-index" 3514 | checksum = "aaf4f3c0ba838e82b4e5ccc4157003fb8c324ee24c058470ffb82820becbde98" 3515 | dependencies = [ 3516 | "core-foundation 0.10.0", 3517 | "jni", 3518 | "log", 3519 | "ndk-context", 3520 | "objc2 0.6.3", 3521 | "objc2-foundation 0.3.2", 3522 | "url", 3523 | "web-sys", 3524 | ] 3525 | 3526 | [[package]] 3527 | name = "webpki-roots" 3528 | version = "0.26.7" 3529 | source = "registry+https://github.com/rust-lang/crates.io-index" 3530 | checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" 3531 | dependencies = [ 3532 | "rustls-pki-types", 3533 | ] 3534 | 3535 | [[package]] 3536 | name = "weezl" 3537 | version = "0.1.10" 3538 | source = "registry+https://github.com/rust-lang/crates.io-index" 3539 | checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" 3540 | 3541 | [[package]] 3542 | name = "wgpu" 3543 | version = "27.0.1" 3544 | source = "registry+https://github.com/rust-lang/crates.io-index" 3545 | checksum = "bfe68bac7cde125de7a731c3400723cadaaf1703795ad3f4805f187459cd7a77" 3546 | dependencies = [ 3547 | "arrayvec", 3548 | "bitflags 2.9.4", 3549 | "cfg-if", 3550 | "cfg_aliases", 3551 | "document-features", 3552 | "hashbrown 0.16.0", 3553 | "js-sys", 3554 | "log", 3555 | "naga", 3556 | "parking_lot", 3557 | "portable-atomic", 3558 | "profiling", 3559 | "raw-window-handle", 3560 | "smallvec", 3561 | "static_assertions", 3562 | "wasm-bindgen", 3563 | "wasm-bindgen-futures", 3564 | "web-sys", 3565 | "wgpu-core", 3566 | "wgpu-hal", 3567 | "wgpu-types", 3568 | ] 3569 | 3570 | [[package]] 3571 | name = "wgpu-core" 3572 | version = "27.0.1" 3573 | source = "registry+https://github.com/rust-lang/crates.io-index" 3574 | checksum = "e3d654c0b6c6335edfca18c11bdaed964def641b8e9997d3a495a2ff4077c922" 3575 | dependencies = [ 3576 | "arrayvec", 3577 | "bit-set", 3578 | "bit-vec", 3579 | "bitflags 2.9.4", 3580 | "bytemuck", 3581 | "cfg_aliases", 3582 | "document-features", 3583 | "hashbrown 0.16.0", 3584 | "indexmap", 3585 | "log", 3586 | "naga", 3587 | "once_cell", 3588 | "parking_lot", 3589 | "portable-atomic", 3590 | "profiling", 3591 | "raw-window-handle", 3592 | "rustc-hash 1.1.0", 3593 | "smallvec", 3594 | "thiserror 2.0.17", 3595 | "wgpu-core-deps-apple", 3596 | "wgpu-core-deps-emscripten", 3597 | "wgpu-core-deps-windows-linux-android", 3598 | "wgpu-hal", 3599 | "wgpu-types", 3600 | ] 3601 | 3602 | [[package]] 3603 | name = "wgpu-core-deps-apple" 3604 | version = "27.0.0" 3605 | source = "registry+https://github.com/rust-lang/crates.io-index" 3606 | checksum = "0772ae958e9be0c729561d5e3fd9a19679bcdfb945b8b1a1969d9bfe8056d233" 3607 | dependencies = [ 3608 | "wgpu-hal", 3609 | ] 3610 | 3611 | [[package]] 3612 | name = "wgpu-core-deps-emscripten" 3613 | version = "27.0.0" 3614 | source = "registry+https://github.com/rust-lang/crates.io-index" 3615 | checksum = "b06ac3444a95b0813ecfd81ddb2774b66220b264b3e2031152a4a29fda4da6b5" 3616 | dependencies = [ 3617 | "wgpu-hal", 3618 | ] 3619 | 3620 | [[package]] 3621 | name = "wgpu-core-deps-windows-linux-android" 3622 | version = "27.0.0" 3623 | source = "registry+https://github.com/rust-lang/crates.io-index" 3624 | checksum = "71197027d61a71748e4120f05a9242b2ad142e3c01f8c1b47707945a879a03c3" 3625 | dependencies = [ 3626 | "wgpu-hal", 3627 | ] 3628 | 3629 | [[package]] 3630 | name = "wgpu-hal" 3631 | version = "27.0.2" 3632 | source = "registry+https://github.com/rust-lang/crates.io-index" 3633 | checksum = "2618a2d6b8a5964ecc1ac32a5db56cb3b1e518725fcd773fd9a782e023453f2b" 3634 | dependencies = [ 3635 | "android_system_properties", 3636 | "arrayvec", 3637 | "ash", 3638 | "bit-set", 3639 | "bitflags 2.9.4", 3640 | "block", 3641 | "bytemuck", 3642 | "cfg-if", 3643 | "cfg_aliases", 3644 | "core-graphics-types 0.2.0", 3645 | "glow", 3646 | "glutin_wgl_sys", 3647 | "gpu-alloc", 3648 | "gpu-allocator", 3649 | "gpu-descriptor", 3650 | "hashbrown 0.16.0", 3651 | "js-sys", 3652 | "khronos-egl", 3653 | "libc", 3654 | "libloading", 3655 | "log", 3656 | "metal", 3657 | "naga", 3658 | "ndk-sys", 3659 | "objc", 3660 | "once_cell", 3661 | "ordered-float", 3662 | "parking_lot", 3663 | "portable-atomic", 3664 | "portable-atomic-util", 3665 | "profiling", 3666 | "range-alloc", 3667 | "raw-window-handle", 3668 | "renderdoc-sys", 3669 | "smallvec", 3670 | "thiserror 2.0.17", 3671 | "wasm-bindgen", 3672 | "web-sys", 3673 | "wgpu-types", 3674 | "windows 0.58.0", 3675 | "windows-core 0.58.0", 3676 | ] 3677 | 3678 | [[package]] 3679 | name = "wgpu-types" 3680 | version = "27.0.1" 3681 | source = "registry+https://github.com/rust-lang/crates.io-index" 3682 | checksum = "afdcf84c395990db737f2dd91628706cb31e86d72e53482320d368e52b5da5eb" 3683 | dependencies = [ 3684 | "bitflags 2.9.4", 3685 | "bytemuck", 3686 | "js-sys", 3687 | "log", 3688 | "thiserror 2.0.17", 3689 | "web-sys", 3690 | ] 3691 | 3692 | [[package]] 3693 | name = "winapi" 3694 | version = "0.3.9" 3695 | source = "registry+https://github.com/rust-lang/crates.io-index" 3696 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 3697 | dependencies = [ 3698 | "winapi-i686-pc-windows-gnu", 3699 | "winapi-x86_64-pc-windows-gnu", 3700 | ] 3701 | 3702 | [[package]] 3703 | name = "winapi-i686-pc-windows-gnu" 3704 | version = "0.4.0" 3705 | source = "registry+https://github.com/rust-lang/crates.io-index" 3706 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 3707 | 3708 | [[package]] 3709 | name = "winapi-util" 3710 | version = "0.1.9" 3711 | source = "registry+https://github.com/rust-lang/crates.io-index" 3712 | checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 3713 | dependencies = [ 3714 | "windows-sys 0.59.0", 3715 | ] 3716 | 3717 | [[package]] 3718 | name = "winapi-x86_64-pc-windows-gnu" 3719 | version = "0.4.0" 3720 | source = "registry+https://github.com/rust-lang/crates.io-index" 3721 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 3722 | 3723 | [[package]] 3724 | name = "windows" 3725 | version = "0.58.0" 3726 | source = "registry+https://github.com/rust-lang/crates.io-index" 3727 | checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" 3728 | dependencies = [ 3729 | "windows-core 0.58.0", 3730 | "windows-targets 0.52.6", 3731 | ] 3732 | 3733 | [[package]] 3734 | name = "windows" 3735 | version = "0.61.3" 3736 | source = "registry+https://github.com/rust-lang/crates.io-index" 3737 | checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" 3738 | dependencies = [ 3739 | "windows-collections", 3740 | "windows-core 0.61.2", 3741 | "windows-future", 3742 | "windows-link 0.1.3", 3743 | "windows-numerics", 3744 | ] 3745 | 3746 | [[package]] 3747 | name = "windows-collections" 3748 | version = "0.2.0" 3749 | source = "registry+https://github.com/rust-lang/crates.io-index" 3750 | checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" 3751 | dependencies = [ 3752 | "windows-core 0.61.2", 3753 | ] 3754 | 3755 | [[package]] 3756 | name = "windows-core" 3757 | version = "0.58.0" 3758 | source = "registry+https://github.com/rust-lang/crates.io-index" 3759 | checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" 3760 | dependencies = [ 3761 | "windows-implement 0.58.0", 3762 | "windows-interface 0.58.0", 3763 | "windows-result 0.2.0", 3764 | "windows-strings 0.1.0", 3765 | "windows-targets 0.52.6", 3766 | ] 3767 | 3768 | [[package]] 3769 | name = "windows-core" 3770 | version = "0.61.2" 3771 | source = "registry+https://github.com/rust-lang/crates.io-index" 3772 | checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" 3773 | dependencies = [ 3774 | "windows-implement 0.60.2", 3775 | "windows-interface 0.59.3", 3776 | "windows-link 0.1.3", 3777 | "windows-result 0.3.4", 3778 | "windows-strings 0.4.2", 3779 | ] 3780 | 3781 | [[package]] 3782 | name = "windows-future" 3783 | version = "0.2.1" 3784 | source = "registry+https://github.com/rust-lang/crates.io-index" 3785 | checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" 3786 | dependencies = [ 3787 | "windows-core 0.61.2", 3788 | "windows-link 0.1.3", 3789 | "windows-threading", 3790 | ] 3791 | 3792 | [[package]] 3793 | name = "windows-implement" 3794 | version = "0.58.0" 3795 | source = "registry+https://github.com/rust-lang/crates.io-index" 3796 | checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" 3797 | dependencies = [ 3798 | "proc-macro2", 3799 | "quote", 3800 | "syn", 3801 | ] 3802 | 3803 | [[package]] 3804 | name = "windows-implement" 3805 | version = "0.60.2" 3806 | source = "registry+https://github.com/rust-lang/crates.io-index" 3807 | checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" 3808 | dependencies = [ 3809 | "proc-macro2", 3810 | "quote", 3811 | "syn", 3812 | ] 3813 | 3814 | [[package]] 3815 | name = "windows-interface" 3816 | version = "0.58.0" 3817 | source = "registry+https://github.com/rust-lang/crates.io-index" 3818 | checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" 3819 | dependencies = [ 3820 | "proc-macro2", 3821 | "quote", 3822 | "syn", 3823 | ] 3824 | 3825 | [[package]] 3826 | name = "windows-interface" 3827 | version = "0.59.3" 3828 | source = "registry+https://github.com/rust-lang/crates.io-index" 3829 | checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" 3830 | dependencies = [ 3831 | "proc-macro2", 3832 | "quote", 3833 | "syn", 3834 | ] 3835 | 3836 | [[package]] 3837 | name = "windows-link" 3838 | version = "0.1.3" 3839 | source = "registry+https://github.com/rust-lang/crates.io-index" 3840 | checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" 3841 | 3842 | [[package]] 3843 | name = "windows-link" 3844 | version = "0.2.1" 3845 | source = "registry+https://github.com/rust-lang/crates.io-index" 3846 | checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" 3847 | 3848 | [[package]] 3849 | name = "windows-numerics" 3850 | version = "0.2.0" 3851 | source = "registry+https://github.com/rust-lang/crates.io-index" 3852 | checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" 3853 | dependencies = [ 3854 | "windows-core 0.61.2", 3855 | "windows-link 0.1.3", 3856 | ] 3857 | 3858 | [[package]] 3859 | name = "windows-result" 3860 | version = "0.2.0" 3861 | source = "registry+https://github.com/rust-lang/crates.io-index" 3862 | checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" 3863 | dependencies = [ 3864 | "windows-targets 0.52.6", 3865 | ] 3866 | 3867 | [[package]] 3868 | name = "windows-result" 3869 | version = "0.3.4" 3870 | source = "registry+https://github.com/rust-lang/crates.io-index" 3871 | checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 3872 | dependencies = [ 3873 | "windows-link 0.1.3", 3874 | ] 3875 | 3876 | [[package]] 3877 | name = "windows-strings" 3878 | version = "0.1.0" 3879 | source = "registry+https://github.com/rust-lang/crates.io-index" 3880 | checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" 3881 | dependencies = [ 3882 | "windows-result 0.2.0", 3883 | "windows-targets 0.52.6", 3884 | ] 3885 | 3886 | [[package]] 3887 | name = "windows-strings" 3888 | version = "0.4.2" 3889 | source = "registry+https://github.com/rust-lang/crates.io-index" 3890 | checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 3891 | dependencies = [ 3892 | "windows-link 0.1.3", 3893 | ] 3894 | 3895 | [[package]] 3896 | name = "windows-sys" 3897 | version = "0.45.0" 3898 | source = "registry+https://github.com/rust-lang/crates.io-index" 3899 | checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 3900 | dependencies = [ 3901 | "windows-targets 0.42.2", 3902 | ] 3903 | 3904 | [[package]] 3905 | name = "windows-sys" 3906 | version = "0.52.0" 3907 | source = "registry+https://github.com/rust-lang/crates.io-index" 3908 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 3909 | dependencies = [ 3910 | "windows-targets 0.52.6", 3911 | ] 3912 | 3913 | [[package]] 3914 | name = "windows-sys" 3915 | version = "0.59.0" 3916 | source = "registry+https://github.com/rust-lang/crates.io-index" 3917 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 3918 | dependencies = [ 3919 | "windows-targets 0.52.6", 3920 | ] 3921 | 3922 | [[package]] 3923 | name = "windows-sys" 3924 | version = "0.60.2" 3925 | source = "registry+https://github.com/rust-lang/crates.io-index" 3926 | checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" 3927 | dependencies = [ 3928 | "windows-targets 0.53.5", 3929 | ] 3930 | 3931 | [[package]] 3932 | name = "windows-sys" 3933 | version = "0.61.2" 3934 | source = "registry+https://github.com/rust-lang/crates.io-index" 3935 | checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" 3936 | dependencies = [ 3937 | "windows-link 0.2.1", 3938 | ] 3939 | 3940 | [[package]] 3941 | name = "windows-targets" 3942 | version = "0.42.2" 3943 | source = "registry+https://github.com/rust-lang/crates.io-index" 3944 | checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" 3945 | dependencies = [ 3946 | "windows_aarch64_gnullvm 0.42.2", 3947 | "windows_aarch64_msvc 0.42.2", 3948 | "windows_i686_gnu 0.42.2", 3949 | "windows_i686_msvc 0.42.2", 3950 | "windows_x86_64_gnu 0.42.2", 3951 | "windows_x86_64_gnullvm 0.42.2", 3952 | "windows_x86_64_msvc 0.42.2", 3953 | ] 3954 | 3955 | [[package]] 3956 | name = "windows-targets" 3957 | version = "0.48.5" 3958 | source = "registry+https://github.com/rust-lang/crates.io-index" 3959 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 3960 | dependencies = [ 3961 | "windows_aarch64_gnullvm 0.48.5", 3962 | "windows_aarch64_msvc 0.48.5", 3963 | "windows_i686_gnu 0.48.5", 3964 | "windows_i686_msvc 0.48.5", 3965 | "windows_x86_64_gnu 0.48.5", 3966 | "windows_x86_64_gnullvm 0.48.5", 3967 | "windows_x86_64_msvc 0.48.5", 3968 | ] 3969 | 3970 | [[package]] 3971 | name = "windows-targets" 3972 | version = "0.52.6" 3973 | source = "registry+https://github.com/rust-lang/crates.io-index" 3974 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 3975 | dependencies = [ 3976 | "windows_aarch64_gnullvm 0.52.6", 3977 | "windows_aarch64_msvc 0.52.6", 3978 | "windows_i686_gnu 0.52.6", 3979 | "windows_i686_gnullvm 0.52.6", 3980 | "windows_i686_msvc 0.52.6", 3981 | "windows_x86_64_gnu 0.52.6", 3982 | "windows_x86_64_gnullvm 0.52.6", 3983 | "windows_x86_64_msvc 0.52.6", 3984 | ] 3985 | 3986 | [[package]] 3987 | name = "windows-targets" 3988 | version = "0.53.5" 3989 | source = "registry+https://github.com/rust-lang/crates.io-index" 3990 | checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" 3991 | dependencies = [ 3992 | "windows-link 0.2.1", 3993 | "windows_aarch64_gnullvm 0.53.1", 3994 | "windows_aarch64_msvc 0.53.1", 3995 | "windows_i686_gnu 0.53.1", 3996 | "windows_i686_gnullvm 0.53.1", 3997 | "windows_i686_msvc 0.53.1", 3998 | "windows_x86_64_gnu 0.53.1", 3999 | "windows_x86_64_gnullvm 0.53.1", 4000 | "windows_x86_64_msvc 0.53.1", 4001 | ] 4002 | 4003 | [[package]] 4004 | name = "windows-threading" 4005 | version = "0.1.0" 4006 | source = "registry+https://github.com/rust-lang/crates.io-index" 4007 | checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" 4008 | dependencies = [ 4009 | "windows-link 0.1.3", 4010 | ] 4011 | 4012 | [[package]] 4013 | name = "windows_aarch64_gnullvm" 4014 | version = "0.42.2" 4015 | source = "registry+https://github.com/rust-lang/crates.io-index" 4016 | checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" 4017 | 4018 | [[package]] 4019 | name = "windows_aarch64_gnullvm" 4020 | version = "0.48.5" 4021 | source = "registry+https://github.com/rust-lang/crates.io-index" 4022 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 4023 | 4024 | [[package]] 4025 | name = "windows_aarch64_gnullvm" 4026 | version = "0.52.6" 4027 | source = "registry+https://github.com/rust-lang/crates.io-index" 4028 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 4029 | 4030 | [[package]] 4031 | name = "windows_aarch64_gnullvm" 4032 | version = "0.53.1" 4033 | source = "registry+https://github.com/rust-lang/crates.io-index" 4034 | checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" 4035 | 4036 | [[package]] 4037 | name = "windows_aarch64_msvc" 4038 | version = "0.42.2" 4039 | source = "registry+https://github.com/rust-lang/crates.io-index" 4040 | checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" 4041 | 4042 | [[package]] 4043 | name = "windows_aarch64_msvc" 4044 | version = "0.48.5" 4045 | source = "registry+https://github.com/rust-lang/crates.io-index" 4046 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 4047 | 4048 | [[package]] 4049 | name = "windows_aarch64_msvc" 4050 | version = "0.52.6" 4051 | source = "registry+https://github.com/rust-lang/crates.io-index" 4052 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 4053 | 4054 | [[package]] 4055 | name = "windows_aarch64_msvc" 4056 | version = "0.53.1" 4057 | source = "registry+https://github.com/rust-lang/crates.io-index" 4058 | checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" 4059 | 4060 | [[package]] 4061 | name = "windows_i686_gnu" 4062 | version = "0.42.2" 4063 | source = "registry+https://github.com/rust-lang/crates.io-index" 4064 | checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" 4065 | 4066 | [[package]] 4067 | name = "windows_i686_gnu" 4068 | version = "0.48.5" 4069 | source = "registry+https://github.com/rust-lang/crates.io-index" 4070 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 4071 | 4072 | [[package]] 4073 | name = "windows_i686_gnu" 4074 | version = "0.52.6" 4075 | source = "registry+https://github.com/rust-lang/crates.io-index" 4076 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 4077 | 4078 | [[package]] 4079 | name = "windows_i686_gnu" 4080 | version = "0.53.1" 4081 | source = "registry+https://github.com/rust-lang/crates.io-index" 4082 | checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" 4083 | 4084 | [[package]] 4085 | name = "windows_i686_gnullvm" 4086 | version = "0.52.6" 4087 | source = "registry+https://github.com/rust-lang/crates.io-index" 4088 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 4089 | 4090 | [[package]] 4091 | name = "windows_i686_gnullvm" 4092 | version = "0.53.1" 4093 | source = "registry+https://github.com/rust-lang/crates.io-index" 4094 | checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" 4095 | 4096 | [[package]] 4097 | name = "windows_i686_msvc" 4098 | version = "0.42.2" 4099 | source = "registry+https://github.com/rust-lang/crates.io-index" 4100 | checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" 4101 | 4102 | [[package]] 4103 | name = "windows_i686_msvc" 4104 | version = "0.48.5" 4105 | source = "registry+https://github.com/rust-lang/crates.io-index" 4106 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 4107 | 4108 | [[package]] 4109 | name = "windows_i686_msvc" 4110 | version = "0.52.6" 4111 | source = "registry+https://github.com/rust-lang/crates.io-index" 4112 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 4113 | 4114 | [[package]] 4115 | name = "windows_i686_msvc" 4116 | version = "0.53.1" 4117 | source = "registry+https://github.com/rust-lang/crates.io-index" 4118 | checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" 4119 | 4120 | [[package]] 4121 | name = "windows_x86_64_gnu" 4122 | version = "0.42.2" 4123 | source = "registry+https://github.com/rust-lang/crates.io-index" 4124 | checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" 4125 | 4126 | [[package]] 4127 | name = "windows_x86_64_gnu" 4128 | version = "0.48.5" 4129 | source = "registry+https://github.com/rust-lang/crates.io-index" 4130 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 4131 | 4132 | [[package]] 4133 | name = "windows_x86_64_gnu" 4134 | version = "0.52.6" 4135 | source = "registry+https://github.com/rust-lang/crates.io-index" 4136 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 4137 | 4138 | [[package]] 4139 | name = "windows_x86_64_gnu" 4140 | version = "0.53.1" 4141 | source = "registry+https://github.com/rust-lang/crates.io-index" 4142 | checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" 4143 | 4144 | [[package]] 4145 | name = "windows_x86_64_gnullvm" 4146 | version = "0.42.2" 4147 | source = "registry+https://github.com/rust-lang/crates.io-index" 4148 | checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" 4149 | 4150 | [[package]] 4151 | name = "windows_x86_64_gnullvm" 4152 | version = "0.48.5" 4153 | source = "registry+https://github.com/rust-lang/crates.io-index" 4154 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 4155 | 4156 | [[package]] 4157 | name = "windows_x86_64_gnullvm" 4158 | version = "0.52.6" 4159 | source = "registry+https://github.com/rust-lang/crates.io-index" 4160 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 4161 | 4162 | [[package]] 4163 | name = "windows_x86_64_gnullvm" 4164 | version = "0.53.1" 4165 | source = "registry+https://github.com/rust-lang/crates.io-index" 4166 | checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" 4167 | 4168 | [[package]] 4169 | name = "windows_x86_64_msvc" 4170 | version = "0.42.2" 4171 | source = "registry+https://github.com/rust-lang/crates.io-index" 4172 | checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" 4173 | 4174 | [[package]] 4175 | name = "windows_x86_64_msvc" 4176 | version = "0.48.5" 4177 | source = "registry+https://github.com/rust-lang/crates.io-index" 4178 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 4179 | 4180 | [[package]] 4181 | name = "windows_x86_64_msvc" 4182 | version = "0.52.6" 4183 | source = "registry+https://github.com/rust-lang/crates.io-index" 4184 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 4185 | 4186 | [[package]] 4187 | name = "windows_x86_64_msvc" 4188 | version = "0.53.1" 4189 | source = "registry+https://github.com/rust-lang/crates.io-index" 4190 | checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" 4191 | 4192 | [[package]] 4193 | name = "winit" 4194 | version = "0.30.12" 4195 | source = "registry+https://github.com/rust-lang/crates.io-index" 4196 | checksum = "c66d4b9ed69c4009f6321f762d6e61ad8a2389cd431b97cb1e146812e9e6c732" 4197 | dependencies = [ 4198 | "ahash", 4199 | "android-activity", 4200 | "atomic-waker", 4201 | "bitflags 2.9.4", 4202 | "block2", 4203 | "bytemuck", 4204 | "calloop", 4205 | "cfg_aliases", 4206 | "concurrent-queue", 4207 | "core-foundation 0.9.4", 4208 | "core-graphics", 4209 | "cursor-icon", 4210 | "dpi", 4211 | "js-sys", 4212 | "libc", 4213 | "memmap2", 4214 | "ndk", 4215 | "objc2 0.5.2", 4216 | "objc2-app-kit 0.2.2", 4217 | "objc2-foundation 0.2.2", 4218 | "objc2-ui-kit", 4219 | "orbclient", 4220 | "percent-encoding", 4221 | "pin-project", 4222 | "raw-window-handle", 4223 | "redox_syscall 0.4.1", 4224 | "rustix 0.38.42", 4225 | "sctk-adwaita", 4226 | "smithay-client-toolkit", 4227 | "smol_str", 4228 | "tracing", 4229 | "unicode-segmentation", 4230 | "wasm-bindgen", 4231 | "wasm-bindgen-futures", 4232 | "wayland-backend", 4233 | "wayland-client", 4234 | "wayland-protocols", 4235 | "wayland-protocols-plasma", 4236 | "web-sys", 4237 | "web-time", 4238 | "windows-sys 0.52.0", 4239 | "x11-dl", 4240 | "x11rb", 4241 | "xkbcommon-dl", 4242 | ] 4243 | 4244 | [[package]] 4245 | name = "winnow" 4246 | version = "0.6.20" 4247 | source = "registry+https://github.com/rust-lang/crates.io-index" 4248 | checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" 4249 | dependencies = [ 4250 | "memchr", 4251 | ] 4252 | 4253 | [[package]] 4254 | name = "winnow" 4255 | version = "0.7.13" 4256 | source = "registry+https://github.com/rust-lang/crates.io-index" 4257 | checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" 4258 | dependencies = [ 4259 | "memchr", 4260 | ] 4261 | 4262 | [[package]] 4263 | name = "wit-bindgen" 4264 | version = "0.46.0" 4265 | source = "registry+https://github.com/rust-lang/crates.io-index" 4266 | checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" 4267 | 4268 | [[package]] 4269 | name = "write16" 4270 | version = "1.0.0" 4271 | source = "registry+https://github.com/rust-lang/crates.io-index" 4272 | checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" 4273 | 4274 | [[package]] 4275 | name = "writeable" 4276 | version = "0.5.5" 4277 | source = "registry+https://github.com/rust-lang/crates.io-index" 4278 | checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" 4279 | 4280 | [[package]] 4281 | name = "x11-dl" 4282 | version = "2.21.0" 4283 | source = "registry+https://github.com/rust-lang/crates.io-index" 4284 | checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" 4285 | dependencies = [ 4286 | "libc", 4287 | "once_cell", 4288 | "pkg-config", 4289 | ] 4290 | 4291 | [[package]] 4292 | name = "x11rb" 4293 | version = "0.13.1" 4294 | source = "registry+https://github.com/rust-lang/crates.io-index" 4295 | checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" 4296 | dependencies = [ 4297 | "as-raw-xcb-connection", 4298 | "gethostname", 4299 | "libc", 4300 | "libloading", 4301 | "once_cell", 4302 | "rustix 0.38.42", 4303 | "x11rb-protocol", 4304 | ] 4305 | 4306 | [[package]] 4307 | name = "x11rb-protocol" 4308 | version = "0.13.1" 4309 | source = "registry+https://github.com/rust-lang/crates.io-index" 4310 | checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" 4311 | 4312 | [[package]] 4313 | name = "xcursor" 4314 | version = "0.3.8" 4315 | source = "registry+https://github.com/rust-lang/crates.io-index" 4316 | checksum = "0ef33da6b1660b4ddbfb3aef0ade110c8b8a781a3b6382fa5f2b5b040fd55f61" 4317 | 4318 | [[package]] 4319 | name = "xkbcommon-dl" 4320 | version = "0.4.2" 4321 | source = "registry+https://github.com/rust-lang/crates.io-index" 4322 | checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" 4323 | dependencies = [ 4324 | "bitflags 2.9.4", 4325 | "dlib", 4326 | "log", 4327 | "once_cell", 4328 | "xkeysym", 4329 | ] 4330 | 4331 | [[package]] 4332 | name = "xkeysym" 4333 | version = "0.2.1" 4334 | source = "registry+https://github.com/rust-lang/crates.io-index" 4335 | checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" 4336 | 4337 | [[package]] 4338 | name = "xml-rs" 4339 | version = "0.8.24" 4340 | source = "registry+https://github.com/rust-lang/crates.io-index" 4341 | checksum = "ea8b391c9a790b496184c29f7f93b9ed5b16abb306c05415b68bcc16e4d06432" 4342 | 4343 | [[package]] 4344 | name = "xmlwriter" 4345 | version = "0.1.0" 4346 | source = "registry+https://github.com/rust-lang/crates.io-index" 4347 | checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" 4348 | 4349 | [[package]] 4350 | name = "yoke" 4351 | version = "0.7.5" 4352 | source = "registry+https://github.com/rust-lang/crates.io-index" 4353 | checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" 4354 | dependencies = [ 4355 | "serde", 4356 | "stable_deref_trait", 4357 | "yoke-derive", 4358 | "zerofrom", 4359 | ] 4360 | 4361 | [[package]] 4362 | name = "yoke-derive" 4363 | version = "0.7.5" 4364 | source = "registry+https://github.com/rust-lang/crates.io-index" 4365 | checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" 4366 | dependencies = [ 4367 | "proc-macro2", 4368 | "quote", 4369 | "syn", 4370 | "synstructure", 4371 | ] 4372 | 4373 | [[package]] 4374 | name = "zbus" 4375 | version = "5.11.0" 4376 | source = "registry+https://github.com/rust-lang/crates.io-index" 4377 | checksum = "2d07e46d035fb8e375b2ce63ba4e4ff90a7f73cf2ffb0138b29e1158d2eaadf7" 4378 | dependencies = [ 4379 | "async-broadcast", 4380 | "async-executor", 4381 | "async-io", 4382 | "async-lock", 4383 | "async-process", 4384 | "async-recursion", 4385 | "async-task", 4386 | "async-trait", 4387 | "blocking", 4388 | "enumflags2", 4389 | "event-listener", 4390 | "futures-core", 4391 | "futures-lite", 4392 | "hex", 4393 | "nix", 4394 | "ordered-stream", 4395 | "serde", 4396 | "serde_repr", 4397 | "tracing", 4398 | "uds_windows", 4399 | "windows-sys 0.60.2", 4400 | "winnow 0.7.13", 4401 | "zbus_macros", 4402 | "zbus_names", 4403 | "zvariant", 4404 | ] 4405 | 4406 | [[package]] 4407 | name = "zbus-lockstep" 4408 | version = "0.5.1" 4409 | source = "registry+https://github.com/rust-lang/crates.io-index" 4410 | checksum = "29e96e38ded30eeab90b6ba88cb888d70aef4e7489b6cd212c5e5b5ec38045b6" 4411 | dependencies = [ 4412 | "zbus_xml", 4413 | "zvariant", 4414 | ] 4415 | 4416 | [[package]] 4417 | name = "zbus-lockstep-macros" 4418 | version = "0.5.1" 4419 | source = "registry+https://github.com/rust-lang/crates.io-index" 4420 | checksum = "dc6821851fa840b708b4cbbaf6241868cabc85a2dc22f426361b0292bfc0b836" 4421 | dependencies = [ 4422 | "proc-macro2", 4423 | "quote", 4424 | "syn", 4425 | "zbus-lockstep", 4426 | "zbus_xml", 4427 | "zvariant", 4428 | ] 4429 | 4430 | [[package]] 4431 | name = "zbus_macros" 4432 | version = "5.11.0" 4433 | source = "registry+https://github.com/rust-lang/crates.io-index" 4434 | checksum = "57e797a9c847ed3ccc5b6254e8bcce056494b375b511b3d6edcec0aeb4defaca" 4435 | dependencies = [ 4436 | "proc-macro-crate", 4437 | "proc-macro2", 4438 | "quote", 4439 | "syn", 4440 | "zbus_names", 4441 | "zvariant", 4442 | "zvariant_utils", 4443 | ] 4444 | 4445 | [[package]] 4446 | name = "zbus_names" 4447 | version = "4.2.0" 4448 | source = "registry+https://github.com/rust-lang/crates.io-index" 4449 | checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" 4450 | dependencies = [ 4451 | "serde", 4452 | "static_assertions", 4453 | "winnow 0.7.13", 4454 | "zvariant", 4455 | ] 4456 | 4457 | [[package]] 4458 | name = "zbus_xml" 4459 | version = "5.0.2" 4460 | source = "registry+https://github.com/rust-lang/crates.io-index" 4461 | checksum = "589e9a02bfafb9754bb2340a9e3b38f389772684c63d9637e76b1870377bec29" 4462 | dependencies = [ 4463 | "quick-xml 0.36.2", 4464 | "serde", 4465 | "static_assertions", 4466 | "zbus_names", 4467 | "zvariant", 4468 | ] 4469 | 4470 | [[package]] 4471 | name = "zerocopy" 4472 | version = "0.8.27" 4473 | source = "registry+https://github.com/rust-lang/crates.io-index" 4474 | checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" 4475 | dependencies = [ 4476 | "zerocopy-derive", 4477 | ] 4478 | 4479 | [[package]] 4480 | name = "zerocopy-derive" 4481 | version = "0.8.27" 4482 | source = "registry+https://github.com/rust-lang/crates.io-index" 4483 | checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" 4484 | dependencies = [ 4485 | "proc-macro2", 4486 | "quote", 4487 | "syn", 4488 | ] 4489 | 4490 | [[package]] 4491 | name = "zerofrom" 4492 | version = "0.1.5" 4493 | source = "registry+https://github.com/rust-lang/crates.io-index" 4494 | checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" 4495 | dependencies = [ 4496 | "zerofrom-derive", 4497 | ] 4498 | 4499 | [[package]] 4500 | name = "zerofrom-derive" 4501 | version = "0.1.5" 4502 | source = "registry+https://github.com/rust-lang/crates.io-index" 4503 | checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" 4504 | dependencies = [ 4505 | "proc-macro2", 4506 | "quote", 4507 | "syn", 4508 | "synstructure", 4509 | ] 4510 | 4511 | [[package]] 4512 | name = "zeroize" 4513 | version = "1.8.1" 4514 | source = "registry+https://github.com/rust-lang/crates.io-index" 4515 | checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 4516 | 4517 | [[package]] 4518 | name = "zerovec" 4519 | version = "0.10.4" 4520 | source = "registry+https://github.com/rust-lang/crates.io-index" 4521 | checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" 4522 | dependencies = [ 4523 | "yoke", 4524 | "zerofrom", 4525 | "zerovec-derive", 4526 | ] 4527 | 4528 | [[package]] 4529 | name = "zerovec-derive" 4530 | version = "0.10.3" 4531 | source = "registry+https://github.com/rust-lang/crates.io-index" 4532 | checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" 4533 | dependencies = [ 4534 | "proc-macro2", 4535 | "quote", 4536 | "syn", 4537 | ] 4538 | 4539 | [[package]] 4540 | name = "zune-core" 4541 | version = "0.4.12" 4542 | source = "registry+https://github.com/rust-lang/crates.io-index" 4543 | checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" 4544 | 4545 | [[package]] 4546 | name = "zune-jpeg" 4547 | version = "0.4.21" 4548 | source = "registry+https://github.com/rust-lang/crates.io-index" 4549 | checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" 4550 | dependencies = [ 4551 | "zune-core", 4552 | ] 4553 | 4554 | [[package]] 4555 | name = "zvariant" 4556 | version = "5.7.0" 4557 | source = "registry+https://github.com/rust-lang/crates.io-index" 4558 | checksum = "999dd3be73c52b1fccd109a4a81e4fcd20fab1d3599c8121b38d04e1419498db" 4559 | dependencies = [ 4560 | "endi", 4561 | "enumflags2", 4562 | "serde", 4563 | "winnow 0.7.13", 4564 | "zvariant_derive", 4565 | "zvariant_utils", 4566 | ] 4567 | 4568 | [[package]] 4569 | name = "zvariant_derive" 4570 | version = "5.7.0" 4571 | source = "registry+https://github.com/rust-lang/crates.io-index" 4572 | checksum = "6643fd0b26a46d226bd90d3f07c1b5321fe9bb7f04673cb37ac6d6883885b68e" 4573 | dependencies = [ 4574 | "proc-macro-crate", 4575 | "proc-macro2", 4576 | "quote", 4577 | "syn", 4578 | "zvariant_utils", 4579 | ] 4580 | 4581 | [[package]] 4582 | name = "zvariant_utils" 4583 | version = "3.2.1" 4584 | source = "registry+https://github.com/rust-lang/crates.io-index" 4585 | checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599" 4586 | dependencies = [ 4587 | "proc-macro2", 4588 | "quote", 4589 | "serde", 4590 | "syn", 4591 | "winnow 0.7.13", 4592 | ] 4593 | --------------------------------------------------------------------------------