From 2be5cfe4e0ba9107c1fa27739c119ada2c96f2b2 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Mon, 15 Sep 2025 15:59:38 -0500 Subject: [PATCH 01/24] add component subcommand --- Cargo.lock | 57 ++++++++++++++++++++++--- packages/cli/Cargo.toml | 1 + packages/cli/src/cli/component.rs | 69 +++++++++++++++++++++++++++++++ packages/cli/src/cli/mod.rs | 6 +++ 4 files changed, 127 insertions(+), 6 deletions(-) create mode 100644 packages/cli/src/cli/component.rs diff --git a/Cargo.lock b/Cargo.lock index 0bfd3381f8..b97ad301ad 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5103,6 +5103,7 @@ dependencies = [ "dioxus-cli-config", "dioxus-cli-opt", "dioxus-cli-telemetry", + "dioxus-component-manifest", "dioxus-core", "dioxus-core-types", "dioxus-devtools-types", @@ -5270,6 +5271,15 @@ dependencies = [ "uuid", ] +[[package]] +name = "dioxus-component-manifest" +version = "0.1.0" +dependencies = [ + "schemars 1.0.4", + "serde", + "serde_json", +] + [[package]] name = "dioxus-config-macro" version = "0.7.0-rc.0" @@ -14076,10 +14086,23 @@ checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" dependencies = [ "dyn-clone", "ref-cast", + "schemars_derive", "serde", "serde_json", ] +[[package]] +name = "schemars_derive" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33d020396d1d138dc19f1165df7545479dcd58d93810dc5d646a16e55abefa80" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.104", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -14355,10 +14378,11 @@ checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc" [[package]] name = "serde" -version = "1.0.219" +version = "1.0.224" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "6aaeb1e94f53b16384af593c71e20b095e958dab1d26939c1b70645c5cfbcc0b" dependencies = [ + "serde_core", "serde_derive", ] @@ -14418,11 +14442,31 @@ dependencies = [ "xml-rs", ] +[[package]] +name = "serde_core" +version = "1.0.224" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f39390fa6346e24defbcdd3d9544ba8a19985d0af74df8501fbfe9a64341ab" +dependencies = [ + "serde_derive", +] + [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.224" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ff78ab5e8561c9a675bfc1785cb07ae721f0ee53329a595cefd8c04c2ac4e0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", @@ -14431,14 +14475,15 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ "itoa", "memchr", "ryu", "serde", + "serde_core", ] [[package]] diff --git a/packages/cli/Cargo.toml b/packages/cli/Cargo.toml index c7ad626032..d0f46e27b0 100644 --- a/packages/cli/Cargo.toml +++ b/packages/cli/Cargo.toml @@ -27,6 +27,7 @@ wasm-split-cli = { workspace = true } depinfo = { workspace = true } subsecond-types = { workspace = true } dioxus-cli-telemetry = { workspace = true } +dioxus-component-manifest = { path = "/Users/evanalmloff/Desktop/Github/components/dioxus-component-manifest" } clap = { workspace = true, features = ["derive", "cargo"] } convert_case = { workspace = true } diff --git a/packages/cli/src/cli/component.rs b/packages/cli/src/cli/component.rs new file mode 100644 index 0000000000..4d5598df0d --- /dev/null +++ b/packages/cli/src/cli/component.rs @@ -0,0 +1,69 @@ +use std::{fs::create_dir_all, path::PathBuf}; + +use crate::{extract_assets_from_file, Result, StructuredOutput}; +use clap::Parser; +use dioxus_cli_opt::process_file_to; +use tracing::debug; + +#[derive(Clone, Debug, Parser)] +pub struct ComponentRegisteryArgs { + /// The url of the the component registry + #[arg(long, conflicts_with = "path")] + git: Option, + /// The path to the components directory + #[arg(long, conflicts_with = "git")] + path: Option, +} + +impl ComponentRegisteryArgs { + async fn resolve(&self) -> Result { + // If a path is provided, use that + if let Some(path) = &self.path { + return Ok(PathBuf::from(path)); + } + + todo!() + } +} + +#[derive(Clone, Debug, Parser)] +pub enum Component { + #[clap(name = "add")] + Add { + /// The component to add + component: String, + /// The registry to use + #[clap(flatten)] + registry: ComponentRegisteryArgs, + }, + #[clap(name = "remove")] + Remove { + /// The component to remove + component: String, + }, + #[clap(name = "list")] + List { + /// The registry to use + #[clap(flatten)] + registry: ComponentRegisteryArgs, + }, +} + +impl Component { + pub async fn run(self) -> Result { + match self { + Self::List { registry } => { + let path = registry.resolve().await?; + debug!("Listing components in {:?}", path); + let file = std::fs::File::open(path.join("components.json"))?; + let mut reader = std::io::BufReader::new(file); + let components: dioxus_component_manifest::Component = + serde_json::from_reader(&mut reader); + println!("{}", serde_json::to_string_pretty(&components)?); + } + _ => todo!(), + } + + Ok(StructuredOutput::Success) + } +} diff --git a/packages/cli/src/cli/mod.rs b/packages/cli/src/cli/mod.rs index 0c46920989..ac4d9e35cd 100644 --- a/packages/cli/src/cli/mod.rs +++ b/packages/cli/src/cli/mod.rs @@ -17,6 +17,7 @@ pub(crate) mod target; pub(crate) mod translate; pub(crate) mod update; pub(crate) mod verbosity; +pub(crate) mod component; pub(crate) use build::*; pub(crate) use serve::*; @@ -114,6 +115,11 @@ pub(crate) enum Commands { #[clap(name = "tools")] #[clap(subcommand)] Tools(BuildTools), + + /// Run a dioxus build tool. IE `build-assets`, `hotpatch`, etc + #[clap(name = "component")] + #[clap(subcommand)] + Component(component::Component), } #[allow(clippy::large_enum_variant)] From 60a1006e70ed5540c7760be026ded910e3643c64 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Tue, 16 Sep 2025 12:58:51 -0500 Subject: [PATCH 02/24] add dx component add, remove and list commands --- examples/bevy/src/main.rs | 2 +- packages/cli/src/cli/component.rs | 243 ++++++++++++++++++++++++++++-- packages/cli/src/cli/mod.rs | 4 +- packages/cli/src/logging.rs | 1 + packages/cli/src/main.rs | 1 + 5 files changed, 235 insertions(+), 16 deletions(-) diff --git a/examples/bevy/src/main.rs b/examples/bevy/src/main.rs index 41ac6458ae..6c8154b161 100644 --- a/examples/bevy/src/main.rs +++ b/examples/bevy/src/main.rs @@ -46,7 +46,7 @@ fn app() -> Element { use_effect(move || println!("{:?}", color().components)); rsx!( - document::Link { rel: "stylesheet", href: STYLES } + document::Stylesheet { href: STYLES } div { id:"overlay", h2 { "Control Panel" }, button { diff --git a/packages/cli/src/cli/component.rs b/packages/cli/src/cli/component.rs index 4d5598df0d..daa9ecf41e 100644 --- a/packages/cli/src/cli/component.rs +++ b/packages/cli/src/cli/component.rs @@ -1,8 +1,13 @@ -use std::{fs::create_dir_all, path::PathBuf}; +use std::{ + ops::Deref, + path::{Path, PathBuf}, +}; -use crate::{extract_assets_from_file, Result, StructuredOutput}; +use crate::{Result, StructuredOutput, Workspace}; +use anyhow::Context; use clap::Parser; -use dioxus_cli_opt::process_file_to; +use dioxus_component_manifest::Component; +use tokio::task::JoinSet; use tracing::debug; #[derive(Clone, Debug, Parser)] @@ -24,10 +29,40 @@ impl ComponentRegisteryArgs { todo!() } + + async fn read_components(&self) -> Result> { + let path = self.resolve().await?; + + let root = read_component(&path).await?; + discover_components(root).await + } +} + +struct ResolvedComponent { + path: PathBuf, + component: Component, +} + +impl Deref for ResolvedComponent { + type Target = Component; + + fn deref(&self) -> &Self::Target { + &self.component + } +} + +impl ResolvedComponent { + fn member_paths(&self) -> Vec { + self.component + .members + .iter() + .map(|m| self.path.join(m)) + .collect() + } } #[derive(Clone, Debug, Parser)] -pub enum Component { +pub enum ComponentCommand { #[clap(name = "add")] Add { /// The component to add @@ -49,21 +84,203 @@ pub enum Component { }, } -impl Component { +impl ComponentCommand { pub async fn run(self) -> Result { match self { Self::List { registry } => { - let path = registry.resolve().await?; - debug!("Listing components in {:?}", path); - let file = std::fs::File::open(path.join("components.json"))?; - let mut reader = std::io::BufReader::new(file); - let components: dioxus_component_manifest::Component = - serde_json::from_reader(&mut reader); - println!("{}", serde_json::to_string_pretty(&components)?); + let components = registry.read_components().await?; + for component in components { + println!("- {}: {}", component.name, component.description); + } + } + Self::Add { + component, + registry, + } => { + let components = registry.read_components().await?; + add_component(&components, &component).await?; + } + Self::Remove { component } => { + remove_component(&component).await?; } - _ => todo!(), } Ok(StructuredOutput::Success) } } + +async fn find_component<'a>( + components: &'a [ResolvedComponent], + component: &str, +) -> Result<&'a ResolvedComponent> { + components + .iter() + .find(|c| c.name == component) + .ok_or_else(|| anyhow::anyhow!("Component '{}' not found in registry", component)) +} + +fn components_root() -> Result { + let root = Workspace::crate_root_from_path()?; + + Ok(root.join("src").join("components")) +} + +async fn remove_component(component: &str) -> Result<()> { + let components_root = components_root()?; + tokio::fs::remove_dir_all(&components_root.join(component)).await?; + // Remove the module from the components mod.rs + let mod_rs_path = components_root.join("mod.rs"); + let mod_rs_content = tokio::fs::read_to_string(&mod_rs_path) + .await + .with_context(|| format!("Failed to read {}", mod_rs_path.display()))?; + let mod_line = format!("pub mod {};\n", component); + let new_mod_rs_content = mod_rs_content.replace(&mod_line, ""); + tokio::fs::write(&mod_rs_path, new_mod_rs_content) + .await + .with_context(|| format!("Failed to write to {}", mod_rs_path.display()))?; + Ok(()) +} + +async fn add_component(components: &[ResolvedComponent], component: &str) -> Result<()> { + let component = find_component(components, component).await?; + + // Copy the folder content to the components directory + let components_root = components_root()?; + ensure_components_module_exists(&components_root).await?; + + copy_component_files( + &component.path, + &components_root.join(&component.name), + &component.exclude, + ) + .await?; + + // Add the module to the components mod.rs + let mod_rs_path = components_root.join("mod.rs"); + let mut mod_rs = tokio::fs::OpenOptions::new() + .append(true) + .open(&mod_rs_path) + .await + .with_context(|| format!("Failed to open {}", mod_rs_path.display()))?; + let mod_line = format!("pub mod {};\n", component.name); + tokio::io::AsyncWriteExt::write_all(&mut mod_rs, mod_line.as_bytes()) + .await + .with_context(|| format!("Failed to write to {}", mod_rs_path.display()))?; + + Ok(()) +} + +async fn copy_component_files(src: &Path, dest: &Path, exclude: &[String]) -> Result<()> { + async fn read_dir_paths(src: &Path) -> Result> { + let mut entries = tokio::fs::read_dir(src).await?; + let mut paths = vec![]; + while let Some(entry) = entries.next_entry().await? { + paths.push(entry.path()); + } + Ok(paths) + } + + if dest.exists() { + return Err(anyhow::anyhow!( + "Destination directory '{}' already exists", + dest.display() + )); + } + tokio::fs::create_dir_all(dest).await?; + + let exclude = exclude + .iter() + .map(|exclude| dunce::canonicalize(src.join(exclude))) + .collect::, _>>()?; + + let mut read_folder_tasks = JoinSet::new(); + let mut copy_tasks = JoinSet::new(); + + let src = src.to_path_buf(); + read_folder_tasks.spawn({ + let src = src.clone(); + async move { read_dir_paths(&src).await } + }); + + loop { + if let Some(res) = read_folder_tasks.join_next().await { + let paths = res??; + for path in paths { + let path = dunce::canonicalize(path)?; + if exclude.iter().any(|e| *e == path || path.starts_with(e)) { + debug!("Excluding path {}", path.display()); + continue; + } + let path_relative_to_src = path.strip_prefix(&src).unwrap(); + let dest = dest.join(path_relative_to_src); + if path.is_dir() { + read_folder_tasks.spawn(async move { read_dir_paths(&path).await }); + } else { + copy_tasks.spawn(async move { + if let Some(parent) = dest.parent() { + if !parent.exists() { + tokio::fs::create_dir_all(parent).await?; + } + } + tokio::fs::copy(&path, &dest).await + }); + } + } + } else { + break; + } + } + + // Join all copy tasks + while let Some(res) = copy_tasks.join_next().await { + res??; + } + + Ok(()) +} + +async fn ensure_components_module_exists(components_dir: &Path) -> Result<()> { + if !components_dir.exists() { + tokio::fs::create_dir_all(&components_dir).await?; + } + + let mod_rs_path = components_dir.join("mod.rs"); + if !mod_rs_path.exists() { + tokio::fs::write(&mod_rs_path, "// Components module\n").await?; + } + + Ok(()) +} + +async fn read_component(path: &PathBuf) -> Result { + let json_path = path.join("component.json"); + let bytes = tokio::fs::read(&json_path).await.with_context(|| { + format!( + "Failed to open component manifest at {}", + json_path.display() + ) + })?; + let component = serde_json::from_slice(&bytes)?; + Ok(ResolvedComponent { + path: path.clone(), + component, + }) +} + +async fn discover_components(root: ResolvedComponent) -> Result> { + let mut queue = root.member_paths(); + let mut components = vec![root]; + let mut pending = JoinSet::new(); + loop { + while let Some(root_path) = queue.pop() { + pending.spawn(async move { read_component(&root_path).await }); + } + let Some(component) = pending.join_next().await else { + break; + }; + let component = component??; + queue.extend(component.member_paths()); + components.push(component); + } + Ok(components) +} diff --git a/packages/cli/src/cli/mod.rs b/packages/cli/src/cli/mod.rs index ac4d9e35cd..31a2427327 100644 --- a/packages/cli/src/cli/mod.rs +++ b/packages/cli/src/cli/mod.rs @@ -3,6 +3,7 @@ pub(crate) mod build; pub(crate) mod build_assets; pub(crate) mod bundle; pub(crate) mod check; +pub(crate) mod component; pub(crate) mod config; pub(crate) mod create; pub(crate) mod doctor; @@ -17,7 +18,6 @@ pub(crate) mod target; pub(crate) mod translate; pub(crate) mod update; pub(crate) mod verbosity; -pub(crate) mod component; pub(crate) use build::*; pub(crate) use serve::*; @@ -119,7 +119,7 @@ pub(crate) enum Commands { /// Run a dioxus build tool. IE `build-assets`, `hotpatch`, etc #[clap(name = "component")] #[clap(subcommand)] - Component(component::Component), + Component(component::ComponentCommand), } #[allow(clippy::large_enum_variant)] diff --git a/packages/cli/src/logging.rs b/packages/cli/src/logging.rs index 194d2127b9..9a6e6dec62 100644 --- a/packages/cli/src/logging.rs +++ b/packages/cli/src/logging.rs @@ -902,6 +902,7 @@ impl TraceController { Print::ClientArgs(_args) => ("print client-args".to_string(), json!({})), Print::ServerArgs(_args) => ("print server-args".to_string(), json!({})), }, + Commands::Component(cmd) => ("component".to_string(), json!({})), } } diff --git a/packages/cli/src/main.rs b/packages/cli/src/main.rs index d6c0633637..56420b9794 100644 --- a/packages/cli/src/main.rs +++ b/packages/cli/src/main.rs @@ -66,6 +66,7 @@ async fn main() { Commands::Tools(BuildTools::HotpatchTip(opts)) => opts.run().await, Commands::Doctor(opts) => opts.doctor().await, Commands::Print(opts) => opts.print().await, + Commands::Component(opts) => opts.run().await, } }); From 94dd8ef89cae17674a3792d56be3ae0677a5d321 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Tue, 16 Sep 2025 13:30:47 -0500 Subject: [PATCH 03/24] handle rust dependencies --- packages/cli/src/cli/component.rs | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/cli/component.rs b/packages/cli/src/cli/component.rs index daa9ecf41e..52f7b18262 100644 --- a/packages/cli/src/cli/component.rs +++ b/packages/cli/src/cli/component.rs @@ -6,8 +6,8 @@ use std::{ use crate::{Result, StructuredOutput, Workspace}; use anyhow::Context; use clap::Parser; -use dioxus_component_manifest::Component; -use tokio::task::JoinSet; +use dioxus_component_manifest::{CargoDependency, Component}; +use tokio::{process::Command, task::JoinSet}; use tracing::debug; #[derive(Clone, Debug, Parser)] @@ -141,9 +141,33 @@ async fn remove_component(component: &str) -> Result<()> { Ok(()) } +async fn add_rust_dependencies(dependencies: &[CargoDependency]) -> Result<()> { + for dep in dependencies { + let status = Command::from(dep.add_command()) + .status() + .await + .with_context(|| { + format!( + "Failed to run command to add dependency {} to Cargo.toml", + dep.name() + ) + })?; + if !status.success() { + return Err(anyhow::anyhow!( + "Failed to add dependency {} to Cargo.toml", + dep.name() + )); + } + } + + Ok(()) +} + async fn add_component(components: &[ResolvedComponent], component: &str) -> Result<()> { let component = find_component(components, component).await?; + add_rust_dependencies(&component.cargo_dependencies).await?; + // Copy the folder content to the components directory let components_root = components_root()?; ensure_components_module_exists(&components_root).await?; From c35262a82a0da10fa3a9c0e879fb320d6176a4c3 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Wed, 17 Sep 2025 08:35:24 -0500 Subject: [PATCH 04/24] handle component dependencies --- packages/cli/src/cli/component.rs | 132 ++++++++++++++++++++++++++---- 1 file changed, 115 insertions(+), 17 deletions(-) diff --git a/packages/cli/src/cli/component.rs b/packages/cli/src/cli/component.rs index 52f7b18262..6ec798b55f 100644 --- a/packages/cli/src/cli/component.rs +++ b/packages/cli/src/cli/component.rs @@ -1,4 +1,5 @@ use std::{ + collections::{HashMap, HashSet}, ops::Deref, path::{Path, PathBuf}, }; @@ -6,17 +7,20 @@ use std::{ use crate::{Result, StructuredOutput, Workspace}; use anyhow::Context; use clap::Parser; -use dioxus_component_manifest::{CargoDependency, Component}; +use dioxus_component_manifest::{CargoDependency, Component, ComponentDependency}; use tokio::{process::Command, task::JoinSet}; use tracing::debug; -#[derive(Clone, Debug, Parser)] +#[derive(Clone, Debug, Parser, Default)] pub struct ComponentRegisteryArgs { /// The url of the the component registry #[arg(long, conflicts_with = "path")] git: Option, + /// The revision of the the component registry + #[arg(long, conflicts_with = "path")] + rev: Option, /// The path to the components directory - #[arg(long, conflicts_with = "git")] + #[arg(long, conflicts_with = "git", conflicts_with = "rev")] path: Option, } @@ -38,6 +42,7 @@ impl ComponentRegisteryArgs { } } +#[derive(Clone, Debug, PartialEq, Eq, Hash)] struct ResolvedComponent { path: PathBuf, component: Component, @@ -70,6 +75,9 @@ pub enum ComponentCommand { /// The registry to use #[clap(flatten)] registry: ComponentRegisteryArgs, + /// Overwrite the component if it already exists + #[clap(long)] + force: bool, }, #[clap(name = "remove")] Remove { @@ -96,9 +104,56 @@ impl ComponentCommand { Self::Add { component, registry, + force, } => { let components = registry.read_components().await?; - add_component(&components, &component).await?; + let mode = if force { + ComponentExistsBehavior::Overwrite + } else { + ComponentExistsBehavior::Error + }; + let component = find_component(components, &component).await?; + + // Recursively add dependencies + // A map of the components that have been added or are queued to be added + let mut required_components = HashMap::new(); + required_components.insert(component.clone(), mode); + // A stack of components to process + let mut queued_components = vec![component]; + while let Some(queued_component) = queued_components.pop() { + for dependency in &queued_component.component_dependencies { + let (registry, name) = match dependency { + ComponentDependency::Builtin(name) => { + (ComponentRegisteryArgs::default(), name) + } + ComponentDependency::ThirdParty { name, git, rev } => ( + ComponentRegisteryArgs { + git: Some(git.clone()), + rev: rev.clone(), + path: None, + }, + name, + ), + }; + let registry_components = registry.read_components().await?; + let dependency_component = + find_component(registry_components, name).await?; + if !required_components + .insert( + dependency_component.clone(), + ComponentExistsBehavior::Return, + ) + .is_some() + { + queued_components.push(dependency_component); + } + } + } + + // Once we have all required components, add them + for (component, mode) in required_components { + add_component(&component, mode).await?; + } } Self::Remove { component } => { remove_component(&component).await?; @@ -109,12 +164,12 @@ impl ComponentCommand { } } -async fn find_component<'a>( - components: &'a [ResolvedComponent], +async fn find_component( + components: Vec, component: &str, -) -> Result<&'a ResolvedComponent> { +) -> Result { components - .iter() + .into_iter() .find(|c| c.name == component) .ok_or_else(|| anyhow::anyhow!("Component '{}' not found in registry", component)) } @@ -163,21 +218,40 @@ async fn add_rust_dependencies(dependencies: &[CargoDependency]) -> Result<()> { Ok(()) } -async fn add_component(components: &[ResolvedComponent], component: &str) -> Result<()> { - let component = find_component(components, component).await?; +#[derive(Clone, Copy, Debug)] +enum ComponentExistsBehavior { + /// Return an error (default) + Error, + /// Return early for component dependencies + Return, + /// Overwrite the existing component + Overwrite, +} +async fn add_component( + component: &ResolvedComponent, + behavior: ComponentExistsBehavior, +) -> Result<()> { add_rust_dependencies(&component.cargo_dependencies).await?; // Copy the folder content to the components directory let components_root = components_root()?; ensure_components_module_exists(&components_root).await?; - copy_component_files( + let copied = copy_component_files( &component.path, &components_root.join(&component.name), &component.exclude, + behavior, ) .await?; + if !copied { + debug!( + "Component '{}' already exists, skipping copy", + component.name + ); + return Ok(()); + } // Add the module to the components mod.rs let mod_rs_path = components_root.join("mod.rs"); @@ -194,7 +268,13 @@ async fn add_component(components: &[ResolvedComponent], component: &str) -> Res Ok(()) } -async fn copy_component_files(src: &Path, dest: &Path, exclude: &[String]) -> Result<()> { +/// Copy the component files. Returns true if the component was copied, false if it was skipped. +async fn copy_component_files( + src: &Path, + dest: &Path, + exclude: &[String], + behavior: ComponentExistsBehavior, +) -> Result { async fn read_dir_paths(src: &Path) -> Result> { let mut entries = tokio::fs::read_dir(src).await?; let mut paths = vec![]; @@ -205,10 +285,28 @@ async fn copy_component_files(src: &Path, dest: &Path, exclude: &[String]) -> Re } if dest.exists() { - return Err(anyhow::anyhow!( - "Destination directory '{}' already exists", - dest.display() - )); + match behavior { + ComponentExistsBehavior::Error => { + return Err(anyhow::anyhow!( + "Destination directory '{}' already exists", + dest.display() + )); + } + ComponentExistsBehavior::Return => { + debug!( + "Destination directory '{}' already exists, returning early", + dest.display() + ); + return Ok(false); + } + ComponentExistsBehavior::Overwrite => { + debug!( + "Destination directory '{}' already exists, overwriting", + dest.display() + ); + tokio::fs::remove_dir_all(dest).await?; + } + } } tokio::fs::create_dir_all(dest).await?; @@ -260,7 +358,7 @@ async fn copy_component_files(src: &Path, dest: &Path, exclude: &[String]) -> Re res??; } - Ok(()) + Ok(true) } async fn ensure_components_module_exists(components_dir: &Path) -> Result<()> { From c9346f7d3dc9f8c9054efeac33b3416c139fe047 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Wed, 17 Sep 2025 09:01:40 -0500 Subject: [PATCH 05/24] fetch remote registries --- Cargo.lock | 1 + packages/cli/Cargo.toml | 1 + packages/cli/src/cli/component.rs | 56 +++++++++++++++++++++++++++++-- packages/cli/src/workspace.rs | 17 ++++++++++ 4 files changed, 73 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bdacb38271..93df5b4253 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5122,6 +5122,7 @@ dependencies = [ "fs2", "futures-channel", "futures-util", + "git2", "handlebars", "headers", "html_parser", diff --git a/packages/cli/Cargo.toml b/packages/cli/Cargo.toml index 9cb12090ab..16d2a2ba8e 100644 --- a/packages/cli/Cargo.toml +++ b/packages/cli/Cargo.toml @@ -79,6 +79,7 @@ dunce = { workspace = true } dirs = { workspace = true } reqwest = { workspace = true, features = ["rustls-tls", "trust-dns", "json"] } tower = { workspace = true } +git2 = "0.20.2" # path lookup which = { version = "8.0.0" } diff --git a/packages/cli/src/cli/component.rs b/packages/cli/src/cli/component.rs index 6ec798b55f..b056054155 100644 --- a/packages/cli/src/cli/component.rs +++ b/packages/cli/src/cli/component.rs @@ -1,5 +1,5 @@ use std::{ - collections::{HashMap, HashSet}, + collections::HashMap, ops::Deref, path::{Path, PathBuf}, }; @@ -8,6 +8,7 @@ use crate::{Result, StructuredOutput, Workspace}; use anyhow::Context; use clap::Parser; use dioxus_component_manifest::{CargoDependency, Component, ComponentDependency}; +use git2::Repository; use tokio::{process::Command, task::JoinSet}; use tracing::debug; @@ -31,7 +32,45 @@ impl ComponentRegisteryArgs { return Ok(PathBuf::from(path)); } - todo!() + // If a git url is provided use that (plus optional rev) + // Otherwise use the built-in registry + let (git, rev) = if let Some(git) = &self.git { + (git.clone(), self.rev.clone()) + } else { + ( + "https://github.com/ealmloff/components".into(), + Some("origin/components-cli".into()), + ) + }; + + let repo_dir = Workspace::component_cache_path(&git, self.rev.as_deref()); + // If the repo already exists, use it otherwise clone it + if !repo_dir.exists() { + tokio::fs::create_dir_all(&repo_dir).await?; + tokio::task::spawn_blocking({ + let git = git.clone(); + let repo_dir = repo_dir.clone(); + move || { + println!("Cloning {git}..."); + let repo = Repository::clone(&git, repo_dir)?; + if let Some(rev) = &rev { + let (object, reference) = repo.revparse_ext(rev).with_context(|| { + format!("Failed to find revision '{}' in '{}'", rev, git) + })?; + repo.checkout_tree(&object, None)?; + if let Some(gref) = reference { + repo.set_head(gref.name().unwrap())?; + } else { + repo.set_head_detached(object.id())?; + } + } + anyhow::Ok(()) + } + }) + .await??; + } + + Ok(repo_dir) } async fn read_components(&self) -> Result> { @@ -68,6 +107,7 @@ impl ResolvedComponent { #[derive(Clone, Debug, Parser)] pub enum ComponentCommand { + /// Add a component from a registry #[clap(name = "add")] Add { /// The component to add @@ -79,11 +119,20 @@ pub enum ComponentCommand { #[clap(long)] force: bool, }, + /// Remove a component #[clap(name = "remove")] Remove { /// The component to remove component: String, }, + /// Update a component registry + #[clap(name = "update")] + Update { + /// The registry to use + #[clap(flatten)] + registry: ComponentRegisteryArgs, + }, + /// List available components in a registry #[clap(name = "list")] List { /// The registry to use @@ -155,6 +204,9 @@ impl ComponentCommand { add_component(&component, mode).await?; } } + Self::Update { registry } => { + todo!() + } Self::Remove { component } => { remove_component(&component).await?; } diff --git a/packages/cli/src/workspace.rs b/packages/cli/src/workspace.rs index a72c0b13b2..1d46b39d66 100644 --- a/packages/cli/src/workspace.rs +++ b/packages/cli/src/workspace.rs @@ -6,6 +6,7 @@ use anyhow::{bail, Context}; use ignore::gitignore::Gitignore; use krates::{semver::Version, KrateDetails, LockOptions}; use krates::{Cmd, Krates, NodeId}; +use std::hash::Hasher; use std::sync::Arc; use std::{collections::HashSet, path::Path}; use std::{path::PathBuf, time::Duration}; @@ -532,6 +533,22 @@ impl Workspace { pub(crate) fn global_settings_file() -> PathBuf { Self::dioxus_data_dir().join("settings.json") } + + /// The path where components downloaded from git are cached + pub(crate) fn component_cache_dir() -> PathBuf { + Self::dioxus_data_dir().join("components") + } + + /// Get the path to a specific component in the cache + pub(crate) fn component_cache_path(git: &str, rev: Option<&str>) -> PathBuf { + let mut hasher = std::hash::DefaultHasher::new(); + std::hash::Hash::hash(git, &mut hasher); + if let Some(rev) = rev { + std::hash::Hash::hash(rev, &mut hasher); + } + let hash = hasher.finish(); + Self::component_cache_dir().join(format!("{hash:016x}")) + } } impl std::fmt::Debug for Workspace { From 66403452c909af45c4c42aa437eacf582e8769ee Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Wed, 17 Sep 2025 09:03:20 -0500 Subject: [PATCH 06/24] sort components before listing them --- packages/cli/src/cli/component.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/cli/component.rs b/packages/cli/src/cli/component.rs index b056054155..e0d1ac84a7 100644 --- a/packages/cli/src/cli/component.rs +++ b/packages/cli/src/cli/component.rs @@ -145,7 +145,8 @@ impl ComponentCommand { pub async fn run(self) -> Result { match self { Self::List { registry } => { - let components = registry.read_components().await?; + let mut components = registry.read_components().await?; + components.sort_by_key(|c| c.name.clone()); for component in components { println!("- {}: {}", component.name, component.description); } From 89d6a0036e7ab26509b9e0f7d7d105a1bd8d4575 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Wed, 17 Sep 2025 09:05:07 -0500 Subject: [PATCH 07/24] remove local dependency --- Cargo.lock | 1 + packages/cli/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 93df5b4253..e17972b022 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5275,6 +5275,7 @@ dependencies = [ [[package]] name = "dioxus-component-manifest" version = "0.1.0" +source = "git+https://github.com/ealmloff/components?branch=components-cli#ba115d3fae75d17b1ea4cb3ddf133504a2430689" dependencies = [ "schemars 1.0.4", "serde", diff --git a/packages/cli/Cargo.toml b/packages/cli/Cargo.toml index 16d2a2ba8e..85645c408b 100644 --- a/packages/cli/Cargo.toml +++ b/packages/cli/Cargo.toml @@ -27,7 +27,7 @@ wasm-split-cli = { workspace = true } depinfo = { workspace = true } subsecond-types = { workspace = true } dioxus-cli-telemetry = { workspace = true } -dioxus-component-manifest = { path = "/Users/evanalmloff/Desktop/Github/components/dioxus-component-manifest" } +dioxus-component-manifest = { git = "https://github.com/ealmloff/components", branch = "components-cli" } clap = { workspace = true, features = ["derive", "cargo"] } convert_case = { workspace = true } From 84bf206ffd38acc6b4e6cbb9e9df9688eeeeabc9 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Thu, 18 Sep 2025 12:26:53 -0500 Subject: [PATCH 08/24] move te component manifest into the dioxus workspace --- Cargo.lock | 3 +- Cargo.toml | 2 + packages/cli/Cargo.toml | 2 +- packages/cli/src/build/builder.rs | 10 +- packages/cli/src/build/request.rs | 8 +- packages/cli/src/cli/component.rs | 294 ++++++++++++++++++------- packages/cli/src/cli/create.rs | 8 +- packages/cli/src/error.rs | 4 +- packages/cli/src/logging.rs | 4 + packages/component-manifest/Cargo.toml | 15 ++ packages/component-manifest/src/lib.rs | 105 +++++++++ 11 files changed, 356 insertions(+), 99 deletions(-) create mode 100644 packages/component-manifest/Cargo.toml create mode 100644 packages/component-manifest/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index e17972b022..ef46a460aa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5274,8 +5274,7 @@ dependencies = [ [[package]] name = "dioxus-component-manifest" -version = "0.1.0" -source = "git+https://github.com/ealmloff/components?branch=components-cli#ba115d3fae75d17b1ea4cb3ddf133504a2430689" +version = "0.7.0-rc.0" dependencies = [ "schemars 1.0.4", "serde", diff --git a/Cargo.toml b/Cargo.toml index fd6ff6b947..06778bdf5e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -71,6 +71,7 @@ members = [ "packages/asset-resolver", "packages/depinfo", "packages/server", + "packages/component-manifest", # Playwright tests "packages/playwright-tests/liveview", @@ -180,6 +181,7 @@ dioxus-native = { path = "packages/native", version = "0.7.0-rc.0" } dioxus-native-dom = { path = "packages/native-dom", version = "0.7.0-rc.0" } dioxus-asset-resolver = { path = "packages/asset-resolver", version = "0.7.0-rc.0" } dioxus-config-macros = { path = "packages/config-macros", version = "0.7.0-rc.0" } +dioxus-component-manifest = { path = "packages/component-manifest", version = "0.7.0-rc.0" } generational-box = { path = "packages/generational-box", version = "0.7.0-rc.0" } lazy-js-bundle = { path = "packages/lazy-js-bundle", version = "0.7.0-rc.0" } diff --git a/packages/cli/Cargo.toml b/packages/cli/Cargo.toml index 85645c408b..94b9ceaa17 100644 --- a/packages/cli/Cargo.toml +++ b/packages/cli/Cargo.toml @@ -27,7 +27,7 @@ wasm-split-cli = { workspace = true } depinfo = { workspace = true } subsecond-types = { workspace = true } dioxus-cli-telemetry = { workspace = true } -dioxus-component-manifest = { git = "https://github.com/ealmloff/components", branch = "components-cli" } +dioxus-component-manifest = { workspace = true } clap = { workspace = true, features = ["derive", "cargo"] } convert_case = { workspace = true } diff --git a/packages/cli/src/build/builder.rs b/packages/cli/src/build/builder.rs index 33c4fa83cc..4b9ac679dc 100644 --- a/packages/cli/src/build/builder.rs +++ b/packages/cli/src/build/builder.rs @@ -1,6 +1,6 @@ use crate::{ - serve::WebServer, BuildArtifacts, BuildRequest, BuildStage, BuilderUpdate, BundleFormat, - ProgressRx, ProgressTx, Result, RustcArgs, StructuredOutput, + serve::WebServer, verbosity_or_default, BuildArtifacts, BuildRequest, BuildStage, + BuilderUpdate, BundleFormat, ProgressRx, ProgressTx, Result, RustcArgs, StructuredOutput, }; use anyhow::{bail, Context}; use dioxus_cli_opt::process_file_to; @@ -484,11 +484,7 @@ impl AppBuilder { )); } - if crate::VERBOSITY - .get() - .map(|f| f.verbose) - .unwrap_or_default() - { + if verbosity_or_default().verbose { envs.push(("RUST_BACKTRACE".into(), "1".to_string())); } diff --git a/packages/cli/src/build/request.rs b/packages/cli/src/build/request.rs index 37e0419b28..5530f82870 100644 --- a/packages/cli/src/build/request.rs +++ b/packages/cli/src/build/request.rs @@ -320,9 +320,9 @@ //! - xbuild: use crate::{ - AndroidTools, BuildContext, BundleFormat, DioxusConfig, Error, LinkAction, LinkerFlavor, - Renderer, Result, RustcArgs, TargetAlias, TargetArgs, TraceSrc, WasmBindgen, WasmOptConfig, - Workspace, DX_RUSTC_WRAPPER_ENV_VAR, + verbosity_or_default, AndroidTools, BuildContext, BundleFormat, DioxusConfig, Error, + LinkAction, LinkerFlavor, Renderer, Result, RustcArgs, TargetAlias, TargetArgs, TraceSrc, + WasmBindgen, WasmOptConfig, Workspace, DX_RUSTC_WRAPPER_ENV_VAR, }; use anyhow::{bail, Context}; use cargo_metadata::diagnostic::Diagnostic; @@ -2340,7 +2340,7 @@ impl BuildRequest { cargo_args.push(self.executable_name().to_string()); // Set offline/locked/frozen - let lock_opts = crate::VERBOSITY.get().cloned().unwrap_or_default(); + let lock_opts = verbosity_or_default(); if lock_opts.frozen { cargo_args.push("--frozen".to_string()); } diff --git a/packages/cli/src/cli/component.rs b/packages/cli/src/cli/component.rs index e0d1ac84a7..f0bf34b990 100644 --- a/packages/cli/src/cli/component.rs +++ b/packages/cli/src/cli/component.rs @@ -4,65 +4,71 @@ use std::{ path::{Path, PathBuf}, }; -use crate::{Result, StructuredOutput, Workspace}; +use crate::{verbosity_or_default, Result, StructuredOutput, Workspace}; use anyhow::Context; use clap::Parser; -use dioxus_component_manifest::{CargoDependency, Component, ComponentDependency}; +use dioxus_component_manifest::{ + component_manifest_schema, CargoDependency, Component, ComponentDependency, +}; use git2::Repository; use tokio::{process::Command, task::JoinSet}; use tracing::debug; +/// Arguments for the default or custom remote registry +/// If both values are None, the default registry will be used #[derive(Clone, Debug, Parser, Default)] -pub struct ComponentRegisteryArgs { +pub struct RemoteComponentRegisteryArgs { /// The url of the the component registry - #[arg(long, conflicts_with = "path")] + #[arg(long)] git: Option, /// The revision of the the component registry - #[arg(long, conflicts_with = "path")] + #[arg(long)] rev: Option, - /// The path to the components directory - #[arg(long, conflicts_with = "git", conflicts_with = "rev")] - path: Option, } -impl ComponentRegisteryArgs { - async fn resolve(&self) -> Result { - // If a path is provided, use that - if let Some(path) = &self.path { - return Ok(PathBuf::from(path)); - } - - // If a git url is provided use that (plus optional rev) - // Otherwise use the built-in registry - let (git, rev) = if let Some(git) = &self.git { +impl RemoteComponentRegisteryArgs { + /// If a git url is provided use that (plus optional rev) + /// Otherwise use the built-in registry + fn resolve_or_default(&self) -> (String, Option) { + if let Some(git) = &self.git { (git.clone(), self.rev.clone()) } else { ( "https://github.com/ealmloff/components".into(), Some("origin/components-cli".into()), ) - }; + } + } - let repo_dir = Workspace::component_cache_path(&git, self.rev.as_deref()); + async fn resolve(&self) -> Result { + // If a git url is provided use that (plus optional rev) + // Otherwise use the built-in registry + let (git, rev) = self.resolve_or_default(); + + let repo_dir = Workspace::component_cache_path(&git, rev.as_deref()); // If the repo already exists, use it otherwise clone it if !repo_dir.exists() { + // If offline, we cannot download the registry + if verbosity_or_default().offline { + return Err(anyhow::anyhow!( + "Cannot download component registry '{}' while offline", + git + )); + } + + // Make sure the parent directory exists tokio::fs::create_dir_all(&repo_dir).await?; tokio::task::spawn_blocking({ let git = git.clone(); let repo_dir = repo_dir.clone(); move || { - println!("Cloning {git}..."); + println!("Downloading {git}..."); + // Clone the repo let repo = Repository::clone(&git, repo_dir)?; + + // If a rev is provided, checkout that rev if let Some(rev) = &rev { - let (object, reference) = repo.revparse_ext(rev).with_context(|| { - format!("Failed to find revision '{}' in '{}'", rev, git) - })?; - repo.checkout_tree(&object, None)?; - if let Some(gref) = reference { - repo.set_head(gref.name().unwrap())?; - } else { - repo.set_head_detached(object.id())?; - } + checkout_rev(&repo, &git, rev)?; } anyhow::Ok(()) } @@ -73,6 +79,71 @@ impl ComponentRegisteryArgs { Ok(repo_dir) } + async fn update(&self) -> Result<()> { + let (git, rev) = self.resolve_or_default(); + + // Make sure the repo is cloned + let path = self.resolve().await?; + + // Open the repo and update it + tokio::task::spawn_blocking({ + let path = path.clone(); + move || { + let repo = Repository::open(path)?; + let mut remote = repo.find_remote("origin")?; + // Fetch all remote branches with the same name as local branches + remote.fetch(&["refs/heads/*:refs/heads/*"], None, None)?; + // If a rev is provided, checkout that rev + if let Some(rev) = &rev { + checkout_rev(&repo, &git, rev)?; + } + anyhow::Ok(()) + } + }) + .await??; + + Ok(()) + } +} + +/// Checkout the given rev in the given repo +fn checkout_rev(repo: &Repository, git: &str, rev: &str) -> Result<()> { + let (object, reference) = repo + .revparse_ext(rev) + .with_context(|| format!("Failed to find revision '{}' in '{}'", rev, git))?; + repo.checkout_tree(&object, None)?; + if let Some(gref) = reference { + repo.set_head(gref.name().unwrap())?; + } else { + repo.set_head_detached(object.id())?; + } + Ok(()) +} + +/// Arguments for a component registry +/// Either a path to a local directory or a remote git repo (with optional rev) +#[derive(Clone, Debug, Parser, Default)] +pub struct ComponentRegisteryArgs { + /// The remote repo args + #[clap(flatten)] + remote: RemoteComponentRegisteryArgs, + /// The path to the components directory + #[arg(long)] + path: Option, +} + +impl ComponentRegisteryArgs { + /// Resolve the path to the component registry, downloading the remote registry if needed + async fn resolve(&self) -> Result { + // If a path is provided, use that + if let Some(path) = &self.path { + return Ok(PathBuf::from(path)); + } + + // Otherwise use the remote/default registry + self.remote.resolve().await + } + async fn read_components(&self) -> Result> { let path = self.resolve().await?; @@ -105,13 +176,23 @@ impl ResolvedComponent { } } +/// Arguments for a component and component module location +#[derive(Clone, Debug, Parser)] +pub struct ComponentArgs { + /// The component to add + component: String, + /// The location of the component module in your project (default: src/components) + #[clap(long)] + module_path: Option, +} + #[derive(Clone, Debug, Parser)] pub enum ComponentCommand { /// Add a component from a registry #[clap(name = "add")] Add { - /// The component to add - component: String, + #[clap(flatten)] + component: ComponentArgs, /// The registry to use #[clap(flatten)] registry: ComponentRegisteryArgs, @@ -122,23 +203,29 @@ pub enum ComponentCommand { /// Remove a component #[clap(name = "remove")] Remove { - /// The component to remove - component: String, + #[clap(flatten)] + component: ComponentArgs, }, /// Update a component registry #[clap(name = "update")] Update { - /// The registry to use + /// The registry to update #[clap(flatten)] - registry: ComponentRegisteryArgs, + registry: RemoteComponentRegisteryArgs, }, /// List available components in a registry #[clap(name = "list")] List { - /// The registry to use + /// The registry to list components in #[clap(flatten)] registry: ComponentRegisteryArgs, }, + /// Clear the component registry cache + #[clap(name = "clean")] + Clean, + /// Print the schema for component manifests + #[clap(name = "schema")] + Schema, } impl ComponentCommand { @@ -152,7 +239,7 @@ impl ComponentCommand { } } Self::Add { - component, + component: component_args, registry, force, } => { @@ -162,7 +249,7 @@ impl ComponentCommand { } else { ComponentExistsBehavior::Error }; - let component = find_component(components, &component).await?; + let component = find_component(components, &component_args.component).await?; // Recursively add dependencies // A map of the components that have been added or are queued to be added @@ -178,8 +265,10 @@ impl ComponentCommand { } ComponentDependency::ThirdParty { name, git, rev } => ( ComponentRegisteryArgs { - git: Some(git.clone()), - rev: rev.clone(), + remote: RemoteComponentRegisteryArgs { + git: Some(git.clone()), + rev: rev.clone(), + }, path: None, }, name, @@ -202,15 +291,28 @@ impl ComponentCommand { // Once we have all required components, add them for (component, mode) in required_components { - add_component(&component, mode).await?; + add_component(component_args.module_path.as_deref(), &component, mode).await?; } } Self::Update { registry } => { - todo!() + registry.update().await?; } Self::Remove { component } => { remove_component(&component).await?; } + Self::Clean => { + let cache_dir = Workspace::component_cache_dir(); + if cache_dir.exists() { + tokio::fs::remove_dir_all(&cache_dir).await?; + } + } + Self::Schema => { + let schema = component_manifest_schema(); + println!( + "{}", + serde_json::to_string_pretty(&schema).unwrap_or_default() + ); + } } Ok(StructuredOutput::Success) @@ -227,21 +329,29 @@ async fn find_component( .ok_or_else(|| anyhow::anyhow!("Component '{}' not found in registry", component)) } -fn components_root() -> Result { +fn components_root(module_path: Option<&Path>) -> Result { + if let Some(module_path) = module_path { + return Ok(PathBuf::from(module_path)); + } + let root = Workspace::crate_root_from_path()?; Ok(root.join("src").join("components")) } -async fn remove_component(component: &str) -> Result<()> { - let components_root = components_root()?; - tokio::fs::remove_dir_all(&components_root.join(component)).await?; +/// Remove a component from the managed component module +async fn remove_component(component: &ComponentArgs) -> Result<()> { + let components_root = components_root(component.module_path.as_deref())?; + + // Remove the component module + tokio::fs::remove_dir_all(&components_root.join(&component.component)).await?; + // Remove the module from the components mod.rs let mod_rs_path = components_root.join("mod.rs"); let mod_rs_content = tokio::fs::read_to_string(&mod_rs_path) .await .with_context(|| format!("Failed to read {}", mod_rs_path.display()))?; - let mod_line = format!("pub mod {};\n", component); + let mod_line = format!("pub mod {};\n", component.component); let new_mod_rs_content = mod_rs_content.replace(&mod_line, ""); tokio::fs::write(&mod_rs_path, new_mod_rs_content) .await @@ -249,6 +359,7 @@ async fn remove_component(component: &str) -> Result<()> { Ok(()) } +/// Add any rust dependencies required for a component async fn add_rust_dependencies(dependencies: &[CargoDependency]) -> Result<()> { for dep in dependencies { let status = Command::from(dep.add_command()) @@ -282,13 +393,14 @@ enum ComponentExistsBehavior { } async fn add_component( + component_path: Option<&Path>, component: &ResolvedComponent, behavior: ComponentExistsBehavior, ) -> Result<()> { add_rust_dependencies(&component.cargo_dependencies).await?; // Copy the folder content to the components directory - let components_root = components_root()?; + let components_root = components_root(component_path)?; ensure_components_module_exists(&components_root).await?; let copied = copy_component_files( @@ -310,13 +422,20 @@ async fn add_component( let mod_rs_path = components_root.join("mod.rs"); let mut mod_rs = tokio::fs::OpenOptions::new() .append(true) + .read(true) .open(&mod_rs_path) .await .with_context(|| format!("Failed to open {}", mod_rs_path.display()))?; - let mod_line = format!("pub mod {};\n", component.name); - tokio::io::AsyncWriteExt::write_all(&mut mod_rs, mod_line.as_bytes()) + // Check if the module already exists + let mod_rs_content = tokio::fs::read_to_string(&mod_rs_path) .await - .with_context(|| format!("Failed to write to {}", mod_rs_path.display()))?; + .with_context(|| format!("Failed to read {}", mod_rs_path.display()))?; + if !mod_rs_content.contains(&format!("mod {};", component.name)) { + let mod_line = format!("pub mod {};\n", component.name); + tokio::io::AsyncWriteExt::write_all(&mut mod_rs, mod_line.as_bytes()) + .await + .with_context(|| format!("Failed to write to {}", mod_rs_path.display()))?; + } Ok(()) } @@ -337,14 +456,17 @@ async fn copy_component_files( Ok(paths) } + // If the directory already exists, return an error, return silently or overwrite it depending on the behavior if dest.exists() { match behavior { + // The default behavior is to return an error ComponentExistsBehavior::Error => { return Err(anyhow::anyhow!( "Destination directory '{}' already exists", dest.display() )); } + // For dependencies, we return early ComponentExistsBehavior::Return => { debug!( "Destination directory '{}' already exists, returning early", @@ -352,6 +474,7 @@ async fn copy_component_files( ); return Ok(false); } + // If the force flag is set, we overwrite the existing component ComponentExistsBehavior::Overwrite => { debug!( "Destination directory '{}' already exists, overwriting", @@ -368,45 +491,51 @@ async fn copy_component_files( .map(|exclude| dunce::canonicalize(src.join(exclude))) .collect::, _>>()?; + // Set set of tasks to read directories let mut read_folder_tasks = JoinSet::new(); + // Set set of tasks to copy files let mut copy_tasks = JoinSet::new(); + // Start by reading the source directory let src = src.to_path_buf(); read_folder_tasks.spawn({ let src = src.clone(); async move { read_dir_paths(&src).await } }); - loop { - if let Some(res) = read_folder_tasks.join_next().await { - let paths = res??; - for path in paths { - let path = dunce::canonicalize(path)?; - if exclude.iter().any(|e| *e == path || path.starts_with(e)) { - debug!("Excluding path {}", path.display()); - continue; - } - let path_relative_to_src = path.strip_prefix(&src).unwrap(); - let dest = dest.join(path_relative_to_src); - if path.is_dir() { - read_folder_tasks.spawn(async move { read_dir_paths(&path).await }); - } else { - copy_tasks.spawn(async move { - if let Some(parent) = dest.parent() { - if !parent.exists() { - tokio::fs::create_dir_all(parent).await?; - } + // Continue while there are read tasks + while let Some(res) = read_folder_tasks.join_next().await { + let paths = res??; + for path in paths { + let path = dunce::canonicalize(path)?; + + // Skip excluded paths + if exclude.iter().any(|e| *e == path || path.starts_with(e)) { + debug!("Excluding path {}", path.display()); + continue; + } + + // Find the path in the destination directory + let path_relative_to_src = path.strip_prefix(&src).unwrap(); + let dest = dest.join(path_relative_to_src); + + // If it's a directory, read it, otherwise copy the file + if path.is_dir() { + read_folder_tasks.spawn(async move { read_dir_paths(&path).await }); + } else { + copy_tasks.spawn(async move { + if let Some(parent) = dest.parent() { + if !parent.exists() { + tokio::fs::create_dir_all(parent).await?; } - tokio::fs::copy(&path, &dest).await - }); - } + } + tokio::fs::copy(&path, &dest).await + }); } - } else { - break; } } - // Join all copy tasks + // Wait for all copy tasks to finish while let Some(res) = copy_tasks.join_next().await { res??; } @@ -414,6 +543,7 @@ async fn copy_component_files( Ok(true) } +/// Make sure the components directory and a mod.rs file exists async fn ensure_components_module_exists(components_dir: &Path) -> Result<()> { if !components_dir.exists() { tokio::fs::create_dir_all(&components_dir).await?; @@ -421,12 +551,13 @@ async fn ensure_components_module_exists(components_dir: &Path) -> Result<()> { let mod_rs_path = components_dir.join("mod.rs"); if !mod_rs_path.exists() { - tokio::fs::write(&mod_rs_path, "// Components module\n").await?; + tokio::fs::write(&mod_rs_path, "// AUTOGENERTED Components module\n").await?; } Ok(()) } +/// Read a component from the given path async fn read_component(path: &PathBuf) -> Result { let json_path = path.join("component.json"); let bytes = tokio::fs::read(&json_path).await.with_context(|| { @@ -442,18 +573,25 @@ async fn read_component(path: &PathBuf) -> Result { }) } +/// Recursively discover all components starting from the root component async fn discover_components(root: ResolvedComponent) -> Result> { + // Create a queue of members to read let mut queue = root.member_paths(); + // The list of discovered components let mut components = vec![root]; + // The set of pending read tasks let mut pending = JoinSet::new(); loop { + // First, spawn tasks for all queued paths while let Some(root_path) = queue.pop() { pending.spawn(async move { read_component(&root_path).await }); } + // Then try to join the next task let Some(component) = pending.join_next().await else { break; }; let component = component??; + // And add the result to the queue and list queue.extend(component.member_paths()); components.push(component); } diff --git a/packages/cli/src/cli/create.rs b/packages/cli/src/cli/create.rs index 6c1e2cfae8..28f4a9a89e 100644 --- a/packages/cli/src/cli/create.rs +++ b/packages/cli/src/cli/create.rs @@ -1,5 +1,5 @@ use super::*; -use crate::TraceSrc; +use crate::{verbosity_or_default, TraceSrc}; use anyhow::{bail, Context}; use cargo_generate::{GenerateArgs, TemplatePath, Vcs}; use std::path::Path; @@ -239,11 +239,7 @@ fn remove_triple_newlines(string: &str) -> String { /// Perform a health check against github itself before we attempt to download any templates hosted /// on github. pub(crate) async fn connectivity_check() -> Result<()> { - if crate::VERBOSITY - .get() - .map(|f| f.offline) - .unwrap_or_default() - { + if verbosity_or_default().offline { return Ok(()); } diff --git a/packages/cli/src/error.rs b/packages/cli/src/error.rs index 9cee5b138f..c20552111d 100644 --- a/packages/cli/src/error.rs +++ b/packages/cli/src/error.rs @@ -2,6 +2,8 @@ pub(crate) type Result = std::result::Result; pub use anyhow::Error; use itertools::Itertools; +use crate::verbosity_or_default; + pub fn log_stacktrace(err: &anyhow::Error, padding: usize) -> String { let mut trace = format!("{err}",); @@ -25,7 +27,7 @@ pub fn log_stacktrace(err: &anyhow::Error, padding: usize) -> String { )); } - if crate::VERBOSITY.get().unwrap().trace { + if verbosity_or_default().trace { trace.push_str(&format!("\nBacktrace:\n{}", err.backtrace())); } diff --git a/packages/cli/src/logging.rs b/packages/cli/src/logging.rs index 9a6e6dec62..46818f5af4 100644 --- a/packages/cli/src/logging.rs +++ b/packages/cli/src/logging.rs @@ -68,6 +68,10 @@ const DX_SRC_FLAG: &str = "dx_src"; pub static VERBOSITY: OnceLock = OnceLock::new(); +pub fn verbosity_or_default() -> Verbosity { + crate::VERBOSITY.get().cloned().unwrap_or_default() +} + fn reset_cursor() { use std::io::IsTerminal; diff --git a/packages/component-manifest/Cargo.toml b/packages/component-manifest/Cargo.toml new file mode 100644 index 0000000000..cd00e5ba9c --- /dev/null +++ b/packages/component-manifest/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "dioxus-component-manifest" +edition = "2021" +version.workspace = true +description = "Wire format for the dioxus CLI telemetry type" +authors = ["Evan Almloff"] +license = "MIT OR Apache-2.0" +repository = "https://github.com/DioxusLabs/dioxus/" +homepage = "https://dioxuslabs.com" +keywords = ["dom", "ui", "gui", "react"] + +[dependencies] +schemars = "1.0.4" +serde = { version = "1.0.219", features = ["derive"] } +serde_json = "1.0.143" diff --git a/packages/component-manifest/src/lib.rs b/packages/component-manifest/src/lib.rs new file mode 100644 index 0000000000..183c042995 --- /dev/null +++ b/packages/component-manifest/src/lib.rs @@ -0,0 +1,105 @@ +use std::process::Command; + +use schemars::{schema_for, JsonSchema, Schema}; +use serde::{Deserialize, Serialize}; + +#[derive(Deserialize, Serialize, JsonSchema, Clone, Debug, PartialEq, Eq, Hash)] +#[serde(rename_all = "camelCase", deny_unknown_fields)] +pub struct Component { + pub name: String, + #[serde(default)] + pub description: String, + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub authors: Vec, + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub component_dependencies: Vec, + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub cargo_dependencies: Vec, + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub members: Vec, + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub exclude: Vec, +} + +#[derive(Deserialize, Serialize, JsonSchema, Clone, Debug, PartialEq, Eq, Hash)] +#[serde(untagged)] +pub enum ComponentDependency { + Builtin(String), + ThirdParty { + name: String, + git: String, + #[serde(default)] + rev: Option, + }, +} + +#[derive(Deserialize, Serialize, JsonSchema, Clone, Debug, PartialEq, Eq, Hash)] +#[serde(untagged)] +pub enum CargoDependency { + Simple(String), + Detailed { + name: String, + #[serde(default)] + version: Option, + #[serde(default, skip_serializing_if = "Vec::is_empty")] + features: Vec, + #[serde(default, skip_serializing_if = "std::ops::Not::not")] + default_features: bool, + #[serde(default, skip_serializing_if = "Option::is_none")] + git: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + rev: Option, + }, +} + +impl CargoDependency { + pub fn add_command(&self) -> Command { + let mut cmd = Command::new("cargo"); + cmd.arg("add"); + match self { + CargoDependency::Simple(name) => { + cmd.arg(name); + } + CargoDependency::Detailed { + name, + version, + features, + default_features, + git, + rev, + } => { + cmd.arg(format!( + "{name}{}", + version + .as_ref() + .map(|version| format!("@{version}")) + .unwrap_or_default() + )); + if !features.is_empty() { + cmd.arg("--features").arg(features.join(",")); + } + if !*default_features { + cmd.arg("--no-default-features"); + } + if let Some(git) = git { + cmd.arg("--git").arg(git); + } + if let Some(rev) = rev { + cmd.arg("--rev").arg(rev); + } + } + } + cmd + } + + pub fn name(&self) -> &str { + match self { + CargoDependency::Simple(name) => name, + CargoDependency::Detailed { name, .. } => name, + } + } +} + +pub fn component_manifest_schema() -> Schema { + schema_for!(Component) +} From 5a92333a39d53516a3ee70f9393d605aa47437c5 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Thu, 18 Sep 2025 13:05:25 -0500 Subject: [PATCH 09/24] add additional instalation instructions the first time the component module is created --- packages/cli/src/cli/component.rs | 105 ++++++++++++++++++++++--- packages/component-manifest/src/lib.rs | 2 + 2 files changed, 97 insertions(+), 10 deletions(-) diff --git a/packages/cli/src/cli/component.rs b/packages/cli/src/cli/component.rs index f0bf34b990..781cf31b9b 100644 --- a/packages/cli/src/cli/component.rs +++ b/packages/cli/src/cli/component.rs @@ -150,6 +150,10 @@ impl ComponentRegisteryArgs { let root = read_component(&path).await?; discover_components(root).await } + + fn is_default(&self) -> bool { + self.path.is_none() && self.remote.git.is_none() && self.remote.rev.is_none() + } } #[derive(Clone, Debug, PartialEq, Eq, Hash)] @@ -184,6 +188,9 @@ pub struct ComponentArgs { /// The location of the component module in your project (default: src/components) #[clap(long)] module_path: Option, + /// The location of the global assets in your project (default: assets) + #[clap(long)] + assets_path: Option, } #[derive(Clone, Debug, Parser)] @@ -251,6 +258,10 @@ impl ComponentCommand { }; let component = find_component(components, &component_args.component).await?; + let components_root = components_root(component_args.module_path.as_deref())?; + let new_components_module = + ensure_components_module_exists(&components_root).await?; + // Recursively add dependencies // A map of the components that have been added or are queued to be added let mut required_components = HashMap::new(); @@ -291,7 +302,25 @@ impl ComponentCommand { // Once we have all required components, add them for (component, mode) in required_components { - add_component(component_args.module_path.as_deref(), &component, mode).await?; + add_component( + component_args.assets_path.as_deref(), + component_args.module_path.as_deref(), + &component, + mode, + ) + .await?; + } + + if new_components_module { + println!( + "Created new components module at {}.", + components_root.display() + ); + println!("To finish setting up components, you will need to:"); + println!("- manually reference the module by adding `mod component;` to your `main.rs` file"); + if registry.is_default() { + println!("- add a reference to `asset!(\"/assets/dx-components-theme.css\")` as a stylesheet in your app"); + } } } Self::Update { registry } => { @@ -339,6 +368,16 @@ fn components_root(module_path: Option<&Path>) -> Result { Ok(root.join("src").join("components")) } +fn global_assets_root(assets_path: Option<&Path>) -> Result { + if let Some(assets_path) = assets_path { + return Ok(PathBuf::from(assets_path)); + } + + let root = Workspace::crate_root_from_path()?; + + Ok(root.join("assets")) +} + /// Remove a component from the managed component module async fn remove_component(component: &ComponentArgs) -> Result<()> { let components_root = components_root(component.module_path.as_deref())?; @@ -393,6 +432,7 @@ enum ComponentExistsBehavior { } async fn add_component( + assets_path: Option<&Path>, component_path: Option<&Path>, component: &ResolvedComponent, behavior: ComponentExistsBehavior, @@ -401,7 +441,6 @@ async fn add_component( // Copy the folder content to the components directory let components_root = components_root(component_path)?; - ensure_components_module_exists(&components_root).await?; let copied = copy_component_files( &component.path, @@ -418,6 +457,9 @@ async fn add_component( return Ok(()); } + let assets_root = global_assets_root(assets_path)?; + copy_global_assets(&assets_root, &component).await?; + // Add the module to the components mod.rs let mod_rs_path = components_root.join("mod.rs"); let mut mod_rs = tokio::fs::OpenOptions::new() @@ -543,18 +585,19 @@ async fn copy_component_files( Ok(true) } -/// Make sure the components directory and a mod.rs file exists -async fn ensure_components_module_exists(components_dir: &Path) -> Result<()> { - if !components_dir.exists() { - tokio::fs::create_dir_all(&components_dir).await?; +/// Make sure the components directory and a mod.rs file exists. Returns true if the directory was created, false if it already existed. +async fn ensure_components_module_exists(components_dir: &Path) -> Result { + if components_dir.exists() { + return Ok(false); } - + tokio::fs::create_dir_all(&components_dir).await?; let mod_rs_path = components_dir.join("mod.rs"); - if !mod_rs_path.exists() { - tokio::fs::write(&mod_rs_path, "// AUTOGENERTED Components module\n").await?; + if mod_rs_path.exists() { + return Ok(false); } + tokio::fs::write(&mod_rs_path, "// AUTOGENERTED Components module\n").await?; - Ok(()) + Ok(true) } /// Read a component from the given path @@ -597,3 +640,45 @@ async fn discover_components(root: ResolvedComponent) -> Result Result<()> { + let cache_dir = Workspace::component_cache_dir(); + + for path in &component.global_assets { + let src = component.path.join(&path); + let absolute_source = dunce::canonicalize(&src).with_context(|| { + format!( + "Failed to find global asset '{}' for component '{}'", + src.display(), + component.name + ) + })?; + if !absolute_source.starts_with(&cache_dir) { + return Err(anyhow::anyhow!( + "Cannot copy global asset '{}' for component '{}' because it is outside of the component registry", + src.display(), + component.name + )); + } + let file = absolute_source + .components() + .last() + .context("Global assets must have at least one file component")?; + let dest = assets_root.join(&file); + if let Some(parent) = dest.parent() { + if !parent.exists() { + tokio::fs::create_dir_all(parent).await?; + } + } + tokio::fs::copy(&src, &dest).await.with_context(|| { + format!( + "Failed to copy global asset from {} to {}", + src.display(), + dest.display() + ) + })?; + } + + Ok(()) +} diff --git a/packages/component-manifest/src/lib.rs b/packages/component-manifest/src/lib.rs index 183c042995..1d68b423c6 100644 --- a/packages/component-manifest/src/lib.rs +++ b/packages/component-manifest/src/lib.rs @@ -19,6 +19,8 @@ pub struct Component { pub members: Vec, #[serde(default, skip_serializing_if = "Vec::is_empty")] pub exclude: Vec, + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub global_assets: Vec, } #[derive(Deserialize, Serialize, JsonSchema, Clone, Debug, PartialEq, Eq, Hash)] From ee9cf631fbf3f2b9088d7c4a9692e54bcc898049 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Thu, 18 Sep 2025 13:07:59 -0500 Subject: [PATCH 10/24] fix mod name --- packages/cli/src/cli/component.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/src/cli/component.rs b/packages/cli/src/cli/component.rs index 781cf31b9b..866e712f6a 100644 --- a/packages/cli/src/cli/component.rs +++ b/packages/cli/src/cli/component.rs @@ -317,7 +317,7 @@ impl ComponentCommand { components_root.display() ); println!("To finish setting up components, you will need to:"); - println!("- manually reference the module by adding `mod component;` to your `main.rs` file"); + println!("- manually reference the module by adding `mod components;` to your `main.rs` file"); if registry.is_default() { println!("- add a reference to `asset!(\"/assets/dx-components-theme.css\")` as a stylesheet in your app"); } From 04c865c1c8352cdf8d70c2c40ca9357b68362d2f Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Thu, 18 Sep 2025 13:15:18 -0500 Subject: [PATCH 11/24] fix clippy --- packages/cli/src/cli/component.rs | 23 ++++++++++---------- packages/cli/src/logging.rs | 36 ++++++++++++++++++++++++++++++- 2 files changed, 47 insertions(+), 12 deletions(-) diff --git a/packages/cli/src/cli/component.rs b/packages/cli/src/cli/component.rs index 866e712f6a..0dd8aa6d18 100644 --- a/packages/cli/src/cli/component.rs +++ b/packages/cli/src/cli/component.rs @@ -11,12 +11,13 @@ use dioxus_component_manifest::{ component_manifest_schema, CargoDependency, Component, ComponentDependency, }; use git2::Repository; +use serde::Serialize; use tokio::{process::Command, task::JoinSet}; use tracing::debug; /// Arguments for the default or custom remote registry /// If both values are None, the default registry will be used -#[derive(Clone, Debug, Parser, Default)] +#[derive(Clone, Debug, Parser, Default, Serialize)] pub struct RemoteComponentRegisteryArgs { /// The url of the the component registry #[arg(long)] @@ -122,7 +123,7 @@ fn checkout_rev(repo: &Repository, git: &str, rev: &str) -> Result<()> { /// Arguments for a component registry /// Either a path to a local directory or a remote git repo (with optional rev) -#[derive(Clone, Debug, Parser, Default)] +#[derive(Clone, Debug, Parser, Default, Serialize)] pub struct ComponentRegisteryArgs { /// The remote repo args #[clap(flatten)] @@ -181,7 +182,7 @@ impl ResolvedComponent { } /// Arguments for a component and component module location -#[derive(Clone, Debug, Parser)] +#[derive(Clone, Debug, Parser, Serialize)] pub struct ComponentArgs { /// The component to add component: String, @@ -288,12 +289,12 @@ impl ComponentCommand { let registry_components = registry.read_components().await?; let dependency_component = find_component(registry_components, name).await?; - if !required_components + if required_components .insert( dependency_component.clone(), ComponentExistsBehavior::Return, ) - .is_some() + .is_none() { queued_components.push(dependency_component); } @@ -458,7 +459,7 @@ async fn add_component( } let assets_root = global_assets_root(assets_path)?; - copy_global_assets(&assets_root, &component).await?; + copy_global_assets(&assets_root, component).await?; // Add the module to the components mod.rs let mod_rs_path = components_root.join("mod.rs"); @@ -601,7 +602,7 @@ async fn ensure_components_module_exists(components_dir: &Path) -> Result } /// Read a component from the given path -async fn read_component(path: &PathBuf) -> Result { +async fn read_component(path: &Path) -> Result { let json_path = path.join("component.json"); let bytes = tokio::fs::read(&json_path).await.with_context(|| { format!( @@ -611,7 +612,7 @@ async fn read_component(path: &PathBuf) -> Result { })?; let component = serde_json::from_slice(&bytes)?; Ok(ResolvedComponent { - path: path.clone(), + path: path.to_path_buf(), component, }) } @@ -646,7 +647,7 @@ async fn copy_global_assets(assets_root: &Path, component: &ResolvedComponent) - let cache_dir = Workspace::component_cache_dir(); for path in &component.global_assets { - let src = component.path.join(&path); + let src = component.path.join(path); let absolute_source = dunce::canonicalize(&src).with_context(|| { format!( "Failed to find global asset '{}' for component '{}'", @@ -663,9 +664,9 @@ async fn copy_global_assets(assets_root: &Path, component: &ResolvedComponent) - } let file = absolute_source .components() - .last() + .next_back() .context("Global assets must have at least one file component")?; - let dest = assets_root.join(&file); + let dest = assets_root.join(file); if let Some(parent) = dest.parent() { if !parent.exists() { tokio::fs::create_dir_all(parent).await?; diff --git a/packages/cli/src/logging.rs b/packages/cli/src/logging.rs index 46818f5af4..40a583287d 100644 --- a/packages/cli/src/logging.rs +++ b/packages/cli/src/logging.rs @@ -29,6 +29,7 @@ //! - set `dx config set disable-telemetry true` //! +use crate::component::ComponentCommand; use crate::{dx_build_info::GIT_COMMIT_HASH_SHORT, serve::ServeUpdate, Cli, Commands, Verbosity}; use crate::{BundleFormat, CliSettings, Workspace}; use anyhow::{bail, Context, Error, Result}; @@ -906,7 +907,40 @@ impl TraceController { Print::ClientArgs(_args) => ("print client-args".to_string(), json!({})), Print::ServerArgs(_args) => ("print server-args".to_string(), json!({})), }, - Commands::Component(cmd) => ("component".to_string(), json!({})), + Commands::Component(cmd) => match cmd { + ComponentCommand::Add { + component, + registry, + force, + } => ( + "component add".to_string(), + json!({ + "component": component, + "registry": registry, + "force": force, + }), + ), + ComponentCommand::Remove { component } => ( + "component remove".to_string(), + json!({ + "component": component, + }), + ), + ComponentCommand::Update { registry } => ( + "component update".to_string(), + json!({ + "registry": registry, + }), + ), + ComponentCommand::List { registry } => ( + "component list".to_string(), + json!({ + "registry": registry, + }), + ), + ComponentCommand::Clean => ("component clean".to_string(), json!({})), + ComponentCommand::Schema => ("component schema".to_string(), json!({})), + }, } } From c201197ec6111e6f621e4fd4be2d031a5d2880a4 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Fri, 19 Sep 2025 09:14:14 -0500 Subject: [PATCH 12/24] improve docs and move to the main branch of components --- packages/cli/src/cli/component.rs | 33 ++++++++++++++++++++++---- packages/component-manifest/src/lib.rs | 7 ++++++ 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/packages/cli/src/cli/component.rs b/packages/cli/src/cli/component.rs index 0dd8aa6d18..6e07217dc5 100644 --- a/packages/cli/src/cli/component.rs +++ b/packages/cli/src/cli/component.rs @@ -34,13 +34,11 @@ impl RemoteComponentRegisteryArgs { if let Some(git) = &self.git { (git.clone(), self.rev.clone()) } else { - ( - "https://github.com/ealmloff/components".into(), - Some("origin/components-cli".into()), - ) + ("https://github.com/dioxuslabs/components".into(), None) } } + /// Resolve the path to the component registry, downloading the remote registry if needed async fn resolve(&self) -> Result { // If a git url is provided use that (plus optional rev) // Otherwise use the built-in registry @@ -80,6 +78,7 @@ impl RemoteComponentRegisteryArgs { Ok(repo_dir) } + /// Update the component registry by fetching the latest changes from the remote async fn update(&self) -> Result<()> { let (git, rev) = self.resolve_or_default(); @@ -145,6 +144,7 @@ impl ComponentRegisteryArgs { self.remote.resolve().await } + /// Read all components that are part of this registry async fn read_components(&self) -> Result> { let path = self.resolve().await?; @@ -152,11 +152,13 @@ impl ComponentRegisteryArgs { discover_components(root).await } + /// Check if this is the default registry fn is_default(&self) -> bool { self.path.is_none() && self.remote.git.is_none() && self.remote.rev.is_none() } } +/// A component that has been downloaded and resolved at a specific path #[derive(Clone, Debug, PartialEq, Eq, Hash)] struct ResolvedComponent { path: PathBuf, @@ -172,6 +174,7 @@ impl Deref for ResolvedComponent { } impl ResolvedComponent { + /// Get the absolute paths to members of this component fn member_paths(&self) -> Vec { self.component .members @@ -237,8 +240,10 @@ pub enum ComponentCommand { } impl ComponentCommand { + /// Run the component command pub async fn run(self) -> Result { match self { + // List all components in the registry Self::List { registry } => { let mut components = registry.read_components().await?; components.sort_by_key(|c| c.name.clone()); @@ -246,19 +251,23 @@ impl ComponentCommand { println!("- {}: {}", component.name, component.description); } } + // Add a component to the managed component module Self::Add { component: component_args, registry, force, } => { + // Read all components from the registry let components = registry.read_components().await?; let mode = if force { ComponentExistsBehavior::Overwrite } else { ComponentExistsBehavior::Error }; + // Find the requested component let component = find_component(components, &component_args.component).await?; + // Find and initialize the components module if it doesn't exist let components_root = components_root(component_args.module_path.as_deref())?; let new_components_module = ensure_components_module_exists(&components_root).await?; @@ -312,6 +321,7 @@ impl ComponentCommand { .await?; } + // If we created a new components module, print instructions about the final setup steps required if new_components_module { println!( "Created new components module at {}.", @@ -324,18 +334,22 @@ impl ComponentCommand { } } } + // Update the remote component registry Self::Update { registry } => { registry.update().await?; } + // Remove a component from the managed component module Self::Remove { component } => { remove_component(&component).await?; } + // Clear the component registry cache Self::Clean => { let cache_dir = Workspace::component_cache_dir(); if cache_dir.exists() { tokio::fs::remove_dir_all(&cache_dir).await?; } } + // Print the schema for component manifests Self::Schema => { let schema = component_manifest_schema(); println!( @@ -349,6 +363,7 @@ impl ComponentCommand { } } +// Find a component by name in a list of components async fn find_component( components: Vec, component: &str, @@ -359,6 +374,7 @@ async fn find_component( .ok_or_else(|| anyhow::anyhow!("Component '{}' not found in registry", component)) } +/// Get the path to the components module, defaulting to src/components fn components_root(module_path: Option<&Path>) -> Result { if let Some(module_path) = module_path { return Ok(PathBuf::from(module_path)); @@ -369,6 +385,7 @@ fn components_root(module_path: Option<&Path>) -> Result { Ok(root.join("src").join("components")) } +/// Get the path to the global assets directory, defaulting to assets fn global_assets_root(assets_path: Option<&Path>) -> Result { if let Some(assets_path) = assets_path { return Ok(PathBuf::from(assets_path)); @@ -422,6 +439,7 @@ async fn add_rust_dependencies(dependencies: &[CargoDependency]) -> Result<()> { Ok(()) } +/// How should we handle the component if it already exists #[derive(Clone, Copy, Debug)] enum ComponentExistsBehavior { /// Return an error (default) @@ -432,6 +450,7 @@ enum ComponentExistsBehavior { Overwrite, } +/// Add a component to the managed component module async fn add_component( assets_path: Option<&Path>, component_path: Option<&Path>, @@ -442,7 +461,6 @@ async fn add_component( // Copy the folder content to the components directory let components_root = components_root(component_path)?; - let copied = copy_component_files( &component.path, &components_root.join(&component.name), @@ -458,6 +476,7 @@ async fn add_component( return Ok(()); } + // Copy any global assets let assets_root = global_assets_root(assets_path)?; copy_global_assets(&assets_root, component).await?; @@ -655,6 +674,7 @@ async fn copy_global_assets(assets_root: &Path, component: &ResolvedComponent) - component.name ) })?; + // Make sure the source is inside the component registry somewhere if !absolute_source.starts_with(&cache_dir) { return Err(anyhow::anyhow!( "Cannot copy global asset '{}' for component '{}' because it is outside of the component registry", @@ -662,11 +682,14 @@ async fn copy_global_assets(assets_root: &Path, component: &ResolvedComponent) - component.name )); } + + // Copy the file into the assets directory, preserving the file name and extension let file = absolute_source .components() .next_back() .context("Global assets must have at least one file component")?; let dest = assets_root.join(file); + // Make sure the asset dir exists if let Some(parent) = dest.parent() { if !parent.exists() { tokio::fs::create_dir_all(parent).await?; diff --git a/packages/component-manifest/src/lib.rs b/packages/component-manifest/src/lib.rs index 1d68b423c6..68fccc8b4d 100644 --- a/packages/component-manifest/src/lib.rs +++ b/packages/component-manifest/src/lib.rs @@ -3,6 +3,8 @@ use std::process::Command; use schemars::{schema_for, JsonSchema, Schema}; use serde::{Deserialize, Serialize}; +/// A component compatable with the dioxus components system. +/// This may be a "virtual" component which is empty except for a list of members. #[derive(Deserialize, Serialize, JsonSchema, Clone, Debug, PartialEq, Eq, Hash)] #[serde(rename_all = "camelCase", deny_unknown_fields)] pub struct Component { @@ -23,6 +25,7 @@ pub struct Component { pub global_assets: Vec, } +/// A dependency on another component, either built-in or third-party. #[derive(Deserialize, Serialize, JsonSchema, Clone, Debug, PartialEq, Eq, Hash)] #[serde(untagged)] pub enum ComponentDependency { @@ -35,6 +38,7 @@ pub enum ComponentDependency { }, } +/// A dependency on a cargo crate required for a component. #[derive(Deserialize, Serialize, JsonSchema, Clone, Debug, PartialEq, Eq, Hash)] #[serde(untagged)] pub enum CargoDependency { @@ -55,6 +59,7 @@ pub enum CargoDependency { } impl CargoDependency { + /// Get the `cargo add` command for this dependency. pub fn add_command(&self) -> Command { let mut cmd = Command::new("cargo"); cmd.arg("add"); @@ -94,6 +99,7 @@ impl CargoDependency { cmd } + /// Get the name of the dependency. pub fn name(&self) -> &str { match self { CargoDependency::Simple(name) => name, @@ -102,6 +108,7 @@ impl CargoDependency { } } +/// Get the JSON schema for the `Component` struct. pub fn component_manifest_schema() -> Schema { schema_for!(Component) } From 29fa5d67c1bda32beec728950b00c5c093184472 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Fri, 19 Sep 2025 09:26:16 -0500 Subject: [PATCH 13/24] fix typos --- packages/cli/src/cli/component.rs | 22 +++++++++++----------- packages/const-serialize/src/lib.rs | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/cli/src/cli/component.rs b/packages/cli/src/cli/component.rs index 6e07217dc5..46a1546f07 100644 --- a/packages/cli/src/cli/component.rs +++ b/packages/cli/src/cli/component.rs @@ -18,7 +18,7 @@ use tracing::debug; /// Arguments for the default or custom remote registry /// If both values are None, the default registry will be used #[derive(Clone, Debug, Parser, Default, Serialize)] -pub struct RemoteComponentRegisteryArgs { +pub struct RemoteComponentRegistryArgs { /// The url of the the component registry #[arg(long)] git: Option, @@ -27,7 +27,7 @@ pub struct RemoteComponentRegisteryArgs { rev: Option, } -impl RemoteComponentRegisteryArgs { +impl RemoteComponentRegistryArgs { /// If a git url is provided use that (plus optional rev) /// Otherwise use the built-in registry fn resolve_or_default(&self) -> (String, Option) { @@ -123,16 +123,16 @@ fn checkout_rev(repo: &Repository, git: &str, rev: &str) -> Result<()> { /// Arguments for a component registry /// Either a path to a local directory or a remote git repo (with optional rev) #[derive(Clone, Debug, Parser, Default, Serialize)] -pub struct ComponentRegisteryArgs { +pub struct ComponentRegistryArgs { /// The remote repo args #[clap(flatten)] - remote: RemoteComponentRegisteryArgs, + remote: RemoteComponentRegistryArgs, /// The path to the components directory #[arg(long)] path: Option, } -impl ComponentRegisteryArgs { +impl ComponentRegistryArgs { /// Resolve the path to the component registry, downloading the remote registry if needed async fn resolve(&self) -> Result { // If a path is provided, use that @@ -206,7 +206,7 @@ pub enum ComponentCommand { component: ComponentArgs, /// The registry to use #[clap(flatten)] - registry: ComponentRegisteryArgs, + registry: ComponentRegistryArgs, /// Overwrite the component if it already exists #[clap(long)] force: bool, @@ -222,14 +222,14 @@ pub enum ComponentCommand { Update { /// The registry to update #[clap(flatten)] - registry: RemoteComponentRegisteryArgs, + registry: RemoteComponentRegistryArgs, }, /// List available components in a registry #[clap(name = "list")] List { /// The registry to list components in #[clap(flatten)] - registry: ComponentRegisteryArgs, + registry: ComponentRegistryArgs, }, /// Clear the component registry cache #[clap(name = "clean")] @@ -282,11 +282,11 @@ impl ComponentCommand { for dependency in &queued_component.component_dependencies { let (registry, name) = match dependency { ComponentDependency::Builtin(name) => { - (ComponentRegisteryArgs::default(), name) + (ComponentRegistryArgs::default(), name) } ComponentDependency::ThirdParty { name, git, rev } => ( - ComponentRegisteryArgs { - remote: RemoteComponentRegisteryArgs { + ComponentRegistryArgs { + remote: RemoteComponentRegistryArgs { git: Some(git.clone()), rev: rev.clone(), }, diff --git a/packages/const-serialize/src/lib.rs b/packages/const-serialize/src/lib.rs index ac27500d06..861331802a 100644 --- a/packages/const-serialize/src/lib.rs +++ b/packages/const-serialize/src/lib.rs @@ -68,7 +68,7 @@ impl EnumLayout { let padding = (max_align - (variants_offset_raw % max_align)) % max_align; let variants_offset = variants_offset_raw + padding; - assert!(variants_offset % max_align == 0); + assert!(variants_offset.is_multiple_of(max_align)); Self { size, From 9b34aeb26c77f074964ae081d5c935f3f045ee5f Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Fri, 19 Sep 2025 09:27:17 -0500 Subject: [PATCH 14/24] more typos --- packages/component-manifest/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/component-manifest/src/lib.rs b/packages/component-manifest/src/lib.rs index 68fccc8b4d..a7dc4c0656 100644 --- a/packages/component-manifest/src/lib.rs +++ b/packages/component-manifest/src/lib.rs @@ -3,7 +3,7 @@ use std::process::Command; use schemars::{schema_for, JsonSchema, Schema}; use serde::{Deserialize, Serialize}; -/// A component compatable with the dioxus components system. +/// A component compatible with the dioxus components system. /// This may be a "virtual" component which is empty except for a list of members. #[derive(Deserialize, Serialize, JsonSchema, Clone, Debug, PartialEq, Eq, Hash)] #[serde(rename_all = "camelCase", deny_unknown_fields)] From 36f4d8e92c20bc76cef0c06a0616d5a80fc92a63 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Fri, 19 Sep 2025 09:34:12 -0500 Subject: [PATCH 15/24] undo const-serialize changes --- packages/const-serialize/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/const-serialize/src/lib.rs b/packages/const-serialize/src/lib.rs index 861331802a..ac27500d06 100644 --- a/packages/const-serialize/src/lib.rs +++ b/packages/const-serialize/src/lib.rs @@ -68,7 +68,7 @@ impl EnumLayout { let padding = (max_align - (variants_offset_raw % max_align)) % max_align; let variants_offset = variants_offset_raw + padding; - assert!(variants_offset.is_multiple_of(max_align)); + assert!(variants_offset % max_align == 0); Self { size, From 3987bc98676fdbdce200fdb49bcb8b6a7a5ea8c9 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Fri, 19 Sep 2025 09:38:50 -0500 Subject: [PATCH 16/24] remove a few unwraps --- packages/cli/src/cli/component.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/cli/component.rs b/packages/cli/src/cli/component.rs index 46a1546f07..cbd55a9884 100644 --- a/packages/cli/src/cli/component.rs +++ b/packages/cli/src/cli/component.rs @@ -113,7 +113,9 @@ fn checkout_rev(repo: &Repository, git: &str, rev: &str) -> Result<()> { .with_context(|| format!("Failed to find revision '{}' in '{}'", rev, git))?; repo.checkout_tree(&object, None)?; if let Some(gref) = reference { - repo.set_head(gref.name().unwrap())?; + if let Some(name) = gref.name() { + repo.set_head(name)?; + } } else { repo.set_head_detached(object.id())?; } @@ -578,7 +580,9 @@ async fn copy_component_files( } // Find the path in the destination directory - let path_relative_to_src = path.strip_prefix(&src).unwrap(); + let Ok(path_relative_to_src) = path.strip_prefix(&src) else { + continue; + }; let dest = dest.join(path_relative_to_src); // If it's a directory, read it, otherwise copy the file From 1798a01ee39ae94fd03c07bb156f44d4646cac44 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Mon, 22 Sep 2025 12:04:41 -0500 Subject: [PATCH 17/24] Allow adding multiple components at once and add a `--all` flag --- packages/cli/src/cli/component.rs | 106 ++++++++++++++++++++---------- packages/cli/src/logging.rs | 6 +- 2 files changed, 78 insertions(+), 34 deletions(-) diff --git a/packages/cli/src/cli/component.rs b/packages/cli/src/cli/component.rs index cbd55a9884..1dfebd78d7 100644 --- a/packages/cli/src/cli/component.rs +++ b/packages/cli/src/cli/component.rs @@ -1,5 +1,5 @@ use std::{ - collections::HashMap, + collections::{HashMap, HashSet}, ops::Deref, path::{Path, PathBuf}, }; @@ -189,14 +189,18 @@ impl ResolvedComponent { /// Arguments for a component and component module location #[derive(Clone, Debug, Parser, Serialize)] pub struct ComponentArgs { - /// The component to add - component: String, + /// The components to add or remove + #[clap(required_unless_present = "all", value_delimiter = ',')] + components: Vec, /// The location of the component module in your project (default: src/components) #[clap(long)] module_path: Option, /// The location of the global assets in your project (default: assets) #[clap(long)] assets_path: Option, + /// Include all components in the registry + #[clap(long)] + all: bool, } #[derive(Clone, Debug, Parser)] @@ -218,6 +222,9 @@ pub enum ComponentCommand { Remove { #[clap(flatten)] component: ComponentArgs, + /// The registry to use + #[clap(flatten)] + registry: ComponentRegistryArgs, }, /// Update a component registry #[clap(name = "update")] @@ -266,8 +273,16 @@ impl ComponentCommand { } else { ComponentExistsBehavior::Error }; - // Find the requested component - let component = find_component(components, &component_args.component).await?; + // Find the requested components + let components = if component_args.all { + components + } else { + component_args + .components + .iter() + .map(|component| find_component(&components, &component)) + .collect::>>()? + }; // Find and initialize the components module if it doesn't exist let components_root = components_root(component_args.module_path.as_deref())?; @@ -277,9 +292,9 @@ impl ComponentCommand { // Recursively add dependencies // A map of the components that have been added or are queued to be added let mut required_components = HashMap::new(); - required_components.insert(component.clone(), mode); + required_components.extend(components.iter().cloned().map(|c| (c, mode))); // A stack of components to process - let mut queued_components = vec![component]; + let mut queued_components = components; while let Some(queued_component) = queued_components.pop() { for dependency in &queued_component.component_dependencies { let (registry, name) = match dependency { @@ -298,8 +313,7 @@ impl ComponentCommand { ), }; let registry_components = registry.read_components().await?; - let dependency_component = - find_component(registry_components, name).await?; + let dependency_component = find_component(®istry_components, name)?; if required_components .insert( dependency_component.clone(), @@ -312,6 +326,14 @@ impl ComponentCommand { } } + // Then collect all required rust dependencies + let mut rust_dependencies = HashSet::new(); + for component in required_components.keys() { + rust_dependencies.extend(component.cargo_dependencies.iter().cloned()); + } + // And add them to Cargo.toml + add_rust_dependencies(&rust_dependencies).await?; + // Once we have all required components, add them for (component, mode) in required_components { add_component( @@ -341,8 +363,11 @@ impl ComponentCommand { registry.update().await?; } // Remove a component from the managed component module - Self::Remove { component } => { - remove_component(&component).await?; + Self::Remove { + component, + registry, + } => { + remove_component(&component, registry).await?; } // Clear the component registry cache Self::Clean => { @@ -366,13 +391,11 @@ impl ComponentCommand { } // Find a component by name in a list of components -async fn find_component( - components: Vec, - component: &str, -) -> Result { +fn find_component(components: &[ResolvedComponent], component: &str) -> Result { components - .into_iter() + .iter() .find(|c| c.name == component) + .cloned() .ok_or_else(|| anyhow::anyhow!("Component '{}' not found in registry", component)) } @@ -399,27 +422,46 @@ fn global_assets_root(assets_path: Option<&Path>) -> Result { } /// Remove a component from the managed component module -async fn remove_component(component: &ComponentArgs) -> Result<()> { - let components_root = components_root(component.module_path.as_deref())?; +async fn remove_component( + component_args: &ComponentArgs, + registry: ComponentRegistryArgs, +) -> Result<()> { + let components_root = components_root(component_args.module_path.as_deref())?; + + // Find the requested components + let components = if component_args.all { + registry + .read_components() + .await? + .into_iter() + .map(|c| c.component.name) + .collect() + } else { + component_args.components.clone() + }; - // Remove the component module - tokio::fs::remove_dir_all(&components_root.join(&component.component)).await?; + for component_name in components { + // Remove the component module + _ = tokio::fs::remove_dir_all(&components_root.join(&component_name)).await; - // Remove the module from the components mod.rs - let mod_rs_path = components_root.join("mod.rs"); - let mod_rs_content = tokio::fs::read_to_string(&mod_rs_path) - .await - .with_context(|| format!("Failed to read {}", mod_rs_path.display()))?; - let mod_line = format!("pub mod {};\n", component.component); - let new_mod_rs_content = mod_rs_content.replace(&mod_line, ""); - tokio::fs::write(&mod_rs_path, new_mod_rs_content) - .await - .with_context(|| format!("Failed to write to {}", mod_rs_path.display()))?; + // Remove the module from the components mod.rs + let mod_rs_path = components_root.join("mod.rs"); + let mod_rs_content = tokio::fs::read_to_string(&mod_rs_path) + .await + .with_context(|| format!("Failed to read {}", mod_rs_path.display()))?; + let mod_line = format!("pub mod {};\n", component_name); + let new_mod_rs_content = mod_rs_content.replace(&mod_line, ""); + tokio::fs::write(&mod_rs_path, new_mod_rs_content) + .await + .with_context(|| format!("Failed to write to {}", mod_rs_path.display()))?; + } Ok(()) } /// Add any rust dependencies required for a component -async fn add_rust_dependencies(dependencies: &[CargoDependency]) -> Result<()> { +async fn add_rust_dependencies( + dependencies: impl IntoIterator, +) -> Result<()> { for dep in dependencies { let status = Command::from(dep.add_command()) .status() @@ -459,8 +501,6 @@ async fn add_component( component: &ResolvedComponent, behavior: ComponentExistsBehavior, ) -> Result<()> { - add_rust_dependencies(&component.cargo_dependencies).await?; - // Copy the folder content to the components directory let components_root = components_root(component_path)?; let copied = copy_component_files( diff --git a/packages/cli/src/logging.rs b/packages/cli/src/logging.rs index 40a583287d..e2dbdcb80c 100644 --- a/packages/cli/src/logging.rs +++ b/packages/cli/src/logging.rs @@ -920,10 +920,14 @@ impl TraceController { "force": force, }), ), - ComponentCommand::Remove { component } => ( + ComponentCommand::Remove { + component, + registry, + } => ( "component remove".to_string(), json!({ "component": component, + "registry": registry, }), ), ComponentCommand::Update { registry } => ( From e4950ce7919ef53dd459c53c7ee9a102d98d90bd Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Mon, 22 Sep 2025 12:38:50 -0500 Subject: [PATCH 18/24] add options to the config for the base path, global asset path and default registry --- packages/cli/src/cli/component.rs | 117 +++++++++++++++++------ packages/cli/src/config/app.rs | 4 + packages/cli/src/config/component.rs | 15 +++ packages/cli/src/config/dioxus_config.rs | 7 ++ packages/cli/src/config/mod.rs | 1 + 5 files changed, 117 insertions(+), 27 deletions(-) create mode 100644 packages/cli/src/config/component.rs diff --git a/packages/cli/src/cli/component.rs b/packages/cli/src/cli/component.rs index 1dfebd78d7..2c94436435 100644 --- a/packages/cli/src/cli/component.rs +++ b/packages/cli/src/cli/component.rs @@ -4,21 +4,21 @@ use std::{ path::{Path, PathBuf}, }; -use crate::{verbosity_or_default, Result, StructuredOutput, Workspace}; +use crate::{verbosity_or_default, DioxusConfig, Result, StructuredOutput, Workspace}; use anyhow::Context; use clap::Parser; use dioxus_component_manifest::{ component_manifest_schema, CargoDependency, Component, ComponentDependency, }; use git2::Repository; -use serde::Serialize; +use serde::{Deserialize, Serialize}; use tokio::{process::Command, task::JoinSet}; use tracing::debug; /// Arguments for the default or custom remote registry /// If both values are None, the default registry will be used -#[derive(Clone, Debug, Parser, Default, Serialize)] -pub struct RemoteComponentRegistryArgs { +#[derive(Clone, Debug, Parser, Default, Serialize, Deserialize)] +pub struct RemoteComponentRegistry { /// The url of the the component registry #[arg(long)] git: Option, @@ -27,7 +27,7 @@ pub struct RemoteComponentRegistryArgs { rev: Option, } -impl RemoteComponentRegistryArgs { +impl RemoteComponentRegistry { /// If a git url is provided use that (plus optional rev) /// Otherwise use the built-in registry fn resolve_or_default(&self) -> (String, Option) { @@ -124,17 +124,18 @@ fn checkout_rev(repo: &Repository, git: &str, rev: &str) -> Result<()> { /// Arguments for a component registry /// Either a path to a local directory or a remote git repo (with optional rev) -#[derive(Clone, Debug, Parser, Default, Serialize)] -pub struct ComponentRegistryArgs { +#[derive(Clone, Debug, Parser, Default, Serialize, Deserialize)] +pub struct ComponentRegistry { /// The remote repo args #[clap(flatten)] - remote: RemoteComponentRegistryArgs, + #[serde(flatten)] + remote: RemoteComponentRegistry, /// The path to the components directory #[arg(long)] path: Option, } -impl ComponentRegistryArgs { +impl ComponentRegistry { /// Resolve the path to the component registry, downloading the remote registry if needed async fn resolve(&self) -> Result { // If a path is provided, use that @@ -151,7 +152,12 @@ impl ComponentRegistryArgs { let path = self.resolve().await?; let root = read_component(&path).await?; - discover_components(root).await + let mut components = discover_components(root).await?; + + // Filter out any virtual components with members + components.retain(|c| c.members.is_empty()); + + Ok(components) } /// Check if this is the default registry @@ -197,7 +203,7 @@ pub struct ComponentArgs { module_path: Option, /// The location of the global assets in your project (default: assets) #[clap(long)] - assets_path: Option, + global_assets_path: Option, /// Include all components in the registry #[clap(long)] all: bool, @@ -212,7 +218,8 @@ pub enum ComponentCommand { component: ComponentArgs, /// The registry to use #[clap(flatten)] - registry: ComponentRegistryArgs, + registry: Option, + /// Overwrite the component if it already exists #[clap(long)] force: bool, @@ -224,21 +231,21 @@ pub enum ComponentCommand { component: ComponentArgs, /// The registry to use #[clap(flatten)] - registry: ComponentRegistryArgs, + registry: Option, }, /// Update a component registry #[clap(name = "update")] Update { /// The registry to update #[clap(flatten)] - registry: RemoteComponentRegistryArgs, + registry: Option, }, /// List available components in a registry #[clap(name = "list")] List { /// The registry to list components in #[clap(flatten)] - registry: ComponentRegistryArgs, + registry: Option, }, /// Clear the component registry cache #[clap(name = "clean")] @@ -254,6 +261,11 @@ impl ComponentCommand { match self { // List all components in the registry Self::List { registry } => { + // Resolve the config + let config = config().await?; + // Resolve the registry + let registry = resolve_registry(registry, &config)?; + let mut components = registry.read_components().await?; components.sort_by_key(|c| c.name.clone()); for component in components { @@ -266,6 +278,11 @@ impl ComponentCommand { registry, force, } => { + // Resolve the config + let config = config().await?; + // Resolve the registry + let registry = resolve_registry(registry, &config)?; + // Read all components from the registry let components = registry.read_components().await?; let mode = if force { @@ -285,7 +302,8 @@ impl ComponentCommand { }; // Find and initialize the components module if it doesn't exist - let components_root = components_root(component_args.module_path.as_deref())?; + let components_root = + components_root(component_args.module_path.as_deref(), &config)?; let new_components_module = ensure_components_module_exists(&components_root).await?; @@ -299,11 +317,11 @@ impl ComponentCommand { for dependency in &queued_component.component_dependencies { let (registry, name) = match dependency { ComponentDependency::Builtin(name) => { - (ComponentRegistryArgs::default(), name) + (ComponentRegistry::default(), name) } ComponentDependency::ThirdParty { name, git, rev } => ( - ComponentRegistryArgs { - remote: RemoteComponentRegistryArgs { + ComponentRegistry { + remote: RemoteComponentRegistry { git: Some(git.clone()), rev: rev.clone(), }, @@ -337,10 +355,11 @@ impl ComponentCommand { // Once we have all required components, add them for (component, mode) in required_components { add_component( - component_args.assets_path.as_deref(), + component_args.global_assets_path.as_deref(), component_args.module_path.as_deref(), &component, mode, + &config, ) .await?; } @@ -360,6 +379,12 @@ impl ComponentCommand { } // Update the remote component registry Self::Update { registry } => { + // Resolve the config and registry + let config = config().await?; + let registry = match registry { + Some(registry) => registry, + None => config.component.registry.remote, + }; registry.update().await?; } // Remove a component from the managed component module @@ -367,7 +392,12 @@ impl ComponentCommand { component, registry, } => { - remove_component(&component, registry).await?; + // Resolve the config + let config = config().await?; + // Resolve the registry + let registry = resolve_registry(registry, &config)?; + + remove_component(&component, registry, &config).await?; } // Clear the component registry cache Self::Clean => { @@ -400,22 +430,53 @@ fn find_component(components: &[ResolvedComponent], component: &str) -> Result) -> Result { +fn components_root(module_path: Option<&Path>, config: &DioxusConfig) -> Result { if let Some(module_path) = module_path { return Ok(PathBuf::from(module_path)); } + if let Some(component_path) = &config.component.component_path { + return Ok(component_path.clone()); + } + let root = Workspace::crate_root_from_path()?; Ok(root.join("src").join("components")) } +/// Load the config +async fn config() -> Result { + let workspace = Workspace::current().await?; + + let crate_package = workspace.find_main_package(None)?; + + Ok(workspace + .load_dioxus_config(crate_package)? + .unwrap_or_default()) +} + +/// Resolve a registry from the config if none is provided +fn resolve_registry( + registry: Option, + config: &DioxusConfig, +) -> Result { + if let Some(registry) = registry { + return Ok(registry); + } + + Ok(config.component.registry.clone()) +} + /// Get the path to the global assets directory, defaulting to assets -fn global_assets_root(assets_path: Option<&Path>) -> Result { +async fn global_assets_root(assets_path: Option<&Path>, config: &DioxusConfig) -> Result { if let Some(assets_path) = assets_path { return Ok(PathBuf::from(assets_path)); } + if let Some(asset_dir) = &config.application.asset_dir { + return Ok(asset_dir.clone()); + } + let root = Workspace::crate_root_from_path()?; Ok(root.join("assets")) @@ -424,9 +485,10 @@ fn global_assets_root(assets_path: Option<&Path>) -> Result { /// Remove a component from the managed component module async fn remove_component( component_args: &ComponentArgs, - registry: ComponentRegistryArgs, + registry: ComponentRegistry, + config: &DioxusConfig, ) -> Result<()> { - let components_root = components_root(component_args.module_path.as_deref())?; + let components_root = components_root(component_args.module_path.as_deref(), &config)?; // Find the requested components let components = if component_args.all { @@ -500,9 +562,10 @@ async fn add_component( component_path: Option<&Path>, component: &ResolvedComponent, behavior: ComponentExistsBehavior, + config: &DioxusConfig, ) -> Result<()> { // Copy the folder content to the components directory - let components_root = components_root(component_path)?; + let components_root = components_root(component_path, &config)?; let copied = copy_component_files( &component.path, &components_root.join(&component.name), @@ -519,7 +582,7 @@ async fn add_component( } // Copy any global assets - let assets_root = global_assets_root(assets_path)?; + let assets_root = global_assets_root(assets_path, config).await?; copy_global_assets(&assets_root, component).await?; // Add the module to the components mod.rs diff --git a/packages/cli/src/config/app.rs b/packages/cli/src/config/app.rs index 4ffde0a68c..32372bbb47 100644 --- a/packages/cli/src/config/app.rs +++ b/packages/cli/src/config/app.rs @@ -3,6 +3,10 @@ use std::path::PathBuf; #[derive(Debug, Clone, Serialize, Deserialize)] pub(crate) struct ApplicationConfig { + /// The path where global assets will be added when components are added with `dx component add` + #[serde(default)] + pub(crate) asset_dir: Option, + #[serde(default)] pub(crate) out_dir: Option, diff --git a/packages/cli/src/config/component.rs b/packages/cli/src/config/component.rs new file mode 100644 index 0000000000..e4c85bd639 --- /dev/null +++ b/packages/cli/src/config/component.rs @@ -0,0 +1,15 @@ +use serde::{Deserialize, Serialize}; +use std::path::PathBuf; + +use crate::component::ComponentRegistry; + +/// Configuration for the `dioxus component` commands +#[derive(Debug, Clone, Serialize, Deserialize, Default)] +pub(crate) struct ComponentConfig { + /// The component registry to default to when adding components + #[serde(default)] + pub(crate) registry: ComponentRegistry, + /// The path where components are stored when adding or removing components + #[serde(default)] + pub(crate) component_path: Option, +} diff --git a/packages/cli/src/config/dioxus_config.rs b/packages/cli/src/config/dioxus_config.rs index 30548d0b93..e110841c49 100644 --- a/packages/cli/src/config/dioxus_config.rs +++ b/packages/cli/src/config/dioxus_config.rs @@ -1,3 +1,5 @@ +use crate::config::component::ComponentConfig; + use super::*; use serde::{Deserialize, Serialize}; @@ -10,12 +12,16 @@ pub(crate) struct DioxusConfig { #[serde(default)] pub(crate) bundle: BundleConfig, + + #[serde(default)] + pub(crate) component: ComponentConfig, } impl Default for DioxusConfig { fn default() -> Self { Self { application: ApplicationConfig { + asset_dir: None, out_dir: None, tailwind_input: None, tailwind_output: None, @@ -52,6 +58,7 @@ impl Default for DioxusConfig { wasm_opt: Default::default(), }, bundle: BundleConfig::default(), + component: ComponentConfig::default(), } } } diff --git a/packages/cli/src/config/mod.rs b/packages/cli/src/config/mod.rs index c18400473f..0647a1dc5a 100644 --- a/packages/cli/src/config/mod.rs +++ b/packages/cli/src/config/mod.rs @@ -1,5 +1,6 @@ mod app; mod bundle; +mod component; mod dioxus_config; mod serve; mod web; From f2b782c3b9fd95b4e97fd48db2895c1719fd07e7 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Mon, 22 Sep 2025 12:41:25 -0500 Subject: [PATCH 19/24] component_path -> component_dir --- packages/cli/src/cli/component.rs | 2 +- packages/cli/src/config/component.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/cli/component.rs b/packages/cli/src/cli/component.rs index 2c94436435..6e101a21b5 100644 --- a/packages/cli/src/cli/component.rs +++ b/packages/cli/src/cli/component.rs @@ -435,7 +435,7 @@ fn components_root(module_path: Option<&Path>, config: &DioxusConfig) -> Result< return Ok(PathBuf::from(module_path)); } - if let Some(component_path) = &config.component.component_path { + if let Some(component_path) = &config.component.component_dir { return Ok(component_path.clone()); } diff --git a/packages/cli/src/config/component.rs b/packages/cli/src/config/component.rs index e4c85bd639..c14489da48 100644 --- a/packages/cli/src/config/component.rs +++ b/packages/cli/src/config/component.rs @@ -11,5 +11,5 @@ pub(crate) struct ComponentConfig { pub(crate) registry: ComponentRegistry, /// The path where components are stored when adding or removing components #[serde(default)] - pub(crate) component_path: Option, + pub(crate) component_dir: Option, } From 195bc4b1f4facffde5feb83b696e2773816af679 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Mon, 22 Sep 2025 12:42:21 -0500 Subject: [PATCH 20/24] component_dir is always relative to the crate root --- packages/cli/src/cli/component.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/cli/src/cli/component.rs b/packages/cli/src/cli/component.rs index 6e101a21b5..dbe58c3a1a 100644 --- a/packages/cli/src/cli/component.rs +++ b/packages/cli/src/cli/component.rs @@ -435,12 +435,12 @@ fn components_root(module_path: Option<&Path>, config: &DioxusConfig) -> Result< return Ok(PathBuf::from(module_path)); } + let root = Workspace::crate_root_from_path()?; + if let Some(component_path) = &config.component.component_dir { - return Ok(component_path.clone()); + return Ok(root.join(component_path)); } - let root = Workspace::crate_root_from_path()?; - Ok(root.join("src").join("components")) } From 987366ab55fc089748572ab1061d6b4be2b2736f Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Mon, 22 Sep 2025 12:58:39 -0500 Subject: [PATCH 21/24] fix clippy --- packages/cli/src/cli/component.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/cli/src/cli/component.rs b/packages/cli/src/cli/component.rs index dbe58c3a1a..6f58697404 100644 --- a/packages/cli/src/cli/component.rs +++ b/packages/cli/src/cli/component.rs @@ -297,7 +297,7 @@ impl ComponentCommand { component_args .components .iter() - .map(|component| find_component(&components, &component)) + .map(|component| find_component(&components, component)) .collect::>>()? }; @@ -488,7 +488,7 @@ async fn remove_component( registry: ComponentRegistry, config: &DioxusConfig, ) -> Result<()> { - let components_root = components_root(component_args.module_path.as_deref(), &config)?; + let components_root = components_root(component_args.module_path.as_deref(), config)?; // Find the requested components let components = if component_args.all { @@ -565,7 +565,7 @@ async fn add_component( config: &DioxusConfig, ) -> Result<()> { // Copy the folder content to the components directory - let components_root = components_root(component_path, &config)?; + let components_root = components_root(component_path, config)?; let copied = copy_component_files( &component.path, &components_root.join(&component.name), From a57f5010fe3a948f9b67ca2d91b4ce4bfe9f4716 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Thu, 2 Oct 2025 12:52:23 -0500 Subject: [PATCH 22/24] fix hot patching with a base path --- packages/cli/src/build/builder.rs | 15 ++++----------- packages/cli/src/build/patch.rs | 23 +++++++++++++++++++---- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/packages/cli/src/build/builder.rs b/packages/cli/src/build/builder.rs index 33c4fa83cc..388f7e68a3 100644 --- a/packages/cli/src/build/builder.rs +++ b/packages/cli/src/build/builder.rs @@ -687,7 +687,10 @@ impl AppBuilder { tracing::debug!("Patching {} -> {}", original.display(), new.display()); - let mut jump_table = crate::build::create_jump_table(&new, &triple, cache)?; + let root_dir = self.build.root_dir(); + let base_path = self.build.base_path(); + let mut jump_table = + crate::build::create_jump_table(&new, &triple, &root_dir, base_path.as_deref(), cache)?; // If it's android, we need to copy the assets to the device and then change the location of the patch if self.build.bundle == BundleFormat::Android { @@ -696,16 +699,6 @@ impl AppBuilder { .await?; } - // Rebase the wasm binary to be relocatable once the jump table is generated - if triple.architecture == target_lexicon::Architecture::Wasm32 { - // Make sure we use the dir relative to the public dir, so the web can load it as a proper URL - // - // ie we would've shipped `/Users/foo/Projects/dioxus/target/dx/project/debug/web/public/wasm/lib.wasm` - // but we want to ship `/wasm/lib.wasm` - jump_table.lib = - PathBuf::from("/").join(jump_table.lib.strip_prefix(self.build.root_dir()).unwrap()) - } - let changed_files = match &res.mode { BuildMode::Thin { changed_files, .. } => changed_files.clone(), _ => vec![], diff --git a/packages/cli/src/build/patch.rs b/packages/cli/src/build/patch.rs index 7f16ac9594..2a5b5a690a 100644 --- a/packages/cli/src/build/patch.rs +++ b/packages/cli/src/build/patch.rs @@ -294,17 +294,32 @@ impl HotpatchModuleCache { pub fn create_jump_table( patch: &Path, triple: &Triple, + root_dir: &Path, + base_path: Option<&str>, cache: &HotpatchModuleCache, ) -> Result { // Symbols are stored differently based on the platform, so we need to handle them differently. // - Wasm requires the walrus crate and actually modifies the patch file // - windows requires the pdb crate and pdb files // - nix requires the object crate - match triple.operating_system { - OperatingSystem::Windows => create_windows_jump_table(patch, cache), - _ if triple.architecture == Architecture::Wasm32 => create_wasm_jump_table(patch, cache), - _ => create_native_jump_table(patch, triple, cache), + let mut jump_table = match triple.operating_system { + OperatingSystem::Windows => create_windows_jump_table(patch, cache)?, + _ if triple.architecture == Architecture::Wasm32 => create_wasm_jump_table(patch, cache)?, + _ => create_native_jump_table(patch, triple, cache)?, + }; + + // Rebase the wasm binary to be relocatable once the jump table is generated + if triple.architecture == target_lexicon::Architecture::Wasm32 { + // Make sure we use the dir relative to the public dir, so the web can load it as a proper URL + // + // ie we would've shipped `/Users/foo/Projects/dioxus/target/dx/project/debug/web/public/wasm/lib.wasm` + // but we want to ship `/wasm/lib.wasm` + jump_table.lib = + PathBuf::from("/".to_string() + base_path.unwrap_or_default().trim_start_matches('/')) + .join(jump_table.lib.strip_prefix(root_dir).unwrap()) } + + Ok(jump_table) } fn create_windows_jump_table(patch: &Path, cache: &HotpatchModuleCache) -> Result { From 234cd9c2816071132f8f3036d6cfd7c13ce3ad29 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Thu, 2 Oct 2025 12:52:40 -0500 Subject: [PATCH 23/24] read the hot patch file from stdin instead of a CLI arg to allow for longer inputs --- Cargo.lock | 3104 ++++++++++++++++-------------- Cargo.toml | 2 +- packages/cli/src/cli/hotpatch.rs | 25 +- 3 files changed, 1649 insertions(+), 1482 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 87e6c86806..cac0be2a3b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "ab_glyph" -version = "0.2.30" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0f4f6fbdc5ee39f2ede9f5f3ec79477271a6d6a2baff22310d51736bda6cea" +checksum = "01c0457472c38ea5bd1c3b5ada5e368271cb550be7a4ca4a0b4634e9913f6cc2" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", @@ -14,9 +14,9 @@ dependencies = [ [[package]] name = "ab_glyph_rasterizer" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2187590a23ab1e3df8681afdf0987c48504d80291f002fcdb651f0ef5e25169" +checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" [[package]] name = "accesskit" @@ -51,7 +51,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f47983a1084940ba9a39c077a8c63e55c619388be5476ac04c804cfbd1e63459" dependencies = [ "accesskit 0.17.1", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "immutable-chunkmap", ] @@ -62,7 +62,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0bf66a7bf0b7ea4fd7742d50b64782a88f99217cf246b3f93b4162528dde520" dependencies = [ "accesskit 0.18.0", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "immutable-chunkmap", ] @@ -74,7 +74,7 @@ checksum = "7329821f3bd1101e03a7d2e03bd339e3ac0dc64c70b4c9f9ae1949e3ba8dece1" dependencies = [ "accesskit 0.17.1", "accesskit_consumer 0.26.0", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "objc2 0.5.2", "objc2-app-kit 0.2.2", "objc2-foundation 0.2.2", @@ -88,7 +88,7 @@ checksum = "09e230718177753b4e4ad9e1d9f6cfc2f4921212d4c1c480b253f526babb258d" dependencies = [ "accesskit 0.18.0", "accesskit_consumer 0.27.0", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "objc2 0.5.2", "objc2-app-kit 0.2.2", "objc2-foundation 0.2.2", @@ -120,7 +120,7 @@ checksum = "24fcd5d23d70670992b823e735e859374d694a3d12bfd8dd32bd3bd8bedb5d81" dependencies = [ "accesskit 0.17.1", "accesskit_consumer 0.26.0", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "paste", "static_assertions", "windows 0.58.0", @@ -135,7 +135,7 @@ checksum = "65178f3df98a51e4238e584fcb255cb1a4f9111820848eeddd37663be40a625f" dependencies = [ "accesskit 0.18.0", "accesskit_consumer 0.27.0", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "paste", "static_assertions", "windows 0.58.0", @@ -171,11 +171,11 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.24.2" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" dependencies = [ - "gimli 0.31.1", + "gimli 0.32.3", ] [[package]] @@ -315,7 +315,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed7572b7ba83a31e20d1b48970ee402d2e3e0537dcfe0a3ff4d6eb7508617d43" dependencies = [ "alsa-sys", - "bitflags 2.9.1", + "bitflags 2.9.4", "cfg-if", "libc", ] @@ -337,7 +337,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" dependencies = [ "android-properties", - "bitflags 2.9.1", + "bitflags 2.9.4", "cc", "cesu8", "jni 0.21.1", @@ -357,12 +357,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_log-sys" version = "0.3.2" @@ -409,9 +403,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.19" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" +checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" dependencies = [ "anstyle", "anstyle-parse", @@ -424,9 +418,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" @@ -439,29 +433,29 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.9" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "anymap2" @@ -490,17 +484,18 @@ dependencies = [ "image", "kurbo", "peniko", - "thiserror 2.0.12", + "thiserror 2.0.17", "usvg", ] [[package]] name = "anyrender_vello" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3baba14afab3466d9c2cb61afc8d27810e2209807affd945295ec6d47c2166c3" +checksum = "8c7bfb13ee0f53fb0bd500edb21f601e48e86d95d739c1a0a92579c7982b73d3" dependencies = [ "anyrender", + "debug_timer", "futures-intrusive", "kurbo", "peniko", @@ -545,7 +540,7 @@ dependencies = [ "apple-xar", "base64 0.21.7", "bcder", - "bitflags 2.9.1", + "bitflags 2.9.4", "bytes", "chrono", "clap", @@ -674,9 +669,9 @@ checksum = "d67af77d68a931ecd5cbd8a3b5987d63a1d1d1278f7f6a60ae33db485cdebb69" [[package]] name = "arbitrary" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" dependencies = [ "derive_arbitrary", ] @@ -695,7 +690,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -750,7 +745,7 @@ version = "0.38.0+1.3.281" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" dependencies = [ - "libloading 0.8.8", + "libloading 0.8.9", ] [[package]] @@ -762,13 +757,16 @@ dependencies = [ "enumflags2", "futures-channel", "futures-util", - "rand 0.9.1", + "rand 0.9.2", "raw-window-handle 0.6.2", "serde", "serde_repr", "tokio", "url", - "zbus 5.8.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "zbus 5.11.0", ] [[package]] @@ -823,18 +821,18 @@ checksum = "f548ad2c4031f2902e3edc1f29c29e835829437de49562d8eb5dc5584d3a1043" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "ast_node" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e2cddd48eafd883890770673b1971faceaf80a185445671abc3ea0c00593ee" +checksum = "0a184645bcc6f52d69d8e7639720699c6a99efb711f886e251ed1d16db8dd90e" dependencies = [ "quote", "swc_macros_common", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -843,7 +841,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" dependencies = [ - "event-listener 5.4.0", + "event-listener 5.4.1", "event-listener-strategy", "futures-core", "pin-project-lite", @@ -874,26 +872,23 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.25" +version = "0.4.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40f6024f3f856663b45fd0c9b6f2024034a702f453549449e0d84a305900dad4" +checksum = "5a89bce6054c720275ac2432fbba080a66a2106a44a1b804553930ca6909f4e0" dependencies = [ - "brotli", - "flate2", + "compression-codecs", + "compression-core", "futures-core", "futures-io", - "memchr", "pin-project-lite", "tokio", - "zstd", - "zstd-safe", ] [[package]] name = "async-executor" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" +checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" dependencies = [ "async-task", "concurrent-queue", @@ -905,9 +900,9 @@ dependencies = [ [[package]] name = "async-fs" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" +checksum = "8034a681df4aed8b8edbd7fbe472401ecf009251c8b40556b304567052e294c5" dependencies = [ "async-lock", "blocking", @@ -931,30 +926,29 @@ dependencies = [ [[package]] name = "async-io" -version = "2.4.1" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1237c0ae75a0f3765f58910ff9cdd0a12eeb39ab2f4c7de23262f337f0aacbb3" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" dependencies = [ - "async-lock", + "autocfg", "cfg-if", "concurrent-queue", "futures-io", "futures-lite", "parking", "polling", - "rustix 1.0.7", + "rustix 1.1.2", "slab", - "tracing", - "windows-sys 0.59.0", + "windows-sys 0.61.1", ] [[package]] name = "async-lock" -version = "3.4.0" +version = "3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" dependencies = [ - "event-listener 5.4.0", + "event-listener 5.4.1", "event-listener-strategy", "pin-project-lite", ] @@ -967,9 +961,9 @@ checksum = "4288f83726785267c6f2ef073a3d83dc3f9b81464e9f99898240cced85fce35a" [[package]] name = "async-process" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde3f4e40e6021d7acffc90095cbd6dc54cb593903d1de5832f435eb274b85dc" +checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" dependencies = [ "async-channel 2.5.0", "async-io", @@ -978,10 +972,9 @@ dependencies = [ "async-task", "blocking", "cfg-if", - "event-listener 5.4.0", + "event-listener 5.4.1", "futures-lite", - "rustix 1.0.7", - "tracing", + "rustix 1.1.2", ] [[package]] @@ -992,14 +985,14 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "async-signal" -version = "0.2.11" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7605a4e50d4b06df3898d5a70bf5fde51ed9059b0434b73105193bc27acce0d" +checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" dependencies = [ "async-io", "async-lock", @@ -1007,17 +1000,17 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 1.0.7", + "rustix 1.1.2", "signal-hook-registry", "slab", - "windows-sys 0.59.0", + "windows-sys 0.61.1", ] [[package]] name = "async-std" -version = "1.13.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "730294c1c08c2e0f85759590518f6333f0d5a0a766a27d519c1b244c3dfd8a24" +checksum = "2c8e079a4ab67ae52b7403632e4618815d6db36d2a010cfe41b02c1b1578f93b" dependencies = [ "async-channel 1.9.0", "async-global-executor", @@ -1058,7 +1051,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1072,13 +1065,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.88" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1217,7 +1210,7 @@ checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1242,18 +1235,18 @@ dependencies = [ [[package]] name = "avif-serialize" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ea8ef51aced2b9191c08197f55450d830876d9933f8f48a429b354f1d496b42" +checksum = "47c8fbc0f831f4519fe8b810b6a7a91410ec83031b8233f730a0480029f6a23f" dependencies = [ "arrayvec", ] [[package]] name = "aws-lc-rs" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fcc8f365936c834db5514fc45aee5b1202d677e6b40e48468aaaa8183ca8c7" +checksum = "94b8ff6c09cd57b16da53641caa860168b88c172a5ee163b0288d3d6eea12786" dependencies = [ "aws-lc-sys", "untrusted 0.7.1", @@ -1262,11 +1255,11 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.29.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61b1d86e7705efe1be1b569bab41d4fa1e14e220b60a160f78de2db687add079" +checksum = "0e44d16778acaf6a9ec9899b92cebd65580b83f685446bf2e1f5d3d732f99dcd" dependencies = [ - "bindgen 0.69.5", + "bindgen 0.72.1", "cc", "cmake", "dunce", @@ -1302,11 +1295,11 @@ dependencies = [ [[package]] name = "axum" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5" +checksum = "8a18ed336352031311f4e0b4dd2ff392d4fbb370777c9d18d7fc9d7359f73871" dependencies = [ - "axum-core 0.5.2", + "axum-core 0.5.5", "base64 0.22.1", "bytes", "form_urlencoded", @@ -1314,7 +1307,7 @@ dependencies = [ "http 1.3.1", "http-body 1.0.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-util", "itoa", "matchit 0.8.4", @@ -1323,15 +1316,14 @@ dependencies = [ "multer", "percent-encoding", "pin-project-lite", - "rustversion", - "serde", + "serde_core", "serde_json", "serde_path_to_error", "serde_urlencoded", "sha1", "sync_wrapper 1.0.2", "tokio", - "tokio-tungstenite 0.26.2", + "tokio-tungstenite 0.28.0", "tower 0.5.2", "tower-layer", "tower-service", @@ -1360,9 +1352,9 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.5.2" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6" +checksum = "59446ce19cd142f8833f856eb31f3eb097812d1479ab224f54d72428ca21ea22" dependencies = [ "bytes", "futures-core", @@ -1371,7 +1363,6 @@ dependencies = [ "http-body-util", "mime", "pin-project-lite", - "rustversion", "sync_wrapper 1.0.2", "tower-layer", "tower-service", @@ -1380,12 +1371,12 @@ dependencies = [ [[package]] name = "axum-extra" -version = "0.10.1" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45bf463831f5131b7d3c756525b305d40f1185b688565648a92e1392ca35713d" +checksum = "9963ff19f40c6102c76756ef0a46004c0d58957d87259fc9208ff8441c12ab96" dependencies = [ - "axum 0.8.4", - "axum-core 0.5.2", + "axum 0.8.6", + "axum-core 0.5.5", "bytes", "futures-util", "headers", @@ -1395,10 +1386,10 @@ dependencies = [ "mime", "pin-project-lite", "rustversion", - "serde", - "tower 0.5.2", + "serde_core", "tower-layer", "tower-service", + "tracing", ] [[package]] @@ -1412,14 +1403,14 @@ dependencies = [ "fs-err", "http 1.3.1", "http-body 1.0.1", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-util", "pin-project-lite", - "rustls 0.23.29", + "rustls 0.23.32", "rustls-pemfile 2.2.0", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.2", + "tokio-rustls 0.26.4", "tower-service", ] @@ -1431,7 +1422,7 @@ checksum = "9cbd59ac11f92412bd86308ce6c9d579e4a6ab627a2c7074afa5e4ef7144900d" dependencies = [ "aes-gcm", "async-trait", - "axum 0.8.4", + "axum 0.8.6", "base64 0.22.1", "bytes", "chrono", @@ -1446,7 +1437,7 @@ dependencies = [ "serde", "serde_json", "sha2", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tower-layer", "tower-service", @@ -1463,7 +1454,7 @@ dependencies = [ "anyhow", "async-recursion", "async-trait", - "axum-core 0.5.2", + "axum-core 0.5.5", "axum_session", "bytes", "chrono", @@ -1492,17 +1483,17 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.75" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" dependencies = [ "addr2line", "cfg-if", "libc", "miniz_oxide", - "object 0.36.7", + "object 0.37.3", "rustc-demangle", - "windows-targets 0.52.6", + "windows-link 0.2.0", ] [[package]] @@ -1563,9 +1554,9 @@ checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] name = "bcder" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ffdaa8c6398acd07176317eb6c1f9082869dd1cc3fee7c72c6354866b928cc" +checksum = "1f7c42c9913f68cf9390a225e81ad56a5c515347287eb98baa710090ca1de86d" dependencies = [ "bytes", "smallvec", @@ -1636,13 +1627,13 @@ dependencies = [ "bevy_utils", "blake3", "derive_more 1.0.0", - "downcast-rs 2.0.1", + "downcast-rs 2.0.2", "either", "petgraph 0.7.1", "ron", "serde", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.17", "thread_local", "tracing", "uuid", @@ -1663,9 +1654,9 @@ dependencies = [ "cfg-if", "console_error_panic_hook", "ctrlc", - "downcast-rs 2.0.1", + "downcast-rs 2.0.2", "log", - "thiserror 2.0.12", + "thiserror 2.0.17", "variadics_please", "wasm-bindgen", "web-sys", @@ -1689,12 +1680,12 @@ dependencies = [ "bevy_tasks", "bevy_utils", "bevy_window", - "bitflags 2.9.1", + "bitflags 2.9.4", "blake3", "crossbeam-channel", "derive_more 1.0.0", "disqualified", - "downcast-rs 2.0.1", + "downcast-rs 2.0.2", "either", "futures-io", "futures-lite", @@ -1703,7 +1694,7 @@ dependencies = [ "ron", "serde", "stackfuture", - "thiserror 2.0.12", + "thiserror 2.0.17", "tracing", "uuid", "wasm-bindgen", @@ -1720,7 +1711,7 @@ dependencies = [ "bevy_macro_utils", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1753,7 +1744,7 @@ dependencies = [ "derive_more 1.0.0", "encase", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", "wgpu-types", ] @@ -1777,13 +1768,13 @@ dependencies = [ "bevy_transform", "bevy_utils", "bevy_window", - "bitflags 2.9.1", + "bitflags 2.9.4", "bytemuck", "nonmax", "radsort", "serde", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.17", "tracing", ] @@ -1795,7 +1786,7 @@ checksum = "1b837bf6c51806b10ebfa9edf1844ad80a3a0760d6c5fac4e90761df91a8901a" dependencies = [ "bevy_macro_utils", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1829,18 +1820,18 @@ dependencies = [ "bevy_reflect", "bevy_tasks", "bevy_utils", - "bitflags 2.9.1", + "bitflags 2.9.4", "bumpalo", "concurrent-queue", "derive_more 1.0.0", "disqualified", "fixedbitset 0.5.7", - "indexmap 2.10.0", + "indexmap 2.11.4", "log", "nonmax", "serde", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.17", "variadics_please", ] @@ -1853,7 +1844,7 @@ dependencies = [ "bevy_macro_utils", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1879,7 +1870,7 @@ dependencies = [ "bevy_time", "bevy_utils", "gilrs", - "thiserror 2.0.12", + "thiserror 2.0.17", "tracing", ] @@ -1917,7 +1908,7 @@ dependencies = [ "bevy_macro_utils", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1951,7 +1942,7 @@ dependencies = [ "serde", "serde_json", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.17", "tracing", ] @@ -1968,7 +1959,7 @@ dependencies = [ "bevy_platform", "bevy_reflect", "bevy_utils", - "bitflags 2.9.1", + "bitflags 2.9.4", "bytemuck", "futures-lite", "guillotiere", @@ -1978,7 +1969,7 @@ dependencies = [ "rectangle-pack", "ruzstd 0.8.1", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", "tracing", "wgpu-types", ] @@ -1998,7 +1989,7 @@ dependencies = [ "derive_more 1.0.0", "log", "smol_str", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -2014,7 +2005,7 @@ dependencies = [ "bevy_reflect", "bevy_window", "log", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -2086,7 +2077,7 @@ dependencies = [ "parking_lot", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "toml_edit 0.22.27", ] @@ -2106,7 +2097,7 @@ dependencies = [ "rand_distr", "serde", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.17", "variadics_please", ] @@ -2126,11 +2117,11 @@ dependencies = [ "bevy_reflect", "bevy_transform", "bevy_utils", - "bitflags 2.9.1", + "bitflags 2.9.4", "bytemuck", "hexasphere", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", "tracing", "wgpu-types", ] @@ -2165,7 +2156,7 @@ dependencies = [ "bevy_transform", "bevy_utils", "bevy_window", - "bitflags 2.9.1", + "bitflags 2.9.4", "bytemuck", "derive_more 1.0.0", "fixedbitset 0.5.7", @@ -2174,7 +2165,7 @@ dependencies = [ "radsort", "smallvec", "static_assertions", - "thiserror 2.0.12", + "thiserror 2.0.17", "tracing", ] @@ -2211,9 +2202,9 @@ checksum = "f7573dc824a1b08b4c93fdbe421c53e1e8188e9ca1dd74a414455fe571facb47" dependencies = [ "cfg-if", "critical-section", - "foldhash", + "foldhash 0.1.5", "getrandom 0.2.16", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "portable-atomic", "portable-atomic-util", "serde", @@ -2240,15 +2231,15 @@ dependencies = [ "bevy_utils", "derive_more 1.0.0", "disqualified", - "downcast-rs 2.0.1", + "downcast-rs 2.0.2", "erased-serde", - "foldhash", + "foldhash 0.1.5", "glam", "petgraph 0.7.1", "serde", "smallvec", "smol_str", - "thiserror 2.0.12", + "thiserror 2.0.17", "uuid", "variadics_please", "wgpu-types", @@ -2263,7 +2254,7 @@ dependencies = [ "bevy_macro_utils", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "uuid", ] @@ -2292,16 +2283,16 @@ dependencies = [ "bevy_transform", "bevy_utils", "bevy_window", - "bitflags 2.9.1", + "bitflags 2.9.4", "bytemuck", "codespan-reporting 0.11.1", "derive_more 1.0.0", - "downcast-rs 2.0.1", + "downcast-rs 2.0.2", "encase", "fixedbitset 0.5.7", "futures-lite", "image", - "indexmap 2.10.0", + "indexmap 2.11.4", "js-sys", "ktx2", "naga", @@ -2311,7 +2302,7 @@ dependencies = [ "send_wrapper", "serde", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.17", "tracing", "variadics_please", "wasm-bindgen", @@ -2328,7 +2319,7 @@ dependencies = [ "bevy_macro_utils", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2348,7 +2339,7 @@ dependencies = [ "bevy_utils", "derive_more 1.0.0", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", "uuid", ] @@ -2373,7 +2364,7 @@ dependencies = [ "bevy_transform", "bevy_utils", "bevy_window", - "bitflags 2.9.1", + "bitflags 2.9.4", "bytemuck", "derive_more 1.0.0", "fixedbitset 0.5.7", @@ -2407,7 +2398,7 @@ dependencies = [ "bevy_macro_utils", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2457,7 +2448,7 @@ dependencies = [ "serde", "smallvec", "sys-locale", - "thiserror 2.0.12", + "thiserror 2.0.17", "tracing", "unicode-bidi", ] @@ -2492,7 +2483,7 @@ dependencies = [ "bevy_utils", "derive_more 1.0.0", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -2526,7 +2517,7 @@ dependencies = [ "nonmax", "smallvec", "taffy 0.7.7", - "thiserror 2.0.12", + "thiserror 2.0.17", "tracing", ] @@ -2608,36 +2599,13 @@ dependencies = [ "num-traits", ] -[[package]] -name = "bindgen" -version = "0.69.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" -dependencies = [ - "bitflags 2.9.1", - "cexpr", - "clang-sys", - "itertools 0.12.1", - "lazy_static", - "lazycell", - "log", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "rustc-hash 1.1.0", - "shlex", - "syn 2.0.104", - "which 4.4.2", -] - [[package]] name = "bindgen" version = "0.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "cexpr", "clang-sys", "itertools 0.13.0", @@ -2648,25 +2616,27 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "bindgen" -version = "0.72.0" +version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f72209734318d0b619a5e0f5129918b848c416e122a3c4ce054e03cb87b726f" +checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "cexpr", "clang-sys", "itertools 0.13.0", + "log", + "prettyplease", "proc-macro2", "quote", "regex", "rustc-hash 2.1.1", "shlex", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2701,9 +2671,9 @@ checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bit_field" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" +checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" [[package]] name = "bitfield" @@ -2719,9 +2689,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.1" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" dependencies = [ "serde", ] @@ -2790,14 +2760,14 @@ dependencies = [ [[package]] name = "blitz-dom" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9684c4041ad76528d5fce5c4194068bef7ae315148b71e308b6fc600ee683ca0" +checksum = "b40d275ae1ea7c6b70233ebd6ed4278038ab4d00dcc1812bca14c9c3ab065116" dependencies = [ "accesskit 0.17.1", "app_units", "atomic_refcell", - "bitflags 2.9.1", + "bitflags 2.9.4", "blitz-traits", "color", "cssparser 0.35.0", @@ -2809,12 +2779,13 @@ dependencies = [ "image", "keyboard-types", "markup5ever 0.35.0", - "objc2 0.6.1", + "objc2 0.6.2", "parley", "peniko", "percent-encoding", + "rayon", "selectors 0.31.0", - "skrifa", + "skrifa 0.31.3", "slab", "smallvec", "stylo", @@ -2822,11 +2793,11 @@ dependencies = [ "stylo_dom", "stylo_taffy", "stylo_traits", - "taffy 0.9.0", + "taffy 0.9.1", "tracing", "url", "usvg", - "woff", + "wuff", ] [[package]] @@ -2848,8 +2819,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2434788de88b5b6b10a4b71b08284be3126633caa53c15063a2bf322ef6c6202" dependencies = [ "blitz-traits", - "data-url 0.3.1", - "reqwest 0.12.22", + "data-url 0.3.2", + "reqwest 0.12.23", "tokio", ] @@ -2869,7 +2840,7 @@ dependencies = [ "parley", "peniko", "stylo", - "taffy 0.9.0", + "taffy 0.9.1", "tracing", "usvg", ] @@ -2899,7 +2870,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28632c6f78fa8a70c11f88df2c0fe459c1391acf2cf1032040a57e991f4b5512" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "bytes", "cursor-icon", "http 1.3.1", @@ -2948,7 +2919,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "340d2f0bdb2a43c1d3cd40513185b2bd7def0aa1052f956455114bc98f82dcf2" dependencies = [ - "objc2 0.6.1", + "objc2 0.6.2", ] [[package]] @@ -2987,11 +2958,11 @@ dependencies = [ [[package]] name = "bluez-async" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50ce74d1f22603b879c3a99bd30eddc423460fb73a802655ca615b623ff3a838" +checksum = "84ae4213cc2a8dc663acecac67bbdad05142be4d8ef372b6903abf878b0c690a" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "bluez-generated", "dbus", "dbus-tokio", @@ -3000,7 +2971,7 @@ dependencies = [ "log", "serde", "serde-xml-rs 0.8.1", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "uuid", ] @@ -3031,17 +3002,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdd1d3c0c2f5833f22386f252fe8ed005c7f59fdcddeef025c01b4c3b9fd9ac3" dependencies = [ "once_cell", - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "brotli" -version = "8.0.1" +version = "8.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d" +checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -3060,9 +3031,9 @@ dependencies = [ [[package]] name = "browserslist-data" -version = "0.1.1" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c49471c5ae53cefe3ac4acc4d3c75cb4b68995b70b3bbb864f8e08fae282098c" +checksum = "2e977366ea69a6e756ae616c0d5def0da9a3521fca5f91f447fdf613c928a15a" dependencies = [ "ahash 0.8.12", "chrono", @@ -3077,7 +3048,7 @@ dependencies = [ "ahash 0.8.12", "chrono", "either", - "indexmap 2.10.0", + "indexmap 2.11.4", "itertools 0.13.0", "nom", "serde", @@ -3109,7 +3080,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" dependencies = [ "memchr", - "regex-automata 0.4.9", + "regex-automata", "serde", ] @@ -3120,7 +3091,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9a11621cb2c8c024e444734292482b1ad86fb50ded066cf46252e46643c8748" dependencies = [ "async-trait", - "bitflags 2.9.1", + "bitflags 2.9.4", "bluez-async", "dashmap 6.1.0", "dbus", @@ -3133,12 +3104,12 @@ dependencies = [ "objc2-foundation 0.2.2", "once_cell", "static_assertions", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tokio-stream", "uuid", "windows 0.61.3", - "windows-future", + "windows-future 0.2.1", ] [[package]] @@ -3198,22 +3169,22 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.23.1" +version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" +checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.9.3" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ecc273b49b3205b83d648f0690daa588925572cc5063745bfe547fe7ec8e1a1" +checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -3276,7 +3247,7 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "cairo-sys-rs", "glib", "libc", @@ -3301,7 +3272,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "log", "polling", "rustix 0.38.44", @@ -3333,37 +3304,37 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.10" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" +checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" dependencies = [ - "serde", + "serde_core", ] [[package]] name = "cargo-config2" -version = "0.1.34" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82de3b1a1dd72252c6d456247864ffe52110d109da949f579eeb16349e0eb5d" +checksum = "bdb1d44c72604e6dac5d86fb04a07489b78d2e766a6e06c69c0af09af6e294fc" dependencies = [ "serde", "serde_derive", - "toml_edit 0.22.27", - "windows-sys 0.60.2", + "toml 0.9.6", + "windows-sys 0.61.1", ] [[package]] name = "cargo-generate" -version = "0.23.3" +version = "0.23.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd3cea99ecf678f9f12dd63f685f9ae79dca897ebb2a8a0aa1ec4dfb8b64d534" +checksum = "6a34fe2474196bb138e1d17180f64457ae2012deda9eb796d0f20fc276073dbf" dependencies = [ "anstyle", "anyhow", "auth-git2", "cargo-util-schemas", "clap", - "console 0.15.11", + "console 0.16.1", "dialoguer", "env_logger 0.11.8", "fs-err", @@ -3372,8 +3343,8 @@ dependencies = [ "heck 0.5.0", "home", "ignore", - "indexmap 2.10.0", - "indicatif", + "indexmap 2.11.4", + "indicatif 0.18.0", "liquid", "liquid-core", "liquid-derive", @@ -3388,9 +3359,9 @@ dependencies = [ "semver", "serde", "tempfile", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", - "toml 0.8.23", + "toml 0.9.6", "walkdir", ] @@ -3413,7 +3384,7 @@ dependencies = [ "serde", "serde-untagged", "serde-value", - "thiserror 2.0.12", + "thiserror 2.0.17", "toml 0.8.23", "unicode-xid", "url", @@ -3430,17 +3401,17 @@ dependencies = [ "semver", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] name = "cargo_toml" -version = "0.22.1" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02260d489095346e5cafd04dea8e8cb54d1d74fcd759022a9b72986ebe9a1257" +checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" dependencies = [ "serde", - "toml 0.8.23", + "toml 0.9.6", ] [[package]] @@ -3466,9 +3437,9 @@ dependencies = [ [[package]] name = "castaway" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5" +checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a" dependencies = [ "rustversion", ] @@ -3484,10 +3455,11 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.29" +version = "1.2.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362" +checksum = "e1354349954c6fc9cb0deab020f27f783cf0b604e8bb754dc4658ecf0d29c35f" dependencies = [ + "find-msvc-tools", "jobserver", "libc", "shlex", @@ -3549,9 +3521,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" [[package]] name = "cfg_aliases" @@ -3561,17 +3533,16 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "serde", "wasm-bindgen", - "windows-link", + "windows-link 0.2.0", ] [[package]] @@ -3619,14 +3590,14 @@ checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" dependencies = [ "glob", "libc", - "libloading 0.8.8", + "libloading 0.8.9", ] [[package]] name = "clap" -version = "4.5.41" +version = "4.5.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be92d32e80243a54711e5d7ce823c35c41c9d929dc4ab58e1276f625841aadf9" +checksum = "e2134bb3ea021b78629caa971416385309e0131b351b25e01dc16fb54e1b5fae" dependencies = [ "clap_builder", "clap_derive", @@ -3634,9 +3605,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.41" +version = "4.5.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707eab41e9622f9139419d573eca0900137718000c517d47da73045f54331c3d" +checksum = "c2ba64afa3c0a6df7fa517765e31314e983f51dda798ffba27b988194fb65dc9" dependencies = [ "anstream", "anstyle", @@ -3647,14 +3618,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.41" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" +checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -3689,7 +3660,7 @@ version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad36507aeb7e16159dfe68db81ccc27571c3ccd4b76fb2fb72fc59e7a4b1b64c" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "block", "cocoa-foundation", "core-foundation 0.10.1", @@ -3705,7 +3676,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81411967c50ee9a1fc11365f8c585f863a22a9697c89239c452292c40ba79b0d" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "block", "core-foundation 0.10.1", "core-graphics-types 0.2.0", @@ -3741,9 +3712,9 @@ dependencies = [ [[package]] name = "color" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ae467d04a8a8aea5d9a49018a6ade2e4221d92968e8ce55a48c0b1164e5f698" +checksum = "a18ef4657441fb193b65f34dc39b3781f0dfec23d3bd94d0eeb4e88cde421edb" [[package]] name = "color_quant" @@ -3794,6 +3765,26 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "compression-codecs" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef8a506ec4b81c460798f572caead636d57d3d7e940f998160f52bd254bf2d23" +dependencies = [ + "brotli", + "compression-core", + "flate2", + "memchr", + "zstd", + "zstd-safe", +] + +[[package]] +name = "compression-core" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb" + [[package]] name = "concurrent-queue" version = "2.5.0" @@ -3819,15 +3810,15 @@ dependencies = [ [[package]] name = "console" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e09ced7ebbccb63b4c65413d821f2e00ce54c5ca4514ddc6b3c892fdbcbc69d" +checksum = "b430743a6eb14e9764d4260d4c0d8123087d504eeb9c48f2b2a5e810dd369df4" dependencies = [ "encode_unicode", "libc", "once_cell", "unicode-width 0.2.0", - "windows-sys 0.60.2", + "windows-sys 0.61.1", ] [[package]] @@ -3917,7 +3908,7 @@ version = "0.7.0-rc.0" dependencies = [ "const-serialize", "const-serialize-macro", - "rand 0.9.1", + "rand 0.9.2", "serde", ] @@ -3927,7 +3918,7 @@ version = "0.7.0-rc.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -3941,9 +3932,9 @@ dependencies = [ [[package]] name = "const-str" -version = "0.6.2" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e991226a70654b49d34de5ed064885f0bef0348a8e70018b8ff1ac80aa984a2" +checksum = "451d0640545a0553814b4c646eb549343561618838e9b42495f466131fe3ad49" [[package]] name = "const-str-proc-macro" @@ -3978,9 +3969,12 @@ dependencies = [ [[package]] name = "const_panic" -version = "0.2.12" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2459fc9262a1aa204eb4b5764ad4f189caec88aea9634389c0a25f8be7f6265e" +checksum = "e262cdaac42494e3ae34c43969f9cdeb7da178bdb4b66fa6a1ea2edb4c8ae652" +dependencies = [ + "typewit", +] [[package]] name = "const_soft_float" @@ -4105,7 +4099,7 @@ version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "core-foundation 0.10.1", "core-graphics-types 0.2.0", "foreign-types 0.5.0", @@ -4129,7 +4123,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "core-foundation 0.10.1", "libc", ] @@ -4160,7 +4154,7 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ceec7a6067e62d6f931a2baf6f3a751f4a892595bcec1461a3c94ef9949864b6" dependencies = [ - "bindgen 0.72.0", + "bindgen 0.72.1", ] [[package]] @@ -4169,7 +4163,7 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e418dd4f5128c3e93eab12246391c54a20c496811131f85754dc8152ee207892" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "fontdb 0.16.2", "log", "rangemap", @@ -4274,9 +4268,9 @@ checksum = "fd121741cf3eb82c08dd3023eb55bf2665e5f60ec20f89760cf836ae4562e6a0" [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] @@ -4391,7 +4385,7 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "crossterm_winapi", "mio", "parking_lot", @@ -4407,14 +4401,14 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "crossterm_winapi", "derive_more 2.0.1", "document-features", "futures-core", "mio", "parking_lot", - "rustix 1.0.7", + "rustix 1.1.2", "signal-hook", "signal-hook-mio", "winapi", @@ -4535,7 +4529,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4545,7 +4539,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4559,12 +4553,13 @@ dependencies = [ [[package]] name = "ctrlc" -version = "3.4.7" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46f93780a459b7d656ef7f071fe699c4d3d2cb201c4b24d085b6ddc505276e73" +checksum = "881c5d0a13b2f1498e2306e82cbada78390e152d4b1378fb28a84f4dcd0dc4f3" dependencies = [ + "dispatch", "nix 0.30.1", - "windows-sys 0.59.0", + "windows-sys 0.61.1", ] [[package]] @@ -4575,15 +4570,15 @@ checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" [[package]] name = "curve25519-dalek" -version = "4.2.0" +version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "373b7c5dbd637569a2cca66e8d66b8c446a1e7bf064ea321d265d7b3dfe7c97e" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", "cpufeatures", "curve25519-dalek-derive", "digest", - "fiat-crypto 0.3.0", + "fiat-crypto 0.2.9", "rand_core 0.6.4", "rustc_version", "subtle", @@ -4598,7 +4593,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4612,64 +4607,65 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.160" +version = "1.0.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be1149bab7a5580cb267215751389597c021bfad13c0bb00c54e19559333764c" +checksum = "4e9c4fe7f2f5dc5c62871a1b43992d197da6fa1394656a94276ac2894a90a6fe" dependencies = [ "cc", + "cxx-build", "cxxbridge-cmd", "cxxbridge-flags", "cxxbridge-macro", - "foldhash", + "foldhash 0.2.0", "link-cplusplus", ] [[package]] name = "cxx-build" -version = "1.0.160" +version = "1.0.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aeeaf1aefae8e0f5141920a7ecbc64a22ab038d4b4ac59f2d19e0effafd5b53" +checksum = "b5cf2909d37d80633ddd208676fc27c2608a7f035fff69c882421168038b26dd" dependencies = [ "cc", "codespan-reporting 0.12.0", - "indexmap 2.10.0", + "indexmap 2.11.4", "proc-macro2", "quote", "scratch", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "cxxbridge-cmd" -version = "1.0.160" +version = "1.0.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c36ac1f9a72064b1f41fd7b49a4c1b3bf33b9ccb1274874dda6d264f57c55964" +checksum = "077f5ee3d3bfd8d27f83208fdaa96ddd50af7f096c77077cc4b94da10bfacefd" dependencies = [ "clap", "codespan-reporting 0.12.0", - "indexmap 2.10.0", + "indexmap 2.11.4", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "cxxbridge-flags" -version = "1.0.160" +version = "1.0.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "170c6ff5d009663866857a91ebee55b98ea4d4b34e7d7aba6dc4a4c95cc7b748" +checksum = "b0108748615125b9f2e915dfafdffcbdabbca9b15102834f6d7e9a768f2f2864" [[package]] name = "cxxbridge-macro" -version = "1.0.160" +version = "1.0.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4984a142211026786011a7e79fa22faa1eca1e9cbf0e60bffecfd57fd3db88f1" +checksum = "e6e896681ef9b8dc462cfa6961d61909704bde0984b30bcb4082fe102b478890" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.4", "proc-macro2", "quote", "rustversion", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4678,8 +4674,18 @@ version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + +[[package]] +name = "darling" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core 0.21.3", + "darling_macro 0.21.3", ] [[package]] @@ -4693,7 +4699,21 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.104", + "syn 2.0.106", +] + +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.106", ] [[package]] @@ -4702,9 +4722,20 @@ version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ - "darling_core", + "darling_core 0.20.11", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core 0.21.3", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4757,9 +4788,9 @@ dependencies = [ [[package]] name = "data-url" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" +checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" [[package]] name = "dbl" @@ -4772,15 +4803,15 @@ dependencies = [ [[package]] name = "dbus" -version = "0.9.7" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b" +checksum = "190b6255e8ab55a7b568df5a883e9497edc3e4821c06396612048b430e5ad1e9" dependencies = [ "futures-channel", "futures-util", "libc", "libdbus-sys", - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -4796,9 +4827,9 @@ dependencies = [ [[package]] name = "debug_timer" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6283985164a993d14300c81746aa6db2d889ed9fbb573fa20b40737c3a972c" +checksum = "666ffd4494c077ad572420cc52aded853e1cac859147455f82b0bc578b442076" [[package]] name = "debugid" @@ -4814,7 +4845,7 @@ dependencies = [ name = "depinfo" version = "0.7.0-rc.0" dependencies = [ - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -4830,23 +4861,23 @@ dependencies = [ [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" dependencies = [ "powerfmt", - "serde", + "serde_core", ] [[package]] name = "derive_arbitrary" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" +checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4864,10 +4895,10 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" dependencies = [ - "darling", + "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4877,7 +4908,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4890,7 +4921,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4919,7 +4950,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "unicode-xid", ] @@ -4932,7 +4963,7 @@ dependencies = [ "convert_case 0.7.1", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5013,10 +5044,10 @@ dependencies = [ "env_logger 0.11.8", "futures-util", "manganis", - "rand 0.9.1", + "rand 0.9.2", "serde", "subsecond", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tracing", "warnings", @@ -5039,7 +5070,7 @@ dependencies = [ "ndk-sys 0.6.0+11769913", "percent-encoding", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "wasm-bindgen-futures", "web-sys", @@ -5056,7 +5087,7 @@ dependencies = [ "quote", "regex", "serde", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5068,7 +5099,7 @@ dependencies = [ "pretty_assertions", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5079,7 +5110,7 @@ dependencies = [ "ansi-to-tui", "anyhow", "ar", - "axum 0.8.4", + "axum 0.8.6", "axum-extra", "axum-server", "backtrace", @@ -5091,7 +5122,7 @@ dependencies = [ "cargo_toml", "chrono", "clap", - "console 0.16.0", + "console 0.16.1", "console-subscriber", "const-serialize", "convert_case 0.8.0", @@ -5124,7 +5155,7 @@ dependencies = [ "handlebars", "headers", "html_parser", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-rustls 0.27.7", "hyper-util", "ignore", @@ -5139,7 +5170,7 @@ dependencies = [ "memoize", "notify", "nucleo", - "object 0.37.1", + "object 0.37.3", "open", "path-absolutize", "pdb", @@ -5150,8 +5181,8 @@ dependencies = [ "ratatui", "rayon", "regex", - "reqwest 0.12.22", - "rustls 0.23.29", + "reqwest 0.12.23", + "rustls 0.23.32", "self-replace", "self_update", "sentry-backtrace", @@ -5159,15 +5190,15 @@ dependencies = [ "serde_json", "serde_json5", "shell-words", - "strum 0.27.1", + "strum 0.27.2", "subsecond-types", - "syn 2.0.104", + "syn 2.0.106", "tar", - "target-lexicon 0.13.2", + "target-lexicon 0.13.3", "tauri-bundler", "tauri-utils", "tempfile", - "thiserror 2.0.12", + "thiserror 2.0.17", "throbber-widgets-tui", "tokio", "tokio-stream", @@ -5214,8 +5245,8 @@ dependencies = [ "manganis", "manganis-core", "mozjpeg", - "object 0.37.1", - "png", + "object 0.37.3", + "png 0.17.16", "rayon", "serde", "serde_json", @@ -5252,7 +5283,7 @@ version = "0.0.1" dependencies = [ "dioxus", "flate2", - "reqwest 0.12.22", + "reqwest 0.12.23", "serde", "serde_json", "tar", @@ -5264,7 +5295,7 @@ version = "0.7.0-rc.0" dependencies = [ "chrono", "dirs 6.0.0", - "rand 0.9.1", + "rand 0.9.2", "serde", "serde_json", "uuid", @@ -5296,8 +5327,8 @@ dependencies = [ "generational-box", "longest-increasing-subsequence", "pretty_assertions", - "rand 0.9.1", - "reqwest 0.12.22", + "rand 0.9.2", + "reqwest 0.12.23", "rustc-hash 2.1.1", "rustversion", "serde", @@ -5324,7 +5355,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.104", + "syn 2.0.106", "tokio", "trybuild", ] @@ -5371,8 +5402,8 @@ dependencies = [ "objc", "objc_id", "percent-encoding", - "rand 0.9.1", - "reqwest 0.12.22", + "rand 0.9.2", + "reqwest 0.12.23", "rfd", "rustc-hash 2.1.1", "separator", @@ -5382,7 +5413,7 @@ dependencies = [ "slab", "subtle", "tao", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tracing", "tray-icon", @@ -5404,7 +5435,7 @@ dependencies = [ "serde", "serde_json", "subsecond", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tracing", "tungstenite 0.27.0", @@ -5464,8 +5495,8 @@ dependencies = [ "getrandom 0.3.3", "http-range", "ouroboros", - "rand 0.9.1", - "reqwest 0.12.22", + "rand 0.9.2", + "reqwest 0.12.23", "separator", "serde", "serde_json", @@ -5482,7 +5513,7 @@ dependencies = [ "dioxus-autofmt", "dioxus-rsx-rosetta", "html_parser", - "syn 2.0.104", + "syn 2.0.106", "wasm-bindgen", ] @@ -5492,7 +5523,7 @@ version = "0.7.0-rc.0" dependencies = [ "async-trait", "aws-lc-rs", - "axum 0.8.4", + "axum 0.8.6", "base64 0.22.1", "bytes", "ciborium", @@ -5518,10 +5549,10 @@ dependencies = [ "hyper-rustls 0.27.7", "parking_lot", "pin-project", - "rustls 0.23.29", + "rustls 0.23.32", "serde", "server_fn", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-util", @@ -5579,7 +5610,7 @@ dependencies = [ "futures-channel", "futures-util", "generational-box", - "reqwest 0.12.22", + "reqwest 0.12.23", "rustversion", "slab", "tokio", @@ -5624,7 +5655,7 @@ dependencies = [ "convert_case 0.8.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "trybuild", ] @@ -5652,9 +5683,9 @@ version = "0.7.0-rc.0" dependencies = [ "chrono", "http 1.3.1", - "lru 0.16.0", + "lru 0.16.1", "rustc-hash 2.1.1", - "thiserror 2.0.12", + "thiserror 2.0.17", "tracing", "walkdir", ] @@ -5663,7 +5694,7 @@ dependencies = [ name = "dioxus-liveview" version = "0.7.0-rc.0" dependencies = [ - "axum 0.8.4", + "axum 0.8.6", "dioxus", "dioxus-cli-config", "dioxus-core", @@ -5679,7 +5710,7 @@ dependencies = [ "serde", "serde_json", "slab", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-util", @@ -5780,7 +5811,7 @@ dependencies = [ name = "dioxus-playwright-liveview-test" version = "0.0.1" dependencies = [ - "axum 0.8.4", + "axum 0.8.6", "dioxus", "dioxus-liveview", "tokio", @@ -5823,7 +5854,7 @@ dependencies = [ name = "dioxus-router" version = "0.7.0-rc.0" dependencies = [ - "axum 0.8.4", + "axum 0.8.6", "base64 0.22.1", "ciborium", "criterion", @@ -5858,7 +5889,7 @@ dependencies = [ "quote", "sha2", "slab", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5870,7 +5901,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5884,7 +5915,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.104", + "syn 2.0.106", "tracing", ] @@ -5901,7 +5932,7 @@ dependencies = [ "pretty_assertions", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5910,7 +5941,7 @@ version = "0.7.0-rc.0" dependencies = [ "async-trait", "aws-lc-rs", - "axum 0.8.4", + "axum 0.8.6", "base64 0.22.1", "bytes", "ciborium", @@ -5935,17 +5966,17 @@ dependencies = [ "futures-util", "generational-box", "http 1.3.1", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-rustls 0.27.7", "hyper-util", "inventory", "parking_lot", "pin-project", - "rustls 0.23.29", + "rustls 0.23.32", "serde", "server_fn", "subsecond", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-util", @@ -5967,8 +5998,8 @@ dependencies = [ "futures-util", "generational-box", "parking_lot", - "rand 0.9.1", - "reqwest 0.12.22", + "rand 0.9.2", + "reqwest 0.12.23", "rustc-hash 2.1.1", "serde", "tokio", @@ -6007,7 +6038,7 @@ dependencies = [ "dioxus-stores", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -6061,13 +6092,13 @@ dependencies = [ name = "dioxus_server_macro" version = "0.7.0-rc.0" dependencies = [ - "axum 0.8.4", + "axum 0.8.6", "dioxus", "proc-macro2", "quote", "serde", "server_fn_macro", - "syn 2.0.104", + "syn 2.0.106", "tower-http", ] @@ -6120,8 +6151,8 @@ checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" dependencies = [ "libc", "option-ext", - "redox_users 0.5.0", - "windows-sys 0.60.2", + "redox_users 0.5.2", + "windows-sys 0.61.1", ] [[package]] @@ -6130,26 +6161,16 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" -[[package]] -name = "dispatch2" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a0d569e003ff27784e0e14e4a594048698e0c0f0b66cabcb51511be55a7caa0" -dependencies = [ - "bitflags 2.9.1", - "block2 0.6.1", - "libc", - "objc2 0.6.1", -] - [[package]] name = "dispatch2" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ - "bitflags 2.9.1", - "objc2 0.6.1", + "bitflags 2.9.4", + "block2 0.6.1", + "libc", + "objc2 0.6.2", ] [[package]] @@ -6160,7 +6181,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -6181,14 +6202,14 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" dependencies = [ - "libloading 0.8.8", + "libloading 0.8.9", ] [[package]] name = "dlopen2" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6" +checksum = "b54f373ccf864bf587a89e880fb7610f8d73f3045f13580948ccbcaff26febff" dependencies = [ "dlopen2_derive", "libc", @@ -6204,7 +6225,7 @@ checksum = "788160fb30de9cdd857af31c6a2675904b16ece8fc2737b2c7127ba368c9d0f4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -6236,9 +6257,9 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "downcast-rs" -version = "2.0.1" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea8a8b81cacc08888170eef4d13b775126db426d0b348bee9d18c2c1eaf123cf" +checksum = "117240f60069e65410b3ae1bb213295bd828f707b5bec6596a1afc8793ce0cbc" [[package]] name = "dpi" @@ -6285,9 +6306,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "eax" @@ -6322,7 +6343,7 @@ version = "0.1.1" dependencies = [ "chrono", "dioxus", - "reqwest 0.12.22", + "reqwest 0.12.23", "serde", ] @@ -6421,7 +6442,7 @@ checksum = "f97b51c5cc57ef7c5f7a0c57c250251c49ee4c28f819f87ac32f4aceabc36792" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -6464,7 +6485,7 @@ checksum = "ba7795da175654fe16979af73f81f26a8ea27638d8d9823d317016888a63dc4c" dependencies = [ "num-traits", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -6485,28 +6506,28 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "enumset" -version = "1.1.7" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6ee17054f550fd7400e1906e2f9356c7672643ed34008a9e8abe147ccd2d821" +checksum = "25b07a8dfbbbfc0064c0a6bdf9edcf966de6b1c33ce344bdeca3b41615452634" dependencies = [ "enumset_derive", ] [[package]] name = "enumset_derive" -version = "0.12.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d07902c93376f1e96c34abc4d507c0911df3816cef50b01f5a2ff3ad8c370d" +checksum = "f43e744e4ea338060faee68ed933e46e722fb7f3617e722a5772d7e856d8b3ce" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -6568,7 +6589,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -6579,32 +6600,32 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "erased-serde" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7" +checksum = "259d404d09818dec19332e31d94558aeb442fea04c817006456c24b5460bbd4b" dependencies = [ "serde", + "serde_core", "typeid", ] [[package]] name = "errno" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.1", ] [[package]] name = "escargot" -version = "0.5.14" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83f351750780493fc33fa0ce8ba3c7d61f9736cfa3b3bb9ee2342643ffe40211" +checksum = "11c3aea32bc97b500c9ca6a72b768a26e558264303d101d3409cf6d57a9ed0cf" dependencies = [ "log", - "once_cell", "serde", "serde_json", ] @@ -6638,9 +6659,9 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "event-listener" -version = "5.4.0" +version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" dependencies = [ "concurrent-queue", "parking", @@ -6653,7 +6674,7 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ - "event-listener 5.4.0", + "event-listener 5.4.1", "pin-project-lite", ] @@ -6685,7 +6706,7 @@ checksum = "ce8cd46a041ad005ab9c71263f9a0ff5b529eac0fe4cc9b4a20f4f0765d8cf4b" dependencies = [ "execute-command-tokens", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -6733,15 +6754,6 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" -[[package]] -name = "faster-hex" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a2b11eda1d40935b26cf18f6833c526845ae8c41e58d09af6adeb6f0269183" -dependencies = [ - "serde", -] - [[package]] name = "faster-hex" version = "0.10.0" @@ -6758,6 +6770,26 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +[[package]] +name = "fax" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab" +dependencies = [ + "fax_derive", +] + +[[package]] +name = "fax_derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "fdeflate" version = "0.3.7" @@ -6785,9 +6817,9 @@ checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77" [[package]] name = "fiat-crypto" -version = "0.3.0" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "field-offset" @@ -6823,16 +6855,22 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.25" +version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" dependencies = [ "cfg-if", "libc", "libredox", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959" + [[package]] name = "fixedbitset" version = "0.4.2" @@ -6885,6 +6923,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + [[package]] name = "font-types" version = "0.9.0" @@ -6949,15 +6993,15 @@ checksum = "39f97079e1293b8c1e9fb03a2875d328bd2ee8f3b95ce62959c0acc04049c708" dependencies = [ "bytemuck", "fontconfig-cache-parser", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "icu_locid", "memmap2", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-core-foundation", "objc2-core-text", "objc2-foundation 0.3.1", "peniko", - "read-fonts", + "read-fonts 0.29.3", "roxmltree", "smallvec", "windows 0.58.0", @@ -6991,7 +7035,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -7008,9 +7052,9 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] @@ -7032,14 +7076,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "308530a56b099da144ebc5d8e179f343ad928fa2b3558d1eb3db9af18d6eff43" dependencies = [ "swc_macros_common", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "fs-err" -version = "3.1.1" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d7be93788013f265201256d58f04936a8079ad5dc898743aa20525f503b683" +checksum = "44f150ffc8782f35521cec2b23727707cb4045706ba3c854e86bef66b3a8cdbd" dependencies = [ "autocfg", "tokio", @@ -7090,7 +7134,7 @@ version = "0.1.0" dependencies = [ "anyhow", "async-trait", - "axum 0.8.4", + "axum 0.8.6", "axum_session", "axum_session_auth", "axum_session_sqlx", @@ -7121,7 +7165,7 @@ version = "0.1.0" dependencies = [ "chrono", "dioxus", - "reqwest 0.12.22", + "reqwest 0.12.23", "serde", ] @@ -7130,7 +7174,7 @@ name = "fullstack-hello-world-example" version = "0.1.0" dependencies = [ "dioxus", - "reqwest 0.12.22", + "reqwest 0.12.23", "serde", ] @@ -7138,7 +7182,7 @@ dependencies = [ name = "fullstack-router-example" version = "0.1.0" dependencies = [ - "axum 0.8.4", + "axum 0.8.6", "dioxus", "serde", "tokio", @@ -7260,7 +7304,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -7393,7 +7437,7 @@ version = "0.7.0-rc.0" dependencies = [ "criterion", "parking_lot", - "rand 0.9.1", + "rand 0.9.2", "tracing", ] @@ -7419,12 +7463,12 @@ dependencies = [ [[package]] name = "gethostname" -version = "0.4.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" +checksum = "fc257fdb4038301ce4b9cd1b3b51704509692bb3ff716a410cbd07925d9dae55" dependencies = [ - "libc", - "windows-targets 0.48.5", + "rustix 1.1.2", + "windows-targets 0.52.6", ] [[package]] @@ -7461,7 +7505,7 @@ dependencies = [ "js-sys", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasi 0.14.7+wasi-0.2.4", "wasm-bindgen", ] @@ -7500,9 +7544,9 @@ dependencies = [ [[package]] name = "gilrs-core" -version = "0.6.4" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6d95ae10ce5aa99543a28cf74e41c11f3b9e3c14f0452bbde46024753cd683e" +checksum = "be11a71ac3564f6965839e2ed275bf4fcf5ce16d80d396e1dfdb7b2d80bd587e" dependencies = [ "core-foundation 0.10.1", "inotify", @@ -7511,12 +7555,12 @@ dependencies = [ "libc", "libudev-sys", "log", - "nix 0.29.0", + "nix 0.30.1", "uuid", "vec_map", "wasm-bindgen", "web-sys", - "windows 0.61.3", + "windows 0.62.1", ] [[package]] @@ -7532,9 +7576,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.31.1" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" [[package]] name = "gio" @@ -7574,7 +7618,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2deb07a133b1520dc1a5690e9bd08950108873d7ed5de38dcc74d3b5ebffa110" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "libc", "libgit2-sys", "log", @@ -7585,27 +7629,27 @@ dependencies = [ [[package]] name = "gix-actor" -version = "0.34.0" +version = "0.35.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f438c87d4028aca4b82f82ba8d8ab1569823cfb3e5bc5fa8456a71678b2a20e7" +checksum = "2d36dcf9efe32b51b12dfa33cedff8414926124e760a32f9e7a6b5580d280967" dependencies = [ "bstr", "gix-date", - "gix-utils 0.2.0", + "gix-utils", "itoa", - "thiserror 2.0.12", - "winnow 0.7.11", + "thiserror 2.0.17", + "winnow 0.7.13", ] [[package]] name = "gix-config" -version = "0.44.0" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c6f830bf746604940261b49abf7f655d2c19cadc9f4142ae9379e3a316e8cfa" +checksum = "48f3c8f357ae049bfb77493c2ec9010f58cfc924ae485e1116c3718fc0f0d881" dependencies = [ "bstr", "gix-config-value", - "gix-features 0.41.1", + "gix-features", "gix-glob", "gix-path", "gix-ref", @@ -7613,48 +7657,35 @@ dependencies = [ "memchr", "once_cell", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.17", "unicode-bom", - "winnow 0.7.11", + "winnow 0.7.13", ] [[package]] name = "gix-config-value" -version = "0.14.12" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dc2c844c4cf141884678cabef736fd91dd73068b9146e6f004ba1a0457944b6" +checksum = "9f012703eb67e263c6c1fc96649fec47694dd3e5d2a91abfc65e4a6a6dc85309" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "bstr", "gix-path", "libc", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] name = "gix-date" -version = "0.9.4" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daa30058ec7d3511fbc229e4f9e696a35abd07ec5b82e635eff864a2726217e4" +checksum = "996b6b90bafb287330af92b274c3e64309dc78359221d8612d11cd10c8b9fe1c" dependencies = [ "bstr", "itoa", "jiff", - "thiserror 2.0.12", -] - -[[package]] -name = "gix-features" -version = "0.41.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016d6050219458d14520fe22bdfdeb9cb71631dec9bc2724767c983f60109634" -dependencies = [ - "gix-path", - "gix-trace", - "gix-utils 0.2.0", - "libc", - "prodash", - "walkdir", + "smallvec", + "thiserror 2.0.17", ] [[package]] @@ -7663,24 +7694,12 @@ version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56f4399af6ec4fd9db84dd4cf9656c5c785ab492ab40a7c27ea92b4241923fed" dependencies = [ + "gix-path", "gix-trace", - "gix-utils 0.3.0", + "gix-utils", "libc", "prodash", -] - -[[package]] -name = "gix-fs" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "951e886120dc5fa8cac053e5e5c89443f12368ca36811b2e43d1539081f9c111" -dependencies = [ - "bstr", - "fastrand", - "gix-features 0.41.1", - "gix-path", - "gix-utils 0.2.0", - "thiserror 2.0.12", + "walkdir", ] [[package]] @@ -7691,46 +7710,34 @@ checksum = "67a0637149b4ef24d3ea55f81f77231401c8463fae6da27331c987957eb597c7" dependencies = [ "bstr", "fastrand", - "gix-features 0.42.1", + "gix-features", "gix-path", - "gix-utils 0.3.0", - "thiserror 2.0.12", + "gix-utils", + "thiserror 2.0.17", ] [[package]] name = "gix-glob" -version = "0.19.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20972499c03473e773a2099e5fd0c695b9b72465837797a51a43391a1635a030" +checksum = "90181472925b587f6079698f79065ff64786e6d6c14089517a1972bca99fb6e9" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "bstr", - "gix-features 0.41.1", + "gix-features", "gix-path", ] -[[package]] -name = "gix-hash" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "834e79722063958b03342edaa1e17595cd2939bb2b3306b3225d0815566dcb49" -dependencies = [ - "faster-hex 0.9.0", - "gix-features 0.41.1", - "sha1-checked", - "thiserror 2.0.12", -] - [[package]] name = "gix-hash" version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d4900562c662852a6b42e2ef03442eccebf24f047d8eab4f23bc12ef0d785d8" dependencies = [ - "faster-hex 0.10.0", - "gix-features 0.42.1", + "faster-hex", + "gix-features", "sha1-checked", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -7739,7 +7746,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5b5cb3c308b4144f2612ff64e32130e641279fcf1a84d8d40dad843b4f64904" dependencies = [ - "gix-hash 0.18.0", + "gix-hash", "hashbrown 0.14.5", "parking_lot", ] @@ -7751,76 +7758,76 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "570f8b034659f256366dc90f1a24924902f20acccd6a15be96d44d1269e7a796" dependencies = [ "gix-tempfile", - "gix-utils 0.3.0", - "thiserror 2.0.12", + "gix-utils", + "thiserror 2.0.17", ] [[package]] name = "gix-object" -version = "0.48.0" +version = "0.49.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4943fcdae6ffc135920c9ea71e0362ed539182924ab7a85dd9dac8d89b0dd69a" +checksum = "d957ca3640c555d48bb27f8278c67169fa1380ed94f6452c5590742524c40fbb" dependencies = [ "bstr", "gix-actor", "gix-date", - "gix-features 0.41.1", - "gix-hash 0.17.0", + "gix-features", + "gix-hash", "gix-hashtable", "gix-path", - "gix-utils 0.2.0", - "gix-validate 0.9.4", + "gix-utils", + "gix-validate", "itoa", "smallvec", - "thiserror 2.0.12", - "winnow 0.7.11", + "thiserror 2.0.17", + "winnow 0.7.13", ] [[package]] name = "gix-path" -version = "0.10.18" +version = "0.10.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567f65fec4ef10dfab97ae71f26a27fd4d7fe7b8e3f90c8a58551c41ff3fb65b" +checksum = "06d37034a4c67bbdda76f7bcd037b2f7bc0fba0c09a6662b19697a5716e7b2fd" dependencies = [ "bstr", "gix-trace", - "gix-validate 0.10.0", + "gix-validate", "home", "once_cell", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] name = "gix-ref" -version = "0.51.0" +version = "0.52.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2e1f7eb6b7ce82d2d19961f74bd637bab3ea79b1bc7bfb23dbefc67b0415d8b" +checksum = "d1b7985657029684d759f656b09abc3e2c73085596d5cdb494428823970a7762" dependencies = [ "gix-actor", - "gix-features 0.41.1", - "gix-fs 0.14.0", - "gix-hash 0.17.0", + "gix-features", + "gix-fs", + "gix-hash", "gix-lock", "gix-object", "gix-path", "gix-tempfile", - "gix-utils 0.2.0", - "gix-validate 0.9.4", + "gix-utils", + "gix-validate", "memmap2", - "thiserror 2.0.12", - "winnow 0.7.11", + "thiserror 2.0.17", + "winnow 0.7.13", ] [[package]] name = "gix-sec" -version = "0.10.12" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47aeb0f13de9ef2f3033f5ff218de30f44db827ac9f1286f9ef050aacddd5888" +checksum = "d0dabbc78c759ecc006b970339394951b2c8e1e38a37b072c105b80b84c308fd" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "gix-path", "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -7829,7 +7836,7 @@ version = "17.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c750e8c008453a2dba67a2b0d928b7716e05da31173a3f5e351d5457ad4470aa" dependencies = [ - "gix-fs 0.15.0", + "gix-fs", "libc", "once_cell", "parking_lot", @@ -7838,19 +7845,9 @@ dependencies = [ [[package]] name = "gix-trace" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c396a2036920c69695f760a65e7f2677267ccf483f25046977d87e4cb2665f7" - -[[package]] -name = "gix-utils" -version = "0.2.0" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "189f8724cf903e7fd57cfe0b7bc209db255cacdcb22c781a022f52c3a774f8d0" -dependencies = [ - "fastrand", - "unicode-normalization", -] +checksum = "e2ccaf54b0b1743a695b482ca0ab9d7603744d8d10b2e5d1a332fef337bee658" [[package]] name = "gix-utils" @@ -7862,16 +7859,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "gix-validate" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34b5f1253109da6c79ed7cf6e1e38437080bb6d704c76af14c93e2f255234084" -dependencies = [ - "bstr", - "thiserror 2.0.12", -] - [[package]] name = "gix-validate" version = "0.10.0" @@ -7879,7 +7866,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77b9e00cacde5b51388d28ed746c493b18a6add1f19b5e01d686b3b9ece66d4d" dependencies = [ "bstr", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -7911,7 +7898,7 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "futures-channel", "futures-core", "futures-executor", @@ -7939,7 +7926,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -7954,9 +7941,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "global-hotkey" @@ -7966,10 +7953,10 @@ checksum = "b9247516746aa8e53411a0db9b62b0e24efbcf6a76e0ba73e5a91b512ddabed7" dependencies = [ "crossbeam-channel", "keyboard-types", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-app-kit 0.3.1", "once_cell", - "thiserror 2.0.12", + "thiserror 2.0.17", "windows-sys 0.59.0", "x11rb", "xkeysym", @@ -7984,8 +7971,8 @@ dependencies = [ "aho-corasick", "bstr", "log", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", + "regex-automata", + "regex-syntax", ] [[package]] @@ -8077,7 +8064,7 @@ dependencies = [ "inflections", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8129,7 +8116,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "gpu-alloc-types", ] @@ -8139,7 +8126,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", ] [[package]] @@ -8160,9 +8147,9 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "gpu-descriptor-types", - "hashbrown 0.15.4", + "hashbrown 0.15.5", ] [[package]] @@ -8171,7 +8158,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", ] [[package]] @@ -8192,7 +8179,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d9e3df7f0222ce5184154973d247c591d9aadc28ce7a73c6cd31100c9facff6" dependencies = [ "codemap", - "indexmap 2.10.0", + "indexmap 2.11.4", "lasso", "once_cell", "phf 0.11.3", @@ -8271,7 +8258,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -8286,9 +8273,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" dependencies = [ "bytes", "fnv", @@ -8296,7 +8283,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.10.0", + "indexmap 2.11.4", "slab", "tokio", "tokio-util", @@ -8305,9 +8292,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" dependencies = [ "atomic-waker", "bytes", @@ -8315,7 +8302,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.3.1", - "indexmap 2.10.0", + "indexmap 2.11.4", "slab", "tokio", "tokio-util", @@ -8345,7 +8332,7 @@ dependencies = [ "pest_derive", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -8388,16 +8375,22 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.4" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", - "foldhash", + "foldhash 0.1.5", "serde", ] +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" + [[package]] name = "hashlink" version = "0.9.1" @@ -8413,7 +8406,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ - "hashbrown 0.15.4", + "hashbrown 0.15.5", ] [[package]] @@ -8537,7 +8530,7 @@ name = "hotdog" version = "0.1.0" dependencies = [ "dioxus", - "reqwest 0.12.22", + "reqwest 0.12.23", "rusqlite", "serde", "serde_json", @@ -8696,9 +8689,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" +checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" [[package]] name = "hyper" @@ -8710,14 +8703,14 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.3.26", + "h2 0.3.27", "http 0.2.12", "http-body 0.4.6", "httparse", "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.5.10", "tokio", "tower-service", "tracing", @@ -8726,20 +8719,22 @@ dependencies = [ [[package]] name = "hyper" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" dependencies = [ + "atomic-waker", "bytes", "futures-channel", - "futures-util", - "h2 0.4.11", + "futures-core", + "h2 0.4.12", "http 1.3.1", "http-body 1.0.1", "httparse", "httpdate", "itoa", "pin-project-lite", + "pin-utils", "smallvec", "tokio", "want", @@ -8766,16 +8761,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ "http 1.3.1", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-util", "log", - "rustls 0.23.29", + "rustls 0.23.32", "rustls-native-certs 0.8.1", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.2", + "tokio-rustls 0.26.4", "tower-service", - "webpki-roots 1.0.1", + "webpki-roots 1.0.2", ] [[package]] @@ -8784,7 +8779,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "hyper 1.6.0", + "hyper 1.7.0", "hyper-util", "pin-project-lite", "tokio", @@ -8799,7 +8794,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-util", "native-tls", "tokio", @@ -8809,9 +8804,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f66d5bd4c6f02bf0542fad85d626775bab9258cf795a4256dcaf3161114d1df" +checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" dependencies = [ "base64 0.22.1", "bytes", @@ -8820,12 +8815,12 @@ dependencies = [ "futures-util", "http 1.3.1", "http-body 1.0.1", - "hyper 1.6.0", + "hyper 1.7.0", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2", + "socket2 0.6.0", "system-configuration 0.6.1", "tokio", "tower-service", @@ -8835,9 +8830,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.63" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -8845,7 +8840,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.61.2", + "windows-core 0.62.1", ] [[package]] @@ -8879,7 +8874,7 @@ dependencies = [ "potential_utf", "yoke 0.8.0", "zerofrom", - "zerovec 0.11.2", + "zerovec 0.11.4", ] [[package]] @@ -8892,7 +8887,7 @@ dependencies = [ "litemap 0.8.0", "tinystr 0.8.1", "writeable 0.6.1", - "zerovec 0.11.2", + "zerovec 0.11.4", ] [[package]] @@ -8919,7 +8914,7 @@ dependencies = [ "icu_properties", "icu_provider 2.0.0", "smallvec", - "zerovec 0.11.2", + "zerovec 0.11.4", ] [[package]] @@ -8941,7 +8936,7 @@ dependencies = [ "icu_provider 2.0.0", "potential_utf", "zerotrie", - "zerovec 0.11.2", + "zerovec 0.11.4", ] [[package]] @@ -8981,7 +8976,7 @@ dependencies = [ "yoke 0.8.0", "zerofrom", "zerotrie", - "zerovec 0.11.2", + "zerovec 0.11.4", ] [[package]] @@ -8992,7 +8987,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -9043,9 +9038,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -9064,9 +9059,9 @@ dependencies = [ [[package]] name = "if_chain" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" +checksum = "cd62e6b5e86ea8eeeb8db1de02880a6abc01a397b2ebb64b5d74ac255318f5cb" [[package]] name = "ignore" @@ -9078,7 +9073,7 @@ dependencies = [ "globset", "log", "memchr", - "regex-automata 0.4.9", + "regex-automata", "same-file", "walkdir", "winapi-util", @@ -9086,9 +9081,9 @@ dependencies = [ [[package]] name = "image" -version = "0.25.6" +version = "0.25.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" +checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7" dependencies = [ "bytemuck", "byteorder-lite", @@ -9096,8 +9091,9 @@ dependencies = [ "exr", "gif", "image-webp", + "moxcms", "num-traits", - "png", + "png 0.18.0", "qoi", "ravif", "rayon", @@ -9109,9 +9105,9 @@ dependencies = [ [[package]] name = "image-webp" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6970fe7a5300b4b42e62c52efa0187540a5bef546c60edaf554ef595d2e6f0b" +checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" dependencies = [ "byteorder-lite", "quick-error", @@ -9119,9 +9115,9 @@ dependencies = [ [[package]] name = "imagequant" -version = "4.4.0" +version = "4.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759f118685493d8d77395ae1aed2fc616f7014181fa20a31218d6202cfc60b82" +checksum = "caf5d73b959dfbe5d6b5cd3ca8de5265c7bc58297f20560a60a1d2ba6a19991f" dependencies = [ "arrayvec", "once_cell", @@ -9138,15 +9134,15 @@ checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285" [[package]] name = "imgref" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" +checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8" [[package]] name = "immutable-chunkmap" -version = "2.0.6" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f97096f508d54f8f8ab8957862eee2ccd628847b6217af1a335e1c44dee578" +checksum = "9a3e98b1520e49e252237edc238a39869da9f3241f2ec19dc788c1d24694d1e4" dependencies = [ "arrayvec", ] @@ -9183,13 +9179,14 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.10.0" +version = "2.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "equivalent", - "hashbrown 0.15.4", + "hashbrown 0.16.0", "serde", + "serde_core", ] [[package]] @@ -9205,6 +9202,19 @@ dependencies = [ "web-time", ] +[[package]] +name = "indicatif" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd" +dependencies = [ + "console 0.16.1", + "portable-atomic", + "unicode-width 0.2.0", + "unit-prefix", + "web-time", +] + [[package]] name = "indoc" version = "2.0.6" @@ -9238,7 +9248,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "inotify-sys", "libc", ] @@ -9264,15 +9274,15 @@ dependencies = [ [[package]] name = "instability" -version = "0.3.7" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf9fed6d91cfb734e7476a06bde8300a1b94e217e1b523b6f0cd1a01998c71d" +checksum = "435d80800b936787d62688c927b6490e887c7ef5ff9ce922c6c6050fca75eb9a" dependencies = [ - "darling", + "darling 0.20.11", "indoc", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -9290,7 +9300,7 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "636d4b0f6a39fd684effe2a73f5310df16a3fa7954c26d36833e98f44d1977a2" dependencies = [ - "hashbrown 0.15.4", + "hashbrown 0.15.5", ] [[package]] @@ -9301,14 +9311,14 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "inventory" -version = "0.3.20" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab08d7cd2c5897f2c949e5383ea7c7db03fb19130ffcfbf7eda795137ae3cb83" +checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" dependencies = [ "rustversion", ] @@ -9325,11 +9335,11 @@ dependencies = [ [[package]] name = "io-uring" -version = "0.7.8" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" +checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "cfg-if", "libc", ] @@ -9377,7 +9387,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -9409,11 +9419,11 @@ checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" [[package]] name = "is_executable" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a1b5bad6f9072935961dfbf1cced2f3d129963d091b6f69f007fe04e758ae2" +checksum = "baabb8b4867b26294d818bf3f651a454b6901431711abb96e296245888d6e8c4" dependencies = [ - "winapi", + "windows-sys 0.60.2", ] [[package]] @@ -9516,7 +9526,7 @@ checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -9587,25 +9597,19 @@ dependencies = [ [[package]] name = "jobserver" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ "getrandom 0.3.3", "libc", ] -[[package]] -name = "jpeg-decoder" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" - [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" dependencies = [ "once_cell", "wasm-bindgen", @@ -9678,7 +9682,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "serde", "unicode-segmentation", ] @@ -9690,7 +9694,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" dependencies = [ "libc", - "libloading 0.8.8", + "libloading 0.8.9", "pkg-config", ] @@ -9781,17 +9785,18 @@ checksum = "02cb977175687f33fa4afa0c95c112b987ea1443e5a51c8f8ff27dc618270cc2" dependencies = [ "cssparser 0.29.6", "html5ever 0.29.1", - "indexmap 2.10.0", + "indexmap 2.11.4", "selectors 0.24.0", ] [[package]] name = "kurbo" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1077d333efea6170d9ccb96d3c3026f300ca0773da4938cc4c811daa6df68b0c" +checksum = "c62026ae44756f8a599ba21140f350303d4f08dcdcc71b5ad9c9bb8128c13c62" dependencies = [ "arrayvec", + "euclid", "smallvec", ] @@ -9826,12 +9831,6 @@ dependencies = [ "spin", ] -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - [[package]] name = "leb128" version = "0.2.5" @@ -9846,9 +9845,9 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "lebe" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" +checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" [[package]] name = "lewton" @@ -9887,15 +9886,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.174" +version = "0.2.176" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" +checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" [[package]] name = "libdbus-sys" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72" +checksum = "5cbe856efeb50e4681f010e9aaa2bf0a644e10139e54cde10fc83a307c23bd9f" dependencies = [ "pkg-config", ] @@ -9936,12 +9935,12 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-targets 0.53.2", + "windows-link 0.2.0", ] [[package]] @@ -9952,13 +9951,13 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.4" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1580801010e535496706ba011c15f8532df6b42297d2e471fec38ceadd8c0638" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "libc", - "redox_syscall 0.5.13", + "redox_syscall 0.5.17", ] [[package]] @@ -10017,9 +10016,9 @@ dependencies = [ [[package]] name = "libz-rs-sys" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "172a788537a2221661b480fee8dc5f96c580eb34fa88764d3205dc356c7e4221" +checksum = "840db8cf39d9ec4dd794376f38acc40d0fc65eec2a8f484f7fd375b84602becd" dependencies = [ "zlib-rs", ] @@ -10043,7 +10042,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "798fba4e1205eed356b8ed7754cc3f7f04914e27855ca641409f4a532e992149" dependencies = [ "ahash 0.8.12", - "bitflags 2.9.1", + "bitflags 2.9.4", "browserslist-rs 0.18.2", "const-str 0.3.2", "cssparser 0.33.0", @@ -10051,7 +10050,7 @@ dependencies = [ "dashmap 5.5.3", "data-encoding", "getrandom 0.2.16", - "indexmap 2.10.0", + "indexmap 2.11.4", "itertools 0.10.5", "lazy_static", "lightningcss-derive", @@ -10077,11 +10076,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "linebender_resource_handle" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4a5ff6bcca6c4867b1c4fd4ef63e4db7436ef363e0ad7531d1558856bae64f4" + [[package]] name = "link-cplusplus" -version = "1.0.10" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a6f6da007f968f9def0d65a05b187e2960183de70c160204ecfccf0ee330212" +checksum = "7f78c730aaa7d0b9336a299029ea49f9ee53b0ed06e9202e8cb7db9bae7b8c82" dependencies = [ "cc", ] @@ -10094,9 +10099,9 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.9.4" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "liquid" @@ -10135,7 +10140,7 @@ checksum = "de66c928222984aea59fcaed8ba627f388aaac3c1f57dcb05cc25495ef8faefe" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -10166,9 +10171,9 @@ checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "litrs" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" +checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" [[package]] name = "local-ip-address" @@ -10178,7 +10183,7 @@ checksum = "656b3b27f8893f7bbf9485148ff9a65f019e3f33bd5cdc87c83cab16b3fd9ec8" dependencies = [ "libc", "neli", - "thiserror 2.0.12", + "thiserror 2.0.17", "windows-sys 0.59.0", ] @@ -10194,9 +10199,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" dependencies = [ "value-bag", ] @@ -10240,16 +10245,16 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.4", + "hashbrown 0.15.5", ] [[package]] name = "lru" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86ea4e65087ff52f3862caff188d489f1fab49a0cb09e01b2e3f1a617b10aaed" +checksum = "bfe949189f46fabb938b3a9a0be30fdd93fd8a09260da863399a8cf3db756ec8" dependencies = [ - "hashbrown 0.15.4", + "hashbrown 0.15.5", ] [[package]] @@ -10302,7 +10307,7 @@ checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -10321,7 +10326,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f44db74bde26fdf427af23f1d146c211aed857c59e3be750cf2617f6b0b05c94" dependencies = [ "proc-macro2", - "syn 2.0.104", + "syn 2.0.106", "synstructure 0.13.2", ] @@ -10356,7 +10361,7 @@ dependencies = [ "manganis-core", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -10392,7 +10397,7 @@ checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -10403,16 +10408,16 @@ checksum = "ac84fd3f360fcc43dc5f5d186f02a94192761a080e8bc58621ad4d12296a58cf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "matchers" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "regex-automata 0.1.10", + "regex-automata", ] [[package]] @@ -10461,17 +10466,17 @@ checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" [[package]] name = "memchr" -version = "2.7.5" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "memfd" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" +checksum = "ad38eb12aea514a0466ea40a80fd8cc83637065948eb4a426e4aa46261175227" dependencies = [ - "rustix 0.38.44", + "rustix 1.1.2", ] [[package]] @@ -10486,9 +10491,9 @@ dependencies = [ [[package]] name = "memmap2" -version = "0.9.5" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" +checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" dependencies = [ "libc", ] @@ -10531,7 +10536,7 @@ version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "block", "core-graphics-types 0.1.3", "foreign-types 0.5.0", @@ -10614,6 +10619,16 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "moxcms" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd32fa8935aeadb8a8a6b6b351e40225570a37c43de67690383d87ef170cd08" +dependencies = [ + "num-traits", + "pxfm", +] + [[package]] name = "mozjpeg" version = "0.10.13" @@ -10641,23 +10656,23 @@ dependencies = [ [[package]] name = "muda" -version = "0.17.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58b89bf91c19bf036347f1ab85a81c560f08c0667c8601bece664d860a600988" +checksum = "01c1738382f66ed56b3b9c8119e794a2e23148ac8ea214eda86622d4cb9d415a" dependencies = [ "crossbeam-channel", "dpi", "gtk", "keyboard-types", "libxdo", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-app-kit 0.3.1", "objc2-core-foundation", "objc2-foundation 0.3.1", "once_cell", - "png", - "thiserror 2.0.12", - "windows-sys 0.59.0", + "png 0.17.16", + "thiserror 2.0.17", + "windows-sys 0.60.2", ] [[package]] @@ -10685,18 +10700,18 @@ checksum = "e380993072e52eef724eddfcde0ed013b0c023c3f0417336ed041aa9f076994e" dependencies = [ "arrayvec", "bit-set 0.8.0", - "bitflags 2.9.1", + "bitflags 2.9.4", "cfg_aliases", "codespan-reporting 0.11.1", "hexf-parse", - "indexmap 2.10.0", + "indexmap 2.11.4", "log", "pp-rs", "rustc-hash 1.1.0", "spirv", "strum 0.26.3", "termcolor", - "thiserror 2.0.12", + "thiserror 2.0.17", "unicode-xid", ] @@ -10709,11 +10724,11 @@ dependencies = [ "bit-set 0.5.3", "codespan-reporting 0.11.1", "data-encoding", - "indexmap 2.10.0", + "indexmap 2.11.4", "naga", "once_cell", "regex", - "regex-syntax 0.8.5", + "regex-syntax", "rustc-hash 1.1.0", "thiserror 1.0.69", "tracing", @@ -10731,11 +10746,12 @@ dependencies = [ [[package]] name = "nasm-rs" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12fcfa1bd49e0342ec1d07ed2be83b59963e7acbeb9310e1bb2c07b69dadd959" +checksum = "34f676553b60ccbb76f41f9ae8f2428dac3f259ff8f1c2468a174778d06a1af9" dependencies = [ "jobserver", + "log", ] [[package]] @@ -10800,7 +10816,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "jni-sys", "log", "ndk-sys 0.5.0+25.2.9519653", @@ -10814,7 +10830,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "jni-sys", "log", "ndk-sys 0.6.0+11769913", @@ -10893,7 +10909,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "cfg-if", "cfg_aliases", "libc", @@ -10906,7 +10922,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "cfg-if", "cfg_aliases", "libc", @@ -10958,20 +10974,20 @@ dependencies = [ [[package]] name = "normpath" -version = "1.3.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8911957c4b1549ac0dc74e30db9c8b0e66ddcd6d7acc33098f4c63a64a6d7ed" +checksum = "bf23ab2b905654b4cb177e30b629937b3868311d4e1cba859f899c041046e69b" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.1", ] [[package]] name = "notify" -version = "8.1.0" +version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3163f59cd3fa0e9ef8c32f242966a7b9994fd7378366099593e0e73077cd8c97" +checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "fsevent-sys", "inotify", "kqueue", @@ -11003,12 +11019,11 @@ dependencies = [ [[package]] name = "nu-ansi-term" -version = "0.46.0" +version = "0.50.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" dependencies = [ - "overload", - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -11098,7 +11113,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -11183,10 +11198,10 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -11222,9 +11237,9 @@ dependencies = [ [[package]] name = "objc2" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551" +checksum = "561f357ba7f3a2a61563a186a163d0a3a5247e1089524a3981d49adb775078bc" dependencies = [ "objc2-encode", "objc2-exception-helper", @@ -11236,7 +11251,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -11252,9 +11267,9 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "block2 0.6.1", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-core-foundation", "objc2-foundation 0.3.1", ] @@ -11265,7 +11280,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -11289,7 +11304,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a644b62ffb826a5277f536cf0f701493de420b13d40e700c452c36567771111" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "objc2 0.5.2", "objc2-foundation 0.2.2", ] @@ -11300,7 +11315,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -11312,9 +11327,9 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" dependencies = [ - "bitflags 2.9.1", - "dispatch2 0.3.0", - "objc2 0.6.1", + "bitflags 2.9.4", + "dispatch2", + "objc2 0.6.2", ] [[package]] @@ -11323,7 +11338,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "objc2-core-foundation", ] @@ -11357,7 +11372,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ba833d4a1cb1aac330f8c973fd92b6ff1858e4aef5cdd00a255eefb28022fb5" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "objc2-core-foundation", ] @@ -11382,7 +11397,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "block2 0.5.1", "dispatch", "libc", @@ -11395,9 +11410,9 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "block2 0.6.1", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-core-foundation", ] @@ -11429,7 +11444,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -11441,7 +11456,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -11464,7 +11479,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "block2 0.5.1", "objc2 0.5.2", "objc2-cloud-kit", @@ -11485,8 +11500,8 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25b1312ad7bc8a0e92adae17aa10f90aae1fb618832f9b993b022b591027daed" dependencies = [ - "bitflags 2.9.1", - "objc2 0.6.1", + "bitflags 2.9.4", + "objc2 0.6.2", "objc2-core-foundation", "objc2-foundation 0.3.1", ] @@ -11508,7 +11523,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -11521,9 +11536,9 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91672909de8b1ce1c2252e95bbee8c1649c9ad9d14b9248b3d7b4c47903c47ad" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "block2 0.6.1", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-app-kit 0.3.1", "objc2-core-foundation", "objc2-foundation 0.3.1", @@ -11547,33 +11562,24 @@ dependencies = [ "crc32fast", "flate2", "hashbrown 0.14.5", - "indexmap 2.10.0", + "indexmap 2.11.4", "memchr", "ruzstd 0.5.0", ] [[package]] name = "object" -version = "0.36.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" -dependencies = [ - "memchr", -] - -[[package]] -name = "object" -version = "0.37.1" +version = "0.37.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03fd943161069e1768b4b3d050890ba48730e590f57e56d4aa04e7e090e61b4a" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" dependencies = [ "crc32fast", "flate2", - "hashbrown 0.15.4", - "indexmap 2.10.0", + "hashbrown 0.15.5", + "indexmap 2.11.4", "memchr", "ruzstd 0.8.1", - "wasmparser 0.234.0", + "wasmparser 0.236.1", ] [[package]] @@ -11693,7 +11699,7 @@ version = "0.10.73" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "cfg-if", "foreign-types 0.3.2", "libc", @@ -11710,7 +11716,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -11805,7 +11811,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -11820,26 +11826,20 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "owned_ttf_parser" -version = "0.25.0" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec719bbf3b2a81c109a4e20b1f129b5566b7dce654bc3872f6a05abf82b2c4" +checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b" dependencies = [ "ttf-parser 0.25.1", ] [[package]] name = "owo-colors" -version = "4.2.2" +version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48dd4f4a2c8405440fd0462561f0e5806bd0f77e86f51c761481bdd4018b545e" +checksum = "9c6901729fa79e91a0913333229e9ca5dc725089d1c363b2f4b4760709dc4a52" dependencies = [ "supports-color 2.1.0", "supports-color 3.0.2", @@ -11950,7 +11950,7 @@ version = "0.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54fd03f1ad26cb6b3ec1b7414fa78a3bd639e7dbb421b1a60513c96ce886a196" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "cssparser 0.33.0", "log", "phf 0.11.3", @@ -11999,7 +11999,7 @@ checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.13", + "redox_syscall 0.5.17", "smallvec", "windows-targets 0.52.6", ] @@ -12011,9 +12011,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13e57638545cf2ba4c3e72cc5715e53b1880b829cc3dbefda3d1700c58efe723" dependencies = [ "fontique", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "peniko", - "skrifa", + "skrifa 0.31.3", "swash", ] @@ -12095,7 +12095,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -12119,37 +12119,38 @@ dependencies = [ [[package]] name = "peniko" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f9529efd019889b2a205193c14ffb6e2839b54ed9d2720674f10f4b04d87ac9" +checksum = "9b44f9ddd2f480176b34278eb653ec1c8062f3b143a4e16eeff5ffac3334e288" dependencies = [ "color", "kurbo", + "linebender_resource_handle", "smallvec", ] [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.8.1" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" +checksum = "21e0a3a33733faeaf8651dfee72dd0f388f0c8e5ad496a3478fa5a922f49cfa8" dependencies = [ "memchr", - "thiserror 2.0.12", + "thiserror 2.0.17", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.8.1" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb056d9e8ea77922845ec74a1c4e8fb17e7c218cc4fc11a15c5d25e189aa40bc" +checksum = "bc58706f770acb1dbd0973e6530a3cff4746fb721207feb3a8a6064cd0b6c663" dependencies = [ "pest", "pest_generator", @@ -12157,22 +12158,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.8.1" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e404e638f781eb3202dc82db6760c8ae8a1eeef7fb3fa8264b2ef280504966" +checksum = "6d4f36811dfe07f7b8573462465d5cb8965fffc2e71ae377a33aecf14c2c9a2f" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "pest_meta" -version = "2.8.1" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd1101f170f5903fde0914f899bb503d9ff5271d7ba76bbb70bea63690cc0d5" +checksum = "42919b05089acbd0a5dcd5405fb304d17d1053847b81163d09c4ad18ce8e8420" dependencies = [ "pest", "sha2", @@ -12185,7 +12186,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset 0.4.2", - "indexmap 2.10.0", + "indexmap 2.11.4", ] [[package]] @@ -12195,7 +12196,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ "fixedbitset 0.5.7", - "indexmap 2.10.0", + "indexmap 2.11.4", "serde", "serde_derive", ] @@ -12371,7 +12372,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -12424,7 +12425,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -12485,13 +12486,13 @@ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "plist" -version = "1.7.4" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3af6b589e163c5a788fab00ce0c0366f6efbb9959c2f9874b224936af7fce7e1" +checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07" dependencies = [ "base64 0.22.1", - "indexmap 2.10.0", - "quick-xml 0.38.0", + "indexmap 2.11.4", + "quick-xml 0.38.3", "serde", "time", ] @@ -12537,19 +12538,31 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "png" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" +dependencies = [ + "bitflags 2.9.4", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + [[package]] name = "polling" -version = "3.8.0" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b53a684391ad002dd6a596ceb6c74fd004fdce75f4be2e3f615068abbea5fd50" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" dependencies = [ "cfg-if", "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix 1.0.7", - "tracing", - "windows-sys 0.59.0", + "rustix 1.1.2", + "windows-sys 0.61.1", ] [[package]] @@ -12587,9 +12600,9 @@ dependencies = [ [[package]] name = "posthog-rs" -version = "0.3.5" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ead24e7bd3ce35a88fffe1f9a4747b4844335fa837eddecf9e7ad9708f3e26b3" +checksum = "610d236077c94c96194b0d2b40989bda4bf8faf60e15a0da6ef8ffd4c78f6c1c" dependencies = [ "chrono", "derive_builder", @@ -12602,11 +12615,11 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" dependencies = [ - "zerovec 0.11.2", + "zerovec 0.11.4", ] [[package]] @@ -12652,7 +12665,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32db37eb2b0ec0af154e9c1b33425902d8cd9481e35167c4e9ffb28fec3916bb" dependencies = [ "proc-macro2", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -12667,12 +12680,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.35" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061c1221631e079b26479d25bbf2275bfe5917ae8419cd7e34f13bfc2aa7539a" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -12705,11 +12718,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit 0.22.27", + "toml_edit 0.23.5", ] [[package]] @@ -12759,7 +12772,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "version_check", "yansi", ] @@ -12790,7 +12803,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" dependencies = [ "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -12813,7 +12826,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -12854,6 +12867,15 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "pxfm" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83f9b339b02259ada5c0f4a389b7fb472f933aa17ce176fd2ad98f28bb401fde" +dependencies = [ + "num-traits", +] + [[package]] name = "qoi" version = "0.4.1" @@ -12890,18 +12912,18 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.38.0" +version = "0.38.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8927b0664f5c5a98265138b7e3f90aa19a6b21353182469ace36d4ac527b7b1b" +checksum = "42a232e7487fc2ef313d96dde7948e7a3c05101870d8985e4fd8d26aedd27b89" dependencies = [ "memchr", ] [[package]] name = "quinn" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ "bytes", "cfg_aliases", @@ -12909,9 +12931,9 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash 2.1.1", - "rustls 0.23.29", - "socket2", - "thiserror 2.0.12", + "rustls 0.23.32", + "socket2 0.6.0", + "thiserror 2.0.17", "tokio", "tracing", "web-time", @@ -12919,20 +12941,20 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.12" +version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ "bytes", "getrandom 0.3.3", "lru-slab", - "rand 0.9.1", + "rand 0.9.2", "ring", "rustc-hash 2.1.1", - "rustls 0.23.29", + "rustls 0.23.32", "rustls-pki-types", "slab", - "thiserror 2.0.12", + "thiserror 2.0.17", "tinyvec", "tracing", "web-time", @@ -12940,23 +12962,23 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.13" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2", + "socket2 0.6.0", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] @@ -13012,9 +13034,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", @@ -13113,9 +13135,9 @@ checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" [[package]] name = "rangemap" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60fcc7d6849342eff22c4350c8b9a989ee8ceabc4b481253e8946b9fe83d684" +checksum = "f93e7e49bb0bf967717f7bd674458b3d6b0c5f48ec7e3038166026a69fc22223" [[package]] name = "rasn" @@ -13161,7 +13183,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eabd94c2f37801c20583fc49dd5cd6b0ba68c716787c2dd6ed18571e1e63117b" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "cassowary", "compact_str 0.8.1", "crossterm 0.28.1", @@ -13240,9 +13262,9 @@ checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] name = "rayon" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", @@ -13250,9 +13272,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ "crossbeam-deque", "crossbeam-utils", @@ -13277,6 +13299,16 @@ dependencies = [ "font-types", ] +[[package]] +name = "read-fonts" +version = "0.33.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50ea612a55c08586a1d15134be8a776186c440c312ebda3b9e8efbfe4255b7f4" +dependencies = [ + "bytemuck", + "font-types", +] + [[package]] name = "rectangle-pack" version = "0.4.2" @@ -13294,11 +13326,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.13" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" +checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", ] [[package]] @@ -13314,86 +13346,71 @@ dependencies = [ [[package]] name = "redox_users" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.16", "libredox", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] name = "ref-cast" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "regex" -version = "1.11.1" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", + "regex-automata", + "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" [[package]] name = "regress" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ef7fa9ed0256d64a688a3747d0fef7a88851c18a5e1d57f115f38ec2e09366" +checksum = "145bb27393fe455dd64d6cbc8d059adfa392590a45eadf079c01b11857e7b010" dependencies = [ - "hashbrown 0.15.4", + "hashbrown 0.15.5", "memchr", ] @@ -13413,7 +13430,7 @@ dependencies = [ "cvt", "fs_at", "libc", - "normpath 1.3.0", + "normpath 1.5.0", "windows-sys 0.59.0", ] @@ -13443,7 +13460,7 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2 0.3.26", + "h2 0.3.27", "http 0.2.12", "http-body 0.4.6", "hyper 0.14.32", @@ -13476,9 +13493,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.22" +version = "0.12.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" +checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" dependencies = [ "base64 0.22.1", "bytes", @@ -13486,11 +13503,11 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.4.11", + "h2 0.4.12", "http 1.3.1", "http-body 1.0.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-rustls 0.27.7", "hyper-tls", "hyper-util", @@ -13502,7 +13519,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.29", + "rustls 0.23.32", "rustls-pki-types", "serde", "serde_json", @@ -13510,7 +13527,7 @@ dependencies = [ "sync_wrapper 1.0.2", "tokio", "tokio-native-tls", - "tokio-rustls 0.26.2", + "tokio-rustls 0.26.4", "tokio-util", "tower 0.5.2", "tower-http", @@ -13520,7 +13537,7 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 1.0.1", + "webpki-roots 1.0.2", ] [[package]] @@ -13535,16 +13552,16 @@ dependencies = [ [[package]] name = "rfd" -version = "0.15.3" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80c844748fdc82aae252ee4594a89b6e7ebef1063de7951545564cbc4e57075d" +checksum = "ef2bee61e6cffa4635c72d7d81a84294e28f0930db0ddcb0f66d10244674ebed" dependencies = [ "ashpd", "block2 0.6.1", - "dispatch2 0.2.0", + "dispatch2", "js-sys", "log", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-app-kit 0.3.1", "objc2-core-foundation", "objc2-foundation 0.3.1", @@ -13559,21 +13576,21 @@ dependencies = [ [[package]] name = "rgb" -version = "0.8.51" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a457e416a0f90d246a4c3288bd7a25b2304ca727f253f95be383dd17af56be8f" +checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" dependencies = [ "bytemuck", ] [[package]] name = "rhai" -version = "1.21.0" +version = "1.22.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce4d759a4729a655ddfdbb3ff6e77fb9eadd902dae12319455557796e435d2a6" +checksum = "2780e813b755850e50b178931aaf94ed24f6817f46aaaf5d21c13c12d939a249" dependencies = [ "ahash 0.8.12", - "bitflags 2.9.1", + "bitflags 2.9.4", "instant", "num-traits", "once_cell", @@ -13591,7 +13608,7 @@ checksum = "a5a11a05ee1ce44058fa3d5961d05194fdbe3ad6b40f904af764d81b86450e6b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -13663,7 +13680,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" dependencies = [ "base64 0.21.7", - "bitflags 2.9.1", + "bitflags 2.9.4", "serde", "serde_derive", ] @@ -13676,11 +13693,11 @@ checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" [[package]] name = "rpm" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1630639f4dbc1c71ad7b704cda2171584c80735c502efae94804d02763fc6f7d" +checksum = "422ffe5b31ea4c7c76a361dc29b986e11fb6987313453088e1fd95f34ecc1ba6" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "bzip2", "chrono", "cpio", @@ -13699,7 +13716,7 @@ dependencies = [ "pgp", "sha1", "sha2", - "thiserror 2.0.12", + "thiserror 2.0.17", "xz2", "zstd", ] @@ -13730,7 +13747,7 @@ version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7753b721174eb8ff87a9a0e799e2d7bc3749323e773db92e0984debb00019d6e" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "fallible-iterator 0.3.0", "fallible-streaming-iterator", "hashlink 0.9.1", @@ -13740,9 +13757,9 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.37.2" +version = "1.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b203a6425500a03e0919c42d3c47caca51e79f1132046626d2c8871c5092035d" +checksum = "c8975fc98059f365204d635119cf9c5a60ae67b841ed49b5422a9a7e56cdfac0" dependencies = [ "arrayvec", "borsh", @@ -13756,9 +13773,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" [[package]] name = "rustc-hash" @@ -13796,7 +13813,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "errno", "libc", "linux-raw-sys 0.4.15", @@ -13805,15 +13822,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.7" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "errno", "libc", - "linux-raw-sys 0.9.4", - "windows-sys 0.59.0", + "linux-raw-sys 0.11.0", + "windows-sys 0.61.1", ] [[package]] @@ -13844,16 +13861,16 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.29" +version = "0.23.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" +checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" dependencies = [ "aws-lc-rs", "log", "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.103.4", + "rustls-webpki 0.103.6", "subtle", "zeroize", ] @@ -13892,7 +13909,7 @@ dependencies = [ "openssl-probe", "rustls-pki-types", "schannel", - "security-framework 3.2.0", + "security-framework 3.5.1", ] [[package]] @@ -13946,9 +13963,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.4" +version = "0.103.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" +checksum = "8572f3c2cb9934231157b45499fc41e1f58c589fdfb81a844ba873265e80f8eb" dependencies = [ "aws-lc-rs", "ring", @@ -13968,7 +13985,7 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "bytemuck", "libm", "smallvec", @@ -13985,7 +14002,7 @@ version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "bytemuck", "core_maths", "log", @@ -14014,7 +14031,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3640bec8aad418d7d03c72ea2de10d5c646a598f9883c7babc160d91e3c1b26c" dependencies = [ - "twox-hash 2.1.1", + "twox-hash 2.1.2", ] [[package]] @@ -14049,11 +14066,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.1", ] [[package]] @@ -14094,9 +14111,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scratch" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f6280af86e5f559536da57a45ebc84948833b3bee313a7dd25232e09c878a52" +checksum = "d68f2ec51b097e4c1a75b681a8bec621909b5e91f15bb7b840c4f2f7b01148b2" [[package]] name = "scroll" @@ -14121,7 +14138,7 @@ checksum = "1783eabc414609e28a5ba76aee5ddd52199f7107a0b24c2e9746a1ecc34a683d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -14173,7 +14190,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -14182,11 +14199,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.2.0" +version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" +checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -14195,9 +14212,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.14.0" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ "core-foundation-sys", "libc", @@ -14227,7 +14244,7 @@ version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5685b6ae43bfcf7d2e7dfcfb5d8e8f61b46442c902531e41a32a9a8bf0ee0fb6" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "cssparser 0.35.0", "derive_more 2.0.1", "fxhash", @@ -14267,12 +14284,12 @@ checksum = "d832c086ece0dacc29fb2947bb4219b8f6e12fe9e40b7108f9e57c4224e47b5c" dependencies = [ "either", "flate2", - "hyper 1.6.0", - "indicatif", + "hyper 1.7.0", + "indicatif 0.17.11", "log", "quick-xml 0.37.5", "regex", - "reqwest 0.12.22", + "reqwest 0.12.23", "self-replace", "semver", "serde_json", @@ -14285,11 +14302,12 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" dependencies = [ "serde", + "serde_core", ] [[package]] @@ -14332,10 +14350,10 @@ checksum = "e477f4d4db08ddb4ab553717a8d3a511bc9e81dde0c808c680feacbb8105c412" dependencies = [ "debugid", "hex", - "rand 0.9.1", + "rand 0.9.2", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "url", "uuid", @@ -14365,12 +14383,13 @@ dependencies = [ [[package]] name = "serde-untagged" -version = "0.1.7" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "299d9c19d7d466db4ab10addd5703e4c615dec2a5a16dbbafe191045e87ee66e" +checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" dependencies = [ "erased-serde", "serde", + "serde_core", "typeid", ] @@ -14436,19 +14455,20 @@ checksum = "d6185cf75117e20e62b1ff867b9518577271e58abe0037c40bb4794969355ab0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ "itoa", "memchr", "ryu", "serde", + "serde_core", ] [[package]] @@ -14464,12 +14484,13 @@ dependencies = [ [[package]] name = "serde_path_to_error" -version = "0.1.17" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" dependencies = [ "itoa", "serde", + "serde_core", ] [[package]] @@ -14480,7 +14501,7 @@ checksum = "f3faaf9e727533a19351a43cc5a8de957372163c7d35cc48c90b75cdda13c352" dependencies = [ "percent-encoding", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -14491,7 +14512,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -14505,11 +14526,11 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83" +checksum = "2789234a13a53fc4be1b51ea1bab45a3c338bdb884862a257d10e5a74ae009e6" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -14526,15 +14547,15 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.14.0" +version = "3.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5" +checksum = "c522100790450cf78eeac1507263d0a350d4d5b30df0c8e1fe051a10c22b376e" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.10.0", + "indexmap 2.11.4", "schemars 0.9.0", "schemars 1.0.4", "serde", @@ -14546,14 +14567,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.14.0" +version = "3.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f" +checksum = "327ada00f7d64abaac1e55a6911e90cf665aa051b9a561c7006c157f4633135e" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -14562,7 +14583,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.4", "itoa", "ryu", "serde", @@ -14575,21 +14596,21 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c27fbd25ecc066481e383e2ed62ab2480e708aa3fe46cba36e95f58e61dfd04" dependencies = [ - "axum 0.8.4", + "axum 0.8.6", "base64 0.22.1", "bytes", - "const-str 0.6.2", + "const-str 0.6.4", "const_format", "dashmap 6.1.0", "futures", "gloo-net", "http 1.3.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.7.0", "inventory", "js-sys", "pin-project-lite", - "reqwest 0.12.22", + "reqwest 0.12.23", "rustc_version", "rustversion", "send_wrapper", @@ -14597,7 +14618,7 @@ dependencies = [ "serde_json", "serde_qs", "server_fn_macro_default", - "thiserror 2.0.12", + "thiserror 2.0.17", "throw_error", "tokio", "tokio-tungstenite 0.27.0", @@ -14622,7 +14643,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.104", + "syn 2.0.106", "xxhash-rust", ] @@ -14633,7 +14654,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca7abc92ed696648275ed9ff171131a83d571af11748593dc2e6eb6a4e22a5b9" dependencies = [ "server_fn_macro", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -14749,9 +14770,9 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.5" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ "libc", ] @@ -14830,14 +14851,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbeb4ca4399663735553a09dd17ce7e49a0a0203f03b706b39628c4d913a8607" dependencies = [ "bytemuck", - "read-fonts", + "read-fonts 0.29.3", +] + +[[package]] +name = "skrifa" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "576e60c7de4bb6a803a0312f9bef17e78cf1e8d25a80e1ade76770d7a0237955" +dependencies = [ + "bytemuck", + "read-fonts 0.33.1", ] [[package]] name = "slab" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "sledgehammer_bindgen" @@ -14856,7 +14887,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f62f06db0370222f7f498ef478fce9f8df5828848d1d3517e3331936d7074f55" dependencies = [ "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -14910,7 +14941,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "calloop", "calloop-wayland-source", "cursor-icon", @@ -14971,6 +15002,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + [[package]] name = "socks" version = "0.3.4" @@ -15036,7 +15077,7 @@ version = "0.3.0+sdk-1.3.268.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", ] [[package]] @@ -15077,14 +15118,14 @@ dependencies = [ "crc 3.3.0", "crossbeam-queue", "either", - "event-listener 5.4.0", + "event-listener 5.4.1", "futures-core", "futures-intrusive", "futures-io", "futures-util", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "hashlink 0.10.0", - "indexmap 2.10.0", + "indexmap 2.11.4", "ipnet", "ipnetwork", "log", @@ -15094,12 +15135,12 @@ dependencies = [ "once_cell", "percent-encoding", "rust_decimal", - "rustls 0.23.29", + "rustls 0.23.32", "serde", "serde_json", "sha2", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "tokio-stream", @@ -15119,7 +15160,7 @@ dependencies = [ "quote", "sqlx-core", "sqlx-macros-core", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -15142,7 +15183,7 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 2.0.104", + "syn 2.0.106", "tokio", "url", ] @@ -15156,7 +15197,7 @@ dependencies = [ "atoi", "base64 0.22.1", "bigdecimal", - "bitflags 2.9.1", + "bitflags 2.9.4", "byteorder", "bytes", "chrono", @@ -15187,7 +15228,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tracing", "uuid", @@ -15204,7 +15245,7 @@ dependencies = [ "base64 0.22.1", "bigdecimal", "bit-vec 0.6.3", - "bitflags 2.9.1", + "bitflags 2.9.4", "byteorder", "chrono", "crc 3.3.0", @@ -15234,7 +15275,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tracing", "uuid", @@ -15261,7 +15302,7 @@ dependencies = [ "serde", "serde_urlencoded", "sqlx-core", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tracing", "url", @@ -15299,7 +15340,7 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6635404b73efc136af3a7956e53c53d4f34b2f16c95a15c438929add0f69412" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.4", "smallvec", "static-self-derive", ] @@ -15363,7 +15404,7 @@ checksum = "ae36a4951ca7bd1cfd991c241584a9824a70f6aff1e7d4f693fb3f2465e4030e" dependencies = [ "quote", "swc_macros_common", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -15400,11 +15441,11 @@ dependencies = [ [[package]] name = "strum" -version = "0.27.1" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" dependencies = [ - "strum_macros 0.27.1", + "strum_macros 0.27.2", ] [[package]] @@ -15430,20 +15471,19 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "strum_macros" -version = "0.27.1" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77a8c5abcaf0f9ce05d62342b7d298c346515365c36b673df4ebe3ced01fde8" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "rustversion", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -15455,7 +15495,7 @@ dependencies = [ "app_units", "arrayvec", "atomic_refcell", - "bitflags 2.9.1", + "bitflags 2.9.4", "byteorder", "cssparser 0.35.0", "derive_more 2.0.1", @@ -15463,7 +15503,7 @@ dependencies = [ "euclid", "fxhash", "icu_segmenter", - "indexmap 2.10.0", + "indexmap 2.11.4", "itertools 0.14.0", "itoa", "lazy_static", @@ -15526,10 +15566,10 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f252798e25b50eef5caff400fc39028e156ffbed74b4e3fd22e28aff10ed28f" dependencies = [ - "darling", + "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "synstructure 0.13.2", ] @@ -15539,7 +15579,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0e0c1bf4e21bc6c921b7b07e2ab1cd6e92bf9f9453f333a14000942f304b20b" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "stylo_malloc_size_of", ] @@ -15575,7 +15615,7 @@ checksum = "4919f25cd55489a3d0a5b27b70c7a27d7671ab4ccb448a305102ce5f38618f6d" dependencies = [ "stylo", "stylo_atoms", - "taffy 0.9.0", + "taffy 0.9.1", ] [[package]] @@ -15585,7 +15625,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d000ad3fad6a3c0327beeb9b93ddcff7a38f2d8c2910f9a3107b219926fea300" dependencies = [ "app_units", - "bitflags 2.9.1", + "bitflags 2.9.4", "cssparser 0.35.0", "euclid", "malloc_size_of_derive", @@ -15606,12 +15646,12 @@ version = "0.7.0-rc.0" dependencies = [ "js-sys", "libc", - "libloading 0.8.8", + "libloading 0.8.9", "memfd", "memmap2", "serde", "subsecond-types", - "thiserror 2.0.12", + "thiserror 2.0.17", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -15689,7 +15729,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f745de914febc7c9ab4388dfaf94bbc87e69f57bb41133a9b0c84d4be49856f3" dependencies = [ - "skrifa", + "skrifa 0.31.3", "yazi", "zeno", ] @@ -15725,7 +15765,7 @@ checksum = "737a723cd89c6123b1cac43b0c62acd12e65585a155aefd09c78ce59a47ec617" dependencies = [ "anyhow", "crc 2.1.0", - "indexmap 2.10.0", + "indexmap 2.11.4", "is-macro", "once_cell", "petgraph 0.7.1", @@ -15783,7 +15823,7 @@ dependencies = [ "bytes-str", "dashmap 5.5.3", "globset", - "indexmap 2.10.0", + "indexmap 2.11.4", "once_cell", "regex", "regress", @@ -15803,7 +15843,7 @@ dependencies = [ "proc-macro2", "quote", "swc_macros_common", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -15812,7 +15852,7 @@ version = "13.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3de29559723afd8436efd427648b22346fd408f741f93c0464aa0815857e69a4" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "is-macro", "num-bigint", "once_cell", @@ -15858,7 +15898,7 @@ checksum = "e276dc62c0a2625a560397827989c82a93fd545fcf6f7faec0935a82cc4ddbb8" dependencies = [ "proc-macro2", "swc_macros_common", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -15868,7 +15908,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180810f860c9128eb74b970da8826e0d86fd8f99808c2fbe224cc5c714af2b70" dependencies = [ "arrayvec", - "bitflags 2.9.1", + "bitflags 2.9.4", "either", "new_debug_unreachable", "num-bigint", @@ -15914,8 +15954,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62d4c5bc7a0bb058aee1dd1de2d413b5ac5f84a22859af93f927136755116245" dependencies = [ "arrayvec", - "bitflags 2.9.1", - "indexmap 2.10.0", + "bitflags 2.9.4", + "indexmap 2.11.4", "num-bigint", "num_cpus", "once_cell", @@ -15966,7 +16006,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2231c70c3cb3ce733e71224b287ce494a60d928b1b0f151129ff18d023cc7b0" dependencies = [ "better_scoped_tls", - "indexmap 2.10.0", + "indexmap 2.11.4", "once_cell", "par-core", "phf 0.11.3", @@ -15989,7 +16029,7 @@ checksum = "5b8cef11f213b127beb33eab4265e8c252e3a874dd4206893bfc836d80b73086" dependencies = [ "bytes-str", "dashmap 5.5.3", - "indexmap 2.10.0", + "indexmap 2.11.4", "once_cell", "par-core", "petgraph 0.7.1", @@ -16011,8 +16051,8 @@ version = "19.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d1a370efe3cefc6e07089e312ea06b1d1179efa3f418d6f2947f3a09b8565c29" dependencies = [ - "bitflags 2.9.1", - "indexmap 2.10.0", + "bitflags 2.9.4", + "indexmap 2.11.4", "rustc-hash 2.1.1", "swc_atoms", "swc_common", @@ -16029,7 +16069,7 @@ version = "18.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21c9a1dda55bddf62dae2130640452813ad70df9014450852b94753b154885ec" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.4", "num_cpus", "once_cell", "par-core", @@ -16065,7 +16105,7 @@ checksum = "c16ce73424a6316e95e09065ba6a207eba7765496fed113702278b7711d4b632" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -16088,14 +16128,14 @@ checksum = "aae1efbaa74943dc5ad2a2fb16cbd78b77d7e4d63188f3c5b4df2b4dcd2faaae" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "swc_sourcemap" -version = "9.3.2" +version = "9.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9755c673c6a83c461e98fa018f681adb8394a3f44f89a06f27e80fd4fe4fa1e4" +checksum = "de08ef00f816acdd1a58ee8a81c0e1a59eefef2093aefe5611f256fa6b64c4d7" dependencies = [ "base64-simd 0.8.0", "bitvec", @@ -16142,9 +16182,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.104" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", @@ -16186,7 +16226,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -16255,7 +16295,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "core-foundation 0.9.4", "system-configuration-sys 0.6.0", ] @@ -16307,9 +16347,9 @@ dependencies = [ [[package]] name = "taffy" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a13e5d13f79d558b5d353a98072ca8ca0e99da429467804de959aa8c83c9a004" +checksum = "b25026fb8cc9ab51ab9fdabe5d11706796966f6d1c78e19871ef63be2b8f0644" dependencies = [ "arrayvec", "grid 0.18.0", @@ -16319,11 +16359,12 @@ dependencies = [ [[package]] name = "tao" -version = "0.34.0" +version = "0.34.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49c380ca75a231b87b6c9dd86948f035012e7171d1a7c40a9c2890489a7ffd8a" +checksum = "959469667dbcea91e5485fc48ba7dd6023face91bb0f1a14681a70f99847c3f7" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", + "block2 0.6.1", "core-foundation 0.10.1", "core-graphics 0.24.0", "crossbeam-channel", @@ -16340,7 +16381,7 @@ dependencies = [ "ndk 0.9.0", "ndk-context", "ndk-sys 0.6.0+11769913", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-app-kit 0.3.1", "objc2-foundation 0.3.1", "once_cell", @@ -16365,7 +16406,7 @@ checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -16393,9 +16434,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "target-lexicon" -version = "0.13.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e502f78cdbb8ba4718f566c418c52bc729126ffd16baee5baa718cf25dd5a69a" +checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c" dependencies = [ "serde", ] @@ -16440,7 +16481,7 @@ dependencies = [ "tauri-macos-sign", "tauri-utils", "tempfile", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "ureq", "url", @@ -16449,7 +16490,7 @@ dependencies = [ "which 7.0.3", "windows-registry", "windows-sys 0.60.2", - "zip 4.3.0", + "zip 4.6.1", ] [[package]] @@ -16459,14 +16500,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03b7eb4d0d43724ba9ba6a6717420ee68aee377816a3edbb45db8c18862b1431" dependencies = [ "byteorder", - "png", + "png 0.17.16", ] [[package]] name = "tauri-macos-sign" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0b02c73cafad954f587af3845d8f275112ccf4b8a101fd1ce5753c873ee35e4" +checksum = "a6e9edbc522842252c79713cfa3e1b0cf3f694f1428c749e939f8dcbdf62864a" dependencies = [ "anyhow", "apple-codesign", @@ -16477,7 +16518,7 @@ dependencies = [ "os_pipe", "p12", "plist", - "rand 0.8.5", + "rand 0.9.2", "serde", "serde_json", "tempfile", @@ -16506,7 +16547,7 @@ dependencies = [ "serde-untagged", "serde_json", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.17", "toml 0.8.23", "url", "urlpattern", @@ -16523,7 +16564,7 @@ dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", - "rustix 1.0.7", + "rustix 1.1.2", "windows-sys 0.59.0", ] @@ -16559,12 +16600,12 @@ dependencies = [ [[package]] name = "terminal_size" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45c6481c4829e4cc63825e62c49186a34538b7b2750b73b266581ffb612fb5ed" +checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" dependencies = [ - "rustix 1.0.7", - "windows-sys 0.59.0", + "rustix 1.1.2", + "windows-sys 0.60.2", ] [[package]] @@ -16584,11 +16625,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl 2.0.17", ] [[package]] @@ -16599,18 +16640,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -16643,20 +16684,23 @@ dependencies = [ [[package]] name = "tiff" -version = "0.9.1" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" +checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" dependencies = [ + "fax", "flate2", - "jpeg-decoder", + "half", + "quick-error", "weezl", + "zune-jpeg", ] [[package]] name = "time" -version = "0.3.41" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", "itoa", @@ -16669,15 +16713,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", @@ -16733,7 +16777,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" dependencies = [ "displaydoc", - "zerovec 0.11.2", + "zerovec 0.11.4", ] [[package]] @@ -16748,9 +16792,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -16781,18 +16825,18 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ba1f5563024b63bb6acb4558452d9ba737518c1d11fcc1861febe98d1e31cf4" dependencies = [ - "darling", + "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "synstructure 0.13.2", ] [[package]] name = "tokio" -version = "1.46.1" +version = "1.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" dependencies = [ "backtrace", "bytes", @@ -16803,10 +16847,10 @@ dependencies = [ "pin-project-lite", "signal-hook-registry", "slab", - "socket2", + "socket2 0.6.0", "tokio-macros", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -16817,7 +16861,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -16842,11 +16886,11 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.29", + "rustls 0.23.32", "tokio", ] @@ -16864,41 +16908,41 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.26.2" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" +checksum = "489a59b6730eda1b0171fcfda8b121f4bee2b35cba8645ca35c5f7ba3eb736c1" dependencies = [ "futures-util", "log", + "rustls 0.23.32", "tokio", - "tungstenite 0.26.2", + "tungstenite 0.27.0", ] [[package]] name = "tokio-tungstenite" -version = "0.27.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "489a59b6730eda1b0171fcfda8b121f4bee2b35cba8645ca35c5f7ba3eb736c1" +checksum = "d25a406cddcc431a75d3d9afc6a7c0f7428d4891dd973e4d54c56b46127bf857" dependencies = [ "futures-util", "log", - "rustls 0.23.29", "tokio", - "tungstenite 0.27.0", + "tungstenite 0.28.0", ] [[package]] name = "tokio-util" -version = "0.7.15" +version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" dependencies = [ "bytes", "futures-core", "futures-io", "futures-sink", "futures-util", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "pin-project-lite", "slab", "tokio", @@ -16910,7 +16954,6 @@ version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ - "indexmap 2.10.0", "serde", "serde_spanned 0.6.9", "toml_datetime 0.6.11", @@ -16919,17 +16962,17 @@ dependencies = [ [[package]] name = "toml" -version = "0.9.0" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f271e09bde39ab52250160a67e88577e0559ad77e9085de6e9051a2c4353f8f8" +checksum = "ae2a4cf385da23d1d53bc15cdfa5c2109e93d8d362393c801e87da2f72f0e201" dependencies = [ - "indexmap 2.10.0", - "serde", - "serde_spanned 1.0.0", - "toml_datetime 0.7.0", + "indexmap 2.11.4", + "serde_core", + "serde_spanned 1.0.1", + "toml_datetime 0.7.1", "toml_parser", "toml_writer", - "winnow 0.7.11", + "winnow 0.7.13", ] [[package]] @@ -16943,11 +16986,11 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3" +checksum = "a197c0ec7d131bfc6f7e82c8442ba1595aeab35da7adbf05b6b73cd06a16b6be" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -16956,7 +16999,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.4", "toml_datetime 0.6.11", "winnow 0.5.40", ] @@ -16967,7 +17010,7 @@ version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.4", "toml_datetime 0.6.11", "winnow 0.5.40", ] @@ -16978,21 +17021,33 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.10.0", + "indexmap 2.11.4", "serde", "serde_spanned 0.6.9", "toml_datetime 0.6.11", "toml_write", - "winnow 0.7.11", + "winnow 0.7.13", +] + +[[package]] +name = "toml_edit" +version = "0.23.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2ad0b7ae9cfeef5605163839cb9221f453399f15cfb5c10be9885fcf56611f9" +dependencies = [ + "indexmap 2.11.4", + "toml_datetime 0.7.1", + "toml_parser", + "winnow 0.7.13", ] [[package]] name = "toml_parser" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5c1c469eda89749d2230d8156a5969a69ffe0d6d01200581cdc6110674d293e" +checksum = "4cf893c33be71572e0e9aa6dd15e6677937abd686b066eac3f8cd3531688a627" dependencies = [ - "winnow 0.7.11", + "winnow 0.7.13", ] [[package]] @@ -17003,9 +17058,9 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "toml_writer" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b679217f2848de74cabd3e8fc5e6d66f40b7da40f8e1954d92054d9010690fd5" +checksum = "d163a63c116ce562a22cda521fcc4d79152e7aba014456fb5eb442f6d6a10109" [[package]] name = "tonic" @@ -17018,17 +17073,17 @@ dependencies = [ "axum 0.7.9", "base64 0.22.1", "bytes", - "h2 0.4.11", + "h2 0.4.12", "http 1.3.1", "http-body 1.0.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.7.0", "hyper-timeout", "hyper-util", "percent-encoding", "pin-project", "prost", - "socket2", + "socket2 0.5.10", "tokio", "tokio-stream", "tower 0.4.13", @@ -17081,7 +17136,7 @@ checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ "async-compression", "base64 0.22.1", - "bitflags 2.9.1", + "bitflags 2.9.4", "bytes", "futures-core", "futures-util", @@ -17136,7 +17191,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -17208,14 +17263,14 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" dependencies = [ "matchers", "nu-ansi-term", "once_cell", - "regex", + "regex-automata", "serde", "serde_json", "sharded-slab", @@ -17240,22 +17295,22 @@ dependencies = [ [[package]] name = "tray-icon" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da75ec677957aa21f6e0b361df0daab972f13a5bee3606de0638fd4ee1c666a" +checksum = "a0d92153331e7d02ec09137538996a7786fe679c629c279e82a6be762b7e6fe2" dependencies = [ "crossbeam-channel", "dirs 6.0.0", "libappindicator", "muda", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-app-kit 0.3.1", "objc2-core-foundation", "objc2-core-graphics", "objc2-foundation 0.3.1", "once_cell", - "png", - "thiserror 2.0.12", + "png 0.17.16", + "thiserror 2.0.17", "windows-sys 0.59.0", ] @@ -17277,9 +17332,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "trybuild" -version = "1.0.106" +version = "1.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65af40ad689f2527aebbd37a0a816aea88ff5f774ceabe99de5be02f2f91dae2" +checksum = "0ded9fdb81f30a5708920310bfcd9ea7482ff9cba5f54601f7a19a877d5c2392" dependencies = [ "dissimilar", "glob", @@ -17288,7 +17343,7 @@ dependencies = [ "serde_json", "target-triple", "termcolor", - "toml 0.9.0", + "toml 0.9.6", ] [[package]] @@ -17336,37 +17391,37 @@ dependencies = [ [[package]] name = "tungstenite" -version = "0.26.2" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" +checksum = "eadc29d668c91fcc564941132e17b28a7ceb2f3ebf0b9dae3e03fd7a6748eb0d" dependencies = [ "bytes", "data-encoding", "http 1.3.1", "httparse", "log", - "rand 0.9.1", + "native-tls", + "rand 0.9.2", + "rustls 0.23.32", "sha1", - "thiserror 2.0.12", + "thiserror 2.0.17", "utf-8", ] [[package]] name = "tungstenite" -version = "0.27.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eadc29d668c91fcc564941132e17b28a7ceb2f3ebf0b9dae3e03fd7a6748eb0d" +checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442" dependencies = [ "bytes", "data-encoding", "http 1.3.1", "httparse", "log", - "native-tls", - "rand 0.9.1", - "rustls 0.23.29", + "rand 0.9.2", "sha1", - "thiserror 2.0.12", + "thiserror 2.0.17", "utf-8", ] @@ -17391,9 +17446,9 @@ dependencies = [ [[package]] name = "twox-hash" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b907da542cbced5261bd3256de1b3a1bf340a3d37f93425a07362a1d687de56" +checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" [[package]] name = "typeid" @@ -17409,9 +17464,9 @@ checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "typewit" -version = "1.11.0" +version = "1.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb77c29baba9e4d3a6182d51fa75e3215c7fd1dab8f4ea9d107c716878e55fc0" +checksum = "f8c1ae7cc0fdb8b842d65d127cb981574b0d2b249b74d1c7a2986863dc134f71" dependencies = [ "typewit_proc_macros", ] @@ -17551,15 +17606,15 @@ checksum = "ce61d488bcdc9bc8b5d1772c404828b17fc481c0a582b5581e95fb233aef503e" [[package]] name = "unicode-id-start" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f322b60f6b9736017344fa0635d64be2f458fbc04eef65f6be22976dd1ffd5b" +checksum = "81b79ad29b5e19de4260020f8919b443b2ef0277d242ce532ec7b7a2cc8b6007" [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" [[package]] name = "unicode-linebreak" @@ -17629,6 +17684,12 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +[[package]] +name = "unit-prefix" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "323402cff2dd658f39ca17c789b502021b3f18707c91cdf22e3838e1b4023817" + [[package]] name = "universal-hash" version = "0.5.1" @@ -17659,27 +17720,27 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "ureq" -version = "3.0.12" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f0fde9bc91026e381155f8c67cb354bcd35260b2f4a29bcc84639f762760c39" +checksum = "99ba1025f18a4a3fc3e9b48c868e9beb4f24f4b4b1a325bada26bd4119f46537" dependencies = [ "base64 0.22.1", "log", "percent-encoding", - "rustls 0.23.29", + "rustls 0.23.32", "rustls-pemfile 2.2.0", "rustls-pki-types", "socks", "ureq-proto", "utf-8", - "webpki-roots 0.26.11", + "webpki-roots 1.0.2", ] [[package]] name = "ureq-proto" -version = "0.4.2" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59db78ad1923f2b1be62b6da81fe80b173605ca0d57f85da2e005382adf693f7" +checksum = "60b4531c118335662134346048ddb0e54cc86bd7e81866757873055f0e38f5d2" dependencies = [ "base64 0.22.1", "http 1.3.1", @@ -17689,9 +17750,9 @@ dependencies = [ [[package]] name = "url" -version = "2.5.4" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", @@ -17724,7 +17785,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80be9b06fbae3b8b303400ab20778c80bbaf338f563afe567cf3c9eea17b47ef" dependencies = [ "base64 0.22.1", - "data-url 0.3.1", + "data-url 0.3.2", "flate2", "fontdb 0.23.0", "imagesize", @@ -17770,9 +17831,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.17.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ "getrandom 0.3.3", "js-sys", @@ -17812,7 +17873,7 @@ checksum = "41b6d82be61465f97d42bd1d15bf20f3b0a3a0905018f38f9d6f6962055b0b5c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -17829,18 +17890,18 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "vello" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df026e62e8b0d12d55ff5e91ae9114a20f82d9b856bedfdbf3abd5d1472dceed" +checksum = "fa3f8a53870a2ee699ce05b738a3f9974c92c35ed4874de86052ac68d214811c" dependencies = [ "bytemuck", "futures-intrusive", "log", "peniko", - "png", - "skrifa", + "png 0.17.16", + "skrifa 0.35.0", "static_assertions", - "thiserror 2.0.12", + "thiserror 2.0.17", "vello_encoding", "vello_shaders", "wgpu", @@ -17848,26 +17909,26 @@ dependencies = [ [[package]] name = "vello_encoding" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5702642f6ea77eedc12d119e1eebead0dba3cf91fe5c5d1f3efc12bf0cfaf1" +checksum = "c69b0fe94b0ac7e47619c504ee2c377355174f5c46353c46d03fa5f7e435922b" dependencies = [ "bytemuck", "guillotiere", "peniko", - "skrifa", + "skrifa 0.35.0", "smallvec", ] [[package]] name = "vello_shaders" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "381790a3779021edd9f88267c1b13b49546cb0fb164f329ee2f2587869ddf459" +checksum = "b2ebea426bb2f95b7610bca09178b03d809ede1d3c500a9acf6eca43e8f200be" dependencies = [ "bytemuck", "naga", - "thiserror 2.0.12", + "thiserror 2.0.17", "vello_encoding", ] @@ -17937,7 +17998,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -17968,7 +18029,7 @@ checksum = "59195a1db0e95b920366d949ba5e0d3fc0e70b67c09be15ce5abb790106b0571" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -17985,11 +18046,20 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.2+wasi-0.2.4" +version = "0.14.7+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" +dependencies = [ + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] @@ -18000,27 +18070,28 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "wasm-bindgen-shared", ] @@ -18037,9 +18108,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" dependencies = [ "cfg-if", "js-sys", @@ -18050,9 +18121,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -18060,31 +18131,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" dependencies = [ "unicode-ident", ] [[package]] name = "wasm-bindgen-test" -version = "0.3.50" +version = "0.3.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66c8d5e33ca3b6d9fa3b4676d774c5778031d27a578c2b007f905acf816152c3" +checksum = "4e381134e148c1062f965a42ed1f5ee933eef2927c3f70d1812158f711d39865" dependencies = [ "js-sys", "minicov", @@ -18095,13 +18166,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.50" +version = "0.3.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17d5042cc5fa009658f9a7333ef24291b1291a25b6382dd68862a7f3b969f69b" +checksum = "b673bca3298fe582aeef8352330ecbad91849f85090805582400850f8270a2e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -18203,7 +18274,7 @@ dependencies = [ "futures", "getrandom 0.3.3", "js-sys", - "reqwest 0.12.22", + "reqwest 0.12.23", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -18218,7 +18289,7 @@ dependencies = [ "proc-macro2", "quote", "sha2", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -18258,44 +18329,44 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5309c1090e3e84dad0d382f42064e9933fdaedb87e468cc239f0eabea73ddcb6" dependencies = [ "ahash 0.8.12", - "bitflags 2.9.1", + "bitflags 2.9.4", "hashbrown 0.14.5", - "indexmap 2.10.0", + "indexmap 2.11.4", "semver", "serde", ] [[package]] name = "wasmparser" -version = "0.234.0" +version = "0.235.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be22e5a8f600afce671dd53c8d2dd26b4b7aa810fd18ae27dfc49737f3e02fc5" +checksum = "161296c618fa2d63f6ed5fffd1112937e803cb9ec71b32b01a76321555660917" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", + "hashbrown 0.15.5", + "indexmap 2.11.4", + "semver", + "serde", ] [[package]] name = "wasmparser" -version = "0.235.0" +version = "0.236.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "161296c618fa2d63f6ed5fffd1112937e803cb9ec71b32b01a76321555660917" +checksum = "a9b1e81f3eb254cf7404a82cee6926a4a3ccc5aad80cc3d43608a070c67aa1d7" dependencies = [ - "bitflags 2.9.1", - "hashbrown 0.15.4", - "indexmap 2.10.0", - "semver", - "serde", + "bitflags 2.9.4", ] [[package]] name = "wayland-backend" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe770181423e5fc79d3e2a7f4410b7799d5aab1de4372853de3c6aa13ca24121" +checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35" dependencies = [ "cc", "downcast-rs 1.2.1", - "rustix 0.38.44", + "rustix 1.1.2", "scoped-tls", "smallvec", "wayland-sys", @@ -18303,12 +18374,12 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.10" +version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978fa7c67b0847dbd6a9f350ca2569174974cd4082737054dbb7fbb79d7d9a61" +checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" dependencies = [ - "bitflags 2.9.1", - "rustix 0.38.44", + "bitflags 2.9.4", + "rustix 1.1.2", "wayland-backend", "wayland-scanner", ] @@ -18319,29 +18390,29 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "cursor-icon", "wayland-backend", ] [[package]] name = "wayland-cursor" -version = "0.31.10" +version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a65317158dec28d00416cb16705934070aef4f8393353d41126c54264ae0f182" +checksum = "447ccc440a881271b19e9989f75726d60faa09b95b0200a9b7eb5cc47c3eeb29" dependencies = [ - "rustix 0.38.44", + "rustix 1.1.2", "wayland-client", "xcursor", ] [[package]] name = "wayland-protocols" -version = "0.32.8" +version = "0.32.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "779075454e1e9a521794fed15886323ea0feda3f8b0fc1390f5398141310422a" +checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "wayland-backend", "wayland-client", "wayland-scanner", @@ -18349,11 +18420,11 @@ dependencies = [ [[package]] name = "wayland-protocols-plasma" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fd38cdad69b56ace413c6bcc1fbf5acc5e2ef4af9d5f8f1f9570c0c83eae175" +checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "wayland-backend", "wayland-client", "wayland-protocols", @@ -18362,11 +18433,11 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cb6cdc73399c0e06504c437fe3cf886f25568dd5454473d565085b36d6a8bbf" +checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "wayland-backend", "wayland-client", "wayland-protocols", @@ -18375,9 +18446,9 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.6" +version = "0.31.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "896fdafd5d28145fce7958917d69f2fd44469b1d4e861cb5961bcbeebc6d1484" +checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3" dependencies = [ "proc-macro2", "quick-xml 0.37.5", @@ -18386,9 +18457,9 @@ dependencies = [ [[package]] name = "wayland-sys" -version = "0.31.6" +version = "0.31.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbcebb399c77d5aa9fa5db874806ee7b4eba4e73650948e8f93963f128896615" +checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142" dependencies = [ "dlib", "log", @@ -18398,9 +18469,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" dependencies = [ "js-sys", "wasm-bindgen", @@ -18438,7 +18509,7 @@ dependencies = [ "jni 0.21.1", "log", "ndk-context", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-foundation 0.3.1", "url", "web-sys", @@ -18500,14 +18571,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.1", + "webpki-roots 1.0.2", ] [[package]] name = "webpki-roots" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8782dd5a41a24eed3a4f40b606249b3e236ca61adf1f25ea4d45c73de122b502" +checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" dependencies = [ "rustls-pki-types", ] @@ -18522,8 +18593,8 @@ dependencies = [ "webview2-com-sys", "windows 0.61.3", "windows-core 0.61.2", - "windows-implement 0.60.0", - "windows-interface 0.59.1", + "windows-implement 0.60.1", + "windows-interface 0.59.2", ] [[package]] @@ -18534,7 +18605,7 @@ checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -18543,7 +18614,7 @@ version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36695906a1b53a3bf5c4289621efedac12b73eeb0b89e7e1a89b517302d5d75c" dependencies = [ - "thiserror 2.0.12", + "thiserror 2.0.17", "windows 0.61.3", "windows-core 0.61.2", ] @@ -18561,7 +18632,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b0b3436f0729f6cdf2e6e9201f3d39dc95813fad61d826c1ed07918b4539353" dependencies = [ "arrayvec", - "bitflags 2.9.1", + "bitflags 2.9.4", "cfg_aliases", "document-features", "js-sys", @@ -18588,10 +18659,10 @@ checksum = "7f0aa306497a238d169b9dc70659105b4a096859a34894544ca81719242e1499" dependencies = [ "arrayvec", "bit-vec 0.8.0", - "bitflags 2.9.1", + "bitflags 2.9.4", "cfg_aliases", "document-features", - "indexmap 2.10.0", + "indexmap 2.11.4", "log", "naga", "once_cell", @@ -18600,7 +18671,7 @@ dependencies = [ "raw-window-handle 0.6.2", "rustc-hash 1.1.0", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.17", "wgpu-hal", "wgpu-types", ] @@ -18615,7 +18686,7 @@ dependencies = [ "arrayvec", "ash", "bit-set 0.8.0", - "bitflags 2.9.1", + "bitflags 2.9.4", "block", "bytemuck", "cfg_aliases", @@ -18628,7 +18699,7 @@ dependencies = [ "js-sys", "khronos-egl", "libc", - "libloading 0.8.8", + "libloading 0.8.9", "log", "metal", "naga", @@ -18643,7 +18714,7 @@ dependencies = [ "renderdoc-sys", "rustc-hash 1.1.0", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.17", "wasm-bindgen", "web-sys", "wgpu-types", @@ -18670,25 +18741,13 @@ version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50ac044c0e76c03a0378e7786ac505d010a873665e2d51383dcff8dd227dc69c" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "js-sys", "log", "serde", "web-sys", ] -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix 0.38.44", -] - [[package]] name = "which" version = "7.0.3" @@ -18697,7 +18756,7 @@ checksum = "24d643ce3fd3e5b54854602a080f34fb10ab75e0b813ee32d00ca2b44fa74762" dependencies = [ "either", "env_home", - "rustix 1.0.7", + "rustix 1.1.2", "winsafe", ] @@ -18708,17 +18767,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3fabb953106c3c8eea8306e4393700d7657561cb43122571b172bbfb7c7ba1d" dependencies = [ "env_home", - "rustix 1.0.7", + "rustix 1.1.2", "winsafe", ] [[package]] name = "whoami" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7" +checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" dependencies = [ - "redox_syscall 0.5.13", + "libredox", "wasite", ] @@ -18746,11 +18805,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.1", ] [[package]] @@ -18795,11 +18854,23 @@ version = "0.61.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ - "windows-collections", + "windows-collections 0.2.0", "windows-core 0.61.2", - "windows-future", - "windows-link", - "windows-numerics", + "windows-future 0.2.1", + "windows-link 0.1.3", + "windows-numerics 0.2.0", +] + +[[package]] +name = "windows" +version = "0.62.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49e6c4a1f363c8210c6f77ba24f645c61c6fb941eccf013da691f7e09515b8ac" +dependencies = [ + "windows-collections 0.3.1", + "windows-core 0.62.1", + "windows-future 0.3.1", + "windows-numerics 0.3.0", ] [[package]] @@ -18811,6 +18882,15 @@ dependencies = [ "windows-core 0.61.2", ] +[[package]] +name = "windows-collections" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "123e712f464a8a60ce1a13f4c446d2d43ab06464cb5842ff68f5c71b6fb7852e" +dependencies = [ + "windows-core 0.62.1", +] + [[package]] name = "windows-core" version = "0.54.0" @@ -18852,13 +18932,26 @@ version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-implement 0.60.0", - "windows-interface 0.59.1", - "windows-link", + "windows-implement 0.60.1", + "windows-interface 0.59.2", + "windows-link 0.1.3", "windows-result 0.3.4", "windows-strings 0.4.2", ] +[[package]] +name = "windows-core" +version = "0.62.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6844ee5416b285084d3d3fffd743b925a6c9385455f64f6d4fa3031c4c2749a9" +dependencies = [ + "windows-implement 0.60.1", + "windows-interface 0.59.2", + "windows-link 0.2.0", + "windows-result 0.4.0", + "windows-strings 0.5.0", +] + [[package]] name = "windows-future" version = "0.2.1" @@ -18866,8 +18959,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" dependencies = [ "windows-core 0.61.2", - "windows-link", - "windows-threading", + "windows-link 0.1.3", + "windows-threading 0.1.0", +] + +[[package]] +name = "windows-future" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f3db6b24b120200d649cd4811b4947188ed3a8d2626f7075146c5d178a9a4a" +dependencies = [ + "windows-core 0.62.1", + "windows-link 0.2.0", + "windows-threading 0.2.0", ] [[package]] @@ -18878,7 +18982,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -18889,18 +18993,18 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "windows-implement" -version = "0.60.0" +version = "0.60.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +checksum = "edb307e42a74fb6de9bf3a02d9712678b22399c87e6fa869d6dfcd8c1b7754e0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -18911,7 +19015,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -18922,18 +19026,18 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "windows-interface" -version = "0.59.1" +version = "0.59.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +checksum = "c0abd1ddbc6964ac14db11c7213d6532ef34bd9aa042c2e5935f59d7908b46a5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -18942,6 +19046,12 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +[[package]] +name = "windows-link" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" + [[package]] name = "windows-numerics" version = "0.2.0" @@ -18949,7 +19059,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" dependencies = [ "windows-core 0.61.2", - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-numerics" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ce3498fe0aba81e62e477408383196b4b0363db5e0c27646f932676283b43d8" +dependencies = [ + "windows-core 0.62.1", + "windows-link 0.2.0", ] [[package]] @@ -18958,7 +19078,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" dependencies = [ - "windows-link", + "windows-link 0.1.3", "windows-result 0.3.4", "windows-strings 0.4.2", ] @@ -18987,7 +19107,16 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f" +dependencies = [ + "windows-link 0.2.0", ] [[package]] @@ -19006,7 +19135,16 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda" +dependencies = [ + "windows-link 0.2.0", ] [[package]] @@ -19051,7 +19189,16 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.2", + "windows-targets 0.53.4", +] + +[[package]] +name = "windows-sys" +version = "0.61.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f109e41dd4a3c848907eb83d5a42ea98b3769495597450cf6d153507b166f0f" +dependencies = [ + "windows-link 0.2.0", ] [[package]] @@ -19102,10 +19249,11 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.2" +version = "0.53.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +checksum = "2d42b7b7f66d2a06854650af09cfdf8713e427a439c97ad65a6375318033ac4b" dependencies = [ + "windows-link 0.2.0", "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", "windows_i686_gnu 0.53.0", @@ -19122,16 +19270,25 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" dependencies = [ - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-threading" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab47f085ad6932defa48855254c758cdd0e2f2d48e62a34118a268d8f345e118" +dependencies = [ + "windows-link 0.2.0", ] [[package]] name = "windows-version" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04a5c6627e310a23ad2358483286c7df260c964eb2d003d8efd6d0f4e79265c" +checksum = "700dad7c058606087f6fdc1f88da5841e06da40334413c6cd4367b25ef26d24e" dependencies = [ - "windows-link", + "windows-link 0.2.0", ] [[package]] @@ -19316,14 +19473,14 @@ checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winit" -version = "0.30.11" +version = "0.30.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4409c10174df8779dc29a4788cac85ed84024ccbc1743b776b21a520ee1aaf4" +checksum = "c66d4b9ed69c4009f6321f762d6e61ad8a2389cd431b97cb1e146812e9e6c732" dependencies = [ "ahash 0.8.12", "android-activity", "atomic-waker", - "bitflags 2.9.1", + "bitflags 2.9.4", "block2 0.5.1", "bytemuck", "calloop", @@ -19377,9 +19534,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.11" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" dependencies = [ "memchr", ] @@ -19401,23 +19558,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.9.1", -] - -[[package]] -name = "woff" -version = "0.6.1" +name = "wit-bindgen" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e229335e006d138b1c318e83b99eaa3e1ab03e08c4ced4967e46705e6e9d1cf" -dependencies = [ - "cc", - "libc", -] +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "writeable" @@ -19451,7 +19595,7 @@ dependencies = [ "kuchikiki", "libc", "ndk 0.9.0", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-app-kit 0.3.1", "objc2-core-foundation", "objc2-foundation 0.3.1", @@ -19463,7 +19607,7 @@ dependencies = [ "sha2", "soup3", "tao-macros", - "thiserror 2.0.12", + "thiserror 2.0.17", "url", "webkit2gtk", "webkit2gtk-sys", @@ -19473,6 +19617,19 @@ dependencies = [ "windows-version", ] +[[package]] +name = "wuff" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29a267ddde5dc265fb7176bd82ba2c2596c8345be3865f29ba314da5080e7bf1" +dependencies = [ + "arrayvec", + "brotli-decompressor", + "bytes", + "flate2", + "font-types", +] + [[package]] name = "wyz" version = "0.5.1" @@ -19505,24 +19662,24 @@ dependencies = [ [[package]] name = "x11rb" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" +checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" dependencies = [ "as-raw-xcb-connection", "gethostname", "libc", - "libloading 0.8.8", + "libloading 0.8.9", "once_cell", - "rustix 0.38.44", + "rustix 1.1.2", "x11rb-protocol", ] [[package]] name = "x11rb-protocol" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" +checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" [[package]] name = "x25519-dalek" @@ -19578,12 +19735,12 @@ dependencies = [ [[package]] name = "xattr" -version = "1.5.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af3a19837351dc82ba89f8a125e22a3c475f05aba604acc023d62b2739ae2909" +checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", - "rustix 1.0.7", + "rustix 1.1.2", ] [[package]] @@ -19608,7 +19765,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "dlib", "log", "once_cell", @@ -19708,7 +19865,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "synstructure 0.13.2", ] @@ -19720,7 +19877,7 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "synstructure 0.13.2", ] @@ -19741,7 +19898,7 @@ dependencies = [ "async-trait", "blocking", "enumflags2", - "event-listener 5.4.0", + "event-listener 5.4.1", "futures-core", "futures-sink", "futures-util", @@ -19764,15 +19921,15 @@ dependencies = [ [[package]] name = "zbus" -version = "5.8.0" +version = "5.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597f45e98bc7e6f0988276012797855613cd8269e23b5be62cc4e5d28b7e515d" +checksum = "2d07e46d035fb8e375b2ce63ba4e4ff90a7f73cf2ffb0138b29e1158d2eaadf7" dependencies = [ "async-broadcast", "async-recursion", "async-trait", "enumflags2", - "event-listener 5.4.0", + "event-listener 5.4.1", "futures-core", "futures-lite", "hex", @@ -19783,11 +19940,11 @@ dependencies = [ "tokio", "tracing", "uds_windows", - "windows-sys 0.59.0", - "winnow 0.7.11", - "zbus_macros 5.8.0", + "windows-sys 0.60.2", + "winnow 0.7.13", + "zbus_macros 5.11.0", "zbus_names 4.2.0", - "zvariant 5.6.0", + "zvariant 5.7.0", ] [[package]] @@ -19808,7 +19965,7 @@ checksum = "709ab20fc57cb22af85be7b360239563209258430bccf38d8b979c5a2ae3ecce" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "zbus-lockstep", "zbus_xml", "zvariant 4.2.0", @@ -19820,26 +19977,26 @@ version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "zvariant_utils 2.1.0", ] [[package]] name = "zbus_macros" -version = "5.8.0" +version = "5.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5c8e4e14dcdd9d97a98b189cd1220f30e8394ad271e8c987da84f73693862c2" +checksum = "57e797a9c847ed3ccc5b6254e8bcce056494b375b511b3d6edcec0aeb4defaca" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "zbus_names 4.2.0", - "zvariant 5.6.0", - "zvariant_utils 3.2.0", + "zvariant 5.7.0", + "zvariant_utils 3.2.1", ] [[package]] @@ -19861,8 +20018,8 @@ checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" dependencies = [ "serde", "static_assertions", - "winnow 0.7.11", - "zvariant 5.6.0", + "winnow 0.7.13", + "zvariant 5.7.0", ] [[package]] @@ -19886,22 +20043,22 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -19921,15 +20078,15 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "synstructure 0.13.2", ] [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" dependencies = [ "zeroize_derive", ] @@ -19942,7 +20099,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -19969,9 +20126,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ "yoke 0.8.0", "zerofrom", @@ -19986,7 +20143,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -19997,7 +20154,7 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -20023,23 +20180,23 @@ dependencies = [ "crossbeam-utils", "displaydoc", "flate2", - "indexmap 2.10.0", + "indexmap 2.11.4", "memchr", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "zopfli", ] [[package]] name = "zip" -version = "4.3.0" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aed4ac33e8eb078c89e6cbb1d5c4c7703ec6d299fc3e7c3695af8f8b423468b" +checksum = "caa8cd6af31c3b31c6631b8f483848b91589021b28fffe50adada48d4f4d2ed1" dependencies = [ "arbitrary", "crc32fast", "flate2", - "indexmap 2.10.0", + "indexmap 2.11.4", "memchr", "zopfli", ] @@ -20063,14 +20220,14 @@ checksum = "dba6063ff82cdbd9a765add16d369abe81e520f836054e997c2db217ceca40c0" dependencies = [ "base64 0.22.1", "ed25519-dalek", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] name = "zlib-rs" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626bd9fa9734751fc50d6060752170984d7053f5a39061f524cda68023d4db8a" +checksum = "2f06ae92f42f5e5c42443fd094f245eb656abf56dd7cce9b8b263236565e00f2" [[package]] name = "zopfli" @@ -20104,9 +20261,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.15+zstd.1.5.7" +version = "2.0.16+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" dependencies = [ "cc", "pkg-config", @@ -20129,9 +20286,9 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.4.19" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9e525af0a6a658e031e95f14b7f889976b74a11ba0eca5a5fc9ac8a1c43a6a" +checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" dependencies = [ "zune-core", ] @@ -20151,17 +20308,17 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.6.0" +version = "5.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91b3680bb339216abd84714172b5138a4edac677e641ef17e1d8cb1b3ca6e6f" +checksum = "999dd3be73c52b1fccd109a4a81e4fcd20fab1d3599c8121b38d04e1419498db" dependencies = [ "endi", "enumflags2", "serde", "url", - "winnow 0.7.11", - "zvariant_derive 5.6.0", - "zvariant_utils 3.2.0", + "winnow 0.7.13", + "zvariant_derive 5.7.0", + "zvariant_utils 3.2.1", ] [[package]] @@ -20170,24 +20327,24 @@ version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "zvariant_utils 2.1.0", ] [[package]] name = "zvariant_derive" -version = "5.6.0" +version = "5.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a8c68501be459a8dbfffbe5d792acdd23b4959940fc87785fb013b32edbc208" +checksum = "6643fd0b26a46d226bd90d3f07c1b5321fe9bb7f04673cb37ac6d6883885b68e" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.104", - "zvariant_utils 3.2.0", + "syn 2.0.106", + "zvariant_utils 3.2.1", ] [[package]] @@ -20198,19 +20355,18 @@ checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "zvariant_utils" -version = "3.2.0" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34" +checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599" dependencies = [ "proc-macro2", "quote", "serde", - "static_assertions", - "syn 2.0.104", - "winnow 0.7.11", + "syn 2.0.106", + "winnow 0.7.13", ] diff --git a/Cargo.toml b/Cargo.toml index fd6ff6b947..cf9b8778fd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -243,7 +243,7 @@ futures-util = { version = "0.3", default-features = false } rustc-hash = "2.1.1" wasm-bindgen = "0.2.100" wasm-bindgen-futures = "0.4.50" -js-sys = "0.3.77" +js-sys = "0.3" web-sys = { version = "0.3.77", default-features = false } html_parser = "0.7.0" thiserror = "2.0.12" diff --git a/packages/cli/src/cli/hotpatch.rs b/packages/cli/src/cli/hotpatch.rs index a2d619afdd..0a4ceb42f1 100644 --- a/packages/cli/src/cli/hotpatch.rs +++ b/packages/cli/src/cli/hotpatch.rs @@ -5,11 +5,12 @@ use crate::{ use anyhow::Context; use clap::Parser; use dioxus_dx_wire_format::StructuredBuildArtifacts; +use std::io::BufRead; use std::sync::Arc; const HELP_HEADING: &str = "Hotpatching a binary"; -/// Patches a single binary, but takes the same arguments as a `cargo build`. +/// Patches a single binary, but takes the same arguments as a `cargo build` and the serialized output from `dx build --fat-binary` as input. /// /// By default, patches the client, but you can set patch_server to true to patch the server instead. #[derive(Clone, Debug, Parser)] @@ -18,10 +19,6 @@ pub struct HotpatchTip { #[clap(long, num_args = 0..=1, default_missing_value="true", help_heading = HELP_HEADING)] pub patch_server: Option, - /// The serialized output from the `dx build --fat-binary` command - #[clap(long, help_heading = HELP_HEADING)] - pub serialized_artifacts: String, - /// The ASLR reference of the running app being patched. Used to generate sensible offsets for patched code. #[clap(long, help_heading = HELP_HEADING)] pub aslr_reference: u64, @@ -41,8 +38,14 @@ impl HotpatchTip { &targets.client }; + let stdin = std::io::stdin().lock(); + let serialized_artifacts = stdin + .lines() + .next() + .context("No input provided to hotpatch command")? + .context("Failed to read line from stdin")?; let structured_build_artifacts = - serde_json::from_str::(&self.serialized_artifacts) + serde_json::from_str::(&serialized_artifacts) .context("Failed to parse structured build artifacts")?; let StructuredBuildArtifacts { @@ -69,10 +72,18 @@ impl HotpatchTip { }; let artifacts = AppBuilder::started(request, mode)?.finish_build().await?; + let root_dir = request.root_dir(); + let base_path = request.base_path(); let patch_exe = request.patch_exe(artifacts.time_start); Ok(StructuredOutput::Hotpatch { - jump_table: crate::build::create_jump_table(&patch_exe, &request.triple, &cache)?, + jump_table: crate::build::create_jump_table( + &patch_exe, + &request.triple, + &root_dir, + base_path, + &cache, + )?, artifacts: artifacts.into_structured_output(), }) } From 5cdc17c6533aa8ad83b563ad556d80187ba54573 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Tue, 7 Oct 2025 11:39:02 -0500 Subject: [PATCH 24/24] fix request imports --- packages/cli/src/build/request.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/cli/src/build/request.rs b/packages/cli/src/build/request.rs index ec590b2eb8..560143d668 100644 --- a/packages/cli/src/build/request.rs +++ b/packages/cli/src/build/request.rs @@ -321,11 +321,8 @@ use crate::{ verbosity_or_default, AndroidTools, BuildContext, BundleFormat, DioxusConfig, Error, - LinkAction, LinkerFlavor, Renderer, Result, RustcArgs, TargetAlias, TargetArgs, TraceSrc, + LinkAction, LinkerFlavor, Platform, Renderer, Result, RustcArgs, TargetArgs, TraceSrc, WasmBindgen, WasmOptConfig, Workspace, DX_RUSTC_WRAPPER_ENV_VAR, - AndroidTools, BuildContext, BundleFormat, DioxusConfig, Error, LinkAction, LinkerFlavor, - Platform, Renderer, Result, RustcArgs, TargetArgs, TraceSrc, WasmBindgen, WasmOptConfig, - Workspace, DX_RUSTC_WRAPPER_ENV_VAR, }; use anyhow::{bail, Context}; use cargo_metadata::diagnostic::Diagnostic;