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